[{"data":1,"prerenderedAt":173029},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-01-27-linux-ji-ben-cao-zuo\u002Fch5-ge-zhong-huan-jing-pei-zhi":3,"wiki-doc-nav":35},{"id":4,"title":5,"body":6,"description":27,"extension":28,"meta":29,"navigation":30,"path":31,"seo":32,"stem":33,"__hash__":34},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":8,"toc":23},"minimark",[9,13],[10,11,5],"h1",{"id":12},"_5-各种环境配置",[14,15,16],"p",{},[17,18,22],"a",{"href":19,"rel":20},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[21],"nofollow","电控组环境搭建大全",{"title":24,"searchDepth":25,"depth":25,"links":26},"",2,[],null,"md",{},true,"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":5,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",[36,5152,6260,7680,10669,12020,13509,14598,23361,23373,23971,23997,24121,24362,24427,24445,24458,24505,24629,24798,24997,25177,25382,25518,25613,25650,25663,25973,26714,27422,27443,28463,30094,30245,30258,30270,30571,50383,50398,50415,50448,53320,76668,92813,92834,92947,93068,93838,94501,94862,94900,95006,95106,95149,95175,95236,96890,96991,97016,97507,98007,99087,99370,100112,100614,100626,102642,104306,105809,107507,109424,111343,113365,116835,117267,117730,118479,121423,121771,121785,122141,125448,125460,125863,125886,126033,126200,126405,126706,127263,127920,129851,131449,132098,133592,135023,136258,137952,139704,142114,142230,143165,143376,144261,145496,145724,145737,146892,149304,151672,154993,157470,159114,160891,162904,165956,168136,170663,172857],{"id":37,"title":38,"body":39,"description":24,"extension":28,"meta":5147,"navigation":30,"path":5148,"seo":5149,"stem":5150,"__hash__":5151},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":40,"toc":5119},[41,44,49,52,56,69,73,78,81,84,87,90,93,128,132,135,138,141,144,197,201,220,222,236,239,247,250,1112,1119,1136,1140,1231,1235,1241,1330,1334,1372,1376,1440,1444,1448,1455,1466,1470,1475,1479,1484,1488,1493,1497,1501,1506,1776,1781,1919,1924,2181,2184,2192,2196,2201,2304,2307,2613,2622,2723,2726,2729,2732,2735,2995,3000,3140,3143,3322,3325,3453,3456,3608,3612,3617,3620,3631,3639,3642,3749,3753,3757,3762,3812,3817,3822,3846,3851,3904,3907,3912,4089,4094,4379,4384,4781,4785,4790,4847,4852,4860,4863,5003,5006,5115],[10,42,38],{"id":43},"_1基础入门",[45,46,48],"h2",{"id":47},"_11注释","1.1注释",[14,50,51],{},"\u002F\u002F或者\u002F* *\u002F",[45,53,55],{"id":54},"_12命名","1.2命名",[57,58,59,63,66],"ol",{},[60,61,62],"li",{},"字母数字下划线",[60,64,65],{},"开头必须是字母或_",[60,67,68],{},"不能使用关键词",[45,70,72],{"id":71},"_13数据类型","1.3数据类型",[74,75,77],"h3",{"id":76},"_131整形","1.3.1整形",[14,79,80],{},"short 短整形 2",[14,82,83],{},"int 整形 4",[14,85,86],{},"long 长整形 win4 linux32位4 linux64位8",[14,88,89],{},"long long 长长整形 8",[14,91,92],{},"利用sizeof可以求数据类型占用的内存空间大小",[94,95,99],"pre",{"className":96,"code":97,"language":98,"meta":24,"style":24},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[100,101,102,121],"code",{"__ignoreMap":24},[103,104,107,111,115,118],"span",{"class":105,"line":106},"line",1,[103,108,110],{"class":109},"szBVR","sizeof",[103,112,114],{"class":113},"sVt8B","(",[103,116,117],{"class":109},"int",[103,119,120],{"class":113},")\n",[103,122,123,125],{"class":105,"line":25},[103,124,110],{"class":109},[103,126,127],{"class":113},"(num)\n",[74,129,131],{"id":130},"_132浮点型","1.3.2浮点型",[14,133,134],{},"float 单精度 4节 7位有效数字",[14,136,137],{},"double 双精度 8节 15-16有效数字",[14,139,140],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,142,143],{},"注意点：",[94,145,147],{"className":96,"code":146,"language":98,"meta":24,"style":24},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[100,148,149,174],{"__ignoreMap":24},[103,150,151,154,157,160,164,167,170],{"class":105,"line":106},[103,152,153],{"class":109},"float",[103,155,156],{"class":113}," f1",[103,158,159],{"class":109},"=",[103,161,163],{"class":162},"sj4cs","3.14",[103,165,166],{"class":109},"f",[103,168,169],{"class":113},";",[103,171,173],{"class":172},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[103,175,176,178,181,183,186,189,192,194],{"class":105,"line":25},[103,177,153],{"class":109},[103,179,180],{"class":113}," f2",[103,182,159],{"class":109},[103,184,185],{"class":162},"3",[103,187,188],{"class":109},"e",[103,190,191],{"class":162},"2",[103,193,169],{"class":113},[103,195,196],{"class":172}," \u002F\u002F科学记数法\n",[74,198,200],{"id":199},"_133字符型","1.3.3字符型",[94,202,204],{"className":96,"code":203,"language":98,"meta":24,"style":24},"char ch='a'\n",[100,205,206],{"__ignoreMap":24},[103,207,208,211,214,216],{"class":105,"line":106},[103,209,210],{"class":109},"char",[103,212,213],{"class":113}," ch",[103,215,159],{"class":109},[103,217,219],{"class":218},"sZZnC","'a'\n",[14,221,143],{},[57,223,224,227,230,233],{},[60,225,226],{},"在显示字符型变量时，只能单引号，双引号x",[60,228,229],{},"单引号内只能一个字符，不能字符串",[60,231,232],{},"c和c++字符型变量只占用一个字符",[60,234,235],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,237,238],{},"ASCII码大致由以下两部分组成：",[57,240,241,244],{},[60,242,243],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[60,245,246],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,248,249],{},"ASCII码表格：",[251,252,253,297],"table",{},[254,255,256],"thead",{},[257,258,259,267,272,276,281,285,289,293],"tr",{},[260,261,262,266],"th",{},[263,264,265],"strong",{},"ASCII","值",[260,268,269],{},[263,270,271],{},"控制字符",[260,273,274,266],{},[263,275,265],{},[260,277,278],{},[263,279,280],{},"字符",[260,282,283,266],{},[263,284,265],{},[260,286,287],{},[263,288,280],{},[260,290,291,266],{},[263,292,265],{},[260,294,295],{},[263,296,280],{},[298,299,300,327,352,377,402,428,453,478,504,529,555,581,607,632,658,684,710,734,759,784,809,834,859,884,909,934,959,985,1010,1035,1060,1086],"tbody",{},[257,301,302,306,309,312,315,318,321,324],{},[303,304,305],"td",{},"0",[303,307,308],{},"NUT",[303,310,311],{},"32",[303,313,314],{},"(space)",[303,316,317],{},"64",[303,319,320],{},"@",[303,322,323],{},"96",[303,325,326],{},"、",[257,328,329,332,335,338,341,344,347,350],{},[303,330,331],{},"1",[303,333,334],{},"SOH",[303,336,337],{},"33",[303,339,340],{},"!",[303,342,343],{},"65",[303,345,346],{},"A",[303,348,349],{},"97",[303,351,17],{},[257,353,354,356,359,362,365,368,371,374],{},[303,355,191],{},[303,357,358],{},"STX",[303,360,361],{},"34",[303,363,364],{},"\"",[303,366,367],{},"66",[303,369,370],{},"B",[303,372,373],{},"98",[303,375,376],{},"b",[257,378,379,381,384,387,390,393,396,399],{},[303,380,185],{},[303,382,383],{},"ETX",[303,385,386],{},"35",[303,388,389],{},"#",[303,391,392],{},"67",[303,394,395],{},"C",[303,397,398],{},"99",[303,400,401],{},"c",[257,403,404,407,410,413,416,419,422,425],{},[303,405,406],{},"4",[303,408,409],{},"EOT",[303,411,412],{},"36",[303,414,415],{},"$",[303,417,418],{},"68",[303,420,421],{},"D",[303,423,424],{},"100",[303,426,427],{},"d",[257,429,430,433,436,439,442,445,448,451],{},[303,431,432],{},"5",[303,434,435],{},"ENQ",[303,437,438],{},"37",[303,440,441],{},"%",[303,443,444],{},"69",[303,446,447],{},"E",[303,449,450],{},"101",[303,452,188],{},[257,454,455,458,461,464,467,470,473,476],{},[303,456,457],{},"6",[303,459,460],{},"ACK",[303,462,463],{},"38",[303,465,466],{},"&",[303,468,469],{},"70",[303,471,472],{},"F",[303,474,475],{},"102",[303,477,166],{},[257,479,480,483,486,489,492,495,498,501],{},[303,481,482],{},"7",[303,484,485],{},"BEL",[303,487,488],{},"39",[303,490,491],{},",",[303,493,494],{},"71",[303,496,497],{},"G",[303,499,500],{},"103",[303,502,503],{},"g",[257,505,506,509,512,515,517,520,523,526],{},[303,507,508],{},"8",[303,510,511],{},"BS",[303,513,514],{},"40",[303,516,114],{},[303,518,519],{},"72",[303,521,522],{},"H",[303,524,525],{},"104",[303,527,528],{},"h",[257,530,531,534,537,540,543,546,549,552],{},[303,532,533],{},"9",[303,535,536],{},"HT",[303,538,539],{},"41",[303,541,542],{},")",[303,544,545],{},"73",[303,547,548],{},"I",[303,550,551],{},"105",[303,553,554],{},"i",[257,556,557,560,563,566,569,572,575,578],{},[303,558,559],{},"10",[303,561,562],{},"LF",[303,564,565],{},"42",[303,567,568],{},"*",[303,570,571],{},"74",[303,573,574],{},"J",[303,576,577],{},"106",[303,579,580],{},"j",[257,582,583,586,589,592,595,598,601,604],{},[303,584,585],{},"11",[303,587,588],{},"VT",[303,590,591],{},"43",[303,593,594],{},"+",[303,596,597],{},"75",[303,599,600],{},"K",[303,602,603],{},"107",[303,605,606],{},"k",[257,608,609,612,615,618,620,623,626,629],{},[303,610,611],{},"12",[303,613,614],{},"FF",[303,616,617],{},"44",[303,619,491],{},[303,621,622],{},"76",[303,624,625],{},"L",[303,627,628],{},"108",[303,630,631],{},"l",[257,633,634,637,640,643,646,649,652,655],{},[303,635,636],{},"13",[303,638,639],{},"CR",[303,641,642],{},"45",[303,644,645],{},"-",[303,647,648],{},"77",[303,650,651],{},"M",[303,653,654],{},"109",[303,656,657],{},"m",[257,659,660,663,666,669,672,675,678,681],{},[303,661,662],{},"14",[303,664,665],{},"SO",[303,667,668],{},"46",[303,670,671],{},".",[303,673,674],{},"78",[303,676,677],{},"N",[303,679,680],{},"110",[303,682,683],{},"n",[257,685,686,689,692,695,698,701,704,707],{},[303,687,688],{},"15",[303,690,691],{},"SI",[303,693,694],{},"47",[303,696,697],{},"\u002F",[303,699,700],{},"79",[303,702,703],{},"O",[303,705,706],{},"111",[303,708,709],{},"o",[257,711,712,715,718,721,723,726,729,732],{},[303,713,714],{},"16",[303,716,717],{},"DLE",[303,719,720],{},"48",[303,722,305],{},[303,724,725],{},"80",[303,727,728],{},"P",[303,730,731],{},"112",[303,733,14],{},[257,735,736,739,742,745,747,750,753,756],{},[303,737,738],{},"17",[303,740,741],{},"DCI",[303,743,744],{},"49",[303,746,331],{},[303,748,749],{},"81",[303,751,752],{},"Q",[303,754,755],{},"113",[303,757,758],{},"q",[257,760,761,764,767,770,772,775,778,781],{},[303,762,763],{},"18",[303,765,766],{},"DC2",[303,768,769],{},"50",[303,771,191],{},[303,773,774],{},"82",[303,776,777],{},"R",[303,779,780],{},"114",[303,782,783],{},"r",[257,785,786,789,792,795,797,800,803,806],{},[303,787,788],{},"19",[303,790,791],{},"DC3",[303,793,794],{},"51",[303,796,185],{},[303,798,799],{},"83",[303,801,802],{},"S",[303,804,805],{},"115",[303,807,808],{},"s",[257,810,811,814,817,820,822,825,828,831],{},[303,812,813],{},"20",[303,815,816],{},"DC4",[303,818,819],{},"52",[303,821,406],{},[303,823,824],{},"84",[303,826,827],{},"T",[303,829,830],{},"116",[303,832,833],{},"t",[257,835,836,839,842,845,847,850,853,856],{},[303,837,838],{},"21",[303,840,841],{},"NAK",[303,843,844],{},"53",[303,846,432],{},[303,848,849],{},"85",[303,851,852],{},"U",[303,854,855],{},"117",[303,857,858],{},"u",[257,860,861,864,867,870,872,875,878,881],{},[303,862,863],{},"22",[303,865,866],{},"SYN",[303,868,869],{},"54",[303,871,457],{},[303,873,874],{},"86",[303,876,877],{},"V",[303,879,880],{},"118",[303,882,883],{},"v",[257,885,886,889,892,895,897,900,903,906],{},[303,887,888],{},"23",[303,890,891],{},"TB",[303,893,894],{},"55",[303,896,482],{},[303,898,899],{},"87",[303,901,902],{},"W",[303,904,905],{},"119",[303,907,908],{},"w",[257,910,911,914,917,920,922,925,928,931],{},[303,912,913],{},"24",[303,915,916],{},"CAN",[303,918,919],{},"56",[303,921,508],{},[303,923,924],{},"88",[303,926,927],{},"X",[303,929,930],{},"120",[303,932,933],{},"x",[257,935,936,939,942,945,947,950,953,956],{},[303,937,938],{},"25",[303,940,941],{},"EM",[303,943,944],{},"57",[303,946,533],{},[303,948,949],{},"89",[303,951,952],{},"Y",[303,954,955],{},"121",[303,957,958],{},"y",[257,960,961,964,967,970,973,976,979,982],{},[303,962,963],{},"26",[303,965,966],{},"SUB",[303,968,969],{},"58",[303,971,972],{},":",[303,974,975],{},"90",[303,977,978],{},"Z",[303,980,981],{},"122",[303,983,984],{},"z",[257,986,987,990,993,996,998,1001,1004,1007],{},[303,988,989],{},"27",[303,991,992],{},"ESC",[303,994,995],{},"59",[303,997,169],{},[303,999,1000],{},"91",[303,1002,1003],{},"[",[303,1005,1006],{},"123",[303,1008,1009],{},"{",[257,1011,1012,1015,1018,1021,1024,1027,1029,1032],{},[303,1013,1014],{},"28",[303,1016,1017],{},"FS",[303,1019,1020],{},"60",[303,1022,1023],{},"\u003C",[303,1025,1026],{},"92",[303,1028,697],{},[303,1030,1031],{},"124",[303,1033,1034],{},"|",[257,1036,1037,1040,1043,1046,1048,1051,1054,1057],{},[303,1038,1039],{},"29",[303,1041,1042],{},"GS",[303,1044,1045],{},"61",[303,1047,159],{},[303,1049,1050],{},"93",[303,1052,1053],{},"]",[303,1055,1056],{},"125",[303,1058,1059],{},"}",[257,1061,1062,1065,1068,1071,1074,1077,1080,1083],{},[303,1063,1064],{},"30",[303,1066,1067],{},"RS",[303,1069,1070],{},"62",[303,1072,1073],{},">",[303,1075,1076],{},"94",[303,1078,1079],{},"^",[303,1081,1082],{},"126",[303,1084,1085],{},"`",[257,1087,1088,1091,1094,1097,1100,1103,1106,1109],{},[303,1089,1090],{},"31",[303,1092,1093],{},"US",[303,1095,1096],{},"63",[303,1098,1099],{},"?",[303,1101,1102],{},"95",[303,1104,1105],{},"_",[303,1107,1108],{},"127",[303,1110,1111],{},"DEL",[14,1113,1114,1115,1118],{},"ASCII 码大致由以下",[263,1116,1117],{},"两部分组","成：",[1120,1121,1122,1129],"ul",{},[60,1123,1124,1125,1128],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[263,1126,1127],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[60,1130,1131,1132,1135],{},"ASCII 打印字符：数字 ",[263,1133,1134],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[74,1137,1139],{"id":1138},"_134转义字符","1.3.4转义字符",[94,1141,1143],{"className":96,"code":1142,"language":98,"meta":24,"style":24},"\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",[100,1144,1145,1150,1166,1181,1187,1201,1207],{"__ignoreMap":24},[103,1146,1147],{"class":105,"line":106},[103,1148,1149],{"class":172},"\u002F\u002F换行符\n",[103,1151,1152,1155,1158,1161,1163],{"class":105,"line":25},[103,1153,1154],{"class":113},"cout ",[103,1156,1157],{"class":109},"\u003C\u003C",[103,1159,1160],{"class":218},"\"hello world\u002Fn\"",[103,1162,169],{"class":113},[103,1164,1165],{"class":172}," \u002F\u002F就等同于如下：\n",[103,1167,1169,1171,1173,1176,1178],{"class":105,"line":1168},3,[103,1170,1154],{"class":113},[103,1172,1157],{"class":109},[103,1174,1175],{"class":218},"\"hello world\"",[103,1177,1157],{"class":109},[103,1179,1180],{"class":113},"endl;\n",[103,1182,1184],{"class":105,"line":1183},4,[103,1185,1186],{"class":172},"\u002F\u002F反斜杠\n",[103,1188,1190,1192,1194,1197,1199],{"class":105,"line":1189},5,[103,1191,1154],{"class":113},[103,1193,1157],{"class":109},[103,1195,1196],{"class":218},"\"\u002F\u002F\"",[103,1198,1157],{"class":109},[103,1200,1180],{"class":113},[103,1202,1204],{"class":105,"line":1203},6,[103,1205,1206],{"class":172},"\u002F\u002F水平制表符\n",[103,1208,1210,1212,1214,1217,1220,1223,1225,1228],{"class":105,"line":1209},7,[103,1211,1154],{"class":113},[103,1213,1157],{"class":109},[103,1215,1216],{"class":218},"\"aaaa",[103,1218,1219],{"class":162},"\\t",[103,1221,1222],{"class":218},"helloworld\"",[103,1224,1157],{"class":109},[103,1226,1227],{"class":113},"endl;",[103,1229,1230],{"class":172}," \u002F\u002F输出窗口时有对齐效果\n",[74,1232,1234],{"id":1233},"_135字符串型","1.3.5字符串型",[14,1236,1237,1238,1240],{},"char 变量名",[103,1239],{},"=\"字符串值\"",[94,1242,1244],{"className":96,"code":1243,"language":98,"meta":24,"style":24},"\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",[100,1245,1246,1251,1256,1261,1266,1280,1293,1298,1304,1316],{"__ignoreMap":24},[103,1247,1248],{"class":105,"line":106},[103,1249,1250],{"class":172},"\u002F\u002Fc风格字符串\n",[103,1252,1253],{"class":105,"line":25},[103,1254,1255],{"class":172},"\u002F\u002F注意事项：\n",[103,1257,1258],{"class":105,"line":1168},[103,1259,1260],{"class":172},"\u002F\u002F1.char字符串名[]\n",[103,1262,1263],{"class":105,"line":1183},[103,1264,1265],{"class":172},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[103,1267,1268,1270,1273,1275,1277],{"class":105,"line":1189},[103,1269,210],{"class":109},[103,1271,1272],{"class":113}," str[]",[103,1274,159],{"class":109},[103,1276,1175],{"class":218},[103,1278,1279],{"class":113},";\n",[103,1281,1282,1284,1286,1289,1291],{"class":105,"line":1203},[103,1283,1154],{"class":113},[103,1285,1157],{"class":109},[103,1287,1288],{"class":113},"str",[103,1290,1157],{"class":109},[103,1292,1180],{"class":113},[103,1294,1295],{"class":105,"line":1209},[103,1296,1297],{"class":172},"\u002F\u002Fc++风格字符串\n",[103,1299,1301],{"class":105,"line":1300},8,[103,1302,1303],{"class":172},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[103,1305,1307,1310,1312,1314],{"class":105,"line":1306},9,[103,1308,1309],{"class":113},"string str2",[103,1311,159],{"class":109},[103,1313,1175],{"class":218},[103,1315,1279],{"class":113},[103,1317,1319,1321,1323,1326,1328],{"class":105,"line":1318},10,[103,1320,1154],{"class":113},[103,1322,1157],{"class":109},[103,1324,1325],{"class":113},"str2",[103,1327,1157],{"class":109},[103,1329,1180],{"class":113},[74,1331,1333],{"id":1332},"_136布尔类型bool","1.3.6布尔类型bool",[94,1335,1337],{"className":96,"code":1336,"language":98,"meta":24,"style":24},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[100,1338,1339,1354],{"__ignoreMap":24},[103,1340,1341,1344,1347,1349,1352],{"class":105,"line":106},[103,1342,1343],{"class":109},"bool",[103,1345,1346],{"class":113}," flag",[103,1348,159],{"class":109},[103,1350,1351],{"class":162},"true",[103,1353,1279],{"class":113},[103,1355,1356,1359,1362,1365,1367,1369],{"class":105,"line":25},[103,1357,1358],{"class":113},"cout",[103,1360,1361],{"class":109},"\u003C\u003Csizeof",[103,1363,1364],{"class":113},"(flag)",[103,1366,1157],{"class":109},[103,1368,1227],{"class":113},[103,1370,1371],{"class":172}," \u002F\u002F查看布尔占内存空间\n",[45,1373,1375],{"id":1374},"_14键盘输入cin","1.4键盘输入cin",[94,1377,1379],{"className":96,"code":1378,"language":98,"meta":24,"style":24},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[100,1380,1381,1394,1411,1422],{"__ignoreMap":24},[103,1382,1383,1385,1388,1390,1392],{"class":105,"line":106},[103,1384,117],{"class":109},[103,1386,1387],{"class":113}," a",[103,1389,159],{"class":109},[103,1391,305],{"class":162},[103,1393,1279],{"class":113},[103,1395,1396,1398,1400,1403,1405,1407,1409],{"class":105,"line":25},[103,1397,1358],{"class":113},[103,1399,1157],{"class":109},[103,1401,1402],{"class":218},"\"请给整型变量a赋值\"",[103,1404,1157],{"class":109},[103,1406,17],{"class":113},[103,1408,1157],{"class":109},[103,1410,1180],{"class":113},[103,1412,1413,1416,1419],{"class":105,"line":1168},[103,1414,1415],{"class":113},"cin ",[103,1417,1418],{"class":109},">>",[103,1420,1421],{"class":113}," a;\n",[103,1423,1424,1426,1428,1431,1434,1436,1438],{"class":105,"line":1183},[103,1425,1154],{"class":113},[103,1427,1157],{"class":109},[103,1429,1430],{"class":218}," \"整型变量a=\"",[103,1432,1433],{"class":109}," \u003C\u003C",[103,1435,17],{"class":113},[103,1437,1157],{"class":109},[103,1439,1180],{"class":113},[45,1441,1443],{"id":1442},"_15运算符","1.5运算符",[74,1445,1447],{"id":1446},"_151算术运算符","1.5.1算术运算符",[14,1449,1450,1454],{},[1451,1452],"img",{"alt":24,"src":1453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[57,1456,1457,1460,1463],{},[60,1458,1459],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[60,1461,1462],{},"两个小数不可以做取模运算",[60,1464,1465],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[74,1467,1469],{"id":1468},"_152赋值运算符","1.5.2赋值运算符",[14,1471,1472],{},[1451,1473],{"alt":24,"src":1474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[74,1476,1478],{"id":1477},"_153比较运算符","1.5.3比较运算符",[14,1480,1481],{},[1451,1482],{"alt":24,"src":1483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[74,1485,1487],{"id":1486},"_154逻辑运算符","1.5.4逻辑运算符",[14,1489,1490],{},[1451,1491],{"alt":24,"src":1492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[45,1494,1496],{"id":1495},"_16程序流程结构","1.6程序流程结构",[74,1498,1500],{"id":1499},"_161选择结构","1.6.1选择结构",[57,1502,1503],{},[60,1504,1505],{},"if语句\n单行、多行、多条件if语句",[94,1507,1509],{"className":96,"code":1508,"language":98,"meta":24,"style":24},"\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",[100,1510,1511,1516,1531,1536,1550,1555,1560,1569,1582,1586,1599,1604,1610,1615,1629,1634,1640,1661,1666,1680,1685,1714,1719,1736,1741,1746,1751,1765,1770],{"__ignoreMap":24},[103,1512,1513],{"class":105,"line":106},[103,1514,1515],{"class":172},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[103,1517,1518,1521,1524,1526,1529],{"class":105,"line":25},[103,1519,1520],{"class":109},"if",[103,1522,1523],{"class":113},"(score",[103,1525,1073],{"class":109},[103,1527,1528],{"class":162},"600",[103,1530,120],{"class":113},[103,1532,1533],{"class":105,"line":1168},[103,1534,1535],{"class":113},"{\n",[103,1537,1538,1541,1543,1546,1548],{"class":105,"line":1183},[103,1539,1540],{"class":113},"    cout",[103,1542,1157],{"class":109},[103,1544,1545],{"class":218},"'这是单行if语句'",[103,1547,1157],{"class":109},[103,1549,1180],{"class":113},[103,1551,1552],{"class":105,"line":1189},[103,1553,1554],{"class":113},"}\n",[103,1556,1557],{"class":105,"line":1203},[103,1558,1559],{"class":172},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[103,1561,1562,1564,1566],{"class":105,"line":1209},[103,1563,1415],{"class":113},[103,1565,1418],{"class":109},[103,1567,1568],{"class":113}," score\n",[103,1570,1571,1573,1575,1578,1580],{"class":105,"line":1300},[103,1572,1520],{"class":109},[103,1574,1523],{"class":113},[103,1576,1577],{"class":109},"\u003C=",[103,1579,1528],{"class":162},[103,1581,120],{"class":113},[103,1583,1584],{"class":105,"line":1306},[103,1585,1535],{"class":113},[103,1587,1588,1590,1592,1595,1597],{"class":105,"line":1318},[103,1589,1540],{"class":113},[103,1591,1418],{"class":109},[103,1593,1594],{"class":218},"\"小于等于600\"",[103,1596,1157],{"class":109},[103,1598,1180],{"class":113},[103,1600,1602],{"class":105,"line":1601},11,[103,1603,1554],{"class":113},[103,1605,1607],{"class":105,"line":1606},12,[103,1608,1609],{"class":109},"else\n",[103,1611,1613],{"class":105,"line":1612},13,[103,1614,1535],{"class":113},[103,1616,1618,1620,1622,1625,1627],{"class":105,"line":1617},14,[103,1619,1540],{"class":113},[103,1621,1418],{"class":109},[103,1623,1624],{"class":218},"\"大于600\"",[103,1626,1418],{"class":109},[103,1628,1180],{"class":113},[103,1630,1632],{"class":105,"line":1631},15,[103,1633,1554],{"class":113},[103,1635,1637],{"class":105,"line":1636},16,[103,1638,1639],{"class":172},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[103,1641,1643,1645,1648,1650,1652,1655,1657,1659],{"class":105,"line":1642},17,[103,1644,1520],{"class":109},[103,1646,1647],{"class":113}," (",[103,1649,305],{"class":162},[103,1651,1023],{"class":109},[103,1653,1654],{"class":113},"num",[103,1656,1023],{"class":109},[103,1658,424],{"class":162},[103,1660,120],{"class":113},[103,1662,1664],{"class":105,"line":1663},18,[103,1665,1535],{"class":113},[103,1667,1669,1671,1673,1676,1678],{"class":105,"line":1668},19,[103,1670,1540],{"class":113},[103,1672,1157],{"class":109},[103,1674,1675],{"class":218},"\"小于100\"",[103,1677,1157],{"class":109},[103,1679,1180],{"class":113},[103,1681,1683],{"class":105,"line":1682},20,[103,1684,1554],{"class":113},[103,1686,1688,1691,1694,1697,1700,1702,1705,1707,1709,1712],{"class":105,"line":1687},21,[103,1689,1690],{"class":109},"else",[103,1692,1693],{"class":109}," if",[103,1695,1696],{"class":113}," (nmu",[103,1698,1699],{"class":109},">=",[103,1701,424],{"class":162},[103,1703,1704],{"class":109},"&&",[103,1706,1654],{"class":113},[103,1708,1023],{"class":109},[103,1710,1711],{"class":162},"200",[103,1713,120],{"class":113},[103,1715,1717],{"class":105,"line":1716},22,[103,1718,1535],{"class":113},[103,1720,1722,1724,1726,1729,1731,1733],{"class":105,"line":1721},23,[103,1723,1540],{"class":113},[103,1725,1157],{"class":109},[103,1727,1728],{"class":218},"\"不小于100且小于200\"",[103,1730,1157],{"class":109},[103,1732,1227],{"class":113},[103,1734,1735],{"class":172}," \u002F\u002F可以无限else if,python中是elif：\n",[103,1737,1739],{"class":105,"line":1738},24,[103,1740,1554],{"class":113},[103,1742,1744],{"class":105,"line":1743},25,[103,1745,1609],{"class":109},[103,1747,1749],{"class":105,"line":1748},26,[103,1750,1535],{"class":113},[103,1752,1754,1756,1758,1761,1763],{"class":105,"line":1753},27,[103,1755,1540],{"class":113},[103,1757,1157],{"class":109},[103,1759,1760],{"class":218},"\"不小于200\"",[103,1762,1157],{"class":109},[103,1764,1180],{"class":113},[103,1766,1768],{"class":105,"line":1767},28,[103,1769,1554],{"class":113},[103,1771,1773],{"class":105,"line":1772},29,[103,1774,1775],{"class":172},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[57,1777,1778],{"start":25},[60,1779,1780],{},"三目运算符",[94,1782,1784],{"className":96,"code":1783,"language":98,"meta":24,"style":24},"\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",[100,1785,1786,1791,1796,1822,1844,1861,1866,1889,1904],{"__ignoreMap":24},[103,1787,1788],{"class":105,"line":106},[103,1789,1790],{"class":172},"\u002F\u002F创建三个变量a,b,c\n",[103,1792,1793],{"class":105,"line":25},[103,1794,1795],{"class":172},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[103,1797,1798,1800,1802,1804,1806,1809,1811,1813,1816,1818,1820],{"class":105,"line":1168},[103,1799,117],{"class":109},[103,1801,1387],{"class":113},[103,1803,159],{"class":109},[103,1805,813],{"class":162},[103,1807,1808],{"class":113},",b",[103,1810,159],{"class":109},[103,1812,559],{"class":162},[103,1814,1815],{"class":113},",c",[103,1817,159],{"class":109},[103,1819,305],{"class":162},[103,1821,1279],{"class":113},[103,1823,1824,1826,1828,1831,1833,1835,1837,1839,1841],{"class":105,"line":1183},[103,1825,401],{"class":113},[103,1827,159],{"class":109},[103,1829,1830],{"class":113},"(a",[103,1832,1073],{"class":109},[103,1834,376],{"class":113},[103,1836,1099],{"class":109},[103,1838,17],{"class":113},[103,1840,972],{"class":109},[103,1842,1843],{"class":113},"b)\n",[103,1845,1846,1848,1850,1853,1855,1857,1859],{"class":105,"line":1189},[103,1847,1358],{"class":113},[103,1849,1157],{"class":109},[103,1851,1852],{"class":218},"\"c=\"",[103,1854,1157],{"class":109},[103,1856,401],{"class":113},[103,1858,1157],{"class":109},[103,1860,1180],{"class":113},[103,1862,1863],{"class":105,"line":1203},[103,1864,1865],{"class":172},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[103,1867,1868,1870,1872,1874,1876,1878,1880,1883,1885,1887],{"class":105,"line":1209},[103,1869,1830],{"class":113},[103,1871,1073],{"class":109},[103,1873,376],{"class":113},[103,1875,1099],{"class":109},[103,1877,17],{"class":113},[103,1879,972],{"class":109},[103,1881,1882],{"class":113},"b)",[103,1884,159],{"class":109},[103,1886,424],{"class":162},[103,1888,1279],{"class":113},[103,1890,1891,1893,1895,1897,1899,1901],{"class":105,"line":1300},[103,1892,1358],{"class":113},[103,1894,1157],{"class":109},[103,1896,17],{"class":113},[103,1898,1157],{"class":109},[103,1900,1227],{"class":113},[103,1902,1903],{"class":172}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[103,1905,1906,1908,1910,1912,1914,1916],{"class":105,"line":1306},[103,1907,1358],{"class":113},[103,1909,1157],{"class":109},[103,1911,376],{"class":113},[103,1913,1157],{"class":109},[103,1915,1227],{"class":113},[103,1917,1918],{"class":172}," \u002F\u002F10   a>b,b还是原值\n",[57,1920,1921],{"start":1168},[60,1922,1923],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[94,1925,1927],{"className":96,"code":1926,"language":98,"meta":24,"style":24},"\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",[100,1928,1929,1934,1942,1956,1966,1970,1984,1997,2007,2015,2020,2045,2066,2088,2109,2131,2152,2172,2177],{"__ignoreMap":24},[103,1930,1931],{"class":105,"line":106},[103,1932,1933],{"class":172},"\u002F\u002F案例-电影打分\n",[103,1935,1936,1939],{"class":105,"line":25},[103,1937,1938],{"class":109},"#include",[103,1940,1941],{"class":218},"\u003Ciostream>\n",[103,1943,1944,1947,1950,1954],{"class":105,"line":1168},[103,1945,1946],{"class":109},"using",[103,1948,1949],{"class":109}," namespace",[103,1951,1953],{"class":1952},"sScJk"," std",[103,1955,1279],{"class":113},[103,1957,1958,1960,1963],{"class":105,"line":1183},[103,1959,117],{"class":109},[103,1961,1962],{"class":1952}," main",[103,1964,1965],{"class":113},"()\n",[103,1967,1968],{"class":105,"line":1189},[103,1969,1535],{"class":113},[103,1971,1972,1975,1978,1980,1982],{"class":105,"line":1203},[103,1973,1974],{"class":109},"    int",[103,1976,1977],{"class":113}," score",[103,1979,159],{"class":109},[103,1981,305],{"class":162},[103,1983,1279],{"class":113},[103,1985,1986,1988,1990,1993,1995],{"class":105,"line":1209},[103,1987,1540],{"class":113},[103,1989,1157],{"class":109},[103,1991,1992],{"class":218},"\"电影打分：\"",[103,1994,1157],{"class":109},[103,1996,1180],{"class":113},[103,1998,1999,2002,2004],{"class":105,"line":1300},[103,2000,2001],{"class":113},"    cin",[103,2003,1418],{"class":109},[103,2005,2006],{"class":113},"score;\n",[103,2008,2009,2012],{"class":105,"line":1306},[103,2010,2011],{"class":109},"    switch",[103,2013,2014],{"class":113},"(score)\n",[103,2016,2017],{"class":105,"line":1318},[103,2018,2019],{"class":113},"    {\n",[103,2021,2022,2025,2028,2031,2033,2036,2038,2040,2043],{"class":105,"line":1601},[103,2023,2024],{"class":109},"        case",[103,2026,2027],{"class":162}," 10",[103,2029,2030],{"class":113},":cout",[103,2032,1157],{"class":109},[103,2034,2035],{"class":218},"\"经典\"",[103,2037,1157],{"class":109},[103,2039,1227],{"class":113},[103,2041,2042],{"class":109},"break",[103,2044,1279],{"class":113},[103,2046,2047,2049,2052,2054,2056,2058,2060,2062,2064],{"class":105,"line":1606},[103,2048,2024],{"class":109},[103,2050,2051],{"class":162}," 9",[103,2053,2030],{"class":113},[103,2055,1157],{"class":109},[103,2057,2035],{"class":218},[103,2059,1157],{"class":109},[103,2061,1227],{"class":113},[103,2063,2042],{"class":109},[103,2065,1279],{"class":113},[103,2067,2068,2070,2073,2075,2077,2080,2082,2084,2086],{"class":105,"line":1612},[103,2069,2024],{"class":109},[103,2071,2072],{"class":162}," 8",[103,2074,2030],{"class":113},[103,2076,1157],{"class":109},[103,2078,2079],{"class":218},"\"非常好\"",[103,2081,1157],{"class":109},[103,2083,1227],{"class":113},[103,2085,2042],{"class":109},[103,2087,1279],{"class":113},[103,2089,2090,2092,2095,2097,2099,2101,2103,2105,2107],{"class":105,"line":1617},[103,2091,2024],{"class":109},[103,2093,2094],{"class":162}," 7",[103,2096,2030],{"class":113},[103,2098,1157],{"class":109},[103,2100,2079],{"class":218},[103,2102,1157],{"class":109},[103,2104,1227],{"class":113},[103,2106,2042],{"class":109},[103,2108,1279],{"class":113},[103,2110,2111,2113,2116,2118,2120,2123,2125,2127,2129],{"class":105,"line":1631},[103,2112,2024],{"class":109},[103,2114,2115],{"class":162}," 6",[103,2117,2030],{"class":113},[103,2119,1157],{"class":109},[103,2121,2122],{"class":218},"\"一般\"",[103,2124,1157],{"class":109},[103,2126,1227],{"class":113},[103,2128,2042],{"class":109},[103,2130,1279],{"class":113},[103,2132,2133,2135,2138,2140,2142,2144,2146,2148,2150],{"class":105,"line":1636},[103,2134,2024],{"class":109},[103,2136,2137],{"class":162}," 5",[103,2139,2030],{"class":113},[103,2141,1157],{"class":109},[103,2143,2122],{"class":218},[103,2145,1157],{"class":109},[103,2147,1227],{"class":113},[103,2149,2042],{"class":109},[103,2151,1279],{"class":113},[103,2153,2154,2157,2159,2161,2164,2166,2168,2170],{"class":105,"line":1642},[103,2155,2156],{"class":109},"        default",[103,2158,2030],{"class":113},[103,2160,1157],{"class":109},[103,2162,2163],{"class":218},"\"烂片\"",[103,2165,1157],{"class":109},[103,2167,1227],{"class":113},[103,2169,2042],{"class":109},[103,2171,1279],{"class":113},[103,2173,2174],{"class":105,"line":1663},[103,2175,2176],{"class":113},"    }\n",[103,2178,2179],{"class":105,"line":1668},[103,2180,1554],{"class":113},[14,2182,2183],{},"if和switch区别：",[1120,2185,2186,2189],{},[60,2187,2188],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[60,2190,2191],{},"switch优点：结构清晰，执行效率高",[74,2193,2195],{"id":2194},"_162循环结构","1.6.2循环结构",[57,2197,2198],{},[60,2199,2200],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[94,2202,2204],{"className":96,"code":2203,"language":98,"meta":24,"style":24},"\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",[100,2205,2206,2211,2219,2223,2236,2250,2254,2274,2284,2288,2300],{"__ignoreMap":24},[103,2207,2208],{"class":105,"line":106},[103,2209,2210],{"class":172},"\u002F\u002F打印0-9数字\n",[103,2212,2213,2215,2217],{"class":105,"line":25},[103,2214,117],{"class":109},[103,2216,1962],{"class":1952},[103,2218,1965],{"class":113},[103,2220,2221],{"class":105,"line":1168},[103,2222,1535],{"class":113},[103,2224,2225,2227,2230,2232,2234],{"class":105,"line":1183},[103,2226,1974],{"class":109},[103,2228,2229],{"class":113}," num",[103,2231,159],{"class":109},[103,2233,305],{"class":162},[103,2235,1279],{"class":113},[103,2237,2238,2241,2244,2246,2248],{"class":105,"line":1189},[103,2239,2240],{"class":109},"    while",[103,2242,2243],{"class":113},"(num",[103,2245,1023],{"class":109},[103,2247,559],{"class":162},[103,2249,120],{"class":113},[103,2251,2252],{"class":105,"line":1203},[103,2253,2019],{"class":113},[103,2255,2256,2259,2262,2264,2266,2268,2271],{"class":105,"line":1209},[103,2257,2258],{"class":1952},"       std",[103,2260,2261],{"class":113},"::cout",[103,2263,1157],{"class":109},[103,2265,1654],{"class":113},[103,2267,1157],{"class":109},[103,2269,2270],{"class":1952},"std",[103,2272,2273],{"class":113},"::endl;\n",[103,2275,2276,2279,2282],{"class":105,"line":1300},[103,2277,2278],{"class":113},"        num",[103,2280,2281],{"class":109},"++",[103,2283,1279],{"class":113},[103,2285,2286],{"class":105,"line":1306},[103,2287,2176],{"class":113},[103,2289,2290,2293,2295,2298],{"class":105,"line":1318},[103,2291,2292],{"class":1952},"    system",[103,2294,114],{"class":113},[103,2296,2297],{"class":218},"\"pause\"",[103,2299,120],{"class":113},[103,2301,2302],{"class":105,"line":1601},[103,2303,1554],{"class":113},[14,2305,2306],{},"注意：写好循环条件，避免死循环情况",[94,2308,2310],{"className":96,"code":2309,"language":98,"meta":24,"style":24},"\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",[100,2311,2312,2317,2324,2331,2341,2349,2353,2358,2385,2390,2395,2403,2430,2435,2440,2453,2463,2467,2477,2482,2495,2500,2514,2519,2534,2538,2551,2555,2560,2564,2578,2586,2591,2597,2603,2608],{"__ignoreMap":24},[103,2313,2314],{"class":105,"line":106},[103,2315,2316],{"class":172},"\u002F\u002F循环结构-猜数字\n",[103,2318,2319,2321],{"class":105,"line":25},[103,2320,1938],{"class":109},[103,2322,2323],{"class":218}," \u003Ciostream>\n",[103,2325,2326,2328],{"class":105,"line":1168},[103,2327,1938],{"class":109},[103,2329,2330],{"class":218}," \u003Cctime>\n",[103,2332,2333,2335,2337,2339],{"class":105,"line":1183},[103,2334,1946],{"class":109},[103,2336,1949],{"class":109},[103,2338,1953],{"class":1952},[103,2340,1279],{"class":113},[103,2342,2343,2345,2347],{"class":105,"line":1189},[103,2344,117],{"class":109},[103,2346,1962],{"class":1952},[103,2348,1965],{"class":113},[103,2350,2351],{"class":105,"line":1203},[103,2352,1535],{"class":113},[103,2354,2355],{"class":105,"line":1209},[103,2356,2357],{"class":172},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[103,2359,2360,2363,2366,2369,2372,2374,2377,2379,2382],{"class":105,"line":1300},[103,2361,2362],{"class":1952},"    srand",[103,2364,2365],{"class":113},"((",[103,2367,2368],{"class":109},"unsigned",[103,2370,2371],{"class":109}," int",[103,2373,542],{"class":113},[103,2375,2376],{"class":1952},"time",[103,2378,114],{"class":113},[103,2380,2381],{"class":162},"NULL",[103,2383,2384],{"class":113},"));\n",[103,2386,2387],{"class":105,"line":1306},[103,2388,2389],{"emptyLinePlaceholder":30},"\n",[103,2391,2392],{"class":105,"line":1318},[103,2393,2394],{"class":172},"    \u002F\u002F1.系统生成随机数\n",[103,2396,2397,2400],{"class":105,"line":1601},[103,2398,2399],{"class":172},"    \u002F\u002Frand()%100",[103,2401,2402],{"class":172}," \u002F\u002F生成0-99的随机数\n",[103,2404,2405,2407,2409,2411,2414,2417,2419,2421,2423,2425,2427],{"class":105,"line":1606},[103,2406,1974],{"class":109},[103,2408,2229],{"class":113},[103,2410,159],{"class":109},[103,2412,2413],{"class":1952},"rand",[103,2415,2416],{"class":113},"()",[103,2418,441],{"class":109},[103,2420,424],{"class":162},[103,2422,594],{"class":109},[103,2424,331],{"class":162},[103,2426,169],{"class":113},[103,2428,2429],{"class":172}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[103,2431,2432],{"class":105,"line":1612},[103,2433,2434],{"class":172},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[103,2436,2437],{"class":105,"line":1617},[103,2438,2439],{"class":172},"    \u002F\u002F2.玩家猜测\n",[103,2441,2442,2444,2447,2449,2451],{"class":105,"line":1631},[103,2443,1974],{"class":109},[103,2445,2446],{"class":113}," val",[103,2448,159],{"class":109},[103,2450,305],{"class":162},[103,2452,1279],{"class":113},[103,2454,2455,2457,2459,2461],{"class":105,"line":1636},[103,2456,2240],{"class":109},[103,2458,1647],{"class":113},[103,2460,331],{"class":162},[103,2462,120],{"class":113},[103,2464,2465],{"class":105,"line":1642},[103,2466,2019],{"class":113},[103,2468,2469,2472,2474],{"class":105,"line":1663},[103,2470,2471],{"class":113},"        cin",[103,2473,1418],{"class":109},[103,2475,2476],{"class":113},"val;\n",[103,2478,2479],{"class":105,"line":1668},[103,2480,2481],{"class":172},"        \u002F\u002F3.判断玩家猜测\n",[103,2483,2484,2487,2490,2492],{"class":105,"line":1682},[103,2485,2486],{"class":109},"        if",[103,2488,2489],{"class":113},"(val",[103,2491,1023],{"class":109},[103,2493,2494],{"class":113},"num) \n",[103,2496,2497],{"class":105,"line":1687},[103,2498,2499],{"class":113},"        {\n",[103,2501,2502,2505,2507,2510,2512],{"class":105,"line":1716},[103,2503,2504],{"class":113},"            cout",[103,2506,1157],{"class":109},[103,2508,2509],{"class":218},"\"猜小了！\"",[103,2511,1157],{"class":109},[103,2513,1180],{"class":113},[103,2515,2516],{"class":105,"line":1721},[103,2517,2518],{"class":113},"        }\n",[103,2520,2521,2524,2526,2529,2531],{"class":105,"line":1738},[103,2522,2523],{"class":109},"        else",[103,2525,1693],{"class":109},[103,2527,2528],{"class":113}," (val",[103,2530,1073],{"class":109},[103,2532,2533],{"class":113},"num)\n",[103,2535,2536],{"class":105,"line":1743},[103,2537,2499],{"class":113},[103,2539,2540,2542,2544,2547,2549],{"class":105,"line":1748},[103,2541,2504],{"class":113},[103,2543,1157],{"class":109},[103,2545,2546],{"class":218},"\"猜大了！\"",[103,2548,1157],{"class":109},[103,2550,1180],{"class":113},[103,2552,2553],{"class":105,"line":1753},[103,2554,2518],{"class":113},[103,2556,2557],{"class":105,"line":1767},[103,2558,2559],{"class":109},"        else\n",[103,2561,2562],{"class":105,"line":1772},[103,2563,2499],{"class":113},[103,2565,2567,2569,2571,2574,2576],{"class":105,"line":2566},30,[103,2568,2504],{"class":113},[103,2570,1157],{"class":109},[103,2572,2573],{"class":218},"\"猜对了！\"",[103,2575,1157],{"class":109},[103,2577,1180],{"class":113},[103,2579,2581,2584],{"class":105,"line":2580},31,[103,2582,2583],{"class":109},"            break",[103,2585,1279],{"class":113},[103,2587,2589],{"class":105,"line":2588},32,[103,2590,2518],{"class":113},[103,2592,2594],{"class":105,"line":2593},33,[103,2595,2596],{"class":172},"        \u002F\u002F猜对 退出游戏\n",[103,2598,2600],{"class":105,"line":2599},34,[103,2601,2602],{"class":172},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[103,2604,2606],{"class":105,"line":2605},35,[103,2607,2176],{"class":113},[103,2609,2611],{"class":105,"line":2610},36,[103,2612,1554],{"class":113},[57,2614,2615],{"start":25},[60,2616,2617,2618,2621],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[263,2619,2620],{},"do...while会先执行一次循环语句","，在判断循环语句",[94,2623,2625],{"className":96,"code":2624,"language":98,"meta":24,"style":24},"\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",[100,2626,2627,2632,2640,2644,2656,2664,2668,2685,2692,2696,2709,2719],{"__ignoreMap":24},[103,2628,2629],{"class":105,"line":106},[103,2630,2631],{"class":172},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[103,2633,2634,2636,2638],{"class":105,"line":25},[103,2635,117],{"class":109},[103,2637,1962],{"class":1952},[103,2639,1965],{"class":113},[103,2641,2642],{"class":105,"line":1168},[103,2643,1535],{"class":113},[103,2645,2646,2648,2650,2652,2654],{"class":105,"line":1183},[103,2647,1974],{"class":109},[103,2649,2229],{"class":113},[103,2651,159],{"class":109},[103,2653,305],{"class":162},[103,2655,1279],{"class":113},[103,2657,2658,2661],{"class":105,"line":1189},[103,2659,2660],{"class":109},"    do",[103,2662,2663],{"class":113}," \n",[103,2665,2666],{"class":105,"line":1203},[103,2667,2019],{"class":113},[103,2669,2670,2673,2675,2677,2679,2681,2683],{"class":105,"line":1209},[103,2671,2672],{"class":1952},"        std",[103,2674,2261],{"class":113},[103,2676,1157],{"class":109},[103,2678,1654],{"class":113},[103,2680,1157],{"class":109},[103,2682,2270],{"class":1952},[103,2684,2273],{"class":113},[103,2686,2687,2689],{"class":105,"line":1300},[103,2688,2278],{"class":113},[103,2690,2691],{"class":109},"++\n",[103,2693,2694],{"class":105,"line":1306},[103,2695,2176],{"class":113},[103,2697,2698,2700,2702,2704,2706],{"class":105,"line":1318},[103,2699,2240],{"class":109},[103,2701,2243],{"class":113},[103,2703,1023],{"class":109},[103,2705,559],{"class":162},[103,2707,2708],{"class":113},");\n",[103,2710,2711,2713,2715,2717],{"class":105,"line":1601},[103,2712,2292],{"class":1952},[103,2714,114],{"class":113},[103,2716,2297],{"class":218},[103,2718,2708],{"class":113},[103,2720,2721],{"class":105,"line":1606},[103,2722,1554],{"class":113},[14,2724,2725],{},"案例-水仙花数",[14,2727,2728],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2730,2731],{},"例如：1^3+5^3+3^3=153",[14,2733,2734],{},"请用do...while语句，求出所有3位数的水仙花数",[94,2736,2738],{"className":96,"code":2737,"language":98,"meta":24,"style":24},"#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",[100,2739,2740,2746,2756,2764,2768,2773,2785,2791,2795,2800,2816,2832,2848,2863,2882,2897,2945,2949,2961,2965,2973,2977,2991],{"__ignoreMap":24},[103,2741,2742,2744],{"class":105,"line":106},[103,2743,1938],{"class":109},[103,2745,2323],{"class":218},[103,2747,2748,2750,2752,2754],{"class":105,"line":25},[103,2749,1946],{"class":109},[103,2751,1949],{"class":109},[103,2753,1953],{"class":1952},[103,2755,1279],{"class":113},[103,2757,2758,2760,2762],{"class":105,"line":1168},[103,2759,117],{"class":109},[103,2761,1962],{"class":1952},[103,2763,1965],{"class":113},[103,2765,2766],{"class":105,"line":1183},[103,2767,1535],{"class":113},[103,2769,2770],{"class":105,"line":1189},[103,2771,2772],{"class":172},"    \u002F\u002F1.先打印所有三位数字\n",[103,2774,2775,2777,2779,2781,2783],{"class":105,"line":1203},[103,2776,1974],{"class":109},[103,2778,2229],{"class":113},[103,2780,159],{"class":109},[103,2782,424],{"class":162},[103,2784,1279],{"class":113},[103,2786,2787,2789],{"class":105,"line":1209},[103,2788,2660],{"class":109},[103,2790,2663],{"class":113},[103,2792,2793],{"class":105,"line":1300},[103,2794,2019],{"class":113},[103,2796,2797],{"class":105,"line":1306},[103,2798,2799],{"class":172},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[103,2801,2802,2805,2807,2809,2811,2813],{"class":105,"line":1318},[103,2803,2804],{"class":109},"        int",[103,2806,1387],{"class":113},[103,2808,159],{"class":109},[103,2810,305],{"class":162},[103,2812,169],{"class":113},[103,2814,2815],{"class":172}," \u002F\u002F个位\n",[103,2817,2818,2820,2823,2825,2827,2829],{"class":105,"line":1601},[103,2819,2804],{"class":109},[103,2821,2822],{"class":113}," b",[103,2824,159],{"class":109},[103,2826,305],{"class":162},[103,2828,169],{"class":113},[103,2830,2831],{"class":172}," \u002F\u002F十位\n",[103,2833,2834,2836,2839,2841,2843,2845],{"class":105,"line":1606},[103,2835,2804],{"class":109},[103,2837,2838],{"class":113}," c",[103,2840,159],{"class":109},[103,2842,305],{"class":162},[103,2844,169],{"class":113},[103,2846,2847],{"class":172}," \u002F\u002F百位\n",[103,2849,2850,2853,2855,2857,2859,2861],{"class":105,"line":1612},[103,2851,2852],{"class":113},"        a",[103,2854,159],{"class":109},[103,2856,1654],{"class":113},[103,2858,441],{"class":109},[103,2860,559],{"class":162},[103,2862,1279],{"class":113},[103,2864,2865,2868,2870,2872,2874,2876,2878,2880],{"class":105,"line":1617},[103,2866,2867],{"class":113},"        b",[103,2869,159],{"class":109},[103,2871,1654],{"class":113},[103,2873,697],{"class":109},[103,2875,559],{"class":162},[103,2877,441],{"class":109},[103,2879,559],{"class":162},[103,2881,1279],{"class":113},[103,2883,2884,2887,2889,2891,2893,2895],{"class":105,"line":1631},[103,2885,2886],{"class":113},"        c",[103,2888,159],{"class":109},[103,2890,1654],{"class":113},[103,2892,697],{"class":109},[103,2894,424],{"class":162},[103,2896,1279],{"class":113},[103,2898,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2936,2939,2942],{"class":105,"line":1636},[103,2900,2486],{"class":109},[103,2902,1830],{"class":113},[103,2904,568],{"class":109},[103,2906,17],{"class":113},[103,2908,568],{"class":109},[103,2910,17],{"class":113},[103,2912,594],{"class":109},[103,2914,376],{"class":113},[103,2916,568],{"class":109},[103,2918,376],{"class":113},[103,2920,568],{"class":109},[103,2922,376],{"class":113},[103,2924,594],{"class":109},[103,2926,401],{"class":113},[103,2928,568],{"class":109},[103,2930,401],{"class":113},[103,2932,568],{"class":109},[103,2934,2935],{"class":113},"c ",[103,2937,2938],{"class":109},"==",[103,2940,2941],{"class":113}," num)",[103,2943,2944],{"class":172}," \u002F\u002F如果是水仙花数，才打印\n",[103,2946,2947],{"class":105,"line":1642},[103,2948,2499],{"class":113},[103,2950,2951,2953,2955,2957,2959],{"class":105,"line":1663},[103,2952,2504],{"class":113},[103,2954,1157],{"class":109},[103,2956,1654],{"class":113},[103,2958,1157],{"class":109},[103,2960,1180],{"class":113},[103,2962,2963],{"class":105,"line":1668},[103,2964,2518],{"class":113},[103,2966,2967,2969,2971],{"class":105,"line":1682},[103,2968,2278],{"class":113},[103,2970,2281],{"class":109},[103,2972,1279],{"class":113},[103,2974,2975],{"class":105,"line":1687},[103,2976,2176],{"class":113},[103,2978,2979,2981,2984,2986,2989],{"class":105,"line":1716},[103,2980,2240],{"class":109},[103,2982,2983],{"class":113}," (num ",[103,2985,1023],{"class":109},[103,2987,2988],{"class":162}," 1000",[103,2990,2708],{"class":113},[103,2992,2993],{"class":105,"line":1721},[103,2994,1554],{"class":113},[57,2996,2997],{"start":1168},[60,2998,2999],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[94,3001,3003],{"className":96,"code":3002,"language":98,"meta":24,"style":24},"\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",[100,3004,3005,3010,3039,3043,3055,3059,3064,3075,3082,3086,3100,3104,3111,3115,3127,3136],{"__ignoreMap":24},[103,3006,3007],{"class":105,"line":106},[103,3008,3009],{"class":172},"\u002F\u002F从数字0-9打印\n",[103,3011,3012,3015,3017,3019,3022,3024,3026,3029,3031,3033,3035,3037],{"class":105,"line":25},[103,3013,3014],{"class":109},"for",[103,3016,114],{"class":113},[103,3018,117],{"class":109},[103,3020,3021],{"class":113}," i",[103,3023,159],{"class":109},[103,3025,305],{"class":162},[103,3027,3028],{"class":113},";i",[103,3030,1023],{"class":109},[103,3032,559],{"class":162},[103,3034,3028],{"class":113},[103,3036,2281],{"class":109},[103,3038,120],{"class":113},[103,3040,3041],{"class":105,"line":1168},[103,3042,1535],{"class":113},[103,3044,3045,3047,3049,3051,3053],{"class":105,"line":1183},[103,3046,1540],{"class":113},[103,3048,1157],{"class":109},[103,3050,554],{"class":113},[103,3052,1157],{"class":109},[103,3054,1180],{"class":113},[103,3056,3057],{"class":105,"line":1189},[103,3058,1554],{"class":113},[103,3060,3061],{"class":105,"line":1203},[103,3062,3063],{"class":172},"\u002F\u002F上式可以进行拆分\n",[103,3065,3066,3068,3070,3072],{"class":105,"line":1209},[103,3067,117],{"class":109},[103,3069,3021],{"class":113},[103,3071,159],{"class":109},[103,3073,3074],{"class":162},"0\n",[103,3076,3077,3079],{"class":105,"line":1300},[103,3078,3014],{"class":109},[103,3080,3081],{"class":113},"(;;;)\n",[103,3083,3084],{"class":105,"line":1306},[103,3085,1535],{"class":113},[103,3087,3088,3091,3094,3096,3098],{"class":105,"line":1318},[103,3089,3090],{"class":109},"    if",[103,3092,3093],{"class":113},"(i",[103,3095,1699],{"class":109},[103,3097,559],{"class":162},[103,3099,120],{"class":113},[103,3101,3102],{"class":105,"line":1601},[103,3103,2019],{"class":113},[103,3105,3106,3109],{"class":105,"line":1606},[103,3107,3108],{"class":109},"        break",[103,3110,1279],{"class":113},[103,3112,3113],{"class":105,"line":1612},[103,3114,2176],{"class":113},[103,3116,3117,3119,3121,3123,3125],{"class":105,"line":1617},[103,3118,1540],{"class":113},[103,3120,1157],{"class":109},[103,3122,554],{"class":113},[103,3124,1157],{"class":109},[103,3126,1180],{"class":113},[103,3128,3129,3132,3134],{"class":105,"line":1631},[103,3130,3131],{"class":113},"    i",[103,3133,2281],{"class":109},[103,3135,1279],{"class":113},[103,3137,3138],{"class":105,"line":1636},[103,3139,1554],{"class":113},[14,3141,3142],{},"小练习",[94,3144,3146],{"className":96,"code":3145,"language":98,"meta":24,"style":24},"#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",[100,3147,3148,3154,3164,3172,3176,3181,3186,3214,3218,3223,3228,3269,3273,3286,3290,3294,3298,3310,3314,3318],{"__ignoreMap":24},[103,3149,3150,3152],{"class":105,"line":106},[103,3151,1938],{"class":109},[103,3153,1941],{"class":218},[103,3155,3156,3158,3160,3162],{"class":105,"line":25},[103,3157,1946],{"class":109},[103,3159,1949],{"class":109},[103,3161,1953],{"class":1952},[103,3163,1279],{"class":113},[103,3165,3166,3168,3170],{"class":105,"line":1168},[103,3167,117],{"class":109},[103,3169,1962],{"class":1952},[103,3171,1965],{"class":113},[103,3173,3174],{"class":105,"line":1183},[103,3175,1535],{"class":113},[103,3177,3178],{"class":105,"line":1189},[103,3179,3180],{"class":172},"    \u002F\u002F敲桌子案例\n",[103,3182,3183],{"class":105,"line":1203},[103,3184,3185],{"class":172},"    \u002F\u002F1.先输出1-100的数字\n",[103,3187,3188,3191,3193,3195,3197,3199,3201,3204,3206,3208,3210,3212],{"class":105,"line":1209},[103,3189,3190],{"class":109},"    for",[103,3192,114],{"class":113},[103,3194,117],{"class":109},[103,3196,3021],{"class":113},[103,3198,159],{"class":109},[103,3200,331],{"class":162},[103,3202,3203],{"class":113},"; i",[103,3205,1577],{"class":109},[103,3207,424],{"class":162},[103,3209,3203],{"class":113},[103,3211,2281],{"class":109},[103,3213,120],{"class":113},[103,3215,3216],{"class":105,"line":1300},[103,3217,2019],{"class":113},[103,3219,3220],{"class":105,"line":1306},[103,3221,3222],{"class":172},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[103,3224,3225],{"class":105,"line":1318},[103,3226,3227],{"class":172},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[103,3229,3230,3232,3234,3236,3238,3240,3242,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267],{"class":105,"line":1601},[103,3231,2486],{"class":109},[103,3233,3093],{"class":113},[103,3235,441],{"class":109},[103,3237,482],{"class":162},[103,3239,2938],{"class":109},[103,3241,305],{"class":162},[103,3243,3244],{"class":109}," ||",[103,3246,3021],{"class":113},[103,3248,441],{"class":109},[103,3250,559],{"class":162},[103,3252,2938],{"class":109},[103,3254,482],{"class":162},[103,3256,3244],{"class":109},[103,3258,3021],{"class":113},[103,3260,697],{"class":109},[103,3262,559],{"class":162},[103,3264,2938],{"class":109},[103,3266,482],{"class":162},[103,3268,120],{"class":113},[103,3270,3271],{"class":105,"line":1606},[103,3272,2499],{"class":113},[103,3274,3275,3277,3279,3282,3284],{"class":105,"line":1612},[103,3276,2504],{"class":113},[103,3278,1157],{"class":109},[103,3280,3281],{"class":218},"\"敲桌子\"",[103,3283,1157],{"class":109},[103,3285,1180],{"class":113},[103,3287,3288],{"class":105,"line":1617},[103,3289,2518],{"class":113},[103,3291,3292],{"class":105,"line":1631},[103,3293,2559],{"class":109},[103,3295,3296],{"class":105,"line":1636},[103,3297,2499],{"class":113},[103,3299,3300,3302,3304,3306,3308],{"class":105,"line":1642},[103,3301,2504],{"class":113},[103,3303,1157],{"class":109},[103,3305,554],{"class":113},[103,3307,1157],{"class":109},[103,3309,1180],{"class":113},[103,3311,3312],{"class":105,"line":1663},[103,3313,2518],{"class":113},[103,3315,3316],{"class":105,"line":1668},[103,3317,2176],{"class":113},[103,3319,3320],{"class":105,"line":1682},[103,3321,1554],{"class":113},[14,3323,3324],{},"嵌套实现星图",[94,3326,3328],{"className":96,"code":3327,"language":98,"meta":24,"style":24},"#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",[100,3329,3330,3336,3346,3354,3358,3384,3388,3417,3421,3432,3436,3445,3449],{"__ignoreMap":24},[103,3331,3332,3334],{"class":105,"line":106},[103,3333,1938],{"class":109},[103,3335,1941],{"class":218},[103,3337,3338,3340,3342,3344],{"class":105,"line":25},[103,3339,1946],{"class":109},[103,3341,1949],{"class":109},[103,3343,1953],{"class":1952},[103,3345,1279],{"class":113},[103,3347,3348,3350,3352],{"class":105,"line":1168},[103,3349,117],{"class":109},[103,3351,1962],{"class":1952},[103,3353,1965],{"class":113},[103,3355,3356],{"class":105,"line":1183},[103,3357,1535],{"class":113},[103,3359,3360,3362,3364,3366,3368,3370,3372,3374,3376,3378,3380,3382],{"class":105,"line":1189},[103,3361,3190],{"class":109},[103,3363,1647],{"class":113},[103,3365,117],{"class":109},[103,3367,3021],{"class":113},[103,3369,159],{"class":109},[103,3371,305],{"class":162},[103,3373,3028],{"class":113},[103,3375,1023],{"class":109},[103,3377,559],{"class":162},[103,3379,3028],{"class":113},[103,3381,2281],{"class":109},[103,3383,120],{"class":113},[103,3385,3386],{"class":105,"line":1203},[103,3387,2019],{"class":113},[103,3389,3390,3393,3395,3397,3400,3402,3404,3407,3409,3411,3413,3415],{"class":105,"line":1209},[103,3391,3392],{"class":109},"        for",[103,3394,1647],{"class":113},[103,3396,117],{"class":109},[103,3398,3399],{"class":113}," j",[103,3401,159],{"class":109},[103,3403,305],{"class":162},[103,3405,3406],{"class":113},";j",[103,3408,1023],{"class":109},[103,3410,559],{"class":162},[103,3412,3406],{"class":113},[103,3414,2281],{"class":109},[103,3416,120],{"class":113},[103,3418,3419],{"class":105,"line":1300},[103,3420,2499],{"class":113},[103,3422,3423,3425,3427,3430],{"class":105,"line":1306},[103,3424,2504],{"class":113},[103,3426,1157],{"class":109},[103,3428,3429],{"class":218},"\"*\"",[103,3431,1279],{"class":113},[103,3433,3434],{"class":105,"line":1318},[103,3435,2518],{"class":113},[103,3437,3438,3441,3443],{"class":105,"line":1601},[103,3439,3440],{"class":113},"        cout",[103,3442,1157],{"class":109},[103,3444,1180],{"class":113},[103,3446,3447],{"class":105,"line":1606},[103,3448,2176],{"class":113},[103,3450,3451],{"class":105,"line":1612},[103,3452,1554],{"class":113},[14,3454,3455],{},"乘法口诀表",[94,3457,3459],{"className":96,"code":3458,"language":98,"meta":24,"style":24},"#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",[100,3460,3461,3467,3477,3485,3489,3515,3519,3544,3548,3588,3592,3600,3604],{"__ignoreMap":24},[103,3462,3463,3465],{"class":105,"line":106},[103,3464,1938],{"class":109},[103,3466,2323],{"class":218},[103,3468,3469,3471,3473,3475],{"class":105,"line":25},[103,3470,1946],{"class":109},[103,3472,1949],{"class":109},[103,3474,1953],{"class":1952},[103,3476,1279],{"class":113},[103,3478,3479,3481,3483],{"class":105,"line":1168},[103,3480,117],{"class":109},[103,3482,1962],{"class":1952},[103,3484,1965],{"class":113},[103,3486,3487],{"class":105,"line":1183},[103,3488,1535],{"class":113},[103,3490,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513],{"class":105,"line":1189},[103,3492,3190],{"class":109},[103,3494,114],{"class":113},[103,3496,117],{"class":109},[103,3498,3021],{"class":113},[103,3500,159],{"class":109},[103,3502,331],{"class":162},[103,3504,3028],{"class":113},[103,3506,1023],{"class":109},[103,3508,559],{"class":162},[103,3510,3028],{"class":113},[103,3512,2281],{"class":109},[103,3514,120],{"class":113},[103,3516,3517],{"class":105,"line":1203},[103,3518,2019],{"class":113},[103,3520,3521,3523,3525,3527,3529,3531,3533,3535,3537,3540,3542],{"class":105,"line":1209},[103,3522,3392],{"class":109},[103,3524,114],{"class":113},[103,3526,117],{"class":109},[103,3528,3399],{"class":113},[103,3530,159],{"class":109},[103,3532,331],{"class":162},[103,3534,3406],{"class":113},[103,3536,1577],{"class":109},[103,3538,3539],{"class":113},"i;j",[103,3541,2281],{"class":109},[103,3543,120],{"class":113},[103,3545,3546],{"class":105,"line":1300},[103,3547,2499],{"class":113},[103,3549,3550,3552,3554,3556,3558,3560,3562,3564,3566,3569,3571,3573,3575,3577,3579,3582,3584,3586],{"class":105,"line":1306},[103,3551,2504],{"class":113},[103,3553,1157],{"class":109},[103,3555,580],{"class":113},[103,3557,1157],{"class":109},[103,3559,3429],{"class":218},[103,3561,1157],{"class":109},[103,3563,554],{"class":113},[103,3565,1157],{"class":109},[103,3567,3568],{"class":218},"\"=\"",[103,3570,1157],{"class":109},[103,3572,554],{"class":113},[103,3574,568],{"class":109},[103,3576,580],{"class":113},[103,3578,1157],{"class":109},[103,3580,3581],{"class":218},"'",[103,3583,1219],{"class":162},[103,3585,3581],{"class":218},[103,3587,1279],{"class":113},[103,3589,3590],{"class":105,"line":1318},[103,3591,2518],{"class":113},[103,3593,3594,3596,3598],{"class":105,"line":1601},[103,3595,3440],{"class":113},[103,3597,1157],{"class":109},[103,3599,1180],{"class":113},[103,3601,3602],{"class":105,"line":1606},[103,3603,2176],{"class":113},[103,3605,3606],{"class":105,"line":1612},[103,3607,1554],{"class":113},[74,3609,3611],{"id":3610},"_163跳出语句","1.6.3跳出语句",[57,3613,3614],{},[60,3615,3616],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3618,3619],{},"break使用时机：",[1120,3621,3622,3625,3628],{},[60,3623,3624],{},"出现在switch条件语句中，作用是终止case并跳出switch",[60,3626,3627],{},"出现在循环结构中，作用是跳出当前的循环结构",[60,3629,3630],{},"出现在嵌套循环中，跳出最近的内层循环语句",[57,3632,3633,3636],{"start":25},[60,3634,3635],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[60,3637,3638],{},"goto语句\n语法：goto 标记;",[14,3640,3641],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[94,3643,3645],{"className":96,"code":3644,"language":98,"meta":24,"style":24},"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",[100,3646,3647,3655,3659,3672,3682,3695,3708,3721,3729,3745],{"__ignoreMap":24},[103,3648,3649,3651,3653],{"class":105,"line":106},[103,3650,117],{"class":109},[103,3652,1962],{"class":1952},[103,3654,1965],{"class":113},[103,3656,3657],{"class":105,"line":25},[103,3658,1535],{"class":113},[103,3660,3661,3663,3665,3668,3670],{"class":105,"line":1168},[103,3662,1540],{"class":113},[103,3664,1157],{"class":109},[103,3666,3667],{"class":218},"\"1\"",[103,3669,1157],{"class":109},[103,3671,1180],{"class":113},[103,3673,3674,3677,3680],{"class":105,"line":1183},[103,3675,3676],{"class":109},"    goto",[103,3678,3679],{"class":1952}," FLAG",[103,3681,1279],{"class":113},[103,3683,3684,3686,3688,3691,3693],{"class":105,"line":1189},[103,3685,1540],{"class":113},[103,3687,1157],{"class":109},[103,3689,3690],{"class":218},"\"2\"",[103,3692,1157],{"class":109},[103,3694,1180],{"class":113},[103,3696,3697,3699,3701,3704,3706],{"class":105,"line":1203},[103,3698,1540],{"class":113},[103,3700,1157],{"class":109},[103,3702,3703],{"class":218},"\"3\"",[103,3705,1157],{"class":109},[103,3707,1180],{"class":113},[103,3709,3710,3712,3714,3717,3719],{"class":105,"line":1209},[103,3711,1540],{"class":113},[103,3713,1157],{"class":109},[103,3715,3716],{"class":218},"\"4\"",[103,3718,1157],{"class":109},[103,3720,1180],{"class":113},[103,3722,3723,3726],{"class":105,"line":1300},[103,3724,3725],{"class":1952},"    FLAG",[103,3727,3728],{"class":113},":\n",[103,3730,3731,3733,3735,3738,3740,3742],{"class":105,"line":1306},[103,3732,1540],{"class":113},[103,3734,1157],{"class":109},[103,3736,3737],{"class":218},"\"5\"",[103,3739,1157],{"class":109},[103,3741,1227],{"class":113},[103,3743,3744],{"class":172},"\u002F\u002F跳过了2,3,4,直接到5\n",[103,3746,3747],{"class":105,"line":1318},[103,3748,1554],{"class":113},[45,3750,3752],{"id":3751},"_17数组","1.7数组",[74,3754,3756],{"id":3755},"_171一维数组","1.7.1一维数组",[57,3758,3759],{},[60,3760,3761],{},"一维数组定义方式",[251,3763,3764,3774],{},[254,3765,3766],{},[257,3767,3768,3771],{},[260,3769,3770],{},"方式",[260,3772,3773],{},"注意事项",[298,3775,3776,3790,3800],{},[257,3777,3778,3784],{},[303,3779,3780,3781,169],{},"数据类型 数组名",[103,3782,3783],{},"数组长度",[303,3785,3786,3787,3789],{},"这种方式是先定义再arr",[103,3788,554],{},"赋值",[257,3791,3792,3797],{},[303,3793,3780,3794,3796],{},[103,3795,3783],{},"={值1,值2....};",[303,3798,3799],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[257,3801,3802,3806],{},[303,3803,3780,3804,3796],{},[103,3805],{},[303,3807,3808,3809,3811],{},"int arr",[103,3810],{},";这是不正确的，按照这样的方式定义必须有初始长度",[57,3813,3814],{"start":25},[60,3815,3816],{},"一维数组数组名\n用途：",[1120,3818,3819],{},[60,3820,3821],{},"1.可以统计整个数组在内存中的长度：",[94,3823,3825],{"className":96,"code":3824,"language":98,"meta":24,"style":24},"sizeof(arr);\nsizeof(arr[0]);\n",[100,3826,3827,3834],{"__ignoreMap":24},[103,3828,3829,3831],{"class":105,"line":106},[103,3830,110],{"class":109},[103,3832,3833],{"class":113},"(arr);\n",[103,3835,3836,3838,3841,3843],{"class":105,"line":25},[103,3837,110],{"class":109},[103,3839,3840],{"class":113},"(arr[",[103,3842,305],{"class":162},[103,3844,3845],{"class":113},"]);\n",[1120,3847,3848],{},[60,3849,3850],{},"2.可以获取数组在内存中的首地址:",[94,3852,3854],{"className":96,"code":3853,"language":98,"meta":24,"style":24},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[100,3855,3856,3861,3874,3879],{"__ignoreMap":24},[103,3857,3858],{"class":105,"line":106},[103,3859,3860],{"class":172},"\u002F\u002F查看16进制的首地址\n",[103,3862,3863,3865,3867,3870,3872],{"class":105,"line":25},[103,3864,1358],{"class":113},[103,3866,1157],{"class":109},[103,3868,3869],{"class":113},"arr",[103,3871,1157],{"class":109},[103,3873,1180],{"class":113},[103,3875,3876],{"class":105,"line":1168},[103,3877,3878],{"class":172},"\u002F\u002F看10进制数\n",[103,3880,3881,3883,3885,3887,3889,3891,3893,3896,3898,3900,3902],{"class":105,"line":1183},[103,3882,1358],{"class":113},[103,3884,1157],{"class":109},[103,3886,114],{"class":113},[103,3888,117],{"class":109},[103,3890,542],{"class":113},[103,3892,466],{"class":109},[103,3894,3895],{"class":113},"arr[",[103,3897,305],{"class":162},[103,3899,1053],{"class":113},[103,3901,1157],{"class":109},[103,3903,1180],{"class":113},[14,3905,3906],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1120,3908,3909],{},[60,3910,3911],{},"1️⃣五只小猪称体重",[94,3913,3915],{"className":96,"code":3914,"language":98,"meta":24,"style":24},"#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",[100,3916,3917,3923,3933,3941,3945,3985,3998,4024,4028,4040,4044,4054,4058,4062,4075,4085],{"__ignoreMap":24},[103,3918,3919,3921],{"class":105,"line":106},[103,3920,1938],{"class":109},[103,3922,1941],{"class":218},[103,3924,3925,3927,3929,3931],{"class":105,"line":25},[103,3926,1946],{"class":109},[103,3928,1949],{"class":109},[103,3930,1953],{"class":1952},[103,3932,1279],{"class":113},[103,3934,3935,3937,3939],{"class":105,"line":1168},[103,3936,117],{"class":109},[103,3938,1962],{"class":1952},[103,3940,1965],{"class":113},[103,3942,3943],{"class":105,"line":1183},[103,3944,1535],{"class":113},[103,3946,3947,3949,3952,3954,3956,3958,3960,3963,3965,3968,3970,3972,3974,3977,3979,3982],{"class":105,"line":1189},[103,3948,1974],{"class":109},[103,3950,3951],{"class":113}," arr[",[103,3953,432],{"class":162},[103,3955,1053],{"class":113},[103,3957,159],{"class":109},[103,3959,1009],{"class":113},[103,3961,3962],{"class":162},"300",[103,3964,491],{"class":113},[103,3966,3967],{"class":162},"350",[103,3969,491],{"class":113},[103,3971,1711],{"class":162},[103,3973,491],{"class":113},[103,3975,3976],{"class":162},"400",[103,3978,491],{"class":113},[103,3980,3981],{"class":162},"250",[103,3983,3984],{"class":113},"};\n",[103,3986,3987,3989,3992,3994,3996],{"class":105,"line":1203},[103,3988,1974],{"class":109},[103,3990,3991],{"class":113}," tmp",[103,3993,159],{"class":109},[103,3995,305],{"class":162},[103,3997,1279],{"class":113},[103,3999,4000,4002,4004,4006,4008,4010,4012,4014,4016,4018,4020,4022],{"class":105,"line":1209},[103,4001,3190],{"class":109},[103,4003,1647],{"class":113},[103,4005,117],{"class":109},[103,4007,3021],{"class":113},[103,4009,159],{"class":109},[103,4011,305],{"class":162},[103,4013,3028],{"class":113},[103,4015,1023],{"class":109},[103,4017,432],{"class":162},[103,4019,3028],{"class":113},[103,4021,2281],{"class":109},[103,4023,120],{"class":113},[103,4025,4026],{"class":105,"line":1300},[103,4027,2019],{"class":113},[103,4029,4030,4032,4035,4037],{"class":105,"line":1306},[103,4031,2486],{"class":109},[103,4033,4034],{"class":113},"(tmp",[103,4036,1023],{"class":109},[103,4038,4039],{"class":113},"arr[i])\n",[103,4041,4042],{"class":105,"line":1318},[103,4043,2499],{"class":113},[103,4045,4046,4049,4051],{"class":105,"line":1601},[103,4047,4048],{"class":113},"            tmp",[103,4050,159],{"class":109},[103,4052,4053],{"class":113},"arr[i];\n",[103,4055,4056],{"class":105,"line":1606},[103,4057,2518],{"class":113},[103,4059,4060],{"class":105,"line":1612},[103,4061,2176],{"class":113},[103,4063,4064,4066,4068,4071,4073],{"class":105,"line":1617},[103,4065,1540],{"class":113},[103,4067,1157],{"class":109},[103,4069,4070],{"class":113},"tmp",[103,4072,1157],{"class":109},[103,4074,1180],{"class":113},[103,4076,4077,4080,4083],{"class":105,"line":1631},[103,4078,4079],{"class":109},"    return",[103,4081,4082],{"class":162}," 0",[103,4084,1279],{"class":113},[103,4086,4087],{"class":105,"line":1636},[103,4088,1554],{"class":113},[1120,4090,4091],{},[60,4092,4093],{},"2️⃣数组元素逆置",[94,4095,4097],{"className":96,"code":4096,"language":98,"meta":24,"style":24},"\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",[100,4098,4099,4104,4110,4120,4128,4132,4167,4183,4215,4228,4233,4238,4250,4260,4270,4275,4284,4294,4299,4304,4331,4335,4351,4355,4366,4375],{"__ignoreMap":24},[103,4100,4101],{"class":105,"line":106},[103,4102,4103],{"class":172},"\u002F\u002F元素逆置\n",[103,4105,4106,4108],{"class":105,"line":25},[103,4107,1938],{"class":109},[103,4109,1941],{"class":218},[103,4111,4112,4114,4116,4118],{"class":105,"line":1168},[103,4113,1946],{"class":109},[103,4115,1949],{"class":109},[103,4117,1953],{"class":1952},[103,4119,1279],{"class":113},[103,4121,4122,4124,4126],{"class":105,"line":1183},[103,4123,117],{"class":109},[103,4125,1962],{"class":1952},[103,4127,1965],{"class":113},[103,4129,4130],{"class":105,"line":1189},[103,4131,1535],{"class":113},[103,4133,4134,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155,4157,4159,4161,4163,4165],{"class":105,"line":1203},[103,4135,4136],{"class":109},"   int",[103,4138,3951],{"class":113},[103,4140,432],{"class":162},[103,4142,1053],{"class":113},[103,4144,159],{"class":109},[103,4146,1009],{"class":113},[103,4148,331],{"class":162},[103,4150,491],{"class":113},[103,4152,191],{"class":162},[103,4154,491],{"class":113},[103,4156,185],{"class":162},[103,4158,491],{"class":113},[103,4160,406],{"class":162},[103,4162,491],{"class":113},[103,4164,432],{"class":162},[103,4166,3984],{"class":113},[103,4168,4169,4171,4174,4176,4178,4180],{"class":105,"line":1209},[103,4170,4136],{"class":109},[103,4172,4173],{"class":113}," start",[103,4175,159],{"class":109},[103,4177,305],{"class":162},[103,4179,169],{"class":113},[103,4181,4182],{"class":172},"\u002F\u002F起始下标\n",[103,4184,4185,4187,4190,4193,4196,4199,4201,4203,4206,4208,4210,4212],{"class":105,"line":1300},[103,4186,4136],{"class":109},[103,4188,4189],{"class":113}," end",[103,4191,4192],{"class":109},"=sizeof",[103,4194,4195],{"class":113},"(arr)",[103,4197,4198],{"class":109},"\u002Fsizeof",[103,4200,3840],{"class":113},[103,4202,305],{"class":162},[103,4204,4205],{"class":113},"])",[103,4207,645],{"class":109},[103,4209,331],{"class":162},[103,4211,169],{"class":113},[103,4213,4214],{"class":172},"\u002F\u002F结束下标\n",[103,4216,4217,4220,4223,4225],{"class":105,"line":1306},[103,4218,4219],{"class":109},"   while",[103,4221,4222],{"class":113}," (start",[103,4224,1023],{"class":109},[103,4226,4227],{"class":113},"end)\n",[103,4229,4230],{"class":105,"line":1318},[103,4231,4232],{"class":113},"   {\n",[103,4234,4235],{"class":105,"line":1601},[103,4236,4237],{"class":172},"    \u002F\u002F实现元素互换代码\n",[103,4239,4240,4242,4245,4247],{"class":105,"line":1606},[103,4241,1974],{"class":109},[103,4243,4244],{"class":113}," temp",[103,4246,159],{"class":109},[103,4248,4249],{"class":113},"arr[start];\n",[103,4251,4252,4255,4257],{"class":105,"line":1612},[103,4253,4254],{"class":113},"    arr[start]",[103,4256,159],{"class":109},[103,4258,4259],{"class":113},"arr[end];\n",[103,4261,4262,4265,4267],{"class":105,"line":1617},[103,4263,4264],{"class":113},"    arr[end]",[103,4266,159],{"class":109},[103,4268,4269],{"class":113},"temp;\n",[103,4271,4272],{"class":105,"line":1631},[103,4273,4274],{"class":172},"    \u002F\u002F下标更新\n",[103,4276,4277,4280,4282],{"class":105,"line":1636},[103,4278,4279],{"class":113},"    start",[103,4281,2281],{"class":109},[103,4283,1279],{"class":113},[103,4285,4286,4289,4292],{"class":105,"line":1642},[103,4287,4288],{"class":113},"    end",[103,4290,4291],{"class":109},"--",[103,4293,1279],{"class":113},[103,4295,4296],{"class":105,"line":1663},[103,4297,4298],{"class":113},"   }\n",[103,4300,4301],{"class":105,"line":1668},[103,4302,4303],{"class":172},"   \u002F\u002F输出逆置后的数组\n",[103,4305,4306,4309,4311,4313,4315,4317,4319,4321,4323,4325,4327,4329],{"class":105,"line":1682},[103,4307,4308],{"class":109},"   for",[103,4310,1647],{"class":113},[103,4312,117],{"class":109},[103,4314,3021],{"class":113},[103,4316,159],{"class":109},[103,4318,305],{"class":162},[103,4320,3028],{"class":113},[103,4322,1023],{"class":109},[103,4324,432],{"class":162},[103,4326,3028],{"class":113},[103,4328,2281],{"class":109},[103,4330,120],{"class":113},[103,4332,4333],{"class":105,"line":1687},[103,4334,4232],{"class":113},[103,4336,4337,4339,4341,4344,4346,4349],{"class":105,"line":1716},[103,4338,1540],{"class":113},[103,4340,1157],{"class":109},[103,4342,4343],{"class":113},"arr[i]",[103,4345,1157],{"class":109},[103,4347,4348],{"class":218},"\" \"",[103,4350,1279],{"class":113},[103,4352,4353],{"class":105,"line":1721},[103,4354,4298],{"class":113},[103,4356,4357,4360,4362,4364],{"class":105,"line":1738},[103,4358,4359],{"class":1952},"   system",[103,4361,114],{"class":113},[103,4363,2297],{"class":218},[103,4365,2708],{"class":113},[103,4367,4368,4371,4373],{"class":105,"line":1743},[103,4369,4370],{"class":109},"   return",[103,4372,4082],{"class":162},[103,4374,1279],{"class":113},[103,4376,4377],{"class":105,"line":1748},[103,4378,1554],{"class":113},[1120,4380,4381],{},[60,4382,4383],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[94,4385,4387],{"className":96,"code":4386,"language":98,"meta":24,"style":24},"\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",[100,4388,4389,4394,4400,4410,4418,4422,4474,4487,4513,4517,4531,4535,4540,4545,4575,4579,4584,4618,4622,4627,4647,4652,4664,4680,4695,4700,4704,4708,4721,4747,4751,4765,4769,4777],{"__ignoreMap":24},[103,4390,4391],{"class":105,"line":106},[103,4392,4393],{"class":172},"\u002F\u002F冒泡排序,升序\n",[103,4395,4396,4398],{"class":105,"line":25},[103,4397,1938],{"class":109},[103,4399,1941],{"class":218},[103,4401,4402,4404,4406,4408],{"class":105,"line":1168},[103,4403,1946],{"class":109},[103,4405,1949],{"class":109},[103,4407,1953],{"class":1952},[103,4409,1279],{"class":113},[103,4411,4412,4414,4416],{"class":105,"line":1183},[103,4413,117],{"class":109},[103,4415,1962],{"class":1952},[103,4417,1965],{"class":113},[103,4419,4420],{"class":105,"line":1189},[103,4421,1535],{"class":113},[103,4423,4424,4426,4428,4430,4433,4435,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462,4464,4466,4468,4470,4472],{"class":105,"line":1203},[103,4425,1974],{"class":109},[103,4427,3951],{"class":113},[103,4429,533],{"class":162},[103,4431,4432],{"class":113},"] ",[103,4434,159],{"class":109},[103,4436,4437],{"class":113}," {",[103,4439,406],{"class":162},[103,4441,491],{"class":113},[103,4443,191],{"class":162},[103,4445,491],{"class":113},[103,4447,508],{"class":162},[103,4449,491],{"class":113},[103,4451,305],{"class":162},[103,4453,491],{"class":113},[103,4455,432],{"class":162},[103,4457,491],{"class":113},[103,4459,482],{"class":162},[103,4461,491],{"class":113},[103,4463,331],{"class":162},[103,4465,491],{"class":113},[103,4467,185],{"class":162},[103,4469,491],{"class":113},[103,4471,533],{"class":162},[103,4473,3984],{"class":113},[103,4475,4476,4478,4480,4483,4485],{"class":105,"line":1209},[103,4477,1540],{"class":113},[103,4479,1157],{"class":109},[103,4481,4482],{"class":218},"\"排序前：\"",[103,4484,1157],{"class":109},[103,4486,1180],{"class":113},[103,4488,4489,4491,4493,4495,4497,4499,4501,4503,4505,4507,4509,4511],{"class":105,"line":1300},[103,4490,3190],{"class":109},[103,4492,1647],{"class":113},[103,4494,117],{"class":109},[103,4496,3021],{"class":113},[103,4498,159],{"class":109},[103,4500,305],{"class":162},[103,4502,3028],{"class":113},[103,4504,1023],{"class":109},[103,4506,533],{"class":162},[103,4508,3028],{"class":113},[103,4510,2281],{"class":109},[103,4512,120],{"class":113},[103,4514,4515],{"class":105,"line":1306},[103,4516,2019],{"class":113},[103,4518,4519,4521,4523,4525,4527,4529],{"class":105,"line":1318},[103,4520,3440],{"class":113},[103,4522,1157],{"class":109},[103,4524,4343],{"class":113},[103,4526,1157],{"class":109},[103,4528,4348],{"class":218},[103,4530,1279],{"class":113},[103,4532,4533],{"class":105,"line":1601},[103,4534,2176],{"class":113},[103,4536,4537],{"class":105,"line":1606},[103,4538,4539],{"class":172},"    \u002F\u002F开始冒泡排序\n",[103,4541,4542],{"class":105,"line":1612},[103,4543,4544],{"class":172},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[103,4546,4547,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573],{"class":105,"line":1617},[103,4548,3190],{"class":109},[103,4550,1647],{"class":113},[103,4552,117],{"class":109},[103,4554,3021],{"class":113},[103,4556,159],{"class":109},[103,4558,305],{"class":162},[103,4560,3028],{"class":113},[103,4562,1023],{"class":109},[103,4564,533],{"class":162},[103,4566,645],{"class":109},[103,4568,331],{"class":162},[103,4570,3028],{"class":113},[103,4572,2281],{"class":109},[103,4574,120],{"class":113},[103,4576,4577],{"class":105,"line":1631},[103,4578,2019],{"class":113},[103,4580,4581],{"class":105,"line":1636},[103,4582,4583],{"class":172},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[103,4585,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614,4616],{"class":105,"line":1642},[103,4587,3392],{"class":109},[103,4589,1647],{"class":113},[103,4591,117],{"class":109},[103,4593,3399],{"class":113},[103,4595,159],{"class":109},[103,4597,305],{"class":162},[103,4599,3406],{"class":113},[103,4601,1023],{"class":109},[103,4603,533],{"class":162},[103,4605,645],{"class":109},[103,4607,554],{"class":113},[103,4609,645],{"class":109},[103,4611,331],{"class":162},[103,4613,3406],{"class":113},[103,4615,2281],{"class":109},[103,4617,120],{"class":113},[103,4619,4620],{"class":105,"line":1663},[103,4621,2499],{"class":113},[103,4623,4624],{"class":105,"line":1668},[103,4625,4626],{"class":172},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[103,4628,4629,4632,4635,4637,4640,4642,4644],{"class":105,"line":1682},[103,4630,4631],{"class":109},"            if",[103,4633,4634],{"class":113},"(arr[j]",[103,4636,1073],{"class":109},[103,4638,4639],{"class":113},"arr[j",[103,4641,594],{"class":109},[103,4643,331],{"class":162},[103,4645,4646],{"class":113},"])\n",[103,4648,4649],{"class":105,"line":1687},[103,4650,4651],{"class":113},"            {\n",[103,4653,4654,4657,4659,4661],{"class":105,"line":1716},[103,4655,4656],{"class":109},"                int",[103,4658,4244],{"class":113},[103,4660,159],{"class":109},[103,4662,4663],{"class":113},"arr[j];\n",[103,4665,4666,4669,4671,4673,4675,4677],{"class":105,"line":1721},[103,4667,4668],{"class":113},"                arr[j]",[103,4670,159],{"class":109},[103,4672,4639],{"class":113},[103,4674,594],{"class":109},[103,4676,331],{"class":162},[103,4678,4679],{"class":113},"];\n",[103,4681,4682,4685,4687,4689,4691,4693],{"class":105,"line":1738},[103,4683,4684],{"class":113},"                arr[j",[103,4686,594],{"class":109},[103,4688,331],{"class":162},[103,4690,1053],{"class":113},[103,4692,159],{"class":109},[103,4694,4269],{"class":113},[103,4696,4697],{"class":105,"line":1743},[103,4698,4699],{"class":113},"            }\n",[103,4701,4702],{"class":105,"line":1748},[103,4703,2518],{"class":113},[103,4705,4706],{"class":105,"line":1753},[103,4707,2176],{"class":113},[103,4709,4710,4712,4714,4717,4719],{"class":105,"line":1767},[103,4711,1540],{"class":113},[103,4713,1157],{"class":109},[103,4715,4716],{"class":218},"\"排序后：\"",[103,4718,1157],{"class":109},[103,4720,1180],{"class":113},[103,4722,4723,4725,4727,4729,4731,4733,4735,4737,4739,4741,4743,4745],{"class":105,"line":1772},[103,4724,3190],{"class":109},[103,4726,1647],{"class":113},[103,4728,117],{"class":109},[103,4730,3021],{"class":113},[103,4732,159],{"class":109},[103,4734,305],{"class":162},[103,4736,3028],{"class":113},[103,4738,1023],{"class":109},[103,4740,533],{"class":162},[103,4742,3028],{"class":113},[103,4744,2281],{"class":109},[103,4746,120],{"class":113},[103,4748,4749],{"class":105,"line":2566},[103,4750,2019],{"class":113},[103,4752,4753,4755,4757,4759,4761,4763],{"class":105,"line":2580},[103,4754,3440],{"class":113},[103,4756,1157],{"class":109},[103,4758,4343],{"class":113},[103,4760,1157],{"class":109},[103,4762,4348],{"class":218},[103,4764,1279],{"class":113},[103,4766,4767],{"class":105,"line":2588},[103,4768,2176],{"class":113},[103,4770,4771,4773,4775],{"class":105,"line":2593},[103,4772,4079],{"class":109},[103,4774,4082],{"class":162},[103,4776,1279],{"class":113},[103,4778,4779],{"class":105,"line":2599},[103,4780,1554],{"class":113},[74,4782,4784],{"id":4783},"_172二维数组","1.7.2二维数组",[57,4786,4787],{},[60,4788,4789],{},"二维数组的四种定义方式",[251,4791,4792,4801],{},[254,4793,4794],{},[257,4795,4796,4799],{},[260,4797,4798],{},"序号",[260,4800,3770],{},[298,4802,4803,4813,4822,4831,4840],{},[257,4804,4805,4807],{},[303,4806,331],{},[303,4808,4809,4810,169],{},"数据类型 数组名[行数]",[103,4811,4812],{},"列数",[257,4814,4815,4817],{},[303,4816,191],{},[303,4818,4809,4819,4821],{},[103,4820,4812],{},"={ {数据1,数据2}，{数据3，数据4}... }",[257,4823,4824,4826],{},[303,4825,185],{},[303,4827,4809,4828,4830],{},[103,4829,4812],{},"={数据1,数据2,数据3...}",[257,4832,4833,4835],{},[303,4834,406],{},[303,4836,4837,4838,4830],{},"数据类型 数组名[]",[103,4839,4812],{},[257,4841,4842,4845],{},[303,4843,4844],{},"注意：不能只省略列数",[303,4846],{},[57,4848,4849],{"start":25},[60,4850,4851],{},"二维数组数组名",[1120,4853,4854,4857],{},[60,4855,4856],{},"1.查看二维数组所占内存空间",[60,4858,4859],{},"2.获取二维数组首地址",[14,4861,4862],{},"已知二维数组，求二维数组的行数与列数",[94,4864,4866],{"className":96,"code":4865,"language":98,"meta":24,"style":24},"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",[100,4867,4868,4876,4880,4898,4902,4920,4936,4941,4966,4999],{"__ignoreMap":24},[103,4869,4870,4872,4874],{"class":105,"line":106},[103,4871,117],{"class":109},[103,4873,1962],{"class":1952},[103,4875,1965],{"class":113},[103,4877,4878],{"class":105,"line":25},[103,4879,1535],{"class":113},[103,4881,4882,4884,4886,4888,4891,4893,4895],{"class":105,"line":1168},[103,4883,1974],{"class":109},[103,4885,3951],{"class":113},[103,4887,191],{"class":162},[103,4889,4890],{"class":113},"][",[103,4892,185],{"class":162},[103,4894,1053],{"class":113},[103,4896,4897],{"class":109},"=\n",[103,4899,4900],{"class":105,"line":1183},[103,4901,2019],{"class":113},[103,4903,4904,4907,4909,4911,4913,4915,4917],{"class":105,"line":1189},[103,4905,4906],{"class":113},"        {",[103,4908,331],{"class":162},[103,4910,491],{"class":113},[103,4912,191],{"class":162},[103,4914,491],{"class":113},[103,4916,185],{"class":162},[103,4918,4919],{"class":113},"},\n",[103,4921,4922,4924,4926,4928,4930,4932,4934],{"class":105,"line":1203},[103,4923,4906],{"class":113},[103,4925,406],{"class":162},[103,4927,491],{"class":113},[103,4929,432],{"class":162},[103,4931,491],{"class":113},[103,4933,457],{"class":162},[103,4935,1554],{"class":113},[103,4937,4938],{"class":105,"line":1209},[103,4939,4940],{"class":113},"    };\n",[103,4942,4943,4945,4947,4950,4952,4954,4956,4958,4960,4962,4964],{"class":105,"line":1300},[103,4944,1540],{"class":113},[103,4946,1157],{"class":109},[103,4948,4949],{"class":218},"\"二维数组的行数\"",[103,4951,1361],{"class":109},[103,4953,4195],{"class":113},[103,4955,4198],{"class":109},[103,4957,3840],{"class":113},[103,4959,305],{"class":162},[103,4961,4205],{"class":113},[103,4963,1157],{"class":109},[103,4965,1180],{"class":113},[103,4967,4968,4970,4972,4975,4977,4979,4981,4983,4985,4987,4989,4991,4993,4995,4997],{"class":105,"line":1306},[103,4969,1540],{"class":113},[103,4971,1157],{"class":109},[103,4973,4974],{"class":218},"\"二维数组的列数\"",[103,4976,1361],{"class":109},[103,4978,3840],{"class":113},[103,4980,305],{"class":162},[103,4982,4205],{"class":113},[103,4984,4198],{"class":109},[103,4986,3840],{"class":113},[103,4988,305],{"class":162},[103,4990,4890],{"class":113},[103,4992,305],{"class":162},[103,4994,4205],{"class":113},[103,4996,1157],{"class":109},[103,4998,1180],{"class":113},[103,5000,5001],{"class":105,"line":1318},[103,5002,1554],{"class":113},[14,5004,5005],{},"查看二维数组首地址",[94,5007,5009],{"className":96,"code":5008,"language":98,"meta":24,"style":24},"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",[100,5010,5011,5028,5054,5079],{"__ignoreMap":24},[103,5012,5013,5015,5017,5020,5022,5024,5026],{"class":105,"line":106},[103,5014,1358],{"class":113},[103,5016,1157],{"class":109},[103,5018,5019],{"class":218},"\"二维数组首地址：\"",[103,5021,1157],{"class":109},[103,5023,3869],{"class":113},[103,5025,1157],{"class":109},[103,5027,1180],{"class":113},[103,5029,5030,5032,5034,5037,5039,5041,5043,5046,5048,5050,5052],{"class":105,"line":25},[103,5031,1358],{"class":113},[103,5033,1157],{"class":109},[103,5035,5036],{"class":218},"\"二维数组第一行的首地址：\"",[103,5038,1157],{"class":109},[103,5040,114],{"class":113},[103,5042,117],{"class":109},[103,5044,5045],{"class":113},")arr[",[103,5047,305],{"class":162},[103,5049,1053],{"class":113},[103,5051,1157],{"class":109},[103,5053,1180],{"class":113},[103,5055,5056,5058,5060,5063,5065,5067,5069,5071,5073,5075,5077],{"class":105,"line":1168},[103,5057,1358],{"class":113},[103,5059,1157],{"class":109},[103,5061,5062],{"class":218},"\"二维数组第二行的首地址：\"",[103,5064,1157],{"class":109},[103,5066,114],{"class":113},[103,5068,117],{"class":109},[103,5070,5045],{"class":113},[103,5072,331],{"class":162},[103,5074,1053],{"class":113},[103,5076,1157],{"class":109},[103,5078,1180],{"class":113},[103,5080,5081,5083,5085,5088,5090,5092,5094,5096,5098,5100,5102,5104,5106,5108,5110,5112],{"class":105,"line":1183},[103,5082,1358],{"class":113},[103,5084,1157],{"class":109},[103,5086,5087],{"class":218},"\"二维数组第一个元素的首地址:\"",[103,5089,1157],{"class":109},[103,5091,114],{"class":113},[103,5093,117],{"class":109},[103,5095,542],{"class":113},[103,5097,466],{"class":109},[103,5099,3895],{"class":113},[103,5101,305],{"class":162},[103,5103,4890],{"class":113},[103,5105,305],{"class":162},[103,5107,1053],{"class":113},[103,5109,1157],{"class":109},[103,5111,1227],{"class":113},[103,5113,5114],{"class":172},"\u002F\u002F对于数，要加取址符\n",[5116,5117,5118],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":24,"searchDepth":25,"depth":25,"links":5120},[5121,5122,5123,5131,5132,5138,5143],{"id":47,"depth":25,"text":48},{"id":54,"depth":25,"text":55},{"id":71,"depth":25,"text":72,"children":5124},[5125,5126,5127,5128,5129,5130],{"id":76,"depth":1168,"text":77},{"id":130,"depth":1168,"text":131},{"id":199,"depth":1168,"text":200},{"id":1138,"depth":1168,"text":1139},{"id":1233,"depth":1168,"text":1234},{"id":1332,"depth":1168,"text":1333},{"id":1374,"depth":25,"text":1375},{"id":1442,"depth":25,"text":1443,"children":5133},[5134,5135,5136,5137],{"id":1446,"depth":1168,"text":1447},{"id":1468,"depth":1168,"text":1469},{"id":1477,"depth":1168,"text":1478},{"id":1486,"depth":1168,"text":1487},{"id":1495,"depth":25,"text":1496,"children":5139},[5140,5141,5142],{"id":1499,"depth":1168,"text":1500},{"id":2194,"depth":1168,"text":2195},{"id":3610,"depth":1168,"text":3611},{"id":3751,"depth":25,"text":3752,"children":5144},[5145,5146],{"id":3755,"depth":1168,"text":3756},{"id":4783,"depth":1168,"text":4784},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":38,"description":24},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5153,"title":5154,"body":5155,"description":24,"extension":28,"meta":6255,"navigation":30,"path":6256,"seo":6257,"stem":6258,"__hash__":6259},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5156,"toc":6247},[5157,5160,5164,5172,5180,5183,5249,5253,5256,5332,5336,5339,5342,5345,5558,5562,5567,5631,5636,5703,5708,5799,5802,5907,5911,5914,5920,6064,6068,6071,6085,6088,6133,6136,6244],[10,5158,5154],{"id":5159},"_2函数",[45,5161,5163],{"id":5162},"_21函数概述","2.1函数概述",[57,5165,5166,5169],{},[60,5167,5168],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[60,5170,5171],{},"语法：",[94,5173,5178],{"className":5174,"code":5176,"language":5177,"meta":24},[5175],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[100,5179,5176],{"__ignoreMap":24},[14,5181,5182],{},"小案例",[94,5184,5186],{"className":96,"code":5185,"language":98,"meta":24,"style":24},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[100,5187,5188,5193,5217,5221,5238,5245],{"__ignoreMap":24},[103,5189,5190],{"class":105,"line":106},[103,5191,5192],{"class":172},"\u002F\u002Fnum1,num2形参\n",[103,5194,5195,5197,5200,5202,5204,5208,5210,5212,5215],{"class":105,"line":25},[103,5196,117],{"class":109},[103,5198,5199],{"class":1952}," add",[103,5201,114],{"class":113},[103,5203,117],{"class":109},[103,5205,5207],{"class":5206},"s4XuR"," num1",[103,5209,491],{"class":113},[103,5211,117],{"class":109},[103,5213,5214],{"class":5206}," num2",[103,5216,120],{"class":113},[103,5218,5219],{"class":105,"line":1168},[103,5220,1535],{"class":113},[103,5222,5223,5225,5228,5230,5233,5235],{"class":105,"line":1183},[103,5224,1974],{"class":109},[103,5226,5227],{"class":113}," sum",[103,5229,159],{"class":109},[103,5231,5232],{"class":113},"num1",[103,5234,594],{"class":109},[103,5236,5237],{"class":113},"num2;\n",[103,5239,5240,5242],{"class":105,"line":1189},[103,5241,4079],{"class":109},[103,5243,5244],{"class":113}," sum;\n",[103,5246,5247],{"class":105,"line":1203},[103,5248,1554],{"class":113},[45,5250,5252],{"id":5251},"_22函数调用","2.2函数调用",[14,5254,5255],{},"调用刚刚写的求和函数",[94,5257,5259],{"className":96,"code":5258,"language":98,"meta":24,"style":24},"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",[100,5260,5261,5269,5273,5278,5290,5302,5311,5316,5328],{"__ignoreMap":24},[103,5262,5263,5265,5267],{"class":105,"line":106},[103,5264,117],{"class":109},[103,5266,1962],{"class":1952},[103,5268,1965],{"class":113},[103,5270,5271],{"class":105,"line":25},[103,5272,1535],{"class":113},[103,5274,5275],{"class":105,"line":1168},[103,5276,5277],{"class":172},"    \u002F\u002Fa,b实参\n",[103,5279,5280,5282,5284,5286,5288],{"class":105,"line":1183},[103,5281,1974],{"class":109},[103,5283,1387],{"class":113},[103,5285,159],{"class":109},[103,5287,305],{"class":162},[103,5289,1279],{"class":113},[103,5291,5292,5294,5296,5298,5300],{"class":105,"line":1189},[103,5293,1974],{"class":109},[103,5295,2822],{"class":113},[103,5297,159],{"class":109},[103,5299,305],{"class":162},[103,5301,1279],{"class":113},[103,5303,5304,5306,5308],{"class":105,"line":1203},[103,5305,2001],{"class":113},[103,5307,1418],{"class":109},[103,5309,5310],{"class":113},"a,b;\n",[103,5312,5313],{"class":105,"line":1209},[103,5314,5315],{"class":172},"    \u002F\u002F调用函数时，实参值传给了形参\n",[103,5317,5318,5320,5322,5325],{"class":105,"line":1300},[103,5319,1540],{"class":113},[103,5321,1157],{"class":109},[103,5323,5324],{"class":1952},"add",[103,5326,5327],{"class":113},"(a,b);\n",[103,5329,5330],{"class":105,"line":1306},[103,5331,1554],{"class":113},[45,5333,5335],{"id":5334},"_23值传递","2.3值传递",[14,5337,5338],{},"值传递就是函数调用时实参将数值传给形参",[14,5340,5341],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5343,5344],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[94,5346,5348],{"className":96,"code":5347,"language":98,"meta":24,"style":24},"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",[100,5349,5350,5372,5376,5389,5406,5424,5435,5444,5453,5466,5482,5498,5507,5511,5519,5523,5535,5547,5554],{"__ignoreMap":24},[103,5351,5352,5355,5358,5360,5362,5364,5366,5368,5370],{"class":105,"line":106},[103,5353,5354],{"class":109},"void",[103,5356,5357],{"class":1952}," swap",[103,5359,114],{"class":113},[103,5361,117],{"class":109},[103,5363,5207],{"class":5206},[103,5365,491],{"class":113},[103,5367,117],{"class":109},[103,5369,5214],{"class":5206},[103,5371,120],{"class":113},[103,5373,5374],{"class":105,"line":25},[103,5375,1535],{"class":113},[103,5377,5378,5380,5382,5385,5387],{"class":105,"line":1168},[103,5379,1540],{"class":113},[103,5381,1157],{"class":109},[103,5383,5384],{"class":218},"\"交换前：\"",[103,5386,1157],{"class":109},[103,5388,1180],{"class":113},[103,5390,5391,5393,5395,5398,5400,5402,5404],{"class":105,"line":1183},[103,5392,1540],{"class":113},[103,5394,1157],{"class":109},[103,5396,5397],{"class":218},"\"num1=\"",[103,5399,1157],{"class":109},[103,5401,5232],{"class":113},[103,5403,1157],{"class":109},[103,5405,1180],{"class":113},[103,5407,5408,5410,5412,5415,5417,5420,5422],{"class":105,"line":1189},[103,5409,1540],{"class":113},[103,5411,1157],{"class":109},[103,5413,5414],{"class":218},"\"num2=\"",[103,5416,1157],{"class":109},[103,5418,5419],{"class":113},"num2",[103,5421,1157],{"class":109},[103,5423,1180],{"class":113},[103,5425,5426,5428,5430,5432],{"class":105,"line":1203},[103,5427,1974],{"class":109},[103,5429,4244],{"class":113},[103,5431,159],{"class":109},[103,5433,5434],{"class":113},"num1;\n",[103,5436,5437,5440,5442],{"class":105,"line":1209},[103,5438,5439],{"class":113},"    num1",[103,5441,159],{"class":109},[103,5443,5237],{"class":113},[103,5445,5446,5449,5451],{"class":105,"line":1300},[103,5447,5448],{"class":113},"    num2",[103,5450,159],{"class":109},[103,5452,4269],{"class":113},[103,5454,5455,5457,5459,5462,5464],{"class":105,"line":1306},[103,5456,1540],{"class":113},[103,5458,1157],{"class":109},[103,5460,5461],{"class":218},"\"交换后：\"",[103,5463,1157],{"class":109},[103,5465,1180],{"class":113},[103,5467,5468,5470,5472,5474,5476,5478,5480],{"class":105,"line":1318},[103,5469,1540],{"class":113},[103,5471,1157],{"class":109},[103,5473,5397],{"class":218},[103,5475,1157],{"class":109},[103,5477,5232],{"class":113},[103,5479,1157],{"class":109},[103,5481,1180],{"class":113},[103,5483,5484,5486,5488,5490,5492,5494,5496],{"class":105,"line":1601},[103,5485,1540],{"class":113},[103,5487,1157],{"class":109},[103,5489,5414],{"class":218},[103,5491,1157],{"class":109},[103,5493,5419],{"class":113},[103,5495,1157],{"class":109},[103,5497,1180],{"class":113},[103,5499,5500,5502,5504],{"class":105,"line":1606},[103,5501,4079],{"class":109},[103,5503,169],{"class":113},[103,5505,5506],{"class":172},"\u002F\u002F或者不写\n",[103,5508,5509],{"class":105,"line":1612},[103,5510,1554],{"class":113},[103,5512,5513,5515,5517],{"class":105,"line":1617},[103,5514,117],{"class":109},[103,5516,1962],{"class":1952},[103,5518,1965],{"class":113},[103,5520,5521],{"class":105,"line":1631},[103,5522,1535],{"class":113},[103,5524,5525,5527,5529,5531,5533],{"class":105,"line":1636},[103,5526,1974],{"class":109},[103,5528,1387],{"class":113},[103,5530,159],{"class":109},[103,5532,559],{"class":162},[103,5534,1279],{"class":113},[103,5536,5537,5539,5541,5543,5545],{"class":105,"line":1642},[103,5538,1974],{"class":109},[103,5540,2822],{"class":113},[103,5542,159],{"class":109},[103,5544,813],{"class":162},[103,5546,1279],{"class":113},[103,5548,5549,5552],{"class":105,"line":1663},[103,5550,5551],{"class":1952},"    swap",[103,5553,5327],{"class":113},[103,5555,5556],{"class":105,"line":1668},[103,5557,1554],{"class":113},[45,5559,5561],{"id":5560},"_24函数的常见形式","2.4函数的常见形式",[57,5563,5564],{},[60,5565,5566],{},"无参无返",[94,5568,5570],{"className":96,"code":5569,"language":98,"meta":24,"style":24},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[100,5571,5572,5581,5585,5598,5602,5610,5614,5619,5627],{"__ignoreMap":24},[103,5573,5574,5576,5579],{"class":105,"line":106},[103,5575,5354],{"class":109},[103,5577,5578],{"class":1952}," test01",[103,5580,1965],{"class":113},[103,5582,5583],{"class":105,"line":25},[103,5584,1535],{"class":113},[103,5586,5587,5589,5591,5594,5596],{"class":105,"line":1168},[103,5588,1540],{"class":113},[103,5590,1157],{"class":109},[103,5592,5593],{"class":218},"\"你好\"",[103,5595,1157],{"class":109},[103,5597,1180],{"class":113},[103,5599,5600],{"class":105,"line":1183},[103,5601,1554],{"class":113},[103,5603,5604,5606,5608],{"class":105,"line":1189},[103,5605,117],{"class":109},[103,5607,1962],{"class":1952},[103,5609,1965],{"class":113},[103,5611,5612],{"class":105,"line":1203},[103,5613,1535],{"class":113},[103,5615,5616],{"class":105,"line":1209},[103,5617,5618],{"class":172},"    \u002F\u002F函数调用\n",[103,5620,5621,5624],{"class":105,"line":1300},[103,5622,5623],{"class":1952},"    test01",[103,5625,5626],{"class":113},"();\n",[103,5628,5629],{"class":105,"line":1306},[103,5630,1554],{"class":113},[57,5632,5633],{"start":25},[60,5634,5635],{},"有参无返",[94,5637,5639],{"className":96,"code":5638,"language":98,"meta":24,"style":24},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[100,5640,5641,5656,5660,5672,5676,5684,5688,5699],{"__ignoreMap":24},[103,5642,5643,5645,5648,5650,5652,5654],{"class":105,"line":106},[103,5644,5354],{"class":109},[103,5646,5647],{"class":1952}," test02",[103,5649,114],{"class":113},[103,5651,117],{"class":109},[103,5653,1387],{"class":5206},[103,5655,120],{"class":113},[103,5657,5658],{"class":105,"line":25},[103,5659,1535],{"class":113},[103,5661,5662,5664,5666,5668,5670],{"class":105,"line":1168},[103,5663,1540],{"class":113},[103,5665,1157],{"class":109},[103,5667,5593],{"class":218},[103,5669,1157],{"class":109},[103,5671,1180],{"class":113},[103,5673,5674],{"class":105,"line":1183},[103,5675,1554],{"class":113},[103,5677,5678,5680,5682],{"class":105,"line":1189},[103,5679,117],{"class":109},[103,5681,1962],{"class":1952},[103,5683,1965],{"class":113},[103,5685,5686],{"class":105,"line":1203},[103,5687,1535],{"class":113},[103,5689,5690,5693,5695,5697],{"class":105,"line":1209},[103,5691,5692],{"class":1952},"    test02",[103,5694,114],{"class":113},[103,5696,424],{"class":162},[103,5698,2708],{"class":113},[103,5700,5701],{"class":105,"line":1300},[103,5702,1554],{"class":113},[57,5704,5705],{"start":1168},[60,5706,5707],{},"无参有返",[94,5709,5711],{"className":96,"code":5710,"language":98,"meta":24,"style":24},"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",[100,5712,5713,5722,5726,5738,5747,5751,5759,5763,5776,5795],{"__ignoreMap":24},[103,5714,5715,5717,5720],{"class":105,"line":106},[103,5716,117],{"class":109},[103,5718,5719],{"class":1952}," test03",[103,5721,1965],{"class":113},[103,5723,5724],{"class":105,"line":25},[103,5725,1535],{"class":113},[103,5727,5728,5730,5732,5734,5736],{"class":105,"line":1168},[103,5729,1540],{"class":113},[103,5731,1157],{"class":109},[103,5733,5593],{"class":218},[103,5735,1157],{"class":109},[103,5737,1180],{"class":113},[103,5739,5740,5742,5745],{"class":105,"line":1183},[103,5741,4079],{"class":109},[103,5743,5744],{"class":162}," 100",[103,5746,1279],{"class":113},[103,5748,5749],{"class":105,"line":1189},[103,5750,1554],{"class":113},[103,5752,5753,5755,5757],{"class":105,"line":1203},[103,5754,117],{"class":109},[103,5756,1962],{"class":1952},[103,5758,1965],{"class":113},[103,5760,5761],{"class":105,"line":1209},[103,5762,1535],{"class":113},[103,5764,5765,5767,5769,5771,5774],{"class":105,"line":1300},[103,5766,1974],{"class":109},[103,5768,5207],{"class":113},[103,5770,159],{"class":109},[103,5772,5773],{"class":1952},"test03",[103,5775,5626],{"class":113},[103,5777,5778,5780,5782,5784,5786,5788,5790,5792],{"class":105,"line":1306},[103,5779,1540],{"class":113},[103,5781,1157],{"class":109},[103,5783,5397],{"class":218},[103,5785,1157],{"class":109},[103,5787,5232],{"class":113},[103,5789,1157],{"class":109},[103,5791,1227],{"class":113},[103,5793,5794],{"class":172}," \u002F\u002F100\n",[103,5796,5797],{"class":105,"line":1318},[103,5798,1554],{"class":113},[14,5800,5801],{},"4.有参有返",[94,5803,5805],{"className":96,"code":5804,"language":98,"meta":24,"style":24},"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",[100,5806,5807,5822,5826,5839,5845,5849,5858,5862,5874,5888,5903],{"__ignoreMap":24},[103,5808,5809,5811,5814,5816,5818,5820],{"class":105,"line":106},[103,5810,117],{"class":109},[103,5812,5813],{"class":1952}," test04",[103,5815,114],{"class":113},[103,5817,117],{"class":109},[103,5819,1387],{"class":5206},[103,5821,120],{"class":113},[103,5823,5824],{"class":105,"line":25},[103,5825,1535],{"class":113},[103,5827,5828,5830,5832,5835,5837],{"class":105,"line":1168},[103,5829,1540],{"class":113},[103,5831,1157],{"class":109},[103,5833,5834],{"class":218},"\"hello\"",[103,5836,1157],{"class":109},[103,5838,1180],{"class":113},[103,5840,5841,5843],{"class":105,"line":1183},[103,5842,4079],{"class":109},[103,5844,1421],{"class":113},[103,5846,5847],{"class":105,"line":1189},[103,5848,1554],{"class":113},[103,5850,5851,5853,5856],{"class":105,"line":1203},[103,5852,117],{"class":109},[103,5854,5855],{"class":1952}," mian",[103,5857,1965],{"class":113},[103,5859,5860],{"class":105,"line":1209},[103,5861,1535],{"class":113},[103,5863,5864,5866,5868,5870,5872],{"class":105,"line":1300},[103,5865,1974],{"class":109},[103,5867,2822],{"class":113},[103,5869,159],{"class":109},[103,5871,331],{"class":162},[103,5873,1279],{"class":113},[103,5875,5876,5878,5880,5882,5885],{"class":105,"line":1306},[103,5877,1974],{"class":109},[103,5879,2838],{"class":113},[103,5881,159],{"class":109},[103,5883,5884],{"class":1952},"test04",[103,5886,5887],{"class":113},"(b);\n",[103,5889,5890,5892,5894,5896,5898,5900],{"class":105,"line":1318},[103,5891,1540],{"class":113},[103,5893,1157],{"class":109},[103,5895,401],{"class":113},[103,5897,1157],{"class":109},[103,5899,1227],{"class":113},[103,5901,5902],{"class":172}," \u002F\u002F1\n",[103,5904,5905],{"class":105,"line":1601},[103,5906,1554],{"class":113},[45,5908,5910],{"id":5909},"_25函数的声明","2.5函数的声明",[14,5912,5913],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,5915,5916,5917],{},"函数的",[263,5918,5919],{},"声明可以多次，但是函数的定义只能有一次",[94,5921,5923],{"className":96,"code":5922,"language":98,"meta":24,"style":24},"\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",[100,5924,5925,5930,5935,5960,5969,5973,5985,5997,6013,6017,6037,6041,6060],{"__ignoreMap":24},[103,5926,5927],{"class":105,"line":106},[103,5928,5929],{"class":172},"\u002F\u002F函数声明\n",[103,5931,5932],{"class":105,"line":25},[103,5933,5934],{"class":172},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[103,5936,5937,5939,5942,5944,5946,5948,5950,5952,5954,5957],{"class":105,"line":1168},[103,5938,117],{"class":109},[103,5940,5941],{"class":1952}," max",[103,5943,114],{"class":113},[103,5945,117],{"class":109},[103,5947,1387],{"class":5206},[103,5949,491],{"class":113},[103,5951,117],{"class":109},[103,5953,2822],{"class":5206},[103,5955,5956],{"class":113},");",[103,5958,5959],{"class":172},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[103,5961,5962,5964,5966],{"class":105,"line":1183},[103,5963,117],{"class":109},[103,5965,1962],{"class":1952},[103,5967,5968],{"class":113},"() \n",[103,5970,5971],{"class":105,"line":1189},[103,5972,1535],{"class":113},[103,5974,5975,5977,5979,5981,5983],{"class":105,"line":1203},[103,5976,1974],{"class":109},[103,5978,1387],{"class":113},[103,5980,159],{"class":109},[103,5982,559],{"class":162},[103,5984,1279],{"class":113},[103,5986,5987,5989,5991,5993,5995],{"class":105,"line":1209},[103,5988,1974],{"class":109},[103,5990,2822],{"class":113},[103,5992,159],{"class":109},[103,5994,813],{"class":162},[103,5996,1279],{"class":113},[103,5998,5999,6001,6003,6006,6009,6011],{"class":105,"line":1300},[103,6000,1540],{"class":113},[103,6002,1157],{"class":109},[103,6004,6005],{"class":1952},"max",[103,6007,6008],{"class":113},"(a,b)",[103,6010,1157],{"class":109},[103,6012,1180],{"class":113},[103,6014,6015],{"class":105,"line":1306},[103,6016,1554],{"class":113},[103,6018,6019,6021,6023,6025,6027,6029,6031,6033,6035],{"class":105,"line":1318},[103,6020,117],{"class":109},[103,6022,5941],{"class":1952},[103,6024,114],{"class":113},[103,6026,117],{"class":109},[103,6028,1387],{"class":5206},[103,6030,491],{"class":113},[103,6032,117],{"class":109},[103,6034,2822],{"class":5206},[103,6036,120],{"class":113},[103,6038,6039],{"class":105,"line":1601},[103,6040,1535],{"class":113},[103,6042,6043,6045,6047,6049,6051,6053,6055,6057],{"class":105,"line":1606},[103,6044,4079],{"class":109},[103,6046,1387],{"class":113},[103,6048,1073],{"class":109},[103,6050,376],{"class":113},[103,6052,1099],{"class":109},[103,6054,17],{"class":113},[103,6056,972],{"class":109},[103,6058,6059],{"class":113},"b;\n",[103,6061,6062],{"class":105,"line":1612},[103,6063,1554],{"class":113},[45,6065,6067],{"id":6066},"_26函数的分文件编写","2.6函数的分文件编写",[14,6069,6070],{},"4个步骤：",[1120,6072,6073,6076,6079,6082],{},[60,6074,6075],{},"1.创建后缀名为.h的头文件",[60,6077,6078],{},"2.创建后缀名为.cpp的源文件",[60,6080,6081],{},"3.在头文件中写函数的定义",[60,6083,6084],{},"4.在源文件中写函数的定义\n示例：",[14,6086,6087],{},"头文件：swap.h",[94,6089,6091],{"className":96,"code":6090,"language":98,"meta":24,"style":24},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[100,6092,6093,6099,6109,6113],{"__ignoreMap":24},[103,6094,6095,6097],{"class":105,"line":106},[103,6096,1938],{"class":109},[103,6098,1941],{"class":218},[103,6100,6101,6103,6105,6107],{"class":105,"line":25},[103,6102,1946],{"class":109},[103,6104,1949],{"class":109},[103,6106,1953],{"class":1952},[103,6108,1279],{"class":113},[103,6110,6111],{"class":105,"line":1168},[103,6112,5929],{"class":172},[103,6114,6115,6117,6119,6121,6123,6125,6127,6129,6131],{"class":105,"line":1183},[103,6116,5354],{"class":109},[103,6118,5357],{"class":1952},[103,6120,114],{"class":113},[103,6122,117],{"class":109},[103,6124,1387],{"class":5206},[103,6126,491],{"class":113},[103,6128,117],{"class":109},[103,6130,2822],{"class":5206},[103,6132,2708],{"class":113},[14,6134,6135],{},"源文件：swap.cpp",[94,6137,6139],{"className":96,"code":6138,"language":98,"meta":24,"style":24},"#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",[100,6140,6141,6148,6153,6173,6177,6188,6197,6206,6223,6240],{"__ignoreMap":24},[103,6142,6143,6145],{"class":105,"line":106},[103,6144,1938],{"class":109},[103,6146,6147],{"class":218}," \"swap.h\"\n",[103,6149,6150],{"class":105,"line":25},[103,6151,6152],{"class":172},"\u002F\u002F函数的定义\n",[103,6154,6155,6157,6159,6161,6163,6165,6167,6169,6171],{"class":105,"line":1168},[103,6156,5354],{"class":109},[103,6158,5357],{"class":1952},[103,6160,114],{"class":113},[103,6162,117],{"class":109},[103,6164,1387],{"class":5206},[103,6166,491],{"class":113},[103,6168,117],{"class":109},[103,6170,2822],{"class":5206},[103,6172,120],{"class":113},[103,6174,6175],{"class":105,"line":1183},[103,6176,1535],{"class":113},[103,6178,6179,6181,6183,6185],{"class":105,"line":1189},[103,6180,1974],{"class":109},[103,6182,4244],{"class":113},[103,6184,159],{"class":109},[103,6186,6187],{"class":113},"a;\n",[103,6189,6190,6193,6195],{"class":105,"line":1203},[103,6191,6192],{"class":113},"    a",[103,6194,159],{"class":109},[103,6196,6059],{"class":113},[103,6198,6199,6202,6204],{"class":105,"line":1209},[103,6200,6201],{"class":113},"    b",[103,6203,159],{"class":109},[103,6205,4269],{"class":113},[103,6207,6208,6210,6212,6215,6217,6219,6221],{"class":105,"line":1300},[103,6209,1540],{"class":113},[103,6211,1157],{"class":109},[103,6213,6214],{"class":218},"\"a=\"",[103,6216,1157],{"class":109},[103,6218,17],{"class":113},[103,6220,1157],{"class":109},[103,6222,1180],{"class":113},[103,6224,6225,6227,6229,6232,6234,6236,6238],{"class":105,"line":1306},[103,6226,1540],{"class":113},[103,6228,1157],{"class":109},[103,6230,6231],{"class":218},"\"b=\"",[103,6233,1157],{"class":109},[103,6235,376],{"class":113},[103,6237,1157],{"class":109},[103,6239,1180],{"class":113},[103,6241,6242],{"class":105,"line":1318},[103,6243,1554],{"class":113},[5116,6245,6246],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":24,"searchDepth":25,"depth":25,"links":6248},[6249,6250,6251,6252,6253,6254],{"id":5162,"depth":25,"text":5163},{"id":5251,"depth":25,"text":5252},{"id":5334,"depth":25,"text":5335},{"id":5560,"depth":25,"text":5561},{"id":5909,"depth":25,"text":5910},{"id":6066,"depth":25,"text":6067},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5154,"description":24},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6261,"title":6262,"body":6263,"description":6270,"extension":28,"meta":7675,"navigation":30,"path":7676,"seo":7677,"stem":7678,"__hash__":7679},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6264,"toc":7665},[6265,6268,6271,6275,6437,6441,6444,6447,6450,6453,6593,6597,6600,6603,6606,6671,6675,6680,6747,6750,6754,6757,6768,6773,6793,6796,6801,6820,6823,6827,6846,6849,6853,7088,7092,7095,7098,7101,7263,7266,7270,7273,7279,7662],[10,6266,6262],{"id":6267},"_3指针",[14,6269,6270],{},"通过指针保存一个地址，指针就是个地址",[45,6272,6274],{"id":6273},"_31定义指针","3.1定义指针",[94,6276,6278],{"className":96,"code":6277,"language":98,"meta":24,"style":24},"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",[100,6279,6280,6288,6292,6297,6309,6314,6322,6332,6350,6370,6374,6379,6384,6389,6403,6419,6433],{"__ignoreMap":24},[103,6281,6282,6284,6286],{"class":105,"line":106},[103,6283,117],{"class":109},[103,6285,1962],{"class":1952},[103,6287,1965],{"class":113},[103,6289,6290],{"class":105,"line":25},[103,6291,1535],{"class":113},[103,6293,6294],{"class":105,"line":1168},[103,6295,6296],{"class":172},"    \u002F\u002F1.定义指针\n",[103,6298,6299,6301,6303,6305,6307],{"class":105,"line":1183},[103,6300,1974],{"class":109},[103,6302,1387],{"class":113},[103,6304,159],{"class":109},[103,6306,559],{"class":162},[103,6308,1279],{"class":113},[103,6310,6311],{"class":105,"line":1189},[103,6312,6313],{"class":172},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[103,6315,6316,6319],{"class":105,"line":1203},[103,6317,6318],{"class":109},"    int*",[103,6320,6321],{"class":113},"p;\n",[103,6323,6324,6327,6330],{"class":105,"line":1209},[103,6325,6326],{"class":113},"    p",[103,6328,6329],{"class":109},"=&",[103,6331,6187],{"class":113},[103,6333,6334,6336,6338,6341,6344,6346,6348],{"class":105,"line":1300},[103,6335,1540],{"class":113},[103,6337,1157],{"class":109},[103,6339,6340],{"class":218},"\"a的地址为：\"",[103,6342,6343],{"class":109},"\u003C\u003C&",[103,6345,17],{"class":113},[103,6347,1157],{"class":109},[103,6349,1180],{"class":113},[103,6351,6352,6354,6356,6359,6361,6363,6365,6367],{"class":105,"line":1306},[103,6353,1540],{"class":113},[103,6355,1157],{"class":109},[103,6357,6358],{"class":218},"\"指针p为：\"",[103,6360,1157],{"class":109},[103,6362,14],{"class":113},[103,6364,1157],{"class":109},[103,6366,1227],{"class":113},[103,6368,6369],{"class":172},"\u002F\u002F指针p表示的就是a的地址\n",[103,6371,6372],{"class":105,"line":1318},[103,6373,2389],{"emptyLinePlaceholder":30},[103,6375,6376],{"class":105,"line":1601},[103,6377,6378],{"class":172},"    \u002F\u002F2.使用指针\n",[103,6380,6381],{"class":105,"line":1606},[103,6382,6383],{"class":172},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[103,6385,6386],{"class":105,"line":1612},[103,6387,6388],{"class":172},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[103,6390,6391,6394,6396,6398,6401],{"class":105,"line":1617},[103,6392,6393],{"class":109},"    *",[103,6395,14],{"class":113},[103,6397,159],{"class":109},[103,6399,6400],{"class":162},"1000",[103,6402,1279],{"class":113},[103,6404,6405,6407,6410,6412,6414,6416],{"class":105,"line":1631},[103,6406,1540],{"class":113},[103,6408,6409],{"class":109},"\u003C\u003C*",[103,6411,14],{"class":113},[103,6413,1157],{"class":109},[103,6415,1227],{"class":113},[103,6417,6418],{"class":172},"\u002F\u002F1000\n",[103,6420,6421,6423,6425,6427,6429,6431],{"class":105,"line":1636},[103,6422,1540],{"class":113},[103,6424,1157],{"class":109},[103,6426,17],{"class":113},[103,6428,1157],{"class":109},[103,6430,1227],{"class":113},[103,6432,6418],{"class":172},[103,6434,6435],{"class":105,"line":1642},[103,6436,1554],{"class":113},[45,6438,6440],{"id":6439},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6442,6443],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6445,6446],{},"在32位操作系统下：占用4个字节空间",[14,6448,6449],{},"在64位操作系统下：占用8个字节空间",[14,6451,6452],{},"上方是不管啥数据类型的",[94,6454,6456],{"className":96,"code":6455,"language":98,"meta":24,"style":24},"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",[100,6457,6458,6466,6470,6475,6487,6492,6497,6502,6515,6537,6563,6589],{"__ignoreMap":24},[103,6459,6460,6462,6464],{"class":105,"line":106},[103,6461,117],{"class":109},[103,6463,1962],{"class":1952},[103,6465,1965],{"class":113},[103,6467,6468],{"class":105,"line":25},[103,6469,1535],{"class":113},[103,6471,6472],{"class":105,"line":1168},[103,6473,6474],{"class":172},"    \u002F\u002F指针所占内存空间\n",[103,6476,6477,6479,6481,6483,6485],{"class":105,"line":1183},[103,6478,1974],{"class":109},[103,6480,1387],{"class":113},[103,6482,159],{"class":109},[103,6484,559],{"class":162},[103,6486,1279],{"class":113},[103,6488,6489],{"class":105,"line":1189},[103,6490,6491],{"class":172},"    \u002F\u002Fint *p;\n",[103,6493,6494],{"class":105,"line":1203},[103,6495,6496],{"class":172},"    \u002F\u002Fp=&a;\n",[103,6498,6499],{"class":105,"line":1209},[103,6500,6501],{"class":172},"    \u002F\u002F上述可以写为以下：\n",[103,6503,6504,6506,6509,6511,6513],{"class":105,"line":1300},[103,6505,1974],{"class":109},[103,6507,6508],{"class":109}," *",[103,6510,14],{"class":113},[103,6512,6329],{"class":109},[103,6514,6187],{"class":113},[103,6516,6517,6520,6522,6525,6527,6530,6532,6534],{"class":105,"line":1306},[103,6518,6519],{"class":113},"    cout ",[103,6521,1157],{"class":109},[103,6523,6524],{"class":218},"\"sizeof(int *)\"",[103,6526,1361],{"class":109},[103,6528,6529],{"class":113},"(p)",[103,6531,1157],{"class":109},[103,6533,1227],{"class":113},[103,6535,6536],{"class":172},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[103,6538,6539,6541,6543,6545,6547,6549,6551,6553,6555,6557,6560],{"class":105,"line":1318},[103,6540,6519],{"class":113},[103,6542,1157],{"class":109},[103,6544,6524],{"class":218},[103,6546,1361],{"class":109},[103,6548,114],{"class":113},[103,6550,117],{"class":109},[103,6552,6508],{"class":109},[103,6554,542],{"class":113},[103,6556,1157],{"class":109},[103,6558,6559],{"class":113},"endl",[103,6561,6562],{"class":172},"  \u002F\u002F4字节(32位的话)\n",[103,6564,6565,6567,6569,6572,6574,6576,6578,6580,6582,6584,6586],{"class":105,"line":1601},[103,6566,6519],{"class":113},[103,6568,1157],{"class":109},[103,6570,6571],{"class":218},"\"sizeof(char *)\"",[103,6573,1361],{"class":109},[103,6575,114],{"class":113},[103,6577,210],{"class":109},[103,6579,6508],{"class":109},[103,6581,542],{"class":113},[103,6583,1157],{"class":109},[103,6585,1227],{"class":113},[103,6587,6588],{"class":172}," \u002F\u002F4字节(32位的话)\n",[103,6590,6591],{"class":105,"line":1606},[103,6592,1554],{"class":113},[45,6594,6596],{"id":6595},"_33空指针","3.3空指针",[14,6598,6599],{},"空指针：指针变量指向内存中编号为0的空间",[14,6601,6602],{},"用途：初始化指针变量",[14,6604,6605],{},"注意：空指针指向的内存是不可以访问的",[94,6607,6609],{"className":96,"code":6608,"language":98,"meta":24,"style":24},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[100,6610,6611,6619,6623,6628,6642,6647,6662,6667],{"__ignoreMap":24},[103,6612,6613,6615,6617],{"class":105,"line":106},[103,6614,117],{"class":109},[103,6616,1962],{"class":1952},[103,6618,1965],{"class":113},[103,6620,6621],{"class":105,"line":25},[103,6622,1535],{"class":113},[103,6624,6625],{"class":105,"line":1168},[103,6626,6627],{"class":172},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[103,6629,6630,6632,6634,6636,6638,6640],{"class":105,"line":1183},[103,6631,1974],{"class":109},[103,6633,6508],{"class":109},[103,6635,14],{"class":113},[103,6637,159],{"class":109},[103,6639,2381],{"class":162},[103,6641,1279],{"class":113},[103,6643,6644],{"class":105,"line":1189},[103,6645,6646],{"class":172},"    \u002F\u002F2.空指针不能进行访问\n",[103,6648,6649,6651,6653,6655,6657,6659],{"class":105,"line":1203},[103,6650,6393],{"class":109},[103,6652,14],{"class":113},[103,6654,159],{"class":109},[103,6656,424],{"class":162},[103,6658,169],{"class":113},[103,6660,6661],{"class":172},"\u002F\u002F直接报错，压根不能访问\n",[103,6663,6664],{"class":105,"line":1209},[103,6665,6666],{"class":172},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[103,6668,6669],{"class":105,"line":1300},[103,6670,1554],{"class":113},[45,6672,6674],{"id":6673},"_34野指针","3.4野指针",[14,6676,6677],{},[263,6678,6679],{},"指针变量指向非法的内存空间",[94,6681,6683],{"className":96,"code":6682,"language":98,"meta":24,"style":24},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[100,6684,6685,6693,6697,6726,6731,6743],{"__ignoreMap":24},[103,6686,6687,6689,6691],{"class":105,"line":106},[103,6688,117],{"class":109},[103,6690,1962],{"class":1952},[103,6692,1965],{"class":113},[103,6694,6695],{"class":105,"line":25},[103,6696,1535],{"class":113},[103,6698,6699,6701,6703,6705,6707,6709,6711,6713,6715,6718,6721,6723],{"class":105,"line":1168},[103,6700,1974],{"class":109},[103,6702,6508],{"class":109},[103,6704,14],{"class":113},[103,6706,159],{"class":109},[103,6708,114],{"class":113},[103,6710,117],{"class":109},[103,6712,6508],{"class":109},[103,6714,542],{"class":113},[103,6716,6717],{"class":109},"0x",[103,6719,6720],{"class":162},"1100",[103,6722,169],{"class":113},[103,6724,6725],{"class":172}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[103,6727,6728],{"class":105,"line":1183},[103,6729,6730],{"class":172},"    \u002F\u002F访问野指针报错\n",[103,6732,6733,6735,6737,6739,6741],{"class":105,"line":1189},[103,6734,1540],{"class":113},[103,6736,6409],{"class":109},[103,6738,14],{"class":113},[103,6740,1157],{"class":109},[103,6742,1180],{"class":113},[103,6744,6745],{"class":105,"line":1203},[103,6746,1554],{"class":113},[14,6748,6749],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[45,6751,6753],{"id":6752},"_35const修饰指针","3.5const修饰指针",[14,6755,6756],{},"三种情况：",[1120,6758,6759,6762,6765],{},[60,6760,6761],{},"const修饰指针 常量指针",[60,6763,6764],{},"const修饰常量 指针常量",[60,6766,6767],{},"const即修饰指针，又修饰常量",[57,6769,6770],{},[60,6771,6772],{},"常量指针",[94,6774,6776],{"className":96,"code":6775,"language":98,"meta":24,"style":24},"const int *p=&a;\n",[100,6777,6778],{"__ignoreMap":24},[103,6779,6780,6783,6785,6787,6789,6791],{"class":105,"line":106},[103,6781,6782],{"class":109},"const",[103,6784,2371],{"class":109},[103,6786,6508],{"class":109},[103,6788,14],{"class":113},[103,6790,6329],{"class":109},[103,6792,6187],{"class":113},[14,6794,6795],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[57,6797,6798],{"start":25},[60,6799,6800],{},"指针常量",[94,6802,6804],{"className":96,"code":6803,"language":98,"meta":24,"style":24},"int *const p=&a;\n",[100,6805,6806],{"__ignoreMap":24},[103,6807,6808,6810,6813,6816,6818],{"class":105,"line":106},[103,6809,117],{"class":109},[103,6811,6812],{"class":109}," *const",[103,6814,6815],{"class":113}," p",[103,6817,6329],{"class":109},[103,6819,6187],{"class":113},[14,6821,6822],{},"指针的指向不可以改，指针指向的值可以改",[57,6824,6825],{"start":1168},[60,6826,6767],{},[94,6828,6830],{"className":96,"code":6829,"language":98,"meta":24,"style":24},"const int *const p=&a;\n",[100,6831,6832],{"__ignoreMap":24},[103,6833,6834,6836,6838,6840,6842,6844],{"class":105,"line":106},[103,6835,6782],{"class":109},[103,6837,2371],{"class":109},[103,6839,6812],{"class":109},[103,6841,6815],{"class":113},[103,6843,6329],{"class":109},[103,6845,6187],{"class":113},[14,6847,6848],{},"指针的指向和指针指向的值都不可以改变",[45,6850,6852],{"id":6851},"_36指针和数组","3.6指针和数组",[94,6854,6856],{"className":96,"code":6855,"language":98,"meta":24,"style":24},"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",[100,6857,6858,6866,6870,6875,6929,6950,6966,6982,6993,7010,7015,7029,7055,7059,7071,7080,7084],{"__ignoreMap":24},[103,6859,6860,6862,6864],{"class":105,"line":106},[103,6861,117],{"class":109},[103,6863,1962],{"class":1952},[103,6865,1965],{"class":113},[103,6867,6868],{"class":105,"line":25},[103,6869,1535],{"class":113},[103,6871,6872],{"class":105,"line":1168},[103,6873,6874],{"class":172},"    \u002F\u002F利用指针访问数组中的元素\n",[103,6876,6877,6879,6881,6883,6885,6887,6889,6891,6893,6895,6897,6899,6901,6903,6905,6907,6909,6911,6913,6915,6917,6919,6921,6923,6925,6927],{"class":105,"line":1183},[103,6878,1974],{"class":109},[103,6880,3951],{"class":113},[103,6882,559],{"class":162},[103,6884,1053],{"class":113},[103,6886,159],{"class":109},[103,6888,1009],{"class":113},[103,6890,331],{"class":162},[103,6892,491],{"class":113},[103,6894,191],{"class":162},[103,6896,491],{"class":113},[103,6898,185],{"class":162},[103,6900,491],{"class":113},[103,6902,406],{"class":162},[103,6904,491],{"class":113},[103,6906,432],{"class":162},[103,6908,491],{"class":113},[103,6910,457],{"class":162},[103,6912,491],{"class":113},[103,6914,482],{"class":162},[103,6916,491],{"class":113},[103,6918,508],{"class":162},[103,6920,491],{"class":113},[103,6922,533],{"class":162},[103,6924,491],{"class":113},[103,6926,559],{"class":162},[103,6928,3984],{"class":113},[103,6930,6931,6933,6935,6938,6940,6942,6944,6946,6948],{"class":105,"line":1189},[103,6932,1540],{"class":113},[103,6934,1157],{"class":109},[103,6936,6937],{"class":218},"\"数组的第一个元素为：\"",[103,6939,1157],{"class":109},[103,6941,3895],{"class":113},[103,6943,305],{"class":162},[103,6945,1053],{"class":113},[103,6947,1157],{"class":109},[103,6949,1180],{"class":113},[103,6951,6952,6954,6956,6958,6960,6963],{"class":105,"line":1203},[103,6953,1974],{"class":109},[103,6955,6508],{"class":109},[103,6957,14],{"class":113},[103,6959,159],{"class":109},[103,6961,6962],{"class":113},"arr;",[103,6964,6965],{"class":172},"\u002F\u002F注意数才要加取地址符号&\n",[103,6967,6968,6970,6972,6974,6976,6978,6980],{"class":105,"line":1209},[103,6969,1540],{"class":113},[103,6971,1157],{"class":109},[103,6973,6937],{"class":218},[103,6975,6409],{"class":109},[103,6977,14],{"class":113},[103,6979,1157],{"class":109},[103,6981,1180],{"class":113},[103,6983,6984,6986,6988,6990],{"class":105,"line":1300},[103,6985,6326],{"class":113},[103,6987,2281],{"class":109},[103,6989,169],{"class":113},[103,6991,6992],{"class":172}," \u002F\u002F让指针向后偏移4个字节\n",[103,6994,6995,6997,6999,7002,7004,7006,7008],{"class":105,"line":1306},[103,6996,1540],{"class":113},[103,6998,1157],{"class":109},[103,7000,7001],{"class":218},"\"数组的第二个元素为：\"",[103,7003,6409],{"class":109},[103,7005,14],{"class":113},[103,7007,1157],{"class":109},[103,7009,1180],{"class":113},[103,7011,7012],{"class":105,"line":1318},[103,7013,7014],{"class":172},"    \u002F\u002F利用指针遍历数组\n",[103,7016,7017,7019,7021,7024,7026],{"class":105,"line":1601},[103,7018,1974],{"class":109},[103,7020,6508],{"class":109},[103,7022,7023],{"class":113},"p2",[103,7025,159],{"class":109},[103,7027,7028],{"class":113},"arr;\n",[103,7030,7031,7033,7035,7037,7039,7041,7043,7045,7047,7049,7051,7053],{"class":105,"line":1606},[103,7032,3190],{"class":109},[103,7034,1647],{"class":113},[103,7036,117],{"class":109},[103,7038,3021],{"class":113},[103,7040,159],{"class":109},[103,7042,305],{"class":162},[103,7044,3028],{"class":113},[103,7046,1023],{"class":109},[103,7048,559],{"class":162},[103,7050,3028],{"class":113},[103,7052,2281],{"class":109},[103,7054,120],{"class":113},[103,7056,7057],{"class":105,"line":1612},[103,7058,2019],{"class":113},[103,7060,7061,7063,7065,7067,7069],{"class":105,"line":1617},[103,7062,3440],{"class":113},[103,7064,6409],{"class":109},[103,7066,7023],{"class":113},[103,7068,1157],{"class":109},[103,7070,1180],{"class":113},[103,7072,7073,7076,7078],{"class":105,"line":1631},[103,7074,7075],{"class":113},"        p2",[103,7077,2281],{"class":109},[103,7079,1279],{"class":113},[103,7081,7082],{"class":105,"line":1636},[103,7083,2176],{"class":113},[103,7085,7086],{"class":105,"line":1642},[103,7087,1554],{"class":113},[45,7089,7091],{"id":7090},"_37指针和函数","3.7指针和函数",[14,7093,7094],{},"利用指针做函数参数，可以修改实参的值",[14,7096,7097],{},"值传递：只改变形参，不改变实参",[14,7099,7100],{},"地址传递：",[94,7102,7104],{"className":96,"code":7103,"language":98,"meta":24,"style":24},"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",[100,7105,7106,7131,7135,7147,7158,7168,7172,7180,7184,7196,7208,7213,7229,7244,7259],{"__ignoreMap":24},[103,7107,7108,7110,7112,7114,7116,7118,7121,7123,7125,7127,7129],{"class":105,"line":106},[103,7109,5354],{"class":109},[103,7111,5357],{"class":1952},[103,7113,114],{"class":113},[103,7115,117],{"class":109},[103,7117,6508],{"class":109},[103,7119,7120],{"class":5206},"p1",[103,7122,491],{"class":113},[103,7124,117],{"class":109},[103,7126,6508],{"class":109},[103,7128,7023],{"class":5206},[103,7130,120],{"class":113},[103,7132,7133],{"class":105,"line":25},[103,7134,1535],{"class":113},[103,7136,7137,7139,7141,7144],{"class":105,"line":1168},[103,7138,1974],{"class":109},[103,7140,4244],{"class":113},[103,7142,7143],{"class":109},"=*",[103,7145,7146],{"class":113},"p1;\n",[103,7148,7149,7151,7153,7155],{"class":105,"line":1183},[103,7150,6393],{"class":109},[103,7152,7120],{"class":113},[103,7154,7143],{"class":109},[103,7156,7157],{"class":113},"p2;\n",[103,7159,7160,7162,7164,7166],{"class":105,"line":1189},[103,7161,6393],{"class":109},[103,7163,7023],{"class":113},[103,7165,159],{"class":109},[103,7167,4269],{"class":113},[103,7169,7170],{"class":105,"line":1203},[103,7171,1554],{"class":113},[103,7173,7174,7176,7178],{"class":105,"line":1209},[103,7175,117],{"class":109},[103,7177,1962],{"class":1952},[103,7179,1965],{"class":113},[103,7181,7182],{"class":105,"line":1300},[103,7183,1535],{"class":113},[103,7185,7186,7188,7190,7192,7194],{"class":105,"line":1306},[103,7187,1974],{"class":109},[103,7189,1387],{"class":113},[103,7191,159],{"class":109},[103,7193,559],{"class":162},[103,7195,1279],{"class":113},[103,7197,7198,7200,7202,7204,7206],{"class":105,"line":1318},[103,7199,1974],{"class":109},[103,7201,2822],{"class":113},[103,7203,159],{"class":109},[103,7205,813],{"class":162},[103,7207,1279],{"class":113},[103,7209,7210],{"class":105,"line":1601},[103,7211,7212],{"class":172},"    \u002F\u002F地址传递\n",[103,7214,7215,7217,7219,7221,7224,7226],{"class":105,"line":1606},[103,7216,5551],{"class":1952},[103,7218,114],{"class":113},[103,7220,466],{"class":109},[103,7222,7223],{"class":113},"a,",[103,7225,466],{"class":109},[103,7227,7228],{"class":113},"b);\n",[103,7230,7231,7233,7235,7237,7239,7241],{"class":105,"line":1612},[103,7232,1540],{"class":113},[103,7234,1157],{"class":109},[103,7236,17],{"class":113},[103,7238,1157],{"class":109},[103,7240,1227],{"class":113},[103,7242,7243],{"class":172},"\u002F\u002F20\n",[103,7245,7246,7248,7250,7252,7254,7256],{"class":105,"line":1617},[103,7247,1540],{"class":113},[103,7249,1157],{"class":109},[103,7251,376],{"class":113},[103,7253,1157],{"class":109},[103,7255,1227],{"class":113},[103,7257,7258],{"class":172},"\u002F\u002F10\n",[103,7260,7261],{"class":105,"line":1631},[103,7262,1554],{"class":113},[14,7264,7265],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[45,7267,7269],{"id":7268},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7271,7272],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7274,7275,7276,7278],{},"例如数组：int arr",[103,7277,559],{},"={4,3,6,9,1,2,10,8,7,5}",[94,7280,7282],{"className":96,"code":7281,"language":98,"meta":24,"style":24},"#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",[100,7283,7284,7290,7300,7324,7328,7359,7363,7397,7401,7419,7423,7434,7449,7464,7468,7472,7476,7480,7484,7492,7496,7501,7555,7567,7579,7584,7592,7596,7601,7626,7630,7645,7654,7658],{"__ignoreMap":24},[103,7285,7286,7288],{"class":105,"line":106},[103,7287,1938],{"class":109},[103,7289,1941],{"class":218},[103,7291,7292,7294,7296,7298],{"class":105,"line":25},[103,7293,1946],{"class":109},[103,7295,1949],{"class":109},[103,7297,1953],{"class":1952},[103,7299,1279],{"class":113},[103,7301,7302,7304,7307,7309,7311,7313,7315,7317,7319,7322],{"class":105,"line":1168},[103,7303,5354],{"class":109},[103,7305,7306],{"class":1952}," bubbleSort",[103,7308,114],{"class":113},[103,7310,117],{"class":109},[103,7312,6508],{"class":109},[103,7314,14],{"class":5206},[103,7316,491],{"class":113},[103,7318,117],{"class":109},[103,7320,7321],{"class":5206}," len",[103,7323,120],{"class":113},[103,7325,7326],{"class":105,"line":1183},[103,7327,1535],{"class":113},[103,7329,7330,7332,7334,7336,7338,7340,7342,7344,7346,7349,7351,7353,7355,7357],{"class":105,"line":1189},[103,7331,3190],{"class":109},[103,7333,114],{"class":113},[103,7335,117],{"class":109},[103,7337,3021],{"class":113},[103,7339,159],{"class":109},[103,7341,305],{"class":162},[103,7343,3028],{"class":113},[103,7345,1023],{"class":109},[103,7347,7348],{"class":113},"len",[103,7350,645],{"class":109},[103,7352,331],{"class":162},[103,7354,3028],{"class":113},[103,7356,2281],{"class":109},[103,7358,120],{"class":113},[103,7360,7361],{"class":105,"line":1203},[103,7362,2019],{"class":113},[103,7364,7365,7367,7369,7371,7373,7375,7377,7379,7381,7383,7385,7387,7389,7391,7393,7395],{"class":105,"line":1209},[103,7366,3392],{"class":109},[103,7368,114],{"class":113},[103,7370,117],{"class":109},[103,7372,3399],{"class":113},[103,7374,159],{"class":109},[103,7376,305],{"class":162},[103,7378,3406],{"class":113},[103,7380,1023],{"class":109},[103,7382,7348],{"class":113},[103,7384,645],{"class":109},[103,7386,554],{"class":113},[103,7388,645],{"class":109},[103,7390,331],{"class":162},[103,7392,3406],{"class":113},[103,7394,2281],{"class":109},[103,7396,120],{"class":113},[103,7398,7399],{"class":105,"line":1300},[103,7400,2499],{"class":113},[103,7402,7403,7405,7408,7410,7413,7415,7417],{"class":105,"line":1306},[103,7404,4631],{"class":109},[103,7406,7407],{"class":113},"(p[j]",[103,7409,1073],{"class":109},[103,7411,7412],{"class":113},"p[j",[103,7414,594],{"class":109},[103,7416,331],{"class":162},[103,7418,4646],{"class":113},[103,7420,7421],{"class":105,"line":1318},[103,7422,4651],{"class":113},[103,7424,7425,7427,7429,7431],{"class":105,"line":1601},[103,7426,4656],{"class":109},[103,7428,4244],{"class":113},[103,7430,159],{"class":109},[103,7432,7433],{"class":113},"p[j];\n",[103,7435,7436,7439,7441,7443,7445,7447],{"class":105,"line":1606},[103,7437,7438],{"class":113},"                p[j]",[103,7440,159],{"class":109},[103,7442,7412],{"class":113},[103,7444,594],{"class":109},[103,7446,331],{"class":162},[103,7448,4679],{"class":113},[103,7450,7451,7454,7456,7458,7460,7462],{"class":105,"line":1612},[103,7452,7453],{"class":113},"                p[j",[103,7455,594],{"class":109},[103,7457,331],{"class":162},[103,7459,1053],{"class":113},[103,7461,159],{"class":109},[103,7463,4269],{"class":113},[103,7465,7466],{"class":105,"line":1617},[103,7467,4699],{"class":113},[103,7469,7470],{"class":105,"line":1631},[103,7471,2518],{"class":113},[103,7473,7474],{"class":105,"line":1636},[103,7475,2176],{"class":113},[103,7477,7478],{"class":105,"line":1642},[103,7479,1554],{"class":113},[103,7481,7482],{"class":105,"line":1663},[103,7483,2389],{"emptyLinePlaceholder":30},[103,7485,7486,7488,7490],{"class":105,"line":1668},[103,7487,117],{"class":109},[103,7489,1962],{"class":1952},[103,7491,1965],{"class":113},[103,7493,7494],{"class":105,"line":1682},[103,7495,1535],{"class":113},[103,7497,7498],{"class":105,"line":1687},[103,7499,7500],{"class":172},"    \u002F\u002F 1.创建数组\n",[103,7502,7503,7505,7507,7509,7511,7513,7515,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543,7545,7547,7549,7551,7553],{"class":105,"line":1716},[103,7504,1974],{"class":109},[103,7506,3951],{"class":113},[103,7508,559],{"class":162},[103,7510,1053],{"class":113},[103,7512,159],{"class":109},[103,7514,1009],{"class":113},[103,7516,406],{"class":162},[103,7518,491],{"class":113},[103,7520,185],{"class":162},[103,7522,491],{"class":113},[103,7524,457],{"class":162},[103,7526,491],{"class":113},[103,7528,533],{"class":162},[103,7530,491],{"class":113},[103,7532,331],{"class":162},[103,7534,491],{"class":113},[103,7536,191],{"class":162},[103,7538,491],{"class":113},[103,7540,559],{"class":162},[103,7542,491],{"class":113},[103,7544,508],{"class":162},[103,7546,491],{"class":113},[103,7548,482],{"class":162},[103,7550,491],{"class":113},[103,7552,432],{"class":162},[103,7554,3984],{"class":113},[103,7556,7557,7559,7561,7563,7565],{"class":105,"line":1721},[103,7558,1974],{"class":109},[103,7560,7321],{"class":113},[103,7562,159],{"class":109},[103,7564,559],{"class":162},[103,7566,1279],{"class":113},[103,7568,7569,7571,7573,7575,7577],{"class":105,"line":1738},[103,7570,1974],{"class":109},[103,7572,6508],{"class":109},[103,7574,14],{"class":113},[103,7576,159],{"class":109},[103,7578,7028],{"class":113},[103,7580,7581],{"class":105,"line":1743},[103,7582,7583],{"class":172},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[103,7585,7586,7589],{"class":105,"line":1748},[103,7587,7588],{"class":1952},"    bubbleSort",[103,7590,7591],{"class":113},"(p,len);\n",[103,7593,7594],{"class":105,"line":1753},[103,7595,2389],{"emptyLinePlaceholder":30},[103,7597,7598],{"class":105,"line":1767},[103,7599,7600],{"class":172},"    \u002F\u002F 3.打印排序后的数组\n",[103,7602,7603,7605,7607,7609,7611,7613,7615,7617,7619,7622,7624],{"class":105,"line":1772},[103,7604,3190],{"class":109},[103,7606,1647],{"class":113},[103,7608,117],{"class":109},[103,7610,3021],{"class":113},[103,7612,159],{"class":109},[103,7614,305],{"class":162},[103,7616,3203],{"class":113},[103,7618,1023],{"class":109},[103,7620,7621],{"class":113},"len; i",[103,7623,2281],{"class":109},[103,7625,120],{"class":113},[103,7627,7628],{"class":105,"line":2566},[103,7629,2019],{"class":113},[103,7631,7632,7634,7636,7638,7640,7643],{"class":105,"line":2580},[103,7633,3440],{"class":113},[103,7635,6409],{"class":109},[103,7637,14],{"class":113},[103,7639,1157],{"class":109},[103,7641,7642],{"class":218},"\"\"",[103,7644,1279],{"class":113},[103,7646,7647,7650,7652],{"class":105,"line":2588},[103,7648,7649],{"class":113},"        p",[103,7651,2281],{"class":109},[103,7653,1279],{"class":113},[103,7655,7656],{"class":105,"line":2593},[103,7657,2176],{"class":113},[103,7659,7660],{"class":105,"line":2599},[103,7661,1554],{"class":113},[5116,7663,7664],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":24,"searchDepth":25,"depth":25,"links":7666},[7667,7668,7669,7670,7671,7672,7673,7674],{"id":6273,"depth":25,"text":6274},{"id":6439,"depth":25,"text":6440},{"id":6595,"depth":25,"text":6596},{"id":6673,"depth":25,"text":6674},{"id":6752,"depth":25,"text":6753},{"id":6851,"depth":25,"text":6852},{"id":7090,"depth":25,"text":7091},{"id":7268,"depth":25,"text":7269},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6262,"description":6270},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7681,"title":7682,"body":7683,"description":7690,"extension":28,"meta":10664,"navigation":30,"path":10665,"seo":10666,"stem":10667,"__hash__":10668},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7684,"toc":10655},[7685,7688,7691,7695,7698,7701,7712,8050,8053,8057,8060,8067,8322,8326,8329,8332,8487,8491,8494,8497,8703,8707,8710,9013,9016,9024,9028,9031,9182,9184,9195,9252,9256,9261,9918,9926,9929,10023,10026,10646,10652],[10,7686,7682],{"id":7687},"_4结构体",[14,7689,7690],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[45,7692,7694],{"id":7693},"_41结构体定义与使用","4.1结构体定义与使用",[14,7696,7697],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7699,7700],{},"通过结构体创建变量的方式：",[1120,7702,7703,7706,7709],{},[60,7704,7705],{},"struct 结构体名 变量名",[60,7707,7708],{},"struct 结构体名 变量名={成员1值，成员2值...}",[60,7710,7711],{},"定义结构体时顺便创建变量",[94,7713,7715],{"className":96,"code":7714,"language":98,"meta":24,"style":24},"#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",[100,7716,7717,7723,7733,7740,7745,7753,7757,7762,7766,7771,7776,7781,7788,7793,7800,7804,7811,7815,7819,7823,7827,7831,7835,7841,7845,7851,7859,7867,7871,7876,7881,7892,7897,7909,7920,7931,7936,7960,7965,7971,7998,8003,8009,8021,8033,8045],{"__ignoreMap":24},[103,7718,7719,7721],{"class":105,"line":106},[103,7720,1938],{"class":109},[103,7722,1941],{"class":218},[103,7724,7725,7727,7729,7731],{"class":105,"line":25},[103,7726,1946],{"class":109},[103,7728,1949],{"class":109},[103,7730,1953],{"class":1952},[103,7732,1279],{"class":113},[103,7734,7735,7737],{"class":105,"line":1168},[103,7736,1938],{"class":109},[103,7738,7739],{"class":218},"\u003Cstring>\n",[103,7741,7742],{"class":105,"line":1183},[103,7743,7744],{"class":172},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[103,7746,7747,7750],{"class":105,"line":1189},[103,7748,7749],{"class":109},"struct",[103,7751,7752],{"class":1952}," Student\n",[103,7754,7755],{"class":105,"line":1203},[103,7756,1535],{"class":113},[103,7758,7759],{"class":105,"line":1209},[103,7760,7761],{"class":172},"    \u002F\u002F成员列表\n",[103,7763,7764],{"class":105,"line":1300},[103,7765,2389],{"emptyLinePlaceholder":30},[103,7767,7768],{"class":105,"line":1306},[103,7769,7770],{"class":172},"    \u002F\u002F姓名\n",[103,7772,7773],{"class":105,"line":1318},[103,7774,7775],{"class":113},"    string name;\n",[103,7777,7778],{"class":105,"line":1601},[103,7779,7780],{"class":172},"    \u002F\u002F年龄\n",[103,7782,7783,7785],{"class":105,"line":1606},[103,7784,1974],{"class":109},[103,7786,7787],{"class":113}," age;\n",[103,7789,7790],{"class":105,"line":1612},[103,7791,7792],{"class":172},"    \u002F\u002F分数\n",[103,7794,7795,7797],{"class":105,"line":1617},[103,7796,1974],{"class":109},[103,7798,7799],{"class":113}," score;\n",[103,7801,7802],{"class":105,"line":1631},[103,7803,3984],{"class":113},[103,7805,7806,7808],{"class":105,"line":1636},[103,7807,7749],{"class":109},[103,7809,7810],{"class":1952}," School\n",[103,7812,7813],{"class":105,"line":1642},[103,7814,1535],{"class":113},[103,7816,7817],{"class":105,"line":1663},[103,7818,7761],{"class":172},[103,7820,7821],{"class":105,"line":1668},[103,7822,2389],{"emptyLinePlaceholder":30},[103,7824,7825],{"class":105,"line":1682},[103,7826,7770],{"class":172},[103,7828,7829],{"class":105,"line":1687},[103,7830,7775],{"class":113},[103,7832,7833],{"class":105,"line":1716},[103,7834,7780],{"class":172},[103,7836,7837,7839],{"class":105,"line":1721},[103,7838,1974],{"class":109},[103,7840,7787],{"class":113},[103,7842,7843],{"class":105,"line":1738},[103,7844,7792],{"class":172},[103,7846,7847,7849],{"class":105,"line":1743},[103,7848,1974],{"class":109},[103,7850,7799],{"class":113},[103,7852,7853,7856],{"class":105,"line":1748},[103,7854,7855],{"class":113},"} s3;",[103,7857,7858],{"class":172}," \u002F\u002F创建结构体时就创建了变量\n",[103,7860,7861,7863,7865],{"class":105,"line":1753},[103,7862,117],{"class":109},[103,7864,1962],{"class":1952},[103,7866,1965],{"class":113},[103,7868,7869],{"class":105,"line":1767},[103,7870,1535],{"class":113},[103,7872,7873],{"class":105,"line":1772},[103,7874,7875],{"class":172},"    \u002F\u002F2.通过学生类型创建具体学生\n",[103,7877,7878],{"class":105,"line":2566},[103,7879,7880],{"class":172},"    \u002F\u002F2.1 struct Student s1;\n",[103,7882,7883,7886,7889],{"class":105,"line":2580},[103,7884,7885],{"class":109},"    struct",[103,7887,7888],{"class":1952}," Student",[103,7890,7891],{"class":113}," s1;\n",[103,7893,7894],{"class":105,"line":2588},[103,7895,7896],{"class":172},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[103,7898,7899,7902,7904,7907],{"class":105,"line":2593},[103,7900,7901],{"class":113},"    s1.name",[103,7903,159],{"class":109},[103,7905,7906],{"class":218},"\"张三\"",[103,7908,1279],{"class":113},[103,7910,7911,7914,7916,7918],{"class":105,"line":2599},[103,7912,7913],{"class":113},"    s1.age",[103,7915,159],{"class":109},[103,7917,763],{"class":162},[103,7919,1279],{"class":113},[103,7921,7922,7925,7927,7929],{"class":105,"line":2605},[103,7923,7924],{"class":113},"    s1.score",[103,7926,159],{"class":109},[103,7928,367],{"class":162},[103,7930,1279],{"class":113},[103,7932,7933],{"class":105,"line":2610},[103,7934,7935],{"class":172},"    \u002F\u002F输出结果\n",[103,7937,7939,7941,7943,7946,7948,7951,7953,7956,7958],{"class":105,"line":7938},37,[103,7940,1540],{"class":113},[103,7942,1157],{"class":109},[103,7944,7945],{"class":113},"s1.name",[103,7947,1157],{"class":109},[103,7949,7950],{"class":113},"s1.age",[103,7952,1157],{"class":109},[103,7954,7955],{"class":113},"s1.score",[103,7957,1157],{"class":109},[103,7959,1180],{"class":113},[103,7961,7963],{"class":105,"line":7962},38,[103,7964,2389],{"emptyLinePlaceholder":30},[103,7966,7968],{"class":105,"line":7967},39,[103,7969,7970],{"class":172},"    \u002F\u002F2.2 struct Student s2={...}\n",[103,7972,7974,7976,7978,7981,7983,7985,7988,7990,7992,7994,7996],{"class":105,"line":7973},40,[103,7975,7885],{"class":109},[103,7977,7888],{"class":1952},[103,7979,7980],{"class":113}," s2",[103,7982,159],{"class":109},[103,7984,1009],{"class":113},[103,7986,7987],{"class":218},"\"王五\"",[103,7989,491],{"class":113},[103,7991,763],{"class":162},[103,7993,491],{"class":113},[103,7995,367],{"class":162},[103,7997,3984],{"class":113},[103,7999,8001],{"class":105,"line":8000},41,[103,8002,2389],{"emptyLinePlaceholder":30},[103,8004,8006],{"class":105,"line":8005},42,[103,8007,8008],{"class":172},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[103,8010,8012,8015,8017,8019],{"class":105,"line":8011},43,[103,8013,8014],{"class":113},"    s3.name",[103,8016,159],{"class":109},[103,8018,3667],{"class":218},[103,8020,1279],{"class":113},[103,8022,8024,8027,8029,8031],{"class":105,"line":8023},44,[103,8025,8026],{"class":113},"    s3.age",[103,8028,159],{"class":109},[103,8030,763],{"class":162},[103,8032,1279],{"class":113},[103,8034,8036,8039,8041,8043],{"class":105,"line":8035},45,[103,8037,8038],{"class":113},"    s3.score",[103,8040,159],{"class":109},[103,8042,813],{"class":162},[103,8044,1279],{"class":113},[103,8046,8048],{"class":105,"line":8047},46,[103,8049,1554],{"class":113},[14,8051,8052],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[45,8054,8056],{"id":8055},"_42结构体数组","4.2结构体数组",[14,8058,8059],{},"将自定义的结构体放入到数组中方便维护",[14,8061,8062,8063,8066],{},"语法：struct 结构体名 数组名",[103,8064,8065],{},"元素个数","={ {}，{},...{} };",[94,8068,8070],{"className":96,"code":8069,"language":98,"meta":24,"style":24},"#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",[100,8071,8072,8078,8088,8094,8099,8105,8109,8113,8119,8125,8129,8133,8141,8145,8150,8165,8169,8185,8201,8205,8210,8226,8241,8256,8261,8287,8291,8314,8318],{"__ignoreMap":24},[103,8073,8074,8076],{"class":105,"line":106},[103,8075,1938],{"class":109},[103,8077,1941],{"class":218},[103,8079,8080,8082,8084,8086],{"class":105,"line":25},[103,8081,1946],{"class":109},[103,8083,1949],{"class":109},[103,8085,1953],{"class":1952},[103,8087,1279],{"class":113},[103,8089,8090,8092],{"class":105,"line":1168},[103,8091,1938],{"class":109},[103,8093,7739],{"class":218},[103,8095,8096],{"class":105,"line":1183},[103,8097,8098],{"class":172},"\u002F\u002F1.定义结构体\n",[103,8100,8101,8103],{"class":105,"line":1189},[103,8102,7749],{"class":109},[103,8104,7752],{"class":1952},[103,8106,8107],{"class":105,"line":1203},[103,8108,1535],{"class":113},[103,8110,8111],{"class":105,"line":1209},[103,8112,7775],{"class":113},[103,8114,8115,8117],{"class":105,"line":1300},[103,8116,1974],{"class":109},[103,8118,7787],{"class":113},[103,8120,8121,8123],{"class":105,"line":1306},[103,8122,1974],{"class":109},[103,8124,7799],{"class":113},[103,8126,8127],{"class":105,"line":1318},[103,8128,2389],{"emptyLinePlaceholder":30},[103,8130,8131],{"class":105,"line":1601},[103,8132,3984],{"class":113},[103,8134,8135,8137,8139],{"class":105,"line":1606},[103,8136,117],{"class":109},[103,8138,1962],{"class":1952},[103,8140,1965],{"class":113},[103,8142,8143],{"class":105,"line":1612},[103,8144,1535],{"class":113},[103,8146,8147],{"class":105,"line":1617},[103,8148,8149],{"class":172},"    \u002F\u002F2.创建结构体数组\n",[103,8151,8152,8154,8156,8159,8161,8163],{"class":105,"line":1631},[103,8153,7885],{"class":109},[103,8155,7888],{"class":1952},[103,8157,8158],{"class":113}," stuArray[",[103,8160,191],{"class":162},[103,8162,1053],{"class":113},[103,8164,4897],{"class":109},[103,8166,8167],{"class":105,"line":1636},[103,8168,2019],{"class":113},[103,8170,8171,8173,8175,8177,8179,8181,8183],{"class":105,"line":1642},[103,8172,4906],{"class":113},[103,8174,7906],{"class":218},[103,8176,491],{"class":113},[103,8178,763],{"class":162},[103,8180,491],{"class":113},[103,8182,424],{"class":162},[103,8184,4919],{"class":113},[103,8186,8187,8189,8191,8193,8195,8197,8199],{"class":105,"line":1663},[103,8188,4906],{"class":113},[103,8190,3667],{"class":218},[103,8192,491],{"class":113},[103,8194,688],{"class":162},[103,8196,491],{"class":113},[103,8198,688],{"class":162},[103,8200,1554],{"class":113},[103,8202,8203],{"class":105,"line":1668},[103,8204,2176],{"class":113},[103,8206,8207],{"class":105,"line":1682},[103,8208,8209],{"class":172},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[103,8211,8212,8215,8217,8220,8222,8224],{"class":105,"line":1687},[103,8213,8214],{"class":113},"    stuArray[",[103,8216,331],{"class":162},[103,8218,8219],{"class":113},"].name",[103,8221,159],{"class":109},[103,8223,3690],{"class":218},[103,8225,1279],{"class":113},[103,8227,8228,8230,8232,8235,8237,8239],{"class":105,"line":1716},[103,8229,8214],{"class":113},[103,8231,331],{"class":162},[103,8233,8234],{"class":113},"].age",[103,8236,159],{"class":109},[103,8238,191],{"class":162},[103,8240,1279],{"class":113},[103,8242,8243,8245,8247,8250,8252,8254],{"class":105,"line":1721},[103,8244,8214],{"class":113},[103,8246,331],{"class":162},[103,8248,8249],{"class":113},"].score",[103,8251,159],{"class":109},[103,8253,191],{"class":162},[103,8255,1279],{"class":113},[103,8257,8258],{"class":105,"line":1738},[103,8259,8260],{"class":172},"    \u002F\u002F4.遍历结构体数组\n",[103,8262,8263,8265,8267,8269,8271,8273,8275,8277,8279,8281,8283,8285],{"class":105,"line":1743},[103,8264,3190],{"class":109},[103,8266,1647],{"class":113},[103,8268,117],{"class":109},[103,8270,3021],{"class":113},[103,8272,159],{"class":109},[103,8274,305],{"class":162},[103,8276,3028],{"class":113},[103,8278,1023],{"class":109},[103,8280,191],{"class":162},[103,8282,3028],{"class":113},[103,8284,2281],{"class":109},[103,8286,120],{"class":113},[103,8288,8289],{"class":105,"line":1748},[103,8290,2019],{"class":113},[103,8292,8293,8295,8297,8300,8302,8305,8307,8310,8312],{"class":105,"line":1753},[103,8294,3440],{"class":113},[103,8296,1157],{"class":109},[103,8298,8299],{"class":113},"stuArray[i].name",[103,8301,1157],{"class":109},[103,8303,8304],{"class":113},"stuArray[i].age",[103,8306,1157],{"class":109},[103,8308,8309],{"class":113},"stuArray[i].score",[103,8311,1157],{"class":109},[103,8313,1180],{"class":113},[103,8315,8316],{"class":105,"line":1767},[103,8317,2176],{"class":113},[103,8319,8320],{"class":105,"line":1772},[103,8321,1554],{"class":113},[45,8323,8325],{"id":8324},"_43结构体指针","4.3结构体指针",[14,8327,8328],{},"作用：通过指针访问结构体中的成员",[14,8330,8331],{},"利用操作符->可以通过结构体指针访问结构体属性",[94,8333,8335],{"className":96,"code":8334,"language":98,"meta":24,"style":24},"#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",[100,8336,8337,8343,8353,8359,8363,8369,8373,8377,8383,8389,8393,8401,8405,8410,8435,8440,8455,8460,8483],{"__ignoreMap":24},[103,8338,8339,8341],{"class":105,"line":106},[103,8340,1938],{"class":109},[103,8342,1941],{"class":218},[103,8344,8345,8347,8349,8351],{"class":105,"line":25},[103,8346,1946],{"class":109},[103,8348,1949],{"class":109},[103,8350,1953],{"class":1952},[103,8352,1279],{"class":113},[103,8354,8355,8357],{"class":105,"line":1168},[103,8356,1938],{"class":109},[103,8358,7739],{"class":218},[103,8360,8361],{"class":105,"line":1183},[103,8362,8098],{"class":172},[103,8364,8365,8367],{"class":105,"line":1189},[103,8366,7749],{"class":109},[103,8368,7752],{"class":1952},[103,8370,8371],{"class":105,"line":1203},[103,8372,1535],{"class":113},[103,8374,8375],{"class":105,"line":1209},[103,8376,7775],{"class":113},[103,8378,8379,8381],{"class":105,"line":1300},[103,8380,1974],{"class":109},[103,8382,7787],{"class":113},[103,8384,8385,8387],{"class":105,"line":1306},[103,8386,1974],{"class":109},[103,8388,7799],{"class":113},[103,8390,8391],{"class":105,"line":1318},[103,8392,3984],{"class":113},[103,8394,8395,8397,8399],{"class":105,"line":1601},[103,8396,117],{"class":109},[103,8398,1962],{"class":1952},[103,8400,1965],{"class":113},[103,8402,8403],{"class":105,"line":1606},[103,8404,1535],{"class":113},[103,8406,8407],{"class":105,"line":1612},[103,8408,8409],{"class":172},"    \u002F\u002F创建学生结构体变量\n",[103,8411,8412,8414,8416,8419,8421,8423,8425,8427,8429,8431,8433],{"class":105,"line":1617},[103,8413,7885],{"class":109},[103,8415,7888],{"class":1952},[103,8417,8418],{"class":113}," s",[103,8420,159],{"class":109},[103,8422,1009],{"class":113},[103,8424,7906],{"class":218},[103,8426,491],{"class":113},[103,8428,763],{"class":162},[103,8430,491],{"class":113},[103,8432,1711],{"class":162},[103,8434,3984],{"class":113},[103,8436,8437],{"class":105,"line":1631},[103,8438,8439],{"class":172},"    \u002F\u002F通过指针指向结构体变量\n",[103,8441,8442,8444,8446,8448,8450,8452],{"class":105,"line":1636},[103,8443,7885],{"class":109},[103,8445,7888],{"class":1952},[103,8447,6508],{"class":109},[103,8449,14],{"class":113},[103,8451,6329],{"class":109},[103,8453,8454],{"class":113},"s\n",[103,8456,8457],{"class":105,"line":1642},[103,8458,8459],{"class":172},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[103,8461,8462,8464,8466,8469,8471,8474,8476,8479,8481],{"class":105,"line":1663},[103,8463,1540],{"class":113},[103,8465,1157],{"class":109},[103,8467,8468],{"class":113},"p->name",[103,8470,1157],{"class":109},[103,8472,8473],{"class":113},"p->age",[103,8475,1157],{"class":109},[103,8477,8478],{"class":113},"p->score",[103,8480,1157],{"class":109},[103,8482,1180],{"class":113},[103,8484,8485],{"class":105,"line":1668},[103,8486,1554],{"class":113},[45,8488,8490],{"id":8489},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8492,8493],{},"作用：结构体中的成员可以是另一个结构体",[14,8495,8496],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[94,8498,8500],{"className":96,"code":8499,"language":98,"meta":24,"style":24},"#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",[100,8501,8502,8508,8518,8524,8529,8537,8541,8545,8551,8557,8561,8566,8573,8577,8584,8588,8594,8599,8603,8611,8615,8620,8625,8630,8641,8653,8664,8677,8688,8699],{"__ignoreMap":24},[103,8503,8504,8506],{"class":105,"line":106},[103,8505,1938],{"class":109},[103,8507,1941],{"class":218},[103,8509,8510,8512,8514,8516],{"class":105,"line":25},[103,8511,1946],{"class":109},[103,8513,1949],{"class":109},[103,8515,1953],{"class":1952},[103,8517,1279],{"class":113},[103,8519,8520,8522],{"class":105,"line":1168},[103,8521,1938],{"class":109},[103,8523,7739],{"class":218},[103,8525,8526],{"class":105,"line":1183},[103,8527,8528],{"class":172},"\u002F\u002F定义学生结构体\n",[103,8530,8531,8533,8535],{"class":105,"line":1189},[103,8532,7749],{"class":109},[103,8534,7888],{"class":1952},[103,8536,2663],{"class":113},[103,8538,8539],{"class":105,"line":1203},[103,8540,1535],{"class":113},[103,8542,8543],{"class":105,"line":1209},[103,8544,7775],{"class":113},[103,8546,8547,8549],{"class":105,"line":1300},[103,8548,1974],{"class":109},[103,8550,7787],{"class":113},[103,8552,8553,8555],{"class":105,"line":1306},[103,8554,1974],{"class":109},[103,8556,7799],{"class":113},[103,8558,8559],{"class":105,"line":1318},[103,8560,1554],{"class":113},[103,8562,8563],{"class":105,"line":1601},[103,8564,8565],{"class":172},"\u002F\u002F定义老师结构体\n",[103,8567,8568,8570],{"class":105,"line":1606},[103,8569,7749],{"class":109},[103,8571,8572],{"class":1952}," Teacher\n",[103,8574,8575],{"class":105,"line":1612},[103,8576,1535],{"class":113},[103,8578,8579,8581],{"class":105,"line":1617},[103,8580,1974],{"class":109},[103,8582,8583],{"class":113}," id;\n",[103,8585,8586],{"class":105,"line":1631},[103,8587,7775],{"class":113},[103,8589,8590,8592],{"class":105,"line":1636},[103,8591,1974],{"class":109},[103,8593,7787],{"class":113},[103,8595,8596],{"class":105,"line":1642},[103,8597,8598],{"class":113},"    Student stu;\n",[103,8600,8601],{"class":105,"line":1663},[103,8602,1554],{"class":113},[103,8604,8605,8607,8609],{"class":105,"line":1668},[103,8606,117],{"class":109},[103,8608,1962],{"class":1952},[103,8610,5968],{"class":113},[103,8612,8613],{"class":105,"line":1682},[103,8614,1535],{"class":113},[103,8616,8617],{"class":105,"line":1687},[103,8618,8619],{"class":172},"    \u002F\u002F结构体嵌套结构体\n",[103,8621,8622],{"class":105,"line":1716},[103,8623,8624],{"class":172},"    \u002F\u002F创建老师\n",[103,8626,8627],{"class":105,"line":1721},[103,8628,8629],{"class":113},"    Teacher t;\n",[103,8631,8632,8635,8637,8639],{"class":105,"line":1738},[103,8633,8634],{"class":113},"    t.id",[103,8636,159],{"class":109},[103,8638,424],{"class":162},[103,8640,1279],{"class":113},[103,8642,8643,8646,8648,8651],{"class":105,"line":1743},[103,8644,8645],{"class":113},"    t.name",[103,8647,159],{"class":109},[103,8649,8650],{"class":218},"\"老王\"",[103,8652,1279],{"class":113},[103,8654,8655,8658,8660,8662],{"class":105,"line":1748},[103,8656,8657],{"class":113},"    t.age",[103,8659,159],{"class":109},[103,8661,763],{"class":162},[103,8663,1279],{"class":113},[103,8665,8666,8669,8671,8674],{"class":105,"line":1753},[103,8667,8668],{"class":113},"    t.stu.name",[103,8670,159],{"class":109},[103,8672,8673],{"class":218},"\"小王\"",[103,8675,8676],{"class":113},"；\n",[103,8678,8679,8682,8684,8686],{"class":105,"line":1767},[103,8680,8681],{"class":113},"    t.stu.age",[103,8683,159],{"class":109},[103,8685,813],{"class":162},[103,8687,1279],{"class":113},[103,8689,8690,8693,8695,8697],{"class":105,"line":1772},[103,8691,8692],{"class":113},"    t.stu.score",[103,8694,159],{"class":109},[103,8696,457],{"class":162},[103,8698,1279],{"class":113},[103,8700,8701],{"class":105,"line":2566},[103,8702,1554],{"class":113},[45,8704,8706],{"id":8705},"_45结构体做函数参数","4.5结构体做函数参数",[14,8708,8709],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[94,8711,8713],{"className":96,"code":8712,"language":98,"meta":24,"style":24},"#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",[100,8714,8715,8721,8731,8737,8743,8747,8751,8757,8763,8767,8772,8777,8794,8798,8831,8835,8840,8859,8863,8894,8898,8906,8910,8919,8931,8943,8955,8968,8976,8989,9001,9009],{"__ignoreMap":24},[103,8716,8717,8719],{"class":105,"line":106},[103,8718,1938],{"class":109},[103,8720,1941],{"class":218},[103,8722,8723,8725,8727,8729],{"class":105,"line":25},[103,8724,1946],{"class":109},[103,8726,1949],{"class":109},[103,8728,1953],{"class":1952},[103,8730,1279],{"class":113},[103,8732,8733,8735],{"class":105,"line":1168},[103,8734,1938],{"class":109},[103,8736,7739],{"class":218},[103,8738,8739,8741],{"class":105,"line":1183},[103,8740,7749],{"class":109},[103,8742,7752],{"class":1952},[103,8744,8745],{"class":105,"line":1189},[103,8746,1535],{"class":113},[103,8748,8749],{"class":105,"line":1203},[103,8750,7775],{"class":113},[103,8752,8753,8755],{"class":105,"line":1209},[103,8754,1974],{"class":109},[103,8756,7787],{"class":113},[103,8758,8759,8761],{"class":105,"line":1300},[103,8760,1974],{"class":109},[103,8762,7799],{"class":113},[103,8764,8765],{"class":105,"line":1306},[103,8766,3984],{"class":113},[103,8768,8769],{"class":105,"line":1318},[103,8770,8771],{"class":172},"\u002F\u002F打印学生信息的函数\n",[103,8773,8774],{"class":105,"line":1601},[103,8775,8776],{"class":172},"\u002F\u002F值传递\n",[103,8778,8779,8781,8784,8786,8788,8790,8792],{"class":105,"line":1606},[103,8780,5354],{"class":109},[103,8782,8783],{"class":1952}," printStudent1",[103,8785,114],{"class":113},[103,8787,7749],{"class":109},[103,8789,7888],{"class":1952},[103,8791,8418],{"class":5206},[103,8793,120],{"class":113},[103,8795,8796],{"class":105,"line":1612},[103,8797,1535],{"class":113},[103,8799,8800,8802,8804,8807,8809,8812,8814,8817,8819,8821,8823,8826,8828],{"class":105,"line":1617},[103,8801,6519],{"class":113},[103,8803,1157],{"class":109},[103,8805,8806],{"class":113}," s.name ",[103,8808,1157],{"class":109},[103,8810,8811],{"class":218}," \" \"",[103,8813,1433],{"class":109},[103,8815,8816],{"class":113}," s.age ",[103,8818,1157],{"class":109},[103,8820,8811],{"class":218},[103,8822,1433],{"class":109},[103,8824,8825],{"class":113}," s.score ",[103,8827,1157],{"class":109},[103,8829,8830],{"class":113}," endl;\n",[103,8832,8833],{"class":105,"line":1631},[103,8834,1554],{"class":113},[103,8836,8837],{"class":105,"line":1636},[103,8838,8839],{"class":172},"\u002F\u002F地址传递\n",[103,8841,8842,8844,8847,8849,8851,8853,8855,8857],{"class":105,"line":1642},[103,8843,5354],{"class":109},[103,8845,8846],{"class":1952}," printStudent2",[103,8848,114],{"class":113},[103,8850,7749],{"class":109},[103,8852,7888],{"class":1952},[103,8854,6508],{"class":109},[103,8856,808],{"class":5206},[103,8858,120],{"class":113},[103,8860,8861],{"class":105,"line":1663},[103,8862,1535],{"class":113},[103,8864,8865,8867,8869,8872,8874,8876,8878,8881,8883,8885,8887,8890,8892],{"class":105,"line":1668},[103,8866,6519],{"class":113},[103,8868,1157],{"class":109},[103,8870,8871],{"class":113}," s->name ",[103,8873,1157],{"class":109},[103,8875,8811],{"class":218},[103,8877,1433],{"class":109},[103,8879,8880],{"class":113}," s->age ",[103,8882,1157],{"class":109},[103,8884,8811],{"class":218},[103,8886,1433],{"class":109},[103,8888,8889],{"class":113}," s->score ",[103,8891,1157],{"class":109},[103,8893,8830],{"class":113},[103,8895,8896],{"class":105,"line":1682},[103,8897,1554],{"class":113},[103,8899,8900,8902,8904],{"class":105,"line":1687},[103,8901,117],{"class":109},[103,8903,1962],{"class":1952},[103,8905,1965],{"class":113},[103,8907,8908],{"class":105,"line":1716},[103,8909,1535],{"class":113},[103,8911,8912,8914,8916],{"class":105,"line":1721},[103,8913,7885],{"class":109},[103,8915,7888],{"class":1952},[103,8917,8918],{"class":113}," s;\n",[103,8920,8921,8924,8926,8929],{"class":105,"line":1738},[103,8922,8923],{"class":113},"    s.name ",[103,8925,159],{"class":109},[103,8927,8928],{"class":218}," \"张三\"",[103,8930,1279],{"class":113},[103,8932,8933,8936,8938,8941],{"class":105,"line":1743},[103,8934,8935],{"class":113},"    s.age ",[103,8937,159],{"class":109},[103,8939,8940],{"class":162}," 20",[103,8942,1279],{"class":113},[103,8944,8945,8948,8950,8953],{"class":105,"line":1748},[103,8946,8947],{"class":113},"    s.score ",[103,8949,159],{"class":109},[103,8951,8952],{"class":162}," 85",[103,8954,1279],{"class":113},[103,8956,8957,8959,8961,8964,8966],{"class":105,"line":1753},[103,8958,1540],{"class":113},[103,8960,1157],{"class":109},[103,8962,8963],{"class":218},"\"值传递:\"",[103,8965,1157],{"class":109},[103,8967,1180],{"class":113},[103,8969,8970,8973],{"class":105,"line":1767},[103,8971,8972],{"class":1952},"    printStudent1",[103,8974,8975],{"class":113},"(s);\n",[103,8977,8978,8980,8982,8985,8987],{"class":105,"line":1772},[103,8979,1540],{"class":113},[103,8981,1157],{"class":109},[103,8983,8984],{"class":218},"\"地址传递:\"",[103,8986,1157],{"class":109},[103,8988,1180],{"class":113},[103,8990,8991,8994,8996,8998],{"class":105,"line":2566},[103,8992,8993],{"class":1952},"    printStudent2",[103,8995,114],{"class":113},[103,8997,466],{"class":109},[103,8999,9000],{"class":113},"s); \n",[103,9002,9003,9005,9007],{"class":105,"line":2580},[103,9004,4079],{"class":109},[103,9006,4082],{"class":162},[103,9008,1279],{"class":113},[103,9010,9011],{"class":105,"line":2588},[103,9012,1554],{"class":113},[14,9014,9015],{},"注意：",[1120,9017,9018,9021],{},[60,9019,9020],{},"1.先定义结构体，不要在函数中写结构体的定义",[60,9022,9023],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[45,9025,9027],{"id":9026},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9029,9030],{},"用const防止误操作",[94,9032,9034],{"className":96,"code":9033,"language":98,"meta":24,"style":24},"#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",[100,9035,9036,9042,9052,9058,9063,9067,9071,9077,9083,9087,9103,9107,9130,9134,9142,9146,9167,9174,9178],{"__ignoreMap":24},[103,9037,9038,9040],{"class":105,"line":106},[103,9039,1938],{"class":109},[103,9041,1941],{"class":218},[103,9043,9044,9046,9048,9050],{"class":105,"line":25},[103,9045,1946],{"class":109},[103,9047,1949],{"class":109},[103,9049,1953],{"class":1952},[103,9051,1279],{"class":113},[103,9053,9054,9056],{"class":105,"line":1168},[103,9055,1938],{"class":109},[103,9057,7739],{"class":218},[103,9059,9060],{"class":105,"line":1183},[103,9061,9062],{"class":113},"sctuct Student\n",[103,9064,9065],{"class":105,"line":1189},[103,9066,1535],{"class":113},[103,9068,9069],{"class":105,"line":1203},[103,9070,7775],{"class":113},[103,9072,9073,9075],{"class":105,"line":1209},[103,9074,1974],{"class":109},[103,9076,7787],{"class":113},[103,9078,9079,9081],{"class":105,"line":1300},[103,9080,1974],{"class":109},[103,9082,7799],{"class":113},[103,9084,9085],{"class":105,"line":1306},[103,9086,3984],{"class":113},[103,9088,9089,9091,9094,9096,9099,9101],{"class":105,"line":1318},[103,9090,5354],{"class":109},[103,9092,9093],{"class":1952}," printStudents",[103,9095,114],{"class":113},[103,9097,9098],{"class":1952},"student",[103,9100,8418],{"class":5206},[103,9102,120],{"class":113},[103,9104,9105],{"class":105,"line":1601},[103,9106,1535],{"class":113},[103,9108,9109,9111,9113,9116,9118,9121,9123,9126,9128],{"class":105,"line":1606},[103,9110,1540],{"class":113},[103,9112,1157],{"class":109},[103,9114,9115],{"class":113},"s.name",[103,9117,1157],{"class":109},[103,9119,9120],{"class":113},"s.age",[103,9122,1157],{"class":109},[103,9124,9125],{"class":113},"s.score",[103,9127,1157],{"class":109},[103,9129,1180],{"class":113},[103,9131,9132],{"class":105,"line":1612},[103,9133,1554],{"class":113},[103,9135,9136,9138,9140],{"class":105,"line":1617},[103,9137,117],{"class":109},[103,9139,1962],{"class":1952},[103,9141,5968],{"class":113},[103,9143,9144],{"class":105,"line":1631},[103,9145,1535],{"class":113},[103,9147,9148,9151,9153,9155,9157,9159,9161,9163,9165],{"class":105,"line":1636},[103,9149,9150],{"class":113},"    Student s",[103,9152,159],{"class":109},[103,9154,1009],{"class":113},[103,9156,7906],{"class":218},[103,9158,491],{"class":113},[103,9160,763],{"class":162},[103,9162,491],{"class":113},[103,9164,763],{"class":162},[103,9166,3984],{"class":113},[103,9168,9169,9172],{"class":105,"line":1642},[103,9170,9171],{"class":1952},"    printStudent",[103,9173,8975],{"class":113},[103,9175,9176],{"class":105,"line":1663},[103,9177,2389],{"emptyLinePlaceholder":30},[103,9179,9180],{"class":105,"line":1668},[103,9181,1554],{"class":113},[14,9183,9015],{},[1120,9185,9186,9189,9192],{},[60,9187,9188],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[60,9190,9191],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[60,9193,9194],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[94,9196,9198],{"className":96,"code":9197,"language":98,"meta":24,"style":24},"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",[100,9199,9200,9219,9223,9228,9248],{"__ignoreMap":24},[103,9201,9202,9204,9206,9208,9210,9213,9215,9217],{"class":105,"line":106},[103,9203,5354],{"class":109},[103,9205,9093],{"class":1952},[103,9207,114],{"class":113},[103,9209,6782],{"class":109},[103,9211,9212],{"class":1952}," student",[103,9214,6508],{"class":109},[103,9216,808],{"class":5206},[103,9218,120],{"class":113},[103,9220,9221],{"class":105,"line":25},[103,9222,1535],{"class":113},[103,9224,9225],{"class":105,"line":1168},[103,9226,9227],{"class":172},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[103,9229,9230,9232,9234,9236,9238,9240,9242,9244,9246],{"class":105,"line":1183},[103,9231,1540],{"class":113},[103,9233,1157],{"class":109},[103,9235,9115],{"class":113},[103,9237,1157],{"class":109},[103,9239,9120],{"class":113},[103,9241,1157],{"class":109},[103,9243,9125],{"class":113},[103,9245,1157],{"class":109},[103,9247,1180],{"class":113},[103,9249,9250],{"class":105,"line":1189},[103,9251,1554],{"class":113},[45,9253,9255],{"id":9254},"_47案例","4.7案例",[57,9257,9258],{},[60,9259,9260],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[94,9262,9264],{"className":96,"code":9263,"language":98,"meta":24,"style":24},"#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",[100,9265,9266,9272,9282,9288,9295,9299,9305,9309,9314,9320,9326,9330,9334,9340,9344,9349,9354,9367,9371,9376,9402,9406,9418,9445,9449,9461,9471,9475,9480,9509,9513,9525,9534,9561,9572,9582,9586,9590,9594,9599,9623,9627,9651,9655,9674,9700,9704,9729,9752,9776,9781,9786,9791,9800,9805,9811,9832,9838,9852,9858,9885,9894,9900,9908,9913],{"__ignoreMap":24},[103,9267,9268,9270],{"class":105,"line":106},[103,9269,1938],{"class":109},[103,9271,1941],{"class":218},[103,9273,9274,9276,9278,9280],{"class":105,"line":25},[103,9275,1946],{"class":109},[103,9277,1949],{"class":109},[103,9279,1953],{"class":1952},[103,9281,1279],{"class":113},[103,9283,9284,9286],{"class":105,"line":1168},[103,9285,1938],{"class":109},[103,9287,7739],{"class":218},[103,9289,9290,9292],{"class":105,"line":1183},[103,9291,1938],{"class":109},[103,9293,9294],{"class":218},"\u003Cctime>\n",[103,9296,9297],{"class":105,"line":1189},[103,9298,8528],{"class":172},[103,9300,9301,9303],{"class":105,"line":1203},[103,9302,7749],{"class":109},[103,9304,7752],{"class":1952},[103,9306,9307],{"class":105,"line":1209},[103,9308,1535],{"class":113},[103,9310,9311],{"class":105,"line":1300},[103,9312,9313],{"class":113},"    string sName;\n",[103,9315,9316,9318],{"class":105,"line":1306},[103,9317,1974],{"class":109},[103,9319,7787],{"class":113},[103,9321,9322,9324],{"class":105,"line":1318},[103,9323,1974],{"class":109},[103,9325,7799],{"class":113},[103,9327,9328],{"class":105,"line":1601},[103,9329,3984],{"class":113},[103,9331,9332],{"class":105,"line":1606},[103,9333,8565],{"class":172},[103,9335,9336,9338],{"class":105,"line":1612},[103,9337,7749],{"class":109},[103,9339,8572],{"class":1952},[103,9341,9342],{"class":105,"line":1617},[103,9343,1535],{"class":113},[103,9345,9346],{"class":105,"line":1631},[103,9347,9348],{"class":113},"    string tName;\n",[103,9350,9351],{"class":105,"line":1636},[103,9352,9353],{"class":172},"    \u002F\u002F学生数组\n",[103,9355,9356,9358,9360,9363,9365],{"class":105,"line":1642},[103,9357,7885],{"class":109},[103,9359,7888],{"class":1952},[103,9361,9362],{"class":113}," sArray[",[103,9364,432],{"class":162},[103,9366,4679],{"class":113},[103,9368,9369],{"class":105,"line":1663},[103,9370,3984],{"class":113},[103,9372,9373],{"class":105,"line":1668},[103,9374,9375],{"class":172},"\u002F\u002F给老师和学生赋值的函数\n",[103,9377,9378,9380,9383,9385,9387,9390,9393,9396,9398,9400],{"class":105,"line":1682},[103,9379,5354],{"class":109},[103,9381,9382],{"class":1952}," allocateSpace",[103,9384,114],{"class":113},[103,9386,7749],{"class":109},[103,9388,9389],{"class":1952}," Teacher",[103,9391,9392],{"class":5206}," tArray",[103,9394,9395],{"class":113},"[],",[103,9397,117],{"class":109},[103,9399,7321],{"class":5206},[103,9401,120],{"class":113},[103,9403,9404],{"class":105,"line":1687},[103,9405,1535],{"class":113},[103,9407,9408,9411,9413,9416],{"class":105,"line":1716},[103,9409,9410],{"class":113},"    string nameSeed",[103,9412,159],{"class":109},[103,9414,9415],{"class":218},"\"ABCDE\"",[103,9417,1279],{"class":113},[103,9419,9420,9422,9424,9426,9429,9431,9433,9436,9438,9441,9443],{"class":105,"line":1721},[103,9421,3190],{"class":109},[103,9423,1647],{"class":113},[103,9425,117],{"class":109},[103,9427,9428],{"class":113}," i ",[103,9430,159],{"class":109},[103,9432,4082],{"class":162},[103,9434,9435],{"class":113},"; i ",[103,9437,1023],{"class":109},[103,9439,9440],{"class":113}," len; i",[103,9442,2281],{"class":109},[103,9444,120],{"class":113},[103,9446,9447],{"class":105,"line":1738},[103,9448,2019],{"class":113},[103,9450,9451,9454,9456,9459],{"class":105,"line":1743},[103,9452,9453],{"class":113},"        tArray[i].tName ",[103,9455,159],{"class":109},[103,9457,9458],{"class":218}," \"Teacher_\"",[103,9460,1279],{"class":113},[103,9462,9463,9465,9468],{"class":105,"line":1748},[103,9464,9453],{"class":113},[103,9466,9467],{"class":109},"+=",[103,9469,9470],{"class":113},"nameSeed[i];\n",[103,9472,9473],{"class":105,"line":1753},[103,9474,2389],{"emptyLinePlaceholder":30},[103,9476,9477],{"class":105,"line":1767},[103,9478,9479],{"class":172},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[103,9481,9482,9484,9486,9488,9491,9493,9495,9498,9500,9502,9505,9507],{"class":105,"line":1772},[103,9483,3392],{"class":109},[103,9485,1647],{"class":113},[103,9487,117],{"class":109},[103,9489,9490],{"class":113}," j ",[103,9492,159],{"class":109},[103,9494,4082],{"class":162},[103,9496,9497],{"class":113},"; j ",[103,9499,1023],{"class":109},[103,9501,2137],{"class":162},[103,9503,9504],{"class":113},"; j",[103,9506,2281],{"class":109},[103,9508,120],{"class":113},[103,9510,9511],{"class":105,"line":2566},[103,9512,2499],{"class":113},[103,9514,9515,9518,9520,9523],{"class":105,"line":2580},[103,9516,9517],{"class":113},"            tArray[i].sArray[j].sName ",[103,9519,159],{"class":109},[103,9521,9522],{"class":218}," \"Student_\"",[103,9524,1279],{"class":113},[103,9526,9527,9529,9531],{"class":105,"line":2588},[103,9528,9517],{"class":113},[103,9530,9467],{"class":109},[103,9532,9533],{"class":113}," nameSeed[j];\n",[103,9535,9536,9539,9542,9544,9546,9548,9550,9552,9554,9556,9558],{"class":105,"line":2593},[103,9537,9538],{"class":109},"            int",[103,9540,9541],{"class":113}," random",[103,9543,159],{"class":109},[103,9545,2413],{"class":1952},[103,9547,2416],{"class":113},[103,9549,441],{"class":109},[103,9551,1020],{"class":162},[103,9553,594],{"class":109},[103,9555,514],{"class":162},[103,9557,169],{"class":113},[103,9559,9560],{"class":172},"\u002F\u002F40~99\n",[103,9562,9563,9566,9568,9570],{"class":105,"line":2599},[103,9564,9565],{"class":113},"            tArray[i].sArray[j].age ",[103,9567,159],{"class":109},[103,9569,8940],{"class":162},[103,9571,1279],{"class":113},[103,9573,9574,9577,9579],{"class":105,"line":2605},[103,9575,9576],{"class":113},"            tArray[i].sArray[j].score ",[103,9578,159],{"class":109},[103,9580,9581],{"class":113}," random;\n",[103,9583,9584],{"class":105,"line":2610},[103,9585,2518],{"class":113},[103,9587,9588],{"class":105,"line":7938},[103,9589,2176],{"class":113},[103,9591,9592],{"class":105,"line":7962},[103,9593,1554],{"class":113},[103,9595,9596],{"class":105,"line":7967},[103,9597,9598],{"class":172},"\u002F\u002F打印所有信息的函数\n",[103,9600,9601,9603,9606,9608,9610,9612,9614,9617,9619,9621],{"class":105,"line":7973},[103,9602,5354],{"class":109},[103,9604,9605],{"class":1952}," printInfo",[103,9607,114],{"class":113},[103,9609,7749],{"class":109},[103,9611,9389],{"class":1952},[103,9613,9392],{"class":5206},[103,9615,9616],{"class":113},"[], ",[103,9618,117],{"class":109},[103,9620,7321],{"class":5206},[103,9622,120],{"class":113},[103,9624,9625],{"class":105,"line":8000},[103,9626,1535],{"class":113},[103,9628,9629,9631,9633,9635,9637,9639,9641,9643,9645,9647,9649],{"class":105,"line":8005},[103,9630,3190],{"class":109},[103,9632,1647],{"class":113},[103,9634,117],{"class":109},[103,9636,9428],{"class":113},[103,9638,159],{"class":109},[103,9640,4082],{"class":162},[103,9642,9435],{"class":113},[103,9644,1023],{"class":109},[103,9646,9440],{"class":113},[103,9648,2281],{"class":109},[103,9650,120],{"class":113},[103,9652,9653],{"class":105,"line":8011},[103,9654,2019],{"class":113},[103,9656,9657,9660,9662,9665,9667,9670,9672],{"class":105,"line":8023},[103,9658,9659],{"class":113},"        cout ",[103,9661,1157],{"class":109},[103,9663,9664],{"class":218}," \"Teacher: \"",[103,9666,1433],{"class":109},[103,9668,9669],{"class":113}," tArray[i].tName ",[103,9671,1157],{"class":109},[103,9673,8830],{"class":113},[103,9675,9676,9678,9680,9682,9684,9686,9688,9690,9692,9694,9696,9698],{"class":105,"line":8035},[103,9677,3392],{"class":109},[103,9679,1647],{"class":113},[103,9681,117],{"class":109},[103,9683,9490],{"class":113},[103,9685,159],{"class":109},[103,9687,4082],{"class":162},[103,9689,9497],{"class":113},[103,9691,1023],{"class":109},[103,9693,2137],{"class":162},[103,9695,9504],{"class":113},[103,9697,2281],{"class":109},[103,9699,120],{"class":113},[103,9701,9702],{"class":105,"line":8047},[103,9703,2499],{"class":113},[103,9705,9707,9710,9712,9715,9717,9720,9722,9725,9727],{"class":105,"line":9706},47,[103,9708,9709],{"class":113},"            cout ",[103,9711,1157],{"class":109},[103,9713,9714],{"class":218}," \"",[103,9716,1219],{"class":162},[103,9718,9719],{"class":218},"Student: \"",[103,9721,1433],{"class":109},[103,9723,9724],{"class":113}," tArray[i].sArray[j].sName",[103,9726,1157],{"class":109},[103,9728,1180],{"class":113},[103,9730,9732,9734,9736,9738,9740,9743,9745,9748,9750],{"class":105,"line":9731},48,[103,9733,9709],{"class":113},[103,9735,1157],{"class":109},[103,9737,9714],{"class":218},[103,9739,1219],{"class":162},[103,9741,9742],{"class":218},"Age: \"",[103,9744,1433],{"class":109},[103,9746,9747],{"class":113}," tArray[i].sArray[j].age ",[103,9749,1157],{"class":109},[103,9751,8830],{"class":113},[103,9753,9755,9757,9759,9761,9763,9766,9768,9771,9773],{"class":105,"line":9754},49,[103,9756,9709],{"class":113},[103,9758,1157],{"class":109},[103,9760,9714],{"class":218},[103,9762,1219],{"class":162},[103,9764,9765],{"class":218},"Score: \"",[103,9767,1433],{"class":109},[103,9769,9770],{"class":113}," tArray[i].sArray[j].score ",[103,9772,1157],{"class":109},[103,9774,9775],{"class":113}," endl;   \n",[103,9777,9779],{"class":105,"line":9778},50,[103,9780,2518],{"class":113},[103,9782,9784],{"class":105,"line":9783},51,[103,9785,2176],{"class":113},[103,9787,9789],{"class":105,"line":9788},52,[103,9790,1554],{"class":113},[103,9792,9794,9796,9798],{"class":105,"line":9793},53,[103,9795,117],{"class":109},[103,9797,1962],{"class":1952},[103,9799,1965],{"class":113},[103,9801,9803],{"class":105,"line":9802},54,[103,9804,1535],{"class":113},[103,9806,9808],{"class":105,"line":9807},55,[103,9809,9810],{"class":172},"    \u002F\u002F随机数种子\n",[103,9812,9814,9816,9818,9820,9822,9824,9826,9828,9830],{"class":105,"line":9813},56,[103,9815,2362],{"class":1952},[103,9817,2365],{"class":113},[103,9819,2368],{"class":109},[103,9821,2371],{"class":109},[103,9823,542],{"class":113},[103,9825,2376],{"class":1952},[103,9827,114],{"class":113},[103,9829,2381],{"class":162},[103,9831,2384],{"class":113},[103,9833,9835],{"class":105,"line":9834},57,[103,9836,9837],{"class":172},"    \u002F\u002F1.创建3名老师的数组\n",[103,9839,9841,9843,9845,9848,9850],{"class":105,"line":9840},58,[103,9842,7885],{"class":109},[103,9844,9389],{"class":1952},[103,9846,9847],{"class":113}," tArray[",[103,9849,185],{"class":162},[103,9851,4679],{"class":113},[103,9853,9855],{"class":105,"line":9854},59,[103,9856,9857],{"class":172},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[103,9859,9861,9863,9866,9868,9871,9874,9876,9878,9881,9883],{"class":105,"line":9860},60,[103,9862,1974],{"class":109},[103,9864,9865],{"class":113}," len ",[103,9867,159],{"class":109},[103,9869,9870],{"class":109}," sizeof",[103,9872,9873],{"class":113},"(tArray) ",[103,9875,697],{"class":109},[103,9877,9870],{"class":109},[103,9879,9880],{"class":113},"(tArray[",[103,9882,305],{"class":162},[103,9884,3845],{"class":113},[103,9886,9888,9891],{"class":105,"line":9887},61,[103,9889,9890],{"class":1952},"    allocateSpace",[103,9892,9893],{"class":113},"(tArray, len);\n",[103,9895,9897],{"class":105,"line":9896},62,[103,9898,9899],{"class":172},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[103,9901,9903,9906],{"class":105,"line":9902},63,[103,9904,9905],{"class":1952},"    printInfo",[103,9907,9893],{"class":113},[103,9909,9911],{"class":105,"line":9910},64,[103,9912,2389],{"emptyLinePlaceholder":30},[103,9914,9916],{"class":105,"line":9915},65,[103,9917,1554],{"class":113},[57,9919,9920],{"start":25},[60,9921,9922,9925],{},[263,9923,9924],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,9927,9928],{},"五名英雄信息如下：",[94,9930,9934],{"className":9931,"code":9932,"language":9933,"meta":24,"style":24},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[100,9935,9936,9954,9971,9988,10005],{"__ignoreMap":24},[103,9937,9938,9940,9943,9945,9947,9949,9952],{"class":105,"line":106},[103,9939,4906],{"class":113},[103,9941,9942],{"class":218},"\"刘备\"",[103,9944,491],{"class":113},[103,9946,888],{"class":162},[103,9948,491],{"class":113},[103,9950,9951],{"class":218},"\"男\"",[103,9953,4919],{"class":113},[103,9955,9956,9958,9961,9963,9965,9967,9969],{"class":105,"line":25},[103,9957,4906],{"class":113},[103,9959,9960],{"class":218},"\"关羽\"",[103,9962,491],{"class":113},[103,9964,863],{"class":162},[103,9966,491],{"class":113},[103,9968,9951],{"class":218},[103,9970,4919],{"class":113},[103,9972,9973,9975,9978,9980,9982,9984,9986],{"class":105,"line":1168},[103,9974,4906],{"class":113},[103,9976,9977],{"class":218},"\"张飞\"",[103,9979,491],{"class":113},[103,9981,813],{"class":162},[103,9983,491],{"class":113},[103,9985,9951],{"class":218},[103,9987,4919],{"class":113},[103,9989,9990,9992,9995,9997,9999,10001,10003],{"class":105,"line":1183},[103,9991,4906],{"class":113},[103,9993,9994],{"class":218},"\"赵云\"",[103,9996,491],{"class":113},[103,9998,838],{"class":162},[103,10000,491],{"class":113},[103,10002,9951],{"class":218},[103,10004,4919],{"class":113},[103,10006,10007,10009,10012,10014,10016,10018,10021],{"class":105,"line":1189},[103,10008,4906],{"class":113},[103,10010,10011],{"class":218},"\"貂蝉\"",[103,10013,491],{"class":113},[103,10015,788],{"class":162},[103,10017,491],{"class":113},[103,10019,10020],{"class":218},"\"女\"",[103,10022,4919],{"class":113},[14,10024,10025],{},"代码：",[94,10027,10029],{"className":96,"code":10028,"language":98,"meta":24,"style":24},"#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",[100,10030,10031,10037,10047,10053,10060,10064,10068,10074,10079,10083,10088,10111,10115,10140,10144,10177,10182,10211,10216,10231,10257,10277,10282,10287,10291,10295,10300,10322,10326,10350,10354,10416,10420,10424,10432,10436,10441,10452,10456,10472,10488,10504,10520,10536,10540,10560,10582,10587,10600,10607,10612,10618,10623,10636,10642],{"__ignoreMap":24},[103,10032,10033,10035],{"class":105,"line":106},[103,10034,1938],{"class":109},[103,10036,1941],{"class":218},[103,10038,10039,10041,10043,10045],{"class":105,"line":25},[103,10040,1946],{"class":109},[103,10042,1949],{"class":109},[103,10044,1953],{"class":1952},[103,10046,1279],{"class":113},[103,10048,10049,10051],{"class":105,"line":1168},[103,10050,1938],{"class":109},[103,10052,7739],{"class":218},[103,10054,10055,10057],{"class":105,"line":1183},[103,10056,7749],{"class":109},[103,10058,10059],{"class":1952}," Sanguo\n",[103,10061,10062],{"class":105,"line":1189},[103,10063,1535],{"class":113},[103,10065,10066],{"class":105,"line":1203},[103,10067,7775],{"class":113},[103,10069,10070,10072],{"class":105,"line":1209},[103,10071,1974],{"class":109},[103,10073,7787],{"class":113},[103,10075,10076],{"class":105,"line":1300},[103,10077,10078],{"class":113},"    string gender;\n",[103,10080,10081],{"class":105,"line":1306},[103,10082,3984],{"class":113},[103,10084,10085],{"class":105,"line":1318},[103,10086,10087],{"class":172},"\u002F\u002F定义排序函数\n",[103,10089,10090,10092,10094,10096,10099,10101,10103,10105,10107,10109],{"class":105,"line":1601},[103,10091,5354],{"class":109},[103,10093,7306],{"class":1952},[103,10095,114],{"class":113},[103,10097,10098],{"class":1952},"Sanguo",[103,10100,6508],{"class":109},[103,10102,808],{"class":5206},[103,10104,491],{"class":113},[103,10106,117],{"class":109},[103,10108,7321],{"class":5206},[103,10110,120],{"class":113},[103,10112,10113],{"class":105,"line":1606},[103,10114,1535],{"class":113},[103,10116,10117,10119,10121,10123,10125,10127,10129,10131,10133,10136,10138],{"class":105,"line":1612},[103,10118,3190],{"class":109},[103,10120,114],{"class":113},[103,10122,117],{"class":109},[103,10124,3021],{"class":113},[103,10126,159],{"class":109},[103,10128,305],{"class":162},[103,10130,3028],{"class":113},[103,10132,1023],{"class":109},[103,10134,10135],{"class":113},"len;i",[103,10137,2281],{"class":109},[103,10139,120],{"class":113},[103,10141,10142],{"class":105,"line":1617},[103,10143,2019],{"class":113},[103,10145,10146,10149,10151,10153,10155,10157,10159,10161,10163,10165,10167,10169,10171,10173,10175],{"class":105,"line":1631},[103,10147,10148],{"class":109},"     for",[103,10150,1647],{"class":113},[103,10152,117],{"class":109},[103,10154,3399],{"class":113},[103,10156,159],{"class":109},[103,10158,305],{"class":162},[103,10160,3406],{"class":113},[103,10162,1023],{"class":109},[103,10164,7348],{"class":113},[103,10166,645],{"class":109},[103,10168,331],{"class":162},[103,10170,645],{"class":109},[103,10172,3539],{"class":113},[103,10174,2281],{"class":109},[103,10176,120],{"class":113},[103,10178,10179],{"class":105,"line":1636},[103,10180,10181],{"class":113},"     {\n",[103,10183,10184,10187,10190,10192,10195,10197,10200,10202,10204,10206,10208],{"class":105,"line":1642},[103,10185,10186],{"class":109},"         if",[103,10188,10189],{"class":113}," ((s",[103,10191,594],{"class":109},[103,10193,10194],{"class":113},"j)->age ",[103,10196,1073],{"class":109},[103,10198,10199],{"class":113}," (s",[103,10201,594],{"class":109},[103,10203,580],{"class":113},[103,10205,594],{"class":109},[103,10207,331],{"class":162},[103,10209,10210],{"class":113},")->age)\n",[103,10212,10213],{"class":105,"line":1663},[103,10214,10215],{"class":113},"         {\n",[103,10217,10218,10221,10223,10226,10228],{"class":105,"line":1668},[103,10219,10220],{"class":113},"             Sanguo temp",[103,10222,7143],{"class":109},[103,10224,10225],{"class":113},"(s",[103,10227,594],{"class":109},[103,10229,10230],{"class":113},"j);\n",[103,10232,10233,10236,10238,10240,10243,10245,10247,10249,10251,10253,10255],{"class":105,"line":1682},[103,10234,10235],{"class":109},"             *",[103,10237,10225],{"class":113},[103,10239,594],{"class":109},[103,10241,10242],{"class":113},"j)",[103,10244,7143],{"class":109},[103,10246,10225],{"class":113},[103,10248,594],{"class":109},[103,10250,580],{"class":113},[103,10252,594],{"class":109},[103,10254,331],{"class":162},[103,10256,2708],{"class":113},[103,10258,10259,10261,10263,10265,10267,10269,10271,10273,10275],{"class":105,"line":1687},[103,10260,10235],{"class":109},[103,10262,10225],{"class":113},[103,10264,594],{"class":109},[103,10266,580],{"class":113},[103,10268,594],{"class":109},[103,10270,331],{"class":162},[103,10272,542],{"class":113},[103,10274,159],{"class":109},[103,10276,4269],{"class":113},[103,10278,10279],{"class":105,"line":1716},[103,10280,10281],{"class":113},"         }\n",[103,10283,10284],{"class":105,"line":1721},[103,10285,10286],{"class":113},"     }\n",[103,10288,10289],{"class":105,"line":1738},[103,10290,2176],{"class":113},[103,10292,10293],{"class":105,"line":1743},[103,10294,1554],{"class":113},[103,10296,10297],{"class":105,"line":1748},[103,10298,10299],{"class":172},"\u002F\u002F定义打印函数\n",[103,10301,10302,10304,10306,10308,10310,10312,10314,10316,10318,10320],{"class":105,"line":1753},[103,10303,5354],{"class":109},[103,10305,9605],{"class":1952},[103,10307,114],{"class":113},[103,10309,10098],{"class":1952},[103,10311,6508],{"class":109},[103,10313,808],{"class":5206},[103,10315,491],{"class":113},[103,10317,117],{"class":109},[103,10319,7321],{"class":5206},[103,10321,120],{"class":113},[103,10323,10324],{"class":105,"line":1767},[103,10325,1535],{"class":113},[103,10327,10328,10330,10332,10334,10336,10338,10340,10342,10344,10346,10348],{"class":105,"line":1772},[103,10329,3190],{"class":109},[103,10331,1647],{"class":113},[103,10333,117],{"class":109},[103,10335,3021],{"class":113},[103,10337,159],{"class":109},[103,10339,305],{"class":162},[103,10341,3028],{"class":113},[103,10343,1023],{"class":109},[103,10345,10135],{"class":113},[103,10347,2281],{"class":109},[103,10349,120],{"class":113},[103,10351,10352],{"class":105,"line":2566},[103,10353,2019],{"class":113},[103,10355,10356,10358,10360,10362,10364,10367,10369,10371,10373,10376,10378,10380,10382,10385,10387,10389,10391,10394,10396,10398,10400,10403,10405,10407,10409,10412,10414],{"class":105,"line":2580},[103,10357,3440],{"class":113},[103,10359,1157],{"class":109},[103,10361,364],{"class":218},[103,10363,1219],{"class":162},[103,10365,10366],{"class":218},"姓名：\"",[103,10368,1157],{"class":109},[103,10370,10225],{"class":113},[103,10372,594],{"class":109},[103,10374,10375],{"class":113},"i)->name",[103,10377,1157],{"class":109},[103,10379,364],{"class":218},[103,10381,1219],{"class":162},[103,10383,10384],{"class":218},"年龄：\"",[103,10386,1157],{"class":109},[103,10388,10225],{"class":113},[103,10390,594],{"class":109},[103,10392,10393],{"class":113},"i)->age",[103,10395,1157],{"class":109},[103,10397,364],{"class":218},[103,10399,1219],{"class":162},[103,10401,10402],{"class":218},"性别：\"",[103,10404,1157],{"class":109},[103,10406,10225],{"class":113},[103,10408,594],{"class":109},[103,10410,10411],{"class":113},"i)->gender",[103,10413,1157],{"class":109},[103,10415,1180],{"class":113},[103,10417,10418],{"class":105,"line":2588},[103,10419,2176],{"class":113},[103,10421,10422],{"class":105,"line":2593},[103,10423,1554],{"class":113},[103,10425,10426,10428,10430],{"class":105,"line":2599},[103,10427,117],{"class":109},[103,10429,1962],{"class":1952},[103,10431,1965],{"class":113},[103,10433,10434],{"class":105,"line":2605},[103,10435,1535],{"class":113},[103,10437,10438],{"class":105,"line":2610},[103,10439,10440],{"class":172},"    \u002F\u002F定义结构体变量\n",[103,10442,10443,10446,10448,10450],{"class":105,"line":7938},[103,10444,10445],{"class":113},"    Sanguo s1[",[103,10447,432],{"class":162},[103,10449,1053],{"class":113},[103,10451,4897],{"class":109},[103,10453,10454],{"class":105,"line":7962},[103,10455,2019],{"class":113},[103,10457,10458,10460,10462,10464,10466,10468,10470],{"class":105,"line":7967},[103,10459,4906],{"class":113},[103,10461,9942],{"class":218},[103,10463,491],{"class":113},[103,10465,888],{"class":162},[103,10467,491],{"class":113},[103,10469,9951],{"class":218},[103,10471,4919],{"class":113},[103,10473,10474,10476,10478,10480,10482,10484,10486],{"class":105,"line":7973},[103,10475,4906],{"class":113},[103,10477,9960],{"class":218},[103,10479,491],{"class":113},[103,10481,863],{"class":162},[103,10483,491],{"class":113},[103,10485,9951],{"class":218},[103,10487,4919],{"class":113},[103,10489,10490,10492,10494,10496,10498,10500,10502],{"class":105,"line":8000},[103,10491,4906],{"class":113},[103,10493,9977],{"class":218},[103,10495,491],{"class":113},[103,10497,813],{"class":162},[103,10499,491],{"class":113},[103,10501,9951],{"class":218},[103,10503,4919],{"class":113},[103,10505,10506,10508,10510,10512,10514,10516,10518],{"class":105,"line":8005},[103,10507,4906],{"class":113},[103,10509,9994],{"class":218},[103,10511,491],{"class":113},[103,10513,838],{"class":162},[103,10515,491],{"class":113},[103,10517,9951],{"class":218},[103,10519,4919],{"class":113},[103,10521,10522,10524,10526,10528,10530,10532,10534],{"class":105,"line":8011},[103,10523,4906],{"class":113},[103,10525,10011],{"class":218},[103,10527,491],{"class":113},[103,10529,788],{"class":162},[103,10531,491],{"class":113},[103,10533,10020],{"class":218},[103,10535,4919],{"class":113},[103,10537,10538],{"class":105,"line":8023},[103,10539,4940],{"class":113},[103,10541,10542,10544,10546,10548,10551,10553,10556,10558],{"class":105,"line":8035},[103,10543,1974],{"class":109},[103,10545,7321],{"class":113},[103,10547,4192],{"class":109},[103,10549,10550],{"class":113},"(s1)",[103,10552,4198],{"class":109},[103,10554,10555],{"class":113},"(s1[",[103,10557,305],{"class":162},[103,10559,3845],{"class":113},[103,10561,10562,10565,10567,10570,10572,10575,10578,10580],{"class":105,"line":8047},[103,10563,10564],{"class":113},"    Sanguo ",[103,10566,568],{"class":109},[103,10568,10569],{"class":113},"s ",[103,10571,159],{"class":109},[103,10573,10574],{"class":109}," &",[103,10576,10577],{"class":113},"s1[",[103,10579,305],{"class":162},[103,10581,4679],{"class":113},[103,10583,10584],{"class":105,"line":9706},[103,10585,10586],{"class":172},"    \u002F\u002F排序前：\n",[103,10588,10589,10591,10593,10596,10598],{"class":105,"line":9731},[103,10590,6519],{"class":113},[103,10592,1157],{"class":109},[103,10594,10595],{"class":218}," \"排序前：\"",[103,10597,1433],{"class":109},[103,10599,8830],{"class":113},[103,10601,10602,10604],{"class":105,"line":9754},[103,10603,9905],{"class":1952},[103,10605,10606],{"class":113},"(s,len);\n",[103,10608,10609],{"class":105,"line":9778},[103,10610,10611],{"class":172},"    \u002F\u002F调用排序函数\n",[103,10613,10614,10616],{"class":105,"line":9783},[103,10615,7588],{"class":1952},[103,10617,10606],{"class":113},[103,10619,10620],{"class":105,"line":9788},[103,10621,10622],{"class":172},"    \u002F\u002F排序后\n",[103,10624,10625,10627,10629,10632,10634],{"class":105,"line":9793},[103,10626,6519],{"class":113},[103,10628,1157],{"class":109},[103,10630,10631],{"class":218}," \"排序后：\"",[103,10633,1433],{"class":109},[103,10635,8830],{"class":113},[103,10637,10638,10640],{"class":105,"line":9802},[103,10639,9905],{"class":1952},[103,10641,10606],{"class":113},[103,10643,10644],{"class":105,"line":9807},[103,10645,1554],{"class":113},[14,10647,10648,10649,10651],{},"注意：使用指针时直接用传首地址**&s",[103,10650,305],{},"**",[5116,10653,10654],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":24,"searchDepth":25,"depth":25,"links":10656},[10657,10658,10659,10660,10661,10662,10663],{"id":7693,"depth":25,"text":7694},{"id":8055,"depth":25,"text":8056},{"id":8324,"depth":25,"text":8325},{"id":8489,"depth":25,"text":8490},{"id":8705,"depth":25,"text":8706},{"id":9026,"depth":25,"text":9027},{"id":9254,"depth":25,"text":9255},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7682,"description":7690},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10670,"title":10671,"body":10672,"description":24,"extension":28,"meta":12015,"navigation":30,"path":12016,"seo":12017,"stem":12018,"__hash__":12019},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10673,"toc":12009},[10674,10677,10681,10687,10701,10706,10709,10713,10720,10726,10729,10736,10742,10747,10750,10753,10756,11320,11323,11337,11341,11346,11362,11502,11505,11511,11514,11519,11527,11635,11638,11643,11646,11651,11654,11660,11663,12006],[10,10675,10671],{"id":10676},"_5程序内存模型",[45,10678,10680],{"id":10679},"_51内存分区模型","5.1内存分区模型",[14,10682,10683,10684],{},"C++程序在执行时，将内存大方向划分为",[263,10685,10686],{},"4个区域",[1120,10688,10689,10692,10695,10698],{},[60,10690,10691],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[60,10693,10694],{},"全局区：存放全局变量和静态变量以及常量",[60,10696,10697],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[60,10699,10700],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10702,10703],{},[263,10704,10705],{},"内存四区意义：",[14,10707,10708],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[74,10710,10712],{"id":10711},"_511程序运行前","5.1.1程序运行前",[14,10714,10715,10716,10719],{},"​\t在程序编译后，生成了exe可执行程序，",[263,10717,10718],{},"未执行该程序前","分为两个区域",[14,10721,10722,10723],{},"​\t",[263,10724,10725],{},"代码区：",[14,10727,10728],{},"​\t\t存放 CPU 执行的机器指令",[14,10730,10731,10732,10735],{},"​\t\t代码区是",[263,10733,10734],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10737,10731,10738,10741],{},[263,10739,10740],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10743,10722,10744],{},[263,10745,10746],{},"全局区：",[14,10748,10749],{},"​\t\t全局变量和静态变量存放在此.",[14,10751,10752],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10754,10755],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[94,10757,10759],{"className":96,"code":10758,"language":98,"meta":24,"style":24},"\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",[100,10760,10761,10766,10779,10792,10796,10801,10816,10831,10835,10844,10848,10853,10866,10879,10883,10888,10914,10940,10944,10971,10997,11001,11006,11022,11037,11041,11067,11093,11097,11122,11147,11151,11177,11203,11207,11223,11238,11264,11290,11294,11304,11308,11316],{"__ignoreMap":24},[103,10762,10763],{"class":105,"line":106},[103,10764,10765],{"class":172},"\u002F\u002F全局变量\n",[103,10767,10768,10770,10773,10775,10777],{"class":105,"line":25},[103,10769,117],{"class":109},[103,10771,10772],{"class":113}," g_a ",[103,10774,159],{"class":109},[103,10776,2027],{"class":162},[103,10778,1279],{"class":113},[103,10780,10781,10783,10786,10788,10790],{"class":105,"line":1168},[103,10782,117],{"class":109},[103,10784,10785],{"class":113}," g_b ",[103,10787,159],{"class":109},[103,10789,2027],{"class":162},[103,10791,1279],{"class":113},[103,10793,10794],{"class":105,"line":1183},[103,10795,2389],{"emptyLinePlaceholder":30},[103,10797,10798],{"class":105,"line":1189},[103,10799,10800],{"class":172},"\u002F\u002F全局常量\n",[103,10802,10803,10805,10807,10810,10812,10814],{"class":105,"line":1203},[103,10804,6782],{"class":109},[103,10806,2371],{"class":109},[103,10808,10809],{"class":113}," c_g_a ",[103,10811,159],{"class":109},[103,10813,2027],{"class":162},[103,10815,1279],{"class":113},[103,10817,10818,10820,10822,10825,10827,10829],{"class":105,"line":1209},[103,10819,6782],{"class":109},[103,10821,2371],{"class":109},[103,10823,10824],{"class":113}," c_g_b ",[103,10826,159],{"class":109},[103,10828,2027],{"class":162},[103,10830,1279],{"class":113},[103,10832,10833],{"class":105,"line":1300},[103,10834,2389],{"emptyLinePlaceholder":30},[103,10836,10837,10839,10841],{"class":105,"line":1306},[103,10838,117],{"class":109},[103,10840,1962],{"class":1952},[103,10842,10843],{"class":113},"() {\n",[103,10845,10846],{"class":105,"line":1318},[103,10847,2389],{"emptyLinePlaceholder":30},[103,10849,10850],{"class":105,"line":1601},[103,10851,10852],{"class":172},"    \u002F\u002F局部变量\n",[103,10854,10855,10857,10860,10862,10864],{"class":105,"line":1606},[103,10856,1974],{"class":109},[103,10858,10859],{"class":113}," a ",[103,10861,159],{"class":109},[103,10863,2027],{"class":162},[103,10865,1279],{"class":113},[103,10867,10868,10870,10873,10875,10877],{"class":105,"line":1612},[103,10869,1974],{"class":109},[103,10871,10872],{"class":113}," b ",[103,10874,159],{"class":109},[103,10876,2027],{"class":162},[103,10878,1279],{"class":113},[103,10880,10881],{"class":105,"line":1617},[103,10882,2389],{"emptyLinePlaceholder":30},[103,10884,10885],{"class":105,"line":1631},[103,10886,10887],{"class":172},"    \u002F\u002F打印地址\n",[103,10889,10890,10892,10894,10897,10899,10901,10903,10905,10907,10910,10912],{"class":105,"line":1636},[103,10891,6519],{"class":113},[103,10893,1157],{"class":109},[103,10895,10896],{"class":218}," \"局部变量a地址为： \"",[103,10898,1433],{"class":109},[103,10900,1647],{"class":113},[103,10902,117],{"class":109},[103,10904,542],{"class":113},[103,10906,466],{"class":109},[103,10908,10909],{"class":113},"a ",[103,10911,1157],{"class":109},[103,10913,8830],{"class":113},[103,10915,10916,10918,10920,10923,10925,10927,10929,10931,10933,10936,10938],{"class":105,"line":1642},[103,10917,6519],{"class":113},[103,10919,1157],{"class":109},[103,10921,10922],{"class":218}," \"局部变量b地址为： \"",[103,10924,1433],{"class":109},[103,10926,1647],{"class":113},[103,10928,117],{"class":109},[103,10930,542],{"class":113},[103,10932,466],{"class":109},[103,10934,10935],{"class":113},"b ",[103,10937,1157],{"class":109},[103,10939,8830],{"class":113},[103,10941,10942],{"class":105,"line":1663},[103,10943,2389],{"emptyLinePlaceholder":30},[103,10945,10946,10948,10950,10953,10955,10958,10960,10962,10964,10967,10969],{"class":105,"line":1668},[103,10947,6519],{"class":113},[103,10949,1157],{"class":109},[103,10951,10952],{"class":218}," \"全局变量g_a地址为： \"",[103,10954,1433],{"class":109},[103,10956,10957],{"class":113},"  (",[103,10959,117],{"class":109},[103,10961,542],{"class":113},[103,10963,466],{"class":109},[103,10965,10966],{"class":113},"g_a ",[103,10968,1157],{"class":109},[103,10970,8830],{"class":113},[103,10972,10973,10975,10977,10980,10982,10984,10986,10988,10990,10993,10995],{"class":105,"line":1682},[103,10974,6519],{"class":113},[103,10976,1157],{"class":109},[103,10978,10979],{"class":218}," \"全局变量g_b地址为： \"",[103,10981,1433],{"class":109},[103,10983,10957],{"class":113},[103,10985,117],{"class":109},[103,10987,542],{"class":113},[103,10989,466],{"class":109},[103,10991,10992],{"class":113},"g_b ",[103,10994,1157],{"class":109},[103,10996,8830],{"class":113},[103,10998,10999],{"class":105,"line":1687},[103,11000,2389],{"emptyLinePlaceholder":30},[103,11002,11003],{"class":105,"line":1716},[103,11004,11005],{"class":172},"    \u002F\u002F静态变量\n",[103,11007,11008,11011,11013,11016,11018,11020],{"class":105,"line":1721},[103,11009,11010],{"class":109},"    static",[103,11012,2371],{"class":109},[103,11014,11015],{"class":113}," s_a ",[103,11017,159],{"class":109},[103,11019,2027],{"class":162},[103,11021,1279],{"class":113},[103,11023,11024,11026,11028,11031,11033,11035],{"class":105,"line":1738},[103,11025,11010],{"class":109},[103,11027,2371],{"class":109},[103,11029,11030],{"class":113}," s_b ",[103,11032,159],{"class":109},[103,11034,2027],{"class":162},[103,11036,1279],{"class":113},[103,11038,11039],{"class":105,"line":1743},[103,11040,2389],{"emptyLinePlaceholder":30},[103,11042,11043,11045,11047,11050,11052,11054,11056,11058,11060,11063,11065],{"class":105,"line":1748},[103,11044,6519],{"class":113},[103,11046,1157],{"class":109},[103,11048,11049],{"class":218}," \"静态变量s_a地址为： \"",[103,11051,1433],{"class":109},[103,11053,1647],{"class":113},[103,11055,117],{"class":109},[103,11057,542],{"class":113},[103,11059,466],{"class":109},[103,11061,11062],{"class":113},"s_a ",[103,11064,1157],{"class":109},[103,11066,8830],{"class":113},[103,11068,11069,11071,11073,11076,11078,11080,11082,11084,11086,11089,11091],{"class":105,"line":1753},[103,11070,6519],{"class":113},[103,11072,1157],{"class":109},[103,11074,11075],{"class":218}," \"静态变量s_b地址为： \"",[103,11077,1433],{"class":109},[103,11079,1647],{"class":113},[103,11081,117],{"class":109},[103,11083,542],{"class":113},[103,11085,466],{"class":109},[103,11087,11088],{"class":113},"s_b ",[103,11090,1157],{"class":109},[103,11092,8830],{"class":113},[103,11094,11095],{"class":105,"line":1767},[103,11096,2389],{"emptyLinePlaceholder":30},[103,11098,11099,11101,11103,11106,11108,11110,11112,11114,11116,11118,11120],{"class":105,"line":1772},[103,11100,6519],{"class":113},[103,11102,1157],{"class":109},[103,11104,11105],{"class":218}," \"字符串常量地址为： \"",[103,11107,1433],{"class":109},[103,11109,1647],{"class":113},[103,11111,117],{"class":109},[103,11113,542],{"class":113},[103,11115,466],{"class":109},[103,11117,1175],{"class":218},[103,11119,1433],{"class":109},[103,11121,8830],{"class":113},[103,11123,11124,11126,11128,11130,11132,11134,11136,11138,11140,11143,11145],{"class":105,"line":2566},[103,11125,6519],{"class":113},[103,11127,1157],{"class":109},[103,11129,11105],{"class":218},[103,11131,1433],{"class":109},[103,11133,1647],{"class":113},[103,11135,117],{"class":109},[103,11137,542],{"class":113},[103,11139,466],{"class":109},[103,11141,11142],{"class":218},"\"hello world1\"",[103,11144,1433],{"class":109},[103,11146,8830],{"class":113},[103,11148,11149],{"class":105,"line":2580},[103,11150,2389],{"emptyLinePlaceholder":30},[103,11152,11153,11155,11157,11160,11162,11164,11166,11168,11170,11173,11175],{"class":105,"line":2588},[103,11154,6519],{"class":113},[103,11156,1157],{"class":109},[103,11158,11159],{"class":218}," \"全局常量c_g_a地址为： \"",[103,11161,1433],{"class":109},[103,11163,1647],{"class":113},[103,11165,117],{"class":109},[103,11167,542],{"class":113},[103,11169,466],{"class":109},[103,11171,11172],{"class":113},"c_g_a ",[103,11174,1157],{"class":109},[103,11176,8830],{"class":113},[103,11178,11179,11181,11183,11186,11188,11190,11192,11194,11196,11199,11201],{"class":105,"line":2593},[103,11180,6519],{"class":113},[103,11182,1157],{"class":109},[103,11184,11185],{"class":218}," \"全局常量c_g_b地址为： \"",[103,11187,1433],{"class":109},[103,11189,1647],{"class":113},[103,11191,117],{"class":109},[103,11193,542],{"class":113},[103,11195,466],{"class":109},[103,11197,11198],{"class":113},"c_g_b ",[103,11200,1157],{"class":109},[103,11202,8830],{"class":113},[103,11204,11205],{"class":105,"line":2599},[103,11206,2389],{"emptyLinePlaceholder":30},[103,11208,11209,11212,11214,11217,11219,11221],{"class":105,"line":2605},[103,11210,11211],{"class":109},"    const",[103,11213,2371],{"class":109},[103,11215,11216],{"class":113}," c_l_a ",[103,11218,159],{"class":109},[103,11220,2027],{"class":162},[103,11222,1279],{"class":113},[103,11224,11225,11227,11229,11232,11234,11236],{"class":105,"line":2610},[103,11226,11211],{"class":109},[103,11228,2371],{"class":109},[103,11230,11231],{"class":113}," c_l_b ",[103,11233,159],{"class":109},[103,11235,2027],{"class":162},[103,11237,1279],{"class":113},[103,11239,11240,11242,11244,11247,11249,11251,11253,11255,11257,11260,11262],{"class":105,"line":7938},[103,11241,6519],{"class":113},[103,11243,1157],{"class":109},[103,11245,11246],{"class":218}," \"局部常量c_l_a地址为： \"",[103,11248,1433],{"class":109},[103,11250,1647],{"class":113},[103,11252,117],{"class":109},[103,11254,542],{"class":113},[103,11256,466],{"class":109},[103,11258,11259],{"class":113},"c_l_a ",[103,11261,1157],{"class":109},[103,11263,8830],{"class":113},[103,11265,11266,11268,11270,11273,11275,11277,11279,11281,11283,11286,11288],{"class":105,"line":7962},[103,11267,6519],{"class":113},[103,11269,1157],{"class":109},[103,11271,11272],{"class":218}," \"局部常量c_l_b地址为： \"",[103,11274,1433],{"class":109},[103,11276,1647],{"class":113},[103,11278,117],{"class":109},[103,11280,542],{"class":113},[103,11282,466],{"class":109},[103,11284,11285],{"class":113},"c_l_b ",[103,11287,1157],{"class":109},[103,11289,8830],{"class":113},[103,11291,11292],{"class":105,"line":7967},[103,11293,2389],{"emptyLinePlaceholder":30},[103,11295,11296,11298,11300,11302],{"class":105,"line":7973},[103,11297,2292],{"class":1952},[103,11299,114],{"class":113},[103,11301,2297],{"class":218},[103,11303,2708],{"class":113},[103,11305,11306],{"class":105,"line":8000},[103,11307,2389],{"emptyLinePlaceholder":30},[103,11309,11310,11312,11314],{"class":105,"line":8005},[103,11311,4079],{"class":109},[103,11313,4082],{"class":162},[103,11315,1279],{"class":113},[103,11317,11318],{"class":105,"line":8011},[103,11319,1554],{"class":113},[14,11321,11322],{},"总结：",[1120,11324,11325,11328,11331,11334],{},[60,11326,11327],{},"c++中程序运行前分为全局区和代码区",[60,11329,11330],{},"代码区特点是共享和只读",[60,11332,11333],{},"全局区中存放全局变量、静态变量、常量",[60,11335,11336],{},"常量区中存放const修饰的全局常量和字符串常量",[74,11338,11340],{"id":11339},"_512程序运行后","5.1.2程序运行后",[57,11342,11343],{},[60,11344,11345],{},"栈区：",[1120,11347,11348,11355],{},[60,11349,11350,11351,11354],{},"由编译器自动分配释放, 存放",[263,11352,11353],{},"函数的参数值,局部变量","等",[60,11356,11357,11358,11361],{},"注意事项：",[263,11359,11360],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[94,11363,11365],{"className":96,"code":11364,"language":98,"meta":24,"style":24},"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",[100,11366,11367,11378,11382,11397,11409,11413,11417,11425,11430,11445,11463,11480,11490,11498],{"__ignoreMap":24},[103,11368,11369,11371,11373,11376],{"class":105,"line":106},[103,11370,117],{"class":109},[103,11372,6508],{"class":109},[103,11374,11375],{"class":1952}," func",[103,11377,1965],{"class":113},[103,11379,11380],{"class":105,"line":25},[103,11381,1535],{"class":113},[103,11383,11384,11386,11388,11390,11392,11394],{"class":105,"line":1168},[103,11385,1974],{"class":109},[103,11387,10859],{"class":113},[103,11389,159],{"class":109},[103,11391,2027],{"class":162},[103,11393,169],{"class":113},[103,11395,11396],{"class":172}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[103,11398,11399,11401,11403,11406],{"class":105,"line":1183},[103,11400,4079],{"class":109},[103,11402,10574],{"class":109},[103,11404,11405],{"class":113},"a;",[103,11407,11408],{"class":172}," \u002F\u002F放回局部变量的地址\n",[103,11410,11411],{"class":105,"line":1189},[103,11412,1554],{"class":113},[103,11414,11415],{"class":105,"line":1203},[103,11416,2389],{"emptyLinePlaceholder":30},[103,11418,11419,11421,11423],{"class":105,"line":1209},[103,11420,117],{"class":109},[103,11422,1962],{"class":1952},[103,11424,10843],{"class":113},[103,11426,11427],{"class":105,"line":1300},[103,11428,11429],{"class":172},"    \u002F\u002F接受func的返回值\n",[103,11431,11432,11434,11436,11439,11441,11443],{"class":105,"line":1306},[103,11433,1974],{"class":109},[103,11435,6508],{"class":109},[103,11437,11438],{"class":113},"p ",[103,11440,159],{"class":109},[103,11442,11375],{"class":1952},[103,11444,5626],{"class":113},[103,11446,11447,11449,11451,11453,11455,11457,11460],{"class":105,"line":1318},[103,11448,6519],{"class":113},[103,11450,1157],{"class":109},[103,11452,6508],{"class":109},[103,11454,11438],{"class":113},[103,11456,1157],{"class":109},[103,11458,11459],{"class":113}," endl;",[103,11461,11462],{"class":172}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[103,11464,11465,11467,11469,11471,11473,11475,11477],{"class":105,"line":1601},[103,11466,6519],{"class":113},[103,11468,1157],{"class":109},[103,11470,6508],{"class":109},[103,11472,11438],{"class":113},[103,11474,1157],{"class":109},[103,11476,11459],{"class":113},[103,11478,11479],{"class":172}," \u002F\u002F第二次这个数据不再保留\n",[103,11481,11482,11484,11486,11488],{"class":105,"line":1606},[103,11483,2292],{"class":1952},[103,11485,114],{"class":113},[103,11487,2297],{"class":218},[103,11489,2708],{"class":113},[103,11491,11492,11494,11496],{"class":105,"line":1612},[103,11493,4079],{"class":109},[103,11495,4082],{"class":162},[103,11497,1279],{"class":113},[103,11499,11500],{"class":105,"line":1617},[103,11501,1554],{"class":113},[14,11503,11504],{},"输出结果：",[14,11506,11507],{},[1451,11508],{"alt":11509,"src":11510},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11512,11513],{},"总结：不要返回局部变量的地址",[57,11515,11516],{"start":25},[60,11517,11518],{},"堆区",[1120,11520,11521,11524],{},[60,11522,11523],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[60,11525,11526],{},"在c++中主要利用new在堆区开辟内存",[94,11528,11530],{"className":96,"code":11529,"language":98,"meta":24,"style":24},"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",[100,11531,11532,11547,11551,11556,11577,11584,11588,11596,11600,11605,11619,11631],{"__ignoreMap":24},[103,11533,11534,11536,11539,11542,11544],{"class":105,"line":106},[103,11535,117],{"class":109},[103,11537,11538],{"class":109},"  *",[103,11540,11541],{"class":1952},"func",[103,11543,2416],{"class":113},[103,11545,11546],{"class":172},"  \u002F\u002F函数返回指针\n",[103,11548,11549],{"class":105,"line":25},[103,11550,1535],{"class":113},[103,11552,11553],{"class":105,"line":1168},[103,11554,11555],{"class":172},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[103,11557,11558,11560,11562,11564,11566,11569,11571,11573,11575],{"class":105,"line":1183},[103,11559,4136],{"class":109},[103,11561,6508],{"class":109},[103,11563,14],{"class":113},[103,11565,159],{"class":109},[103,11567,11568],{"class":109}," new",[103,11570,2371],{"class":109},[103,11572,114],{"class":113},[103,11574,559],{"class":162},[103,11576,2708],{"class":113},[103,11578,11579,11581],{"class":105,"line":1189},[103,11580,4370],{"class":109},[103,11582,11583],{"class":113}," p;\n",[103,11585,11586],{"class":105,"line":1203},[103,11587,1554],{"class":113},[103,11589,11590,11592,11594],{"class":105,"line":1209},[103,11591,117],{"class":109},[103,11593,1962],{"class":1952},[103,11595,1965],{"class":113},[103,11597,11598],{"class":105,"line":1300},[103,11599,1535],{"class":113},[103,11601,11602],{"class":105,"line":1306},[103,11603,11604],{"class":172},"    \u002F\u002F在堆区开辟数据\n",[103,11606,11607,11609,11611,11613,11615,11617],{"class":105,"line":1318},[103,11608,1974],{"class":109},[103,11610,6508],{"class":109},[103,11612,14],{"class":113},[103,11614,159],{"class":109},[103,11616,11541],{"class":1952},[103,11618,5626],{"class":113},[103,11620,11621,11623,11625,11627,11629],{"class":105,"line":1601},[103,11622,1540],{"class":113},[103,11624,6409],{"class":109},[103,11626,14],{"class":113},[103,11628,1157],{"class":109},[103,11630,1180],{"class":113},[103,11632,11633],{"class":105,"line":1606},[103,11634,1554],{"class":113},[14,11636,11637],{},"图片展示：",[14,11639,11640],{},[1451,11641],{"alt":11509,"src":11642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11644,11645],{},"堆区内存由程序员管生死！！！",[57,11647,11648],{"start":1168},[60,11649,11650],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11652,11653],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11655,11656,11657],{},"​语法：",[100,11658,11659],{}," new 数据类型",[14,11661,11662],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[94,11664,11666],{"className":96,"code":11665,"language":98,"meta":24,"style":24},"\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",[100,11667,11668,11673,11683,11687,11692,11697,11719,11723,11731,11735,11749,11761,11773,11785,11790,11795,11806,11810,11815,11823,11827,11832,11854,11880,11884,11902,11906,11932,11936,11948,11952,11957,11962,11970,11974,11978,11986,11990,11996,12002],{"__ignoreMap":24},[103,11669,11670],{"class":105,"line":106},[103,11671,11672],{"class":172},"\u002F\u002F1.new的基本语法\n",[103,11674,11675,11677,11679,11681],{"class":105,"line":25},[103,11676,117],{"class":109},[103,11678,6508],{"class":109},[103,11680,11541],{"class":1952},[103,11682,1965],{"class":113},[103,11684,11685],{"class":105,"line":1168},[103,11686,1535],{"class":113},[103,11688,11689],{"class":105,"line":1183},[103,11690,11691],{"class":172},"    \u002F\u002F在堆区创建整型数据\n",[103,11693,11694],{"class":105,"line":1189},[103,11695,11696],{"class":172},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[103,11698,11699,11701,11703,11705,11708,11710,11712,11714,11716],{"class":105,"line":1203},[103,11700,1974],{"class":109},[103,11702,6508],{"class":109},[103,11704,14],{"class":113},[103,11706,11707],{"class":109},"=new",[103,11709,2371],{"class":109},[103,11711,114],{"class":113},[103,11713,559],{"class":162},[103,11715,5956],{"class":113},[103,11717,11718],{"class":172},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[103,11720,11721],{"class":105,"line":1209},[103,11722,1554],{"class":113},[103,11724,11725,11727,11729],{"class":105,"line":1300},[103,11726,5354],{"class":109},[103,11728,5578],{"class":1952},[103,11730,1965],{"class":113},[103,11732,11733],{"class":105,"line":1306},[103,11734,1535],{"class":113},[103,11736,11737,11739,11741,11743,11745,11747],{"class":105,"line":1318},[103,11738,1974],{"class":109},[103,11740,6508],{"class":109},[103,11742,14],{"class":113},[103,11744,159],{"class":109},[103,11746,11541],{"class":1952},[103,11748,5626],{"class":113},[103,11750,11751,11753,11755,11757,11759],{"class":105,"line":1601},[103,11752,1540],{"class":113},[103,11754,6409],{"class":109},[103,11756,14],{"class":113},[103,11758,1157],{"class":109},[103,11760,1180],{"class":113},[103,11762,11763,11765,11767,11769,11771],{"class":105,"line":1606},[103,11764,1540],{"class":113},[103,11766,6409],{"class":109},[103,11768,14],{"class":113},[103,11770,1157],{"class":109},[103,11772,1180],{"class":113},[103,11774,11775,11777,11779,11781,11783],{"class":105,"line":1612},[103,11776,1540],{"class":113},[103,11778,6409],{"class":109},[103,11780,14],{"class":113},[103,11782,1157],{"class":109},[103,11784,1180],{"class":113},[103,11786,11787],{"class":105,"line":1617},[103,11788,11789],{"class":172},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[103,11791,11792],{"class":105,"line":1631},[103,11793,11794],{"class":172},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[103,11796,11797,11800,11803],{"class":105,"line":1636},[103,11798,11799],{"class":109},"    delete",[103,11801,11802],{"class":113}," p;",[103,11804,11805],{"class":172},"\u002F\u002F删除这块地址\n",[103,11807,11808],{"class":105,"line":1642},[103,11809,1554],{"class":113},[103,11811,11812],{"class":105,"line":1663},[103,11813,11814],{"class":172},"\u002F\u002F2.在堆区利用new开辟数组\n",[103,11816,11817,11819,11821],{"class":105,"line":1668},[103,11818,5354],{"class":109},[103,11820,5647],{"class":1952},[103,11822,1965],{"class":113},[103,11824,11825],{"class":105,"line":1682},[103,11826,1535],{"class":113},[103,11828,11829],{"class":105,"line":1687},[103,11830,11831],{"class":172},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[103,11833,11834,11836,11838,11840,11842,11844,11846,11848,11851],{"class":105,"line":1716},[103,11835,1974],{"class":109},[103,11837,6508],{"class":109},[103,11839,3869],{"class":113},[103,11841,11707],{"class":109},[103,11843,2371],{"class":109},[103,11845,1003],{"class":113},[103,11847,559],{"class":162},[103,11849,11850],{"class":113},"];",[103,11852,11853],{"class":172},"\u002F\u002F10代表数组有10个元素\n",[103,11855,11856,11858,11860,11862,11864,11866,11868,11870,11872,11874,11876,11878],{"class":105,"line":1721},[103,11857,3190],{"class":109},[103,11859,1647],{"class":113},[103,11861,117],{"class":109},[103,11863,3021],{"class":113},[103,11865,159],{"class":109},[103,11867,305],{"class":162},[103,11869,3028],{"class":113},[103,11871,1023],{"class":109},[103,11873,559],{"class":162},[103,11875,3028],{"class":113},[103,11877,2281],{"class":109},[103,11879,120],{"class":113},[103,11881,11882],{"class":105,"line":1738},[103,11883,2019],{"class":113},[103,11885,11886,11889,11891,11893,11895,11897,11899],{"class":105,"line":1743},[103,11887,11888],{"class":113},"        arr[i]",[103,11890,159],{"class":109},[103,11892,554],{"class":113},[103,11894,594],{"class":109},[103,11896,424],{"class":162},[103,11898,169],{"class":113},[103,11900,11901],{"class":172},"\u002F\u002F给10个元素赋值100～109\n",[103,11903,11904],{"class":105,"line":1748},[103,11905,2176],{"class":113},[103,11907,11908,11910,11912,11914,11916,11918,11920,11922,11924,11926,11928,11930],{"class":105,"line":1753},[103,11909,3190],{"class":109},[103,11911,1647],{"class":113},[103,11913,117],{"class":109},[103,11915,3021],{"class":113},[103,11917,159],{"class":109},[103,11919,305],{"class":162},[103,11921,3028],{"class":113},[103,11923,1023],{"class":109},[103,11925,559],{"class":162},[103,11927,3028],{"class":113},[103,11929,2281],{"class":109},[103,11931,120],{"class":113},[103,11933,11934],{"class":105,"line":1767},[103,11935,2019],{"class":113},[103,11937,11938,11940,11942,11944,11946],{"class":105,"line":1772},[103,11939,3440],{"class":113},[103,11941,1157],{"class":109},[103,11943,4343],{"class":113},[103,11945,1157],{"class":109},[103,11947,1180],{"class":113},[103,11949,11950],{"class":105,"line":2566},[103,11951,2176],{"class":113},[103,11953,11954],{"class":105,"line":2580},[103,11955,11956],{"class":172},"    \u002F\u002F释放堆区数组\n",[103,11958,11959],{"class":105,"line":2588},[103,11960,11961],{"class":172},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[103,11963,11964,11967],{"class":105,"line":2593},[103,11965,11966],{"class":109},"    delete[]",[103,11968,11969],{"class":113}," arr;\n",[103,11971,11972],{"class":105,"line":2599},[103,11973,1554],{"class":113},[103,11975,11976],{"class":105,"line":2605},[103,11977,2389],{"emptyLinePlaceholder":30},[103,11979,11980,11982,11984],{"class":105,"line":2610},[103,11981,117],{"class":109},[103,11983,1962],{"class":1952},[103,11985,1965],{"class":113},[103,11987,11988],{"class":105,"line":7938},[103,11989,1535],{"class":113},[103,11991,11992,11994],{"class":105,"line":7962},[103,11993,5623],{"class":1952},[103,11995,5626],{"class":113},[103,11997,11998,12000],{"class":105,"line":7967},[103,11999,5692],{"class":1952},[103,12001,5626],{"class":113},[103,12003,12004],{"class":105,"line":7973},[103,12005,1554],{"class":113},[5116,12007,12008],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":24,"searchDepth":25,"depth":25,"links":12010},[12011],{"id":10679,"depth":25,"text":10680,"children":12012},[12013,12014],{"id":10711,"depth":1168,"text":10712},{"id":11339,"depth":1168,"text":11340},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10671,"description":24},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12021,"title":12022,"body":12023,"description":24,"extension":28,"meta":13504,"navigation":30,"path":13505,"seo":13506,"stem":13507,"__hash__":13508},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12024,"toc":13496},[12025,12028,12032,12035,12038,12207,12211,12216,12233,12238,12390,12394,12397,12400,12794,12798,12801,12806,12809,13121,13125,13131,13291,13293,13301,13305,13308,13315,13493],[10,12026,12022],{"id":12027},"_6引用",[45,12029,12031],{"id":12030},"_61引用基本用法","6.1引用基本用法",[14,12033,12034],{},"引用的本质：给变量起别名",[14,12036,12037],{},"语法：数据类型 &别名=原名",[94,12039,12041],{"className":96,"code":12040,"language":98,"meta":24,"style":24},"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",[100,12042,12043,12051,12055,12067,12079,12083,12102,12121,12125,12136,12140,12159,12177,12181,12191,12195,12203],{"__ignoreMap":24},[103,12044,12045,12047,12049],{"class":105,"line":106},[103,12046,117],{"class":109},[103,12048,1962],{"class":1952},[103,12050,10843],{"class":113},[103,12052,12053],{"class":105,"line":25},[103,12054,2389],{"emptyLinePlaceholder":30},[103,12056,12057,12059,12061,12063,12065],{"class":105,"line":1168},[103,12058,1974],{"class":109},[103,12060,10859],{"class":113},[103,12062,159],{"class":109},[103,12064,2027],{"class":162},[103,12066,1279],{"class":113},[103,12068,12069,12071,12073,12075,12077],{"class":105,"line":1183},[103,12070,1974],{"class":109},[103,12072,10574],{"class":109},[103,12074,10935],{"class":113},[103,12076,159],{"class":109},[103,12078,1421],{"class":113},[103,12080,12081],{"class":105,"line":1189},[103,12082,2389],{"emptyLinePlaceholder":30},[103,12084,12085,12087,12089,12092,12094,12096,12098,12100],{"class":105,"line":1203},[103,12086,6519],{"class":113},[103,12088,1157],{"class":109},[103,12090,12091],{"class":218}," \"a = \"",[103,12093,1433],{"class":109},[103,12095,10859],{"class":113},[103,12097,1157],{"class":109},[103,12099,11459],{"class":113},[103,12101,7258],{"class":172},[103,12103,12104,12106,12108,12111,12113,12115,12117,12119],{"class":105,"line":1209},[103,12105,6519],{"class":113},[103,12107,1157],{"class":109},[103,12109,12110],{"class":218}," \"b = \"",[103,12112,1433],{"class":109},[103,12114,10872],{"class":113},[103,12116,1157],{"class":109},[103,12118,11459],{"class":113},[103,12120,7258],{"class":172},[103,12122,12123],{"class":105,"line":1300},[103,12124,2389],{"emptyLinePlaceholder":30},[103,12126,12127,12130,12132,12134],{"class":105,"line":1306},[103,12128,12129],{"class":113},"    b ",[103,12131,159],{"class":109},[103,12133,5744],{"class":162},[103,12135,1279],{"class":113},[103,12137,12138],{"class":105,"line":1318},[103,12139,2389],{"emptyLinePlaceholder":30},[103,12141,12142,12144,12146,12148,12150,12152,12154,12156],{"class":105,"line":1601},[103,12143,6519],{"class":113},[103,12145,1157],{"class":109},[103,12147,12091],{"class":218},[103,12149,1433],{"class":109},[103,12151,10859],{"class":113},[103,12153,1157],{"class":109},[103,12155,11459],{"class":113},[103,12157,12158],{"class":172},"\u002F\u002F100\n",[103,12160,12161,12163,12165,12167,12169,12171,12173,12175],{"class":105,"line":1606},[103,12162,6519],{"class":113},[103,12164,1157],{"class":109},[103,12166,12110],{"class":218},[103,12168,1433],{"class":109},[103,12170,10872],{"class":113},[103,12172,1157],{"class":109},[103,12174,11459],{"class":113},[103,12176,12158],{"class":172},[103,12178,12179],{"class":105,"line":1612},[103,12180,2389],{"emptyLinePlaceholder":30},[103,12182,12183,12185,12187,12189],{"class":105,"line":1617},[103,12184,2292],{"class":1952},[103,12186,114],{"class":113},[103,12188,2297],{"class":218},[103,12190,2708],{"class":113},[103,12192,12193],{"class":105,"line":1631},[103,12194,2389],{"emptyLinePlaceholder":30},[103,12196,12197,12199,12201],{"class":105,"line":1636},[103,12198,4079],{"class":109},[103,12200,4082],{"class":162},[103,12202,1279],{"class":113},[103,12204,12205],{"class":105,"line":1642},[103,12206,1554],{"class":113},[45,12208,12210],{"id":12209},"_62引用的注意事项","6.2引用的注意事项",[57,12212,12213],{},[60,12214,12215],{},"引用必须要初始化",[94,12217,12219],{"className":96,"code":12218,"language":98,"meta":24,"style":24},"int &b;\u002F\u002F非常错误！\n",[100,12220,12221],{"__ignoreMap":24},[103,12222,12223,12225,12227,12230],{"class":105,"line":106},[103,12224,117],{"class":109},[103,12226,10574],{"class":109},[103,12228,12229],{"class":113},"b;",[103,12231,12232],{"class":172},"\u002F\u002F非常错误！\n",[57,12234,12235],{"start":25},[60,12236,12237],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[94,12239,12241],{"className":96,"code":12240,"language":98,"meta":24,"style":24},"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",[100,12242,12243,12251,12263,12275,12283,12299,12312,12330,12348,12368,12378,12386],{"__ignoreMap":24},[103,12244,12245,12247,12249],{"class":105,"line":106},[103,12246,117],{"class":109},[103,12248,1962],{"class":1952},[103,12250,10843],{"class":113},[103,12252,12253,12255,12257,12259,12261],{"class":105,"line":25},[103,12254,1974],{"class":109},[103,12256,10859],{"class":113},[103,12258,159],{"class":109},[103,12260,2027],{"class":162},[103,12262,1279],{"class":113},[103,12264,12265,12267,12269,12271,12273],{"class":105,"line":1168},[103,12266,1974],{"class":109},[103,12268,10872],{"class":113},[103,12270,159],{"class":109},[103,12272,8940],{"class":162},[103,12274,1279],{"class":113},[103,12276,12277,12280],{"class":105,"line":1183},[103,12278,12279],{"class":172},"    \u002F\u002Fint &c;",[103,12281,12282],{"class":172}," \u002F\u002F错误，引用必须初始化\n",[103,12284,12285,12287,12289,12291,12293,12296],{"class":105,"line":1189},[103,12286,1974],{"class":109},[103,12288,10574],{"class":109},[103,12290,2935],{"class":113},[103,12292,159],{"class":109},[103,12294,12295],{"class":113}," a;",[103,12297,12298],{"class":172}," \u002F\u002F一旦初始化后，就不可以更改\n",[103,12300,12301,12304,12306,12309],{"class":105,"line":1203},[103,12302,12303],{"class":113},"    c ",[103,12305,159],{"class":109},[103,12307,12308],{"class":113}," b;",[103,12310,12311],{"class":172}," \u002F\u002F这是赋值操作，不是更改引用\n",[103,12313,12314,12316,12318,12320,12322,12324,12326,12328],{"class":105,"line":1209},[103,12315,6519],{"class":113},[103,12317,1157],{"class":109},[103,12319,12091],{"class":218},[103,12321,1433],{"class":109},[103,12323,10859],{"class":113},[103,12325,1157],{"class":109},[103,12327,11459],{"class":113},[103,12329,7243],{"class":172},[103,12331,12332,12334,12336,12338,12340,12342,12344,12346],{"class":105,"line":1300},[103,12333,6519],{"class":113},[103,12335,1157],{"class":109},[103,12337,12110],{"class":218},[103,12339,1433],{"class":109},[103,12341,10872],{"class":113},[103,12343,1157],{"class":109},[103,12345,11459],{"class":113},[103,12347,7243],{"class":172},[103,12349,12350,12352,12354,12357,12359,12362,12364,12366],{"class":105,"line":1306},[103,12351,6519],{"class":113},[103,12353,1157],{"class":109},[103,12355,12356],{"class":218}," \"c = \"",[103,12358,1433],{"class":109},[103,12360,12361],{"class":113}," c ",[103,12363,1157],{"class":109},[103,12365,11459],{"class":113},[103,12367,7243],{"class":172},[103,12369,12370,12372,12374,12376],{"class":105,"line":1318},[103,12371,2292],{"class":1952},[103,12373,114],{"class":113},[103,12375,2297],{"class":218},[103,12377,2708],{"class":113},[103,12379,12380,12382,12384],{"class":105,"line":1601},[103,12381,4079],{"class":109},[103,12383,4082],{"class":162},[103,12385,1279],{"class":113},[103,12387,12388],{"class":105,"line":1606},[103,12389,1554],{"class":113},[45,12391,12393],{"id":12392},"_63引用做函数参数","6.3引用做函数参数",[14,12395,12396],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12398,12399],{},"优点：可以简化指针修改实参",[94,12401,12403],{"className":96,"code":12402,"language":98,"meta":24,"style":24},"\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",[100,12404,12405,12410,12433,12444,12454,12463,12467,12471,12476,12498,12510,12522,12532,12536,12540,12545,12567,12577,12585,12593,12597,12601,12609,12613,12625,12637,12641,12652,12678,12682,12702,12726,12730,12740,12764,12768,12778,12782,12790],{"__ignoreMap":24},[103,12406,12407],{"class":105,"line":106},[103,12408,12409],{"class":172},"\u002F\u002F1. 值传递\n",[103,12411,12412,12414,12417,12419,12421,12423,12426,12428,12430],{"class":105,"line":25},[103,12413,5354],{"class":109},[103,12415,12416],{"class":1952}," mySwap01",[103,12418,114],{"class":113},[103,12420,117],{"class":109},[103,12422,1387],{"class":5206},[103,12424,12425],{"class":113},", ",[103,12427,117],{"class":109},[103,12429,2822],{"class":5206},[103,12431,12432],{"class":113},") {\n",[103,12434,12435,12437,12440,12442],{"class":105,"line":1168},[103,12436,1974],{"class":109},[103,12438,12439],{"class":113}," temp ",[103,12441,159],{"class":109},[103,12443,1421],{"class":113},[103,12445,12446,12449,12451],{"class":105,"line":1183},[103,12447,12448],{"class":113},"    a ",[103,12450,159],{"class":109},[103,12452,12453],{"class":113}," b;\n",[103,12455,12456,12458,12460],{"class":105,"line":1189},[103,12457,12129],{"class":113},[103,12459,159],{"class":109},[103,12461,12462],{"class":113}," temp;\n",[103,12464,12465],{"class":105,"line":1203},[103,12466,1554],{"class":113},[103,12468,12469],{"class":105,"line":1209},[103,12470,2389],{"emptyLinePlaceholder":30},[103,12472,12473],{"class":105,"line":1300},[103,12474,12475],{"class":172},"\u002F\u002F2. 地址传递\n",[103,12477,12478,12480,12483,12485,12488,12490,12492,12494,12496],{"class":105,"line":1306},[103,12479,5354],{"class":109},[103,12481,12482],{"class":1952}," mySwap02",[103,12484,114],{"class":113},[103,12486,12487],{"class":109},"int*",[103,12489,1387],{"class":5206},[103,12491,12425],{"class":113},[103,12493,12487],{"class":109},[103,12495,2822],{"class":5206},[103,12497,12432],{"class":113},[103,12499,12500,12502,12504,12506,12508],{"class":105,"line":1318},[103,12501,1974],{"class":109},[103,12503,12439],{"class":113},[103,12505,159],{"class":109},[103,12507,6508],{"class":109},[103,12509,6187],{"class":113},[103,12511,12512,12514,12516,12518,12520],{"class":105,"line":1601},[103,12513,6393],{"class":109},[103,12515,10909],{"class":113},[103,12517,159],{"class":109},[103,12519,6508],{"class":109},[103,12521,6059],{"class":113},[103,12523,12524,12526,12528,12530],{"class":105,"line":1606},[103,12525,6393],{"class":109},[103,12527,10935],{"class":113},[103,12529,159],{"class":109},[103,12531,12462],{"class":113},[103,12533,12534],{"class":105,"line":1612},[103,12535,1554],{"class":113},[103,12537,12538],{"class":105,"line":1617},[103,12539,2389],{"emptyLinePlaceholder":30},[103,12541,12542],{"class":105,"line":1631},[103,12543,12544],{"class":172},"\u002F\u002F3. 引用传递\n",[103,12546,12547,12549,12552,12554,12557,12559,12561,12563,12565],{"class":105,"line":1636},[103,12548,5354],{"class":109},[103,12550,12551],{"class":1952}," mySwap03",[103,12553,114],{"class":113},[103,12555,12556],{"class":109},"int&",[103,12558,1387],{"class":5206},[103,12560,12425],{"class":113},[103,12562,12556],{"class":109},[103,12564,2822],{"class":5206},[103,12566,12432],{"class":113},[103,12568,12569,12571,12573,12575],{"class":105,"line":1642},[103,12570,1974],{"class":109},[103,12572,12439],{"class":113},[103,12574,159],{"class":109},[103,12576,1421],{"class":113},[103,12578,12579,12581,12583],{"class":105,"line":1663},[103,12580,12448],{"class":113},[103,12582,159],{"class":109},[103,12584,12453],{"class":113},[103,12586,12587,12589,12591],{"class":105,"line":1668},[103,12588,12129],{"class":113},[103,12590,159],{"class":109},[103,12592,12462],{"class":113},[103,12594,12595],{"class":105,"line":1682},[103,12596,1554],{"class":113},[103,12598,12599],{"class":105,"line":1687},[103,12600,2389],{"emptyLinePlaceholder":30},[103,12602,12603,12605,12607],{"class":105,"line":1716},[103,12604,117],{"class":109},[103,12606,1962],{"class":1952},[103,12608,10843],{"class":113},[103,12610,12611],{"class":105,"line":1721},[103,12612,2389],{"emptyLinePlaceholder":30},[103,12614,12615,12617,12619,12621,12623],{"class":105,"line":1738},[103,12616,1974],{"class":109},[103,12618,10859],{"class":113},[103,12620,159],{"class":109},[103,12622,2027],{"class":162},[103,12624,1279],{"class":113},[103,12626,12627,12629,12631,12633,12635],{"class":105,"line":1743},[103,12628,1974],{"class":109},[103,12630,10872],{"class":113},[103,12632,159],{"class":109},[103,12634,8940],{"class":162},[103,12636,1279],{"class":113},[103,12638,12639],{"class":105,"line":1748},[103,12640,2389],{"emptyLinePlaceholder":30},[103,12642,12643,12646,12649],{"class":105,"line":1753},[103,12644,12645],{"class":1952},"    mySwap01",[103,12647,12648],{"class":113},"(a, b);",[103,12650,12651],{"class":172},"\u002F\u002F值传递，形参不会修饰实参\n",[103,12653,12654,12656,12658,12661,12663,12665,12667,12670,12672,12674,12676],{"class":105,"line":1767},[103,12655,6519],{"class":113},[103,12657,1157],{"class":109},[103,12659,12660],{"class":218}," \"a:\"",[103,12662,1433],{"class":109},[103,12664,10859],{"class":113},[103,12666,1157],{"class":109},[103,12668,12669],{"class":218}," \" b:\"",[103,12671,1433],{"class":109},[103,12673,10872],{"class":113},[103,12675,1157],{"class":109},[103,12677,8830],{"class":113},[103,12679,12680],{"class":105,"line":1772},[103,12681,2389],{"emptyLinePlaceholder":30},[103,12683,12684,12687,12689,12691,12694,12696,12699],{"class":105,"line":2566},[103,12685,12686],{"class":1952},"    mySwap02",[103,12688,114],{"class":113},[103,12690,466],{"class":109},[103,12692,12693],{"class":113},"a, ",[103,12695,466],{"class":109},[103,12697,12698],{"class":113},"b);",[103,12700,12701],{"class":172},"\u002F\u002F地址传递，形参会修饰实参\n",[103,12703,12704,12706,12708,12710,12712,12714,12716,12718,12720,12722,12724],{"class":105,"line":2580},[103,12705,6519],{"class":113},[103,12707,1157],{"class":109},[103,12709,12660],{"class":218},[103,12711,1433],{"class":109},[103,12713,10859],{"class":113},[103,12715,1157],{"class":109},[103,12717,12669],{"class":218},[103,12719,1433],{"class":109},[103,12721,10872],{"class":113},[103,12723,1157],{"class":109},[103,12725,8830],{"class":113},[103,12727,12728],{"class":105,"line":2588},[103,12729,2389],{"emptyLinePlaceholder":30},[103,12731,12732,12735,12737],{"class":105,"line":2593},[103,12733,12734],{"class":1952},"    mySwap03",[103,12736,12648],{"class":113},[103,12738,12739],{"class":172},"\u002F\u002F引用传递，形参会修饰实参\n",[103,12741,12742,12744,12746,12748,12750,12752,12754,12756,12758,12760,12762],{"class":105,"line":2599},[103,12743,6519],{"class":113},[103,12745,1157],{"class":109},[103,12747,12660],{"class":218},[103,12749,1433],{"class":109},[103,12751,10859],{"class":113},[103,12753,1157],{"class":109},[103,12755,12669],{"class":218},[103,12757,1433],{"class":109},[103,12759,10872],{"class":113},[103,12761,1157],{"class":109},[103,12763,8830],{"class":113},[103,12765,12766],{"class":105,"line":2605},[103,12767,2389],{"emptyLinePlaceholder":30},[103,12769,12770,12772,12774,12776],{"class":105,"line":2610},[103,12771,2292],{"class":1952},[103,12773,114],{"class":113},[103,12775,2297],{"class":218},[103,12777,2708],{"class":113},[103,12779,12780],{"class":105,"line":7938},[103,12781,2389],{"emptyLinePlaceholder":30},[103,12783,12784,12786,12788],{"class":105,"line":7962},[103,12785,4079],{"class":109},[103,12787,4082],{"class":162},[103,12789,1279],{"class":113},[103,12791,12792],{"class":105,"line":7967},[103,12793,1554],{"class":113},[45,12795,12797],{"id":12796},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12799,12800],{},"作用：引用是可以作为函数的返回值存在的",[14,12802,9015,12803],{},[263,12804,12805],{},"不要返回局部变量引用",[14,12807,12808],{},"用法：函数调用作为左值",[94,12810,12812],{"className":9931,"code":12811,"language":9933,"meta":24,"style":24},"\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",[100,12813,12814,12819,12827,12842,12848,12852,12856,12861,12869,12886,12892,12896,12900,12908,12912,12917,12931,12951,12970,12974,12979,12992,13012,13030,13034,13050,13054,13073,13091,13095,13105,13109,13117],{"__ignoreMap":24},[103,12815,12816],{"class":105,"line":106},[103,12817,12818],{"class":172},"\u002F\u002F返回局部变量引用\n",[103,12820,12821,12823,12825],{"class":105,"line":25},[103,12822,12556],{"class":109},[103,12824,5578],{"class":1952},[103,12826,10843],{"class":113},[103,12828,12829,12831,12833,12835,12837,12839],{"class":105,"line":1168},[103,12830,1974],{"class":109},[103,12832,10859],{"class":113},[103,12834,159],{"class":109},[103,12836,2027],{"class":162},[103,12838,169],{"class":113},[103,12840,12841],{"class":172}," \u002F\u002F局部变量\n",[103,12843,12844,12846],{"class":105,"line":1183},[103,12845,4079],{"class":109},[103,12847,1421],{"class":113},[103,12849,12850],{"class":105,"line":1189},[103,12851,1554],{"class":113},[103,12853,12854],{"class":105,"line":1203},[103,12855,2389],{"emptyLinePlaceholder":30},[103,12857,12858],{"class":105,"line":1209},[103,12859,12860],{"class":172},"\u002F\u002F返回静态变量引用\n",[103,12862,12863,12865,12867],{"class":105,"line":1300},[103,12864,12556],{"class":109},[103,12866,5647],{"class":1952},[103,12868,10843],{"class":113},[103,12870,12871,12873,12875,12877,12879,12881,12883],{"class":105,"line":1306},[103,12872,11010],{"class":109},[103,12874,2371],{"class":109},[103,12876,10859],{"class":113},[103,12878,159],{"class":109},[103,12880,8940],{"class":162},[103,12882,169],{"class":113},[103,12884,12885],{"class":172},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[103,12887,12888,12890],{"class":105,"line":1318},[103,12889,4079],{"class":109},[103,12891,1421],{"class":113},[103,12893,12894],{"class":105,"line":1601},[103,12895,1554],{"class":113},[103,12897,12898],{"class":105,"line":1606},[103,12899,2389],{"emptyLinePlaceholder":30},[103,12901,12902,12904,12906],{"class":105,"line":1612},[103,12903,117],{"class":109},[103,12905,1962],{"class":1952},[103,12907,10843],{"class":113},[103,12909,12910],{"class":105,"line":1617},[103,12911,2389],{"emptyLinePlaceholder":30},[103,12913,12914],{"class":105,"line":1631},[103,12915,12916],{"class":172},"    \u002F\u002F不能返回局部变量的引用\n",[103,12918,12919,12922,12925,12927,12929],{"class":105,"line":1636},[103,12920,12921],{"class":109},"    int&",[103,12923,12924],{"class":113}," ref ",[103,12926,159],{"class":109},[103,12928,5578],{"class":1952},[103,12930,5626],{"class":113},[103,12932,12933,12935,12937,12940,12942,12944,12946,12948],{"class":105,"line":1642},[103,12934,6519],{"class":113},[103,12936,1157],{"class":109},[103,12938,12939],{"class":218}," \"ref = \"",[103,12941,1433],{"class":109},[103,12943,12924],{"class":113},[103,12945,1157],{"class":109},[103,12947,11459],{"class":113},[103,12949,12950],{"class":172},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[103,12952,12953,12955,12957,12959,12961,12963,12965,12967],{"class":105,"line":1663},[103,12954,6519],{"class":113},[103,12956,1157],{"class":109},[103,12958,12939],{"class":218},[103,12960,1433],{"class":109},[103,12962,12924],{"class":113},[103,12964,1157],{"class":109},[103,12966,11459],{"class":113},[103,12968,12969],{"class":172},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[103,12971,12972],{"class":105,"line":1668},[103,12973,2389],{"emptyLinePlaceholder":30},[103,12975,12976],{"class":105,"line":1682},[103,12977,12978],{"class":172},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[103,12980,12981,12983,12986,12988,12990],{"class":105,"line":1687},[103,12982,12921],{"class":109},[103,12984,12985],{"class":113}," ref2 ",[103,12987,159],{"class":109},[103,12989,5647],{"class":1952},[103,12991,5626],{"class":113},[103,12993,12994,12996,12998,13001,13003,13005,13007,13009],{"class":105,"line":1716},[103,12995,6519],{"class":113},[103,12997,1157],{"class":109},[103,12999,13000],{"class":218}," \"ref2 = \"",[103,13002,1433],{"class":109},[103,13004,12985],{"class":113},[103,13006,1157],{"class":109},[103,13008,11459],{"class":113},[103,13010,13011],{"class":172}," \u002F\u002F20\n",[103,13013,13014,13016,13018,13020,13022,13024,13026,13028],{"class":105,"line":1721},[103,13015,6519],{"class":113},[103,13017,1157],{"class":109},[103,13019,13000],{"class":218},[103,13021,1433],{"class":109},[103,13023,12985],{"class":113},[103,13025,1157],{"class":109},[103,13027,11459],{"class":113},[103,13029,13011],{"class":172},[103,13031,13032],{"class":105,"line":1738},[103,13033,2389],{"emptyLinePlaceholder":30},[103,13035,13036,13038,13041,13043,13045,13047],{"class":105,"line":1743},[103,13037,5692],{"class":1952},[103,13039,13040],{"class":113},"() ",[103,13042,159],{"class":109},[103,13044,2988],{"class":162},[103,13046,169],{"class":113},[103,13048,13049],{"class":172},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[103,13051,13052],{"class":105,"line":1748},[103,13053,2389],{"emptyLinePlaceholder":30},[103,13055,13056,13058,13060,13062,13064,13066,13068,13070],{"class":105,"line":1753},[103,13057,6519],{"class":113},[103,13059,1157],{"class":109},[103,13061,13000],{"class":218},[103,13063,1433],{"class":109},[103,13065,12985],{"class":113},[103,13067,1157],{"class":109},[103,13069,11459],{"class":113},[103,13071,13072],{"class":172}," \u002F\u002F1000\n",[103,13074,13075,13077,13079,13081,13083,13085,13087,13089],{"class":105,"line":1767},[103,13076,6519],{"class":113},[103,13078,1157],{"class":109},[103,13080,13000],{"class":218},[103,13082,1433],{"class":109},[103,13084,12985],{"class":113},[103,13086,1157],{"class":109},[103,13088,11459],{"class":113},[103,13090,13072],{"class":172},[103,13092,13093],{"class":105,"line":1772},[103,13094,2389],{"emptyLinePlaceholder":30},[103,13096,13097,13099,13101,13103],{"class":105,"line":2566},[103,13098,2292],{"class":1952},[103,13100,114],{"class":113},[103,13102,2297],{"class":218},[103,13104,2708],{"class":113},[103,13106,13107],{"class":105,"line":2580},[103,13108,2389],{"emptyLinePlaceholder":30},[103,13110,13111,13113,13115],{"class":105,"line":2588},[103,13112,4079],{"class":109},[103,13114,4082],{"class":162},[103,13116,1279],{"class":113},[103,13118,13119],{"class":105,"line":2593},[103,13120,1554],{"class":113},[45,13122,13124],{"id":13123},"_65引用的本质","6.5引用的本质",[14,13126,13127,13128],{},"本质：",[263,13129,13130],{},"引用的本质在c++内部实现是一个指针常量.",[94,13132,13134],{"className":96,"code":13133,"language":98,"meta":24,"style":24},"\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",[100,13135,13136,13141,13157,13171,13175,13184,13196,13201,13206,13217,13230,13234,13250,13267,13271,13279,13287],{"__ignoreMap":24},[103,13137,13138],{"class":105,"line":106},[103,13139,13140],{"class":172},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[103,13142,13143,13145,13147,13149,13151,13154],{"class":105,"line":25},[103,13144,5354],{"class":109},[103,13146,11375],{"class":1952},[103,13148,114],{"class":113},[103,13150,12556],{"class":109},[103,13152,13153],{"class":5206}," ref",[103,13155,13156],{"class":113},"){\n",[103,13158,13159,13162,13164,13166,13168],{"class":105,"line":1168},[103,13160,13161],{"class":113},"    ref ",[103,13163,159],{"class":109},[103,13165,5744],{"class":162},[103,13167,169],{"class":113},[103,13169,13170],{"class":172}," \u002F\u002F ref是引用，转换为*ref = 100\n",[103,13172,13173],{"class":105,"line":1183},[103,13174,1554],{"class":113},[103,13176,13177,13179,13181],{"class":105,"line":1189},[103,13178,117],{"class":109},[103,13180,1962],{"class":1952},[103,13182,13183],{"class":113},"(){\n",[103,13185,13186,13188,13190,13192,13194],{"class":105,"line":1203},[103,13187,1974],{"class":109},[103,13189,10859],{"class":113},[103,13191,159],{"class":109},[103,13193,2027],{"class":162},[103,13195,1279],{"class":113},[103,13197,13198],{"class":105,"line":1209},[103,13199,13200],{"class":113},"    \n",[103,13202,13203],{"class":105,"line":1300},[103,13204,13205],{"class":172},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[103,13207,13208,13210,13212,13214],{"class":105,"line":1306},[103,13209,12921],{"class":109},[103,13211,12924],{"class":113},[103,13213,159],{"class":109},[103,13215,13216],{"class":113}," a; \n",[103,13218,13219,13221,13223,13225,13227],{"class":105,"line":1318},[103,13220,13161],{"class":113},[103,13222,159],{"class":109},[103,13224,8940],{"class":162},[103,13226,169],{"class":113},[103,13228,13229],{"class":172}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[103,13231,13232],{"class":105,"line":1601},[103,13233,13200],{"class":113},[103,13235,13236,13238,13240,13242,13244,13246,13248],{"class":105,"line":1606},[103,13237,6519],{"class":113},[103,13239,1157],{"class":109},[103,13241,12660],{"class":218},[103,13243,1433],{"class":109},[103,13245,10859],{"class":113},[103,13247,1157],{"class":109},[103,13249,8830],{"class":113},[103,13251,13252,13254,13256,13259,13261,13263,13265],{"class":105,"line":1612},[103,13253,6519],{"class":113},[103,13255,1157],{"class":109},[103,13257,13258],{"class":218}," \"ref:\"",[103,13260,1433],{"class":109},[103,13262,12924],{"class":113},[103,13264,1157],{"class":109},[103,13266,8830],{"class":113},[103,13268,13269],{"class":105,"line":1617},[103,13270,13200],{"class":113},[103,13272,13273,13276],{"class":105,"line":1631},[103,13274,13275],{"class":1952},"    func",[103,13277,13278],{"class":113},"(a);\n",[103,13280,13281,13283,13285],{"class":105,"line":1636},[103,13282,4079],{"class":109},[103,13284,4082],{"class":162},[103,13286,1279],{"class":113},[103,13288,13289],{"class":105,"line":1642},[103,13290,1554],{"class":113},[14,13292,11322],{},[57,13294,13295,13298],{},[60,13296,13297],{},"引用的本质，就是一个指针常量",[60,13299,13300],{},"引用一旦初始化，就不可以发生改变",[45,13302,13304],{"id":13303},"_66常量引用","6.6常量引用",[14,13306,13307],{},"作用：常量引用主要用来修饰形参",[14,13309,13310,13311,13314],{},"在函数形参列表中，可以加",[263,13312,13313],{},"const修饰形参","，防止形参改变实参",[94,13316,13318],{"className":96,"code":13317,"language":98,"meta":24,"style":24},"\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",[100,13319,13320,13325,13330,13349,13354,13367,13371,13375,13383,13387,13392,13397,13411,13415,13423,13435,13439,13444,13456,13463,13467,13477,13481,13489],{"__ignoreMap":24},[103,13321,13322],{"class":105,"line":106},[103,13323,13324],{"class":172},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[103,13326,13327],{"class":105,"line":25},[103,13328,13329],{"class":172},"\u002F\u002F加上const就不能修改实参的\n",[103,13331,13332,13334,13337,13339,13341,13344,13347],{"class":105,"line":1168},[103,13333,5354],{"class":109},[103,13335,13336],{"class":1952}," showValue",[103,13338,114],{"class":113},[103,13340,6782],{"class":109},[103,13342,13343],{"class":109}," int&",[103,13345,13346],{"class":5206}," v",[103,13348,12432],{"class":113},[103,13350,13351],{"class":105,"line":1183},[103,13352,13353],{"class":172},"    \u002F\u002Fv += 100;\n",[103,13355,13356,13358,13360,13363,13365],{"class":105,"line":1189},[103,13357,6519],{"class":113},[103,13359,1157],{"class":109},[103,13361,13362],{"class":113}," v ",[103,13364,1157],{"class":109},[103,13366,8830],{"class":113},[103,13368,13369],{"class":105,"line":1203},[103,13370,1554],{"class":113},[103,13372,13373],{"class":105,"line":1209},[103,13374,2389],{"emptyLinePlaceholder":30},[103,13376,13377,13379,13381],{"class":105,"line":1300},[103,13378,117],{"class":109},[103,13380,1962],{"class":1952},[103,13382,10843],{"class":113},[103,13384,13385],{"class":105,"line":1306},[103,13386,2389],{"emptyLinePlaceholder":30},[103,13388,13389],{"class":105,"line":1318},[103,13390,13391],{"class":172},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[103,13393,13394],{"class":105,"line":1601},[103,13395,13396],{"class":172},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[103,13398,13399,13401,13403,13405,13407,13409],{"class":105,"line":1606},[103,13400,11211],{"class":109},[103,13402,13343],{"class":109},[103,13404,12924],{"class":113},[103,13406,159],{"class":109},[103,13408,2027],{"class":162},[103,13410,1279],{"class":113},[103,13412,13413],{"class":105,"line":1612},[103,13414,2389],{"emptyLinePlaceholder":30},[103,13416,13417,13420],{"class":105,"line":1617},[103,13418,13419],{"class":172},"    \u002F\u002Fref = 100;",[103,13421,13422],{"class":172},"  \u002F\u002F加入const后不可以修改变量\n",[103,13424,13425,13427,13429,13431,13433],{"class":105,"line":1631},[103,13426,6519],{"class":113},[103,13428,1157],{"class":109},[103,13430,12924],{"class":113},[103,13432,1157],{"class":109},[103,13434,8830],{"class":113},[103,13436,13437],{"class":105,"line":1636},[103,13438,2389],{"emptyLinePlaceholder":30},[103,13440,13441],{"class":105,"line":1642},[103,13442,13443],{"class":172},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[103,13445,13446,13448,13450,13452,13454],{"class":105,"line":1663},[103,13447,1974],{"class":109},[103,13449,10859],{"class":113},[103,13451,159],{"class":109},[103,13453,2027],{"class":162},[103,13455,1279],{"class":113},[103,13457,13458,13461],{"class":105,"line":1668},[103,13459,13460],{"class":1952},"    showValue",[103,13462,13278],{"class":113},[103,13464,13465],{"class":105,"line":1682},[103,13466,2389],{"emptyLinePlaceholder":30},[103,13468,13469,13471,13473,13475],{"class":105,"line":1687},[103,13470,2292],{"class":1952},[103,13472,114],{"class":113},[103,13474,2297],{"class":218},[103,13476,2708],{"class":113},[103,13478,13479],{"class":105,"line":1716},[103,13480,2389],{"emptyLinePlaceholder":30},[103,13482,13483,13485,13487],{"class":105,"line":1721},[103,13484,4079],{"class":109},[103,13486,4082],{"class":162},[103,13488,1279],{"class":113},[103,13490,13491],{"class":105,"line":1738},[103,13492,1554],{"class":113},[5116,13494,13495],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":24,"searchDepth":25,"depth":25,"links":13497},[13498,13499,13500,13501,13502,13503],{"id":12030,"depth":25,"text":12031},{"id":12209,"depth":25,"text":12210},{"id":12392,"depth":25,"text":12393},{"id":12796,"depth":25,"text":12797},{"id":13123,"depth":25,"text":13124},{"id":13303,"depth":25,"text":13304},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12022,"description":24},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13510,"title":13511,"body":13512,"description":24,"extension":28,"meta":14593,"navigation":30,"path":14594,"seo":14595,"stem":14596,"__hash__":14597},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13513,"toc":14585},[13514,13517,13521,13524,13529,13761,13763,13774,13778,13781,13789,13893,13896,13900,13903,13907,13910,13915,13937,13943,14270,14273,14277,14285,14582],[10,13515,13511],{"id":13516},"_7函数高级部分",[45,13518,13520],{"id":13519},"_71函数默认参数","7.1函数默认参数",[14,13522,13523],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13525,5171,13526],{},[100,13527,13528],{}," 返回值类型  函数名 （参数= 默认值）{}",[94,13530,13532],{"className":96,"code":13531,"language":98,"meta":24,"style":24},"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",[100,13533,13534,13569,13584,13588,13592,13597,13602,13631,13651,13661,13665,13669,13677,13681,13709,13731,13735,13745,13749,13757],{"__ignoreMap":24},[103,13535,13536,13538,13540,13542,13544,13546,13548,13550,13552,13555,13557,13559,13561,13563,13565,13567],{"class":105,"line":106},[103,13537,117],{"class":109},[103,13539,11375],{"class":1952},[103,13541,114],{"class":113},[103,13543,117],{"class":109},[103,13545,1387],{"class":5206},[103,13547,12425],{"class":113},[103,13549,117],{"class":109},[103,13551,2822],{"class":5206},[103,13553,13554],{"class":109}," =",[103,13556,2027],{"class":162},[103,13558,12425],{"class":113},[103,13560,117],{"class":109},[103,13562,2838],{"class":5206},[103,13564,13554],{"class":109},[103,13566,2027],{"class":162},[103,13568,12432],{"class":113},[103,13570,13571,13573,13575,13577,13579,13581],{"class":105,"line":25},[103,13572,4079],{"class":109},[103,13574,10859],{"class":113},[103,13576,594],{"class":109},[103,13578,10872],{"class":113},[103,13580,594],{"class":109},[103,13582,13583],{"class":113}," c;\n",[103,13585,13586],{"class":105,"line":1168},[103,13587,1554],{"class":113},[103,13589,13590],{"class":105,"line":1183},[103,13591,2389],{"emptyLinePlaceholder":30},[103,13593,13594],{"class":105,"line":1189},[103,13595,13596],{"class":172},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[103,13598,13599],{"class":105,"line":1203},[103,13600,13601],{"class":172},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[103,13603,13604,13606,13609,13611,13613,13615,13617,13619,13621,13623,13625,13627,13629],{"class":105,"line":1209},[103,13605,117],{"class":109},[103,13607,13608],{"class":1952}," func2",[103,13610,114],{"class":113},[103,13612,117],{"class":109},[103,13614,1387],{"class":5206},[103,13616,13554],{"class":109},[103,13618,2027],{"class":162},[103,13620,12425],{"class":113},[103,13622,117],{"class":109},[103,13624,2822],{"class":5206},[103,13626,13554],{"class":109},[103,13628,2027],{"class":162},[103,13630,2708],{"class":113},[103,13632,13633,13635,13637,13639,13641,13643,13645,13647,13649],{"class":105,"line":1300},[103,13634,117],{"class":109},[103,13636,13608],{"class":1952},[103,13638,114],{"class":113},[103,13640,117],{"class":109},[103,13642,1387],{"class":5206},[103,13644,12425],{"class":113},[103,13646,117],{"class":109},[103,13648,2822],{"class":5206},[103,13650,12432],{"class":113},[103,13652,13653,13655,13657,13659],{"class":105,"line":1306},[103,13654,4079],{"class":109},[103,13656,10859],{"class":113},[103,13658,594],{"class":109},[103,13660,12453],{"class":113},[103,13662,13663],{"class":105,"line":1318},[103,13664,1554],{"class":113},[103,13666,13667],{"class":105,"line":1601},[103,13668,2389],{"emptyLinePlaceholder":30},[103,13670,13671,13673,13675],{"class":105,"line":1606},[103,13672,117],{"class":109},[103,13674,1962],{"class":1952},[103,13676,10843],{"class":113},[103,13678,13679],{"class":105,"line":1612},[103,13680,2389],{"emptyLinePlaceholder":30},[103,13682,13683,13685,13687,13690,13692,13694,13696,13698,13700,13702,13705,13707],{"class":105,"line":1617},[103,13684,6519],{"class":113},[103,13686,1157],{"class":109},[103,13688,13689],{"class":218}," \"ret = \"",[103,13691,1433],{"class":109},[103,13693,11375],{"class":1952},[103,13695,114],{"class":113},[103,13697,813],{"class":162},[103,13699,12425],{"class":113},[103,13701,813],{"class":162},[103,13703,13704],{"class":113},") ",[103,13706,1157],{"class":109},[103,13708,8830],{"class":113},[103,13710,13711,13713,13715,13717,13719,13721,13723,13725,13727,13729],{"class":105,"line":1631},[103,13712,6519],{"class":113},[103,13714,1157],{"class":109},[103,13716,13689],{"class":218},[103,13718,1433],{"class":109},[103,13720,11375],{"class":1952},[103,13722,114],{"class":113},[103,13724,424],{"class":162},[103,13726,13704],{"class":113},[103,13728,1157],{"class":109},[103,13730,8830],{"class":113},[103,13732,13733],{"class":105,"line":1636},[103,13734,2389],{"emptyLinePlaceholder":30},[103,13736,13737,13739,13741,13743],{"class":105,"line":1642},[103,13738,2292],{"class":1952},[103,13740,114],{"class":113},[103,13742,2297],{"class":218},[103,13744,2708],{"class":113},[103,13746,13747],{"class":105,"line":1663},[103,13748,2389],{"emptyLinePlaceholder":30},[103,13750,13751,13753,13755],{"class":105,"line":1668},[103,13752,4079],{"class":109},[103,13754,4082],{"class":162},[103,13756,1279],{"class":113},[103,13758,13759],{"class":105,"line":1682},[103,13760,1554],{"class":113},[14,13762,11322],{},[57,13764,13765,13768,13771],{},[60,13766,13767],{},"我传就用我；没传就用你",[60,13769,13770],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[60,13772,13773],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[45,13775,13777],{"id":13776},"_72函数的占位参数","7.2函数的占位参数",[14,13779,13780],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13782,13783,13785,13786],{},[263,13784,5171],{}," ",[100,13787,13788],{},"返回值类型 函数名 (数据类型){}",[94,13790,13792],{"className":96,"code":13791,"language":98,"meta":24,"style":24},"\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",[100,13793,13794,13799,13817,13830,13834,13842,13846,13863,13867,13877,13881,13889],{"__ignoreMap":24},[103,13795,13796],{"class":105,"line":106},[103,13797,13798],{"class":172},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[103,13800,13801,13803,13805,13807,13809,13811,13813,13815],{"class":105,"line":25},[103,13802,5354],{"class":109},[103,13804,11375],{"class":1952},[103,13806,114],{"class":113},[103,13808,117],{"class":109},[103,13810,1387],{"class":5206},[103,13812,12425],{"class":113},[103,13814,117],{"class":109},[103,13816,12432],{"class":113},[103,13818,13819,13821,13823,13826,13828],{"class":105,"line":1168},[103,13820,6519],{"class":113},[103,13822,1157],{"class":109},[103,13824,13825],{"class":218}," \"this is func\"",[103,13827,1433],{"class":109},[103,13829,8830],{"class":113},[103,13831,13832],{"class":105,"line":1183},[103,13833,1554],{"class":113},[103,13835,13836,13838,13840],{"class":105,"line":1189},[103,13837,117],{"class":109},[103,13839,1962],{"class":1952},[103,13841,10843],{"class":113},[103,13843,13844],{"class":105,"line":1203},[103,13845,2389],{"emptyLinePlaceholder":30},[103,13847,13848,13850,13852,13854,13856,13858,13860],{"class":105,"line":1209},[103,13849,13275],{"class":1952},[103,13851,114],{"class":113},[103,13853,559],{"class":162},[103,13855,491],{"class":113},[103,13857,559],{"class":162},[103,13859,5956],{"class":113},[103,13861,13862],{"class":172}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[103,13864,13865],{"class":105,"line":1300},[103,13866,2389],{"emptyLinePlaceholder":30},[103,13868,13869,13871,13873,13875],{"class":105,"line":1306},[103,13870,2292],{"class":1952},[103,13872,114],{"class":113},[103,13874,2297],{"class":218},[103,13876,2708],{"class":113},[103,13878,13879],{"class":105,"line":1318},[103,13880,2389],{"emptyLinePlaceholder":30},[103,13882,13883,13885,13887],{"class":105,"line":1601},[103,13884,4079],{"class":109},[103,13886,4082],{"class":162},[103,13888,1279],{"class":113},[103,13890,13891],{"class":105,"line":1606},[103,13892,1554],{"class":113},[14,13894,13895],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[45,13897,13899],{"id":13898},"_73函数重载","7.3函数重载",[14,13901,13902],{},"意思是函数名是可以相同的",[74,13904,13906],{"id":13905},"_731基本语法","7.3.1基本语法",[14,13908,13909],{},"作用：函数名可以相同，提高复用性",[14,13911,13912],{},[263,13913,13914],{},"函数重载满足条件：",[1120,13916,13917,13920,13923],{},[60,13918,13919],{},"同一个作用域下",[60,13921,13922],{},"函数名称相同",[60,13924,13925,13926,13929,13930,13933,13934],{},"函数参数",[263,13927,13928],{},"类型不同","  或者 ",[263,13931,13932],{},"个数不同"," 或者 ",[263,13935,13936],{},"顺序不同",[14,13938,13939,13942],{},[263,13940,13941],{},"注意:","  函数的返回值不可以作为函数重载的条件",[94,13944,13946],{"className":9931,"code":13945,"language":9933,"meta":24,"style":24},"\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",[100,13947,13948,13953,13961,13965,13978,13982,13996,14000,14013,14017,14032,14036,14049,14053,14074,14078,14091,14095,14115,14119,14132,14136,14140,14145,14150,14155,14160,14165,14169,14173,14181,14185,14191,14201,14211,14225,14240,14244,14254,14258,14266],{"__ignoreMap":24},[103,13949,13950],{"class":105,"line":106},[103,13951,13952],{"class":172},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[103,13954,13955,13957,13959],{"class":105,"line":25},[103,13956,5354],{"class":109},[103,13958,11375],{"class":1952},[103,13960,1965],{"class":113},[103,13962,13963],{"class":105,"line":1168},[103,13964,1535],{"class":113},[103,13966,13967,13969,13971,13974,13976],{"class":105,"line":1183},[103,13968,6519],{"class":113},[103,13970,1157],{"class":109},[103,13972,13973],{"class":218}," \"func 的调用！\"",[103,13975,1433],{"class":109},[103,13977,8830],{"class":113},[103,13979,13980],{"class":105,"line":1189},[103,13981,1554],{"class":113},[103,13983,13984,13986,13988,13990,13992,13994],{"class":105,"line":1203},[103,13985,5354],{"class":109},[103,13987,11375],{"class":1952},[103,13989,114],{"class":113},[103,13991,117],{"class":109},[103,13993,1387],{"class":5206},[103,13995,120],{"class":113},[103,13997,13998],{"class":105,"line":1209},[103,13999,1535],{"class":113},[103,14001,14002,14004,14006,14009,14011],{"class":105,"line":1300},[103,14003,6519],{"class":113},[103,14005,1157],{"class":109},[103,14007,14008],{"class":218}," \"func (int a) 的调用！\"",[103,14010,1433],{"class":109},[103,14012,8830],{"class":113},[103,14014,14015],{"class":105,"line":1306},[103,14016,1554],{"class":113},[103,14018,14019,14021,14023,14025,14028,14030],{"class":105,"line":1318},[103,14020,5354],{"class":109},[103,14022,11375],{"class":1952},[103,14024,114],{"class":113},[103,14026,14027],{"class":109},"double",[103,14029,1387],{"class":5206},[103,14031,120],{"class":113},[103,14033,14034],{"class":105,"line":1601},[103,14035,1535],{"class":113},[103,14037,14038,14040,14042,14045,14047],{"class":105,"line":1606},[103,14039,6519],{"class":113},[103,14041,1157],{"class":109},[103,14043,14044],{"class":218}," \"func (double a)的调用！\"",[103,14046,1433],{"class":109},[103,14048,8830],{"class":113},[103,14050,14051],{"class":105,"line":1612},[103,14052,1554],{"class":113},[103,14054,14055,14057,14059,14061,14063,14065,14068,14070,14072],{"class":105,"line":1617},[103,14056,5354],{"class":109},[103,14058,11375],{"class":1952},[103,14060,114],{"class":113},[103,14062,117],{"class":109},[103,14064,1387],{"class":5206},[103,14066,14067],{"class":113}," ,",[103,14069,14027],{"class":109},[103,14071,2822],{"class":5206},[103,14073,120],{"class":113},[103,14075,14076],{"class":105,"line":1631},[103,14077,1535],{"class":113},[103,14079,14080,14082,14084,14087,14089],{"class":105,"line":1636},[103,14081,6519],{"class":113},[103,14083,1157],{"class":109},[103,14085,14086],{"class":218}," \"func (int a ,double b) 的调用！\"",[103,14088,1433],{"class":109},[103,14090,8830],{"class":113},[103,14092,14093],{"class":105,"line":1642},[103,14094,1554],{"class":113},[103,14096,14097,14099,14101,14103,14105,14107,14109,14111,14113],{"class":105,"line":1663},[103,14098,5354],{"class":109},[103,14100,11375],{"class":1952},[103,14102,114],{"class":113},[103,14104,14027],{"class":109},[103,14106,1387],{"class":5206},[103,14108,14067],{"class":113},[103,14110,117],{"class":109},[103,14112,2822],{"class":5206},[103,14114,120],{"class":113},[103,14116,14117],{"class":105,"line":1668},[103,14118,1535],{"class":113},[103,14120,14121,14123,14125,14128,14130],{"class":105,"line":1682},[103,14122,6519],{"class":113},[103,14124,1157],{"class":109},[103,14126,14127],{"class":218}," \"func (double a ,int b)的调用！\"",[103,14129,1433],{"class":109},[103,14131,8830],{"class":113},[103,14133,14134],{"class":105,"line":1687},[103,14135,1554],{"class":113},[103,14137,14138],{"class":105,"line":1716},[103,14139,2389],{"emptyLinePlaceholder":30},[103,14141,14142],{"class":105,"line":1721},[103,14143,14144],{"class":172},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[103,14146,14147],{"class":105,"line":1738},[103,14148,14149],{"class":172},"\u002F\u002Fint func(double a, int b)\n",[103,14151,14152],{"class":105,"line":1743},[103,14153,14154],{"class":172},"\u002F\u002F{\n",[103,14156,14157],{"class":105,"line":1748},[103,14158,14159],{"class":172},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[103,14161,14162],{"class":105,"line":1753},[103,14163,14164],{"class":172},"\u002F\u002F}\n",[103,14166,14167],{"class":105,"line":1767},[103,14168,2389],{"emptyLinePlaceholder":30},[103,14170,14171],{"class":105,"line":1772},[103,14172,2389],{"emptyLinePlaceholder":30},[103,14174,14175,14177,14179],{"class":105,"line":2566},[103,14176,117],{"class":109},[103,14178,1962],{"class":1952},[103,14180,10843],{"class":113},[103,14182,14183],{"class":105,"line":2580},[103,14184,2389],{"emptyLinePlaceholder":30},[103,14186,14187,14189],{"class":105,"line":2588},[103,14188,13275],{"class":1952},[103,14190,5626],{"class":113},[103,14192,14193,14195,14197,14199],{"class":105,"line":2593},[103,14194,13275],{"class":1952},[103,14196,114],{"class":113},[103,14198,559],{"class":162},[103,14200,2708],{"class":113},[103,14202,14203,14205,14207,14209],{"class":105,"line":2599},[103,14204,13275],{"class":1952},[103,14206,114],{"class":113},[103,14208,163],{"class":162},[103,14210,2708],{"class":113},[103,14212,14213,14215,14217,14219,14221,14223],{"class":105,"line":2605},[103,14214,13275],{"class":1952},[103,14216,114],{"class":113},[103,14218,559],{"class":162},[103,14220,491],{"class":113},[103,14222,163],{"class":162},[103,14224,2708],{"class":113},[103,14226,14227,14229,14231,14233,14236,14238],{"class":105,"line":2610},[103,14228,13275],{"class":1952},[103,14230,114],{"class":113},[103,14232,163],{"class":162},[103,14234,14235],{"class":113}," , ",[103,14237,559],{"class":162},[103,14239,2708],{"class":113},[103,14241,14242],{"class":105,"line":7938},[103,14243,13200],{"class":113},[103,14245,14246,14248,14250,14252],{"class":105,"line":7962},[103,14247,2292],{"class":1952},[103,14249,114],{"class":113},[103,14251,2297],{"class":218},[103,14253,2708],{"class":113},[103,14255,14256],{"class":105,"line":7967},[103,14257,2389],{"emptyLinePlaceholder":30},[103,14259,14260,14262,14264],{"class":105,"line":7973},[103,14261,4079],{"class":109},[103,14263,4082],{"class":162},[103,14265,1279],{"class":113},[103,14267,14268],{"class":105,"line":8000},[103,14269,1554],{"class":113},[14,14271,14272],{},"重点：函数返回值不可以作为函数重载条件！",[74,14274,14276],{"id":14275},"_732注意事项","7.3.2注意事项",[1120,14278,14279,14282],{},[60,14280,14281],{},"引用作为重载条件!!!",[60,14283,14284],{},"函数重载碰到函数默认参数",[94,14286,14288],{"className":96,"code":14287,"language":98,"meta":24,"style":24},"\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",[100,14289,14290,14295,14300,14304,14320,14324,14337,14341,14345,14363,14367,14380,14384,14388,14392,14397,14401,14425,14429,14442,14446,14450,14464,14468,14481,14485,14489,14497,14501,14513,14523,14536,14540,14544,14552,14556,14566,14570,14578],{"__ignoreMap":24},[103,14291,14292],{"class":105,"line":106},[103,14293,14294],{"class":172},"\u002F\u002F函数重载注意事项\n",[103,14296,14297],{"class":105,"line":25},[103,14298,14299],{"class":172},"\u002F\u002F1、引用作为重载条件\n",[103,14301,14302],{"class":105,"line":1168},[103,14303,2389],{"emptyLinePlaceholder":30},[103,14305,14306,14308,14310,14312,14314,14316,14318],{"class":105,"line":1183},[103,14307,5354],{"class":109},[103,14309,11375],{"class":1952},[103,14311,114],{"class":113},[103,14313,117],{"class":109},[103,14315,10574],{"class":109},[103,14317,17],{"class":5206},[103,14319,120],{"class":113},[103,14321,14322],{"class":105,"line":1189},[103,14323,1535],{"class":113},[103,14325,14326,14328,14330,14333,14335],{"class":105,"line":1203},[103,14327,6519],{"class":113},[103,14329,1157],{"class":109},[103,14331,14332],{"class":218}," \"func (int &a) 调用 \"",[103,14334,1433],{"class":109},[103,14336,8830],{"class":113},[103,14338,14339],{"class":105,"line":1209},[103,14340,1554],{"class":113},[103,14342,14343],{"class":105,"line":1300},[103,14344,2389],{"emptyLinePlaceholder":30},[103,14346,14347,14349,14351,14353,14355,14357,14359,14361],{"class":105,"line":1306},[103,14348,5354],{"class":109},[103,14350,11375],{"class":1952},[103,14352,114],{"class":113},[103,14354,6782],{"class":109},[103,14356,2371],{"class":109},[103,14358,10574],{"class":109},[103,14360,17],{"class":5206},[103,14362,120],{"class":113},[103,14364,14365],{"class":105,"line":1318},[103,14366,1535],{"class":113},[103,14368,14369,14371,14373,14376,14378],{"class":105,"line":1601},[103,14370,6519],{"class":113},[103,14372,1157],{"class":109},[103,14374,14375],{"class":218}," \"func (const int &a) 调用 \"",[103,14377,1433],{"class":109},[103,14379,8830],{"class":113},[103,14381,14382],{"class":105,"line":1606},[103,14383,1554],{"class":113},[103,14385,14386],{"class":105,"line":1612},[103,14387,2389],{"emptyLinePlaceholder":30},[103,14389,14390],{"class":105,"line":1617},[103,14391,2389],{"emptyLinePlaceholder":30},[103,14393,14394],{"class":105,"line":1631},[103,14395,14396],{"class":172},"\u002F\u002F2、函数重载碰到函数默认参数\n",[103,14398,14399],{"class":105,"line":1636},[103,14400,2389],{"emptyLinePlaceholder":30},[103,14402,14403,14405,14407,14409,14411,14413,14415,14417,14419,14421,14423],{"class":105,"line":1642},[103,14404,5354],{"class":109},[103,14406,13608],{"class":1952},[103,14408,114],{"class":113},[103,14410,117],{"class":109},[103,14412,1387],{"class":5206},[103,14414,12425],{"class":113},[103,14416,117],{"class":109},[103,14418,2822],{"class":5206},[103,14420,13554],{"class":109},[103,14422,2027],{"class":162},[103,14424,120],{"class":113},[103,14426,14427],{"class":105,"line":1663},[103,14428,1535],{"class":113},[103,14430,14431,14433,14435,14438,14440],{"class":105,"line":1668},[103,14432,6519],{"class":113},[103,14434,1157],{"class":109},[103,14436,14437],{"class":218}," \"func2(int a, int b = 10) 调用\"",[103,14439,1433],{"class":109},[103,14441,8830],{"class":113},[103,14443,14444],{"class":105,"line":1682},[103,14445,1554],{"class":113},[103,14447,14448],{"class":105,"line":1687},[103,14449,2389],{"emptyLinePlaceholder":30},[103,14451,14452,14454,14456,14458,14460,14462],{"class":105,"line":1716},[103,14453,5354],{"class":109},[103,14455,13608],{"class":1952},[103,14457,114],{"class":113},[103,14459,117],{"class":109},[103,14461,1387],{"class":5206},[103,14463,120],{"class":113},[103,14465,14466],{"class":105,"line":1721},[103,14467,1535],{"class":113},[103,14469,14470,14472,14474,14477,14479],{"class":105,"line":1738},[103,14471,6519],{"class":113},[103,14473,1157],{"class":109},[103,14475,14476],{"class":218}," \"func2(int a) 调用\"",[103,14478,1433],{"class":109},[103,14480,8830],{"class":113},[103,14482,14483],{"class":105,"line":1743},[103,14484,1554],{"class":113},[103,14486,14487],{"class":105,"line":1748},[103,14488,2389],{"emptyLinePlaceholder":30},[103,14490,14491,14493,14495],{"class":105,"line":1753},[103,14492,117],{"class":109},[103,14494,1962],{"class":1952},[103,14496,10843],{"class":113},[103,14498,14499],{"class":105,"line":1767},[103,14500,13200],{"class":113},[103,14502,14503,14505,14507,14509,14511],{"class":105,"line":1772},[103,14504,1974],{"class":109},[103,14506,10859],{"class":113},[103,14508,159],{"class":109},[103,14510,2027],{"class":162},[103,14512,1279],{"class":113},[103,14514,14515,14517,14520],{"class":105,"line":2566},[103,14516,13275],{"class":1952},[103,14518,14519],{"class":113},"(a);",[103,14521,14522],{"class":172}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[103,14524,14525,14527,14529,14531,14533],{"class":105,"line":2580},[103,14526,13275],{"class":1952},[103,14528,114],{"class":113},[103,14530,559],{"class":162},[103,14532,5956],{"class":113},[103,14534,14535],{"class":172},"\u002F\u002F调用有const   10是个常量\n",[103,14537,14538],{"class":105,"line":2588},[103,14539,2389],{"emptyLinePlaceholder":30},[103,14541,14542],{"class":105,"line":2593},[103,14543,2389],{"emptyLinePlaceholder":30},[103,14545,14546,14549],{"class":105,"line":2599},[103,14547,14548],{"class":172},"    \u002F\u002Ffunc2(10);",[103,14550,14551],{"class":172}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[103,14553,14554],{"class":105,"line":2605},[103,14555,2389],{"emptyLinePlaceholder":30},[103,14557,14558,14560,14562,14564],{"class":105,"line":2610},[103,14559,2292],{"class":1952},[103,14561,114],{"class":113},[103,14563,2297],{"class":218},[103,14565,2708],{"class":113},[103,14567,14568],{"class":105,"line":7938},[103,14569,2389],{"emptyLinePlaceholder":30},[103,14571,14572,14574,14576],{"class":105,"line":7962},[103,14573,4079],{"class":109},[103,14575,4082],{"class":162},[103,14577,1279],{"class":113},[103,14579,14580],{"class":105,"line":7967},[103,14581,1554],{"class":113},[5116,14583,14584],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":24,"searchDepth":25,"depth":25,"links":14586},[14587,14588,14589],{"id":13519,"depth":25,"text":13520},{"id":13776,"depth":25,"text":13777},{"id":13898,"depth":25,"text":13899,"children":14590},[14591,14592],{"id":13905,"depth":1168,"text":13906},{"id":14275,"depth":1168,"text":14276},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13511,"description":24},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14599,"title":14600,"body":14601,"description":23355,"extension":28,"meta":23356,"navigation":30,"path":23357,"seo":23358,"stem":23359,"__hash__":23360},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14602,"toc":23336},[14603,14606,14612,14619,14624,14627,14630,14633,14637,14641,14644,14647,14655,14660,14663,14670,14675,14834,14837,15090,15093,15096,15099,15104,15107,15110,15121,15126,15362,15366,15376,15379,15387,15534,15538,15541,15544,15548,15993,15997,16005,16013,16925,16932,16937,17565,17568,17571,17574,17693,17696,17783,17786,17912,17915,18009,18012,18365,18369,18377,18381,18388,18391,18394,18405,18411,18416,18428,18436,18456,18464,18481,18667,18670,18674,18677,18680,18683,18686,18689,18692,18695,19155,19161,19165,19168,19179,19766,19769,20258,20262,20265,20268,20271,20274,20277,20285,20681,20685,20688,20691,21138,21141,21144,21149,21152,21157,21160,21164,21167,21169,21175,21178,21484,21494,21535,21539,21542,21544,21577,21580,21887,21889,21904,21907,21930,21939,21945,21948,21952,21955,21958,21963,21974,21979,21987,21992,22122,22125,22128,22303,22308,22520,22524,22527,22641,22646,22885,22889,22893,22896,22899,22904,23009,23012,23015,23018,23022,23133,23136,23139,23144,23196,23199,23202,23207,23253,23256,23261,23329,23331,23334],[10,14604,14600],{"id":14605},"_8类和对象",[14,14607,14608,14609],{},"C++面向对象的三大特性为",[263,14610,14611],{},"封装、继承、多态",[14,14613,14614,14615,14618],{},"C++认为",[263,14616,14617],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14620,14621],{},[263,14622,14623],{},"例如：",[14,14625,14626],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14628,14629],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14631,14632],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[45,14634,14636],{"id":14635},"_81封装","8.1封装",[74,14638,14640],{"id":14639},"_811封装的意义","8.1.1封装的意义",[14,14642,14643],{},"封装是C++面向对象三大特性之一",[14,14645,14646],{},"封装的意义：",[1120,14648,14649,14652],{},[60,14650,14651],{},"将属性和行为作为一个整体，表现生活中的事物",[60,14653,14654],{},"将属性和行为加以权限控制",[14,14656,14657],{},[263,14658,14659],{},"封装意义一：",[14,14661,14662],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14664,14665,13785,14667],{},[263,14666,5171],{},[100,14668,14669],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[57,14671,14672],{},[60,14673,14674],{},"**示例1：**设计一个圆类，求圆的周长",[94,14676,14678],{"className":96,"code":14677,"language":98,"meta":24,"style":24},"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",[100,14679,14680,14688,14692,14697,14702,14707,14712,14719,14724,14734,14738,14756,14760,14764,14772,14776,14781,14786,14791,14796,14807,14830],{"__ignoreMap":24},[103,14681,14682,14685],{"class":105,"line":106},[103,14683,14684],{"class":109},"class",[103,14686,14687],{"class":1952}," Circle\n",[103,14689,14690],{"class":105,"line":25},[103,14691,1535],{"class":113},[103,14693,14694],{"class":105,"line":1168},[103,14695,14696],{"class":172},"    \u002F\u002F访问权限\n",[103,14698,14699],{"class":105,"line":1183},[103,14700,14701],{"class":172},"    \u002F\u002F公共权限\n",[103,14703,14704],{"class":105,"line":1189},[103,14705,14706],{"class":109},"public:\n",[103,14708,14709],{"class":105,"line":1203},[103,14710,14711],{"class":172},"    \u002F\u002F属性\n",[103,14713,14714,14716],{"class":105,"line":1209},[103,14715,1974],{"class":109},[103,14717,14718],{"class":113}," m_r;\n",[103,14720,14721],{"class":105,"line":1300},[103,14722,14723],{"class":172},"    \u002F\u002F行为\n",[103,14725,14726,14729,14732],{"class":105,"line":1306},[103,14727,14728],{"class":109},"    double",[103,14730,14731],{"class":1952}," calculateZC",[103,14733,1965],{"class":113},[103,14735,14736],{"class":105,"line":1318},[103,14737,2019],{"class":113},[103,14739,14740,14743,14746,14748,14751,14753],{"class":105,"line":1601},[103,14741,14742],{"class":109},"        return",[103,14744,14745],{"class":162}," 2",[103,14747,568],{"class":109},[103,14749,14750],{"class":113},"PI",[103,14752,568],{"class":109},[103,14754,14755],{"class":113},"m_r;\n",[103,14757,14758],{"class":105,"line":1606},[103,14759,2176],{"class":113},[103,14761,14762],{"class":105,"line":1612},[103,14763,3984],{"class":113},[103,14765,14766,14768,14770],{"class":105,"line":1617},[103,14767,117],{"class":109},[103,14769,1962],{"class":1952},[103,14771,1965],{"class":113},[103,14773,14774],{"class":105,"line":1631},[103,14775,1535],{"class":113},[103,14777,14778],{"class":105,"line":1636},[103,14779,14780],{"class":172},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[103,14782,14783],{"class":105,"line":1642},[103,14784,14785],{"class":172},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[103,14787,14788],{"class":105,"line":1663},[103,14789,14790],{"class":113},"    Circle c1;\n",[103,14792,14793],{"class":105,"line":1668},[103,14794,14795],{"class":172},"    \u002F\u002F给圆对象 的属性进行赋值\n",[103,14797,14798,14801,14803,14805],{"class":105,"line":1682},[103,14799,14800],{"class":113},"    c1.m_r",[103,14802,159],{"class":109},[103,14804,559],{"class":162},[103,14806,1279],{"class":113},[103,14808,14809,14811,14813,14816,14818,14821,14824,14826,14828],{"class":105,"line":1687},[103,14810,1540],{"class":113},[103,14812,1157],{"class":109},[103,14814,14815],{"class":218},"\"圆的周长\"",[103,14817,1157],{"class":109},[103,14819,14820],{"class":113},"c1.",[103,14822,14823],{"class":1952},"calculateZC",[103,14825,2416],{"class":113},[103,14827,1157],{"class":109},[103,14829,1180],{"class":113},[103,14831,14832],{"class":105,"line":1716},[103,14833,1554],{"class":113},[14,14835,14836],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[94,14838,14840],{"className":96,"code":14839,"language":98,"meta":24,"style":24},"#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",[100,14841,14842,14848,14858,14864,14870,14874,14878,14883,14890,14895,14913,14917,14927,14931,14936,14952,14956,14966,14970,14975,14983,14987,15019,15023,15027,15035,15039,15044,15049,15063,15077,15086],{"__ignoreMap":24},[103,14843,14844,14846],{"class":105,"line":106},[103,14845,1938],{"class":109},[103,14847,1941],{"class":218},[103,14849,14850,14852,14854,14856],{"class":105,"line":25},[103,14851,1946],{"class":109},[103,14853,1949],{"class":109},[103,14855,1953],{"class":1952},[103,14857,1279],{"class":113},[103,14859,14860,14862],{"class":105,"line":1168},[103,14861,1938],{"class":109},[103,14863,7739],{"class":218},[103,14865,14866,14868],{"class":105,"line":1183},[103,14867,14684],{"class":109},[103,14869,7752],{"class":1952},[103,14871,14872],{"class":105,"line":1189},[103,14873,1535],{"class":113},[103,14875,14876],{"class":105,"line":1203},[103,14877,14706],{"class":109},[103,14879,14880],{"class":105,"line":1209},[103,14881,14882],{"class":113},"    string m_name;\n",[103,14884,14885,14887],{"class":105,"line":1300},[103,14886,1974],{"class":109},[103,14888,14889],{"class":113}," m_id;\n",[103,14891,14892],{"class":105,"line":1306},[103,14893,14894],{"class":172},"    \u002F\u002F赋值姓名\n",[103,14896,14897,14900,14903,14905,14908,14911],{"class":105,"line":1318},[103,14898,14899],{"class":109},"    void",[103,14901,14902],{"class":1952}," setName",[103,14904,114],{"class":113},[103,14906,14907],{"class":1952},"string",[103,14909,14910],{"class":5206}," name",[103,14912,120],{"class":113},[103,14914,14915],{"class":105,"line":1601},[103,14916,2019],{"class":113},[103,14918,14919,14922,14924],{"class":105,"line":1606},[103,14920,14921],{"class":113},"        m_name",[103,14923,159],{"class":109},[103,14925,14926],{"class":113},"name;\n",[103,14928,14929],{"class":105,"line":1612},[103,14930,2176],{"class":113},[103,14932,14933],{"class":105,"line":1617},[103,14934,14935],{"class":172},"    \u002F\u002F赋值学号\n",[103,14937,14938,14940,14943,14945,14947,14950],{"class":105,"line":1631},[103,14939,14899],{"class":109},[103,14941,14942],{"class":1952}," setId",[103,14944,114],{"class":113},[103,14946,117],{"class":109},[103,14948,14949],{"class":5206}," id",[103,14951,120],{"class":113},[103,14953,14954],{"class":105,"line":1636},[103,14955,2019],{"class":113},[103,14957,14958,14961,14963],{"class":105,"line":1642},[103,14959,14960],{"class":113},"        m_id",[103,14962,159],{"class":109},[103,14964,14965],{"class":113},"id;\n",[103,14967,14968],{"class":105,"line":1663},[103,14969,2176],{"class":113},[103,14971,14972],{"class":105,"line":1668},[103,14973,14974],{"class":172},"    \u002F\u002F打印学生信息\n",[103,14976,14977,14979,14981],{"class":105,"line":1682},[103,14978,14899],{"class":109},[103,14980,9605],{"class":1952},[103,14982,1965],{"class":113},[103,14984,14985],{"class":105,"line":1687},[103,14986,2019],{"class":113},[103,14988,14989,14991,14993,14996,14998,15001,15003,15005,15007,15010,15012,15015,15017],{"class":105,"line":1716},[103,14990,3440],{"class":113},[103,14992,1157],{"class":109},[103,14994,14995],{"class":218},"\"姓名：\"",[103,14997,1157],{"class":109},[103,14999,15000],{"class":113},"m_name",[103,15002,1157],{"class":109},[103,15004,4348],{"class":218},[103,15006,1157],{"class":109},[103,15008,15009],{"class":218},"\"学号：\"",[103,15011,1157],{"class":109},[103,15013,15014],{"class":113},"m_id",[103,15016,1157],{"class":109},[103,15018,1180],{"class":113},[103,15020,15021],{"class":105,"line":1721},[103,15022,2176],{"class":113},[103,15024,15025],{"class":105,"line":1738},[103,15026,3984],{"class":113},[103,15028,15029,15031,15033],{"class":105,"line":1743},[103,15030,117],{"class":109},[103,15032,1962],{"class":1952},[103,15034,1965],{"class":113},[103,15036,15037],{"class":105,"line":1748},[103,15038,1535],{"class":113},[103,15040,15041],{"class":105,"line":1753},[103,15042,15043],{"class":172},"    \u002F\u002F实例化\n",[103,15045,15046],{"class":105,"line":1767},[103,15047,15048],{"class":113},"    Student s1;\n",[103,15050,15051,15054,15057,15059,15061],{"class":105,"line":1772},[103,15052,15053],{"class":113},"    s1.",[103,15055,15056],{"class":1952},"setName",[103,15058,114],{"class":113},[103,15060,7906],{"class":218},[103,15062,2708],{"class":113},[103,15064,15065,15067,15070,15072,15075],{"class":105,"line":2566},[103,15066,15053],{"class":113},[103,15068,15069],{"class":1952},"setId",[103,15071,114],{"class":113},[103,15073,15074],{"class":162},"123456",[103,15076,2708],{"class":113},[103,15078,15079,15081,15084],{"class":105,"line":2580},[103,15080,15053],{"class":113},[103,15082,15083],{"class":1952},"printInfo",[103,15085,5626],{"class":113},[103,15087,15088],{"class":105,"line":2588},[103,15089,1554],{"class":113},[14,15091,15092],{},"类中的属性和行为统称为成员",[14,15094,15095],{},"属性：成员属性(成员变量)",[14,15097,15098],{},"方法：成员函数(成员方法)",[14,15100,15101],{},[263,15102,15103],{},"封装意义二：",[14,15105,15106],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15108,15109],{},"访问权限有三种：",[57,15111,15112,15115,15118],{},[60,15113,15114],{},"public        公共权限",[60,15116,15117],{},"protected 保护权限",[60,15119,15120],{},"private      私有权限",[14,15122,15123],{},[263,15124,15125],{},"示例：",[94,15127,15129],{"className":9931,"code":15128,"language":9933,"meta":24,"style":24},"\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",[100,15130,15131,15136,15141,15146,15151,15155,15162,15166,15171,15175,15180,15184,15189,15194,15199,15203,15208,15213,15220,15224,15228,15236,15240,15251,15263,15275,15279,15283,15287,15295,15299,15304,15316,15324,15332,15336,15346,15350,15358],{"__ignoreMap":24},[103,15132,15133],{"class":105,"line":106},[103,15134,15135],{"class":172},"\u002F\u002F三种权限\n",[103,15137,15138],{"class":105,"line":25},[103,15139,15140],{"class":172},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[103,15142,15143],{"class":105,"line":1168},[103,15144,15145],{"class":172},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[103,15147,15148],{"class":105,"line":1183},[103,15149,15150],{"class":172},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[103,15152,15153],{"class":105,"line":1189},[103,15154,2389],{"emptyLinePlaceholder":30},[103,15156,15157,15159],{"class":105,"line":1203},[103,15158,14684],{"class":109},[103,15160,15161],{"class":1952}," Person\n",[103,15163,15164],{"class":105,"line":1209},[103,15165,1535],{"class":113},[103,15167,15168],{"class":105,"line":1300},[103,15169,15170],{"class":172},"    \u002F\u002F姓名  公共权限\n",[103,15172,15173],{"class":105,"line":1306},[103,15174,14706],{"class":109},[103,15176,15177],{"class":105,"line":1318},[103,15178,15179],{"class":113},"    string m_Name;\n",[103,15181,15182],{"class":105,"line":1601},[103,15183,2389],{"emptyLinePlaceholder":30},[103,15185,15186],{"class":105,"line":1606},[103,15187,15188],{"class":172},"    \u002F\u002F汽车  保护权限\n",[103,15190,15191],{"class":105,"line":1612},[103,15192,15193],{"class":109},"protected:\n",[103,15195,15196],{"class":105,"line":1617},[103,15197,15198],{"class":113},"    string m_Car;\n",[103,15200,15201],{"class":105,"line":1631},[103,15202,2389],{"emptyLinePlaceholder":30},[103,15204,15205],{"class":105,"line":1636},[103,15206,15207],{"class":172},"    \u002F\u002F银行卡密码  私有权限\n",[103,15209,15210],{"class":105,"line":1642},[103,15211,15212],{"class":109},"private:\n",[103,15214,15215,15217],{"class":105,"line":1663},[103,15216,1974],{"class":109},[103,15218,15219],{"class":113}," m_Password;\n",[103,15221,15222],{"class":105,"line":1668},[103,15223,2389],{"emptyLinePlaceholder":30},[103,15225,15226],{"class":105,"line":1682},[103,15227,14706],{"class":109},[103,15229,15230,15232,15234],{"class":105,"line":1687},[103,15231,14899],{"class":109},[103,15233,11375],{"class":1952},[103,15235,1965],{"class":113},[103,15237,15238],{"class":105,"line":1716},[103,15239,2019],{"class":113},[103,15241,15242,15245,15247,15249],{"class":105,"line":1721},[103,15243,15244],{"class":113},"        m_Name ",[103,15246,159],{"class":109},[103,15248,8928],{"class":218},[103,15250,1279],{"class":113},[103,15252,15253,15256,15258,15261],{"class":105,"line":1738},[103,15254,15255],{"class":113},"        m_Car ",[103,15257,159],{"class":109},[103,15259,15260],{"class":218}," \"拖拉机\"",[103,15262,1279],{"class":113},[103,15264,15265,15268,15270,15273],{"class":105,"line":1743},[103,15266,15267],{"class":113},"        m_Password ",[103,15269,159],{"class":109},[103,15271,15272],{"class":162}," 123456",[103,15274,1279],{"class":113},[103,15276,15277],{"class":105,"line":1748},[103,15278,2176],{"class":113},[103,15280,15281],{"class":105,"line":1753},[103,15282,3984],{"class":113},[103,15284,15285],{"class":105,"line":1767},[103,15286,2389],{"emptyLinePlaceholder":30},[103,15288,15289,15291,15293],{"class":105,"line":1772},[103,15290,117],{"class":109},[103,15292,1962],{"class":1952},[103,15294,10843],{"class":113},[103,15296,15297],{"class":105,"line":2566},[103,15298,2389],{"emptyLinePlaceholder":30},[103,15300,15301],{"class":105,"line":2580},[103,15302,15303],{"class":113},"    Person p;\n",[103,15305,15306,15309,15311,15314],{"class":105,"line":2588},[103,15307,15308],{"class":113},"    p.m_Name ",[103,15310,159],{"class":109},[103,15312,15313],{"class":218}," \"李四\"",[103,15315,1279],{"class":113},[103,15317,15318,15321],{"class":105,"line":2593},[103,15319,15320],{"class":172},"    \u002F\u002Fp.m_Car = \"奔驰\";",[103,15322,15323],{"class":172},"  \u002F\u002F保护权限类外访问不到\n",[103,15325,15326,15329],{"class":105,"line":2599},[103,15327,15328],{"class":172},"    \u002F\u002Fp.m_Password = 123;",[103,15330,15331],{"class":172}," \u002F\u002F私有权限类外访问不到\n",[103,15333,15334],{"class":105,"line":2605},[103,15335,2389],{"emptyLinePlaceholder":30},[103,15337,15338,15340,15342,15344],{"class":105,"line":2610},[103,15339,2292],{"class":1952},[103,15341,114],{"class":113},[103,15343,2297],{"class":218},[103,15345,2708],{"class":113},[103,15347,15348],{"class":105,"line":7938},[103,15349,2389],{"emptyLinePlaceholder":30},[103,15351,15352,15354,15356],{"class":105,"line":7962},[103,15353,4079],{"class":109},[103,15355,4082],{"class":162},[103,15357,1279],{"class":113},[103,15359,15360],{"class":105,"line":7967},[103,15361,1554],{"class":113},[74,15363,15365],{"id":15364},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15367,15368,15369,15372,15373],{},"在C++中 struct和class唯一的",[263,15370,15371],{},"区别","就在于 ",[263,15374,15375],{},"默认的访问权限不同",[14,15377,15378],{},"区别：",[1120,15380,15381,15384],{},[60,15382,15383],{},"struct 默认权限为公共",[60,15385,15386],{},"class   默认权限为私有",[94,15388,15390],{"className":9931,"code":15389,"language":9933,"meta":24,"style":24},"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",[100,15391,15392,15399,15403,15413,15417,15421,15428,15432,15442,15446,15450,15458,15462,15467,15481,15485,15490,15504,15508,15518,15522,15530],{"__ignoreMap":24},[103,15393,15394,15396],{"class":105,"line":106},[103,15395,14684],{"class":109},[103,15397,15398],{"class":1952}," C1\n",[103,15400,15401],{"class":105,"line":25},[103,15402,1535],{"class":113},[103,15404,15405,15407,15410],{"class":105,"line":1168},[103,15406,1974],{"class":109},[103,15408,15409],{"class":113},"  m_A;",[103,15411,15412],{"class":172}," \u002F\u002F默认是私有权限\n",[103,15414,15415],{"class":105,"line":1183},[103,15416,3984],{"class":113},[103,15418,15419],{"class":105,"line":1189},[103,15420,2389],{"emptyLinePlaceholder":30},[103,15422,15423,15425],{"class":105,"line":1203},[103,15424,7749],{"class":109},[103,15426,15427],{"class":1952}," C2\n",[103,15429,15430],{"class":105,"line":1209},[103,15431,1535],{"class":113},[103,15433,15434,15436,15439],{"class":105,"line":1300},[103,15435,1974],{"class":109},[103,15437,15438],{"class":113}," m_A;",[103,15440,15441],{"class":172},"  \u002F\u002F默认是公共权限\n",[103,15443,15444],{"class":105,"line":1306},[103,15445,3984],{"class":113},[103,15447,15448],{"class":105,"line":1318},[103,15449,2389],{"emptyLinePlaceholder":30},[103,15451,15452,15454,15456],{"class":105,"line":1601},[103,15453,117],{"class":109},[103,15455,1962],{"class":1952},[103,15457,10843],{"class":113},[103,15459,15460],{"class":105,"line":1606},[103,15461,2389],{"emptyLinePlaceholder":30},[103,15463,15464],{"class":105,"line":1612},[103,15465,15466],{"class":113},"    C1 c1;\n",[103,15468,15469,15472,15474,15476,15478],{"class":105,"line":1617},[103,15470,15471],{"class":113},"    c1.m_A ",[103,15473,159],{"class":109},[103,15475,2027],{"class":162},[103,15477,169],{"class":113},[103,15479,15480],{"class":172}," \u002F\u002F错误，访问权限是私有\n",[103,15482,15483],{"class":105,"line":1631},[103,15484,2389],{"emptyLinePlaceholder":30},[103,15486,15487],{"class":105,"line":1636},[103,15488,15489],{"class":113},"    C2 c2;\n",[103,15491,15492,15495,15497,15499,15501],{"class":105,"line":1642},[103,15493,15494],{"class":113},"    c2.m_A ",[103,15496,159],{"class":109},[103,15498,2027],{"class":162},[103,15500,169],{"class":113},[103,15502,15503],{"class":172}," \u002F\u002F正确，访问权限是公共\n",[103,15505,15506],{"class":105,"line":1663},[103,15507,2389],{"emptyLinePlaceholder":30},[103,15509,15510,15512,15514,15516],{"class":105,"line":1668},[103,15511,2292],{"class":1952},[103,15513,114],{"class":113},[103,15515,2297],{"class":218},[103,15517,2708],{"class":113},[103,15519,15520],{"class":105,"line":1682},[103,15521,2389],{"emptyLinePlaceholder":30},[103,15523,15524,15526,15528],{"class":105,"line":1687},[103,15525,4079],{"class":109},[103,15527,4082],{"class":162},[103,15529,1279],{"class":113},[103,15531,15532],{"class":105,"line":1716},[103,15533,1554],{"class":113},[74,15535,15537],{"id":15536},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15539,15540],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15542,15543],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15545,15546],{},[263,15547,15125],{},[94,15549,15551],{"className":9931,"code":15550,"language":9933,"meta":24,"style":24},"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",[100,15552,15553,15563,15567,15571,15576,15590,15599,15603,15613,15617,15624,15628,15632,15636,15641,15650,15657,15661,15666,15682,15705,15718,15725,15729,15738,15742,15746,15751,15767,15777,15781,15785,15789,15797,15801,15811,15815,15823,15827,15831,15839,15843,15847,15852,15865,15888,15892,15897,15910,15932,15936,15941,15955,15963,15967,15977,15981,15989],{"__ignoreMap":24},[103,15554,15555,15557,15560],{"class":105,"line":106},[103,15556,14684],{"class":109},[103,15558,15559],{"class":1952}," Person",[103,15561,15562],{"class":113}," {\n",[103,15564,15565],{"class":105,"line":25},[103,15566,14706],{"class":109},[103,15568,15569],{"class":105,"line":1168},[103,15570,2389],{"emptyLinePlaceholder":30},[103,15572,15573],{"class":105,"line":1183},[103,15574,15575],{"class":172},"    \u002F\u002F姓名设置可读可写\n",[103,15577,15578,15580,15582,15584,15586,15588],{"class":105,"line":1189},[103,15579,14899],{"class":109},[103,15581,14902],{"class":1952},[103,15583,114],{"class":113},[103,15585,14907],{"class":1952},[103,15587,14910],{"class":5206},[103,15589,12432],{"class":113},[103,15591,15592,15594,15596],{"class":105,"line":1203},[103,15593,15244],{"class":113},[103,15595,159],{"class":109},[103,15597,15598],{"class":113}," name;\n",[103,15600,15601],{"class":105,"line":1209},[103,15602,2176],{"class":113},[103,15604,15605,15608,15611],{"class":105,"line":1300},[103,15606,15607],{"class":1952},"    string",[103,15609,15610],{"class":1952}," getName",[103,15612,1965],{"class":113},[103,15614,15615],{"class":105,"line":1306},[103,15616,2019],{"class":113},[103,15618,15619,15621],{"class":105,"line":1318},[103,15620,14742],{"class":109},[103,15622,15623],{"class":113}," m_Name;\n",[103,15625,15626],{"class":105,"line":1601},[103,15627,2176],{"class":113},[103,15629,15630],{"class":105,"line":1606},[103,15631,2389],{"emptyLinePlaceholder":30},[103,15633,15634],{"class":105,"line":1612},[103,15635,2389],{"emptyLinePlaceholder":30},[103,15637,15638],{"class":105,"line":1617},[103,15639,15640],{"class":172},"    \u002F\u002F获取年龄 \n",[103,15642,15643,15645,15648],{"class":105,"line":1631},[103,15644,1974],{"class":109},[103,15646,15647],{"class":1952}," getAge",[103,15649,10843],{"class":113},[103,15651,15652,15654],{"class":105,"line":1636},[103,15653,14742],{"class":109},[103,15655,15656],{"class":113}," m_Age;\n",[103,15658,15659],{"class":105,"line":1642},[103,15660,2176],{"class":113},[103,15662,15663],{"class":105,"line":1663},[103,15664,15665],{"class":172},"    \u002F\u002F设置年龄\n",[103,15667,15668,15670,15673,15675,15677,15680],{"class":105,"line":1668},[103,15669,14899],{"class":109},[103,15671,15672],{"class":1952}," setAge",[103,15674,114],{"class":113},[103,15676,117],{"class":109},[103,15678,15679],{"class":5206}," age",[103,15681,12432],{"class":113},[103,15683,15684,15686,15689,15691,15693,15695,15698,15700,15703],{"class":105,"line":1682},[103,15685,2486],{"class":109},[103,15687,15688],{"class":113}," (age ",[103,15690,1023],{"class":109},[103,15692,4082],{"class":162},[103,15694,3244],{"class":109},[103,15696,15697],{"class":113}," age ",[103,15699,1073],{"class":109},[103,15701,15702],{"class":162}," 150",[103,15704,12432],{"class":113},[103,15706,15707,15709,15711,15714,15716],{"class":105,"line":1687},[103,15708,9709],{"class":113},[103,15710,1157],{"class":109},[103,15712,15713],{"class":218}," \"你个老妖精!\"",[103,15715,1433],{"class":109},[103,15717,8830],{"class":113},[103,15719,15720,15723],{"class":105,"line":1716},[103,15721,15722],{"class":109},"            return",[103,15724,1279],{"class":113},[103,15726,15727],{"class":105,"line":1721},[103,15728,2518],{"class":113},[103,15730,15731,15734,15736],{"class":105,"line":1738},[103,15732,15733],{"class":113},"        m_Age ",[103,15735,159],{"class":109},[103,15737,7787],{"class":113},[103,15739,15740],{"class":105,"line":1743},[103,15741,2176],{"class":113},[103,15743,15744],{"class":105,"line":1748},[103,15745,2389],{"emptyLinePlaceholder":30},[103,15747,15748],{"class":105,"line":1753},[103,15749,15750],{"class":172},"    \u002F\u002F情人设置为只写\n",[103,15752,15753,15755,15758,15760,15762,15765],{"class":105,"line":1767},[103,15754,14899],{"class":109},[103,15756,15757],{"class":1952}," setLover",[103,15759,114],{"class":113},[103,15761,14907],{"class":1952},[103,15763,15764],{"class":5206}," lover",[103,15766,12432],{"class":113},[103,15768,15769,15772,15774],{"class":105,"line":1772},[103,15770,15771],{"class":113},"        m_Lover ",[103,15773,159],{"class":109},[103,15775,15776],{"class":113}," lover;\n",[103,15778,15779],{"class":105,"line":2566},[103,15780,2176],{"class":113},[103,15782,15783],{"class":105,"line":2580},[103,15784,2389],{"emptyLinePlaceholder":30},[103,15786,15787],{"class":105,"line":2588},[103,15788,15212],{"class":109},[103,15790,15791,15794],{"class":105,"line":2593},[103,15792,15793],{"class":113},"    string m_Name;",[103,15795,15796],{"class":172}," \u002F\u002F可读可写  姓名\n",[103,15798,15799],{"class":105,"line":2599},[103,15800,13200],{"class":113},[103,15802,15803,15805,15808],{"class":105,"line":2605},[103,15804,1974],{"class":109},[103,15806,15807],{"class":113}," m_Age;",[103,15809,15810],{"class":172}," \u002F\u002F只读  年龄\n",[103,15812,15813],{"class":105,"line":2610},[103,15814,2389],{"emptyLinePlaceholder":30},[103,15816,15817,15820],{"class":105,"line":7938},[103,15818,15819],{"class":113},"    string m_Lover;",[103,15821,15822],{"class":172}," \u002F\u002F只写  情人\n",[103,15824,15825],{"class":105,"line":7962},[103,15826,3984],{"class":113},[103,15828,15829],{"class":105,"line":7967},[103,15830,2389],{"emptyLinePlaceholder":30},[103,15832,15833,15835,15837],{"class":105,"line":7973},[103,15834,117],{"class":109},[103,15836,1962],{"class":1952},[103,15838,10843],{"class":113},[103,15840,15841],{"class":105,"line":8000},[103,15842,2389],{"emptyLinePlaceholder":30},[103,15844,15845],{"class":105,"line":8005},[103,15846,15303],{"class":113},[103,15848,15849],{"class":105,"line":8011},[103,15850,15851],{"class":172},"    \u002F\u002F姓名设置\n",[103,15853,15854,15857,15859,15861,15863],{"class":105,"line":8023},[103,15855,15856],{"class":113},"    p.",[103,15858,15056],{"class":1952},[103,15860,114],{"class":113},[103,15862,7906],{"class":218},[103,15864,2708],{"class":113},[103,15866,15867,15869,15871,15874,15876,15879,15882,15884,15886],{"class":105,"line":8035},[103,15868,6519],{"class":113},[103,15870,1157],{"class":109},[103,15872,15873],{"class":218}," \"姓名： \"",[103,15875,1433],{"class":109},[103,15877,15878],{"class":113}," p.",[103,15880,15881],{"class":1952},"getName",[103,15883,13040],{"class":113},[103,15885,1157],{"class":109},[103,15887,8830],{"class":113},[103,15889,15890],{"class":105,"line":8047},[103,15891,2389],{"emptyLinePlaceholder":30},[103,15893,15894],{"class":105,"line":9706},[103,15895,15896],{"class":172},"    \u002F\u002F年龄设置\n",[103,15898,15899,15901,15904,15906,15908],{"class":105,"line":9731},[103,15900,15856],{"class":113},[103,15902,15903],{"class":1952},"setAge",[103,15905,114],{"class":113},[103,15907,769],{"class":162},[103,15909,2708],{"class":113},[103,15911,15912,15914,15916,15919,15921,15923,15926,15928,15930],{"class":105,"line":9754},[103,15913,6519],{"class":113},[103,15915,1157],{"class":109},[103,15917,15918],{"class":218}," \"年龄： \"",[103,15920,1433],{"class":109},[103,15922,15878],{"class":113},[103,15924,15925],{"class":1952},"getAge",[103,15927,13040],{"class":113},[103,15929,1157],{"class":109},[103,15931,8830],{"class":113},[103,15933,15934],{"class":105,"line":9778},[103,15935,2389],{"emptyLinePlaceholder":30},[103,15937,15938],{"class":105,"line":9783},[103,15939,15940],{"class":172},"    \u002F\u002F情人设置\n",[103,15942,15943,15945,15948,15950,15953],{"class":105,"line":9788},[103,15944,15856],{"class":113},[103,15946,15947],{"class":1952},"setLover",[103,15949,114],{"class":113},[103,15951,15952],{"class":218},"\"苍井\"",[103,15954,2708],{"class":113},[103,15956,15957,15960],{"class":105,"line":9793},[103,15958,15959],{"class":172},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[103,15961,15962],{"class":172},"  \u002F\u002F只写属性，不可以读取\n",[103,15964,15965],{"class":105,"line":9802},[103,15966,2389],{"emptyLinePlaceholder":30},[103,15968,15969,15971,15973,15975],{"class":105,"line":9807},[103,15970,2292],{"class":1952},[103,15972,114],{"class":113},[103,15974,2297],{"class":218},[103,15976,2708],{"class":113},[103,15978,15979],{"class":105,"line":9813},[103,15980,2389],{"emptyLinePlaceholder":30},[103,15982,15983,15985,15987],{"class":105,"line":9834},[103,15984,4079],{"class":109},[103,15986,4082],{"class":162},[103,15988,1279],{"class":113},[103,15990,15991],{"class":105,"line":9840},[103,15992,1554],{"class":113},[74,15994,15996],{"id":15995},"_814封装案例","8.1.4封装案例",[57,15998,15999],{},[60,16000,16001,16004],{},[263,16002,16003],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1120,16006,16007,16010],{},[60,16008,16009],{},"求出立方体的面积和体积",[60,16011,16012],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[94,16014,16016],{"className":96,"code":16015,"language":98,"meta":24,"style":24},"#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",[100,16017,16018,16024,16034,16041,16045,16049,16054,16084,16088,16098,16108,16118,16122,16131,16135,16171,16175,16184,16188,16204,16208,16213,16222,16226,16233,16237,16246,16250,16257,16261,16270,16274,16281,16285,16290,16307,16311,16357,16361,16370,16374,16378,16382,16391,16395,16399,16404,16408,16414,16420,16426,16430,16434,16439,16461,16465,16519,16523,16531,16535,16540,16545,16558,16565,16581,16592,16598,16621,16627,16650,16664,16684,16690,16701,16724,16746,16751,16757,16771,16784,16789,16803,16808,16814,16819,16833,16838,16843,16857,16869,16874,16887,16892,16897,16902,16915,16920],{"__ignoreMap":24},[103,16019,16020,16022],{"class":105,"line":106},[103,16021,1938],{"class":109},[103,16023,1941],{"class":218},[103,16025,16026,16028,16030,16032],{"class":105,"line":25},[103,16027,1946],{"class":109},[103,16029,1949],{"class":109},[103,16031,1953],{"class":1952},[103,16033,1279],{"class":113},[103,16035,16036,16038],{"class":105,"line":1168},[103,16037,14684],{"class":109},[103,16039,16040],{"class":1952}," Cube\n",[103,16042,16043],{"class":105,"line":1183},[103,16044,1535],{"class":113},[103,16046,16047],{"class":105,"line":1189},[103,16048,14706],{"class":109},[103,16050,16051],{"class":105,"line":1203},[103,16052,16053],{"class":172},"    \u002F\u002F输入长宽高\n",[103,16055,16056,16058,16061,16063,16065,16068,16070,16072,16075,16077,16079,16082],{"class":105,"line":1209},[103,16057,14899],{"class":109},[103,16059,16060],{"class":1952}," setLwh",[103,16062,114],{"class":113},[103,16064,117],{"class":109},[103,16066,16067],{"class":5206}," l",[103,16069,491],{"class":113},[103,16071,117],{"class":109},[103,16073,16074],{"class":5206}," w",[103,16076,491],{"class":113},[103,16078,117],{"class":109},[103,16080,16081],{"class":5206}," h",[103,16083,120],{"class":113},[103,16085,16086],{"class":105,"line":1300},[103,16087,2019],{"class":113},[103,16089,16090,16093,16095],{"class":105,"line":1306},[103,16091,16092],{"class":113},"        m_L",[103,16094,159],{"class":109},[103,16096,16097],{"class":113},"l;\n",[103,16099,16100,16103,16105],{"class":105,"line":1318},[103,16101,16102],{"class":113},"        m_W",[103,16104,159],{"class":109},[103,16106,16107],{"class":113},"w;\n",[103,16109,16110,16113,16115],{"class":105,"line":1601},[103,16111,16112],{"class":113},"        m_H",[103,16114,159],{"class":109},[103,16116,16117],{"class":113},"h;\n",[103,16119,16120],{"class":105,"line":1606},[103,16121,2176],{"class":113},[103,16123,16124,16126,16129],{"class":105,"line":1612},[103,16125,1974],{"class":109},[103,16127,16128],{"class":1952}," mianji",[103,16130,1965],{"class":113},[103,16132,16133],{"class":105,"line":1617},[103,16134,2019],{"class":113},[103,16136,16137,16139,16141,16143,16146,16148,16151,16153,16156,16158,16161,16163,16166,16168],{"class":105,"line":1631},[103,16138,14742],{"class":109},[103,16140,14745],{"class":162},[103,16142,568],{"class":109},[103,16144,16145],{"class":113},"(m_L",[103,16147,568],{"class":109},[103,16149,16150],{"class":113},"m_W ",[103,16152,594],{"class":109},[103,16154,16155],{"class":113}," m_L",[103,16157,568],{"class":109},[103,16159,16160],{"class":113},"m_H ",[103,16162,594],{"class":109},[103,16164,16165],{"class":113}," m_W",[103,16167,568],{"class":109},[103,16169,16170],{"class":113},"m_H);\n",[103,16172,16173],{"class":105,"line":1636},[103,16174,2176],{"class":113},[103,16176,16177,16179,16182],{"class":105,"line":1642},[103,16178,1974],{"class":109},[103,16180,16181],{"class":1952}," tiji",[103,16183,1965],{"class":113},[103,16185,16186],{"class":105,"line":1663},[103,16187,2019],{"class":113},[103,16189,16190,16192,16194,16196,16199,16201],{"class":105,"line":1668},[103,16191,14742],{"class":109},[103,16193,16155],{"class":113},[103,16195,568],{"class":109},[103,16197,16198],{"class":113},"m_W",[103,16200,568],{"class":109},[103,16202,16203],{"class":113},"m_H;\n",[103,16205,16206],{"class":105,"line":1682},[103,16207,2176],{"class":113},[103,16209,16210],{"class":105,"line":1687},[103,16211,16212],{"class":172},"    \u002F\u002F获取长宽高\n",[103,16214,16215,16217,16220],{"class":105,"line":1716},[103,16216,1974],{"class":109},[103,16218,16219],{"class":1952}," getLength",[103,16221,1965],{"class":113},[103,16223,16224],{"class":105,"line":1721},[103,16225,2019],{"class":113},[103,16227,16228,16230],{"class":105,"line":1738},[103,16229,14742],{"class":109},[103,16231,16232],{"class":113}," m_L;\n",[103,16234,16235],{"class":105,"line":1743},[103,16236,2176],{"class":113},[103,16238,16239,16241,16244],{"class":105,"line":1748},[103,16240,1974],{"class":109},[103,16242,16243],{"class":1952}," getWidth",[103,16245,1965],{"class":113},[103,16247,16248],{"class":105,"line":1753},[103,16249,2019],{"class":113},[103,16251,16252,16254],{"class":105,"line":1767},[103,16253,14742],{"class":109},[103,16255,16256],{"class":113}," m_W;\n",[103,16258,16259],{"class":105,"line":1772},[103,16260,2176],{"class":113},[103,16262,16263,16265,16268],{"class":105,"line":2566},[103,16264,1974],{"class":109},[103,16266,16267],{"class":1952}," getHeight",[103,16269,1965],{"class":113},[103,16271,16272],{"class":105,"line":2580},[103,16273,2019],{"class":113},[103,16275,16276,16278],{"class":105,"line":2588},[103,16277,14742],{"class":109},[103,16279,16280],{"class":113}," m_H;\n",[103,16282,16283],{"class":105,"line":2593},[103,16284,2176],{"class":113},[103,16286,16287],{"class":105,"line":2599},[103,16288,16289],{"class":172},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[103,16291,16292,16295,16298,16300,16303,16305],{"class":105,"line":2605},[103,16293,16294],{"class":109},"    bool",[103,16296,16297],{"class":1952}," isEqual",[103,16299,114],{"class":113},[103,16301,16302],{"class":1952},"Cube",[103,16304,2838],{"class":5206},[103,16306,120],{"class":113},[103,16308,16309],{"class":105,"line":2610},[103,16310,2019],{"class":113},[103,16312,16313,16315,16318,16321,16323,16325,16328,16330,16333,16336,16338,16340,16343,16345,16347,16350,16352,16354],{"class":105,"line":7938},[103,16314,2486],{"class":109},[103,16316,16317],{"class":113}," (c.",[103,16319,16320],{"class":1952},"getLength",[103,16322,13040],{"class":113},[103,16324,2938],{"class":109},[103,16326,16327],{"class":113}," m_L ",[103,16329,1704],{"class":109},[103,16331,16332],{"class":113}," c.",[103,16334,16335],{"class":1952},"getWidth",[103,16337,13040],{"class":113},[103,16339,2938],{"class":109},[103,16341,16342],{"class":113}," m_W ",[103,16344,1704],{"class":109},[103,16346,16332],{"class":113},[103,16348,16349],{"class":1952},"getHeight",[103,16351,13040],{"class":113},[103,16353,2938],{"class":109},[103,16355,16356],{"class":113}," m_H)\n",[103,16358,16359],{"class":105,"line":7962},[103,16360,2499],{"class":113},[103,16362,16363,16365,16368],{"class":105,"line":7967},[103,16364,15722],{"class":109},[103,16366,16367],{"class":162}," true",[103,16369,1279],{"class":113},[103,16371,16372],{"class":105,"line":7973},[103,16373,2518],{"class":113},[103,16375,16376],{"class":105,"line":8000},[103,16377,2559],{"class":109},[103,16379,16380],{"class":105,"line":8005},[103,16381,2499],{"class":113},[103,16383,16384,16386,16389],{"class":105,"line":8011},[103,16385,15722],{"class":109},[103,16387,16388],{"class":162}," false",[103,16390,1279],{"class":113},[103,16392,16393],{"class":105,"line":8023},[103,16394,2518],{"class":113},[103,16396,16397],{"class":105,"line":8035},[103,16398,2176],{"class":113},[103,16400,16401],{"class":105,"line":8047},[103,16402,16403],{"class":172},"    \u002F\u002F私有属性\n",[103,16405,16406],{"class":105,"line":9706},[103,16407,15212],{"class":109},[103,16409,16410,16412],{"class":105,"line":9731},[103,16411,1974],{"class":109},[103,16413,16232],{"class":113},[103,16415,16416,16418],{"class":105,"line":9754},[103,16417,1974],{"class":109},[103,16419,16256],{"class":113},[103,16421,16422,16424],{"class":105,"line":9778},[103,16423,1974],{"class":109},[103,16425,16280],{"class":113},[103,16427,16428],{"class":105,"line":9783},[103,16429,2389],{"emptyLinePlaceholder":30},[103,16431,16432],{"class":105,"line":9788},[103,16433,3984],{"class":113},[103,16435,16436],{"class":105,"line":9793},[103,16437,16438],{"class":172},"\u002F\u002F全局函数判断两个立方体是否相等\n",[103,16440,16441,16443,16445,16447,16449,16452,16454,16456,16459],{"class":105,"line":9802},[103,16442,1343],{"class":109},[103,16444,16297],{"class":1952},[103,16446,114],{"class":113},[103,16448,16302],{"class":1952},[103,16450,16451],{"class":5206}," c1",[103,16453,491],{"class":113},[103,16455,16302],{"class":1952},[103,16457,16458],{"class":5206}," c2",[103,16460,120],{"class":113},[103,16462,16463],{"class":105,"line":9807},[103,16464,1535],{"class":113},[103,16466,16467,16469,16472,16474,16476,16478,16481,16483,16486,16488,16490,16492,16494,16496,16498,16500,16502,16504,16506,16508,16510,16512,16514,16516],{"class":105,"line":9813},[103,16468,4079],{"class":109},[103,16470,16471],{"class":113}," (c1.",[103,16473,16320],{"class":1952},[103,16475,13040],{"class":113},[103,16477,2938],{"class":109},[103,16479,16480],{"class":113}," c2.",[103,16482,16320],{"class":1952},[103,16484,16485],{"class":113},"()) ",[103,16487,1704],{"class":109},[103,16489,16471],{"class":113},[103,16491,16335],{"class":1952},[103,16493,13040],{"class":113},[103,16495,2938],{"class":109},[103,16497,16480],{"class":113},[103,16499,16335],{"class":1952},[103,16501,16485],{"class":113},[103,16503,1704],{"class":109},[103,16505,16471],{"class":113},[103,16507,16349],{"class":1952},[103,16509,13040],{"class":113},[103,16511,2938],{"class":109},[103,16513,16480],{"class":113},[103,16515,16349],{"class":1952},[103,16517,16518],{"class":113},"());\n",[103,16520,16521],{"class":105,"line":9834},[103,16522,1554],{"class":113},[103,16524,16525,16527,16529],{"class":105,"line":9840},[103,16526,117],{"class":109},[103,16528,1962],{"class":1952},[103,16530,1965],{"class":113},[103,16532,16533],{"class":105,"line":9854},[103,16534,1535],{"class":113},[103,16536,16537],{"class":105,"line":9860},[103,16538,16539],{"class":113},"    Cube c1;\n",[103,16541,16542],{"class":105,"line":9887},[103,16543,16544],{"class":172},"    \u002F\u002F输入立方体的长宽高\n",[103,16546,16547,16549,16551,16554,16556],{"class":105,"line":9896},[103,16548,1540],{"class":113},[103,16550,1157],{"class":109},[103,16552,16553],{"class":218},"\"请输入第一个立方体的长、宽、高：\"",[103,16555,1157],{"class":109},[103,16557,1180],{"class":113},[103,16559,16560,16562],{"class":105,"line":9902},[103,16561,1974],{"class":109},[103,16563,16564],{"class":113}," l,w,h,l1,w1,h1;\n",[103,16566,16567,16569,16571,16573,16575,16577,16579],{"class":105,"line":9910},[103,16568,2001],{"class":113},[103,16570,1418],{"class":109},[103,16572,631],{"class":113},[103,16574,1418],{"class":109},[103,16576,908],{"class":113},[103,16578,1418],{"class":109},[103,16580,16117],{"class":113},[103,16582,16583,16586,16589],{"class":105,"line":9915},[103,16584,16585],{"class":113},"    c1.",[103,16587,16588],{"class":1952},"setLwh",[103,16590,16591],{"class":113},"(l,w,h);\n",[103,16593,16595],{"class":105,"line":16594},66,[103,16596,16597],{"class":172},"    \u002F\u002F面积\n",[103,16599,16601,16603,16605,16608,16610,16612,16615,16617,16619],{"class":105,"line":16600},67,[103,16602,1540],{"class":113},[103,16604,1157],{"class":109},[103,16606,16607],{"class":218},"\"立方体的表面积为：\"",[103,16609,1157],{"class":109},[103,16611,14820],{"class":113},[103,16613,16614],{"class":1952},"mianji",[103,16616,2416],{"class":113},[103,16618,1157],{"class":109},[103,16620,1180],{"class":113},[103,16622,16624],{"class":105,"line":16623},68,[103,16625,16626],{"class":172},"    \u002F\u002F体积\n",[103,16628,16630,16632,16634,16637,16639,16641,16644,16646,16648],{"class":105,"line":16629},69,[103,16631,1540],{"class":113},[103,16633,1157],{"class":109},[103,16635,16636],{"class":218},"\"立方体的体积为：\"",[103,16638,1157],{"class":109},[103,16640,14820],{"class":113},[103,16642,16643],{"class":1952},"tiji",[103,16645,2416],{"class":113},[103,16647,1157],{"class":109},[103,16649,1180],{"class":113},[103,16651,16653,16655,16657,16660,16662],{"class":105,"line":16652},70,[103,16654,1540],{"class":113},[103,16656,1157],{"class":109},[103,16658,16659],{"class":218},"\"请输入第二个立方体的长、宽、高：\"",[103,16661,1157],{"class":109},[103,16663,1180],{"class":113},[103,16665,16667,16669,16671,16674,16676,16679,16681],{"class":105,"line":16666},71,[103,16668,2001],{"class":113},[103,16670,1418],{"class":109},[103,16672,16673],{"class":113},"l1",[103,16675,1418],{"class":109},[103,16677,16678],{"class":113},"w1",[103,16680,1418],{"class":109},[103,16682,16683],{"class":113},"h1;\n",[103,16685,16687],{"class":105,"line":16686},72,[103,16688,16689],{"class":113},"    Cube c2;\n",[103,16691,16693,16696,16698],{"class":105,"line":16692},73,[103,16694,16695],{"class":113},"    c2.",[103,16697,16588],{"class":1952},[103,16699,16700],{"class":113},"(l1,w1,h1);\n",[103,16702,16704,16706,16708,16711,16713,16716,16718,16720,16722],{"class":105,"line":16703},74,[103,16705,1540],{"class":113},[103,16707,1157],{"class":109},[103,16709,16710],{"class":218},"\"第二个立方体的表面积为：\"",[103,16712,1157],{"class":109},[103,16714,16715],{"class":113},"c2.",[103,16717,16614],{"class":1952},[103,16719,2416],{"class":113},[103,16721,1157],{"class":109},[103,16723,1180],{"class":113},[103,16725,16727,16729,16731,16734,16736,16738,16740,16742,16744],{"class":105,"line":16726},75,[103,16728,1540],{"class":113},[103,16730,1157],{"class":109},[103,16732,16733],{"class":218},"\"第二个立方体的体积为：\"",[103,16735,1157],{"class":109},[103,16737,16715],{"class":113},[103,16739,16643],{"class":1952},[103,16741,2416],{"class":113},[103,16743,1157],{"class":109},[103,16745,1180],{"class":113},[103,16747,16749],{"class":105,"line":16748},76,[103,16750,2389],{"emptyLinePlaceholder":30},[103,16752,16754],{"class":105,"line":16753},77,[103,16755,16756],{"class":172},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[103,16758,16760,16762,16764,16767,16769],{"class":105,"line":16759},78,[103,16761,1540],{"class":113},[103,16763,1157],{"class":109},[103,16765,16766],{"class":218},"\"内部函数判断结果：\"",[103,16768,1157],{"class":109},[103,16770,1180],{"class":113},[103,16772,16774,16776,16778,16781],{"class":105,"line":16773},79,[103,16775,3090],{"class":109},[103,16777,16471],{"class":113},[103,16779,16780],{"class":1952},"isEqual",[103,16782,16783],{"class":113},"(c2))\n",[103,16785,16787],{"class":105,"line":16786},80,[103,16788,2019],{"class":113},[103,16790,16792,16794,16796,16799,16801],{"class":105,"line":16791},81,[103,16793,3440],{"class":113},[103,16795,1157],{"class":109},[103,16797,16798],{"class":218},"\"两个立方体相等\"",[103,16800,1157],{"class":109},[103,16802,1180],{"class":113},[103,16804,16806],{"class":105,"line":16805},82,[103,16807,2176],{"class":113},[103,16809,16811],{"class":105,"line":16810},83,[103,16812,16813],{"class":109},"    else\n",[103,16815,16817],{"class":105,"line":16816},84,[103,16818,2019],{"class":113},[103,16820,16822,16824,16826,16829,16831],{"class":105,"line":16821},85,[103,16823,3440],{"class":113},[103,16825,1157],{"class":109},[103,16827,16828],{"class":218},"\"两个立方体不相等\"",[103,16830,1157],{"class":109},[103,16832,1180],{"class":113},[103,16834,16836],{"class":105,"line":16835},86,[103,16837,2176],{"class":113},[103,16839,16841],{"class":105,"line":16840},87,[103,16842,2389],{"emptyLinePlaceholder":30},[103,16844,16846,16848,16850,16853,16855],{"class":105,"line":16845},88,[103,16847,1540],{"class":113},[103,16849,1157],{"class":109},[103,16851,16852],{"class":218},"\"全局函数判断结果：\"",[103,16854,1157],{"class":109},[103,16856,1180],{"class":113},[103,16858,16860,16862,16864,16866],{"class":105,"line":16859},89,[103,16861,3090],{"class":109},[103,16863,1647],{"class":113},[103,16865,16780],{"class":1952},[103,16867,16868],{"class":113},"(c1, c2))\n",[103,16870,16872],{"class":105,"line":16871},90,[103,16873,2019],{"class":113},[103,16875,16877,16879,16881,16883,16885],{"class":105,"line":16876},91,[103,16878,3440],{"class":113},[103,16880,1157],{"class":109},[103,16882,16798],{"class":218},[103,16884,1157],{"class":109},[103,16886,1180],{"class":113},[103,16888,16890],{"class":105,"line":16889},92,[103,16891,2176],{"class":113},[103,16893,16895],{"class":105,"line":16894},93,[103,16896,16813],{"class":109},[103,16898,16900],{"class":105,"line":16899},94,[103,16901,2019],{"class":113},[103,16903,16905,16907,16909,16911,16913],{"class":105,"line":16904},95,[103,16906,3440],{"class":113},[103,16908,1157],{"class":109},[103,16910,16828],{"class":218},[103,16912,1157],{"class":109},[103,16914,1180],{"class":113},[103,16916,16918],{"class":105,"line":16917},96,[103,16919,2176],{"class":113},[103,16921,16923],{"class":105,"line":16922},97,[103,16924,1554],{"class":113},[57,16926,16927],{"start":25},[60,16928,16929],{},[263,16930,16931],{},"练习案例2：点和圆的关系",[1120,16933,16934],{},[60,16935,16936],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[94,16938,16940],{"className":96,"code":16939,"language":98,"meta":24,"style":24},"#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",[100,16941,16942,16948,16958,16965,16972,16976,16980,16985,17019,17024,17040,17054,17058,17062,17069,17076,17080,17086,17090,17094,17098,17120,17143,17148,17162,17177,17181,17185,17191,17196,17201,17205,17231,17235,17265,17293,17321,17338,17342,17355,17359,17363,17367,17380,17384,17388,17396,17400,17404,17408,17413,17417,17428,17435,17444,17454,17465,17472,17485,17496,17506,17517,17524,17538,17543,17553,17561],{"__ignoreMap":24},[103,16943,16944,16946],{"class":105,"line":106},[103,16945,1938],{"class":109},[103,16947,1941],{"class":218},[103,16949,16950,16952,16954,16956],{"class":105,"line":25},[103,16951,1946],{"class":109},[103,16953,1949],{"class":109},[103,16955,1953],{"class":1952},[103,16957,1279],{"class":113},[103,16959,16960,16962],{"class":105,"line":1168},[103,16961,1938],{"class":109},[103,16963,16964],{"class":218},"\u003Ccmath>\n",[103,16966,16967,16969],{"class":105,"line":1183},[103,16968,14684],{"class":109},[103,16970,16971],{"class":1952}," Point\n",[103,16973,16974],{"class":105,"line":1189},[103,16975,1535],{"class":113},[103,16977,16978],{"class":105,"line":1203},[103,16979,14706],{"class":109},[103,16981,16982],{"class":105,"line":1209},[103,16983,16984],{"class":172},"    \u002F\u002F赋值\n",[103,16986,16987,16989,16992,16994,16996,16999,17001,17003,17006,17009,17011,17014,17016],{"class":105,"line":1300},[103,16988,14899],{"class":109},[103,16990,16991],{"class":1952}," setPoint",[103,16993,114],{"class":113},[103,16995,14027],{"class":109},[103,16997,16998],{"class":5206}," x",[103,17000,12425],{"class":113},[103,17002,14027],{"class":109},[103,17004,17005],{"class":5206}," y",[103,17007,17008],{"class":113},") { m_x ",[103,17010,159],{"class":109},[103,17012,17013],{"class":113}," x; m_y ",[103,17015,159],{"class":109},[103,17017,17018],{"class":113}," y; }\n",[103,17020,17021],{"class":105,"line":1306},[103,17022,17023],{"class":172},"    \u002F\u002F获取坐标\n",[103,17025,17026,17028,17031,17034,17037],{"class":105,"line":1318},[103,17027,14728],{"class":109},[103,17029,17030],{"class":1952}," getX",[103,17032,17033],{"class":113},"() { ",[103,17035,17036],{"class":109},"return",[103,17038,17039],{"class":113}," m_x; }\n",[103,17041,17042,17044,17047,17049,17051],{"class":105,"line":1601},[103,17043,14728],{"class":109},[103,17045,17046],{"class":1952}," getY",[103,17048,17033],{"class":113},[103,17050,17036],{"class":109},[103,17052,17053],{"class":113}," m_y; }\n",[103,17055,17056],{"class":105,"line":1606},[103,17057,2389],{"emptyLinePlaceholder":30},[103,17059,17060],{"class":105,"line":1612},[103,17061,15212],{"class":109},[103,17063,17064,17066],{"class":105,"line":1617},[103,17065,14728],{"class":109},[103,17067,17068],{"class":113}," m_x;\n",[103,17070,17071,17073],{"class":105,"line":1631},[103,17072,14728],{"class":109},[103,17074,17075],{"class":113}," m_y;\n",[103,17077,17078],{"class":105,"line":1636},[103,17079,3984],{"class":113},[103,17081,17082,17084],{"class":105,"line":1642},[103,17083,14684],{"class":109},[103,17085,14687],{"class":1952},[103,17087,17088],{"class":105,"line":1663},[103,17089,1535],{"class":113},[103,17091,17092],{"class":105,"line":1668},[103,17093,14706],{"class":109},[103,17095,17096],{"class":105,"line":1682},[103,17097,16984],{"class":172},[103,17099,17100,17102,17105,17107,17109,17112,17115,17117],{"class":105,"line":1687},[103,17101,14899],{"class":109},[103,17103,17104],{"class":1952}," setRadius",[103,17106,114],{"class":113},[103,17108,14027],{"class":109},[103,17110,17111],{"class":5206}," r",[103,17113,17114],{"class":113},") { m_r ",[103,17116,159],{"class":109},[103,17118,17119],{"class":113}," r; }\n",[103,17121,17122,17124,17127,17129,17132,17135,17138,17140],{"class":105,"line":1716},[103,17123,14899],{"class":109},[103,17125,17126],{"class":1952}," setCenter",[103,17128,114],{"class":113},[103,17130,17131],{"class":1952},"Point",[103,17133,17134],{"class":5206}," center",[103,17136,17137],{"class":113},") { m_center ",[103,17139,159],{"class":109},[103,17141,17142],{"class":113}," center; }\n",[103,17144,17145],{"class":105,"line":1721},[103,17146,17147],{"class":172},"    \u002F\u002F获取属性\n",[103,17149,17150,17152,17155,17157,17159],{"class":105,"line":1738},[103,17151,14728],{"class":109},[103,17153,17154],{"class":1952}," getRadius",[103,17156,17033],{"class":113},[103,17158,17036],{"class":109},[103,17160,17161],{"class":113}," m_r; }\n",[103,17163,17164,17167,17170,17172,17174],{"class":105,"line":1743},[103,17165,17166],{"class":1952},"    Point",[103,17168,17169],{"class":1952}," getCenter",[103,17171,17033],{"class":113},[103,17173,17036],{"class":109},[103,17175,17176],{"class":113}," m_center; }\n",[103,17178,17179],{"class":105,"line":1748},[103,17180,2389],{"emptyLinePlaceholder":30},[103,17182,17183],{"class":105,"line":1753},[103,17184,15212],{"class":109},[103,17186,17187,17189],{"class":105,"line":1767},[103,17188,14728],{"class":109},[103,17190,14718],{"class":113},[103,17192,17193],{"class":105,"line":1772},[103,17194,17195],{"class":172},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[103,17197,17198],{"class":105,"line":2566},[103,17199,17200],{"class":113},"    Point m_center;\n",[103,17202,17203],{"class":105,"line":2580},[103,17204,3984],{"class":113},[103,17206,17207,17209,17212,17214,17217,17219,17221,17223,17225,17227,17229],{"class":105,"line":2588},[103,17208,5354],{"class":109},[103,17210,17211],{"class":1952}," isInCircle",[103,17213,114],{"class":113},[103,17215,17216],{"class":1952},"Circle",[103,17218,10574],{"class":109},[103,17220,401],{"class":5206},[103,17222,491],{"class":113},[103,17224,17131],{"class":1952},[103,17226,10574],{"class":109},[103,17228,14],{"class":5206},[103,17230,120],{"class":113},[103,17232,17233],{"class":105,"line":2593},[103,17234,1535],{"class":113},[103,17236,17237,17239,17242,17244,17246,17249,17252,17255,17257,17259,17261,17263],{"class":105,"line":2599},[103,17238,14728],{"class":109},[103,17240,17241],{"class":113}," dx ",[103,17243,159],{"class":109},[103,17245,16332],{"class":113},[103,17247,17248],{"class":1952},"getCenter",[103,17250,17251],{"class":113},"().",[103,17253,17254],{"class":1952},"getX",[103,17256,13040],{"class":113},[103,17258,645],{"class":109},[103,17260,15878],{"class":113},[103,17262,17254],{"class":1952},[103,17264,5626],{"class":113},[103,17266,17267,17269,17272,17274,17276,17278,17280,17283,17285,17287,17289,17291],{"class":105,"line":2605},[103,17268,14728],{"class":109},[103,17270,17271],{"class":113}," dy ",[103,17273,159],{"class":109},[103,17275,16332],{"class":113},[103,17277,17248],{"class":1952},[103,17279,17251],{"class":113},[103,17281,17282],{"class":1952},"getY",[103,17284,13040],{"class":113},[103,17286,645],{"class":109},[103,17288,15878],{"class":113},[103,17290,17282],{"class":1952},[103,17292,5626],{"class":113},[103,17294,17295,17297,17300,17302,17305,17308,17310,17312,17314,17316,17318],{"class":105,"line":2610},[103,17296,14728],{"class":109},[103,17298,17299],{"class":113}," distance ",[103,17301,159],{"class":109},[103,17303,17304],{"class":1952}," sqrt",[103,17306,17307],{"class":113},"(dx ",[103,17309,568],{"class":109},[103,17311,17241],{"class":113},[103,17313,594],{"class":109},[103,17315,17271],{"class":113},[103,17317,568],{"class":109},[103,17319,17320],{"class":113}," dy);\n",[103,17322,17323,17325,17328,17330,17332,17335],{"class":105,"line":7938},[103,17324,3090],{"class":109},[103,17326,17327],{"class":113}," (distance ",[103,17329,1023],{"class":109},[103,17331,16332],{"class":113},[103,17333,17334],{"class":1952},"getRadius",[103,17336,17337],{"class":113},"())\n",[103,17339,17340],{"class":105,"line":7962},[103,17341,2019],{"class":113},[103,17343,17344,17346,17348,17351,17353],{"class":105,"line":7967},[103,17345,9659],{"class":113},[103,17347,1157],{"class":109},[103,17349,17350],{"class":218}," \"点在圆内\"",[103,17352,1433],{"class":109},[103,17354,8830],{"class":113},[103,17356,17357],{"class":105,"line":7973},[103,17358,2176],{"class":113},[103,17360,17361],{"class":105,"line":8000},[103,17362,16813],{"class":109},[103,17364,17365],{"class":105,"line":8005},[103,17366,2019],{"class":113},[103,17368,17369,17371,17373,17376,17378],{"class":105,"line":8011},[103,17370,9659],{"class":113},[103,17372,1157],{"class":109},[103,17374,17375],{"class":218}," \"点在圆外\"",[103,17377,1433],{"class":109},[103,17379,8830],{"class":113},[103,17381,17382],{"class":105,"line":8023},[103,17383,2176],{"class":113},[103,17385,17386],{"class":105,"line":8035},[103,17387,1554],{"class":113},[103,17389,17390,17392,17394],{"class":105,"line":8047},[103,17391,117],{"class":109},[103,17393,1962],{"class":1952},[103,17395,1965],{"class":113},[103,17397,17398],{"class":105,"line":9706},[103,17399,1535],{"class":113},[103,17401,17402],{"class":105,"line":9731},[103,17403,15043],{"class":172},[103,17405,17406],{"class":105,"line":9754},[103,17407,14790],{"class":113},[103,17409,17410],{"class":105,"line":9778},[103,17411,17412],{"class":113},"    Point p1;\n",[103,17414,17415],{"class":105,"line":9783},[103,17416,16984],{"class":172},[103,17418,17419,17421,17423,17426],{"class":105,"line":9788},[103,17420,1540],{"class":113},[103,17422,1157],{"class":109},[103,17424,17425],{"class":218},"\"请输入圆的半径：\"",[103,17427,1279],{"class":113},[103,17429,17430,17432],{"class":105,"line":9793},[103,17431,14728],{"class":109},[103,17433,17434],{"class":113}," r;\n",[103,17436,17437,17439,17441],{"class":105,"line":9802},[103,17438,2001],{"class":113},[103,17440,1418],{"class":109},[103,17442,17443],{"class":113},"r;\n",[103,17445,17446,17448,17451],{"class":105,"line":9807},[103,17447,16585],{"class":113},[103,17449,17450],{"class":1952},"setRadius",[103,17452,17453],{"class":113},"(r);\n",[103,17455,17456,17458,17460,17463],{"class":105,"line":9813},[103,17457,1540],{"class":113},[103,17459,1157],{"class":109},[103,17461,17462],{"class":218},"\"请输入圆心坐标：\"",[103,17464,1279],{"class":113},[103,17466,17467,17469],{"class":105,"line":9834},[103,17468,14728],{"class":109},[103,17470,17471],{"class":113}," x, y;\n",[103,17473,17474,17476,17478,17480,17482],{"class":105,"line":9840},[103,17475,2001],{"class":113},[103,17477,1418],{"class":109},[103,17479,933],{"class":113},[103,17481,1418],{"class":109},[103,17483,17484],{"class":113},"y;\n",[103,17486,17487,17490,17493],{"class":105,"line":9854},[103,17488,17489],{"class":113},"    p1.",[103,17491,17492],{"class":1952},"setPoint",[103,17494,17495],{"class":113},"(x, y);\n",[103,17497,17498,17500,17503],{"class":105,"line":9860},[103,17499,16585],{"class":113},[103,17501,17502],{"class":1952},"setCenter",[103,17504,17505],{"class":113},"(p1);\n",[103,17507,17508,17510,17512,17515],{"class":105,"line":9887},[103,17509,1540],{"class":113},[103,17511,1157],{"class":109},[103,17513,17514],{"class":218},"\"请输入测试点坐标：\"",[103,17516,1279],{"class":113},[103,17518,17519,17521],{"class":105,"line":9896},[103,17520,14728],{"class":109},[103,17522,17523],{"class":113}," x1, y1;\n",[103,17525,17526,17528,17530,17533,17535],{"class":105,"line":9902},[103,17527,2001],{"class":113},[103,17529,1418],{"class":109},[103,17531,17532],{"class":113},"x1",[103,17534,1418],{"class":109},[103,17536,17537],{"class":113},"y1;\n",[103,17539,17540],{"class":105,"line":9910},[103,17541,17542],{"class":113},"    Point p2;\n",[103,17544,17545,17548,17550],{"class":105,"line":9915},[103,17546,17547],{"class":113},"    p2.",[103,17549,17492],{"class":1952},[103,17551,17552],{"class":113},"(x1, y1);\n",[103,17554,17555,17558],{"class":105,"line":16594},[103,17556,17557],{"class":1952},"    isInCircle",[103,17559,17560],{"class":113},"(c1, p2);\n",[103,17562,17563],{"class":105,"line":16600},[103,17564,1554],{"class":113},[14,17566,17567],{},"在类中可以让另一个类作为本来的成员",[14,17569,17570],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17572,17573],{},"创建point.h",[94,17575,17577],{"className":96,"code":17576,"language":98,"meta":24,"style":24},"#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",[100,17578,17579,17590,17596,17606,17612,17616,17621,17625,17629,17649,17653,17661,17669,17673,17677,17683,17689],{"__ignoreMap":24},[103,17580,17581,17584,17587],{"class":105,"line":106},[103,17582,17583],{"class":109},"#pragma",[103,17585,17586],{"class":1952}," once",[103,17588,17589],{"class":172}," \u002F\u002F防止头文件重复包含\n",[103,17591,17592,17594],{"class":105,"line":25},[103,17593,1938],{"class":109},[103,17595,1941],{"class":218},[103,17597,17598,17600,17602,17604],{"class":105,"line":1168},[103,17599,1946],{"class":109},[103,17601,1949],{"class":109},[103,17603,1953],{"class":1952},[103,17605,1279],{"class":113},[103,17607,17608,17610],{"class":105,"line":1183},[103,17609,14684],{"class":109},[103,17611,16971],{"class":1952},[103,17613,17614],{"class":105,"line":1189},[103,17615,1535],{"class":113},[103,17617,17618],{"class":105,"line":1203},[103,17619,17620],{"class":172},"\u002F\u002F做好声明与变量定义就可以\n",[103,17622,17623],{"class":105,"line":1209},[103,17624,14706],{"class":109},[103,17626,17627],{"class":105,"line":1300},[103,17628,16984],{"class":172},[103,17630,17631,17633,17635,17637,17639,17641,17643,17645,17647],{"class":105,"line":1306},[103,17632,14899],{"class":109},[103,17634,16991],{"class":1952},[103,17636,114],{"class":113},[103,17638,14027],{"class":109},[103,17640,16998],{"class":5206},[103,17642,12425],{"class":113},[103,17644,14027],{"class":109},[103,17646,17005],{"class":5206},[103,17648,2708],{"class":113},[103,17650,17651],{"class":105,"line":1318},[103,17652,17023],{"class":172},[103,17654,17655,17657,17659],{"class":105,"line":1601},[103,17656,14728],{"class":109},[103,17658,17030],{"class":1952},[103,17660,5626],{"class":113},[103,17662,17663,17665,17667],{"class":105,"line":1606},[103,17664,14728],{"class":109},[103,17666,17046],{"class":1952},[103,17668,5626],{"class":113},[103,17670,17671],{"class":105,"line":1612},[103,17672,2389],{"emptyLinePlaceholder":30},[103,17674,17675],{"class":105,"line":1617},[103,17676,15212],{"class":109},[103,17678,17679,17681],{"class":105,"line":1631},[103,17680,14728],{"class":109},[103,17682,17068],{"class":113},[103,17684,17685,17687],{"class":105,"line":1636},[103,17686,14728],{"class":109},[103,17688,17075],{"class":113},[103,17690,17691],{"class":105,"line":1642},[103,17692,3984],{"class":113},[14,17694,17695],{},"创建point.cpp",[94,17697,17699],{"className":96,"code":17698,"language":98,"meta":24,"style":24},"#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",[100,17700,17701,17708,17713,17747,17751,17767],{"__ignoreMap":24},[103,17702,17703,17705],{"class":105,"line":106},[103,17704,1938],{"class":109},[103,17706,17707],{"class":218},"\u003Cpoint.h>\n",[103,17709,17710],{"class":105,"line":25},[103,17711,17712],{"class":172},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[103,17714,17715,17717,17720,17723,17725,17727,17729,17731,17733,17735,17737,17739,17741,17743,17745],{"class":105,"line":1168},[103,17716,14899],{"class":109},[103,17718,17719],{"class":1952}," Point",[103,17721,17722],{"class":113},"::",[103,17724,17492],{"class":1952},[103,17726,114],{"class":113},[103,17728,14027],{"class":109},[103,17730,16998],{"class":5206},[103,17732,12425],{"class":113},[103,17734,14027],{"class":109},[103,17736,17005],{"class":5206},[103,17738,17008],{"class":113},[103,17740,159],{"class":109},[103,17742,17013],{"class":113},[103,17744,159],{"class":109},[103,17746,17018],{"class":113},[103,17748,17749],{"class":105,"line":1183},[103,17750,17023],{"class":172},[103,17752,17753,17755,17757,17759,17761,17763,17765],{"class":105,"line":1189},[103,17754,14728],{"class":109},[103,17756,17719],{"class":1952},[103,17758,17722],{"class":113},[103,17760,17254],{"class":1952},[103,17762,17033],{"class":113},[103,17764,17036],{"class":109},[103,17766,17039],{"class":113},[103,17768,17769,17771,17773,17775,17777,17779,17781],{"class":105,"line":1203},[103,17770,14728],{"class":109},[103,17772,17719],{"class":1952},[103,17774,17722],{"class":113},[103,17776,17282],{"class":1952},[103,17778,17033],{"class":113},[103,17780,17036],{"class":109},[103,17782,17053],{"class":113},[14,17784,17785],{},"创建circle.h",[94,17787,17789],{"className":96,"code":17788,"language":98,"meta":24,"style":24},"#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",[100,17790,17791,17798,17804,17814,17820,17826,17830,17834,17838,17852,17866,17870,17878,17886,17890,17894,17900,17904,17908],{"__ignoreMap":24},[103,17792,17793,17795],{"class":105,"line":106},[103,17794,17583],{"class":109},[103,17796,17797],{"class":1952}," once\n",[103,17799,17800,17802],{"class":105,"line":25},[103,17801,1938],{"class":109},[103,17803,1941],{"class":218},[103,17805,17806,17808,17810,17812],{"class":105,"line":1168},[103,17807,1946],{"class":109},[103,17809,1949],{"class":109},[103,17811,1953],{"class":1952},[103,17813,1279],{"class":113},[103,17815,17816,17818],{"class":105,"line":1183},[103,17817,1938],{"class":109},[103,17819,17707],{"class":218},[103,17821,17822,17824],{"class":105,"line":1189},[103,17823,14684],{"class":109},[103,17825,14687],{"class":1952},[103,17827,17828],{"class":105,"line":1203},[103,17829,1535],{"class":113},[103,17831,17832],{"class":105,"line":1209},[103,17833,14706],{"class":109},[103,17835,17836],{"class":105,"line":1300},[103,17837,16984],{"class":172},[103,17839,17840,17842,17844,17846,17848,17850],{"class":105,"line":1306},[103,17841,14899],{"class":109},[103,17843,17104],{"class":1952},[103,17845,114],{"class":113},[103,17847,14027],{"class":109},[103,17849,17111],{"class":5206},[103,17851,2708],{"class":113},[103,17853,17854,17856,17858,17860,17862,17864],{"class":105,"line":1318},[103,17855,14899],{"class":109},[103,17857,17126],{"class":1952},[103,17859,114],{"class":113},[103,17861,17131],{"class":1952},[103,17863,17134],{"class":5206},[103,17865,2708],{"class":113},[103,17867,17868],{"class":105,"line":1601},[103,17869,17147],{"class":172},[103,17871,17872,17874,17876],{"class":105,"line":1606},[103,17873,14728],{"class":109},[103,17875,17154],{"class":1952},[103,17877,5626],{"class":113},[103,17879,17880,17882,17884],{"class":105,"line":1612},[103,17881,17166],{"class":1952},[103,17883,17169],{"class":1952},[103,17885,5626],{"class":113},[103,17887,17888],{"class":105,"line":1617},[103,17889,2389],{"emptyLinePlaceholder":30},[103,17891,17892],{"class":105,"line":1631},[103,17893,15212],{"class":109},[103,17895,17896,17898],{"class":105,"line":1636},[103,17897,14728],{"class":109},[103,17899,14718],{"class":113},[103,17901,17902],{"class":105,"line":1642},[103,17903,17195],{"class":172},[103,17905,17906],{"class":105,"line":1663},[103,17907,17200],{"class":113},[103,17909,17910],{"class":105,"line":1668},[103,17911,3984],{"class":113},[14,17913,17914],{},"创建circle.cpp",[94,17916,17918],{"className":96,"code":17917,"language":98,"meta":24,"style":24},"#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",[100,17919,17920,17927,17950,17972,17977,17993],{"__ignoreMap":24},[103,17921,17922,17924],{"class":105,"line":106},[103,17923,1938],{"class":109},[103,17925,17926],{"class":218},"\u003Ccircle.h>\n",[103,17928,17929,17931,17934,17936,17938,17940,17942,17944,17946,17948],{"class":105,"line":25},[103,17930,5354],{"class":109},[103,17932,17933],{"class":1952}," Circle",[103,17935,17722],{"class":113},[103,17937,17450],{"class":1952},[103,17939,114],{"class":113},[103,17941,14027],{"class":109},[103,17943,17111],{"class":5206},[103,17945,17114],{"class":113},[103,17947,159],{"class":109},[103,17949,17119],{"class":113},[103,17951,17952,17954,17956,17958,17960,17962,17964,17966,17968,17970],{"class":105,"line":1168},[103,17953,5354],{"class":109},[103,17955,17933],{"class":1952},[103,17957,17722],{"class":113},[103,17959,17502],{"class":1952},[103,17961,114],{"class":113},[103,17963,17131],{"class":1952},[103,17965,17134],{"class":5206},[103,17967,17137],{"class":113},[103,17969,159],{"class":109},[103,17971,17142],{"class":113},[103,17973,17974],{"class":105,"line":1183},[103,17975,17976],{"class":172},"\u002F\u002F获取属性\n",[103,17978,17979,17981,17983,17985,17987,17989,17991],{"class":105,"line":1189},[103,17980,14027],{"class":109},[103,17982,17933],{"class":1952},[103,17984,17722],{"class":113},[103,17986,17334],{"class":1952},[103,17988,17033],{"class":113},[103,17990,17036],{"class":109},[103,17992,17161],{"class":113},[103,17994,17995,17997,17999,18001,18003,18005,18007],{"class":105,"line":1203},[103,17996,17131],{"class":1952},[103,17998,17933],{"class":1952},[103,18000,17722],{"class":113},[103,18002,17248],{"class":1952},[103,18004,17033],{"class":113},[103,18006,17036],{"class":109},[103,18008,17176],{"class":113},[14,18010,18011],{},"使用封装的类",[94,18013,18015],{"className":96,"code":18014,"language":98,"meta":24,"style":24},"#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",[100,18016,18017,18023,18033,18039,18045,18069,18073,18099,18125,18149,18163,18167,18179,18183,18187,18191,18203,18207,18211,18219,18223,18227,18231,18235,18239,18249,18255,18263,18271,18281,18287,18299,18307,18315,18325,18331,18343,18347,18355,18361],{"__ignoreMap":24},[103,18018,18019,18021],{"class":105,"line":106},[103,18020,1938],{"class":109},[103,18022,1941],{"class":218},[103,18024,18025,18027,18029,18031],{"class":105,"line":25},[103,18026,1946],{"class":109},[103,18028,1949],{"class":109},[103,18030,1953],{"class":1952},[103,18032,1279],{"class":113},[103,18034,18035,18037],{"class":105,"line":1168},[103,18036,1938],{"class":109},[103,18038,17926],{"class":218},[103,18040,18041,18043],{"class":105,"line":1183},[103,18042,1938],{"class":109},[103,18044,17707],{"class":218},[103,18046,18047,18049,18051,18053,18055,18057,18059,18061,18063,18065,18067],{"class":105,"line":1189},[103,18048,5354],{"class":109},[103,18050,17211],{"class":1952},[103,18052,114],{"class":113},[103,18054,17216],{"class":1952},[103,18056,10574],{"class":109},[103,18058,401],{"class":5206},[103,18060,491],{"class":113},[103,18062,17131],{"class":1952},[103,18064,10574],{"class":109},[103,18066,14],{"class":5206},[103,18068,120],{"class":113},[103,18070,18071],{"class":105,"line":1203},[103,18072,1535],{"class":113},[103,18074,18075,18077,18079,18081,18083,18085,18087,18089,18091,18093,18095,18097],{"class":105,"line":1209},[103,18076,14728],{"class":109},[103,18078,17241],{"class":113},[103,18080,159],{"class":109},[103,18082,16332],{"class":113},[103,18084,17248],{"class":1952},[103,18086,17251],{"class":113},[103,18088,17254],{"class":1952},[103,18090,13040],{"class":113},[103,18092,645],{"class":109},[103,18094,15878],{"class":113},[103,18096,17254],{"class":1952},[103,18098,5626],{"class":113},[103,18100,18101,18103,18105,18107,18109,18111,18113,18115,18117,18119,18121,18123],{"class":105,"line":1300},[103,18102,14728],{"class":109},[103,18104,17271],{"class":113},[103,18106,159],{"class":109},[103,18108,16332],{"class":113},[103,18110,17248],{"class":1952},[103,18112,17251],{"class":113},[103,18114,17282],{"class":1952},[103,18116,13040],{"class":113},[103,18118,645],{"class":109},[103,18120,15878],{"class":113},[103,18122,17282],{"class":1952},[103,18124,5626],{"class":113},[103,18126,18127,18129,18131,18133,18135,18137,18139,18141,18143,18145,18147],{"class":105,"line":1306},[103,18128,14728],{"class":109},[103,18130,17299],{"class":113},[103,18132,159],{"class":109},[103,18134,17304],{"class":1952},[103,18136,17307],{"class":113},[103,18138,568],{"class":109},[103,18140,17241],{"class":113},[103,18142,594],{"class":109},[103,18144,17271],{"class":113},[103,18146,568],{"class":109},[103,18148,17320],{"class":113},[103,18150,18151,18153,18155,18157,18159,18161],{"class":105,"line":1318},[103,18152,3090],{"class":109},[103,18154,17327],{"class":113},[103,18156,1023],{"class":109},[103,18158,16332],{"class":113},[103,18160,17334],{"class":1952},[103,18162,17337],{"class":113},[103,18164,18165],{"class":105,"line":1601},[103,18166,2019],{"class":113},[103,18168,18169,18171,18173,18175,18177],{"class":105,"line":1606},[103,18170,9659],{"class":113},[103,18172,1157],{"class":109},[103,18174,17350],{"class":218},[103,18176,1433],{"class":109},[103,18178,8830],{"class":113},[103,18180,18181],{"class":105,"line":1612},[103,18182,2176],{"class":113},[103,18184,18185],{"class":105,"line":1617},[103,18186,16813],{"class":109},[103,18188,18189],{"class":105,"line":1631},[103,18190,2019],{"class":113},[103,18192,18193,18195,18197,18199,18201],{"class":105,"line":1636},[103,18194,9659],{"class":113},[103,18196,1157],{"class":109},[103,18198,17375],{"class":218},[103,18200,1433],{"class":109},[103,18202,8830],{"class":113},[103,18204,18205],{"class":105,"line":1642},[103,18206,2176],{"class":113},[103,18208,18209],{"class":105,"line":1663},[103,18210,1554],{"class":113},[103,18212,18213,18215,18217],{"class":105,"line":1668},[103,18214,117],{"class":109},[103,18216,1962],{"class":1952},[103,18218,1965],{"class":113},[103,18220,18221],{"class":105,"line":1682},[103,18222,1535],{"class":113},[103,18224,18225],{"class":105,"line":1687},[103,18226,15043],{"class":172},[103,18228,18229],{"class":105,"line":1716},[103,18230,14790],{"class":113},[103,18232,18233],{"class":105,"line":1721},[103,18234,17412],{"class":113},[103,18236,18237],{"class":105,"line":1738},[103,18238,16984],{"class":172},[103,18240,18241,18243,18245,18247],{"class":105,"line":1743},[103,18242,1540],{"class":113},[103,18244,1157],{"class":109},[103,18246,17425],{"class":218},[103,18248,1279],{"class":113},[103,18250,18251,18253],{"class":105,"line":1748},[103,18252,14728],{"class":109},[103,18254,17434],{"class":113},[103,18256,18257,18259,18261],{"class":105,"line":1753},[103,18258,2001],{"class":113},[103,18260,1418],{"class":109},[103,18262,17443],{"class":113},[103,18264,18265,18267,18269],{"class":105,"line":1767},[103,18266,16585],{"class":113},[103,18268,17450],{"class":1952},[103,18270,17453],{"class":113},[103,18272,18273,18275,18277,18279],{"class":105,"line":1772},[103,18274,1540],{"class":113},[103,18276,1157],{"class":109},[103,18278,17462],{"class":218},[103,18280,1279],{"class":113},[103,18282,18283,18285],{"class":105,"line":2566},[103,18284,14728],{"class":109},[103,18286,17471],{"class":113},[103,18288,18289,18291,18293,18295,18297],{"class":105,"line":2580},[103,18290,2001],{"class":113},[103,18292,1418],{"class":109},[103,18294,933],{"class":113},[103,18296,1418],{"class":109},[103,18298,17484],{"class":113},[103,18300,18301,18303,18305],{"class":105,"line":2588},[103,18302,17489],{"class":113},[103,18304,17492],{"class":1952},[103,18306,17495],{"class":113},[103,18308,18309,18311,18313],{"class":105,"line":2593},[103,18310,16585],{"class":113},[103,18312,17502],{"class":1952},[103,18314,17505],{"class":113},[103,18316,18317,18319,18321,18323],{"class":105,"line":2599},[103,18318,1540],{"class":113},[103,18320,1157],{"class":109},[103,18322,17514],{"class":218},[103,18324,1279],{"class":113},[103,18326,18327,18329],{"class":105,"line":2605},[103,18328,14728],{"class":109},[103,18330,17523],{"class":113},[103,18332,18333,18335,18337,18339,18341],{"class":105,"line":2610},[103,18334,2001],{"class":113},[103,18336,1418],{"class":109},[103,18338,17532],{"class":113},[103,18340,1418],{"class":109},[103,18342,17537],{"class":113},[103,18344,18345],{"class":105,"line":7938},[103,18346,17542],{"class":113},[103,18348,18349,18351,18353],{"class":105,"line":7962},[103,18350,17547],{"class":113},[103,18352,17492],{"class":1952},[103,18354,17552],{"class":113},[103,18356,18357,18359],{"class":105,"line":7967},[103,18358,17557],{"class":1952},[103,18360,17560],{"class":113},[103,18362,18363],{"class":105,"line":7973},[103,18364,1554],{"class":113},[45,18366,18368],{"id":18367},"_82对象的初始化清理","8.2对象的初始化清理",[1120,18370,18371,18374],{},[60,18372,18373],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[60,18375,18376],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[74,18378,18380],{"id":18379},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18382,18383,18384,18387],{},"对象的",[263,18385,18386],{},"初始化和清理","也是两个非常重要的安全问题",[14,18389,18390],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18392,18393],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18395,18396,18397,18400,18401,18404],{},"c++利用了",[263,18398,18399],{},"构造函数","和",[263,18402,18403],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18406,18407,18408],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[263,18409,18410],{},"我们不提供构造和析构，编译器会提供",[14,18412,18413],{},[263,18414,18415],{},"编译器提供的构造函数和析构函数是空实现。",[1120,18417,18418,18421],{},[60,18419,18420],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[60,18422,18423,18424,18427],{},"析构函数：主要作用在于对象",[263,18425,18426],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18429,18430,18433],{},[263,18431,18432],{},"构造函数语法：",[100,18434,18435],{},"类名(){}",[57,18437,18438,18441,18444,18447,18450],{},[60,18439,18440],{},"构造函数，没有返回值也不写void",[60,18442,18443],{},"函数名称与类名相同",[60,18445,18446],{},"构造函数可以有参数，因此可以发生重载",[60,18448,18449],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[60,18451,18452,18453,542],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[100,18454,18455],{},"Person(){}",[14,18457,18458,13785,18461],{},[263,18459,18460],{},"析构函数语法：",[100,18462,18463],{},"~类名(){}",[57,18465,18466,18469,18472,18478],{},[60,18467,18468],{},"析构函数，没有返回值也不写void",[60,18470,18471],{},"函数名称与类名相同,在名称前加上符号  ~",[60,18473,18474,18475],{},"析构函数不可以有参数，因此",[263,18476,18477],{},"不可以发生重载",[60,18479,18480],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[94,18482,18484],{"className":96,"code":18483,"language":98,"meta":24,"style":24},"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",[100,18485,18486,18492,18496,18500,18505,18512,18516,18529,18533,18538,18545,18549,18562,18566,18570,18574,18578,18586,18590,18598,18602,18606,18614,18618,18623,18627,18634,18638,18651,18655,18663],{"__ignoreMap":24},[103,18487,18488,18490],{"class":105,"line":106},[103,18489,14684],{"class":109},[103,18491,15161],{"class":1952},[103,18493,18494],{"class":105,"line":25},[103,18495,1535],{"class":113},[103,18497,18498],{"class":105,"line":1168},[103,18499,14706],{"class":109},[103,18501,18502],{"class":105,"line":1183},[103,18503,18504],{"class":172},"    \u002F\u002F构造函数\n",[103,18506,18507,18510],{"class":105,"line":1189},[103,18508,18509],{"class":1952},"    Person",[103,18511,1965],{"class":113},[103,18513,18514],{"class":105,"line":1203},[103,18515,2019],{"class":113},[103,18517,18518,18520,18522,18525,18527],{"class":105,"line":1209},[103,18519,9659],{"class":113},[103,18521,1157],{"class":109},[103,18523,18524],{"class":218}," \"Person的构造函数调用\"",[103,18526,1433],{"class":109},[103,18528,8830],{"class":113},[103,18530,18531],{"class":105,"line":1300},[103,18532,2176],{"class":113},[103,18534,18535],{"class":105,"line":1306},[103,18536,18537],{"class":172},"    \u002F\u002F析构函数\n",[103,18539,18540,18543],{"class":105,"line":1318},[103,18541,18542],{"class":1952},"    ~Person",[103,18544,1965],{"class":113},[103,18546,18547],{"class":105,"line":1601},[103,18548,2019],{"class":113},[103,18550,18551,18553,18555,18558,18560],{"class":105,"line":1606},[103,18552,9659],{"class":113},[103,18554,1157],{"class":109},[103,18556,18557],{"class":218}," \"Person的析构函数调用\"",[103,18559,1433],{"class":109},[103,18561,8830],{"class":113},[103,18563,18564],{"class":105,"line":1612},[103,18565,2176],{"class":113},[103,18567,18568],{"class":105,"line":1617},[103,18569,2389],{"emptyLinePlaceholder":30},[103,18571,18572],{"class":105,"line":1631},[103,18573,3984],{"class":113},[103,18575,18576],{"class":105,"line":1636},[103,18577,2389],{"emptyLinePlaceholder":30},[103,18579,18580,18582,18584],{"class":105,"line":1642},[103,18581,5354],{"class":109},[103,18583,5578],{"class":1952},[103,18585,1965],{"class":113},[103,18587,18588],{"class":105,"line":1663},[103,18589,1535],{"class":113},[103,18591,18592,18595],{"class":105,"line":1668},[103,18593,18594],{"class":113},"    Person p;",[103,18596,18597],{"class":172},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[103,18599,18600],{"class":105,"line":1682},[103,18601,1554],{"class":113},[103,18603,18604],{"class":105,"line":1687},[103,18605,2389],{"emptyLinePlaceholder":30},[103,18607,18608,18610,18612],{"class":105,"line":1716},[103,18609,117],{"class":109},[103,18611,1962],{"class":1952},[103,18613,10843],{"class":113},[103,18615,18616],{"class":105,"line":1721},[103,18617,13200],{"class":113},[103,18619,18620],{"class":105,"line":1738},[103,18621,18622],{"class":172},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[103,18624,18625],{"class":105,"line":1743},[103,18626,2389],{"emptyLinePlaceholder":30},[103,18628,18629,18631],{"class":105,"line":1748},[103,18630,18594],{"class":113},[103,18632,18633],{"class":172},"\u002F\u002F只有构造函数\n",[103,18635,18636],{"class":105,"line":1753},[103,18637,2389],{"emptyLinePlaceholder":30},[103,18639,18640,18642,18644,18646,18648],{"class":105,"line":1767},[103,18641,2292],{"class":1952},[103,18643,114],{"class":113},[103,18645,2297],{"class":218},[103,18647,5956],{"class":113},[103,18649,18650],{"class":172},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[103,18652,18653],{"class":105,"line":1772},[103,18654,2389],{"emptyLinePlaceholder":30},[103,18656,18657,18659,18661],{"class":105,"line":2566},[103,18658,4079],{"class":109},[103,18660,4082],{"class":162},[103,18662,1279],{"class":113},[103,18664,18665],{"class":105,"line":2580},[103,18666,1554],{"class":113},[14,18668,18669],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[74,18671,18673],{"id":18672},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18675,18676],{},"两种分类方式：",[14,18678,18679],{},"​\t按参数分为： 有参构造和无参构造",[14,18681,18682],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18684,18685],{},"三种调用方式：",[14,18687,18688],{},"​\t括号法",[14,18690,18691],{},"​\t显示法",[14,18693,18694],{},"​\t隐式转换法",[94,18696,18698],{"className":96,"code":18697,"language":98,"meta":24,"style":24},"#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",[100,18699,18700,18706,18716,18721,18726,18731,18736,18740,18748,18752,18756,18760,18766,18770,18783,18787,18799,18803,18812,18825,18829,18833,18839,18843,18856,18860,18865,18881,18885,18890,18899,18912,18916,18922,18926,18931,18939,18943,18948,18952,18960,18964,18969,18974,18979,18984,18989,18993,18998,19003,19008,19013,19017,19022,19027,19043,19055,19060,19064,19069,19074,19079,19083,19088,19102,19115,19119,19127,19131,19137,19143,19151],{"__ignoreMap":24},[103,18701,18702,18704],{"class":105,"line":106},[103,18703,1938],{"class":109},[103,18705,1941],{"class":218},[103,18707,18708,18710,18712,18714],{"class":105,"line":25},[103,18709,1946],{"class":109},[103,18711,1949],{"class":109},[103,18713,1953],{"class":1952},[103,18715,1279],{"class":113},[103,18717,18718],{"class":105,"line":1168},[103,18719,18720],{"class":172},"\u002F\u002F1.构造函数的分类及调用\n",[103,18722,18723],{"class":105,"line":1183},[103,18724,18725],{"class":172},"\u002F\u002F分类\n",[103,18727,18728],{"class":105,"line":1189},[103,18729,18730],{"class":172},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[103,18732,18733],{"class":105,"line":1203},[103,18734,18735],{"class":172},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[103,18737,18738],{"class":105,"line":1209},[103,18739,2389],{"emptyLinePlaceholder":30},[103,18741,18742,18744,18746],{"class":105,"line":1300},[103,18743,14684],{"class":109},[103,18745,15559],{"class":1952},[103,18747,2663],{"class":113},[103,18749,18750],{"class":105,"line":1306},[103,18751,1535],{"class":113},[103,18753,18754],{"class":105,"line":1318},[103,18755,14706],{"class":109},[103,18757,18758],{"class":105,"line":1601},[103,18759,18504],{"class":172},[103,18761,18762,18764],{"class":105,"line":1606},[103,18763,18509],{"class":1952},[103,18765,1965],{"class":113},[103,18767,18768],{"class":105,"line":1612},[103,18769,2019],{"class":113},[103,18771,18772,18774,18776,18779,18781],{"class":105,"line":1617},[103,18773,3440],{"class":113},[103,18775,1157],{"class":109},[103,18777,18778],{"class":218},"\"Person构造函数无参构造\"",[103,18780,1157],{"class":109},[103,18782,1180],{"class":113},[103,18784,18785],{"class":105,"line":1631},[103,18786,2176],{"class":113},[103,18788,18789,18791,18793,18795,18797],{"class":105,"line":1636},[103,18790,18509],{"class":1952},[103,18792,114],{"class":113},[103,18794,117],{"class":109},[103,18796,1387],{"class":5206},[103,18798,120],{"class":113},[103,18800,18801],{"class":105,"line":1642},[103,18802,2019],{"class":113},[103,18804,18805,18808,18810],{"class":105,"line":1663},[103,18806,18807],{"class":113},"        age",[103,18809,159],{"class":109},[103,18811,6187],{"class":113},[103,18813,18814,18816,18818,18821,18823],{"class":105,"line":1668},[103,18815,3440],{"class":113},[103,18817,1157],{"class":109},[103,18819,18820],{"class":218},"\"Person构造函数有参构造\"",[103,18822,1157],{"class":109},[103,18824,1180],{"class":113},[103,18826,18827],{"class":105,"line":1682},[103,18828,2176],{"class":113},[103,18830,18831],{"class":105,"line":1687},[103,18832,18537],{"class":172},[103,18834,18835,18837],{"class":105,"line":1716},[103,18836,18542],{"class":1952},[103,18838,1965],{"class":113},[103,18840,18841],{"class":105,"line":1721},[103,18842,2019],{"class":113},[103,18844,18845,18847,18849,18852,18854],{"class":105,"line":1738},[103,18846,3440],{"class":113},[103,18848,1157],{"class":109},[103,18850,18851],{"class":218},"\"Person析构函数被调用\"",[103,18853,1157],{"class":109},[103,18855,1180],{"class":113},[103,18857,18858],{"class":105,"line":1743},[103,18859,2176],{"class":113},[103,18861,18862],{"class":105,"line":1748},[103,18863,18864],{"class":172},"    \u002F\u002F拷贝构造函数\n",[103,18866,18867,18869,18871,18873,18875,18877,18879],{"class":105,"line":1753},[103,18868,18509],{"class":1952},[103,18870,114],{"class":113},[103,18872,6782],{"class":109},[103,18874,15559],{"class":1952},[103,18876,10574],{"class":109},[103,18878,14],{"class":5206},[103,18880,120],{"class":113},[103,18882,18883],{"class":105,"line":1767},[103,18884,2019],{"class":113},[103,18886,18887],{"class":105,"line":1772},[103,18888,18889],{"class":172},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[103,18891,18892,18894,18896],{"class":105,"line":2566},[103,18893,18807],{"class":113},[103,18895,159],{"class":109},[103,18897,18898],{"class":113},"p.age;\n",[103,18900,18901,18903,18905,18908,18910],{"class":105,"line":2580},[103,18902,3440],{"class":113},[103,18904,1157],{"class":109},[103,18906,18907],{"class":218},"\"Person拷贝构造函数被调用\"",[103,18909,1157],{"class":109},[103,18911,1180],{"class":113},[103,18913,18914],{"class":105,"line":2588},[103,18915,2176],{"class":113},[103,18917,18918,18920],{"class":105,"line":2593},[103,18919,1974],{"class":109},[103,18921,7787],{"class":113},[103,18923,18924],{"class":105,"line":2599},[103,18925,3984],{"class":113},[103,18927,18928],{"class":105,"line":2605},[103,18929,18930],{"class":172},"\u002F\u002F调用\n",[103,18932,18933,18935,18937],{"class":105,"line":2610},[103,18934,5354],{"class":109},[103,18936,5578],{"class":1952},[103,18938,1965],{"class":113},[103,18940,18941],{"class":105,"line":7938},[103,18942,1535],{"class":113},[103,18944,18945],{"class":105,"line":7962},[103,18946,18947],{"class":172},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[103,18949,18950],{"class":105,"line":7967},[103,18951,1554],{"class":113},[103,18953,18954,18956,18958],{"class":105,"line":7973},[103,18955,5354],{"class":109},[103,18957,5647],{"class":1952},[103,18959,1965],{"class":113},[103,18961,18962],{"class":105,"line":8000},[103,18963,1535],{"class":113},[103,18965,18966],{"class":105,"line":8005},[103,18967,18968],{"class":172},"    \u002F\u002F1.括号法\n",[103,18970,18971],{"class":105,"line":8011},[103,18972,18973],{"class":172},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[103,18975,18976],{"class":105,"line":8023},[103,18977,18978],{"class":172},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[103,18980,18981],{"class":105,"line":8035},[103,18982,18983],{"class":172},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[103,18985,18986],{"class":105,"line":8047},[103,18987,18988],{"class":172},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[103,18990,18991],{"class":105,"line":9706},[103,18992,2389],{"emptyLinePlaceholder":30},[103,18994,18995],{"class":105,"line":9731},[103,18996,18997],{"class":172},"    \u002F\u002F注意事项\n",[103,18999,19000],{"class":105,"line":9754},[103,19001,19002],{"class":172},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[103,19004,19005],{"class":105,"line":9778},[103,19006,19007],{"class":172},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[103,19009,19010],{"class":105,"line":9783},[103,19011,19012],{"class":172},"    \u002F\u002F Person p4();\n",[103,19014,19015],{"class":105,"line":9788},[103,19016,2389],{"emptyLinePlaceholder":30},[103,19018,19019],{"class":105,"line":9793},[103,19020,19021],{"class":172},"    \u002F\u002F2.显示法\n",[103,19023,19024],{"class":105,"line":9802},[103,19025,19026],{"class":113},"    Person p1;\n",[103,19028,19029,19032,19034,19037,19039,19041],{"class":105,"line":9807},[103,19030,19031],{"class":113},"    Person p2",[103,19033,159],{"class":109},[103,19035,19036],{"class":1952},"Person",[103,19038,114],{"class":113},[103,19040,559],{"class":162},[103,19042,2708],{"class":113},[103,19044,19045,19048,19050,19052],{"class":105,"line":9813},[103,19046,19047],{"class":113},"    Person p3",[103,19049,159],{"class":109},[103,19051,19036],{"class":1952},[103,19053,19054],{"class":113},"(p2);\n",[103,19056,19057],{"class":105,"line":9834},[103,19058,19059],{"class":172},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[103,19061,19062],{"class":105,"line":9840},[103,19063,2389],{"emptyLinePlaceholder":30},[103,19065,19066],{"class":105,"line":9854},[103,19067,19068],{"class":172},"    \u002F\u002F 注意事项2\n",[103,19070,19071],{"class":105,"line":9860},[103,19072,19073],{"class":172},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[103,19075,19076],{"class":105,"line":9887},[103,19077,19078],{"class":172},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[103,19080,19081],{"class":105,"line":9896},[103,19082,2389],{"emptyLinePlaceholder":30},[103,19084,19085],{"class":105,"line":9902},[103,19086,19087],{"class":172},"    \u002F\u002F3.隐士转换法\n",[103,19089,19090,19093,19095,19097,19099],{"class":105,"line":9910},[103,19091,19092],{"class":113},"    Person p4",[103,19094,159],{"class":109},[103,19096,559],{"class":162},[103,19098,169],{"class":113},[103,19100,19101],{"class":172},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[103,19103,19104,19107,19109,19112],{"class":105,"line":9915},[103,19105,19106],{"class":113},"    Person p5",[103,19108,159],{"class":109},[103,19110,19111],{"class":113},"p4;",[103,19113,19114],{"class":172}," \u002F\u002F 这里会调用拷贝构造函数\n",[103,19116,19117],{"class":105,"line":16594},[103,19118,1554],{"class":113},[103,19120,19121,19123,19125],{"class":105,"line":16600},[103,19122,117],{"class":109},[103,19124,1962],{"class":1952},[103,19126,1965],{"class":113},[103,19128,19129],{"class":105,"line":16623},[103,19130,1535],{"class":113},[103,19132,19133,19135],{"class":105,"line":16629},[103,19134,5623],{"class":1952},[103,19136,5626],{"class":113},[103,19138,19139,19141],{"class":105,"line":16652},[103,19140,5692],{"class":1952},[103,19142,5626],{"class":113},[103,19144,19145,19147,19149],{"class":105,"line":16666},[103,19146,4079],{"class":109},[103,19148,4082],{"class":162},[103,19150,1279],{"class":113},[103,19152,19153],{"class":105,"line":16686},[103,19154,1554],{"class":113},[14,19156,19157,19160],{},[263,19158,19159],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[74,19162,19164],{"id":19163},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19166,19167],{},"C++中拷贝构造函数调用时机通常有三种情况",[1120,19169,19170,19173,19176],{},[60,19171,19172],{},"使用一个已经创建完毕的对象来初始化一个新对象",[60,19174,19175],{},"值传递的方式给函数参数传值",[60,19177,19178],{},"以值方式返回局部对象",[94,19180,19182],{"className":96,"code":19181,"language":98,"meta":24,"style":24},"#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",[100,19183,19184,19190,19200,19204,19209,19213,19218,19223,19228,19234,19238,19242,19248,19252,19265,19269,19274,19286,19290,19298,19311,19315,19319,19335,19339,19348,19361,19365,19371,19375,19387,19391,19397,19401,19405,19413,19417,19430,19438,19456,19460,19465,19470,19485,19489,19502,19506,19514,19518,19522,19530,19534,19539,19548,19552,19556,19581,19591,19595,19603,19607,19618,19643,19647,19651,19655,19663,19667,19672,19677,19684,19689,19694,19699,19704,19708,19713,19717,19722,19726,19731,19736,19740,19744,19749,19754,19762],{"__ignoreMap":24},[103,19185,19186,19188],{"class":105,"line":106},[103,19187,1938],{"class":109},[103,19189,1941],{"class":218},[103,19191,19192,19194,19196,19198],{"class":105,"line":25},[103,19193,1946],{"class":109},[103,19195,1949],{"class":109},[103,19197,1953],{"class":1952},[103,19199,1279],{"class":113},[103,19201,19202],{"class":105,"line":1168},[103,19203,2389],{"emptyLinePlaceholder":30},[103,19205,19206],{"class":105,"line":1183},[103,19207,19208],{"class":172},"\u002F\u002F拷贝构造函数调用时机\n",[103,19210,19211],{"class":105,"line":1189},[103,19212,2389],{"emptyLinePlaceholder":30},[103,19214,19215],{"class":105,"line":1203},[103,19216,19217],{"class":172},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[103,19219,19220],{"class":105,"line":1209},[103,19221,19222],{"class":172},"\u002F\u002F2.值传递的方式给函数参数传值\n",[103,19224,19225],{"class":105,"line":1300},[103,19226,19227],{"class":172},"\u002F\u002F3.以值方式返回局部对象\n",[103,19229,19230,19232],{"class":105,"line":1306},[103,19231,14684],{"class":109},[103,19233,15161],{"class":1952},[103,19235,19236],{"class":105,"line":1318},[103,19237,1535],{"class":113},[103,19239,19240],{"class":105,"line":1601},[103,19241,14706],{"class":109},[103,19243,19244,19246],{"class":105,"line":1606},[103,19245,18509],{"class":1952},[103,19247,1965],{"class":113},[103,19249,19250],{"class":105,"line":1612},[103,19251,2019],{"class":113},[103,19253,19254,19256,19258,19261,19263],{"class":105,"line":1617},[103,19255,9659],{"class":113},[103,19257,1157],{"class":109},[103,19259,19260],{"class":218}," \"Person的默认构造函数调用\"",[103,19262,1433],{"class":109},[103,19264,8830],{"class":113},[103,19266,19267],{"class":105,"line":1631},[103,19268,2176],{"class":113},[103,19270,19271],{"class":105,"line":1636},[103,19272,19273],{"class":172},"    \u002F\u002F有参构造\n",[103,19275,19276,19278,19280,19282,19284],{"class":105,"line":1642},[103,19277,18509],{"class":1952},[103,19279,114],{"class":113},[103,19281,117],{"class":109},[103,19283,15679],{"class":5206},[103,19285,120],{"class":113},[103,19287,19288],{"class":105,"line":1663},[103,19289,2019],{"class":113},[103,19291,19292,19294,19296],{"class":105,"line":1668},[103,19293,15733],{"class":113},[103,19295,159],{"class":109},[103,19297,7787],{"class":113},[103,19299,19300,19302,19304,19307,19309],{"class":105,"line":1682},[103,19301,9659],{"class":113},[103,19303,1157],{"class":109},[103,19305,19306],{"class":218}," \"Person的有参构造函数调用\"",[103,19308,1433],{"class":109},[103,19310,8830],{"class":113},[103,19312,19313],{"class":105,"line":1687},[103,19314,2176],{"class":113},[103,19316,19317],{"class":105,"line":1716},[103,19318,18864],{"class":172},[103,19320,19321,19323,19325,19327,19329,19331,19333],{"class":105,"line":1721},[103,19322,18509],{"class":1952},[103,19324,114],{"class":113},[103,19326,6782],{"class":109},[103,19328,15559],{"class":1952},[103,19330,10574],{"class":109},[103,19332,14],{"class":5206},[103,19334,120],{"class":113},[103,19336,19337],{"class":105,"line":1738},[103,19338,2019],{"class":113},[103,19340,19341,19343,19345],{"class":105,"line":1743},[103,19342,15733],{"class":113},[103,19344,159],{"class":109},[103,19346,19347],{"class":113}," p.m_Age;\n",[103,19349,19350,19352,19354,19357,19359],{"class":105,"line":1748},[103,19351,9659],{"class":113},[103,19353,1157],{"class":109},[103,19355,19356],{"class":218}," \"Person的拷贝构造函数调用\"",[103,19358,1433],{"class":109},[103,19360,8830],{"class":113},[103,19362,19363],{"class":105,"line":1753},[103,19364,2176],{"class":113},[103,19366,19367,19369],{"class":105,"line":1767},[103,19368,18542],{"class":1952},[103,19370,1965],{"class":113},[103,19372,19373],{"class":105,"line":1772},[103,19374,2019],{"class":113},[103,19376,19377,19379,19381,19383,19385],{"class":105,"line":2566},[103,19378,9659],{"class":113},[103,19380,1157],{"class":109},[103,19382,18557],{"class":218},[103,19384,1433],{"class":109},[103,19386,8830],{"class":113},[103,19388,19389],{"class":105,"line":2580},[103,19390,2176],{"class":113},[103,19392,19393,19395],{"class":105,"line":2588},[103,19394,1974],{"class":109},[103,19396,15656],{"class":113},[103,19398,19399],{"class":105,"line":2593},[103,19400,3984],{"class":113},[103,19402,19403],{"class":105,"line":2599},[103,19404,19217],{"class":172},[103,19406,19407,19409,19411],{"class":105,"line":2605},[103,19408,5354],{"class":109},[103,19410,5578],{"class":1952},[103,19412,1965],{"class":113},[103,19414,19415],{"class":105,"line":2610},[103,19416,1535],{"class":113},[103,19418,19419,19422,19424,19426,19428],{"class":105,"line":7938},[103,19420,19421],{"class":113},"    Person ",[103,19423,7120],{"class":1952},[103,19425,114],{"class":113},[103,19427,813],{"class":162},[103,19429,2708],{"class":113},[103,19431,19432,19434,19436],{"class":105,"line":7962},[103,19433,19421],{"class":113},[103,19435,7023],{"class":1952},[103,19437,17505],{"class":113},[103,19439,19440,19442,19444,19447,19449,19452,19454],{"class":105,"line":7967},[103,19441,1540],{"class":113},[103,19443,1157],{"class":109},[103,19445,19446],{"class":218},"\"P2的年龄为：\"",[103,19448,1157],{"class":109},[103,19450,19451],{"class":113},"p2.m_Age",[103,19453,1157],{"class":109},[103,19455,1180],{"class":113},[103,19457,19458],{"class":105,"line":7973},[103,19459,1554],{"class":113},[103,19461,19462],{"class":105,"line":8000},[103,19463,19464],{"class":172},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[103,19466,19467],{"class":105,"line":8005},[103,19468,19469],{"class":172},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[103,19471,19472,19474,19477,19479,19481,19483],{"class":105,"line":8011},[103,19473,5354],{"class":109},[103,19475,19476],{"class":1952}," doWork",[103,19478,114],{"class":113},[103,19480,19036],{"class":1952},[103,19482,6815],{"class":5206},[103,19484,120],{"class":113},[103,19486,19487],{"class":105,"line":8023},[103,19488,1535],{"class":113},[103,19490,19491,19493,19495,19498,19500],{"class":105,"line":8035},[103,19492,6519],{"class":113},[103,19494,1157],{"class":109},[103,19496,19497],{"class":218}," \"doWork函数调用\"",[103,19499,1433],{"class":109},[103,19501,8830],{"class":113},[103,19503,19504],{"class":105,"line":8047},[103,19505,1554],{"class":113},[103,19507,19508,19510,19512],{"class":105,"line":9706},[103,19509,5354],{"class":109},[103,19511,5647],{"class":1952},[103,19513,1965],{"class":113},[103,19515,19516],{"class":105,"line":9731},[103,19517,1535],{"class":113},[103,19519,19520],{"class":105,"line":9754},[103,19521,15303],{"class":113},[103,19523,19524,19527],{"class":105,"line":9778},[103,19525,19526],{"class":1952},"    doWork",[103,19528,19529],{"class":113},"(p);\n",[103,19531,19532],{"class":105,"line":9783},[103,19533,1554],{"class":113},[103,19535,19536],{"class":105,"line":9788},[103,19537,19538],{"class":172},"\u002F\u002F 3.以值方式返回局部对象\n",[103,19540,19541,19543,19546],{"class":105,"line":9793},[103,19542,19036],{"class":1952},[103,19544,19545],{"class":1952}," doWork2",[103,19547,1965],{"class":113},[103,19549,19550],{"class":105,"line":9802},[103,19551,1535],{"class":113},[103,19553,19554],{"class":105,"line":9807},[103,19555,19026],{"class":113},[103,19557,19558,19560,19562,19564,19566,19568,19570,19572,19574,19576,19578],{"class":105,"line":9813},[103,19559,1540],{"class":113},[103,19561,1157],{"class":109},[103,19563,114],{"class":113},[103,19565,117],{"class":109},[103,19567,6508],{"class":109},[103,19569,542],{"class":113},[103,19571,466],{"class":109},[103,19573,7120],{"class":113},[103,19575,1157],{"class":109},[103,19577,1227],{"class":113},[103,19579,19580],{"class":172},"\u002F\u002F打印p1的地址\n",[103,19582,19583,19585,19588],{"class":105,"line":9834},[103,19584,4079],{"class":109},[103,19586,19587],{"class":113}," p1;",[103,19589,19590],{"class":172},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[103,19592,19593],{"class":105,"line":9840},[103,19594,1554],{"class":113},[103,19596,19597,19599,19601],{"class":105,"line":9854},[103,19598,5354],{"class":109},[103,19600,5719],{"class":1952},[103,19602,1965],{"class":113},[103,19604,19605],{"class":105,"line":9860},[103,19606,1535],{"class":113},[103,19608,19609,19612,19614,19616],{"class":105,"line":9887},[103,19610,19611],{"class":113},"    Person p ",[103,19613,159],{"class":109},[103,19615,19545],{"class":1952},[103,19617,5626],{"class":113},[103,19619,19620,19622,19624,19626,19628,19630,19632,19634,19636,19638,19640],{"class":105,"line":9896},[103,19621,1540],{"class":113},[103,19623,1157],{"class":109},[103,19625,114],{"class":113},[103,19627,117],{"class":109},[103,19629,6508],{"class":109},[103,19631,542],{"class":113},[103,19633,466],{"class":109},[103,19635,14],{"class":113},[103,19637,1157],{"class":109},[103,19639,1227],{"class":113},[103,19641,19642],{"class":172},"\u002F\u002F打印p的地址\n",[103,19644,19645],{"class":105,"line":9902},[103,19646,1554],{"class":113},[103,19648,19649],{"class":105,"line":9910},[103,19650,2389],{"emptyLinePlaceholder":30},[103,19652,19653],{"class":105,"line":9915},[103,19654,2389],{"emptyLinePlaceholder":30},[103,19656,19657,19659,19661],{"class":105,"line":16594},[103,19658,117],{"class":109},[103,19660,1962],{"class":1952},[103,19662,1965],{"class":113},[103,19664,19665],{"class":105,"line":16600},[103,19666,1535],{"class":113},[103,19668,19669],{"class":105,"line":16623},[103,19670,19671],{"class":172},"    \u002F\u002F test01();\n",[103,19673,19674],{"class":105,"line":16629},[103,19675,19676],{"class":172},"    \u002F\u002F test02();\n",[103,19678,19679,19682],{"class":105,"line":16652},[103,19680,19681],{"class":1952},"    test03",[103,19683,5626],{"class":113},[103,19685,19686],{"class":105,"line":16666},[103,19687,19688],{"class":172},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[103,19690,19691],{"class":105,"line":16686},[103,19692,19693],{"class":172},"\u002F\u002F 输出结果如下：\n",[103,19695,19696],{"class":105,"line":16692},[103,19697,19698],{"class":172},"\u002F\u002F Person的默认构造函数调用\n",[103,19700,19701],{"class":105,"line":16703},[103,19702,19703],{"class":172},"\u002F\u002F 0x7fffffffceec\n",[103,19705,19706],{"class":105,"line":16726},[103,19707,19703],{"class":172},[103,19709,19710],{"class":105,"line":16748},[103,19711,19712],{"class":172},"\u002F\u002F Person的析构函数调用\n",[103,19714,19715],{"class":105,"line":16753},[103,19716,2389],{"emptyLinePlaceholder":30},[103,19718,19719],{"class":105,"line":16759},[103,19720,19721],{"class":172},"\u002F\u002F 之前的输出结果如下：\n",[103,19723,19724],{"class":105,"line":16773},[103,19725,19698],{"class":172},[103,19727,19728],{"class":105,"line":16786},[103,19729,19730],{"class":172},"\u002F\u002F 地址\n",[103,19732,19733],{"class":105,"line":16791},[103,19734,19735],{"class":172},"\u002F\u002F Person的拷贝构造函数调用\n",[103,19737,19738],{"class":105,"line":16805},[103,19739,19712],{"class":172},[103,19741,19742],{"class":105,"line":16810},[103,19743,19730],{"class":172},[103,19745,19746],{"class":105,"line":16816},[103,19747,19748],{"class":172},"\u002F\u002F (这两次输出的地址也是不同的) \n",[103,19750,19751],{"class":105,"line":16821},[103,19752,19753],{"class":172},"\u002F\u002F Person的析构函数调用     \n",[103,19755,19756,19758,19760],{"class":105,"line":16835},[103,19757,4079],{"class":109},[103,19759,4082],{"class":162},[103,19761,1279],{"class":113},[103,19763,19764],{"class":105,"line":16840},[103,19765,1554],{"class":113},[14,19767,19768],{},"简化版理解",[94,19770,19772],{"className":96,"code":19771,"language":98,"meta":24,"style":24},"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",[100,19773,19774,19782,19786,19792,19805,19816,19820,19832,19845,19853,19857,19873,19886,19895,19899,19904,19910,19923,19927,19931,19938,19942,19946,19951,19959,19963,19979,19992,20005,20009,20014,20022,20026,20030,20035,20040,20056,20064,20071,20077,20081,20085,20090,20098,20102,20106,20129,20136,20140,20144,20152,20156,20166,20188,20192,20196,20200,20208,20212,20217,20222,20228,20232,20242,20246,20254],{"__ignoreMap":24},[103,19775,19776,19778,19780],{"class":105,"line":106},[103,19777,14684],{"class":109},[103,19779,15559],{"class":1952},[103,19781,15562],{"class":113},[103,19783,19784],{"class":105,"line":25},[103,19785,14706],{"class":109},[103,19787,19788,19790],{"class":105,"line":1168},[103,19789,18509],{"class":1952},[103,19791,10843],{"class":113},[103,19793,19794,19796,19798,19801,19803],{"class":105,"line":1183},[103,19795,9659],{"class":113},[103,19797,1157],{"class":109},[103,19799,19800],{"class":218}," \"无参构造函数!\"",[103,19802,1433],{"class":109},[103,19804,8830],{"class":113},[103,19806,19807,19810,19812,19814],{"class":105,"line":1189},[103,19808,19809],{"class":113},"        mAge ",[103,19811,159],{"class":109},[103,19813,4082],{"class":162},[103,19815,1279],{"class":113},[103,19817,19818],{"class":105,"line":1203},[103,19819,2176],{"class":113},[103,19821,19822,19824,19826,19828,19830],{"class":105,"line":1209},[103,19823,18509],{"class":1952},[103,19825,114],{"class":113},[103,19827,117],{"class":109},[103,19829,15679],{"class":5206},[103,19831,12432],{"class":113},[103,19833,19834,19836,19838,19841,19843],{"class":105,"line":1300},[103,19835,9659],{"class":113},[103,19837,1157],{"class":109},[103,19839,19840],{"class":218}," \"有参构造函数!\"",[103,19842,1433],{"class":109},[103,19844,8830],{"class":113},[103,19846,19847,19849,19851],{"class":105,"line":1306},[103,19848,19809],{"class":113},[103,19850,159],{"class":109},[103,19852,7787],{"class":113},[103,19854,19855],{"class":105,"line":1318},[103,19856,2176],{"class":113},[103,19858,19859,19861,19863,19865,19867,19869,19871],{"class":105,"line":1601},[103,19860,18509],{"class":1952},[103,19862,114],{"class":113},[103,19864,6782],{"class":109},[103,19866,15559],{"class":1952},[103,19868,466],{"class":109},[103,19870,6815],{"class":5206},[103,19872,12432],{"class":113},[103,19874,19875,19877,19879,19882,19884],{"class":105,"line":1606},[103,19876,9659],{"class":113},[103,19878,1157],{"class":109},[103,19880,19881],{"class":218}," \"拷贝构造函数!\"",[103,19883,1433],{"class":109},[103,19885,8830],{"class":113},[103,19887,19888,19890,19892],{"class":105,"line":1612},[103,19889,19809],{"class":113},[103,19891,159],{"class":109},[103,19893,19894],{"class":113}," p.mAge;\n",[103,19896,19897],{"class":105,"line":1617},[103,19898,2176],{"class":113},[103,19900,19901],{"class":105,"line":1631},[103,19902,19903],{"class":172},"    \u002F\u002F析构函数在释放内存之前调用\n",[103,19905,19906,19908],{"class":105,"line":1636},[103,19907,18542],{"class":1952},[103,19909,10843],{"class":113},[103,19911,19912,19914,19916,19919,19921],{"class":105,"line":1642},[103,19913,9659],{"class":113},[103,19915,1157],{"class":109},[103,19917,19918],{"class":218}," \"析构函数!\"",[103,19920,1433],{"class":109},[103,19922,8830],{"class":113},[103,19924,19925],{"class":105,"line":1663},[103,19926,2176],{"class":113},[103,19928,19929],{"class":105,"line":1668},[103,19930,14706],{"class":109},[103,19932,19933,19935],{"class":105,"line":1682},[103,19934,1974],{"class":109},[103,19936,19937],{"class":113}," mAge;\n",[103,19939,19940],{"class":105,"line":1687},[103,19941,3984],{"class":113},[103,19943,19944],{"class":105,"line":1716},[103,19945,2389],{"emptyLinePlaceholder":30},[103,19947,19948],{"class":105,"line":1721},[103,19949,19950],{"class":172},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[103,19952,19953,19955,19957],{"class":105,"line":1738},[103,19954,5354],{"class":109},[103,19956,5578],{"class":1952},[103,19958,10843],{"class":113},[103,19960,19961],{"class":105,"line":1743},[103,19962,2389],{"emptyLinePlaceholder":30},[103,19964,19965,19967,19970,19972,19974,19976],{"class":105,"line":1748},[103,19966,19421],{"class":113},[103,19968,19969],{"class":1952},"man",[103,19971,114],{"class":113},[103,19973,424],{"class":162},[103,19975,5956],{"class":113},[103,19977,19978],{"class":172}," \u002F\u002Fp对象已经创建完毕\n",[103,19980,19981,19983,19986,19989],{"class":105,"line":1753},[103,19982,19421],{"class":113},[103,19984,19985],{"class":1952},"newman",[103,19987,19988],{"class":113},"(man);",[103,19990,19991],{"class":172}," \u002F\u002F调用拷贝构造函数\n",[103,19993,19994,19997,19999,20002],{"class":105,"line":1767},[103,19995,19996],{"class":113},"    Person newman2 ",[103,19998,159],{"class":109},[103,20000,20001],{"class":113}," man;",[103,20003,20004],{"class":172}," \u002F\u002F拷贝构造\n",[103,20006,20007],{"class":105,"line":1772},[103,20008,2389],{"emptyLinePlaceholder":30},[103,20010,20011],{"class":105,"line":2566},[103,20012,20013],{"class":172},"    \u002F\u002FPerson newman3;\n",[103,20015,20016,20019],{"class":105,"line":2580},[103,20017,20018],{"class":172},"    \u002F\u002Fnewman3 = man;",[103,20020,20021],{"class":172}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[103,20023,20024],{"class":105,"line":2588},[103,20025,1554],{"class":113},[103,20027,20028],{"class":105,"line":2593},[103,20029,2389],{"emptyLinePlaceholder":30},[103,20031,20032],{"class":105,"line":2599},[103,20033,20034],{"class":172},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[103,20036,20037],{"class":105,"line":2605},[103,20038,20039],{"class":172},"\u002F\u002F相当于Person p1 = p;\n",[103,20041,20042,20044,20046,20048,20050,20053],{"class":105,"line":2610},[103,20043,5354],{"class":109},[103,20045,19476],{"class":1952},[103,20047,114],{"class":113},[103,20049,19036],{"class":1952},[103,20051,20052],{"class":5206}," p1",[103,20054,20055],{"class":113},") {}\n",[103,20057,20058,20060,20062],{"class":105,"line":7938},[103,20059,5354],{"class":109},[103,20061,5647],{"class":1952},[103,20063,10843],{"class":113},[103,20065,20066,20068],{"class":105,"line":7962},[103,20067,18594],{"class":113},[103,20069,20070],{"class":172}," \u002F\u002F无参构造函数\n",[103,20072,20073,20075],{"class":105,"line":7967},[103,20074,19526],{"class":1952},[103,20076,19529],{"class":113},[103,20078,20079],{"class":105,"line":7973},[103,20080,1554],{"class":113},[103,20082,20083],{"class":105,"line":8000},[103,20084,2389],{"emptyLinePlaceholder":30},[103,20086,20087],{"class":105,"line":8005},[103,20088,20089],{"class":172},"\u002F\u002F3. 以值方式返回局部对象\n",[103,20091,20092,20094,20096],{"class":105,"line":8011},[103,20093,19036],{"class":1952},[103,20095,19545],{"class":1952},[103,20097,1965],{"class":113},[103,20099,20100],{"class":105,"line":8023},[103,20101,1535],{"class":113},[103,20103,20104],{"class":105,"line":8035},[103,20105,19026],{"class":113},[103,20107,20108,20110,20112,20114,20116,20118,20120,20122,20125,20127],{"class":105,"line":8047},[103,20109,6519],{"class":113},[103,20111,1157],{"class":109},[103,20113,1647],{"class":113},[103,20115,117],{"class":109},[103,20117,6508],{"class":109},[103,20119,542],{"class":113},[103,20121,466],{"class":109},[103,20123,20124],{"class":113},"p1 ",[103,20126,1157],{"class":109},[103,20128,8830],{"class":113},[103,20130,20131,20133],{"class":105,"line":9706},[103,20132,4079],{"class":109},[103,20134,20135],{"class":113}," p1;\n",[103,20137,20138],{"class":105,"line":9731},[103,20139,1554],{"class":113},[103,20141,20142],{"class":105,"line":9754},[103,20143,2389],{"emptyLinePlaceholder":30},[103,20145,20146,20148,20150],{"class":105,"line":9778},[103,20147,5354],{"class":109},[103,20149,5719],{"class":1952},[103,20151,1965],{"class":113},[103,20153,20154],{"class":105,"line":9783},[103,20155,1535],{"class":113},[103,20157,20158,20160,20162,20164],{"class":105,"line":9788},[103,20159,19611],{"class":113},[103,20161,159],{"class":109},[103,20163,19545],{"class":1952},[103,20165,5626],{"class":113},[103,20167,20168,20170,20172,20174,20176,20178,20180,20182,20184,20186],{"class":105,"line":9793},[103,20169,6519],{"class":113},[103,20171,1157],{"class":109},[103,20173,1647],{"class":113},[103,20175,117],{"class":109},[103,20177,6508],{"class":109},[103,20179,542],{"class":113},[103,20181,466],{"class":109},[103,20183,11438],{"class":113},[103,20185,1157],{"class":109},[103,20187,8830],{"class":113},[103,20189,20190],{"class":105,"line":9802},[103,20191,1554],{"class":113},[103,20193,20194],{"class":105,"line":9807},[103,20195,2389],{"emptyLinePlaceholder":30},[103,20197,20198],{"class":105,"line":9813},[103,20199,2389],{"emptyLinePlaceholder":30},[103,20201,20202,20204,20206],{"class":105,"line":9834},[103,20203,117],{"class":109},[103,20205,1962],{"class":1952},[103,20207,10843],{"class":113},[103,20209,20210],{"class":105,"line":9840},[103,20211,2389],{"emptyLinePlaceholder":30},[103,20213,20214],{"class":105,"line":9854},[103,20215,20216],{"class":172},"    \u002F\u002Ftest01();\n",[103,20218,20219],{"class":105,"line":9860},[103,20220,20221],{"class":172},"    \u002F\u002Ftest02();\n",[103,20223,20224,20226],{"class":105,"line":9887},[103,20225,19681],{"class":1952},[103,20227,5626],{"class":113},[103,20229,20230],{"class":105,"line":9896},[103,20231,2389],{"emptyLinePlaceholder":30},[103,20233,20234,20236,20238,20240],{"class":105,"line":9902},[103,20235,2292],{"class":1952},[103,20237,114],{"class":113},[103,20239,2297],{"class":218},[103,20241,2708],{"class":113},[103,20243,20244],{"class":105,"line":9910},[103,20245,2389],{"emptyLinePlaceholder":30},[103,20247,20248,20250,20252],{"class":105,"line":9915},[103,20249,4079],{"class":109},[103,20251,4082],{"class":162},[103,20253,1279],{"class":113},[103,20255,20256],{"class":105,"line":16594},[103,20257,1554],{"class":113},[74,20259,20261],{"id":20260},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20263,20264],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20266,20267],{},"1．默认构造函数(无参，函数体为空)",[14,20269,20270],{},"2．默认析构函数(无参，函数体为空)",[14,20272,20273],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20275,20276],{},"构造函数调用规则如下：",[1120,20278,20279,20282],{},[60,20280,20281],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[60,20283,20284],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[94,20286,20288],{"className":96,"code":20287,"language":98,"meta":24,"style":24},"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",[100,20289,20290,20298,20302,20307,20313,20325,20329,20334,20346,20355,20367,20371,20375,20391,20400,20412,20416,20420,20426,20438,20442,20446,20452,20456,20460,20468,20472,20484,20489,20497,20501,20519,20523,20527,20535,20539,20544,20552,20567,20580,20584,20589,20596,20612,20625,20629,20633,20641,20645,20651,20655,20665,20669,20677],{"__ignoreMap":24},[103,20291,20292,20294,20296],{"class":105,"line":106},[103,20293,14684],{"class":109},[103,20295,15559],{"class":1952},[103,20297,15562],{"class":113},[103,20299,20300],{"class":105,"line":25},[103,20301,14706],{"class":109},[103,20303,20304],{"class":105,"line":1168},[103,20305,20306],{"class":172},"    \u002F\u002F无参（默认）构造函数\n",[103,20308,20309,20311],{"class":105,"line":1183},[103,20310,18509],{"class":1952},[103,20312,10843],{"class":113},[103,20314,20315,20317,20319,20321,20323],{"class":105,"line":1189},[103,20316,9659],{"class":113},[103,20318,1157],{"class":109},[103,20320,19800],{"class":218},[103,20322,1433],{"class":109},[103,20324,8830],{"class":113},[103,20326,20327],{"class":105,"line":1203},[103,20328,2176],{"class":113},[103,20330,20331],{"class":105,"line":1209},[103,20332,20333],{"class":172},"    \u002F\u002F有参构造函数\n",[103,20335,20336,20338,20340,20342,20344],{"class":105,"line":1300},[103,20337,18509],{"class":1952},[103,20339,114],{"class":113},[103,20341,117],{"class":109},[103,20343,1387],{"class":5206},[103,20345,12432],{"class":113},[103,20347,20348,20351,20353],{"class":105,"line":1306},[103,20349,20350],{"class":113},"        age ",[103,20352,159],{"class":109},[103,20354,1421],{"class":113},[103,20356,20357,20359,20361,20363,20365],{"class":105,"line":1318},[103,20358,9659],{"class":113},[103,20360,1157],{"class":109},[103,20362,19840],{"class":218},[103,20364,1433],{"class":109},[103,20366,8830],{"class":113},[103,20368,20369],{"class":105,"line":1601},[103,20370,2176],{"class":113},[103,20372,20373],{"class":105,"line":1606},[103,20374,18864],{"class":172},[103,20376,20377,20379,20381,20383,20385,20387,20389],{"class":105,"line":1612},[103,20378,18509],{"class":1952},[103,20380,114],{"class":113},[103,20382,6782],{"class":109},[103,20384,15559],{"class":1952},[103,20386,466],{"class":109},[103,20388,6815],{"class":5206},[103,20390,12432],{"class":113},[103,20392,20393,20395,20397],{"class":105,"line":1617},[103,20394,20350],{"class":113},[103,20396,159],{"class":109},[103,20398,20399],{"class":113}," p.age;\n",[103,20401,20402,20404,20406,20408,20410],{"class":105,"line":1631},[103,20403,9659],{"class":113},[103,20405,1157],{"class":109},[103,20407,19881],{"class":218},[103,20409,1433],{"class":109},[103,20411,8830],{"class":113},[103,20413,20414],{"class":105,"line":1636},[103,20415,2176],{"class":113},[103,20417,20418],{"class":105,"line":1642},[103,20419,18537],{"class":172},[103,20421,20422,20424],{"class":105,"line":1663},[103,20423,18542],{"class":1952},[103,20425,10843],{"class":113},[103,20427,20428,20430,20432,20434,20436],{"class":105,"line":1668},[103,20429,9659],{"class":113},[103,20431,1157],{"class":109},[103,20433,19918],{"class":218},[103,20435,1433],{"class":109},[103,20437,8830],{"class":113},[103,20439,20440],{"class":105,"line":1682},[103,20441,2176],{"class":113},[103,20443,20444],{"class":105,"line":1687},[103,20445,14706],{"class":109},[103,20447,20448,20450],{"class":105,"line":1716},[103,20449,1974],{"class":109},[103,20451,7787],{"class":113},[103,20453,20454],{"class":105,"line":1721},[103,20455,3984],{"class":113},[103,20457,20458],{"class":105,"line":1738},[103,20459,2389],{"emptyLinePlaceholder":30},[103,20461,20462,20464,20466],{"class":105,"line":1743},[103,20463,5354],{"class":109},[103,20465,5578],{"class":1952},[103,20467,1965],{"class":113},[103,20469,20470],{"class":105,"line":1748},[103,20471,1535],{"class":113},[103,20473,20474,20476,20478,20480,20482],{"class":105,"line":1753},[103,20475,19421],{"class":113},[103,20477,7120],{"class":1952},[103,20479,114],{"class":113},[103,20481,763],{"class":162},[103,20483,2708],{"class":113},[103,20485,20486],{"class":105,"line":1767},[103,20487,20488],{"class":172},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[103,20490,20491,20493,20495],{"class":105,"line":1772},[103,20492,19421],{"class":113},[103,20494,7023],{"class":1952},[103,20496,17505],{"class":113},[103,20498,20499],{"class":105,"line":2566},[103,20500,2389],{"emptyLinePlaceholder":30},[103,20502,20503,20505,20507,20510,20512,20515,20517],{"class":105,"line":2580},[103,20504,6519],{"class":113},[103,20506,1157],{"class":109},[103,20508,20509],{"class":218}," \"p2的年龄为： \"",[103,20511,1433],{"class":109},[103,20513,20514],{"class":113}," p2.age ",[103,20516,1157],{"class":109},[103,20518,8830],{"class":113},[103,20520,20521],{"class":105,"line":2588},[103,20522,1554],{"class":113},[103,20524,20525],{"class":105,"line":2593},[103,20526,2389],{"emptyLinePlaceholder":30},[103,20528,20529,20531,20533],{"class":105,"line":2599},[103,20530,5354],{"class":109},[103,20532,5647],{"class":1952},[103,20534,1965],{"class":113},[103,20536,20537],{"class":105,"line":2605},[103,20538,1535],{"class":113},[103,20540,20541],{"class":105,"line":2610},[103,20542,20543],{"class":172},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[103,20545,20546,20549],{"class":105,"line":7938},[103,20547,20548],{"class":113},"    Person p1;",[103,20550,20551],{"class":172}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[103,20553,20554,20556,20558,20560,20562,20564],{"class":105,"line":7962},[103,20555,19421],{"class":113},[103,20557,7023],{"class":1952},[103,20559,114],{"class":113},[103,20561,559],{"class":162},[103,20563,5956],{"class":113},[103,20565,20566],{"class":172}," \u002F\u002F用户提供的有参\n",[103,20568,20569,20571,20574,20577],{"class":105,"line":7967},[103,20570,19421],{"class":113},[103,20572,20573],{"class":1952},"p3",[103,20575,20576],{"class":113},"(p2);",[103,20578,20579],{"class":172}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[103,20581,20582],{"class":105,"line":7973},[103,20583,2389],{"emptyLinePlaceholder":30},[103,20585,20586],{"class":105,"line":8000},[103,20587,20588],{"class":172},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[103,20590,20591,20594],{"class":105,"line":8005},[103,20592,20593],{"class":113},"    Person p4;",[103,20595,20551],{"class":172},[103,20597,20598,20600,20603,20605,20607,20609],{"class":105,"line":8011},[103,20599,19421],{"class":113},[103,20601,20602],{"class":1952},"p5",[103,20604,114],{"class":113},[103,20606,559],{"class":162},[103,20608,5956],{"class":113},[103,20610,20611],{"class":172}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[103,20613,20614,20616,20619,20622],{"class":105,"line":8023},[103,20615,19421],{"class":113},[103,20617,20618],{"class":1952},"p6",[103,20620,20621],{"class":113},"(p5);",[103,20623,20624],{"class":172}," \u002F\u002F用户自己提供拷贝构造\n",[103,20626,20627],{"class":105,"line":8035},[103,20628,1554],{"class":113},[103,20630,20631],{"class":105,"line":8047},[103,20632,2389],{"emptyLinePlaceholder":30},[103,20634,20635,20637,20639],{"class":105,"line":9706},[103,20636,117],{"class":109},[103,20638,1962],{"class":1952},[103,20640,10843],{"class":113},[103,20642,20643],{"class":105,"line":9731},[103,20644,2389],{"emptyLinePlaceholder":30},[103,20646,20647,20649],{"class":105,"line":9754},[103,20648,5623],{"class":1952},[103,20650,5626],{"class":113},[103,20652,20653],{"class":105,"line":9778},[103,20654,2389],{"emptyLinePlaceholder":30},[103,20656,20657,20659,20661,20663],{"class":105,"line":9783},[103,20658,2292],{"class":1952},[103,20660,114],{"class":113},[103,20662,2297],{"class":218},[103,20664,2708],{"class":113},[103,20666,20667],{"class":105,"line":9788},[103,20668,2389],{"emptyLinePlaceholder":30},[103,20670,20671,20673,20675],{"class":105,"line":9793},[103,20672,4079],{"class":109},[103,20674,4082],{"class":162},[103,20676,1279],{"class":113},[103,20678,20679],{"class":105,"line":9802},[103,20680,1554],{"class":113},[74,20682,20684],{"id":20683},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20686,20687],{},"浅拷贝：简单的赋值拷贝操作",[14,20689,20690],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[94,20692,20694],{"className":96,"code":20693,"language":98,"meta":24,"style":24},"#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",[100,20695,20696,20702,20712,20718,20722,20726,20731,20737,20741,20754,20758,20762,20769,20773,20783,20798,20811,20815,20820,20825,20841,20845,20858,20863,20868,20873,20882,20887,20902,20906,20910,20914,20920,20924,20929,20944,20948,20959,20973,20977,20986,20990,20996,21008,21012,21020,21024,21041,21072,21080,21108,21112,21116,21124,21128,21134],{"__ignoreMap":24},[103,20697,20698,20700],{"class":105,"line":106},[103,20699,1938],{"class":109},[103,20701,1941],{"class":218},[103,20703,20704,20706,20708,20710],{"class":105,"line":25},[103,20705,1946],{"class":109},[103,20707,1949],{"class":109},[103,20709,1953],{"class":1952},[103,20711,1279],{"class":113},[103,20713,20714,20716],{"class":105,"line":1168},[103,20715,14684],{"class":109},[103,20717,15161],{"class":1952},[103,20719,20720],{"class":105,"line":1183},[103,20721,1535],{"class":113},[103,20723,20724],{"class":105,"line":1189},[103,20725,14706],{"class":109},[103,20727,20728],{"class":105,"line":1203},[103,20729,20730],{"class":172},"    \u002F\u002F默认构造函数\n",[103,20732,20733,20735],{"class":105,"line":1209},[103,20734,18509],{"class":1952},[103,20736,1965],{"class":113},[103,20738,20739],{"class":105,"line":1300},[103,20740,2019],{"class":113},[103,20742,20743,20745,20747,20750,20752],{"class":105,"line":1306},[103,20744,3440],{"class":113},[103,20746,1157],{"class":109},[103,20748,20749],{"class":218},"\"默认构造函数\"",[103,20751,1157],{"class":109},[103,20753,1180],{"class":113},[103,20755,20756],{"class":105,"line":1318},[103,20757,2176],{"class":113},[103,20759,20760],{"class":105,"line":1601},[103,20761,20333],{"class":172},[103,20763,20764,20766],{"class":105,"line":1606},[103,20765,18542],{"class":1952},[103,20767,20768],{"class":113},"(int age,int height)\n",[103,20770,20771],{"class":105,"line":1612},[103,20772,2019],{"class":113},[103,20774,20775,20778,20780],{"class":105,"line":1617},[103,20776,20777],{"class":113},"        m_Age",[103,20779,159],{"class":109},[103,20781,20782],{"class":113},"age;\n",[103,20784,20785,20788,20790,20792,20795],{"class":105,"line":1631},[103,20786,20787],{"class":113},"        m_Height",[103,20789,11707],{"class":109},[103,20791,2371],{"class":109},[103,20793,20794],{"class":113},"(height);",[103,20796,20797],{"class":172},"\u002F\u002F放到堆区\n",[103,20799,20800,20802,20804,20807,20809],{"class":105,"line":1636},[103,20801,3440],{"class":113},[103,20803,1157],{"class":109},[103,20805,20806],{"class":218},"\"有参构造函数\"",[103,20808,1157],{"class":109},[103,20810,1180],{"class":113},[103,20812,20813],{"class":105,"line":1642},[103,20814,2176],{"class":113},[103,20816,20817],{"class":105,"line":1663},[103,20818,20819],{"class":172},"    \u002F\u002F深拷贝解决上述问题\n",[103,20821,20822],{"class":105,"line":1668},[103,20823,20824],{"class":172},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[103,20826,20827,20829,20831,20833,20835,20837,20839],{"class":105,"line":1682},[103,20828,18509],{"class":1952},[103,20830,114],{"class":113},[103,20832,6782],{"class":109},[103,20834,15559],{"class":1952},[103,20836,10574],{"class":109},[103,20838,14],{"class":5206},[103,20840,120],{"class":113},[103,20842,20843],{"class":105,"line":1687},[103,20844,2019],{"class":113},[103,20846,20847,20849,20851,20854,20856],{"class":105,"line":1716},[103,20848,3440],{"class":113},[103,20850,1157],{"class":109},[103,20852,20853],{"class":218},"\"拷贝构造函数\"",[103,20855,1157],{"class":109},[103,20857,1180],{"class":113},[103,20859,20860],{"class":105,"line":1721},[103,20861,20862],{"class":172},"        \u002F\u002F编译器默认的写如下注释部分\n",[103,20864,20865],{"class":105,"line":1738},[103,20866,20867],{"class":172},"        \u002F\u002Fm_Age=p.m_Age;\n",[103,20869,20870],{"class":105,"line":1743},[103,20871,20872],{"class":172},"        \u002F\u002Fm_Height=p.m_Height;\n",[103,20874,20875,20877,20879],{"class":105,"line":1748},[103,20876,20777],{"class":113},[103,20878,159],{"class":109},[103,20880,20881],{"class":113},"p.m_Age;\n",[103,20883,20884],{"class":105,"line":1753},[103,20885,20886],{"class":172},"        \u002F\u002F深拷贝操作\n",[103,20888,20889,20891,20893,20895,20897,20899],{"class":105,"line":1767},[103,20890,20787],{"class":113},[103,20892,11707],{"class":109},[103,20894,2371],{"class":109},[103,20896,114],{"class":113},[103,20898,568],{"class":109},[103,20900,20901],{"class":113},"p.m_Height);\n",[103,20903,20904],{"class":105,"line":1772},[103,20905,2176],{"class":113},[103,20907,20908],{"class":105,"line":2566},[103,20909,2389],{"emptyLinePlaceholder":30},[103,20911,20912],{"class":105,"line":2580},[103,20913,18537],{"class":172},[103,20915,20916,20918],{"class":105,"line":2588},[103,20917,18542],{"class":1952},[103,20919,1965],{"class":113},[103,20921,20922],{"class":105,"line":2593},[103,20923,2019],{"class":113},[103,20925,20926],{"class":105,"line":2599},[103,20927,20928],{"class":172},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[103,20930,20931,20933,20936,20939,20942],{"class":105,"line":2605},[103,20932,2486],{"class":109},[103,20934,20935],{"class":113},"(m_Height ",[103,20937,20938],{"class":109},"!=",[103,20940,20941],{"class":162}," NULL",[103,20943,120],{"class":113},[103,20945,20946],{"class":105,"line":2610},[103,20947,2499],{"class":113},[103,20949,20950,20953,20956],{"class":105,"line":7938},[103,20951,20952],{"class":109},"            delete",[103,20954,20955],{"class":113}," m_Height;",[103,20957,20958],{"class":172}," \u002F\u002F释放堆区内存\n",[103,20960,20961,20964,20966,20968,20970],{"class":105,"line":7962},[103,20962,20963],{"class":113},"            m_Height",[103,20965,159],{"class":109},[103,20967,2381],{"class":162},[103,20969,169],{"class":113},[103,20971,20972],{"class":172}," \u002F\u002F防止野指针\n",[103,20974,20975],{"class":105,"line":7967},[103,20976,2518],{"class":113},[103,20978,20979,20981,20983],{"class":105,"line":7973},[103,20980,3440],{"class":113},[103,20982,1157],{"class":109},[103,20984,20985],{"class":218},"\"Person的析构函数调用\"\n",[103,20987,20988],{"class":105,"line":8000},[103,20989,2176],{"class":113},[103,20991,20992,20994],{"class":105,"line":8005},[103,20993,1974],{"class":109},[103,20995,15656],{"class":113},[103,20997,20998,21000,21002,21005],{"class":105,"line":8011},[103,20999,1974],{"class":109},[103,21001,6508],{"class":109},[103,21003,21004],{"class":113},"m_Height;",[103,21006,21007],{"class":172}," \u002F\u002F定义一个指针，指向身高\n",[103,21009,21010],{"class":105,"line":8023},[103,21011,3984],{"class":113},[103,21013,21014,21016,21018],{"class":105,"line":8035},[103,21015,5354],{"class":109},[103,21017,5578],{"class":1952},[103,21019,1965],{"class":113},[103,21021,21022],{"class":105,"line":8047},[103,21023,1535],{"class":113},[103,21025,21026,21028,21030,21032,21034,21036,21039],{"class":105,"line":9706},[103,21027,19421],{"class":113},[103,21029,7120],{"class":1952},[103,21031,114],{"class":113},[103,21033,763],{"class":162},[103,21035,491],{"class":113},[103,21037,21038],{"class":162},"160",[103,21040,2708],{"class":113},[103,21042,21043,21045,21047,21050,21052,21055,21057,21060,21062,21065,21067,21069],{"class":105,"line":9731},[103,21044,1540],{"class":113},[103,21046,1157],{"class":109},[103,21048,21049],{"class":218},"\"p1的年龄为:\"",[103,21051,1157],{"class":109},[103,21053,21054],{"class":113},"p1.m_Age",[103,21056,1157],{"class":109},[103,21058,21059],{"class":218},"\"身高为：\"",[103,21061,6409],{"class":109},[103,21063,21064],{"class":113},"p1.m_Height",[103,21066,1157],{"class":109},[103,21068,1227],{"class":113},[103,21070,21071],{"class":172},"  \u002F\u002F18\n",[103,21073,21074,21076,21078],{"class":105,"line":9754},[103,21075,19421],{"class":113},[103,21077,7023],{"class":1952},[103,21079,17505],{"class":113},[103,21081,21082,21084,21086,21089,21091,21093,21095,21097,21099,21102,21104,21106],{"class":105,"line":9778},[103,21083,1540],{"class":113},[103,21085,1157],{"class":109},[103,21087,21088],{"class":218},"\"p2的年龄为：\"",[103,21090,1157],{"class":109},[103,21092,19451],{"class":113},[103,21094,1157],{"class":109},[103,21096,21059],{"class":218},[103,21098,6409],{"class":109},[103,21100,21101],{"class":113},"p2.m_Height",[103,21103,1157],{"class":109},[103,21105,1227],{"class":113},[103,21107,21071],{"class":172},[103,21109,21110],{"class":105,"line":9783},[103,21111,13200],{"class":113},[103,21113,21114],{"class":105,"line":9788},[103,21115,1554],{"class":113},[103,21117,21118,21120,21122],{"class":105,"line":9793},[103,21119,117],{"class":109},[103,21121,1962],{"class":1952},[103,21123,1965],{"class":113},[103,21125,21126],{"class":105,"line":9802},[103,21127,1535],{"class":113},[103,21129,21130,21132],{"class":105,"line":9807},[103,21131,5623],{"class":1952},[103,21133,5626],{"class":113},[103,21135,21136],{"class":105,"line":9813},[103,21137,1554],{"class":113},[14,21139,21140],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21142,21143],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21145,21146],{},[1451,21147],{"alt":24,"src":21148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21150,21151],{},"浅拷贝问题要使用深拷贝来解决",[14,21153,21154],{},[1451,21155],{"alt":24,"src":21156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21158,21159],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[74,21161,21163],{"id":21162},"_826初始化列表","8.2.6初始化列表",[14,21165,21166],{},"作用：初始化属性",[14,21168,5171],{},[94,21170,21173],{"className":21171,"code":21172,"language":5177},[5175],"构造函数():属性1(值1),属性2(值2).....{}\n",[100,21174,21172],{"__ignoreMap":24},[14,21176,21177],{},"例子",[94,21179,21181],{"className":96,"code":21180,"language":98,"meta":24,"style":24},"#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",[100,21182,21183,21189,21199,21205,21209,21214,21218,21223,21228,21233,21238,21243,21248,21252,21257,21262,21305,21314,21332,21350,21368,21372,21376,21383,21390,21397,21401,21405,21413,21417,21421,21441,21450,21454,21458,21468,21472,21480],{"__ignoreMap":24},[103,21184,21185,21187],{"class":105,"line":106},[103,21186,1938],{"class":109},[103,21188,1941],{"class":218},[103,21190,21191,21193,21195,21197],{"class":105,"line":25},[103,21192,1946],{"class":109},[103,21194,1949],{"class":109},[103,21196,1953],{"class":1952},[103,21198,1279],{"class":113},[103,21200,21201,21203],{"class":105,"line":1168},[103,21202,14684],{"class":109},[103,21204,15161],{"class":1952},[103,21206,21207],{"class":105,"line":1183},[103,21208,1535],{"class":113},[103,21210,21211],{"class":105,"line":1189},[103,21212,21213],{"class":109},"    public:\n",[103,21215,21216],{"class":105,"line":1203},[103,21217,2389],{"emptyLinePlaceholder":30},[103,21219,21220],{"class":105,"line":1209},[103,21221,21222],{"class":172},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[103,21224,21225],{"class":105,"line":1300},[103,21226,21227],{"class":172},"    \u002F\u002FPerson(int a, int b, int c) {\n",[103,21229,21230],{"class":105,"line":1306},[103,21231,21232],{"class":172},"    \u002F\u002F  m_A = a;\n",[103,21234,21235],{"class":105,"line":1318},[103,21236,21237],{"class":172},"    \u002F\u002F  m_B = b;\n",[103,21239,21240],{"class":105,"line":1601},[103,21241,21242],{"class":172},"    \u002F\u002F  m_C = c;\n",[103,21244,21245],{"class":105,"line":1606},[103,21246,21247],{"class":172},"    \u002F\u002F}\n",[103,21249,21250],{"class":105,"line":1612},[103,21251,2389],{"emptyLinePlaceholder":30},[103,21253,21254],{"class":105,"line":1617},[103,21255,21256],{"class":172},"    \u002F\u002F初始化列表方式初始化\n",[103,21258,21259],{"class":105,"line":1631},[103,21260,21261],{"class":172},"    \u002F\u002F使用有参构造函数\n",[103,21263,21264,21266,21268,21270,21272,21274,21276,21278,21280,21282,21284,21287,21290,21293,21296,21299,21302],{"class":105,"line":1636},[103,21265,18509],{"class":1952},[103,21267,114],{"class":113},[103,21269,117],{"class":109},[103,21271,1387],{"class":5206},[103,21273,12425],{"class":113},[103,21275,117],{"class":109},[103,21277,2822],{"class":5206},[103,21279,12425],{"class":113},[103,21281,117],{"class":109},[103,21283,2838],{"class":5206},[103,21285,21286],{"class":113},") :",[103,21288,21289],{"class":1952},"m_A",[103,21291,21292],{"class":113},"(a), ",[103,21294,21295],{"class":1952},"m_B",[103,21297,21298],{"class":113},"(b), ",[103,21300,21301],{"class":1952},"m_C",[103,21303,21304],{"class":113},"(c) {}\n",[103,21306,21307,21309,21312],{"class":105,"line":1642},[103,21308,14899],{"class":109},[103,21310,21311],{"class":1952}," PrintPerson",[103,21313,10843],{"class":113},[103,21315,21316,21318,21320,21323,21325,21328,21330],{"class":105,"line":1663},[103,21317,9659],{"class":113},[103,21319,1157],{"class":109},[103,21321,21322],{"class":218}," \"mA:\"",[103,21324,1433],{"class":109},[103,21326,21327],{"class":113}," m_A ",[103,21329,1157],{"class":109},[103,21331,8830],{"class":113},[103,21333,21334,21336,21338,21341,21343,21346,21348],{"class":105,"line":1668},[103,21335,9659],{"class":113},[103,21337,1157],{"class":109},[103,21339,21340],{"class":218}," \"mB:\"",[103,21342,1433],{"class":109},[103,21344,21345],{"class":113}," m_B ",[103,21347,1157],{"class":109},[103,21349,8830],{"class":113},[103,21351,21352,21354,21356,21359,21361,21364,21366],{"class":105,"line":1682},[103,21353,9659],{"class":113},[103,21355,1157],{"class":109},[103,21357,21358],{"class":218}," \"mC:\"",[103,21360,1433],{"class":109},[103,21362,21363],{"class":113}," m_C ",[103,21365,1157],{"class":109},[103,21367,8830],{"class":113},[103,21369,21370],{"class":105,"line":1687},[103,21371,2176],{"class":113},[103,21373,21374],{"class":105,"line":1716},[103,21375,15212],{"class":109},[103,21377,21378,21380],{"class":105,"line":1721},[103,21379,1974],{"class":109},[103,21381,21382],{"class":113}," m_A;\n",[103,21384,21385,21387],{"class":105,"line":1738},[103,21386,1974],{"class":109},[103,21388,21389],{"class":113}," m_B;\n",[103,21391,21392,21394],{"class":105,"line":1743},[103,21393,1974],{"class":109},[103,21395,21396],{"class":113}," m_C;\n",[103,21398,21399],{"class":105,"line":1748},[103,21400,3984],{"class":113},[103,21402,21403],{"class":105,"line":1753},[103,21404,2389],{"emptyLinePlaceholder":30},[103,21406,21407,21409,21411],{"class":105,"line":1767},[103,21408,117],{"class":109},[103,21410,1962],{"class":1952},[103,21412,5968],{"class":113},[103,21414,21415],{"class":105,"line":1772},[103,21416,1535],{"class":113},[103,21418,21419],{"class":105,"line":2566},[103,21420,2389],{"emptyLinePlaceholder":30},[103,21422,21423,21425,21427,21429,21431,21433,21435,21437,21439],{"class":105,"line":2580},[103,21424,19421],{"class":113},[103,21426,14],{"class":1952},[103,21428,114],{"class":113},[103,21430,331],{"class":162},[103,21432,12425],{"class":113},[103,21434,191],{"class":162},[103,21436,12425],{"class":113},[103,21438,185],{"class":162},[103,21440,2708],{"class":113},[103,21442,21443,21445,21448],{"class":105,"line":2588},[103,21444,15856],{"class":113},[103,21446,21447],{"class":1952},"PrintPerson",[103,21449,5626],{"class":113},[103,21451,21452],{"class":105,"line":2593},[103,21453,2389],{"emptyLinePlaceholder":30},[103,21455,21456],{"class":105,"line":2599},[103,21457,2389],{"emptyLinePlaceholder":30},[103,21459,21460,21462,21464,21466],{"class":105,"line":2605},[103,21461,2292],{"class":1952},[103,21463,114],{"class":113},[103,21465,2297],{"class":218},[103,21467,2708],{"class":113},[103,21469,21470],{"class":105,"line":2610},[103,21471,2389],{"emptyLinePlaceholder":30},[103,21473,21474,21476,21478],{"class":105,"line":7938},[103,21475,4079],{"class":109},[103,21477,4082],{"class":162},[103,21479,1279],{"class":113},[103,21481,21482],{"class":105,"line":7962},[103,21483,1554],{"class":113},[14,21485,21486,21487,21490,21491],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[263,21488,21489],{},"参数名就是定义的对象属性","，",[263,21492,21493],{},"属性后面的值为有参构造函数的形参",[94,21495,21497],{"className":96,"code":21496,"language":98,"meta":24,"style":24},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[100,21498,21499],{"__ignoreMap":24},[103,21500,21501,21503,21505,21507,21510,21512,21515,21517,21520,21522,21525,21527,21530,21532],{"class":105,"line":106},[103,21502,19036],{"class":1952},[103,21504,114],{"class":113},[103,21506,117],{"class":109},[103,21508,21509],{"class":113}," a.",[103,21511,117],{"class":109},[103,21513,21514],{"class":113}," b,",[103,21516,117],{"class":109},[103,21518,21519],{"class":113}," b):",[103,21521,21289],{"class":1952},[103,21523,21524],{"class":113},"(a),",[103,21526,21295],{"class":1952},[103,21528,21529],{"class":113},"(c),",[103,21531,21301],{"class":1952},[103,21533,21534],{"class":113},"(b) {}\n",[74,21536,21538],{"id":21537},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21540,21541],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21543,14623],{},[94,21545,21547],{"className":96,"code":21546,"language":98,"meta":24,"style":24},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[100,21548,21549,21554,21559,21563,21568,21572],{"__ignoreMap":24},[103,21550,21551],{"class":105,"line":106},[103,21552,21553],{"class":113},"A{};\n",[103,21555,21556],{"class":105,"line":25},[103,21557,21558],{"class":113},"B\n",[103,21560,21561],{"class":105,"line":1168},[103,21562,1535],{"class":113},[103,21564,21565],{"class":105,"line":1183},[103,21566,21567],{"class":113},"    A a;\n",[103,21569,21570],{"class":105,"line":1189},[103,21571,1554],{"class":113},[103,21573,21574],{"class":105,"line":1203},[103,21575,21576],{"class":172},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21578,21579],{},"案例",[94,21581,21583],{"className":96,"code":21582,"language":98,"meta":24,"style":24},"\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",[100,21584,21585,21590,21597,21601,21606,21611,21625,21629,21639,21650,21654,21661,21665,21678,21682,21687,21692,21696,21702,21706,21710,21714,21745,21749,21760,21764,21770,21774,21787,21791,21795,21799,21804,21809,21813,21821,21825,21842,21861,21865,21873,21877,21883],{"__ignoreMap":24},[103,21586,21587],{"class":105,"line":106},[103,21588,21589],{"class":172},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[103,21591,21592,21594],{"class":105,"line":25},[103,21593,14684],{"class":109},[103,21595,21596],{"class":1952}," Phone\n",[103,21598,21599],{"class":105,"line":1168},[103,21600,1535],{"class":113},[103,21602,21603],{"class":105,"line":1183},[103,21604,21605],{"class":113},"public：\n",[103,21607,21608],{"class":105,"line":1189},[103,21609,21610],{"class":172},"    \u002F\u002F 赋值(构造函数)\n",[103,21612,21613,21616,21618,21620,21623],{"class":105,"line":1203},[103,21614,21615],{"class":1952},"    Phone",[103,21617,114],{"class":113},[103,21619,14907],{"class":1952},[103,21621,21622],{"class":5206}," pName",[103,21624,120],{"class":113},[103,21626,21627],{"class":105,"line":1209},[103,21628,2019],{"class":113},[103,21630,21631,21634,21636],{"class":105,"line":1300},[103,21632,21633],{"class":113},"        m_pName",[103,21635,159],{"class":109},[103,21637,21638],{"class":113},"pName;\n",[103,21640,21641,21643,21645,21648],{"class":105,"line":1306},[103,21642,3440],{"class":113},[103,21644,1157],{"class":109},[103,21646,21647],{"class":218},"\"Phone的构造函数调用\"",[103,21649,1279],{"class":113},[103,21651,21652],{"class":105,"line":1318},[103,21653,2176],{"class":113},[103,21655,21656,21659],{"class":105,"line":1601},[103,21657,21658],{"class":1952},"    ~Phone",[103,21660,1965],{"class":113},[103,21662,21663],{"class":105,"line":1606},[103,21664,2019],{"class":113},[103,21666,21667,21669,21671,21674,21676],{"class":105,"line":1612},[103,21668,3440],{"class":113},[103,21670,1157],{"class":109},[103,21672,21673],{"class":218},"\"Phone析构函数调用\"",[103,21675,1157],{"class":109},[103,21677,1180],{"class":113},[103,21679,21680],{"class":105,"line":1617},[103,21681,2176],{"class":113},[103,21683,21684],{"class":105,"line":1631},[103,21685,21686],{"class":172},"    \u002F\u002F\n",[103,21688,21689],{"class":105,"line":1636},[103,21690,21691],{"class":113},"    string m_PName;\n",[103,21693,21694],{"class":105,"line":1642},[103,21695,3984],{"class":113},[103,21697,21698,21700],{"class":105,"line":1663},[103,21699,14684],{"class":109},[103,21701,15161],{"class":1952},[103,21703,21704],{"class":105,"line":1668},[103,21705,1535],{"class":113},[103,21707,21708],{"class":105,"line":1682},[103,21709,14706],{"class":109},[103,21711,21712],{"class":105,"line":1687},[103,21713,16984],{"class":172},[103,21715,21716,21718,21720,21722,21724,21726,21728,21731,21734,21736,21739,21742],{"class":105,"line":1716},[103,21717,18509],{"class":1952},[103,21719,114],{"class":113},[103,21721,14907],{"class":1952},[103,21723,14910],{"class":5206},[103,21725,491],{"class":113},[103,21727,14907],{"class":1952},[103,21729,21730],{"class":5206}," pname",[103,21732,21733],{"class":113},"):",[103,21735,15000],{"class":1952},[103,21737,21738],{"class":113},"(name),m_phone.",[103,21740,21741],{"class":1952},"m_PName",[103,21743,21744],{"class":113},"(pname) \n",[103,21746,21747],{"class":105,"line":1721},[103,21748,2019],{"class":113},[103,21750,21751,21753,21755,21758],{"class":105,"line":1738},[103,21752,3440],{"class":113},[103,21754,1157],{"class":109},[103,21756,21757],{"class":218},"\"Person的构造函数调用\"",[103,21759,1279],{"class":113},[103,21761,21762],{"class":105,"line":1743},[103,21763,2176],{"class":113},[103,21765,21766,21768],{"class":105,"line":1748},[103,21767,18542],{"class":1952},[103,21769,1965],{"class":113},[103,21771,21772],{"class":105,"line":1753},[103,21773,2019],{"class":113},[103,21775,21776,21778,21780,21783,21785],{"class":105,"line":1767},[103,21777,3440],{"class":113},[103,21779,1157],{"class":109},[103,21781,21782],{"class":218},"\"Person析构函数调用\"",[103,21784,1157],{"class":109},[103,21786,1180],{"class":113},[103,21788,21789],{"class":105,"line":1772},[103,21790,2176],{"class":113},[103,21792,21793],{"class":105,"line":2566},[103,21794,7770],{"class":172},[103,21796,21797],{"class":105,"line":2580},[103,21798,14882],{"class":113},[103,21800,21801],{"class":105,"line":2588},[103,21802,21803],{"class":172},"    \u002F\u002F手机\n",[103,21805,21806],{"class":105,"line":2593},[103,21807,21808],{"class":113},"    Phone m_Phone;\n",[103,21810,21811],{"class":105,"line":2599},[103,21812,3984],{"class":113},[103,21814,21815,21817,21819],{"class":105,"line":2605},[103,21816,5354],{"class":109},[103,21818,5578],{"class":1952},[103,21820,1965],{"class":113},[103,21822,21823],{"class":105,"line":2610},[103,21824,1535],{"class":113},[103,21826,21827,21829,21831,21833,21835,21837,21840],{"class":105,"line":7938},[103,21828,19421],{"class":113},[103,21830,14],{"class":1952},[103,21832,114],{"class":113},[103,21834,7906],{"class":218},[103,21836,491],{"class":113},[103,21838,21839],{"class":218},"\"安卓\"",[103,21841,2708],{"class":113},[103,21843,21844,21846,21848,21851,21853,21856,21858],{"class":105,"line":7962},[103,21845,1540],{"class":113},[103,21847,1157],{"class":109},[103,21849,21850],{"class":113},"p.Name",[103,21852,1157],{"class":109},[103,21854,21855],{"class":218},"\"拿着：\"",[103,21857,1157],{"class":109},[103,21859,21860],{"class":113},"p.m_phone.m_PName;\n",[103,21862,21863],{"class":105,"line":7967},[103,21864,1554],{"class":113},[103,21866,21867,21869,21871],{"class":105,"line":7973},[103,21868,117],{"class":109},[103,21870,1962],{"class":1952},[103,21872,1965],{"class":113},[103,21874,21875],{"class":105,"line":8000},[103,21876,1535],{"class":113},[103,21878,21879,21881],{"class":105,"line":8005},[103,21880,5623],{"class":1952},[103,21882,5626],{"class":113},[103,21884,21885],{"class":105,"line":8011},[103,21886,1554],{"class":113},[14,21888,9015],{},[94,21890,21892],{"className":96,"code":21891,"language":98,"meta":24,"style":24},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[100,21893,21894,21899],{"__ignoreMap":24},[103,21895,21896],{"class":105,"line":106},[103,21897,21898],{"class":172},"    \u002F\u002F不需要写这个：\n",[103,21900,21901],{"class":105,"line":25},[103,21902,21903],{"class":172},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21905,21906],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[94,21908,21910],{"className":96,"code":21909,"language":98,"meta":24,"style":24},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[100,21911,21912],{"__ignoreMap":24},[103,21913,21914,21916,21919,21921,21924,21927],{"class":105,"line":106},[103,21915,19036],{"class":1952},[103,21917,21918],{"class":113},"(string name.string pname):",[103,21920,15000],{"class":1952},[103,21922,21923],{"class":113},"(name),",[103,21925,21926],{"class":1952},"m_phone",[103,21928,21929],{"class":113},"(pname) {}\n",[14,21931,21932,21933,159,21936],{},"采用的是隐式转换法，实际为如下：\n",[100,21934,21935],{},"m_phone(pname)",[100,21937,21938],{},"Phone m_phone=pname",[14,21940,21941,21944],{},[263,21942,21943],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,21946,21947],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[74,21949,21951],{"id":21950},"_828静态对象","8.2.8静态对象",[14,21953,21954],{},"静态对象在成员对象前static，称为静态对象",[14,21956,21957],{},"静态对象分为两类：",[57,21959,21960],{},[60,21961,21962],{},"静态成员变量",[1120,21964,21965,21968,21971],{},[60,21966,21967],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[60,21969,21970],{},"②在编译阶段分配内存",[60,21972,21973],{},"③类内声明，类外初始化",[57,21975,21976],{"start":25},[60,21977,21978],{},"静态成员函数",[1120,21980,21981,21984],{},[60,21982,21983],{},"①所有对象共享同一个函数",[60,21985,21986],{},"②静态成员函数只能访问静态成员变量",[21988,21989,21991],"h4",{"id":21990},"_8281静态成员变量","8.2.8.1静态成员变量",[94,21993,21995],{"className":96,"code":21994,"language":98,"meta":24,"style":24},"#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",[100,21996,21997,22003,22013,22019,22023,22027,22032,22037,22042,22050,22054,22058,22062,22070,22074,22078,22083,22096,22100,22108,22112,22118],{"__ignoreMap":24},[103,21998,21999,22001],{"class":105,"line":106},[103,22000,1938],{"class":109},[103,22002,1941],{"class":218},[103,22004,22005,22007,22009,22011],{"class":105,"line":25},[103,22006,1946],{"class":109},[103,22008,1949],{"class":109},[103,22010,1953],{"class":1952},[103,22012,1279],{"class":113},[103,22014,22015,22017],{"class":105,"line":1168},[103,22016,14684],{"class":109},[103,22018,15161],{"class":1952},[103,22020,22021],{"class":105,"line":1183},[103,22022,1535],{"class":113},[103,22024,22025],{"class":105,"line":1189},[103,22026,14706],{"class":109},[103,22028,22029],{"class":105,"line":1203},[103,22030,22031],{"class":172},"    \u002F\u002F非静态成员变量\n",[103,22033,22034],{"class":105,"line":1209},[103,22035,22036],{"class":172},"    \u002F\u002F int m_A;\n",[103,22038,22039],{"class":105,"line":1300},[103,22040,22041],{"class":172},"    \u002F\u002F定义静态成员变量\n",[103,22043,22044,22046,22048],{"class":105,"line":1306},[103,22045,11010],{"class":109},[103,22047,2371],{"class":109},[103,22049,21382],{"class":113},[103,22051,22052],{"class":105,"line":1318},[103,22053,2389],{"emptyLinePlaceholder":30},[103,22055,22056],{"class":105,"line":1601},[103,22057,2389],{"emptyLinePlaceholder":30},[103,22059,22060],{"class":105,"line":1606},[103,22061,3984],{"class":113},[103,22063,22064,22066,22068],{"class":105,"line":1612},[103,22065,5354],{"class":109},[103,22067,5578],{"class":1952},[103,22069,1965],{"class":113},[103,22071,22072],{"class":105,"line":1617},[103,22073,1535],{"class":113},[103,22075,22076],{"class":105,"line":1631},[103,22077,15303],{"class":113},[103,22079,22080],{"class":105,"line":1636},[103,22081,22082],{"class":172},"    \u002F\u002F输出类成员变量这块内存\n",[103,22084,22085,22087,22089,22092,22094],{"class":105,"line":1642},[103,22086,1540],{"class":113},[103,22088,1157],{"class":109},[103,22090,22091],{"class":113},"p.m_A",[103,22093,1157],{"class":109},[103,22095,1180],{"class":113},[103,22097,22098],{"class":105,"line":1663},[103,22099,1554],{"class":113},[103,22101,22102,22104,22106],{"class":105,"line":1668},[103,22103,117],{"class":109},[103,22105,1962],{"class":1952},[103,22107,1965],{"class":113},[103,22109,22110],{"class":105,"line":1682},[103,22111,1535],{"class":113},[103,22113,22114,22116],{"class":105,"line":1687},[103,22115,5623],{"class":1952},[103,22117,1965],{"class":113},[103,22119,22120],{"class":105,"line":1716},[103,22121,1554],{"class":113},[14,22123,22124],{},"此时输出是报错的：无法解析外部命令",[14,22126,22127],{},"解决这一问题：必须用到类内声明，类外初始化操作",[94,22129,22131],{"className":96,"code":22130,"language":98,"meta":24,"style":24},"#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",[100,22132,22133,22139,22149,22155,22159,22163,22168,22176,22180,22185,22200,22208,22212,22216,22221,22226,22238,22243,22254,22259,22264,22277,22281,22289,22293,22299],{"__ignoreMap":24},[103,22134,22135,22137],{"class":105,"line":106},[103,22136,1938],{"class":109},[103,22138,1941],{"class":218},[103,22140,22141,22143,22145,22147],{"class":105,"line":25},[103,22142,1946],{"class":109},[103,22144,1949],{"class":109},[103,22146,1953],{"class":1952},[103,22148,1279],{"class":113},[103,22150,22151,22153],{"class":105,"line":1168},[103,22152,14684],{"class":109},[103,22154,15161],{"class":1952},[103,22156,22157],{"class":105,"line":1183},[103,22158,1535],{"class":113},[103,22160,22161],{"class":105,"line":1189},[103,22162,14706],{"class":109},[103,22164,22165],{"class":105,"line":1203},[103,22166,22167],{"class":172},"    \u002F\u002F类内声明\n",[103,22169,22170,22172,22174],{"class":105,"line":1209},[103,22171,11010],{"class":109},[103,22173,2371],{"class":109},[103,22175,21382],{"class":113},[103,22177,22178],{"class":105,"line":1300},[103,22179,3984],{"class":113},[103,22181,22182],{"class":105,"line":1306},[103,22183,22184],{"class":172},"\u002F\u002F类外初始化\n",[103,22186,22187,22189,22191,22194,22196,22198],{"class":105,"line":1318},[103,22188,117],{"class":109},[103,22190,15559],{"class":1952},[103,22192,22193],{"class":113},"::m_A",[103,22195,159],{"class":109},[103,22197,559],{"class":162},[103,22199,1279],{"class":113},[103,22201,22202,22204,22206],{"class":105,"line":1601},[103,22203,5354],{"class":109},[103,22205,5578],{"class":1952},[103,22207,1965],{"class":113},[103,22209,22210],{"class":105,"line":1606},[103,22211,1535],{"class":113},[103,22213,22214],{"class":105,"line":1612},[103,22215,15303],{"class":113},[103,22217,22218],{"class":105,"line":1617},[103,22219,22220],{"class":172},"    \u002F\u002F访问变量的原内存空间\n",[103,22222,22223],{"class":105,"line":1631},[103,22224,22225],{"class":172},"    \u002F\u002F100\n",[103,22227,22228,22230,22232,22234,22236],{"class":105,"line":1636},[103,22229,1540],{"class":113},[103,22231,1157],{"class":109},[103,22233,22091],{"class":113},[103,22235,1157],{"class":109},[103,22237,1180],{"class":113},[103,22239,22240],{"class":105,"line":1642},[103,22241,22242],{"class":113},"    Person p2;\n",[103,22244,22245,22248,22250,22252],{"class":105,"line":1663},[103,22246,22247],{"class":113},"    p2.m_A",[103,22249,159],{"class":109},[103,22251,1711],{"class":162},[103,22253,1279],{"class":113},[103,22255,22256],{"class":105,"line":1668},[103,22257,22258],{"class":172},"    \u002F\u002F继续访问这片空间\n",[103,22260,22261],{"class":105,"line":1682},[103,22262,22263],{"class":172},"    \u002F\u002F200\n",[103,22265,22266,22268,22270,22273,22275],{"class":105,"line":1687},[103,22267,1540],{"class":113},[103,22269,1157],{"class":109},[103,22271,22272],{"class":113},"p2.m_A",[103,22274,1157],{"class":109},[103,22276,1180],{"class":113},[103,22278,22279],{"class":105,"line":1716},[103,22280,1554],{"class":113},[103,22282,22283,22285,22287],{"class":105,"line":1721},[103,22284,117],{"class":109},[103,22286,1962],{"class":1952},[103,22288,1965],{"class":113},[103,22290,22291],{"class":105,"line":1738},[103,22292,1535],{"class":113},[103,22294,22295,22297],{"class":105,"line":1743},[103,22296,5623],{"class":1952},[103,22298,5626],{"class":113},[103,22300,22301],{"class":105,"line":1748},[103,22302,1554],{"class":113},[14,22304,22305],{},[263,22306,22307],{},"静态变量的访问",[94,22309,22311],{"className":96,"code":22310,"language":98,"meta":24,"style":24},"#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",[100,22312,22313,22319,22329,22335,22339,22343,22347,22355,22359,22364,22372,22376,22380,22394,22409,22417,22421,22426,22431,22436,22441,22453,22458,22463,22477,22494,22498,22506,22510,22516],{"__ignoreMap":24},[103,22314,22315,22317],{"class":105,"line":106},[103,22316,1938],{"class":109},[103,22318,1941],{"class":218},[103,22320,22321,22323,22325,22327],{"class":105,"line":25},[103,22322,1946],{"class":109},[103,22324,1949],{"class":109},[103,22326,1953],{"class":1952},[103,22328,1279],{"class":113},[103,22330,22331,22333],{"class":105,"line":1168},[103,22332,14684],{"class":109},[103,22334,15161],{"class":1952},[103,22336,22337],{"class":105,"line":1183},[103,22338,1535],{"class":113},[103,22340,22341],{"class":105,"line":1189},[103,22342,14706],{"class":109},[103,22344,22345],{"class":105,"line":1203},[103,22346,22167],{"class":172},[103,22348,22349,22351,22353],{"class":105,"line":1209},[103,22350,11010],{"class":109},[103,22352,2371],{"class":109},[103,22354,21382],{"class":113},[103,22356,22357],{"class":105,"line":1300},[103,22358,15212],{"class":109},[103,22360,22361],{"class":105,"line":1306},[103,22362,22363],{"class":172},"    \u002F\u002F静态成员变量也是有访问权限的\n",[103,22365,22366,22368,22370],{"class":105,"line":1318},[103,22367,11010],{"class":109},[103,22369,2371],{"class":109},[103,22371,21389],{"class":113},[103,22373,22374],{"class":105,"line":1601},[103,22375,3984],{"class":113},[103,22377,22378],{"class":105,"line":1606},[103,22379,22184],{"class":172},[103,22381,22382,22384,22386,22388,22390,22392],{"class":105,"line":1612},[103,22383,117],{"class":109},[103,22385,15559],{"class":1952},[103,22387,22193],{"class":113},[103,22389,159],{"class":109},[103,22391,559],{"class":162},[103,22393,1279],{"class":113},[103,22395,22396,22398,22400,22403,22405,22407],{"class":105,"line":1617},[103,22397,117],{"class":109},[103,22399,15559],{"class":1952},[103,22401,22402],{"class":113},"::m_B",[103,22404,159],{"class":109},[103,22406,813],{"class":162},[103,22408,1279],{"class":113},[103,22410,22411,22413,22415],{"class":105,"line":1631},[103,22412,5354],{"class":109},[103,22414,5647],{"class":1952},[103,22416,1965],{"class":113},[103,22418,22419],{"class":105,"line":1636},[103,22420,1535],{"class":113},[103,22422,22423],{"class":105,"line":1642},[103,22424,22425],{"class":172},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[103,22427,22428],{"class":105,"line":1663},[103,22429,22430],{"class":172},"    \u002F\u002F静态成员变量有两种访问方式：\n",[103,22432,22433],{"class":105,"line":1668},[103,22434,22435],{"class":172},"    \u002F\u002F1.通过对象进行访问\n",[103,22437,22438],{"class":105,"line":1682},[103,22439,22440],{"class":113},"    Person p;  \n",[103,22442,22443,22445,22447,22449,22451],{"class":105,"line":1687},[103,22444,1540],{"class":113},[103,22446,1157],{"class":109},[103,22448,22091],{"class":113},[103,22450,1157],{"class":109},[103,22452,1180],{"class":113},[103,22454,22455],{"class":105,"line":1716},[103,22456,22457],{"class":172},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[103,22459,22460],{"class":105,"line":1721},[103,22461,22462],{"class":172},"    \u002F\u002F2.通过类名进行访问\n",[103,22464,22465,22467,22469,22471,22473,22475],{"class":105,"line":1738},[103,22466,1540],{"class":113},[103,22468,1157],{"class":109},[103,22470,19036],{"class":1952},[103,22472,22193],{"class":113},[103,22474,1157],{"class":109},[103,22476,1180],{"class":113},[103,22478,22479,22481,22483,22485,22487,22489,22491],{"class":105,"line":1743},[103,22480,1540],{"class":113},[103,22482,1157],{"class":109},[103,22484,19036],{"class":1952},[103,22486,22402],{"class":113},[103,22488,1157],{"class":109},[103,22490,1227],{"class":113},[103,22492,22493],{"class":172}," \u002F\u002F没有访问权限，报错\n",[103,22495,22496],{"class":105,"line":1748},[103,22497,1554],{"class":113},[103,22499,22500,22502,22504],{"class":105,"line":1753},[103,22501,117],{"class":109},[103,22503,1962],{"class":1952},[103,22505,1965],{"class":113},[103,22507,22508],{"class":105,"line":1767},[103,22509,1535],{"class":113},[103,22511,22512,22514],{"class":105,"line":1772},[103,22513,5692],{"class":1952},[103,22515,5626],{"class":113},[103,22517,22518],{"class":105,"line":2566},[103,22519,1554],{"class":113},[21988,22521,22523],{"id":22522},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22525,22526],{},"1.静态成员函数定义与访问",[94,22528,22530],{"className":96,"code":22529,"language":98,"meta":24,"style":24},"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",[100,22531,22532,22538,22542,22546,22551,22562,22566,22580,22584,22588,22596,22600,22605,22610,22614,22622,22627,22637],{"__ignoreMap":24},[103,22533,22534,22536],{"class":105,"line":106},[103,22535,14684],{"class":109},[103,22537,15161],{"class":1952},[103,22539,22540],{"class":105,"line":25},[103,22541,1535],{"class":113},[103,22543,22544],{"class":105,"line":1168},[103,22545,14706],{"class":109},[103,22547,22548],{"class":105,"line":1183},[103,22549,22550],{"class":172},"    \u002F\u002F在公共权限下定义静态成员函数\n",[103,22552,22553,22555,22558,22560],{"class":105,"line":1189},[103,22554,11010],{"class":109},[103,22556,22557],{"class":109}," void",[103,22559,11375],{"class":1952},[103,22561,1965],{"class":113},[103,22563,22564],{"class":105,"line":1203},[103,22565,2019],{"class":113},[103,22567,22568,22571,22573,22576,22578],{"class":105,"line":1209},[103,22569,22570],{"class":113},"        coout",[103,22572,1157],{"class":109},[103,22574,22575],{"class":218},"\"静态成员函数的调用\"",[103,22577,1157],{"class":109},[103,22579,1180],{"class":113},[103,22581,22582],{"class":105,"line":1300},[103,22583,2176],{"class":113},[103,22585,22586],{"class":105,"line":1306},[103,22587,3984],{"class":113},[103,22589,22590,22592,22594],{"class":105,"line":1318},[103,22591,5354],{"class":109},[103,22593,5578],{"class":1952},[103,22595,1965],{"class":113},[103,22597,22598],{"class":105,"line":1601},[103,22599,1535],{"class":113},[103,22601,22602],{"class":105,"line":1606},[103,22603,22604],{"class":172},"    \u002F\u002F静态成员函数的调用方式:\n",[103,22606,22607],{"class":105,"line":1612},[103,22608,22609],{"class":172},"    \u002F\u002F1.通过对象访问\n",[103,22611,22612],{"class":105,"line":1617},[103,22613,15303],{"class":113},[103,22615,22616,22618,22620],{"class":105,"line":1631},[103,22617,15856],{"class":113},[103,22619,11541],{"class":1952},[103,22621,5626],{"class":113},[103,22623,22624],{"class":105,"line":1636},[103,22625,22626],{"class":172},"    \u002F\u002F2.通过类名访问\n",[103,22628,22629,22631,22633,22635],{"class":105,"line":1642},[103,22630,18509],{"class":1952},[103,22632,17722],{"class":113},[103,22634,11541],{"class":1952},[103,22636,5626],{"class":113},[103,22638,22639],{"class":105,"line":1663},[103,22640,1554],{"class":113},[57,22642,22643],{"start":25},[60,22644,22645],{},"静态成员函数只能访问静态成员变量",[94,22647,22649],{"className":96,"code":22648,"language":98,"meta":24,"style":24},"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",[100,22650,22651,22657,22661,22665,22669,22679,22683,22697,22702,22714,22718,22729,22739,22743,22747,22751,22761,22765,22778,22782,22786,22790,22794,22808,22816,22820,22824,22828,22832,22840,22844,22854,22859,22863,22871,22875,22881],{"__ignoreMap":24},[103,22652,22653,22655],{"class":105,"line":106},[103,22654,14684],{"class":109},[103,22656,15161],{"class":1952},[103,22658,22659],{"class":105,"line":25},[103,22660,1535],{"class":113},[103,22662,22663],{"class":105,"line":1168},[103,22664,14706],{"class":109},[103,22666,22667],{"class":105,"line":1183},[103,22668,22550],{"class":172},[103,22670,22671,22673,22675,22677],{"class":105,"line":1189},[103,22672,11010],{"class":109},[103,22674,22557],{"class":109},[103,22676,11375],{"class":1952},[103,22678,1965],{"class":113},[103,22680,22681],{"class":105,"line":1203},[103,22682,2019],{"class":113},[103,22684,22685,22688,22690,22692,22694],{"class":105,"line":1209},[103,22686,22687],{"class":113},"        m_A",[103,22689,159],{"class":109},[103,22691,424],{"class":162},[103,22693,169],{"class":113},[103,22695,22696],{"class":172}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[103,22698,22699],{"class":105,"line":1300},[103,22700,22701],{"class":172},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[103,22703,22704,22706,22708,22710,22712],{"class":105,"line":1306},[103,22705,22570],{"class":113},[103,22707,1157],{"class":109},[103,22709,22575],{"class":218},[103,22711,1157],{"class":109},[103,22713,1180],{"class":113},[103,22715,22716],{"class":105,"line":1318},[103,22717,2176],{"class":113},[103,22719,22720,22722,22724,22726],{"class":105,"line":1601},[103,22721,11010],{"class":109},[103,22723,2371],{"class":109},[103,22725,15438],{"class":113},[103,22727,22728],{"class":172}," \u002F\u002F静态成员变量\n",[103,22730,22731,22733,22736],{"class":105,"line":1606},[103,22732,1974],{"class":109},[103,22734,22735],{"class":113}," m_B;",[103,22737,22738],{"class":172}," \u002F\u002F非静态成员变量\n",[103,22740,22741],{"class":105,"line":1612},[103,22742,2389],{"emptyLinePlaceholder":30},[103,22744,22745],{"class":105,"line":1617},[103,22746,15212],{"class":109},[103,22748,22749],{"class":105,"line":1631},[103,22750,22363],{"class":172},[103,22752,22753,22755,22757,22759],{"class":105,"line":1636},[103,22754,11010],{"class":109},[103,22756,22557],{"class":109},[103,22758,13608],{"class":1952},[103,22760,1965],{"class":113},[103,22762,22763],{"class":105,"line":1642},[103,22764,2019],{"class":113},[103,22766,22767,22769,22771,22774,22776],{"class":105,"line":1663},[103,22768,3440],{"class":113},[103,22770,1157],{"class":109},[103,22772,22773],{"class":218},"\"这是私有权限下的静态函数调用\"",[103,22775,1157],{"class":109},[103,22777,1180],{"class":113},[103,22779,22780],{"class":105,"line":1668},[103,22781,2176],{"class":113},[103,22783,22784],{"class":105,"line":1682},[103,22785,2389],{"emptyLinePlaceholder":30},[103,22787,22788],{"class":105,"line":1687},[103,22789,2389],{"emptyLinePlaceholder":30},[103,22791,22792],{"class":105,"line":1716},[103,22793,3984],{"class":113},[103,22795,22796,22798,22800,22802,22804,22806],{"class":105,"line":1721},[103,22797,117],{"class":109},[103,22799,15559],{"class":1952},[103,22801,22193],{"class":113},[103,22803,159],{"class":109},[103,22805,305],{"class":162},[103,22807,1279],{"class":113},[103,22809,22810,22812,22814],{"class":105,"line":1738},[103,22811,5354],{"class":109},[103,22813,5578],{"class":1952},[103,22815,1965],{"class":113},[103,22817,22818],{"class":105,"line":1743},[103,22819,1535],{"class":113},[103,22821,22822],{"class":105,"line":1748},[103,22823,22604],{"class":172},[103,22825,22826],{"class":105,"line":1753},[103,22827,22609],{"class":172},[103,22829,22830],{"class":105,"line":1767},[103,22831,15303],{"class":113},[103,22833,22834,22836,22838],{"class":105,"line":1772},[103,22835,15856],{"class":113},[103,22837,11541],{"class":1952},[103,22839,5626],{"class":113},[103,22841,22842],{"class":105,"line":2566},[103,22843,22626],{"class":172},[103,22845,22846,22848,22850,22852],{"class":105,"line":2580},[103,22847,18509],{"class":1952},[103,22849,17722],{"class":113},[103,22851,11541],{"class":1952},[103,22853,5626],{"class":113},[103,22855,22856],{"class":105,"line":2588},[103,22857,22858],{"class":172},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[103,22860,22861],{"class":105,"line":2593},[103,22862,1554],{"class":113},[103,22864,22865,22867,22869],{"class":105,"line":2599},[103,22866,117],{"class":109},[103,22868,1962],{"class":1952},[103,22870,1965],{"class":113},[103,22872,22873],{"class":105,"line":2605},[103,22874,1535],{"class":113},[103,22876,22877,22879],{"class":105,"line":2610},[103,22878,5623],{"class":1952},[103,22880,5626],{"class":113},[103,22882,22883],{"class":105,"line":7938},[103,22884,1554],{"class":113},[74,22886,22888],{"id":22887},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21988,22890,22892],{"id":22891},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22894,22895],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22897,22898],{},"只有非静态成员变量才属于类的对象上",[22900,22901,22903],"h5",{"id":22902},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[94,22905,22907],{"className":96,"code":22906,"language":98,"meta":24,"style":24},"#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",[100,22908,22909,22916,22926,22932,22936,22940,22944,22952,22956,22960,22983,22987,22995,22999,23005],{"__ignoreMap":24},[103,22910,22911,22913],{"class":105,"line":106},[103,22912,1938],{"class":109},[103,22914,22915],{"class":218},"\u003Ciostraem>\n",[103,22917,22918,22920,22922,22924],{"class":105,"line":25},[103,22919,1946],{"class":109},[103,22921,1949],{"class":109},[103,22923,1953],{"class":1952},[103,22925,1279],{"class":113},[103,22927,22928,22930],{"class":105,"line":1168},[103,22929,14684],{"class":109},[103,22931,15161],{"class":1952},[103,22933,22934],{"class":105,"line":1183},[103,22935,1535],{"class":113},[103,22937,22938],{"class":105,"line":1189},[103,22939,2389],{"emptyLinePlaceholder":30},[103,22941,22942],{"class":105,"line":1203},[103,22943,3984],{"class":113},[103,22945,22946,22948,22950],{"class":105,"line":1209},[103,22947,5354],{"class":109},[103,22949,5578],{"class":1952},[103,22951,1965],{"class":113},[103,22953,22954],{"class":105,"line":1300},[103,22955,1535],{"class":113},[103,22957,22958],{"class":105,"line":1306},[103,22959,15303],{"class":113},[103,22961,22962,22964,22966,22969,22971,22974,22976,22978,22980],{"class":105,"line":1318},[103,22963,1540],{"class":113},[103,22965,1157],{"class":109},[103,22967,22968],{"class":218},"\"size of p=\"",[103,22970,1157],{"class":109},[103,22972,22973],{"class":1952},"sizeoif",[103,22975,6529],{"class":113},[103,22977,1157],{"class":109},[103,22979,1227],{"class":113},[103,22981,22982],{"class":172}," \u002F\u002F查看这个空类的占用的内存空间\n",[103,22984,22985],{"class":105,"line":1601},[103,22986,1554],{"class":113},[103,22988,22989,22991,22993],{"class":105,"line":1606},[103,22990,117],{"class":109},[103,22992,1962],{"class":1952},[103,22994,1965],{"class":113},[103,22996,22997],{"class":105,"line":1612},[103,22998,1535],{"class":113},[103,23000,23001,23003],{"class":105,"line":1617},[103,23002,5623],{"class":1952},[103,23004,5626],{"class":113},[103,23006,23007],{"class":105,"line":1631},[103,23008,1554],{"class":113},[14,23010,23011],{},"输出结果为：size of p=1",[14,23013,23014],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23016,23017],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22900,23019,23021],{"id":23020},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[94,23023,23025],{"className":96,"code":23024,"language":98,"meta":24,"style":24},"#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",[100,23026,23027,23033,23043,23051,23055,23064,23068,23076,23080,23084,23103,23107,23111,23119,23123,23129],{"__ignoreMap":24},[103,23028,23029,23031],{"class":105,"line":106},[103,23030,1938],{"class":109},[103,23032,1941],{"class":218},[103,23034,23035,23037,23039,23041],{"class":105,"line":25},[103,23036,1946],{"class":109},[103,23038,1949],{"class":109},[103,23040,1953],{"class":1952},[103,23042,1279],{"class":113},[103,23044,23045,23047,23049],{"class":105,"line":1168},[103,23046,14684],{"class":109},[103,23048,15559],{"class":1952},[103,23050,2663],{"class":113},[103,23052,23053],{"class":105,"line":1183},[103,23054,1535],{"class":113},[103,23056,23057,23059,23061],{"class":105,"line":1189},[103,23058,1974],{"class":109},[103,23060,15438],{"class":113},[103,23062,23063],{"class":172},"\u002F\u002F非静态成员变量\n",[103,23065,23066],{"class":105,"line":1203},[103,23067,3984],{"class":113},[103,23069,23070,23072,23074],{"class":105,"line":1209},[103,23071,5354],{"class":109},[103,23073,5578],{"class":1952},[103,23075,1965],{"class":113},[103,23077,23078],{"class":105,"line":1300},[103,23079,1535],{"class":113},[103,23081,23082],{"class":105,"line":1306},[103,23083,15303],{"class":113},[103,23085,23086,23088,23090,23092,23094,23096,23098,23100],{"class":105,"line":1318},[103,23087,1540],{"class":113},[103,23089,1157],{"class":109},[103,23091,22968],{"class":218},[103,23093,1361],{"class":109},[103,23095,6529],{"class":113},[103,23097,1157],{"class":109},[103,23099,1227],{"class":113},[103,23101,23102],{"class":172}," \u002F\u002F查看不是空对象时占用多少内存\n",[103,23104,23105],{"class":105,"line":1601},[103,23106,2389],{"emptyLinePlaceholder":30},[103,23108,23109],{"class":105,"line":1606},[103,23110,1554],{"class":113},[103,23112,23113,23115,23117],{"class":105,"line":1612},[103,23114,117],{"class":109},[103,23116,1962],{"class":1952},[103,23118,1965],{"class":113},[103,23120,23121],{"class":105,"line":1617},[103,23122,1535],{"class":113},[103,23124,23125,23127],{"class":105,"line":1631},[103,23126,5623],{"class":1952},[103,23128,5626],{"class":113},[103,23130,23131],{"class":105,"line":1636},[103,23132,1554],{"class":113},[14,23134,23135],{},"输出结果：size of p=4",[14,23137,23138],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[57,23140,23141],{},[60,23142,23143],{},"如果加上非静态成员变量，Person类修改如下",[94,23145,23147],{"className":96,"code":23146,"language":98,"meta":24,"style":24},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[100,23148,23149,23155,23159,23165,23173,23177,23182],{"__ignoreMap":24},[103,23150,23151,23153],{"class":105,"line":106},[103,23152,14684],{"class":109},[103,23154,15161],{"class":1952},[103,23156,23157],{"class":105,"line":25},[103,23158,1535],{"class":113},[103,23160,23161,23163],{"class":105,"line":1168},[103,23162,1974],{"class":109},[103,23164,21382],{"class":113},[103,23166,23167,23169,23171],{"class":105,"line":1183},[103,23168,11010],{"class":109},[103,23170,2371],{"class":109},[103,23172,21389],{"class":113},[103,23174,23175],{"class":105,"line":1189},[103,23176,3984],{"class":113},[103,23178,23179],{"class":105,"line":1203},[103,23180,23181],{"class":172},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[103,23183,23184,23186,23188,23190,23192,23194],{"class":105,"line":1209},[103,23185,117],{"class":109},[103,23187,15559],{"class":1952},[103,23189,22402],{"class":113},[103,23191,159],{"class":109},[103,23193,305],{"class":162},[103,23195,1279],{"class":113},[14,23197,23198],{},"输出结果：4",[14,23200,23201],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[57,23203,23204],{"start":25},[60,23205,23206],{},"加上非静态成员函数",[94,23208,23210],{"className":96,"code":23209,"language":98,"meta":24,"style":24},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[100,23211,23212,23219,23223,23229,23237,23241,23245,23249],{"__ignoreMap":24},[103,23213,23214,23216],{"class":105,"line":106},[103,23215,14684],{"class":109},[103,23217,23218],{"class":1952},"  Person\n",[103,23220,23221],{"class":105,"line":25},[103,23222,1535],{"class":113},[103,23224,23225,23227],{"class":105,"line":1168},[103,23226,1974],{"class":109},[103,23228,21382],{"class":113},[103,23230,23231,23233,23235],{"class":105,"line":1183},[103,23232,14899],{"class":109},[103,23234,11375],{"class":1952},[103,23236,1965],{"class":113},[103,23238,23239],{"class":105,"line":1189},[103,23240,2019],{"class":113},[103,23242,23243],{"class":105,"line":1203},[103,23244,2389],{"emptyLinePlaceholder":30},[103,23246,23247],{"class":105,"line":1209},[103,23248,2176],{"class":113},[103,23250,23251],{"class":105,"line":1300},[103,23252,3984],{"class":113},[14,23254,23255],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[57,23257,23258],{"start":1168},[60,23259,23260],{},"加上静态成员函数",[94,23262,23264],{"className":96,"code":23263,"language":98,"meta":24,"style":24},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[100,23265,23266,23272,23276,23282,23290,23294,23298,23302,23313,23317,23321,23325],{"__ignoreMap":24},[103,23267,23268,23270],{"class":105,"line":106},[103,23269,14684],{"class":109},[103,23271,23218],{"class":1952},[103,23273,23274],{"class":105,"line":25},[103,23275,1535],{"class":113},[103,23277,23278,23280],{"class":105,"line":1168},[103,23279,1974],{"class":109},[103,23281,21382],{"class":113},[103,23283,23284,23286,23288],{"class":105,"line":1183},[103,23285,14899],{"class":109},[103,23287,11375],{"class":1952},[103,23289,1965],{"class":113},[103,23291,23292],{"class":105,"line":1189},[103,23293,2019],{"class":113},[103,23295,23296],{"class":105,"line":1203},[103,23297,2389],{"emptyLinePlaceholder":30},[103,23299,23300],{"class":105,"line":1209},[103,23301,2176],{"class":113},[103,23303,23304,23306,23308,23311],{"class":105,"line":1300},[103,23305,11010],{"class":109},[103,23307,22557],{"class":109},[103,23309,23310],{"class":1952}," func1",[103,23312,1965],{"class":113},[103,23314,23315],{"class":105,"line":1306},[103,23316,2019],{"class":113},[103,23318,23319],{"class":105,"line":1318},[103,23320,2389],{"emptyLinePlaceholder":30},[103,23322,23323],{"class":105,"line":1601},[103,23324,2176],{"class":113},[103,23326,23327],{"class":105,"line":1606},[103,23328,3984],{"class":113},[14,23330,23198],{},[14,23332,23333],{},"解释：静态成员函数也不属于类上",[5116,23335,7664],{},{"title":24,"searchDepth":25,"depth":25,"links":23337},[23338,23344],{"id":14635,"depth":25,"text":14636,"children":23339},[23340,23341,23342,23343],{"id":14639,"depth":1168,"text":14640},{"id":15364,"depth":1168,"text":15365},{"id":15536,"depth":1168,"text":15537},{"id":15995,"depth":1168,"text":15996},{"id":18367,"depth":25,"text":18368,"children":23345},[23346,23347,23348,23349,23350,23351,23352,23353,23354],{"id":18379,"depth":1168,"text":18380},{"id":18672,"depth":1168,"text":18673},{"id":19163,"depth":1168,"text":19164},{"id":20260,"depth":1168,"text":20261},{"id":20683,"depth":1168,"text":20684},{"id":21162,"depth":1168,"text":21163},{"id":21537,"depth":1168,"text":21538},{"id":21950,"depth":1168,"text":21951},{"id":22887,"depth":1168,"text":22888},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14600,"description":23355},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23362,"title":98,"body":23363,"description":27,"extension":28,"meta":23367,"navigation":30,"path":23369,"seo":23370,"stem":23371,"__hash__":23372},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23364,"toc":23365},[],{"title":24,"searchDepth":25,"depth":25,"links":23366},[],{"category":23368},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":98,"description":27},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23374,"title":23375,"body":23376,"description":24,"extension":28,"meta":23966,"navigation":30,"path":23967,"seo":23968,"stem":23969,"__hash__":23970},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23377,"toc":23948},[23378,23381,23385,23388,23391,23394,23412,23417,23420,23423,23426,23429,23434,23437,23442,23445,23448,23452,23455,23458,23464,23467,23485,23489,23493,23496,23501,23504,23508,23511,23524,23527,23531,23534,23537,23540,23565,23568,23577,23588,23603,23635,23639,23646,23654,23658,23661,23664,23669,23673,23676,23679,23684,23687,23691,23694,23697,23702,23705,23709,23714,23718,23785,23789,23792,23795,23798,23801,23804,23810,23831,23834,23848,23856,23860,23863,23866,23871,23874,23879,23884,23887,23890,23895,23900,23903,23908,23913,23916,23921,23926,23929,23932,23937,23940,23945],[10,23379,23375],{"id":23380},"_1强化学习基本认识",[45,23382,23384],{"id":23383},"_11什么是强化学习","1.1.什么是强化学习",[14,23386,23387],{},"强化学习有两部分组成：智能体和环境；",[14,23389,23390],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23392,23393],{},"强化学习与监督学习的区别:",[57,23395,23396,23399,23402,23405],{},[60,23397,23398],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[60,23400,23401],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[60,23403,23404],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[60,23406,23407,23408,23411],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[263,23409,23410],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23413,23414],{},[1451,23415],{"alt":24,"src":23416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23418,23419],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23421,23422],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23424,23425],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23427,23428],{},"获取奖励",[14,23430,23431],{},[1451,23432],{"alt":24,"src":23433},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23435,23436],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23438,23439],{},[1451,23440],{"alt":24,"src":23441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23443,23444],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23446,23447],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[45,23449,23451],{"id":23450},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23453,23454],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23456,23457],{},"具身智能中的应用",[14,23459,23460,23463],{},[263,23461,23462],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23465,23466],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23468,23469,23470,23473,23474,23477,23478,23481,23482],{},"机器人是",[263,23471,23472],{},"躯体","，深度学习是",[263,23475,23476],{},"神经元****网络","，VLA是",[263,23479,23480],{},"通用的行为逻辑","，而强化学习是",[263,23483,23484],{},"教练",[45,23486,23488],{"id":23487},"_13序列决策","1.3.序列决策",[74,23490,23492],{"id":23491},"_131智能体与环境","1.3.1.智能体与环境",[14,23494,23495],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23497,23498],{},[1451,23499],{"alt":24,"src":23500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23502,23503],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[74,23505,23507],{"id":23506},"_132奖励","1.3.2.奖励",[14,23509,23510],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23512,23513,23514,23523],{},"取某个策略的表现如何。强化学习的目的就是",[263,23515,23516,23517,23522],{},"最大化",[263,23518,23519],{},[263,23520,23521],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23525,23526],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[74,23528,23530],{"id":23529},"_133序列决策","1.3.3.序列决策",[14,23532,23533],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23535,23536],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23538,23539],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23541,23542,23546,23547,23549,23550,23552,23553,23555,23556,13785,23559,13785,23562],{},[23543,23544,23545],"em",{},"Ht"," = ",[23543,23548,709],{},"1*, a",[23543,23551,331],{},", r",[23543,23554,331],{},", . . . ,* ",[23543,23557,23558],{},"ot",[23543,23560,23561],{},", at ,",[23543,23563,23564],{},"rt",[14,23566,23567],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23569,23570,23546,23573,1647,23575,542],{},[23543,23571,23572],{},"st",[23543,23574,166],{},[23543,23576,23545],{},[14,23578,23579,23580,23583,23584,23587],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[263,23581,23582],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[263,23585,23586],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23589,23590,23591,23594,23595,23598,23599,23602],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[263,23592,23593],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[263,23596,23597],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23543,23600,23601],{},"S, A, T, R, Ω, O, γ",")。",[14,23604,23605,23606,23608,23609,23611,23612,114,23614,23617,23618,23620,23621,114,23624,23627,23628,23630,23631,23634],{},"其中 ",[23543,23607,802],{}," 表示状态空间，为隐变量，",[23543,23610,346],{}," 为动作空间，",[23543,23613,827],{},[23543,23615,23616],{},"s ′ |s, a",") 为状态转移概率，",[23543,23619,777],{}," 为奖励函数，",[23543,23622,23623],{},"Ω",[23543,23625,23626],{},"o|s, a",") 为观测概率，",[23543,23629,703],{}," 为观测空间，",[23543,23632,23633],{},"γ"," 为折扣因子。",[45,23636,23638],{"id":23637},"_14动作空间","1.4.动作空间",[14,23640,23641,23642,23645],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[263,23643,23644],{},"动作空间"," ，动作空间分为:",[57,23647,23648,23651],{},[60,23649,23650],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[60,23652,23653],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[45,23655,23657],{"id":23656},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23659,23660],{},"由策略、价值函数、模型三部分组成",[14,23662,23663],{},"这三者组成马尔可夫决策过程",[14,23665,23666],{},[1451,23667],{"alt":24,"src":23668},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[74,23670,23672],{"id":23671},"_151策略","1.5.1.策略",[14,23674,23675],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23677,23678],{},"策略可分为两种：",[14,23680,23681],{},[1451,23682],{"alt":24,"src":23683},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23685,23686],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[74,23688,23690],{"id":23689},"_152价值函数","1.5.2.价值函数",[14,23692,23693],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23695,23696],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23698,23699],{},[1451,23700],{"alt":24,"src":23701},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23703,23704],{},"进入某个状态采取的最优动作可以通过Q函数得到",[74,23706,23708],{"id":23707},"_153模型","1.5.3.模型",[14,23710,23711],{},[1451,23712],{"alt":24,"src":23713},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[45,23715,23717],{"id":23716},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[251,23719,23720,23731],{},[254,23721,23722],{},[257,23723,23724,23728],{},[260,23725,23727],{"align":23726},"left","类型",[260,23729,23730],{"align":23726},"特点",[298,23732,23733,23743,23753,23763,23775],{},[257,23734,23735,23740],{},[303,23736,23737],{"align":23726},[263,23738,23739],{},"基于价值的智能体",[303,23741,23742],{"align":23726},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[257,23744,23745,23750],{},[303,23746,23747],{"align":23726},[263,23748,23749],{},"基于策略的智能体",[303,23751,23752],{"align":23726},"直接学习策略，没有学习价值函数",[257,23754,23755,23760],{},[303,23756,23757],{"align":23726},[263,23758,23759],{},"演员-评论员智能体",[303,23761,23762],{"align":23726},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[257,23764,23765,23770],{},[303,23766,23767],{"align":23726},[263,23768,23769],{},"有模型强化学习智能体",[303,23771,23772],{"align":23726},[1451,23773],{"alt":24,"src":23774},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[257,23776,23777,23782],{},[303,23778,23779],{"align":23726},[263,23780,23781],{},"免模型强化学习智能体",[303,23783,23784],{"align":23726},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[45,23786,23788],{"id":23787},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23790,23791],{},"学习和规划是序列决策的两个基本问题",[14,23793,23794],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23796,23797],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23799,23800],{},"强化学习用到的库：Gym",[14,23802,23803],{},"Gym可以检验强化学习算法的优劣",[14,23805,23806,23809],{},[263,23807,23808],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[94,23811,23815],{"className":23812,"code":23813,"language":23814,"meta":24,"style":24},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[100,23816,23817],{"__ignoreMap":24},[103,23818,23819,23822,23825,23828],{"class":105,"line":106},[103,23820,23821],{"class":1952},"pip",[103,23823,23824],{"class":218}," install",[103,23826,23827],{"class":218}," gym==",[103,23829,23830],{"class":162},"0.25.2\n",[14,23832,23833],{},"显示图形界面需要",[94,23835,23837],{"className":23812,"code":23836,"language":23814,"meta":24,"style":24},"pip install pygame\n",[100,23838,23839],{"__ignoreMap":24},[103,23840,23841,23843,23845],{"class":105,"line":106},[103,23842,23821],{"class":1952},[103,23844,23824],{"class":218},[103,23846,23847],{"class":218}," pygame\n",[14,23849,23850,23851],{},"有关Gym库的相关文档介绍：",[17,23852,23855],{"href":23853,"rel":23854},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[21],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[45,23857,23859],{"id":23858},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23861,23862],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23864,23865],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23867,23868],{},[1451,23869],{"alt":24,"src":23870},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23872,23873],{},"折扣率需要自己来设定",[14,23875,23876],{},[1451,23877],{"alt":24,"src":23878},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[57,23880,23881],{},[60,23882,23883],{},"状态转移函数：",[14,23885,23886],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23888,23889],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23891,23892],{},[1451,23893],{"alt":24,"src":23894},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[57,23896,23897],{"start":25},[60,23898,23899],{},"动作价值函数：",[14,23901,23902],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23904,23905],{},[1451,23906],{"alt":24,"src":23907},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[57,23909,23910],{"start":1168},[60,23911,23912],{},"最优动作价值函数：",[14,23914,23915],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[14,23917,23918],{},[1451,23919],{"alt":24,"src":23920},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[57,23922,23923],{"start":1183},[60,23924,23925],{},"状态价值函数:",[14,23927,23928],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,23930,23931],{},"它衡量的是“一个具体动作”的长期价值",[14,23933,23934],{},[1451,23935],{"alt":24,"src":23936},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,23938,23939],{},"几个价值函数之间的比较：",[14,23941,23942],{},[1451,23943],{"alt":24,"src":23944},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5116,23946,23947],{},"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":24,"searchDepth":25,"depth":25,"links":23949},[23950,23951,23952,23957,23958,23963,23964,23965],{"id":23383,"depth":25,"text":23384},{"id":23450,"depth":25,"text":23451},{"id":23487,"depth":25,"text":23488,"children":23953},[23954,23955,23956],{"id":23491,"depth":1168,"text":23492},{"id":23506,"depth":1168,"text":23507},{"id":23529,"depth":1168,"text":23530},{"id":23637,"depth":25,"text":23638},{"id":23656,"depth":25,"text":23657,"children":23959},[23960,23961,23962],{"id":23671,"depth":1168,"text":23672},{"id":23689,"depth":1168,"text":23690},{"id":23707,"depth":1168,"text":23708},{"id":23716,"depth":25,"text":23717},{"id":23787,"depth":25,"text":23788},{"id":23858,"depth":25,"text":23859},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23375,"description":24},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23972,"title":23973,"body":23974,"description":23981,"extension":28,"meta":23992,"navigation":30,"path":23993,"seo":23994,"stem":23995,"__hash__":23996},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23975,"toc":23990},[23976,23979,23982,23987],[10,23977,23973],{"id":23978},"_2马尔可夫决策过程",[14,23980,23981],{},"这是强化学习的基本框架",[14,23983,23984],{},[1451,23985],{"alt":24,"src":23986},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,23988,23989],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":24,"searchDepth":25,"depth":25,"links":23991},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23973,"description":23981},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":23998,"title":23999,"body":24000,"description":24,"extension":28,"meta":24116,"navigation":30,"path":24117,"seo":24118,"stem":24119,"__hash__":24120},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24001,"toc":24111},[24002,24005,24009,24012,24017,24022,24025,24030,24033,24038,24041,24045,24050,24053,24058,24063,24068,24071,24075,24080,24083,24088,24093,24098,24103,24106],[10,24003,23999],{"id":24004},"_3动作价值函数",[45,24006,24008],{"id":24007},"_31dqn","3.1.DQN",[14,24010,24011],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24013,24014],{},[1451,24015],{"alt":24,"src":24016},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24018,24019],{},[1451,24020],{"alt":24,"src":24021},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24023,24024],{},"DQN算法的描述：",[14,24026,24027],{},[1451,24028],{"alt":24,"src":24029},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24031,24032],{},"这里的Dense指的是全连接层",[14,24034,24035],{},[1451,24036],{"alt":24,"src":24037},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24039,24040],{},"当前观测的状态为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算法",[45,24042,24044],{"id":24043},"_32dqn的举例","3.2.DQN的举例",[14,24046,24047],{},[1451,24048],{"alt":24,"src":24049},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24051,24052],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24054,24055],{},[1451,24056],{"alt":24,"src":24057},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24059,24060],{},[1451,24061],{"alt":24,"src":24062},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24064,24065],{},[1451,24066],{"alt":24,"src":24067},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24069,24070],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[45,24072,24074],{"id":24073},"_33td算法","3.3.TD算法",[14,24076,24077],{},[1451,24078],{"alt":24,"src":24079},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24081,24082],{},"强化学习TD算法公式的粗略解释：",[14,24084,24085],{},[1451,24086],{"alt":24,"src":24087},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24089,24090],{},[1451,24091],{"alt":24,"src":24092},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24094,24095],{},[1451,24096],{"alt":24,"src":24097},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24099,24100],{},[1451,24101],{"alt":24,"src":24102},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24104,24105],{},"TD算法总结：",[14,24107,24108],{},[1451,24109],{"alt":24,"src":24110},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":24,"searchDepth":25,"depth":25,"links":24112},[24113,24114,24115],{"id":24007,"depth":25,"text":24008},{"id":24043,"depth":25,"text":24044},{"id":24073,"depth":25,"text":24074},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":23999,"description":24},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24122,"title":24123,"body":24124,"description":24,"extension":28,"meta":24357,"navigation":30,"path":24358,"seo":24359,"stem":24360,"__hash__":24361},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24125,"toc":24353},[24126,24129,24133,24136,24139,24144,24149,24152,24157,24162,24165,24170,24173,24178,24181,24186,24189,24194,24197,24202,24207,24210,24215,24218,24221,24226,24229,24234,24239,24243,24246,24249,24254,24259,24262,24267,24272,24275,24280,24283,24286,24291,24294,24299,24302,24307,24312,24315,24320,24325,24328,24333,24336,24341,24344],[10,24127,24123],{"id":24128},"_4策略学习",[45,24130,24132],{"id":24131},"_41概念描述","4.1.概念描述",[14,24134,24135],{},"用神经网络（策略网络）近似策略函数",[14,24137,24138],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24140,24141],{},[1451,24142],{"alt":24,"src":24143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24145,24146],{},[1451,24147],{"alt":24,"src":24148},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24150,24151],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24153,24154],{},[1451,24155],{"alt":24,"src":24156},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24158,24159],{},[1451,24160],{"alt":24,"src":24161},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24163,24164],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24166,24167],{},[1451,24168],{"alt":24,"src":24169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24171,24172],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24174,24175],{},[1451,24176],{"alt":24,"src":24177},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24179,24180],{},"改进theta要用到策略梯度算法",[14,24182,24183],{},[1451,24184],{"alt":24,"src":24185},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24187,24188],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24190,24191],{},[1451,24192],{"alt":24,"src":24193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24195,24196],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24198,24199],{},[1451,24200],{"alt":24,"src":24201},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24203,24204],{},[1451,24205],{"alt":24,"src":24206},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24208,24209],{},"梯度公式总结：",[14,24211,24212],{},[1451,24213],{"alt":24,"src":24214},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24216,24217],{},"两个公式的分别应用场景：",[14,24219,24220],{},"对于离散的动作：",[14,24222,24223],{},[1451,24224],{"alt":24,"src":24225},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24227,24228],{},"对于连续的动作：",[14,24230,24231],{},[1451,24232],{"alt":24,"src":24233},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24235,24236],{},[1451,24237],{"alt":24,"src":24238},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[45,24240,24242],{"id":24241},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24244,24245],{},"使用蒙特卡洛来近似计算策略梯度",[14,24247,24248],{},"蒙特卡洛法的解释如下：",[14,24250,24251],{},[1451,24252],{"alt":24,"src":24253},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24255,24256],{},[1451,24257],{"alt":24,"src":24258},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24260,24261],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[57,24263,24264],{},[60,24265,24266],{},"方法一：reinforce算法",[14,24268,24269],{},[1451,24270],{"alt":24,"src":24271},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24273,24274],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[57,24276,24277],{"start":25},[60,24278,24279],{},"方法二：actor-critic算法",[14,24281,24282],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24284,24285],{},"两个网络的构建：",[14,24287,24288],{},[1451,24289],{"alt":24,"src":24290},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24292,24293],{},"actor网路：",[14,24295,24296],{},[1451,24297],{"alt":24,"src":24298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24300,24301],{},"critic网络",[14,24303,24304],{},[1451,24305],{"alt":24,"src":24306},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[57,24308,24309],{"start":1168},[60,24310,24311],{},"网络的训练",[14,24313,24314],{},"网络描述",[14,24316,24317],{},[1451,24318],{"alt":24,"src":24319},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24321,24322],{},[1451,24323],{"alt":24,"src":24324},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24326,24327],{},"TD算法更新梯度：",[14,24329,24330],{},[1451,24331],{"alt":24,"src":24332},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24334,24335],{},"策略网络更新梯度：",[14,24337,24338],{},[1451,24339],{"alt":24,"src":24340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24342,24343],{},"训练整个流程的具体描述：",[14,24345,24346,24349,24350],{},[1451,24347],{"alt":24,"src":24348},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1451,24351],{"alt":24,"src":24352},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":24,"searchDepth":25,"depth":25,"links":24354},[24355,24356],{"id":24131,"depth":25,"text":24132},{"id":24241,"depth":25,"text":24242},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24123,"description":24},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24363,"title":24364,"body":24365,"description":24372,"extension":28,"meta":24422,"navigation":30,"path":24423,"seo":24424,"stem":24425,"__hash__":24426},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24366,"toc":24418},[24367,24370,24373,24377,24380,24385,24389,24392,24397,24400,24405,24410,24413],[10,24368,24364],{"id":24369},"_5alphago算法",[14,24371,24372],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[45,24374,24376],{"id":24375},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24378,24379],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24381,24382],{},[1451,24383],{"alt":24,"src":24384},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[45,24386,24388],{"id":24387},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24390,24391],{},"采用强化学习的方式训练策略网络",[14,24393,24394],{},[1451,24395],{"alt":24,"src":24396},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24398,24399],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24401,24402],{},[1451,24403],{"alt":24,"src":24404},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24406,24407],{},[1451,24408],{"alt":24,"src":24409},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24411,24412],{},"强化学习训练策略网络的总结：",[14,24414,24415],{},[1451,24416],{"alt":24,"src":24417},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":24,"searchDepth":25,"depth":25,"links":24419},[24420,24421],{"id":24375,"depth":25,"text":24376},{"id":24387,"depth":25,"text":24388},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24364,"description":24372},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24428,"title":24429,"body":24430,"description":24437,"extension":28,"meta":24440,"navigation":30,"path":24441,"seo":24442,"stem":24443,"__hash__":24444},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24431,"toc":24438},[24432,24435],[10,24433,24429],{"id":24434},"_6价值网络",[14,24436,24437],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":24,"searchDepth":25,"depth":25,"links":24439},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24429,"description":24437},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24446,"title":24447,"body":24448,"description":24452,"extension":28,"meta":24453,"navigation":30,"path":24454,"seo":24455,"stem":24456,"__hash__":24457},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24449,"toc":24450},[],{"title":24,"searchDepth":25,"depth":25,"links":24451},[],"记录自己的强化学习笔记。",{"category":23368},"\u002Fwiki\u002F2025-12-04",{"title":24447,"description":24452},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24459,"title":24460,"body":24461,"description":27,"extension":28,"meta":24500,"navigation":30,"path":24501,"seo":24502,"stem":24503,"__hash__":24504},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24462,"toc":24498},[24463,24466,24469,24475,24478,24484,24487,24492,24495],[10,24464,24460],{"id":24465},"_1-项目概览与官方资源",[14,24467,24468],{},"官方文档：",[14,24470,24471],{},[17,24472,24473],{"href":24473,"rel":24474},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[21],[14,24476,24477],{},"官方代码仓库：",[14,24479,24480],{},[17,24481,24482],{"href":24482,"rel":24483},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[21],[14,24485,24486],{},"复现大体流程：",[14,24488,24489],{},[1451,24490],{"alt":24,"src":24491},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24493,24494],{},"本教程的目标是打通这条链路：",[14,24496,24497],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":24,"searchDepth":25,"depth":25,"links":24499},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24460,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24506,"title":24507,"body":24508,"description":27,"extension":28,"meta":24624,"navigation":30,"path":24625,"seo":24626,"stem":24627,"__hash__":24628},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24509,"toc":24619},[24510,24513,24517,24520,24527,24531,24534,24543,24553,24557,24587,24590,24616],[10,24511,24507],{"id":24512},"_2-环境准备与设备连接",[45,24514,24516],{"id":24515},"_21-系统与环境","2.1 系统与环境",[14,24518,24519],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24521,24522,24523,24526],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[100,24524,24525],{},"lerobot"," 依赖。",[45,24528,24530],{"id":24529},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24532,24533],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[94,24535,24537],{"className":23812,"code":24536,"language":23814,"meta":24,"style":24},"lerobot-find-out\n",[100,24538,24539],{"__ignoreMap":24},[103,24540,24541],{"class":105,"line":106},[103,24542,24536],{"class":1952},[14,24544,24545,24546,326,24549,24552],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[100,24547,24548],{},"\u002Fdev\u002FttyACM0",[100,24550,24551],{},"\u002Fdev\u002FttyACM1","）。",[45,24554,24556],{"id":24555},"_23-串口授权","2.3 串口授权",[94,24558,24560],{"className":23812,"code":24559,"language":23814,"meta":24,"style":24},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[100,24561,24562,24576],{"__ignoreMap":24},[103,24563,24564,24567,24570,24573],{"class":105,"line":106},[103,24565,24566],{"class":1952},"sudo",[103,24568,24569],{"class":218}," chmod",[103,24571,24572],{"class":162}," 666",[103,24574,24575],{"class":218}," \u002Fdev\u002FttyACM0\n",[103,24577,24578,24580,24582,24584],{"class":105,"line":25},[103,24579,24566],{"class":1952},[103,24581,24569],{"class":218},[103,24583,24572],{"class":162},[103,24585,24586],{"class":218}," \u002Fdev\u002FttyACM1\n",[14,24588,24589],{},"说明：",[1120,24591,24592,24597,24603,24613],{},[60,24593,24594,24596],{},[100,24595,24566],{},"：以 root 权限执行命令。",[60,24598,24599,24602],{},[100,24600,24601],{},"chmod","：修改设备节点权限。",[60,24604,24605,24608,24609,24612],{},[100,24606,24607],{},"666","：",[100,24610,24611],{},"rw-rw-rw-","，所有用户可读写。",[60,24614,24615],{},"串口号必须替换为你机器上的真实端口。",[5116,24617,24618],{},"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":24,"searchDepth":25,"depth":25,"links":24620},[24621,24622,24623],{"id":24515,"depth":25,"text":24516},{"id":24529,"depth":25,"text":24530},{"id":24555,"depth":25,"text":24556},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24507,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24630,"title":24631,"body":24632,"description":27,"extension":28,"meta":24793,"navigation":30,"path":24794,"seo":24795,"stem":24796,"__hash__":24797},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24633,"toc":24789},[24634,24638,24642,24648,24651,24708,24711,24715,24718,24786],[10,24635,24637],{"id":24636},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[45,24639,24641],{"id":24640},"_31-配置电机-id","3.1 配置电机 ID",[14,24643,24644,24645,24647],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[100,24646,331],{},"，需要改成机械臂链路里不冲突的编号。",[14,24649,24650],{},"方式一：用 LeRobot 命令逐步写入。",[94,24652,24654],{"className":23812,"code":24653,"language":23814,"meta":24,"style":24},"# 主臂舵机配置 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",[100,24655,24656,24661,24669,24676,24681,24685,24690,24696,24703],{"__ignoreMap":24},[103,24657,24658],{"class":105,"line":106},[103,24659,24660],{"class":172},"# 主臂舵机配置 ID\n",[103,24662,24663,24666],{"class":105,"line":25},[103,24664,24665],{"class":1952},"lerobot-setup-motors",[103,24667,24668],{"class":162}," \\\n",[103,24670,24671,24674],{"class":105,"line":1168},[103,24672,24673],{"class":162},"  --teleop.type=so101_leader",[103,24675,24668],{"class":162},[103,24677,24678],{"class":105,"line":1183},[103,24679,24680],{"class":162},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[103,24682,24683],{"class":105,"line":1189},[103,24684,2389],{"emptyLinePlaceholder":30},[103,24686,24687],{"class":105,"line":1203},[103,24688,24689],{"class":172},"# 从臂舵机配置 ID\n",[103,24691,24692,24694],{"class":105,"line":1209},[103,24693,24665],{"class":1952},[103,24695,24668],{"class":162},[103,24697,24698,24701],{"class":105,"line":1300},[103,24699,24700],{"class":162},"  --robot.type=so101_follower",[103,24702,24668],{"class":162},[103,24704,24705],{"class":105,"line":1306},[103,24706,24707],{"class":162},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24709,24710],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[45,24712,24714],{"id":24713},"_32-机械臂校准","3.2 机械臂校准",[14,24716,24717],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[94,24719,24721],{"className":23812,"code":24720,"language":23814,"meta":24,"style":24},"# 主臂校准\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",[100,24722,24723,24728,24735,24741,24748,24753,24757,24762,24768,24774,24781],{"__ignoreMap":24},[103,24724,24725],{"class":105,"line":106},[103,24726,24727],{"class":172},"# 主臂校准\n",[103,24729,24730,24733],{"class":105,"line":25},[103,24731,24732],{"class":1952},"lerobot-calibrate",[103,24734,24668],{"class":162},[103,24736,24737,24739],{"class":105,"line":1168},[103,24738,24673],{"class":162},[103,24740,24668],{"class":162},[103,24742,24743,24746],{"class":105,"line":1183},[103,24744,24745],{"class":162},"  --teleop.port=\u002Fdev\u002FttyACM0",[103,24747,24668],{"class":162},[103,24749,24750],{"class":105,"line":1189},[103,24751,24752],{"class":162},"  --teleop.id=my_awesome_leader_arm\n",[103,24754,24755],{"class":105,"line":1203},[103,24756,2389],{"emptyLinePlaceholder":30},[103,24758,24759],{"class":105,"line":1209},[103,24760,24761],{"class":172},"# 从臂校准\n",[103,24763,24764,24766],{"class":105,"line":1300},[103,24765,24732],{"class":1952},[103,24767,24668],{"class":162},[103,24769,24770,24772],{"class":105,"line":1306},[103,24771,24700],{"class":162},[103,24773,24668],{"class":162},[103,24775,24776,24779],{"class":105,"line":1318},[103,24777,24778],{"class":162},"  --robot.port=\u002Fdev\u002FttyACM1",[103,24780,24668],{"class":162},[103,24782,24783],{"class":105,"line":1601},[103,24784,24785],{"class":162},"  --robot.id=my_awesome_follower_arm\n",[5116,24787,24788],{},"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":24,"searchDepth":25,"depth":25,"links":24790},[24791,24792],{"id":24640,"depth":25,"text":24641},{"id":24713,"depth":25,"text":24714},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24631,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24799,"title":24800,"body":24801,"description":27,"extension":28,"meta":24992,"navigation":30,"path":24993,"seo":24994,"stem":24995,"__hash__":24996},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24802,"toc":24988},[24803,24806,24810,24857,24861,24874,24937,24940,24985],[10,24804,24800],{"id":24805},"_4-遥操与相机接入",[45,24807,24809],{"id":24808},"_41-不带相机遥操","4.1 不带相机遥操",[94,24811,24813],{"className":23812,"code":24812,"language":23814,"meta":24,"style":24},"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",[100,24814,24815,24822,24828,24834,24841,24847,24853],{"__ignoreMap":24},[103,24816,24817,24820],{"class":105,"line":106},[103,24818,24819],{"class":1952},"lerobot-teleoperate",[103,24821,24668],{"class":162},[103,24823,24824,24826],{"class":105,"line":25},[103,24825,24700],{"class":162},[103,24827,24668],{"class":162},[103,24829,24830,24832],{"class":105,"line":1168},[103,24831,24778],{"class":162},[103,24833,24668],{"class":162},[103,24835,24836,24839],{"class":105,"line":1183},[103,24837,24838],{"class":162},"  --robot.id=my_awesome_follower_arm",[103,24840,24668],{"class":162},[103,24842,24843,24845],{"class":105,"line":1189},[103,24844,24673],{"class":162},[103,24846,24668],{"class":162},[103,24848,24849,24851],{"class":105,"line":1203},[103,24850,24745],{"class":162},[103,24852,24668],{"class":162},[103,24854,24855],{"class":105,"line":1209},[103,24856,24752],{"class":162},[45,24858,24860],{"id":24859},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[94,24862,24864],{"className":23812,"code":24863,"language":23814,"meta":24,"style":24},"lerobot-find-cameras opencv\n",[100,24865,24866],{"__ignoreMap":24},[103,24867,24868,24871],{"class":105,"line":106},[103,24869,24870],{"class":1952},"lerobot-find-cameras",[103,24872,24873],{"class":218}," opencv\n",[94,24875,24877],{"className":23812,"code":24876,"language":23814,"meta":24,"style":24},"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",[100,24878,24879,24885,24891,24897,24903,24913,24919,24925,24932],{"__ignoreMap":24},[103,24880,24881,24883],{"class":105,"line":106},[103,24882,24819],{"class":1952},[103,24884,24668],{"class":162},[103,24886,24887,24889],{"class":105,"line":25},[103,24888,24700],{"class":162},[103,24890,24668],{"class":162},[103,24892,24893,24895],{"class":105,"line":1168},[103,24894,24778],{"class":162},[103,24896,24668],{"class":162},[103,24898,24899,24901],{"class":105,"line":1183},[103,24900,24838],{"class":162},[103,24902,24668],{"class":162},[103,24904,24905,24908,24911],{"class":105,"line":1189},[103,24906,24907],{"class":162},"  --robot.cameras=",[103,24909,24910],{"class":218},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[103,24912,24668],{"class":162},[103,24914,24915,24917],{"class":105,"line":1203},[103,24916,24673],{"class":162},[103,24918,24668],{"class":162},[103,24920,24921,24923],{"class":105,"line":1209},[103,24922,24745],{"class":162},[103,24924,24668],{"class":162},[103,24926,24927,24930],{"class":105,"line":1300},[103,24928,24929],{"class":162},"  --teleop.id=my_awesome_leader_arm",[103,24931,24668],{"class":162},[103,24933,24934],{"class":105,"line":1306},[103,24935,24936],{"class":162},"  --display_data=true\n",[14,24938,24939],{},"相机参数说明：",[1120,24941,24942,24948,24954,24963,24973,24979],{},[60,24943,24944,24947],{},[100,24945,24946],{},"front","：相机名称。",[60,24949,24950,24953],{},[100,24951,24952],{},"type: opencv","：相机驱动类型。",[60,24955,24956,24959,24960,24552],{},[100,24957,24958],{},"index_or_path","：设备编号或设备路径（如 ",[100,24961,24962],{},"\u002Fdev\u002Fvideo4",[60,24964,24965,24968,24969,24972],{},[100,24966,24967],{},"width"," \u002F ",[100,24970,24971],{},"height","：图像分辨率。",[60,24974,24975,24978],{},[100,24976,24977],{},"fps","：采样帧率。",[60,24980,24981,24984],{},[100,24982,24983],{},"--display_data=true","：启用实时可视化。",[5116,24986,24987],{},"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":24,"searchDepth":25,"depth":25,"links":24989},[24990,24991],{"id":24808,"depth":25,"text":24809},{"id":24859,"depth":25,"text":24860},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24800,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":24998,"title":24999,"body":25000,"description":27,"extension":28,"meta":25172,"navigation":30,"path":25173,"seo":25174,"stem":25175,"__hash__":25176},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25001,"toc":25167},[25002,25006,25010,25015,25020,25023,25065,25071,25075,25124,25129,25133,25136,25144,25149,25154,25159,25164],[10,25003,25005],{"id":25004},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[45,25007,25009],{"id":25008},"_51-生成访问令牌","5.1 生成访问令牌",[14,25011,25012],{},[1451,25013],{"alt":24,"src":25014},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25016,25017],{},[1451,25018],{"alt":24,"src":25019},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25021,25022],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[94,25024,25026],{"className":23812,"code":25025,"language":23814,"meta":24,"style":24},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[100,25027,25028,25041],{"__ignoreMap":24},[103,25029,25030,25033,25036,25038],{"class":105,"line":106},[103,25031,25032],{"class":109},"export",[103,25034,25035],{"class":113}," HF_TOKEN",[103,25037,159],{"class":109},[103,25039,25040],{"class":218},"\"your_huggingface_token\"\n",[103,25042,25043,25046,25049,25052,25055,25057,25060,25062],{"class":105,"line":25},[103,25044,25045],{"class":1952},"hf",[103,25047,25048],{"class":218}," auth",[103,25050,25051],{"class":218}," login",[103,25053,25054],{"class":162}," --token",[103,25056,9714],{"class":218},[103,25058,25059],{"class":113},"$HF_TOKEN",[103,25061,364],{"class":218},[103,25063,25064],{"class":162}," --add-to-git-credential\n",[14,25066,25067,25070],{},[100,25068,25069],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[45,25072,25074],{"id":25073},"_52-验证登录","5.2 验证登录",[94,25076,25078],{"className":23812,"code":25077,"language":23814,"meta":24,"style":24},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[100,25079,25080,25111],{"__ignoreMap":24},[103,25081,25082,25085,25087,25090,25092,25094,25097,25100,25103,25106,25109],{"class":105,"line":106},[103,25083,25084],{"class":113},"HF_USER",[103,25086,159],{"class":109},[103,25088,25089],{"class":113},"$(",[103,25091,25045],{"class":1952},[103,25093,25048],{"class":218},[103,25095,25096],{"class":218}," whoami",[103,25098,25099],{"class":109}," |",[103,25101,25102],{"class":1952}," head",[103,25104,25105],{"class":162}," -n",[103,25107,25108],{"class":162}," 1",[103,25110,120],{"class":113},[103,25112,25113,25116,25118,25121],{"class":105,"line":25},[103,25114,25115],{"class":162},"echo",[103,25117,9714],{"class":218},[103,25119,25120],{"class":113},"$HF_USER",[103,25122,25123],{"class":218},"\"\n",[14,25125,25126],{},[1451,25127],{"alt":24,"src":25128},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[45,25130,25132],{"id":25131},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25134,25135],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1120,25137,25138,25141],{},[60,25139,25140],{},"Dataset Repo（用于上传演示数据）",[60,25142,25143],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25145,25146],{},[1451,25147],{"alt":24,"src":25148},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25150,25151],{},[1451,25152],{"alt":24,"src":25153},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25155,25156],{},[1451,25157],{"alt":24,"src":25158},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25160,25161],{},[1451,25162],{"alt":24,"src":25163},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5116,25165,25166],{},"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":24,"searchDepth":25,"depth":25,"links":25168},[25169,25170,25171],{"id":25008,"depth":25,"text":25009},{"id":25073,"depth":25,"text":25074},{"id":25131,"depth":25,"text":25132},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":24999,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25178,"title":25179,"body":25180,"description":27,"extension":28,"meta":25377,"navigation":30,"path":25378,"seo":25379,"stem":25380,"__hash__":25381},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25181,"toc":25372},[25182,25186,25190,25286,25294,25299,25303,25319,25322,25326,25369],[10,25183,25185],{"id":25184},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[45,25187,25189],{"id":25188},"_61-录制示教数据","6.1 录制示教数据",[94,25191,25193],{"className":23812,"code":25192,"language":23814,"meta":24,"style":24},"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",[100,25194,25195,25202,25208,25214,25220,25229,25235,25241,25247,25254,25264,25271,25281],{"__ignoreMap":24},[103,25196,25197,25200],{"class":105,"line":106},[103,25198,25199],{"class":1952},"lerobot-record",[103,25201,24668],{"class":162},[103,25203,25204,25206],{"class":105,"line":25},[103,25205,24700],{"class":162},[103,25207,24668],{"class":162},[103,25209,25210,25212],{"class":105,"line":1168},[103,25211,24778],{"class":162},[103,25213,24668],{"class":162},[103,25215,25216,25218],{"class":105,"line":1183},[103,25217,24838],{"class":162},[103,25219,24668],{"class":162},[103,25221,25222,25224,25227],{"class":105,"line":1189},[103,25223,24907],{"class":162},[103,25225,25226],{"class":218},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[103,25228,24668],{"class":162},[103,25230,25231,25233],{"class":105,"line":1203},[103,25232,24673],{"class":162},[103,25234,24668],{"class":162},[103,25236,25237,25239],{"class":105,"line":1209},[103,25238,24745],{"class":162},[103,25240,24668],{"class":162},[103,25242,25243,25245],{"class":105,"line":1300},[103,25244,24929],{"class":162},[103,25246,24668],{"class":162},[103,25248,25249,25252],{"class":105,"line":1306},[103,25250,25251],{"class":162},"  --display_data=true",[103,25253,24668],{"class":162},[103,25255,25256,25259,25262],{"class":105,"line":1318},[103,25257,25258],{"class":162},"  --dataset.repo_id=",[103,25260,25261],{"class":218},"\"Embodied-AI-6\u002Fso101_test\"",[103,25263,24668],{"class":162},[103,25265,25266,25269],{"class":105,"line":1601},[103,25267,25268],{"class":162},"  --dataset.num_episodes=10",[103,25270,24668],{"class":162},[103,25272,25273,25276,25279],{"class":105,"line":1606},[103,25274,25275],{"class":162},"  --dataset.single_task=",[103,25277,25278],{"class":218},"\"Grab the green cube\"",[103,25280,24668],{"class":162},[103,25282,25283],{"class":105,"line":1612},[103,25284,25285],{"class":162},"  --resume=true\n",[1120,25287,25288],{},[60,25289,25290,25293],{},[100,25291,25292],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25295,25296],{},[1451,25297],{"alt":24,"src":25298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[45,25300,25302],{"id":25301},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[94,25304,25306],{"className":23812,"code":25305,"language":23814,"meta":24,"style":24},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[100,25307,25308],{"__ignoreMap":24},[103,25309,25310,25313,25316],{"class":105,"line":106},[103,25311,25312],{"class":1952},"rm",[103,25314,25315],{"class":162}," -rf",[103,25317,25318],{"class":218}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25320,25321],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[45,25323,25325],{"id":25324},"_63-回放指定-episode","6.3 回放指定 episode",[94,25327,25329],{"className":23812,"code":25328,"language":23814,"meta":24,"style":24},"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",[100,25330,25331,25338,25344,25350,25356,25364],{"__ignoreMap":24},[103,25332,25333,25336],{"class":105,"line":106},[103,25334,25335],{"class":1952},"lerobot-replay",[103,25337,24668],{"class":162},[103,25339,25340,25342],{"class":105,"line":25},[103,25341,24700],{"class":162},[103,25343,24668],{"class":162},[103,25345,25346,25348],{"class":105,"line":1168},[103,25347,24778],{"class":162},[103,25349,24668],{"class":162},[103,25351,25352,25354],{"class":105,"line":1183},[103,25353,24838],{"class":162},[103,25355,24668],{"class":162},[103,25357,25358,25360,25362],{"class":105,"line":1189},[103,25359,25258],{"class":162},[103,25361,25261],{"class":218},[103,25363,24668],{"class":162},[103,25365,25366],{"class":105,"line":1203},[103,25367,25368],{"class":162},"  --dataset.episode=0\n",[5116,25370,25371],{},"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":24,"searchDepth":25,"depth":25,"links":25373},[25374,25375,25376],{"id":25188,"depth":25,"text":25189},{"id":25301,"depth":25,"text":25302},{"id":25324,"depth":25,"text":25325},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25179,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25383,"title":25384,"body":25385,"description":27,"extension":28,"meta":25513,"navigation":30,"path":25514,"seo":25515,"stem":25516,"__hash__":25517},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25386,"toc":25511},[25387,25391,25454,25457,25504,25509],[10,25388,25390],{"id":25389},"_7-act-模型训练","7. ACT 模型训练",[94,25392,25394],{"className":23812,"code":25393,"language":23814,"meta":24,"style":24},"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",[100,25395,25396,25403,25411,25418,25425,25432,25439,25446],{"__ignoreMap":24},[103,25397,25398,25401],{"class":105,"line":106},[103,25399,25400],{"class":1952},"lerobot-train",[103,25402,24668],{"class":162},[103,25404,25405,25407,25409],{"class":105,"line":25},[103,25406,25258],{"class":162},[103,25408,25261],{"class":218},[103,25410,24668],{"class":162},[103,25412,25413,25416],{"class":105,"line":1168},[103,25414,25415],{"class":162},"  --policy.type=act",[103,25417,24668],{"class":162},[103,25419,25420,25423],{"class":105,"line":1183},[103,25421,25422],{"class":162},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[103,25424,24668],{"class":162},[103,25426,25427,25430],{"class":105,"line":1189},[103,25428,25429],{"class":162},"  --job_name=act_so101_test",[103,25431,24668],{"class":162},[103,25433,25434,25437],{"class":105,"line":1203},[103,25435,25436],{"class":162},"  --policy.device=cuda",[103,25438,24668],{"class":162},[103,25440,25441,25444],{"class":105,"line":1209},[103,25442,25443],{"class":162},"  --wandb.enable=false",[103,25445,24668],{"class":162},[103,25447,25448,25451],{"class":105,"line":1300},[103,25449,25450],{"class":162},"  --policy.repo_id=",[103,25452,25453],{"class":218},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25455,25456],{},"参数说明：",[1120,25458,25459,25465,25471,25477,25483,25492,25498],{},[60,25460,25461,25464],{},[100,25462,25463],{},"--dataset.repo_id","：训练数据集仓库。",[60,25466,25467,25470],{},[100,25468,25469],{},"--policy.type=act","：策略模型类型为 ACT。",[60,25472,25473,25476],{},[100,25474,25475],{},"--output_dir","：本地训练输出目录。",[60,25478,25479,25482],{},[100,25480,25481],{},"--job_name","：训练任务名称。",[60,25484,25485,25488,25489,24552],{},[100,25486,25487],{},"--policy.device","：训练设备（如 ",[100,25490,25491],{},"cuda",[60,25493,25494,25497],{},[100,25495,25496],{},"--wandb.enable","：是否启用 WandB 可视化。",[60,25499,25500,25503],{},[100,25501,25502],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25505,25506],{},[1451,25507],{"alt":24,"src":25508},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5116,25510,25371],{},{"title":24,"searchDepth":25,"depth":25,"links":25512},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25384,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25519,"title":25520,"body":25521,"description":27,"extension":28,"meta":25608,"navigation":30,"path":25609,"seo":25610,"stem":25611,"__hash__":25612},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25522,"toc":25606},[25523,25526,25529,25596,25604],[10,25524,25520],{"id":25525},"_8-策略部署与自动采集",[14,25527,25528],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[94,25530,25532],{"className":23812,"code":25531,"language":23814,"meta":24,"style":24},"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",[100,25533,25534,25540,25546,25552,25560,25566,25573,25581,25589],{"__ignoreMap":24},[103,25535,25536,25538],{"class":105,"line":106},[103,25537,25199],{"class":1952},[103,25539,24668],{"class":162},[103,25541,25542,25544],{"class":105,"line":25},[103,25543,24700],{"class":162},[103,25545,24668],{"class":162},[103,25547,25548,25550],{"class":105,"line":1168},[103,25549,24778],{"class":162},[103,25551,24668],{"class":162},[103,25553,25554,25556,25558],{"class":105,"line":1183},[103,25555,24907],{"class":162},[103,25557,25226],{"class":218},[103,25559,24668],{"class":162},[103,25561,25562,25564],{"class":105,"line":1189},[103,25563,24838],{"class":162},[103,25565,24668],{"class":162},[103,25567,25568,25571],{"class":105,"line":1203},[103,25569,25570],{"class":162},"  --display_data=false",[103,25572,24668],{"class":162},[103,25574,25575,25577,25579],{"class":105,"line":1209},[103,25576,25258],{"class":162},[103,25578,25261],{"class":218},[103,25580,24668],{"class":162},[103,25582,25583,25585,25587],{"class":105,"line":1300},[103,25584,25275],{"class":162},[103,25586,25278],{"class":218},[103,25588,24668],{"class":162},[103,25590,25591,25594],{"class":105,"line":1306},[103,25592,25593],{"class":162},"  --policy.path=",[103,25595,25453],{"class":218},[1120,25597,25598],{},[60,25599,25600,25603],{},[100,25601,25602],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5116,25605,25371],{},{"title":24,"searchDepth":25,"depth":25,"links":25607},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25520,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25614,"title":25615,"body":25616,"description":27,"extension":28,"meta":25645,"navigation":30,"path":25646,"seo":25647,"stem":25648,"__hash__":25649},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25617,"toc":25643},[25618,25622,25625,25631,25634,25640],[10,25619,25621],{"id":25620},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25623,25624],{},"项目地址：",[14,25626,25627],{},[17,25628,25629],{"href":25629,"rel":25630},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[21],[14,25632,25633],{},"参考教程：",[14,25635,25636],{},[17,25637,25638],{"href":25638,"rel":25639},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[21],[14,25641,25642],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":24,"searchDepth":25,"depth":25,"links":25644},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25615,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25651,"title":25652,"body":25653,"description":25657,"extension":28,"meta":25658,"navigation":30,"path":25659,"seo":25660,"stem":25661,"__hash__":25662},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25654,"toc":25655},[],{"title":24,"searchDepth":25,"depth":25,"links":25656},[],"act复现",{"category":23368},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25652,"description":25657},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25664,"title":25665,"body":25666,"description":24,"extension":28,"meta":25968,"navigation":30,"path":25969,"seo":25970,"stem":25971,"__hash__":25972},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25667,"toc":25960},[25668,25671,25675,25685,25692,25699,25702,25709,25712,25715,25719,25731,25735,25781,25784,25787,25790,25793,25796,25800,25838,25844,25848,25902,25907,25910,25913,25918,25921,25926,25929,25932,25936,25939,25942,25946],[10,25669,25665],{"id":25670},"_1简介",[74,25672,25674],{"id":25673},"_11什么是-docker","1.1什么是 Docker？",[14,25676,25677,25678,25681,25682],{},"Docker 是一个开源的 ",[263,25679,25680],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[263,25683,25684],{},"一次构建，到处运行。",[14,25686,25687,25688,25691],{},"“ ",[263,25689,25690],{},"一次构建，到处运行"," ”也就是说：",[57,25693,25694],{},[60,25695,25696],{},[263,25697,25698],{},"之前：",[14,25700,25701],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[57,25703,25704],{},[60,25705,25706],{},[263,25707,25708],{},"使用docker后：",[14,25710,25711],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25713,25714],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[74,25716,25718],{"id":25717},"_12它是怎么工作的","1.2.它是怎么工作的？",[1120,25720,25721,25724],{},[60,25722,25723],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[60,25725,25726,25727,25730],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[263,25728,25729],{},"无论在哪运行都一样稳定"," 。",[74,25732,25734],{"id":25733},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[251,25736,25737,25747],{},[254,25738,25739],{},[257,25740,25741,25744],{},[260,25742,25743],{"align":23726},"概念",[260,25745,25746],{"align":23726},"解释",[298,25748,25749,25757,25765,25773],{},[257,25750,25751,25754],{},[303,25752,25753],{"align":23726},"镜像",[303,25755,25756],{"align":23726},"Image，运行容器的模板，像是一个应用快照",[257,25758,25759,25762],{},[303,25760,25761],{"align":23726},"容器",[303,25763,25764],{"align":23726},"Container，运行中的镜像实例，有自己的文件系统、网络等",[257,25766,25767,25770],{},[303,25768,25769],{"align":23726},"Dockerfile",[303,25771,25772],{"align":23726},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[257,25774,25775,25778],{},[303,25776,25777],{"align":23726},"仓库",[303,25779,25780],{"align":23726},"Registry，存放镜像的地方，比如 Docker Hub",[14,25782,25783],{},"抽象化理解:",[14,25785,25786],{},"Docker镜像≈C++类",[14,25788,25789],{},"Docker容器≈C++类实例(即对象)",[14,25791,25792],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25794,25795],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[74,25797,25799],{"id":25798},"_14类比理解","1.4.类比理解",[251,25801,25802,25812],{},[254,25803,25804],{},[257,25805,25806,25809],{},[260,25807,25808],{"align":23726},"传统部署",[260,25810,25811],{"align":23726},"Docker部署",[298,25813,25814,25822,25830],{},[257,25815,25816,25819],{},[303,25817,25818],{"align":23726},"手动安装依赖、调试版本不一致问题",[303,25820,25821],{"align":23726},"一次打包环境和代码",[257,25823,25824,25827],{},[303,25825,25826],{"align":23726},"程序“裸奔”跑在系统上",[303,25828,25829],{"align":23726},"程序“穿着容器”隔离运行",[257,25831,25832,25835],{},[303,25833,25834],{"align":23726},"容易“在我电脑上能跑”",[303,25836,25837],{"align":23726},"保证“无论在哪都能跑”",[14,25839,25840,25841],{},"就像快递包裹： ",[263,25842,25843],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[74,25845,25847],{"id":25846},"_15docker-的核心优势","1.5.Docker 的核心优势",[251,25849,25850,25860],{},[254,25851,25852],{},[257,25853,25854,25857],{},[260,25855,25856],{"align":23726},"优势",[260,25858,25859],{"align":23726},"说明",[298,25861,25862,25870,25878,25886,25894],{},[257,25863,25864,25867],{},[303,25865,25866],{"align":23726},"轻量级",[303,25868,25869],{"align":23726},"基于系统内核共享，启动速度快，占资源少",[257,25871,25872,25875],{},[303,25873,25874],{"align":23726},"跨平台",[303,25876,25877],{"align":23726},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[257,25879,25880,25883],{},[303,25881,25882],{"align":23726},"易于迁移部署",[303,25884,25885],{"align":23726},"应用和环境一起封装，不怕依赖不一致",[257,25887,25888,25891],{},[303,25889,25890],{"align":23726},"易于版本控制",[303,25892,25893],{"align":23726},"镜像版本可控，支持回滚",[257,25895,25896,25899],{},[303,25897,25898],{"align":23726},"生态丰富",[303,25900,25901],{"align":23726},"Docker Hub 上有成千上万的现成镜像可用",[57,25903,25904],{},[60,25905,25906],{},"在Linux上可以几乎实现无性能损失。",[14,25908,25909],{},"docker里的发行版和本机共用Linux内核。",[14,25911,25912],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[57,25914,25915],{},[60,25916,25917],{},"可以快速部署在绝大多数Linux发行版",[14,25919,25920],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[57,25922,25923],{},[60,25924,25925],{},"配置环境简单",[14,25927,25928],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,25930,25931],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[57,25933,25934],{},[60,25935,25898],{},[14,25937,25938],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,25940,25941],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[74,25943,25945],{"id":25944},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1120,25947,25948,25951,25954,25957],{},[60,25949,25950],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[60,25952,25953],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[60,25955,25956],{},"微服务架构：每个服务一个容器，灵活组合",[60,25958,25959],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":24,"searchDepth":25,"depth":25,"links":25961},[25962,25963,25964,25965,25966,25967],{"id":25673,"depth":1168,"text":25674},{"id":25717,"depth":1168,"text":25718},{"id":25733,"depth":1168,"text":25734},{"id":25798,"depth":1168,"text":25799},{"id":25846,"depth":1168,"text":25847},{"id":25944,"depth":1168,"text":25945},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25665,"description":24},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25974,"title":25975,"body":25976,"description":24,"extension":28,"meta":26709,"navigation":30,"path":26710,"seo":26711,"stem":26712,"__hash__":26713},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25977,"toc":26704},[25978,25981,25985,25988,25991,25997,26003,26007,26016,26019,26076,26079,26130,26133,26216,26219,26256,26260,26271,26284,26291,26294,26374,26377,26427,26430,26453,26457,26464,26467,26483,26489,26492,26508,26514,26517,26533,26547,26553,26573,26579,26582,26594,26600,26603,26617,26623,26626,26646,26651,26654,26657,26661,26664,26667,26670,26677,26680,26683,26686,26691,26696,26701],[10,25979,25975],{"id":25980},"_2安装docker",[74,25982,25984],{"id":25983},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,25986,25987],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,25989,25990],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,25992,25993],{},[17,25994,25995],{"href":25995,"rel":25996},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[21],[14,25998,25999],{},[17,26000,26001],{"href":26001,"rel":26002},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[21],[21988,26004,26006],{"id":26005},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26008,26009,26010,26015],{},"以下内容根据 ",[17,26011,26014],{"href":26012,"rel":26013},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[21],"官方文档"," 修改而来。",[14,26017,26018],{},"如果你过去安装过 docker，先删掉：",[94,26020,26022],{"className":23812,"code":26021,"language":23814,"meta":24,"style":24},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[100,26023,26024],{"__ignoreMap":24},[103,26025,26026,26028,26031,26034,26037,26040,26043,26046,26049,26052,26055,26058,26061,26064,26067,26070,26073],{"class":105,"line":106},[103,26027,3014],{"class":109},[103,26029,26030],{"class":113}," pkg ",[103,26032,26033],{"class":109},"in",[103,26035,26036],{"class":218}," docker.io",[103,26038,26039],{"class":218}," docker-doc",[103,26041,26042],{"class":218}," docker-compose",[103,26044,26045],{"class":218}," docker-compose-v2",[103,26047,26048],{"class":218}," podman-docker",[103,26050,26051],{"class":218}," containerd",[103,26053,26054],{"class":218}," runc",[103,26056,26057],{"class":113},"; ",[103,26059,26060],{"class":109},"do",[103,26062,26063],{"class":1952}," sudo",[103,26065,26066],{"class":218}," apt-get",[103,26068,26069],{"class":218}," remove",[103,26071,26072],{"class":113}," $pkg; ",[103,26074,26075],{"class":109},"done\n",[14,26077,26078],{},"首先安装依赖和GPG：",[94,26080,26084],{"className":26081,"code":26082,"language":26083,"meta":24,"style":24},"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",[100,26085,26086,26091,26096,26101,26106,26111,26116,26120,26125],{"__ignoreMap":24},[103,26087,26088],{"class":105,"line":106},[103,26089,26090],{},"# Add Docker's official GPG key:\n",[103,26092,26093],{"class":105,"line":25},[103,26094,26095],{},"sudo apt-get update\n",[103,26097,26098],{"class":105,"line":1168},[103,26099,26100],{},"sudo apt-get install ca-certificates curl\n",[103,26102,26103],{"class":105,"line":1183},[103,26104,26105],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[103,26107,26108],{"class":105,"line":1189},[103,26109,26110],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[103,26112,26113],{"class":105,"line":1203},[103,26114,26115],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[103,26117,26118],{"class":105,"line":1209},[103,26119,2389],{"emptyLinePlaceholder":30},[103,26121,26122],{"class":105,"line":1300},[103,26123,26124],{},"# 如果上面这行报错就弄下面这行\n",[103,26126,26127],{"class":105,"line":1306},[103,26128,26129],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26131,26132],{},"信任 Docker 的 GPG 公钥并添加仓库：",[94,26134,26136],{"className":23812,"code":26135,"language":23814,"meta":24,"style":24},"# 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",[100,26137,26138,26143,26149,26166,26199],{"__ignoreMap":24},[103,26139,26140],{"class":105,"line":106},[103,26141,26142],{"class":172},"# Add the repository to Apt sources:\n",[103,26144,26145,26147],{"class":105,"line":25},[103,26146,25115],{"class":162},[103,26148,24668],{"class":162},[103,26150,26151,26154,26157,26160,26163],{"class":105,"line":1168},[103,26152,26153],{"class":218},"  \"deb [arch=$(",[103,26155,26156],{"class":1952},"dpkg",[103,26158,26159],{"class":162}," --print-architecture",[103,26161,26162],{"class":218},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[103,26164,26165],{"class":162},"\\\n",[103,26167,26168,26171,26173,26175,26178,26181,26183,26185,26188,26190,26192,26195,26197],{"class":105,"line":1183},[103,26169,26170],{"class":218},"  \"",[103,26172,25089],{"class":113},[103,26174,671],{"class":162},[103,26176,26177],{"class":218}," \u002Fetc\u002Fos-release",[103,26179,26180],{"class":113}," && ",[103,26182,25115],{"class":162},[103,26184,9714],{"class":218},[103,26186,26187],{"class":113},"$VERSION_CODENAME",[103,26189,364],{"class":218},[103,26191,542],{"class":113},[103,26193,26194],{"class":218},"\" stable\"",[103,26196,25099],{"class":109},[103,26198,24668],{"class":162},[103,26200,26201,26204,26207,26210,26213],{"class":105,"line":1189},[103,26202,26203],{"class":1952},"  sudo",[103,26205,26206],{"class":218}," tee",[103,26208,26209],{"class":218}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[103,26211,26212],{"class":109}," >",[103,26214,26215],{"class":218}," \u002Fdev\u002Fnull\n",[14,26217,26218],{},"最后安装",[94,26220,26222],{"className":23812,"code":26221,"language":23814,"meta":24,"style":24},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[100,26223,26224,26233],{"__ignoreMap":24},[103,26225,26226,26228,26230],{"class":105,"line":106},[103,26227,24566],{"class":1952},[103,26229,26066],{"class":218},[103,26231,26232],{"class":218}," update\n",[103,26234,26235,26237,26239,26241,26244,26247,26250,26253],{"class":105,"line":25},[103,26236,24566],{"class":1952},[103,26238,26066],{"class":218},[103,26240,23824],{"class":218},[103,26242,26243],{"class":218}," docker-ce",[103,26245,26246],{"class":218}," docker-ce-cli",[103,26248,26249],{"class":218}," containerd.io",[103,26251,26252],{"class":218}," docker-buildx-plugin",[103,26254,26255],{"class":218}," docker-compose-plugin\n",[21988,26257,26259],{"id":26258},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26261,26262,26263,26266,26267,26270],{},"查看自己自己包管理工具版本（dnf是 ",[263,26264,26265],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[263,26268,26269],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[94,26272,26274],{"className":23812,"code":26273,"language":23814,"meta":24,"style":24},"dnf --version\n",[100,26275,26276],{"__ignoreMap":24},[103,26277,26278,26281],{"class":105,"line":106},[103,26279,26280],{"class":1952},"dnf",[103,26282,26283],{"class":162}," --version\n",[14,26285,26009,26286,26290],{},[17,26287,26014],{"href":26288,"rel":26289},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[21]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26292,26293],{},"如果你之前安装过 docker，请先删掉",[94,26295,26297],{"className":23812,"code":26296,"language":23814,"meta":24,"style":24},"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",[100,26298,26299,26313,26320,26327,26334,26341,26348,26355,26362,26369],{"__ignoreMap":24},[103,26300,26301,26303,26306,26308,26311],{"class":105,"line":106},[103,26302,24566],{"class":1952},[103,26304,26305],{"class":218}," dnf",[103,26307,26069],{"class":218},[103,26309,26310],{"class":218}," docker",[103,26312,24668],{"class":162},[103,26314,26315,26318],{"class":105,"line":25},[103,26316,26317],{"class":218},"                  docker-client",[103,26319,24668],{"class":162},[103,26321,26322,26325],{"class":105,"line":1168},[103,26323,26324],{"class":218},"                  docker-client-latest",[103,26326,24668],{"class":162},[103,26328,26329,26332],{"class":105,"line":1183},[103,26330,26331],{"class":218},"                  docker-common",[103,26333,24668],{"class":162},[103,26335,26336,26339],{"class":105,"line":1189},[103,26337,26338],{"class":218},"                  docker-latest",[103,26340,24668],{"class":162},[103,26342,26343,26346],{"class":105,"line":1203},[103,26344,26345],{"class":218},"                  docker-latest-logrotate",[103,26347,24668],{"class":162},[103,26349,26350,26353],{"class":105,"line":1209},[103,26351,26352],{"class":218},"                  docker-logrotate",[103,26354,24668],{"class":162},[103,26356,26357,26360],{"class":105,"line":1300},[103,26358,26359],{"class":218},"                  docker-selinux",[103,26361,24668],{"class":162},[103,26363,26364,26367],{"class":105,"line":1306},[103,26365,26366],{"class":218},"                  docker-engine-selinux",[103,26368,24668],{"class":162},[103,26370,26371],{"class":105,"line":1318},[103,26372,26373],{"class":218},"                  docker-engine\n",[14,26375,26376],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[94,26378,26380],{"className":23812,"code":26379,"language":23814,"meta":24,"style":24},"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",[100,26381,26382,26396,26411],{"__ignoreMap":24},[103,26383,26384,26386,26388,26391,26393],{"class":105,"line":106},[103,26385,24566],{"class":1952},[103,26387,26305],{"class":218},[103,26389,26390],{"class":162}," -y",[103,26392,23824],{"class":218},[103,26394,26395],{"class":218}," dnf-plugins-core\n",[103,26397,26398,26400,26402,26405,26408],{"class":105,"line":25},[103,26399,24566],{"class":1952},[103,26401,26305],{"class":218},[103,26403,26404],{"class":218}," config-manager",[103,26406,26407],{"class":218}," addrepo",[103,26409,26410],{"class":162}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[103,26412,26413,26415,26418,26421,26424],{"class":105,"line":1168},[103,26414,24566],{"class":1952},[103,26416,26417],{"class":218}," sed",[103,26419,26420],{"class":162}," -i",[103,26422,26423],{"class":218}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[103,26425,26426],{"class":218}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26428,26429],{},"最后安装：",[94,26431,26433],{"className":23812,"code":26432,"language":23814,"meta":24,"style":24},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[100,26434,26435],{"__ignoreMap":24},[103,26436,26437,26439,26441,26443,26445,26447,26449,26451],{"class":105,"line":106},[103,26438,24566],{"class":1952},[103,26440,26305],{"class":218},[103,26442,23824],{"class":218},[103,26444,26243],{"class":218},[103,26446,26246],{"class":218},[103,26448,26249],{"class":218},[103,26450,26252],{"class":218},[103,26452,26255],{"class":218},[74,26454,26456],{"id":26455},"_22配置环境","2.2.配置环境",[21988,26458,26460,26463],{"id":26459},"_221检查-docker-服务状态",[263,26461,26462],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26465,26466],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[94,26468,26470],{"className":23812,"code":26469,"language":23814,"meta":24,"style":24},"systemctl status docker\n",[100,26471,26472],{"__ignoreMap":24},[103,26473,26474,26477,26480],{"class":105,"line":106},[103,26475,26476],{"class":1952},"systemctl",[103,26478,26479],{"class":218}," status",[103,26481,26482],{"class":218}," docker\n",[21988,26484,26486,26463],{"id":26485},"_222启动-docker-服务",[263,26487,26488],{},"2.2.2.启动 Docker 服务",[14,26490,26491],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[94,26493,26495],{"className":23812,"code":26494,"language":23814,"meta":24,"style":24},"sudo systemctl start docker\n",[100,26496,26497],{"__ignoreMap":24},[103,26498,26499,26501,26504,26506],{"class":105,"line":106},[103,26500,24566],{"class":1952},[103,26502,26503],{"class":218}," systemctl",[103,26505,4173],{"class":218},[103,26507,26482],{"class":218},[21988,26509,26511,26463],{"id":26510},"_223设置-docker-开机自启",[263,26512,26513],{},"2.2.3.设置 Docker 开机自启",[14,26515,26516],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[94,26518,26520],{"className":23812,"code":26519,"language":23814,"meta":24,"style":24},"sudo systemctl enable docker\n",[100,26521,26522],{"__ignoreMap":24},[103,26523,26524,26526,26528,26531],{"class":105,"line":106},[103,26525,24566],{"class":1952},[103,26527,26503],{"class":218},[103,26529,26530],{"class":218}," enable",[103,26532,26482],{"class":218},[21988,26534,26536,13785,26539,13785,26544,26463],{"id":26535},"_224将用户添加到-docker-组",[263,26537,26538],{},"2.2.4.将用户添加到",[263,26540,26541],{},[100,26542,26543],{},"docker",[263,26545,26546],{},"组",[14,26548,26549,26550,26552],{},"使用以下命令将当前用户添加到 ",[100,26551,26543],{}," 组：",[94,26554,26556],{"className":23812,"code":26555,"language":23814,"meta":24,"style":24},"sudo usermod -aG docker $USER\n",[100,26557,26558],{"__ignoreMap":24},[103,26559,26560,26562,26565,26568,26570],{"class":105,"line":106},[103,26561,24566],{"class":1952},[103,26563,26564],{"class":218}," usermod",[103,26566,26567],{"class":162}," -aG",[103,26569,26310],{"class":218},[103,26571,26572],{"class":113}," $USER\n",[21988,26574,26576,26463],{"id":26575},"_225退出并重新登录",[263,26577,26578],{},"2.2.5.退出并重新登录",[14,26580,26581],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[94,26583,26585],{"className":23812,"code":26584,"language":23814,"meta":24,"style":24},"newgrp docker\n",[100,26586,26587],{"__ignoreMap":24},[103,26588,26589,26592],{"class":105,"line":106},[103,26590,26591],{"class":1952},"newgrp",[103,26593,26482],{"class":218},[21988,26595,26597,26463],{"id":26596},"_226重新启动-docker-服务如果需要",[263,26598,26599],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26601,26602],{},"确保 Docker 服务正在运行，可以使用以下命令：",[94,26604,26605],{"className":23812,"code":26494,"language":23814,"meta":24,"style":24},[100,26606,26607],{"__ignoreMap":24},[103,26608,26609,26611,26613,26615],{"class":105,"line":106},[103,26610,24566],{"class":1952},[103,26612,26503],{"class":218},[103,26614,4173],{"class":218},[103,26616,26482],{"class":218},[21988,26618,26620,26463],{"id":26619},"_227重启电脑后检查-docker-服务状态",[263,26621,26622],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26624,26625],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[94,26627,26629],{"className":23812,"code":26628,"language":23814,"meta":24,"style":24},"sudo reboot\nsystemctl status docker\n",[100,26630,26631,26638],{"__ignoreMap":24},[103,26632,26633,26635],{"class":105,"line":106},[103,26634,24566],{"class":1952},[103,26636,26637],{"class":218}," reboot\n",[103,26639,26640,26642,26644],{"class":105,"line":25},[103,26641,26476],{"class":1952},[103,26643,26479],{"class":218},[103,26645,26482],{"class":218},[14,26647,26648],{},[1451,26649],{"alt":24,"src":26650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26652,26653],{},"第三行显示enabled说明开机自启动成功",[14,26655,26656],{},"按q退出",[74,26658,26660],{"id":26659},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26662,26663],{},"优先使用linux来使用docker是比较好的",[14,26665,26666],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26668,26669],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26671,26672,26673],{},"官方下载安装:",[17,26674,26675],{"href":26675,"rel":26676},"https:\u002F\u002Fwww.docker.com\u002F",[21],[14,26678,26679],{},"Windows的Docker显卡直通与USB直通:",[14,26681,26682],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26684,26685],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26687,26688],{},[1451,26689],{"alt":24,"src":26690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26692,26693],{},[1451,26694],{"alt":24,"src":26695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26697,26698],{},[1451,26699],{"alt":24,"src":26700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5116,26702,26703],{},"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":24,"searchDepth":25,"depth":25,"links":26705},[26706,26707,26708],{"id":25983,"depth":1168,"text":25984},{"id":26455,"depth":1168,"text":26456},{"id":26659,"depth":1168,"text":26660},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25975,"description":24},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26715,"title":26716,"body":26717,"description":26724,"extension":28,"meta":27417,"navigation":30,"path":27418,"seo":27419,"stem":27420,"__hash__":27421},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26718,"toc":27411},[26719,26722,26725,26729,26734,26739,26742,26770,26775,26784,26787,26792,26796,26803,26808,26814,26818,26821,26825,26830,26922,26927,26945,26950,26971,26976,26992,26996,27001,27030,27035,27081,27086,27130,27138,27155,27160,27176,27181,27195,27198,27201,27204,27207,27236,27239,27244,27248,27251,27254,27260,27263,27266,27269,27331,27338,27343,27346,27364,27368,27371,27388,27391,27394,27408],[10,26720,26716],{"id":26721},"_3docker直通",[14,26723,26724],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[74,26726,26728],{"id":26727},"_31usb直通","3.1.USB直通",[14,26730,26731],{},[1451,26732],{"alt":24,"src":26733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[57,26735,26736],{},[60,26737,26738],{},"方法一(不是很推荐新手)：",[14,26740,26741],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[94,26743,26745],{"className":23812,"code":26744,"language":23814,"meta":24,"style":24},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[100,26746,26747,26755,26760],{"__ignoreMap":24},[103,26748,26749,26752],{"class":105,"line":106},[103,26750,26751],{"class":1952},"ls",[103,26753,26754],{"class":218}," \u002Fdev\n",[103,26756,26757],{"class":105,"line":25},[103,26758,26759],{"class":172},"#例如\n",[103,26761,26762,26765,26767],{"class":105,"line":1168},[103,26763,26764],{"class":113},"--device",[103,26766,159],{"class":109},[103,26768,26769],{"class":218},"\u002Fdev\u002Ftty_USB0\n",[57,26771,26772],{"start":25},[60,26773,26774],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[94,26776,26778],{"className":23812,"code":26777,"language":23814,"meta":24,"style":24},"--privileged\n",[100,26779,26780],{"__ignoreMap":24},[103,26781,26782],{"class":105,"line":106},[103,26783,26777],{"class":1952},[14,26785,26786],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26788,26789],{},[1451,26790],{"alt":24,"src":26791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[74,26793,26795],{"id":26794},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26797,26798,26799,26802],{},"NVIDIA Container Toolkit使用户 ",[263,26800,26801],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26804,26805],{},[1451,26806],{"alt":24,"src":26807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26809,26810],{},[17,26811,26812],{"href":26812,"rel":26813},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[21],[21988,26815,26817],{"id":26816},"_321安装","3.2.1.安装",[14,26819,26820],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22900,26822,26824],{"id":26823},"_3211ubuntu","3.2.1.1.Ubuntu",[57,26826,26827],{},[60,26828,26829],{},"配置存储库 并更新",[94,26831,26833],{"className":23812,"code":26832,"language":23814,"meta":24,"style":24},"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",[100,26834,26835,26864,26884,26896,26908,26914],{"__ignoreMap":24},[103,26836,26837,26840,26843,26846,26848,26850,26853,26856,26859,26862],{"class":105,"line":106},[103,26838,26839],{"class":1952},"curl",[103,26841,26842],{"class":162}," -fsSL",[103,26844,26845],{"class":218}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[103,26847,25099],{"class":109},[103,26849,26063],{"class":1952},[103,26851,26852],{"class":218}," gpg",[103,26854,26855],{"class":162}," --dearmor",[103,26857,26858],{"class":162}," -o",[103,26860,26861],{"class":218}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[103,26863,24668],{"class":162},[103,26865,26866,26869,26871,26874,26877,26880,26882],{"class":105,"line":25},[103,26867,26868],{"class":113},"  && ",[103,26870,26839],{"class":1952},[103,26872,26873],{"class":162}," -s",[103,26875,26876],{"class":162}," -L",[103,26878,26879],{"class":218}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[103,26881,25099],{"class":109},[103,26883,24668],{"class":162},[103,26885,26886,26889,26892,26894],{"class":105,"line":1168},[103,26887,26888],{"class":1952},"    sed",[103,26890,26891],{"class":218}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[103,26893,25099],{"class":109},[103,26895,24668],{"class":162},[103,26897,26898,26901,26903,26906],{"class":105,"line":1183},[103,26899,26900],{"class":1952},"    sudo",[103,26902,26206],{"class":218},[103,26904,26905],{"class":218}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[103,26907,24668],{"class":162},[103,26909,26910,26912],{"class":105,"line":1189},[103,26911,26868],{"class":113},[103,26913,26165],{"class":162},[103,26915,26916,26918,26920],{"class":105,"line":1203},[103,26917,26900],{"class":1952},[103,26919,26066],{"class":218},[103,26921,26232],{"class":218},[57,26923,26924],{"start":25},[60,26925,26926],{},"安装nvidia-docker2",[94,26928,26930],{"className":23812,"code":26929,"language":23814,"meta":24,"style":24},"sudo apt-get install -y nvidia-docker2\n",[100,26931,26932],{"__ignoreMap":24},[103,26933,26934,26936,26938,26940,26942],{"class":105,"line":106},[103,26935,24566],{"class":1952},[103,26937,26066],{"class":218},[103,26939,23824],{"class":218},[103,26941,26390],{"class":162},[103,26943,26944],{"class":218}," nvidia-docker2\n",[57,26946,26947],{"start":1168},[60,26948,26949],{},"使用nvidia-ctk命令配置container runtime",[94,26951,26953],{"className":23812,"code":26952,"language":23814,"meta":24,"style":24},"sudo nvidia-ctk runtime configure --runtime=docker\n",[100,26954,26955],{"__ignoreMap":24},[103,26956,26957,26959,26962,26965,26968],{"class":105,"line":106},[103,26958,24566],{"class":1952},[103,26960,26961],{"class":218}," nvidia-ctk",[103,26963,26964],{"class":218}," runtime",[103,26966,26967],{"class":218}," configure",[103,26969,26970],{"class":162}," --runtime=docker\n",[57,26972,26973],{"start":1183},[60,26974,26975],{},"重启docker服务:",[94,26977,26979],{"className":23812,"code":26978,"language":23814,"meta":24,"style":24},"sudo systemctl restart docker\n",[100,26980,26981],{"__ignoreMap":24},[103,26982,26983,26985,26987,26990],{"class":105,"line":106},[103,26984,24566],{"class":1952},[103,26986,26503],{"class":218},[103,26988,26989],{"class":218}," restart",[103,26991,26482],{"class":218},[22900,26993,26995],{"id":26994},"_3212fedora","3.2.1.2.Fedora",[57,26997,26998],{},[60,26999,27000],{},"配置存储库",[94,27002,27004],{"className":23812,"code":27003,"language":23814,"meta":24,"style":24},"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",[100,27005,27006,27021],{"__ignoreMap":24},[103,27007,27008,27010,27012,27014,27017,27019],{"class":105,"line":106},[103,27009,26839],{"class":1952},[103,27011,26873],{"class":162},[103,27013,26876],{"class":162},[103,27015,27016],{"class":218}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[103,27018,25099],{"class":109},[103,27020,24668],{"class":162},[103,27022,27023,27025,27027],{"class":105,"line":25},[103,27024,24566],{"class":1952},[103,27026,26206],{"class":218},[103,27028,27029],{"class":218}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[57,27031,27032],{"start":25},[60,27033,27034],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[94,27036,27038],{"className":23812,"code":27037,"language":23814,"meta":24,"style":24},"# 如果是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",[100,27039,27040,27045,27059,27063,27068],{"__ignoreMap":24},[103,27041,27042],{"class":105,"line":106},[103,27043,27044],{"class":172},"# 如果是RHEL或者Rocky（DNF4）\n",[103,27046,27047,27049,27051,27053,27056],{"class":105,"line":25},[103,27048,24566],{"class":1952},[103,27050,26305],{"class":218},[103,27052,26404],{"class":218},[103,27054,27055],{"class":162}," --add-repo",[103,27057,27058],{"class":218}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[103,27060,27061],{"class":105,"line":1168},[103,27062,2389],{"emptyLinePlaceholder":30},[103,27064,27065],{"class":105,"line":1183},[103,27066,27067],{"class":172},"# 如果是Feodra41+（DNF5）\n",[103,27069,27070,27072,27074,27076,27078],{"class":105,"line":1189},[103,27071,24566],{"class":1952},[103,27073,26305],{"class":218},[103,27075,26404],{"class":218},[103,27077,26407],{"class":218},[103,27079,27080],{"class":162}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[57,27082,27083],{"start":1168},[60,27084,27085],{},"安装NVIDIA Container Toolki包",[94,27087,27089],{"className":23812,"code":27088,"language":23814,"meta":24,"style":24},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[100,27090,27091,27096,27109,27113,27118],{"__ignoreMap":24},[103,27092,27093],{"class":105,"line":106},[103,27094,27095],{"class":172},"# 如果是RHEL或者Rocky\n",[103,27097,27098,27100,27102,27104,27106],{"class":105,"line":25},[103,27099,24566],{"class":1952},[103,27101,26305],{"class":218},[103,27103,23824],{"class":218},[103,27105,26390],{"class":162},[103,27107,27108],{"class":218}," nvidia-container-toolkit\n",[103,27110,27111],{"class":105,"line":1168},[103,27112,2389],{"emptyLinePlaceholder":30},[103,27114,27115],{"class":105,"line":1183},[103,27116,27117],{"class":172},"# 如果是Fedora\n",[103,27119,27120,27122,27124,27126,27128],{"class":105,"line":1189},[103,27121,24566],{"class":1952},[103,27123,26305],{"class":218},[103,27125,23824],{"class":218},[103,27127,26390],{"class":162},[103,27129,27108],{"class":218},[57,27131,27132],{"start":1183},[60,27133,27134,27135,27137],{},"安装nvidia-docker2 ： 在Fedora上使用",[100,27136,26280],{},"进行安装",[94,27139,27141],{"className":23812,"code":27140,"language":23814,"meta":24,"style":24},"sudo dnf install -y nvidia-docker2\n",[100,27142,27143],{"__ignoreMap":24},[103,27144,27145,27147,27149,27151,27153],{"class":105,"line":106},[103,27146,24566],{"class":1952},[103,27148,26305],{"class":218},[103,27150,23824],{"class":218},[103,27152,26390],{"class":162},[103,27154,26944],{"class":218},[57,27156,27157],{"start":1189},[60,27158,27159],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[94,27161,27162],{"className":23812,"code":26952,"language":23814,"meta":24,"style":24},[100,27163,27164],{"__ignoreMap":24},[103,27165,27166,27168,27170,27172,27174],{"class":105,"line":106},[103,27167,24566],{"class":1952},[103,27169,26961],{"class":218},[103,27171,26964],{"class":218},[103,27173,26967],{"class":218},[103,27175,26970],{"class":162},[57,27177,27178],{"start":1203},[60,27179,27180],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[94,27182,27183],{"className":23812,"code":26978,"language":23814,"meta":24,"style":24},[100,27184,27185],{"__ignoreMap":24},[103,27186,27187,27189,27191,27193],{"class":105,"line":106},[103,27188,24566],{"class":1952},[103,27190,26503],{"class":218},[103,27192,26989],{"class":218},[103,27194,26482],{"class":218},[14,27196,27197],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27199,27200],{},"方法：",[14,27202,27203],{},"1️⃣nvidia-smi",[14,27205,27206],{},"2️⃣运行nvidia cuda 容器进行测试",[94,27208,27210],{"className":23812,"code":27209,"language":23814,"meta":24,"style":24},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[100,27211,27212],{"__ignoreMap":24},[103,27213,27214,27216,27218,27221,27224,27227,27230,27233],{"class":105,"line":106},[103,27215,24566],{"class":1952},[103,27217,26310],{"class":218},[103,27219,27220],{"class":218}," run",[103,27222,27223],{"class":162}," --rm",[103,27225,27226],{"class":162}," --gpus",[103,27228,27229],{"class":218}," all",[103,27231,27232],{"class":218}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[103,27234,27235],{"class":218}," nvidia-smi\n",[14,27237,27238],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27240,27241],{},[1451,27242],{"alt":24,"src":27243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[74,27245,27247],{"id":27246},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27249,27250],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27252,27253],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27255,27256],{},[17,27257,27258],{"href":27258,"rel":27259},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[21],[14,27261,27262],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27264,27265],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27267,27268],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[251,27270,27271,27287],{},[254,27272,27273],{},[257,27274,27275,27278,27281,27284],{},[260,27276,27277],{"align":23726},"镜像类型",[260,27279,27280],{"align":23726},"适用场景",[260,27282,27283],{"align":23726},"示例标签",[260,27285,27286],{"align":23726},"大小",[298,27288,27289,27303,27317],{},[257,27290,27291,27294,27297,27300],{},[303,27292,27293],{"align":23726},"base",[303,27295,27296],{"align":23726},"仅需 CUDA 运行时库",[303,27298,27299],{"align":23726},"12.4.0-base-ubuntu22.04",[303,27301,27302],{"align":23726},"~240MB",[257,27304,27305,27308,27311,27314],{},[303,27306,27307],{"align":23726},"runtime",[303,27309,27310],{"align":23726},"部署编译后的应用（含数学库）",[303,27312,27313],{"align":23726},"12.4.0-runtime-ubuntu22.04",[303,27315,27316],{"align":23726},"~2GB",[257,27318,27319,27322,27325,27328],{},[303,27320,27321],{"align":23726},"devel",[303,27323,27324],{"align":23726},"开发环境（含编译工具）",[303,27326,27327],{"align":23726},"12.4.0-devel-ubuntu22.04",[303,27329,27330],{"align":23726},"~3GB",[14,27332,27333,27334,27337],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[100,27335,27336],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27339,27340],{},[1451,27341],{"alt":24,"src":27342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27344,27345],{},"在dockerfile里就可以开头这么写：",[94,27347,27349],{"className":23812,"code":27348,"language":23814,"meta":24,"style":24},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[100,27350,27351,27356],{"__ignoreMap":24},[103,27352,27353],{"class":105,"line":106},[103,27354,27355],{"class":172},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[103,27357,27358,27361],{"class":105,"line":25},[103,27359,27360],{"class":1952},"FROM",[103,27362,27363],{"class":218}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[74,27365,27367],{"id":27366},"_34配置以太网","3.4.配置以太网",[14,27369,27370],{},"指定网络模式",[94,27372,27374],{"className":23812,"code":27373,"language":23814,"meta":24,"style":24},"--net=host \\\n",[100,27375,27376],{"__ignoreMap":24},[103,27377,27378,27381,27383,27386],{"class":105,"line":106},[103,27379,27380],{"class":113},"--net",[103,27382,159],{"class":109},[103,27384,27385],{"class":218},"host",[103,27387,24668],{"class":1952},[14,27389,27390],{},"启动参数里加上这行即可。具体在下方",[14,27392,27393],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1120,27395,27396,27399,27402,27405],{},[60,27397,27398],{},"--net=bridge:默认选项，表示连接到默认的网桥",[60,27400,27401],{},"--net=host:容器使用宿主机的网络",[60,27403,27404],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[60,27406,27407],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5116,27409,27410],{},"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":24,"searchDepth":25,"depth":25,"links":27412},[27413,27414,27415,27416],{"id":26727,"depth":1168,"text":26728},{"id":26794,"depth":1168,"text":26795},{"id":27246,"depth":1168,"text":27247},{"id":27366,"depth":1168,"text":27367},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26716,"description":26724},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27423,"title":27424,"body":27425,"description":27432,"extension":28,"meta":27438,"navigation":30,"path":27439,"seo":27440,"stem":27441,"__hash__":27442},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27426,"toc":27436},[27427,27430,27433],[10,27428,27424],{"id":27429},"_4dockerhub换源",[14,27431,27432],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27434,27435],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":24,"searchDepth":25,"depth":25,"links":27437},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27424,"description":27432},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27444,"title":27445,"body":27446,"description":24,"extension":28,"meta":28458,"navigation":30,"path":28459,"seo":28460,"stem":28461,"__hash__":28462},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27447,"toc":28453},[27448,27451,27455,27461,27465,27468,27808,27811,27814,27817,27822,27827,27830,27833,27836,27839,27858,27861,27872,27878,28060,28070,28086,28349,28351,28376,28391,28400,28450],[10,27449,27445],{"id":27450},"_5docker命令学习",[74,27452,27454],{"id":27453},"_51参考文档","5.1.参考文档",[14,27456,27457],{},[17,27458,27459],{"href":27459,"rel":27460},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[21],[74,27462,27464],{"id":27463},"_52常用命令","5.2.常用命令",[14,27466,27467],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[251,27469,27470,27483],{},[254,27471,27472],{},[257,27473,27474,27477,27480],{},[260,27475,27476],{"align":23726},"命令",[260,27478,27479],{"align":23726},"描述",[260,27481,27482],{"align":23726},"示例",[298,27484,27485,27496,27507,27518,27529,27540,27551,27562,27572,27583,27594,27605,27615,27626,27637,27648,27658,27668,27678,27688,27699,27710,27721,27732,27743,27754,27764,27775,27786,27797],{},[257,27486,27487,27490,27493],{},[303,27488,27489],{"align":23726},"docker run",[303,27491,27492],{"align":23726},"创建并启动一个新的容器。",[303,27494,27495],{"align":23726},"docker run -it ubuntu bash",[257,27497,27498,27501,27504],{},[303,27499,27500],{"align":23726},"docker build",[303,27502,27503],{"align":23726},"通过指定的 Dockerfile 创建一个新的镜像。",[303,27505,27506],{"align":23726},"docker build -t myimage .",[257,27508,27509,27512,27515],{},[303,27510,27511],{"align":23726},"docker pull",[303,27513,27514],{"align":23726},"从 Docker 仓库拉取镜像。",[303,27516,27517],{"align":23726},"docker pull ubuntu",[257,27519,27520,27523,27526],{},[303,27521,27522],{"align":23726},"docker push",[303,27524,27525],{"align":23726},"将本地镜像推送到 Docker 仓库。",[303,27527,27528],{"align":23726},"docker push myimage",[257,27530,27531,27534,27537],{},[303,27532,27533],{"align":23726},"docker stop",[303,27535,27536],{"align":23726},"停止一个正在运行的容器。",[303,27538,27539],{"align":23726},"docker stop container_id",[257,27541,27542,27545,27548],{},[303,27543,27544],{"align":23726},"docker start",[303,27546,27547],{"align":23726},"启动一个已经存在的容器。",[303,27549,27550],{"align":23726},"docker start container_id",[257,27552,27553,27556,27559],{},[303,27554,27555],{"align":23726},"docker restart",[303,27557,27558],{"align":23726},"重新启动容器。",[303,27560,27561],{"align":23726},"docker restart container_id",[257,27563,27564,27567,27570],{},[303,27565,27566],{"align":23726},"docker ps",[303,27568,27569],{"align":23726},"列出当前正在运行的容器。",[303,27571,27566],{"align":23726},[257,27573,27574,27577,27580],{},[303,27575,27576],{"align":23726},"docker rm",[303,27578,27579],{"align":23726},"删除一个或多个停止的容器。",[303,27581,27582],{"align":23726},"docker rm container_id",[257,27584,27585,27588,27591],{},[303,27586,27587],{"align":23726},"docker exec",[303,27589,27590],{"align":23726},"在一个正在运行的容器中执行命令。",[303,27592,27593],{"align":23726},"docker exec -it container_id bash",[257,27595,27596,27599,27602],{},[303,27597,27598],{"align":23726},"docker logs",[303,27600,27601],{"align":23726},"查看容器的日志输出。",[303,27603,27604],{"align":23726},"docker logs container_id",[257,27606,27607,27610,27613],{},[303,27608,27609],{"align":23726},"docker images",[303,27611,27612],{"align":23726},"列出本地所有镜像。",[303,27614,27609],{"align":23726},[257,27616,27617,27620,27623],{},[303,27618,27619],{"align":23726},"docker rmi",[303,27621,27622],{"align":23726},"删除一个或多个镜像。",[303,27624,27625],{"align":23726},"docker rmi myimage",[257,27627,27628,27631,27634],{},[303,27629,27630],{"align":23726},"docker network",[303,27632,27633],{"align":23726},"管理 Docker 网络。",[303,27635,27636],{"align":23726},"docker network ls",[257,27638,27639,27642,27645],{},[303,27640,27641],{"align":23726},"docker volume",[303,27643,27644],{"align":23726},"管理 Docker 数据卷。",[303,27646,27647],{"align":23726},"docker volume ls",[257,27649,27650,27653,27656],{},[303,27651,27652],{"align":23726},"docker-compose up",[303,27654,27655],{"align":23726},"启动 docker-compose.yml 中定义的所有服务。",[303,27657,27652],{"align":23726},[257,27659,27660,27663,27666],{},[303,27661,27662],{"align":23726},"docker-compose down",[303,27664,27665],{"align":23726},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[303,27667,27662],{"align":23726},[257,27669,27670,27673,27676],{},[303,27671,27672],{"align":23726},"docker info",[303,27674,27675],{"align":23726},"显示 Docker 系统的详细信息。",[303,27677,27672],{"align":23726},[257,27679,27680,27683,27686],{},[303,27681,27682],{"align":23726},"docker stats",[303,27684,27685],{"align":23726},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[303,27687,27682],{"align":23726},[257,27689,27690,27693,27696],{},[303,27691,27692],{"align":23726},"docker inspect",[303,27694,27695],{"align":23726},"查看容器或镜像的详细信息（JSON 格式）。",[303,27697,27698],{"align":23726},"docker inspect container_id",[257,27700,27701,27704,27707],{},[303,27702,27703],{"align":23726},"docker save",[303,27705,27706],{"align":23726},"将一个镜像保存为 tar 文件。",[303,27708,27709],{"align":23726},"docker save -o myimage.tar myimage",[257,27711,27712,27715,27718],{},[303,27713,27714],{"align":23726},"docker load",[303,27716,27717],{"align":23726},"从 tar 文件中加载镜像。",[303,27719,27720],{"align":23726},"docker load -i myimage.tar",[257,27722,27723,27726,27729],{},[303,27724,27725],{"align":23726},"docker tag",[303,27727,27728],{"align":23726},"为镜像添加标签（tag）。",[303,27730,27731],{"align":23726},"docker tag myimage myimage:v1",[257,27733,27734,27737,27740],{},[303,27735,27736],{"align":23726},"docker buildx build",[303,27738,27739],{"align":23726},"使用 Buildx 构建多架构镜像。",[303,27741,27742],{"align":23726},"docker buildx build -t myimage .",[257,27744,27745,27748,27751],{},[303,27746,27747],{"align":23726},"docker buildx create",[303,27749,27750],{"align":23726},"创建一个新的 Buildx 构建实例。",[303,27752,27753],{"align":23726},"docker buildx create –use",[257,27755,27756,27759,27762],{},[303,27757,27758],{"align":23726},"docker buildx ls",[303,27760,27761],{"align":23726},"列出所有可用的 Buildx 构建实例。",[303,27763,27758],{"align":23726},[257,27765,27766,27769,27772],{},[303,27767,27768],{"align":23726},"docker buildx use",[303,27770,27771],{"align":23726},"设置当前的 Buildx 构建实例。",[303,27773,27774],{"align":23726},"docker buildx use mybuilder",[257,27776,27777,27780,27783],{},[303,27778,27779],{"align":23726},"docker buildx bake",[303,27781,27782],{"align":23726},"使用 Bake 文件批量构建镜像。",[303,27784,27785],{"align":23726},"docker buildx bake -f bake.hcl",[257,27787,27788,27791,27794],{},[303,27789,27790],{"align":23726},"docker buildx build –push",[303,27792,27793],{"align":23726},"构建镜像并推送到镜像仓库。",[303,27795,27796],{"align":23726},"docker buildx build –push -t myimage .",[257,27798,27799,27802,27805],{},[303,27800,27801],{"align":23726},"docker buildx build –platform",[303,27803,27804],{"align":23726},"构建镜像并为多个平台生成支持。",[303,27806,27807],{"align":23726},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27809,27810],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27812,27813],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27815,27816],{},"docker images 可以查看已经下载的镜像",[14,27818,27819],{},[1451,27820],{"alt":24,"src":27821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27823,27824],{},[263,27825,27826],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27828,27829],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27831,27832],{},"docker container logs 查看容器日志",[14,27834,27835],{},"docker top 查看容器里的进程",[14,27837,27838],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[94,27840,27842],{"className":23812,"code":27841,"language":23814,"meta":24,"style":24},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[100,27843,27844],{"__ignoreMap":24},[103,27845,27846,27849,27852,27855],{"class":105,"line":106},[103,27847,27848],{"class":1952},"如：docker",[103,27850,27851],{"class":218}," cp",[103,27853,27854],{"class":218}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[103,27856,27857],{"class":218}," \u002Fmydata\u002Fnginx\n",[14,27859,27860],{},"docker run时在启动容器的时候会有几个常用的选项：",[1120,27862,27863,27866,27869],{},[60,27864,27865],{},"-d选项：表示后台运行",[60,27867,27868],{},"-P选项：随机端口映射",[60,27870,27871],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[74,27873,27875],{"id":27874},"_53run命令的参数非常重要",[263,27876,27877],{},"5.3.run命令的参数（非常重要）",[251,27879,27880,27893],{},[254,27881,27882],{},[257,27883,27884,27887,27890],{},[260,27885,27886],{"align":23726},"参数\u002F配置",[260,27888,27889],{"align":23726},"功能说明",[260,27891,27892],{"align":23726},"重要性与参考依据",[298,27894,27895,27906,27917,27928,27939,27950,27961,27972,27983,27994,28005,28016,28027,28038,28049],{},[257,27896,27897,27900,27903],{},[303,27898,27899],{"align":23726},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[303,27901,27902],{"align":23726},"指定容器名称，便于后续管理",[303,27904,27905],{"align":23726},"替代随机生成的容器名。",[257,27907,27908,27911,27914],{},[303,27909,27910],{"align":23726},"–gpus all",[303,27912,27913],{"align":23726},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[303,27915,27916],{"align":23726},"用于CUDA加速等GPU依赖任务。",[257,27918,27919,27922,27925],{},[303,27920,27921],{"align":23726},"-e NVIDIA_DRIVER_CAPABILITIES=all",[303,27923,27924],{"align":23726},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[303,27926,27927],{"align":23726},"确保容器内GPU功能完整67。",[257,27929,27930,27933,27936],{},[303,27931,27932],{"align":23726},"-dit",[303,27934,27935],{"align":23726},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[303,27937,27938],{"align":23726},"允许容器在后台运行并支持交互操作。",[257,27940,27941,27944,27947],{},[303,27942,27943],{"align":23726},"–privileged",[303,27945,27946],{"align":23726},"赋予容器完全主机权限（可访问设备、内核模块等）",[303,27948,27949],{"align":23726},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[257,27951,27952,27955,27958],{},[303,27953,27954],{"align":23726},"–net=host",[303,27956,27957],{"align":23726},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[303,27959,27960],{"align":23726},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[257,27962,27963,27966,27969],{},[303,27964,27965],{"align":23726},"–group-add audio–group-add video–group-add dialout",[303,27967,27968],{"align":23726},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[303,27970,27971],{"align":23726},"避免权限问题（如避免无法调用摄像头、麦克风）。",[257,27973,27974,27977,27980],{},[303,27975,27976],{"align":23726},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[303,27978,27979],{"align":23726},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[303,27981,27982],{"align":23726},"支持容器内运行图形界面应用（如OpenCV可视化）。",[257,27984,27985,27988,27991],{},[303,27986,27987],{"align":23726},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[303,27989,27990],{"align":23726},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[303,27992,27993],{"align":23726},"实现容器内图形显示。",[257,27995,27996,27999,28002],{},[303,27997,27998],{"align":23726},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[303,28000,28001],{"align":23726},"挂载X11认证文件（只读）",[303,28003,28004],{"align":23726},"确保容器有权连接宿主机显示服务。",[257,28006,28007,28010,28013],{},[303,28008,28009],{"align":23726},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[303,28011,28012],{"align":23726},"挂载Wayland显示协议相关目录",[303,28014,28015],{"align":23726},"支持Wayland协议的图形显示。",[257,28017,28018,28021,28024],{},[303,28019,28020],{"align":23726},"–ulimit nofile=1024:524288",[303,28022,28023],{"align":23726},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[303,28025,28026],{"align":23726},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[257,28028,28029,28032,28035],{},[303,28030,28031],{"align":23726},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[303,28033,28034],{"align":23726},"挂载宿主机用户目录到容器内同名路径",[303,28036,28037],{"align":23726},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[257,28039,28040,28043,28046],{},[303,28041,28042],{"align":23726},"-w \u002Fhome\u002Ftungchiahui",[303,28044,28045],{"align":23726},"设置容器启动后的默认工作目录",[303,28047,28048],{"align":23726},"直接进入项目路径，方便执行命令2324。",[257,28050,28051,28054,28057],{},[303,28052,28053],{"align":23726},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[303,28055,28056],{"align":23726},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[303,28058,28059],{"align":23726},"提供预配置的深度学习与机器人开发环境。",[14,28061,28062,28063,28065,28066,28069],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[100,28064,24566],{},"加不加",[100,28067,28068],{},"sudo -E","都无所谓。",[14,28071,28072,28073,28075,28076,28078,28079,28082,28083,28085],{},"用户已经被加到docker组了，不用",[100,28074,24566],{},"也行跑，其次，",[100,28077,24566],{},"运行的话，你的",[100,28080,28081],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[100,28084,28081],{},"更不可能变了。",[94,28087,28089],{"className":23812,"code":28088,"language":23814,"meta":24,"style":24},"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",[100,28090,28091,28104,28114,28124,28136,28143,28150,28157,28167,28176,28185,28199,28211,28223,28232,28242,28251,28266,28299,28326,28337,28344],{"__ignoreMap":24},[103,28092,28093,28095,28097,28099,28102],{"class":105,"line":106},[103,28094,24566],{"class":1952},[103,28096,26310],{"class":218},[103,28098,27220],{"class":218},[103,28100,28101],{"class":162}," --name=ros_opencv_cuda",[103,28103,24668],{"class":162},[103,28105,28106,28109,28112],{"class":105,"line":25},[103,28107,28108],{"class":113},"--gpus ",[103,28110,28111],{"class":218},"all",[103,28113,24668],{"class":162},[103,28115,28116,28119,28122],{"class":105,"line":1168},[103,28117,28118],{"class":113},"-e ",[103,28120,28121],{"class":218},"NVIDIA_DRIVER_CAPABILITIES=all",[103,28123,24668],{"class":162},[103,28125,28126,28128,28131,28134],{"class":105,"line":1183},[103,28127,28118],{"class":113},[103,28129,28130],{"class":218},"DISPLAY=",[103,28132,28133],{"class":113},"$DISPLAY ",[103,28135,26165],{"class":162},[103,28137,28138,28141],{"class":105,"line":1189},[103,28139,28140],{"class":113},"-dit ",[103,28142,26165],{"class":162},[103,28144,28145,28148],{"class":105,"line":1203},[103,28146,28147],{"class":113},"--privileged ",[103,28149,26165],{"class":162},[103,28151,28152,28155],{"class":105,"line":1209},[103,28153,28154],{"class":113},"--net=host ",[103,28156,26165],{"class":162},[103,28158,28159,28162,28165],{"class":105,"line":1300},[103,28160,28161],{"class":113},"--group-add ",[103,28163,28164],{"class":218},"audio",[103,28166,24668],{"class":162},[103,28168,28169,28171,28174],{"class":105,"line":1306},[103,28170,28161],{"class":113},[103,28172,28173],{"class":218},"video",[103,28175,24668],{"class":162},[103,28177,28178,28180,28183],{"class":105,"line":1318},[103,28179,28161],{"class":113},[103,28181,28182],{"class":218},"dialout",[103,28184,24668],{"class":162},[103,28186,28187,28189,28192,28194,28197],{"class":105,"line":1601},[103,28188,28118],{"class":113},[103,28190,28191],{"class":218},"XAUTHORITY=",[103,28193,28081],{"class":113},[103,28195,28196],{"class":218},"\u002F.Xauthority",[103,28198,24668],{"class":162},[103,28200,28201,28203,28206,28209],{"class":105,"line":1606},[103,28202,28118],{"class":113},[103,28204,28205],{"class":218},"WAYLAND_DISPLAY=",[103,28207,28208],{"class":113},"$WAYLAND_DISPLAY ",[103,28210,26165],{"class":162},[103,28212,28213,28215,28218,28221],{"class":105,"line":1612},[103,28214,28118],{"class":113},[103,28216,28217],{"class":218},"XDG_RUNTIME_DIR=",[103,28219,28220],{"class":113},"$XDG_RUNTIME_DIR ",[103,28222,26165],{"class":162},[103,28224,28225,28227,28230],{"class":105,"line":1617},[103,28226,28118],{"class":113},[103,28228,28229],{"class":218},"QT_QPA_PLATFORM=xcb",[103,28231,24668],{"class":162},[103,28233,28234,28237,28240],{"class":105,"line":1631},[103,28235,28236],{"class":113},"-v ",[103,28238,28239],{"class":218},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[103,28241,24668],{"class":162},[103,28243,28244,28246,28249],{"class":105,"line":1636},[103,28245,28236],{"class":113},[103,28247,28248],{"class":218},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[103,28250,24668],{"class":162},[103,28252,28253,28256,28259,28261,28264],{"class":105,"line":1642},[103,28254,28255],{"class":113},"-v $HOME",[103,28257,28258],{"class":218},"\u002F.Xauthority:",[103,28260,28081],{"class":113},[103,28262,28263],{"class":218},"\u002F.Xauthority:ro",[103,28265,24668],{"class":162},[103,28267,28268,28270,28273,28275,28278,28281,28283,28286,28288,28290,28292,28294,28297],{"class":105,"line":1663},[103,28269,28236],{"class":113},[103,28271,28272],{"class":218},"\u002Frun\u002Fuser\u002F",[103,28274,25089],{"class":113},[103,28276,28277],{"class":1952},"id",[103,28279,28280],{"class":162}," -u",[103,28282,542],{"class":113},[103,28284,28285],{"class":218},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[103,28287,25089],{"class":113},[103,28289,28277],{"class":1952},[103,28291,28280],{"class":162},[103,28293,542],{"class":113},[103,28295,28296],{"class":218},"\u002Fwayland-0",[103,28298,24668],{"class":162},[103,28300,28301,28303,28305,28307,28309,28311,28313,28316,28318,28320,28322,28324],{"class":105,"line":1668},[103,28302,28236],{"class":113},[103,28304,28272],{"class":218},[103,28306,25089],{"class":113},[103,28308,28277],{"class":1952},[103,28310,28280],{"class":162},[103,28312,542],{"class":113},[103,28314,28315],{"class":218},":\u002Frun\u002Fuser\u002F",[103,28317,25089],{"class":113},[103,28319,28277],{"class":1952},[103,28321,28280],{"class":162},[103,28323,13704],{"class":113},[103,28325,26165],{"class":162},[103,28327,28328,28330,28332,28335],{"class":105,"line":1682},[103,28329,28255],{"class":113},[103,28331,972],{"class":218},[103,28333,28334],{"class":113},"$HOME ",[103,28336,26165],{"class":162},[103,28338,28339,28342],{"class":105,"line":1687},[103,28340,28341],{"class":113},"-w $HOME ",[103,28343,26165],{"class":162},[103,28345,28346],{"class":105,"line":1716},[103,28347,28348],{"class":113},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28350,9015],{},[57,28352,28353,28361,28364,28367],{},[60,28354,28355,13785,28357,28360],{},[100,28356,28121],{},[100,28358,28359],{},"--gpus all","没有英伟达显卡请注释。",[60,28362,28363],{},"--name后面请自己为容器起名。",[60,28365,28366],{},"最后一行仓库名称请你自己找对应的镜像填上。",[60,28368,28369,28370,28375],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23543,28371,28372],{},[263,28373,28374],{},"请不要加","。",[94,28377,28379],{"className":23812,"code":28378,"language":23814,"meta":24,"style":24},"--ulimit nofile=1024:524288 \\\n",[100,28380,28381],{"__ignoreMap":24},[103,28382,28383,28386,28389],{"class":105,"line":106},[103,28384,28385],{"class":1952},"--ulimit",[103,28387,28388],{"class":218}," nofile=1024:524288",[103,28390,24668],{"class":162},[14,28392,28393,28394,28399],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23543,28395,28396],{},[263,28397,28398],{},"不建议","**.**",[94,28401,28403],{"className":23812,"code":28402,"language":23814,"meta":24,"style":24},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[100,28404,28405,28432,28441],{"__ignoreMap":24},[103,28406,28407,28410,28413,28415,28417,28419,28421,28423,28425,28428,28430],{"class":105,"line":106},[103,28408,28409],{"class":1952},"--user",[103,28411,28412],{"class":113}," $(",[103,28414,28277],{"class":1952},[103,28416,28280],{"class":162},[103,28418,542],{"class":113},[103,28420,972],{"class":218},[103,28422,25089],{"class":113},[103,28424,28277],{"class":1952},[103,28426,28427],{"class":162}," -g",[103,28429,13704],{"class":113},[103,28431,26165],{"class":162},[103,28433,28434,28436,28439],{"class":105,"line":25},[103,28435,28236],{"class":113},[103,28437,28438],{"class":218},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[103,28440,24668],{"class":162},[103,28442,28443,28445,28448],{"class":105,"line":1168},[103,28444,28236],{"class":113},[103,28446,28447],{"class":218},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[103,28449,24668],{"class":162},[5116,28451,28452],{},"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":24,"searchDepth":25,"depth":25,"links":28454},[28455,28456,28457],{"id":27453,"depth":1168,"text":27454},{"id":27463,"depth":1168,"text":27464},{"id":27874,"depth":1168,"text":27877},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27445,"description":24},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28464,"title":28465,"body":28466,"description":24,"extension":28,"meta":30089,"navigation":30,"path":30090,"seo":30091,"stem":30092,"__hash__":30093},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28467,"toc":30084},[28468,28471,28475,28478,28700,28704,28708,28711,28817,28822,28825,28830,28833,28838,28841,28846,28849,28861,28864,28869,28876,28904,28911,28987,28992,28995,29018,29020,29095,29100,29103,29107,29115,29120,29125,29129,29140,29146,29149,29152,29176,29179,29182,29210,29213,29216,29681,29684,29689,29694,29698,29721,29726,29730,29734,29737,29740,29743,29770,29773,29776,29794,29797,29800,29822,29830,29835,29840,29844,29847,29850,29853,29856,29901,29904,29922,29925,29930,29933,29954,29957,30013,30016,30021,30025,30028,30035,30038,30041,30046,30049,30065,30068,30081],[10,28469,28465],{"id":28470},"_6手动创建docker镜像",[74,28472,28474],{"id":28473},"_61dockerfile","6.1.DockerFile",[14,28476,28477],{},"常用命令：",[251,28479,28480,28491],{},[254,28481,28482],{},[257,28483,28484,28487,28489],{},[260,28485,28486],{"align":23726},"指令",[260,28488,25859],{"align":23726},[260,28490,27482],{"align":23726},[298,28492,28493,28503,28519,28530,28541,28552,28563,28574,28585,28599,28613,28624,28638,28649,28660,28674,28689],{},[257,28494,28495,28497,28500],{},[303,28496,27360],{"align":23726},[303,28498,28499],{"align":23726},"指定基础镜像，是 Dockerfile 的起点",[303,28501,28502],{"align":23726},"FROM ubuntu:22.04",[257,28504,28505,28508,28511],{},[303,28506,28507],{"align":23726},"LABEL",[303,28509,28510],{"align":23726},"添加元数据（如作者、版本等）",[303,28512,28513,28514,28518],{"align":23726},"LABEL maintainer=”",[17,28515,28517],{"href":28516},"mailto:you@example.com","you@example.com","”",[257,28520,28521,28524,28527],{},[303,28522,28523],{"align":23726},"ENV",[303,28525,28526],{"align":23726},"设置环境变量",[303,28528,28529],{"align":23726},"ENV PORT=8080",[257,28531,28532,28535,28538],{},[303,28533,28534],{"align":23726},"ARG",[303,28536,28537],{"align":23726},"构建参数，只在构建期间可用",[303,28539,28540],{"align":23726},"ARG VERSION=1.0",[257,28542,28543,28546,28549],{},[303,28544,28545],{"align":23726},"RUN",[303,28547,28548],{"align":23726},"构建镜像时运行命令",[303,28550,28551],{"align":23726},"RUN apt-get update && apt-get install -y curl",[257,28553,28554,28557,28560],{},[303,28555,28556],{"align":23726},"COPY",[303,28558,28559],{"align":23726},"复制文件到镜像中",[303,28561,28562],{"align":23726},"COPY . \u002Fapp",[257,28564,28565,28568,28571],{},[303,28566,28567],{"align":23726},"ADD",[303,28569,28570],{"align":23726},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[303,28572,28573],{"align":23726},"ADD archive.tar.gz \u002Fdata\u002F",[257,28575,28576,28579,28582],{},[303,28577,28578],{"align":23726},"WORKDIR",[303,28580,28581],{"align":23726},"设置工作目录",[303,28583,28584],{"align":23726},"WORKDIR \u002Fopt",[257,28586,28587,28590,28593],{},[303,28588,28589],{"align":23726},"CMD",[303,28591,28592],{"align":23726},"设置容器启动时默认命令（可被 docker run 覆盖）",[303,28594,28595,28596],{"align":23726},"CMD ",[103,28597,28598],{},"“node”, “index.js”",[257,28600,28601,28604,28607],{},[303,28602,28603],{"align":23726},"ENTRYPOINT",[303,28605,28606],{"align":23726},"设置容器启动时固定命令（通常用于 CLI 工具等）",[303,28608,28609,28610],{"align":23726},"ENTRYPOINT ",[103,28611,28612],{},"“python3”",[257,28614,28615,28618,28621],{},[303,28616,28617],{"align":23726},"EXPOSE",[303,28619,28620],{"align":23726},"声明镜像内服务监听的端口（不会自动映射）",[303,28622,28623],{"align":23726},"EXPOSE 80",[257,28625,28626,28629,28632],{},[303,28627,28628],{"align":23726},"VOLUME",[303,28630,28631],{"align":23726},"声明数据卷挂载点",[303,28633,28634,28635],{"align":23726},"VOLUME ",[103,28636,28637],{},"“\u002Fdata”",[257,28639,28640,28643,28646],{},[303,28641,28642],{"align":23726},"USER",[303,28644,28645],{"align":23726},"设置后续命令执行的用户",[303,28647,28648],{"align":23726},"USER appuser",[257,28650,28651,28654,28657],{},[303,28652,28653],{"align":23726},"ONBUILD",[303,28655,28656],{"align":23726},"当镜像作为其他镜像基础镜像时触发的构建指令",[303,28658,28659],{"align":23726},"ONBUILD COPY . \u002Fsrc",[257,28661,28662,28665,28668],{},[303,28663,28664],{"align":23726},"SHELL",[303,28666,28667],{"align":23726},"更改默认 shell，比如将 sh -c 改为 bash -c",[303,28669,28670,28671],{"align":23726},"SHELL ",[103,28672,28673],{},"“\u002Fbin\u002Fbash”, “-c”",[257,28675,28676,28679,28682],{},[303,28677,28678],{"align":23726},"HEALTHCHECK",[303,28680,28681],{"align":23726},"定义容器运行时的健康检查命令",[303,28683,28684,28685],{"align":23726},"`HEALTHCHECK CMD curl –fail ",[17,28686,28687],{"href":28687,"rel":28688},"http:\u002F\u002Flocalhost:8080",[21],[257,28690,28691,28694,28697],{},[303,28692,28693],{"align":23726},"STOPSIGNAL",[303,28695,28696],{"align":23726},"容器停止时发送的信号",[303,28698,28699],{"align":23726},"STOPSIGNAL SIGKILL",[74,28701,28703],{"id":28702},"_62自己创建容器","6.2.自己创建容器",[21988,28705,28707],{"id":28706},"_621手动创建","6.2.1.手动创建",[14,28709,28710],{},"在x86电脑上编译x86的：",[94,28712,28714],{"className":23812,"code":28713,"language":23814,"meta":24,"style":24},"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",[100,28715,28716,28732,28736,28749,28753,28766,28770,28783,28787,28800,28804],{"__ignoreMap":24},[103,28717,28718,28720,28723,28726,28729],{"class":105,"line":106},[103,28719,26543],{"class":1952},[103,28721,28722],{"class":218}," build",[103,28724,28725],{"class":162}," -t",[103,28727,28728],{"class":218}," ros-melodic-cuda118-cudnn8-bionic:latest",[103,28730,28731],{"class":218}," .\n",[103,28733,28734],{"class":105,"line":25},[103,28735,2389],{"emptyLinePlaceholder":30},[103,28737,28738,28740,28742,28744,28747],{"class":105,"line":1168},[103,28739,26543],{"class":1952},[103,28741,28722],{"class":218},[103,28743,28725],{"class":162},[103,28745,28746],{"class":218}," ros-noetic-focal:latest",[103,28748,28731],{"class":218},[103,28750,28751],{"class":105,"line":1183},[103,28752,2389],{"emptyLinePlaceholder":30},[103,28754,28755,28757,28759,28761,28764],{"class":105,"line":1189},[103,28756,26543],{"class":1952},[103,28758,28722],{"class":218},[103,28760,28725],{"class":162},[103,28762,28763],{"class":218}," ros-humble-jammy:latest",[103,28765,28731],{"class":218},[103,28767,28768],{"class":105,"line":1203},[103,28769,2389],{"emptyLinePlaceholder":30},[103,28771,28772,28774,28776,28778,28781],{"class":105,"line":1209},[103,28773,26543],{"class":1952},[103,28775,28722],{"class":218},[103,28777,28725],{"class":162},[103,28779,28780],{"class":218}," ros-jazzy-noble:latest",[103,28782,28731],{"class":218},[103,28784,28785],{"class":105,"line":1300},[103,28786,2389],{"emptyLinePlaceholder":30},[103,28788,28789,28791,28793,28795,28798],{"class":105,"line":1306},[103,28790,26543],{"class":1952},[103,28792,28722],{"class":218},[103,28794,28725],{"class":162},[103,28796,28797],{"class":218}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[103,28799,28731],{"class":218},[103,28801,28802],{"class":105,"line":1318},[103,28803,2389],{"emptyLinePlaceholder":30},[103,28805,28806,28808,28810,28812,28815],{"class":105,"line":1601},[103,28807,26543],{"class":1952},[103,28809,28722],{"class":218},[103,28811,28725],{"class":162},[103,28813,28814],{"class":218}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[103,28816,28731],{"class":218},[14,28818,28819],{},[1451,28820],{"alt":24,"src":28821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28823,28824],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28826,28827],{},[1451,28828],{"alt":24,"src":28829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28831,28832],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[57,28834,28835],{},[60,28836,28837],{},"创建 Docker Hub 账户",[14,28839,28840],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[57,28842,28843],{"start":25},[60,28844,28845],{},"登录 Docker Hub",[14,28847,28848],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[94,28850,28852],{"className":23812,"code":28851,"language":23814,"meta":24,"style":24},"docker login\n",[100,28853,28854],{"__ignoreMap":24},[103,28855,28856,28858],{"class":105,"line":106},[103,28857,26543],{"class":1952},[103,28859,28860],{"class":218}," login\n",[14,28862,28863],{},"输入你的 Docker Hub 用户名和密码进行验证。",[57,28865,28866],{},[60,28867,28868],{},"为你的镜像打标签",[14,28870,28871,28872,28875],{},"Docker Hub 使用 ",[100,28873,28874],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[94,28877,28879],{"className":23812,"code":28878,"language":23814,"meta":24,"style":24},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[100,28880,28881],{"__ignoreMap":24},[103,28882,28883,28885,28888,28890,28893,28896,28899,28901],{"class":105,"line":106},[103,28884,26543],{"class":1952},[103,28886,28887],{"class":218}," tag",[103,28889,28780],{"class":218},[103,28891,28892],{"class":109}," \u003C",[103,28894,28895],{"class":218},"你的用户",[103,28897,28898],{"class":113},"名",[103,28900,1073],{"class":109},[103,28902,28903],{"class":218},"\u002Fros-jazzy-noble:latest\n",[14,28905,28906,28907,28910],{},"例如，如果你的 Docker Hub 用户名是 ",[100,28908,28909],{},"tungchiahui","，你应该执行：",[94,28912,28914],{"className":23812,"code":28913,"language":23814,"meta":24,"style":24},"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",[100,28915,28916,28927,28931,28942,28946,28957,28961,28972,28976],{"__ignoreMap":24},[103,28917,28918,28920,28922,28924],{"class":105,"line":106},[103,28919,26543],{"class":1952},[103,28921,28887],{"class":218},[103,28923,28746],{"class":218},[103,28925,28926],{"class":218}," tungchiahui\u002Fros-noetic-focal:latest\n",[103,28928,28929],{"class":105,"line":25},[103,28930,2389],{"emptyLinePlaceholder":30},[103,28932,28933,28935,28937,28939],{"class":105,"line":1168},[103,28934,26543],{"class":1952},[103,28936,28887],{"class":218},[103,28938,28763],{"class":218},[103,28940,28941],{"class":218}," tungchiahui\u002Fros-humble-jammy:latest\n",[103,28943,28944],{"class":105,"line":1183},[103,28945,2389],{"emptyLinePlaceholder":30},[103,28947,28948,28950,28952,28954],{"class":105,"line":1189},[103,28949,26543],{"class":1952},[103,28951,28887],{"class":218},[103,28953,28780],{"class":218},[103,28955,28956],{"class":218}," tungchiahui\u002Fros-jazzy-noble:latest\n",[103,28958,28959],{"class":105,"line":1203},[103,28960,2389],{"emptyLinePlaceholder":30},[103,28962,28963,28965,28967,28969],{"class":105,"line":1209},[103,28964,26543],{"class":1952},[103,28966,28887],{"class":218},[103,28968,28797],{"class":218},[103,28970,28971],{"class":218}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[103,28973,28974],{"class":105,"line":1300},[103,28975,2389],{"emptyLinePlaceholder":30},[103,28977,28978,28980,28982,28984],{"class":105,"line":1306},[103,28979,26543],{"class":1952},[103,28981,28887],{"class":218},[103,28983,28814],{"class":218},[103,28985,28986],{"class":218}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[57,28988,28989],{"start":25},[60,28990,28991],{},"推送镜像到 Docker Hub",[14,28993,28994],{},"使用以下命令将镜像推送到 Docker Hub：",[94,28996,28998],{"className":23812,"code":28997,"language":23814,"meta":24,"style":24},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[100,28999,29000],{"__ignoreMap":24},[103,29001,29002,29004,29007,29009,29011,29013,29015],{"class":105,"line":106},[103,29003,26543],{"class":1952},[103,29005,29006],{"class":218}," push",[103,29008,28892],{"class":109},[103,29010,28895],{"class":218},[103,29012,28898],{"class":113},[103,29014,1073],{"class":109},[103,29016,29017],{"class":218},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29019,14623],{},[94,29021,29023],{"className":23812,"code":29022,"language":23814,"meta":24,"style":24},"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",[100,29024,29025,29033,29037,29045,29049,29057,29061,29070,29074,29082,29086],{"__ignoreMap":24},[103,29026,29027,29029,29031],{"class":105,"line":106},[103,29028,26543],{"class":1952},[103,29030,29006],{"class":218},[103,29032,28926],{"class":218},[103,29034,29035],{"class":105,"line":25},[103,29036,2389],{"emptyLinePlaceholder":30},[103,29038,29039,29041,29043],{"class":105,"line":1168},[103,29040,26543],{"class":1952},[103,29042,29006],{"class":218},[103,29044,28941],{"class":218},[103,29046,29047],{"class":105,"line":1183},[103,29048,2389],{"emptyLinePlaceholder":30},[103,29050,29051,29053,29055],{"class":105,"line":1189},[103,29052,26543],{"class":1952},[103,29054,29006],{"class":218},[103,29056,28956],{"class":218},[103,29058,29059],{"class":105,"line":1203},[103,29060,2389],{"emptyLinePlaceholder":30},[103,29062,29063,29065,29067],{"class":105,"line":1209},[103,29064,26543],{"class":1952},[103,29066,29006],{"class":218},[103,29068,29069],{"class":218}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[103,29071,29072],{"class":105,"line":1300},[103,29073,2389],{"emptyLinePlaceholder":30},[103,29075,29076,29078,29080],{"class":105,"line":1306},[103,29077,26543],{"class":1952},[103,29079,29006],{"class":218},[103,29081,28986],{"class":218},[103,29083,29084],{"class":105,"line":1318},[103,29085,2389],{"emptyLinePlaceholder":30},[103,29087,29088,29090,29092],{"class":105,"line":1601},[103,29089,26543],{"class":1952},[103,29091,29006],{"class":218},[103,29093,29094],{"class":218}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[57,29096,29097],{"start":1168},[60,29098,29099],{},"验证推送成功",[14,29101,29102],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29104,29105],{},[263,29106,3773],{},[1120,29108,29109,29112],{},[60,29110,29111],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[60,29113,29114],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29116,29117],{},[1451,29118],{"alt":24,"src":29119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29121,29122],{},[1451,29123],{"alt":24,"src":29124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21988,29126,29128],{"id":29127},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29130,29131,29132,29135,29136,29139],{},"如果您想在 ",[263,29133,29134],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[263,29137,29138],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29141,29142,29143],{},"1. ",[263,29144,29145],{},"启用 Docker 跨平台构建",[14,29147,29148],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29150,29151],{},"第一步：启用 buildx（只需执行一次）",[94,29153,29155],{"className":23812,"code":29154,"language":23814,"meta":24,"style":24},"docker buildx create --name multiarch_builder --use\n",[100,29156,29157],{"__ignoreMap":24},[103,29158,29159,29161,29164,29167,29170,29173],{"class":105,"line":106},[103,29160,26543],{"class":1952},[103,29162,29163],{"class":218}," buildx",[103,29165,29166],{"class":218}," create",[103,29168,29169],{"class":162}," --name",[103,29171,29172],{"class":218}," multiarch_builder",[103,29174,29175],{"class":162}," --use\n",[14,29177,29178],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29180,29181],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[94,29183,29185],{"className":23812,"code":29184,"language":23814,"meta":24,"style":24},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[100,29186,29187],{"__ignoreMap":24},[103,29188,29189,29191,29193,29195,29198,29201,29204,29207],{"class":105,"line":106},[103,29190,26543],{"class":1952},[103,29192,27220],{"class":218},[103,29194,27223],{"class":162},[103,29196,29197],{"class":162}," --privileged",[103,29199,29200],{"class":218}," multiarch\u002Fqemu-user-static",[103,29202,29203],{"class":162}," --reset",[103,29205,29206],{"class":162}," -p",[103,29208,29209],{"class":218}," yes\n",[14,29211,29212],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29214,29215],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[94,29217,29219],{"className":23812,"code":29218,"language":23814,"meta":24,"style":24},"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",[100,29220,29221,29263,29267,29272,29282,29292,29301,29307,29311,29315,29325,29333,29342,29348,29352,29356,29366,29374,29383,29389,29393,29397,29407,29415,29424,29430,29434,29438,29448,29456,29465,29471,29475,29479,29489,29497,29506,29512,29516,29520,29530,29538,29547,29553,29557,29561,29571,29579,29588,29594,29598,29602,29612,29620,29629,29635,29639,29643,29654,29662,29671,29677],{"__ignoreMap":24},[103,29222,29223,29225,29227,29229,29232,29235,29237,29239,29242,29244,29246,29248,29250,29253,29256,29258,29261],{"class":105,"line":106},[103,29224,26543],{"class":1952},[103,29226,29163],{"class":218},[103,29228,28722],{"class":218},[103,29230,29231],{"class":162}," --platform",[103,29233,29234],{"class":218}," linux\u002Famd64,linux\u002Farm64",[103,29236,28725],{"class":162},[103,29238,28892],{"class":109},[103,29240,29241],{"class":218},"你的镜像",[103,29243,28898],{"class":113},[103,29245,1073],{"class":109},[103,29247,972],{"class":218},[103,29249,1023],{"class":109},[103,29251,29252],{"class":218},"标",[103,29254,29255],{"class":113},"签",[103,29257,1073],{"class":109},[103,29259,29260],{"class":162}," --push",[103,29262,28731],{"class":218},[103,29264,29265],{"class":105,"line":25},[103,29266,2389],{"emptyLinePlaceholder":30},[103,29268,29269],{"class":105,"line":1168},[103,29270,29271],{"class":172},"# 例子：\n",[103,29273,29274,29276,29278,29280],{"class":105,"line":1183},[103,29275,26543],{"class":1952},[103,29277,29163],{"class":218},[103,29279,28722],{"class":218},[103,29281,24668],{"class":162},[103,29283,29284,29287,29290],{"class":105,"line":1189},[103,29285,29286],{"class":113},"--platform ",[103,29288,29289],{"class":218},"linux\u002Famd64,linux\u002Farm64",[103,29291,24668],{"class":162},[103,29293,29294,29296,29299],{"class":105,"line":1203},[103,29295,28725],{"class":162},[103,29297,29298],{"class":218}," tungchiahui\u002Fros:noetic-focal",[103,29300,24668],{"class":162},[103,29302,29303,29305],{"class":105,"line":1209},[103,29304,29260],{"class":162},[103,29306,24668],{"class":162},[103,29308,29309],{"class":105,"line":1300},[103,29310,28731],{"class":218},[103,29312,29313],{"class":105,"line":1306},[103,29314,2389],{"emptyLinePlaceholder":30},[103,29316,29317,29319,29321,29323],{"class":105,"line":1318},[103,29318,26543],{"class":1952},[103,29320,29163],{"class":218},[103,29322,28722],{"class":218},[103,29324,24668],{"class":162},[103,29326,29327,29329,29331],{"class":105,"line":1601},[103,29328,29286],{"class":113},[103,29330,29289],{"class":218},[103,29332,24668],{"class":162},[103,29334,29335,29337,29340],{"class":105,"line":1606},[103,29336,28725],{"class":162},[103,29338,29339],{"class":218}," tungchiahui\u002Fros:humble-jammy",[103,29341,24668],{"class":162},[103,29343,29344,29346],{"class":105,"line":1612},[103,29345,29260],{"class":162},[103,29347,24668],{"class":162},[103,29349,29350],{"class":105,"line":1617},[103,29351,28731],{"class":218},[103,29353,29354],{"class":105,"line":1631},[103,29355,2389],{"emptyLinePlaceholder":30},[103,29357,29358,29360,29362,29364],{"class":105,"line":1636},[103,29359,26543],{"class":1952},[103,29361,29163],{"class":218},[103,29363,28722],{"class":218},[103,29365,24668],{"class":162},[103,29367,29368,29370,29372],{"class":105,"line":1642},[103,29369,29286],{"class":113},[103,29371,29289],{"class":218},[103,29373,24668],{"class":162},[103,29375,29376,29378,29381],{"class":105,"line":1663},[103,29377,28725],{"class":162},[103,29379,29380],{"class":218}," tungchiahui\u002Fros:jazzy-noble",[103,29382,24668],{"class":162},[103,29384,29385,29387],{"class":105,"line":1668},[103,29386,29260],{"class":162},[103,29388,24668],{"class":162},[103,29390,29391],{"class":105,"line":1682},[103,29392,28731],{"class":218},[103,29394,29395],{"class":105,"line":1687},[103,29396,2389],{"emptyLinePlaceholder":30},[103,29398,29399,29401,29403,29405],{"class":105,"line":1716},[103,29400,26310],{"class":1952},[103,29402,29163],{"class":218},[103,29404,28722],{"class":218},[103,29406,24668],{"class":162},[103,29408,29409,29411,29413],{"class":105,"line":1721},[103,29410,29286],{"class":113},[103,29412,29289],{"class":218},[103,29414,24668],{"class":162},[103,29416,29417,29419,29422],{"class":105,"line":1738},[103,29418,28725],{"class":162},[103,29420,29421],{"class":218}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[103,29423,24668],{"class":162},[103,29425,29426,29428],{"class":105,"line":1743},[103,29427,29260],{"class":162},[103,29429,24668],{"class":162},[103,29431,29432],{"class":105,"line":1748},[103,29433,28731],{"class":218},[103,29435,29436],{"class":105,"line":1753},[103,29437,2389],{"emptyLinePlaceholder":30},[103,29439,29440,29442,29444,29446],{"class":105,"line":1767},[103,29441,26543],{"class":1952},[103,29443,29163],{"class":218},[103,29445,28722],{"class":218},[103,29447,24668],{"class":162},[103,29449,29450,29452,29454],{"class":105,"line":1772},[103,29451,29286],{"class":113},[103,29453,29289],{"class":218},[103,29455,24668],{"class":162},[103,29457,29458,29460,29463],{"class":105,"line":2566},[103,29459,28725],{"class":162},[103,29461,29462],{"class":218}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[103,29464,24668],{"class":162},[103,29466,29467,29469],{"class":105,"line":2580},[103,29468,29260],{"class":162},[103,29470,24668],{"class":162},[103,29472,29473],{"class":105,"line":2588},[103,29474,28731],{"class":218},[103,29476,29477],{"class":105,"line":2593},[103,29478,2389],{"emptyLinePlaceholder":30},[103,29480,29481,29483,29485,29487],{"class":105,"line":2599},[103,29482,26310],{"class":1952},[103,29484,29163],{"class":218},[103,29486,28722],{"class":218},[103,29488,24668],{"class":162},[103,29490,29491,29493,29495],{"class":105,"line":2605},[103,29492,29286],{"class":113},[103,29494,29289],{"class":218},[103,29496,24668],{"class":162},[103,29498,29499,29501,29504],{"class":105,"line":2610},[103,29500,28725],{"class":162},[103,29502,29503],{"class":218}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[103,29505,24668],{"class":162},[103,29507,29508,29510],{"class":105,"line":7938},[103,29509,29260],{"class":162},[103,29511,24668],{"class":162},[103,29513,29514],{"class":105,"line":7962},[103,29515,28731],{"class":218},[103,29517,29518],{"class":105,"line":7967},[103,29519,2389],{"emptyLinePlaceholder":30},[103,29521,29522,29524,29526,29528],{"class":105,"line":7973},[103,29523,26543],{"class":1952},[103,29525,29163],{"class":218},[103,29527,28722],{"class":218},[103,29529,24668],{"class":162},[103,29531,29532,29534,29536],{"class":105,"line":8000},[103,29533,29286],{"class":113},[103,29535,29289],{"class":218},[103,29537,24668],{"class":162},[103,29539,29540,29542,29545],{"class":105,"line":8005},[103,29541,28725],{"class":162},[103,29543,29544],{"class":218}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[103,29546,24668],{"class":162},[103,29548,29549,29551],{"class":105,"line":8011},[103,29550,29260],{"class":162},[103,29552,24668],{"class":162},[103,29554,29555],{"class":105,"line":8023},[103,29556,28731],{"class":218},[103,29558,29559],{"class":105,"line":8035},[103,29560,2389],{"emptyLinePlaceholder":30},[103,29562,29563,29565,29567,29569],{"class":105,"line":8047},[103,29564,26543],{"class":1952},[103,29566,29163],{"class":218},[103,29568,28722],{"class":218},[103,29570,24668],{"class":162},[103,29572,29573,29575,29577],{"class":105,"line":9706},[103,29574,29286],{"class":113},[103,29576,29289],{"class":218},[103,29578,24668],{"class":162},[103,29580,29581,29583,29586],{"class":105,"line":9731},[103,29582,28725],{"class":162},[103,29584,29585],{"class":218}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[103,29587,24668],{"class":162},[103,29589,29590,29592],{"class":105,"line":9754},[103,29591,29260],{"class":162},[103,29593,24668],{"class":162},[103,29595,29596],{"class":105,"line":9778},[103,29597,28731],{"class":218},[103,29599,29600],{"class":105,"line":9783},[103,29601,2389],{"emptyLinePlaceholder":30},[103,29603,29604,29606,29608,29610],{"class":105,"line":9788},[103,29605,26310],{"class":1952},[103,29607,29163],{"class":218},[103,29609,28722],{"class":218},[103,29611,24668],{"class":162},[103,29613,29614,29616,29618],{"class":105,"line":9793},[103,29615,29286],{"class":113},[103,29617,29289],{"class":218},[103,29619,24668],{"class":162},[103,29621,29622,29624,29627],{"class":105,"line":9802},[103,29623,28725],{"class":162},[103,29625,29626],{"class":218}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[103,29628,24668],{"class":162},[103,29630,29631,29633],{"class":105,"line":9807},[103,29632,29260],{"class":162},[103,29634,24668],{"class":162},[103,29636,29637],{"class":105,"line":9813},[103,29638,28731],{"class":218},[103,29640,29641],{"class":105,"line":9834},[103,29642,2389],{"emptyLinePlaceholder":30},[103,29644,29645,29648,29650,29652],{"class":105,"line":9840},[103,29646,29647],{"class":1952},"  docker",[103,29649,29163],{"class":218},[103,29651,28722],{"class":218},[103,29653,24668],{"class":162},[103,29655,29656,29658,29660],{"class":105,"line":9854},[103,29657,29286],{"class":113},[103,29659,29289],{"class":218},[103,29661,24668],{"class":162},[103,29663,29664,29666,29669],{"class":105,"line":9860},[103,29665,28725],{"class":162},[103,29667,29668],{"class":218}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[103,29670,24668],{"class":162},[103,29672,29673,29675],{"class":105,"line":9887},[103,29674,29260],{"class":162},[103,29676,24668],{"class":162},[103,29678,29679],{"class":105,"line":9896},[103,29680,28731],{"class":218},[14,29682,29683],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29685,29686],{},[1451,29687],{"alt":24,"src":29688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29690,29691],{},[1451,29692],{"alt":24,"src":29693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21988,29695,29697],{"id":29696},"_623清除构建缓存","6.2.3.清除构建缓存",[94,29699,29701],{"className":23812,"code":29700,"language":23814,"meta":24,"style":24},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[100,29702,29703,29708],{"__ignoreMap":24},[103,29704,29705],{"class":105,"line":106},[103,29706,29707],{"class":172},"# 清理BuildKit构建缓存\n",[103,29709,29710,29712,29715,29718],{"class":105,"line":25},[103,29711,26543],{"class":1952},[103,29713,29714],{"class":218}," builder",[103,29716,29717],{"class":218}," prune",[103,29719,29720],{"class":162}," -f\n",[14,29722,29723],{},[1451,29724],{"alt":24,"src":29725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[74,29727,29729],{"id":29728},"_63补充","6.3.补充",[21988,29731,29733],{"id":29732},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29735,29736],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29738,29739],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29741,29742],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[94,29744,29746],{"className":23812,"code":29745,"language":23814,"meta":24,"style":24},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[100,29747,29748,29755],{"__ignoreMap":24},[103,29749,29750,29752],{"class":105,"line":106},[103,29751,27360],{"class":1952},[103,29753,29754],{"class":218}," nginx\n",[103,29756,29757,29759,29762,29765,29767],{"class":105,"line":25},[103,29758,28545],{"class":1952},[103,29760,29761],{"class":218}," echo",[103,29763,29764],{"class":218}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[103,29766,26212],{"class":109},[103,29768,29769],{"class":218}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29771,29772],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29774,29775],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[94,29777,29779],{"className":23812,"code":29778,"language":23814,"meta":24,"style":24},"docker build -t nginx:tuling .\n",[100,29780,29781],{"__ignoreMap":24},[103,29782,29783,29785,29787,29789,29792],{"class":105,"line":106},[103,29784,26543],{"class":1952},[103,29786,28722],{"class":218},[103,29788,28725],{"class":162},[103,29790,29791],{"class":218}," nginx:tuling",[103,29793,28731],{"class":218},[14,29795,29796],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29798,29799],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[94,29801,29803],{"className":23812,"code":29802,"language":23814,"meta":24,"style":24},"docker run -d -p 92:80 nginx:tuling\n",[100,29804,29805],{"__ignoreMap":24},[103,29806,29807,29809,29811,29814,29816,29819],{"class":105,"line":106},[103,29808,26543],{"class":1952},[103,29810,27220],{"class":218},[103,29812,29813],{"class":162}," -d",[103,29815,29206],{"class":162},[103,29817,29818],{"class":218}," 92:80",[103,29820,29821],{"class":218}," nginx:tuling\n",[14,29823,29824,29825],{},"4、访问 ",[17,29826,29829],{"href":29827,"rel":29828},"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",[21],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29831,29832],{},[1451,29833],{"alt":24,"src":29834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29836,29837],{},[1451,29838],{"alt":24,"src":29839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21988,29841,29843],{"id":29842},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29845,29846],{},"只需要知道大体流程即可",[14,29848,29849],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29851,29852],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29854,29855],{},"2、在Dockerfile中添加以下内容",[94,29857,29859],{"className":26081,"code":29858,"language":26083,"meta":24,"style":24},"# 基于哪个镜像\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",[100,29860,29861,29866,29871,29876,29881,29886,29891,29896],{"__ignoreMap":24},[103,29862,29863],{"class":105,"line":106},[103,29864,29865],{},"# 基于哪个镜像\n",[103,29867,29868],{"class":105,"line":25},[103,29869,29870],{},"From java:8\n",[103,29872,29873],{"class":105,"line":1168},[103,29874,29875],{},"# 复制文件到容器\n",[103,29877,29878],{"class":105,"line":1183},[103,29879,29880],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[103,29882,29883],{"class":105,"line":1189},[103,29884,29885],{},"# 声明需要暴露的端口\n",[103,29887,29888],{"class":105,"line":1203},[103,29889,29890],{},"EXPOSE 8877\n",[103,29892,29893],{"class":105,"line":1209},[103,29894,29895],{},"# 配置容器启动后执行的命令\n",[103,29897,29898],{"class":105,"line":1300},[103,29899,29900],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29902,29903],{},"3、使用docker build命令构建镜像",[94,29905,29907],{"className":23812,"code":29906,"language":23814,"meta":24,"style":24},"docker build -t tulingmall-member:0.0.5 .\n",[100,29908,29909],{"__ignoreMap":24},[103,29910,29911,29913,29915,29917,29920],{"class":105,"line":106},[103,29912,26543],{"class":1952},[103,29914,28722],{"class":218},[103,29916,28725],{"class":162},[103,29918,29919],{"class":218}," tulingmall-member:0.0.5",[103,29921,28731],{"class":218},[14,29923,29924],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,29926,29927],{},[1451,29928],{"alt":24,"src":29929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,29931,29932],{},"4、启动镜像，加-d可在后台启动",[94,29934,29936],{"className":23812,"code":29935,"language":23814,"meta":24,"style":24},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[100,29937,29938],{"__ignoreMap":24},[103,29939,29940,29942,29944,29946,29948,29951],{"class":105,"line":106},[103,29941,26543],{"class":1952},[103,29943,27220],{"class":218},[103,29945,29813],{"class":162},[103,29947,29206],{"class":162},[103,29949,29950],{"class":218}," 8877:8877",[103,29952,29953],{"class":218}," tulingmall-member:0.0.5\n",[14,29955,29956],{},"加上JVM参数：",[94,29958,29960],{"className":23812,"code":29959,"language":23814,"meta":24,"style":24},"# --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",[100,29961,29962,29967,29982,29992,30001,30008],{"__ignoreMap":24},[103,29963,29964],{"class":105,"line":106},[103,29965,29966],{"class":172},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[103,29968,29969,29971,29973,29976,29978,29980],{"class":105,"line":25},[103,29970,26543],{"class":1952},[103,29972,27220],{"class":218},[103,29974,29975],{"class":162},"  -d",[103,29977,29206],{"class":162},[103,29979,29950],{"class":218},[103,29981,24668],{"class":162},[103,29983,29984,29986,29989],{"class":105,"line":1168},[103,29985,28118],{"class":113},[103,29987,29988],{"class":218},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[103,29990,29991],{"class":162},"  \\\n",[103,29993,29994,29996,29999],{"class":105,"line":1183},[103,29995,28118],{"class":113},[103,29997,29998],{"class":218},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[103,30000,29991],{"class":162},[103,30002,30003,30006],{"class":105,"line":1189},[103,30004,30005],{"class":113},"--cap-add=SYS_PTRACE  ",[103,30007,26165],{"class":162},[103,30009,30010],{"class":105,"line":1203},[103,30011,30012],{"class":113},"tulingmall-member:0.0.5\n",[14,30014,30015],{},"5、访问会员服务接口",[14,30017,30018],{},[1451,30019],{"alt":24,"src":30020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21988,30022,30024],{"id":30023},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30026,30027],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30029,30030,30031],{},"阿里云docker镜像仓库：",[17,30032,30033],{"href":30033,"rel":30034},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[21],[14,30036,30037],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30039,30040],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30042,30043],{},[1451,30044],{"alt":24,"src":30045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30047,30048],{},"要把镜像推送到镜像仓库",[94,30050,30052],{"className":23812,"code":30051,"language":23814,"meta":24,"style":24},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[100,30053,30054],{"__ignoreMap":24},[103,30055,30056,30058,30060,30062],{"class":105,"line":106},[103,30057,26543],{"class":1952},[103,30059,28887],{"class":218},[103,30061,29919],{"class":218},[103,30063,30064],{"class":218}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30066,30067],{},"最后将镜像推送到远程仓库",[94,30069,30071],{"className":23812,"code":30070,"language":23814,"meta":24,"style":24},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[100,30072,30073],{"__ignoreMap":24},[103,30074,30075,30077,30079],{"class":105,"line":106},[103,30076,26543],{"class":1952},[103,30078,29006],{"class":218},[103,30080,30064],{"class":218},[5116,30082,30083],{},"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":24,"searchDepth":25,"depth":25,"links":30085},[30086,30087,30088],{"id":28473,"depth":1168,"text":28474},{"id":28702,"depth":1168,"text":28703},{"id":29728,"depth":1168,"text":29729},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28465,"description":24},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30095,"title":30096,"body":30097,"description":24,"extension":28,"meta":30240,"navigation":30,"path":30241,"seo":30242,"stem":30243,"__hash__":30244},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30098,"toc":30238},[30099,30102,30107,30112,30115,30120,30125,30128,30133,30138,30141,30146,30149,30152,30155,30158,30161,30164,30184,30206,30209,30212,30232,30235],[10,30100,30096],{"id":30101},"_7vscode远程开发",[57,30103,30104],{},[60,30105,30106],{},"插件1：微软Docker工具",[14,30108,30109],{},[1451,30110],{"alt":24,"src":30111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30113,30114],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30116,30117],{},[1451,30118],{"alt":24,"src":30119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[57,30121,30122],{"start":25},[60,30123,30124],{},"插件2：微软Docker远程开发工具",[14,30126,30127],{},"下面这是远程开发的插件。",[14,30129,30130],{},[1451,30131],{"alt":24,"src":30132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30134,30135],{},[1451,30136],{"alt":24,"src":30137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30139,30140],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30142,30143],{},[1451,30144],{"alt":24,"src":30145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30147,30148],{},"安装完拓展之后，vscode进行链接：",[14,30150,30151],{},"1.按ctrl+shift+p",[14,30153,30154],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30156,30157],{},"3.选择目前运行的容器",[14,30159,30160],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30162,30163],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[94,30165,30167],{"className":23812,"code":30166,"language":23814,"meta":24,"style":24},"docker run -v 主机目录:容器目录 image-name\n",[100,30168,30169],{"__ignoreMap":24},[103,30170,30171,30173,30175,30178,30181],{"class":105,"line":106},[103,30172,26543],{"class":1952},[103,30174,27220],{"class":218},[103,30176,30177],{"class":162}," -v",[103,30179,30180],{"class":218}," 主机目录:容器目录",[103,30182,30183],{"class":218}," image-name\n",[94,30185,30187],{"className":23812,"code":30186,"language":23814,"meta":24,"style":24},"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",[100,30188,30189],{"__ignoreMap":24},[103,30190,30191,30193,30195,30198,30200,30203],{"class":105,"line":106},[103,30192,26543],{"class":1952},[103,30194,27220],{"class":218},[103,30196,30197],{"class":162}," -it",[103,30199,30177],{"class":162},[103,30201,30202],{"class":218}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[103,30204,30205],{"class":218}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30207,30208],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30210,30211],{},"查看挂载情况：",[94,30213,30215],{"className":23812,"code":30214,"language":23814,"meta":24,"style":24},"mount | grep -i project\n",[100,30216,30217],{"__ignoreMap":24},[103,30218,30219,30222,30224,30227,30229],{"class":105,"line":106},[103,30220,30221],{"class":1952},"mount",[103,30223,25099],{"class":109},[103,30225,30226],{"class":1952}," grep",[103,30228,26420],{"class":162},[103,30230,30231],{"class":218}," project\n",[14,30233,30234],{},"也可以通过ls来进行查看",[5116,30236,30237],{},"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":24,"searchDepth":25,"depth":25,"links":30239},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30096,"description":24},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30246,"title":30247,"body":30248,"description":27,"extension":28,"meta":30252,"navigation":30,"path":30254,"seo":30255,"stem":30256,"__hash__":30257},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30249,"toc":30250},[],{"title":24,"searchDepth":25,"depth":25,"links":30251},[],{"category":30253},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30247,"description":27},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30259,"title":30260,"body":30261,"description":27,"extension":28,"meta":30265,"navigation":30,"path":30266,"seo":30267,"stem":30268,"__hash__":30269},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30262,"toc":30263},[],{"title":24,"searchDepth":25,"depth":25,"links":30264},[],{"category":30253},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30260,"description":27},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30271,"title":30272,"body":30273,"description":27,"extension":28,"meta":30566,"navigation":30,"path":30567,"seo":30568,"stem":30569,"__hash__":30570},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30274,"toc":30564},[30275,30278,30286,30301,30306,30357,30360,30366,30553,30558,30561],[10,30276,30272],{"id":30277},"_1验证深度学习环境",[14,30279,30280,30281],{},"关于环境的安装，看",[17,30282,30285],{"href":30283,"rel":30284},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[21],"Pytorch-->深度学习",[14,30287,30288,30289,30292,30293,30296,30297,30300],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[100,30290,30291],{},"pytorch-cuda=12.4"," 是一个“ ",[263,30294,30295],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[263,30298,30299],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30302,30303],{},[1451,30304],{"alt":24,"src":30305},"\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",[94,30307,30309],{"className":23812,"code":30308,"language":23814,"meta":24,"style":24},"# 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",[100,30310,30311,30316],{"__ignoreMap":24},[103,30312,30313],{"class":105,"line":106},[103,30314,30315],{"class":172},"# CUDA 12.4\n",[103,30317,30318,30321,30323,30326,30329,30332,30335,30338,30340,30343,30346,30349,30352,30354],{"class":105,"line":25},[103,30319,30320],{"class":1952},"conda",[103,30322,23824],{"class":218},[103,30324,30325],{"class":218}," pytorch==",[103,30327,30328],{"class":162},"2.5.1",[103,30330,30331],{"class":218}," torchvision==",[103,30333,30334],{"class":162},"0.20.1",[103,30336,30337],{"class":218}," torchaudio==",[103,30339,30328],{"class":162},[103,30341,30342],{"class":218}," pytorch-cuda=",[103,30344,30345],{"class":162},"12.4",[103,30347,30348],{"class":162}," -c",[103,30350,30351],{"class":218}," pytorch",[103,30353,30348],{"class":162},[103,30355,30356],{"class":218}," nvidia\n",[14,30358,30359],{},"）：",[14,30361,30362],{},[17,30363,30364],{"href":30364,"rel":30365},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[21],[94,30367,30371],{"className":30368,"code":30369,"language":30370,"meta":24,"style":24},"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",[100,30372,30373,30378,30386,30391,30401,30417,30422,30432,30469,30476,30488,30504,30509,30519,30531,30541],{"__ignoreMap":24},[103,30374,30375],{"class":105,"line":106},[103,30376,30377],{"class":172},"# 对深度学习环境进行测试\n",[103,30379,30380,30383],{"class":105,"line":25},[103,30381,30382],{"class":109},"import",[103,30384,30385],{"class":113}," torch\n",[103,30387,30388],{"class":105,"line":1168},[103,30389,30390],{"class":172},"# 查看cuda是否被激活\n",[103,30392,30393,30396,30398],{"class":105,"line":1183},[103,30394,30395],{"class":113},"flag",[103,30397,159],{"class":109},[103,30399,30400],{"class":113},"torch.cuda.is_available()\n",[103,30402,30403,30406,30408,30411,30414],{"class":105,"line":1189},[103,30404,30405],{"class":162},"print",[103,30407,114],{"class":113},[103,30409,30410],{"class":218},"\"cuda:\"",[103,30412,30413],{"class":113},", flag)   ",[103,30415,30416],{"class":172},"#返回true的话说明被激活\n",[103,30418,30419],{"class":105,"line":1203},[103,30420,30421],{"class":172},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[103,30423,30424,30427,30429],{"class":105,"line":1209},[103,30425,30426],{"class":113},"ngpu",[103,30428,159],{"class":109},[103,30430,30431],{"class":162},"1\n",[103,30433,30434,30437,30439,30442,30445,30447,30450,30453,30456,30458,30460,30462,30464,30467],{"class":105,"line":1300},[103,30435,30436],{"class":113},"device",[103,30438,159],{"class":109},[103,30440,30441],{"class":113},"torch.device(",[103,30443,30444],{"class":218},"\"cuda:0\"",[103,30446,1693],{"class":109},[103,30448,30449],{"class":113},"(torch.cuda.is_available() ",[103,30451,30452],{"class":109},"and",[103,30454,30455],{"class":113}," ngpu",[103,30457,1073],{"class":109},[103,30459,305],{"class":162},[103,30461,13704],{"class":113},[103,30463,1690],{"class":109},[103,30465,30466],{"class":218}," \"cpu\"",[103,30468,120],{"class":113},[103,30470,30471,30473],{"class":105,"line":1306},[103,30472,30405],{"class":162},[103,30474,30475],{"class":113},"(device)\n",[103,30477,30478,30480,30483,30485],{"class":105,"line":1318},[103,30479,30405],{"class":162},[103,30481,30482],{"class":113},"(torch.cuda.get_device_name(",[103,30484,305],{"class":162},[103,30486,30487],{"class":113},"))\n",[103,30489,30490,30492,30495,30497,30499,30501],{"class":105,"line":1601},[103,30491,30405],{"class":162},[103,30493,30494],{"class":113},"(torch.rand(",[103,30496,185],{"class":162},[103,30498,491],{"class":113},[103,30500,185],{"class":162},[103,30502,30503],{"class":113},").cuda())\n",[103,30505,30506],{"class":105,"line":1606},[103,30507,30508],{"class":172},"# 查看cuda和cudnn的版本\n",[103,30510,30511,30514,30516],{"class":105,"line":1612},[103,30512,30513],{"class":113},"cuda_version",[103,30515,159],{"class":109},[103,30517,30518],{"class":113},"torch.version.cuda\n",[103,30520,30521,30523,30525,30528],{"class":105,"line":1617},[103,30522,30405],{"class":162},[103,30524,114],{"class":113},[103,30526,30527],{"class":218},"\"cuda version\"",[103,30529,30530],{"class":113},",cuda_version)\n",[103,30532,30533,30536,30538],{"class":105,"line":1631},[103,30534,30535],{"class":113},"cudnn_version",[103,30537,159],{"class":109},[103,30539,30540],{"class":113},"torch.backends.cudnn.version()\n",[103,30542,30543,30545,30547,30550],{"class":105,"line":1636},[103,30544,30405],{"class":162},[103,30546,114],{"class":113},[103,30548,30549],{"class":218},"\"cudnn version\"",[103,30551,30552],{"class":113},",cudnn_version)\n",[14,30554,30555],{},[1451,30556],{"alt":24,"src":30557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[14,30559,30560],{},"cuda:0 指的是一块显卡",[5116,30562,30563],{},"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":24,"searchDepth":25,"depth":25,"links":30565},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30272,"description":27},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30572,"title":30573,"body":30574,"description":27,"extension":28,"meta":50378,"navigation":30,"path":50379,"seo":50380,"stem":50381,"__hash__":50382},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30575,"toc":50372},[30576,30579,30583,30587,30590,30595,30600,30603,30608,30613,30618,30621,30625,30630,30634,30639,30642,30647,30650,30653,30656,30659,30664,30667,30672,30677,30682,30687,30690,30694,30697,30702,31306,31311,31314,31319,31322,31325,31789,31792,31795,31798,31801,33852,33855,33860,33865,34660,34663,34668,35446,35450,37109,37113,37827,37831,37835,37840,37845,37850,37853,37858,37863,37868,37873,37878,37882,37887,39169,39174,39177,39180,39183,39338,39341,39344,40560,40565,41260,41264,41268,41273,41278,41281,41286,41291,41296,41301,41306,41311,41316,41321,41326,41331,41336,41341,41346,41351,41356,41361,41366,41371,41376,41381,41386,41391,41396,41401,41406,41411,41416,41421,41426,41431,41435,41439,41442,42920,42924,44571,44575,45269,45273,45276,45279,45823,45826,45830,45833,47230,47234,47237,47815,49602,49606,49609,50369],[10,30577,30573],{"id":30578},"_2经典神经网络",[74,30580,30582],{"id":30581},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21988,30584,30586],{"id":30585},"_211原理介绍","2.1.1.原理介绍",[14,30588,30589],{},"LeNet-5",[57,30591,30592],{},[60,30593,30594],{},"原理",[14,30596,30597],{},[1451,30598],{"alt":24,"src":30599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[14,30601,30602],{},"B是batch批次；C是channel通道",[57,30604,30605],{"start":25},[60,30606,30607],{},"网络参数详细",[14,30609,30610],{},[1451,30611],{"alt":24,"src":30612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[14,30614,30615],{},[1451,30616],{"alt":24,"src":30617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,30619,30620],{},"AlexNet",[57,30622,30623],{},[60,30624,30594],{},[14,30626,30627],{},[1451,30628],{"alt":24,"src":30629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-006.png",[57,30631,30632],{"start":25},[60,30633,30607],{},[14,30635,30636],{},[1451,30637],{"alt":24,"src":30638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[14,30640,30641],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30643,30644],{},[1451,30645],{"alt":24,"src":30646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,30648,30649],{},"数据处理中的图像增强操作:",[14,30651,30652],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30654,30655],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30657,30658],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30660,30661],{},[1451,30662],{"alt":24,"src":30663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[14,30665,30666],{},"提升网络精确度的方法：LRN正则化",[14,30668,30669],{},[1451,30670],{"alt":24,"src":30671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[14,30673,30674],{},[1451,30675],{"alt":24,"src":30676},"\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",[57,30678,30679],{"start":1168},[60,30680,30681],{},"AlexNet的总结",[14,30683,30684],{},[1451,30685],{"alt":24,"src":30686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[14,30688,30689],{},"比LeNet模型要深一丢丢",[21988,30691,30693],{"id":30692},"_212代码实现","2.1.2.代码实现",[14,30695,30696],{},"（1）LeNet",[57,30698,30699],{},[60,30700,30701],{},"模型搭建",[94,30703,30705],{"className":30368,"code":30704,"language":30370,"meta":24,"style":24},"# 导入库\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",[100,30706,30707,30712,30718,30723,30736,30741,30753,30757,30777,30782,30787,30798,30803,30822,30826,30831,30880,30892,30897,30926,30961,30988,30993,31005,31010,31030,31049,31068,31072,31077,31087,31104,31115,31130,31141,31152,31167,31182,31193,31200,31204,31218,31223,31246,31251,31256,31261,31265,31270,31275,31285],{"__ignoreMap":24},[103,30708,30709],{"class":105,"line":106},[103,30710,30711],{"class":172},"# 导入库\n",[103,30713,30714,30716],{"class":105,"line":25},[103,30715,30382],{"class":109},[103,30717,30385],{"class":113},[103,30719,30720],{"class":105,"line":1168},[103,30721,30722],{"class":172},"# 导入神经网络层\n",[103,30724,30725,30728,30731,30733],{"class":105,"line":1183},[103,30726,30727],{"class":109},"from",[103,30729,30730],{"class":113}," torch ",[103,30732,30382],{"class":109},[103,30734,30735],{"class":113}," nn\n",[103,30737,30738],{"class":105,"line":1189},[103,30739,30740],{"class":172},"# 导入展示神经网络参数的包\n",[103,30742,30743,30745,30748,30750],{"class":105,"line":1203},[103,30744,30727],{"class":109},[103,30746,30747],{"class":113}," torchsummary ",[103,30749,30382],{"class":109},[103,30751,30752],{"class":113}," summary\n",[103,30754,30755],{"class":105,"line":1209},[103,30756,2389],{"emptyLinePlaceholder":30},[103,30758,30759,30761,30764,30766,30769,30771,30774],{"class":105,"line":1300},[103,30760,14684],{"class":109},[103,30762,30763],{"class":1952}," LeNet",[103,30765,114],{"class":113},[103,30767,30768],{"class":1952},"nn",[103,30770,671],{"class":113},[103,30772,30773],{"class":1952},"Module",[103,30775,30776],{"class":113},"):\n",[103,30778,30779],{"class":105,"line":1306},[103,30780,30781],{"class":172},"    # 模型初始化:\n",[103,30783,30784],{"class":105,"line":1318},[103,30785,30786],{"class":172},"    # 定义一些网络层和激活函数\n",[103,30788,30789,30792,30795],{"class":105,"line":1601},[103,30790,30791],{"class":109},"    def",[103,30793,30794],{"class":162}," __init__",[103,30796,30797],{"class":113},"(self):\n",[103,30799,30800],{"class":105,"line":1606},[103,30801,30802],{"class":172},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[103,30804,30805,30808,30811,30814,30817,30820],{"class":105,"line":1612},[103,30806,30807],{"class":162},"        super",[103,30809,30810],{"class":113},"(LeNet,",[103,30812,30813],{"class":162},"self",[103,30815,30816],{"class":113},").",[103,30818,30819],{"class":162},"__init__",[103,30821,1965],{"class":113},[103,30823,30824],{"class":105,"line":1617},[103,30825,2389],{"emptyLinePlaceholder":30},[103,30827,30828],{"class":105,"line":1631},[103,30829,30830],{"class":172},"        # 定义网络层\n",[103,30832,30833,30836,30839,30841,30844,30847,30849,30851,30853,30856,30858,30860,30862,30865,30867,30869,30871,30874,30876,30878],{"class":105,"line":1636},[103,30834,30835],{"class":162},"        self",[103,30837,30838],{"class":113},".c1",[103,30840,159],{"class":109},[103,30842,30843],{"class":113},"nn.Conv2d(",[103,30845,30846],{"class":5206},"in_channels",[103,30848,159],{"class":109},[103,30850,331],{"class":162},[103,30852,491],{"class":113},[103,30854,30855],{"class":5206},"out_channels",[103,30857,159],{"class":109},[103,30859,457],{"class":162},[103,30861,491],{"class":113},[103,30863,30864],{"class":5206},"kernel_size",[103,30866,159],{"class":109},[103,30868,432],{"class":162},[103,30870,491],{"class":113},[103,30872,30873],{"class":5206},"padding",[103,30875,159],{"class":109},[103,30877,191],{"class":162},[103,30879,120],{"class":113},[103,30881,30882,30884,30887,30889],{"class":105,"line":1642},[103,30883,30835],{"class":162},[103,30885,30886],{"class":113},".sig",[103,30888,159],{"class":109},[103,30890,30891],{"class":113},"nn.Sigmoid()\n",[103,30893,30894],{"class":105,"line":1663},[103,30895,30896],{"class":172},"        # 定义池化\n",[103,30898,30899,30901,30904,30906,30909,30911,30913,30915,30917,30920,30922,30924],{"class":105,"line":1668},[103,30900,30835],{"class":162},[103,30902,30903],{"class":113},".s2",[103,30905,159],{"class":109},[103,30907,30908],{"class":113},"nn.AvgPool2d(",[103,30910,30864],{"class":5206},[103,30912,159],{"class":109},[103,30914,191],{"class":162},[103,30916,491],{"class":113},[103,30918,30919],{"class":5206},"stride",[103,30921,159],{"class":109},[103,30923,191],{"class":162},[103,30925,120],{"class":113},[103,30927,30928,30930,30933,30935,30937,30939,30941,30943,30945,30947,30949,30951,30953,30955,30957,30959],{"class":105,"line":1682},[103,30929,30835],{"class":162},[103,30931,30932],{"class":113},".c3",[103,30934,159],{"class":109},[103,30936,30843],{"class":113},[103,30938,30846],{"class":5206},[103,30940,159],{"class":109},[103,30942,457],{"class":162},[103,30944,491],{"class":113},[103,30946,30855],{"class":5206},[103,30948,159],{"class":109},[103,30950,714],{"class":162},[103,30952,491],{"class":113},[103,30954,30864],{"class":5206},[103,30956,159],{"class":109},[103,30958,432],{"class":162},[103,30960,120],{"class":113},[103,30962,30963,30965,30968,30970,30972,30974,30976,30978,30980,30982,30984,30986],{"class":105,"line":1687},[103,30964,30835],{"class":162},[103,30966,30967],{"class":113},".s4",[103,30969,159],{"class":109},[103,30971,30908],{"class":113},[103,30973,30864],{"class":5206},[103,30975,159],{"class":109},[103,30977,191],{"class":162},[103,30979,491],{"class":113},[103,30981,30919],{"class":5206},[103,30983,159],{"class":109},[103,30985,191],{"class":162},[103,30987,120],{"class":113},[103,30989,30990],{"class":105,"line":1716},[103,30991,30992],{"class":172},"        # 定义平展层\n",[103,30994,30995,30997,31000,31002],{"class":105,"line":1721},[103,30996,30835],{"class":162},[103,30998,30999],{"class":113},".flatten",[103,31001,159],{"class":109},[103,31003,31004],{"class":113},"nn.Flatten()\n",[103,31006,31007],{"class":105,"line":1738},[103,31008,31009],{"class":172},"        # 定义全连接层\n",[103,31011,31012,31014,31017,31019,31022,31024,31026,31028],{"class":105,"line":1743},[103,31013,30835],{"class":162},[103,31015,31016],{"class":113},".f5",[103,31018,159],{"class":109},[103,31020,31021],{"class":113},"nn.Linear(",[103,31023,3976],{"class":162},[103,31025,491],{"class":113},[103,31027,930],{"class":162},[103,31029,120],{"class":113},[103,31031,31032,31034,31037,31039,31041,31043,31045,31047],{"class":105,"line":1748},[103,31033,30835],{"class":162},[103,31035,31036],{"class":113},".f6",[103,31038,159],{"class":109},[103,31040,31021],{"class":113},[103,31042,930],{"class":162},[103,31044,491],{"class":113},[103,31046,824],{"class":162},[103,31048,120],{"class":113},[103,31050,31051,31053,31056,31058,31060,31062,31064,31066],{"class":105,"line":1753},[103,31052,30835],{"class":162},[103,31054,31055],{"class":113},".f7",[103,31057,159],{"class":109},[103,31059,31021],{"class":113},[103,31061,824],{"class":162},[103,31063,491],{"class":113},[103,31065,559],{"class":162},[103,31067,120],{"class":113},[103,31069,31070],{"class":105,"line":1767},[103,31071,2389],{"emptyLinePlaceholder":30},[103,31073,31074],{"class":105,"line":1772},[103,31075,31076],{"class":172},"    # 写工具->写前向传播\n",[103,31078,31079,31081,31084],{"class":105,"line":2566},[103,31080,30791],{"class":109},[103,31082,31083],{"class":1952}," forward",[103,31085,31086],{"class":113},"(self,x):\n",[103,31088,31089,31092,31094,31096,31099,31101],{"class":105,"line":2580},[103,31090,31091],{"class":113},"        x",[103,31093,159],{"class":109},[103,31095,30813],{"class":162},[103,31097,31098],{"class":113},".sig(",[103,31100,30813],{"class":162},[103,31102,31103],{"class":113},".c1(x))\n",[103,31105,31106,31108,31110,31112],{"class":105,"line":2588},[103,31107,31091],{"class":113},[103,31109,159],{"class":109},[103,31111,30813],{"class":162},[103,31113,31114],{"class":113},".s2(x)\n",[103,31116,31117,31119,31121,31123,31125,31127],{"class":105,"line":2593},[103,31118,31091],{"class":113},[103,31120,159],{"class":109},[103,31122,30813],{"class":162},[103,31124,31098],{"class":113},[103,31126,30813],{"class":162},[103,31128,31129],{"class":113},".c3(x))\n",[103,31131,31132,31134,31136,31138],{"class":105,"line":2599},[103,31133,31091],{"class":113},[103,31135,159],{"class":109},[103,31137,30813],{"class":162},[103,31139,31140],{"class":113},".s4(x)\n",[103,31142,31143,31145,31147,31149],{"class":105,"line":2605},[103,31144,31091],{"class":113},[103,31146,159],{"class":109},[103,31148,30813],{"class":162},[103,31150,31151],{"class":113},".flatten(x)\n",[103,31153,31154,31156,31158,31160,31162,31164],{"class":105,"line":2610},[103,31155,31091],{"class":113},[103,31157,159],{"class":109},[103,31159,30813],{"class":162},[103,31161,31098],{"class":113},[103,31163,30813],{"class":162},[103,31165,31166],{"class":113},".f5(x))\n",[103,31168,31169,31171,31173,31175,31177,31179],{"class":105,"line":7938},[103,31170,31091],{"class":113},[103,31172,159],{"class":109},[103,31174,30813],{"class":162},[103,31176,31098],{"class":113},[103,31178,30813],{"class":162},[103,31180,31181],{"class":113},".f6(x))\n",[103,31183,31184,31186,31188,31190],{"class":105,"line":7962},[103,31185,31091],{"class":113},[103,31187,159],{"class":109},[103,31189,30813],{"class":162},[103,31191,31192],{"class":113},".f7(x)\n",[103,31194,31195,31197],{"class":105,"line":7967},[103,31196,14742],{"class":109},[103,31198,31199],{"class":113}," x\n",[103,31201,31202],{"class":105,"line":7973},[103,31203,2389],{"emptyLinePlaceholder":30},[103,31205,31206,31208,31211,31213,31216],{"class":105,"line":8000},[103,31207,1520],{"class":109},[103,31209,31210],{"class":162}," __name__",[103,31212,2938],{"class":109},[103,31214,31215],{"class":218},"\"__main__\"",[103,31217,3728],{"class":113},[103,31219,31220],{"class":105,"line":8005},[103,31221,31222],{"class":172},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[103,31224,31225,31228,31230,31232,31235,31237,31240,31242,31244],{"class":105,"line":8011},[103,31226,31227],{"class":113},"    device",[103,31229,159],{"class":109},[103,31231,30441],{"class":113},[103,31233,31234],{"class":218},"\"cuda\"",[103,31236,1693],{"class":109},[103,31238,31239],{"class":113}," torch.cuda.is_available() ",[103,31241,1690],{"class":109},[103,31243,30466],{"class":218},[103,31245,120],{"class":113},[103,31247,31248],{"class":105,"line":8023},[103,31249,31250],{"class":172},"    # 如果就是想指定用cpu用下方代码:\n",[103,31252,31253],{"class":105,"line":8035},[103,31254,31255],{"class":172},"    # device=\"cpu\"\n",[103,31257,31258],{"class":105,"line":8047},[103,31259,31260],{"class":172},"    # print(device)\n",[103,31262,31263],{"class":105,"line":9706},[103,31264,2389],{"emptyLinePlaceholder":30},[103,31266,31267],{"class":105,"line":9731},[103,31268,31269],{"class":172},"    # 实例化模型\n",[103,31271,31272],{"class":105,"line":9754},[103,31273,31274],{"class":172},"    # 将模型放到设备中去运行\n",[103,31276,31277,31280,31282],{"class":105,"line":9778},[103,31278,31279],{"class":113},"    model",[103,31281,159],{"class":109},[103,31283,31284],{"class":113},"LeNet().to(device)\n",[103,31286,31287,31290,31293,31295,31297,31299,31301,31303],{"class":105,"line":9783},[103,31288,31289],{"class":162},"    print",[103,31291,31292],{"class":113},"(summary(model,(",[103,31294,331],{"class":162},[103,31296,491],{"class":113},[103,31298,1014],{"class":162},[103,31300,491],{"class":113},[103,31302,1014],{"class":162},[103,31304,31305],{"class":113},")))\n",[14,31307,31308],{},[1451,31309],{"alt":24,"src":31310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[14,31312,31313],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[57,31315,31316],{"start":25},[60,31317,31318],{},"训练",[14,31320,31321],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31323,31324],{},"在训练之前可以将数据展示看一下",[94,31326,31328],{"className":30368,"code":31327,"language":30370,"meta":24,"style":24},"# 建立画图的函数，用于展示数据\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",[100,31329,31330,31335,31340,31352,31364,31377,31382,31394,31399,31411,31416,31428,31432,31436,31457,31469,31474,31495,31506,31510,31515,31533,31544,31549,31560,31565,31576,31580,31585,31600,31613,31618,31623,31636,31649,31662,31667,31671,31676,31696,31713,31733,31746,31759,31769,31784],{"__ignoreMap":24},[103,31331,31332],{"class":105,"line":106},[103,31333,31334],{"class":172},"# 建立画图的函数，用于展示数据\n",[103,31336,31337],{"class":105,"line":25},[103,31338,31339],{"class":172},"# torchvision中包含很多内置的数据集\n",[103,31341,31342,31344,31347,31349],{"class":105,"line":1168},[103,31343,30727],{"class":109},[103,31345,31346],{"class":113}," sklearn.externals.array_api_compat.torch ",[103,31348,30382],{"class":109},[103,31350,31351],{"class":113}," squeeze\n",[103,31353,31354,31356,31359,31361],{"class":105,"line":1183},[103,31355,30727],{"class":109},[103,31357,31358],{"class":113}," torchvision.datasets ",[103,31360,30382],{"class":109},[103,31362,31363],{"class":113}," FashionMNIST\n",[103,31365,31366,31368,31371,31374],{"class":105,"line":1189},[103,31367,30382],{"class":109},[103,31369,31370],{"class":113}," numpy ",[103,31372,31373],{"class":109},"as",[103,31375,31376],{"class":113}," np\n",[103,31378,31379],{"class":105,"line":1203},[103,31380,31381],{"class":172},"# 引入处理数据集的包\n",[103,31383,31384,31386,31389,31391],{"class":105,"line":1209},[103,31385,30727],{"class":109},[103,31387,31388],{"class":113}," torchvision ",[103,31390,30382],{"class":109},[103,31392,31393],{"class":113}," transforms\n",[103,31395,31396],{"class":105,"line":1300},[103,31397,31398],{"class":172},"# 从torch库中引入数据处理的包\n",[103,31400,31401,31403,31406,31408],{"class":105,"line":1306},[103,31402,30382],{"class":109},[103,31404,31405],{"class":113}," torch.utils.data ",[103,31407,31373],{"class":109},[103,31409,31410],{"class":113}," Data\n",[103,31412,31413],{"class":105,"line":1318},[103,31414,31415],{"class":172},"# 导入画图的库\n",[103,31417,31418,31420,31423,31425],{"class":105,"line":1601},[103,31419,30382],{"class":109},[103,31421,31422],{"class":113}," matplotlib.pyplot ",[103,31424,31373],{"class":109},[103,31426,31427],{"class":113}," plt\n",[103,31429,31430],{"class":105,"line":1606},[103,31431,2389],{"emptyLinePlaceholder":30},[103,31433,31434],{"class":105,"line":1612},[103,31435,2389],{"emptyLinePlaceholder":30},[103,31437,31438,31441,31443,31446,31449,31451,31454],{"class":105,"line":1617},[103,31439,31440],{"class":113},"train_data",[103,31442,159],{"class":109},[103,31444,31445],{"class":113},"FashionMNIST(",[103,31447,31448],{"class":5206},"root",[103,31450,159],{"class":109},[103,31452,31453],{"class":218},"'.\u002Fdata'",[103,31455,31456],{"class":113},",\n",[103,31458,31459,31462,31464,31467],{"class":105,"line":1631},[103,31460,31461],{"class":5206},"                        train",[103,31463,159],{"class":109},[103,31465,31466],{"class":162},"True",[103,31468,31456],{"class":113},[103,31470,31471],{"class":105,"line":1636},[103,31472,31473],{"class":172},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[103,31475,31476,31479,31481,31484,31487,31489,31492],{"class":105,"line":1642},[103,31477,31478],{"class":5206},"                        transform",[103,31480,159],{"class":109},[103,31482,31483],{"class":113},"transforms.Compose([transforms.Resize(",[103,31485,31486],{"class":5206},"size",[103,31488,159],{"class":109},[103,31490,31491],{"class":162},"224",[103,31493,31494],{"class":113},"),transforms.ToTensor()]),\n",[103,31496,31497,31500,31502,31504],{"class":105,"line":1663},[103,31498,31499],{"class":5206},"                        download",[103,31501,159],{"class":109},[103,31503,31466],{"class":162},[103,31505,120],{"class":113},[103,31507,31508],{"class":105,"line":1668},[103,31509,2389],{"emptyLinePlaceholder":30},[103,31511,31512],{"class":105,"line":1682},[103,31513,31514],{"class":172},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[103,31516,31517,31520,31522,31525,31528,31530],{"class":105,"line":1687},[103,31518,31519],{"class":113},"train_loader",[103,31521,159],{"class":109},[103,31523,31524],{"class":113},"Data.DataLoader(",[103,31526,31527],{"class":5206},"dataset",[103,31529,159],{"class":109},[103,31531,31532],{"class":113},"train_data,\n",[103,31534,31535,31538,31540,31542],{"class":105,"line":1716},[103,31536,31537],{"class":5206},"                             batch_size",[103,31539,159],{"class":109},[103,31541,317],{"class":162},[103,31543,31456],{"class":113},[103,31545,31546],{"class":105,"line":1721},[103,31547,31548],{"class":172},"                             # 数据是否打乱\n",[103,31550,31551,31554,31556,31558],{"class":105,"line":1738},[103,31552,31553],{"class":5206},"                             shuffle",[103,31555,159],{"class":109},[103,31557,31466],{"class":162},[103,31559,31456],{"class":113},[103,31561,31562],{"class":105,"line":1743},[103,31563,31564],{"class":172},"                             # 规定加载数据的进程\n",[103,31566,31567,31570,31572,31574],{"class":105,"line":1748},[103,31568,31569],{"class":5206},"                             num_workers",[103,31571,159],{"class":109},[103,31573,305],{"class":162},[103,31575,120],{"class":113},[103,31577,31578],{"class":105,"line":1753},[103,31579,2389],{"emptyLinePlaceholder":30},[103,31581,31582],{"class":105,"line":1767},[103,31583,31584],{"class":172},"# 获得一个batch的数据\n",[103,31586,31587,31589,31592,31594,31597],{"class":105,"line":1772},[103,31588,3014],{"class":109},[103,31590,31591],{"class":113}," step,(b_x,b_y) ",[103,31593,26033],{"class":109},[103,31595,31596],{"class":162}," enumerate",[103,31598,31599],{"class":113},"(train_loader):\n",[103,31601,31602,31604,31607,31609,31611],{"class":105,"line":2566},[103,31603,3090],{"class":109},[103,31605,31606],{"class":113}," step ",[103,31608,1073],{"class":109},[103,31610,4082],{"class":162},[103,31612,3728],{"class":113},[103,31614,31615],{"class":105,"line":2580},[103,31616,31617],{"class":109},"        break\n",[103,31619,31620],{"class":105,"line":2588},[103,31621,31622],{"class":172},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[103,31624,31625,31628,31630,31633],{"class":105,"line":2593},[103,31626,31627],{"class":113},"batch_x",[103,31629,159],{"class":109},[103,31631,31632],{"class":113},"b_x.squeeze().numpy()  ",[103,31634,31635],{"class":172},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[103,31637,31638,31641,31643,31646],{"class":105,"line":2599},[103,31639,31640],{"class":113},"batch_y",[103,31642,159],{"class":109},[103,31644,31645],{"class":113},"b_y.numpy()   ",[103,31647,31648],{"class":172},"#将张量转换成功numpy数组\n",[103,31650,31651,31654,31656,31659],{"class":105,"line":2605},[103,31652,31653],{"class":113},"class_label",[103,31655,159],{"class":109},[103,31657,31658],{"class":113},"train_data.classes  ",[103,31660,31661],{"class":172},"#训练集标签\n",[103,31663,31664],{"class":105,"line":2610},[103,31665,31666],{"class":172},"# print(class_label)\n",[103,31668,31669],{"class":105,"line":7938},[103,31670,2389],{"emptyLinePlaceholder":30},[103,31672,31673],{"class":105,"line":7962},[103,31674,31675],{"class":172},"# 可视化一个batch的图像\n",[103,31677,31678,31681,31684,31686,31688,31690,31692,31694],{"class":105,"line":7967},[103,31679,31680],{"class":113},"plt.figure(",[103,31682,31683],{"class":5206},"figsize",[103,31685,159],{"class":109},[103,31687,114],{"class":113},[103,31689,611],{"class":162},[103,31691,491],{"class":113},[103,31693,432],{"class":162},[103,31695,30487],{"class":113},[103,31697,31698,31700,31703,31705,31708,31710],{"class":105,"line":7973},[103,31699,3014],{"class":109},[103,31701,31702],{"class":113}," ii ",[103,31704,26033],{"class":109},[103,31706,31707],{"class":113}," np.arange(",[103,31709,7348],{"class":162},[103,31711,31712],{"class":113},"(batch_y)):\n",[103,31714,31715,31718,31720,31722,31724,31727,31729,31731],{"class":105,"line":8000},[103,31716,31717],{"class":113},"    plt.subplot(",[103,31719,406],{"class":162},[103,31721,491],{"class":113},[103,31723,714],{"class":162},[103,31725,31726],{"class":113},",ii ",[103,31728,594],{"class":109},[103,31730,25108],{"class":162},[103,31732,120],{"class":113},[103,31734,31735,31738,31741,31743],{"class":105,"line":8005},[103,31736,31737],{"class":113},"    plt.imshow(batch_x[ii,:,:],",[103,31739,31740],{"class":5206},"cmap",[103,31742,159],{"class":109},[103,31744,31745],{"class":113},"plt.cm.gray)\n",[103,31747,31748,31751,31753,31755,31757],{"class":105,"line":8011},[103,31749,31750],{"class":113},"    plt.title(class_label[batch_y[ii]],",[103,31752,31486],{"class":5206},[103,31754,159],{"class":109},[103,31756,559],{"class":162},[103,31758,120],{"class":113},[103,31760,31761,31764,31767],{"class":105,"line":8023},[103,31762,31763],{"class":113},"    plt.axis(",[103,31765,31766],{"class":218},"\"off\"",[103,31768,120],{"class":113},[103,31770,31771,31774,31777,31779,31782],{"class":105,"line":8035},[103,31772,31773],{"class":113},"    plt.subplots_adjust(",[103,31775,31776],{"class":5206},"wspace",[103,31778,159],{"class":109},[103,31780,31781],{"class":162},"0.05",[103,31783,120],{"class":113},[103,31785,31786],{"class":105,"line":8047},[103,31787,31788],{"class":113},"plt.show()\n",[14,31790,31791],{},"用matplotlib进行展示的过程可以后续再补",[14,31793,31794],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31796,31797],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31799,31800],{},"模型训练：",[94,31802,31804],{"className":30368,"code":31803,"language":30370,"meta":24,"style":24},"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",[100,31805,31806,31813,31820,31824,31836,31842,31853,31863,31873,31883,31893,31898,31910,31920,31924,31928,31933,31944,31957,31968,31985,31996,32035,32051,32063,32074,32079,32090,32106,32117,32128,32139,32146,32150,32155,32160,32164,32169,32179,32200,32204,32208,32213,32218,32223,32243,32247,32252,32262,32266,32271,32280,32285,32290,32295,32305,32309,32313,32318,32323,32333,32338,32348,32353,32362,32367,32376,32381,32390,32394,32399,32409,32413,32417,32422,32437,32465,32480,32484,32489,32494,32503,32508,32517,32522,32531,32536,32545,32550,32559,32564,32573,32578,32591,32596,32606,32611,32621,32627,32633,32639,32645,32656,32662,32682,32688,32699,32705,32711,32717,32723,32729,32735,32741,32761,32767,32783,32789,32803,32809,32824,32830,32839,32845,32854,32860,32866,32875,32881,32892,32898,32917,32923,32934,32940,32960,32976,32982,32996,33002,33008,33019,33025,33031,33041,33047,33058,33064,33074,33079,33085,33134,33181,33186,33192,33211,33217,33237,33243,33249,33259,33264,33270,33286,33331,33337,33343,33349,33360,33366,33372,33378,33396,33410,33419,33428,33437,33446,33452,33458,33466,33471,33477,33488,33494,33514,33520,33526,33532,33549,33555,33561,33567,33573,33579,33606,33630,33636,33642,33648,33659,33670,33676,33693,33716,33739,33745,33750,33759,33769,33775,33780,33786,33799,33805,33816,33827,33846],{"__ignoreMap":24},[103,31807,31808,31810],{"class":105,"line":106},[103,31809,30382],{"class":109},[103,31811,31812],{"class":113}," copy\n",[103,31814,31815,31817],{"class":105,"line":25},[103,31816,30382],{"class":109},[103,31818,31819],{"class":113}," time\n",[103,31821,31822],{"class":105,"line":1168},[103,31823,2389],{"emptyLinePlaceholder":30},[103,31825,31826,31828,31831,31833],{"class":105,"line":1183},[103,31827,30382],{"class":109},[103,31829,31830],{"class":113}," pandas ",[103,31832,31373],{"class":109},[103,31834,31835],{"class":113}," pd\n",[103,31837,31838,31840],{"class":105,"line":1189},[103,31839,30382],{"class":109},[103,31841,30385],{"class":113},[103,31843,31844,31846,31848,31850],{"class":105,"line":1203},[103,31845,30727],{"class":109},[103,31847,31405],{"class":113},[103,31849,30382],{"class":109},[103,31851,31852],{"class":113}," Dataset\n",[103,31854,31855,31857,31859,31861],{"class":105,"line":1209},[103,31856,30727],{"class":109},[103,31858,31358],{"class":113},[103,31860,30382],{"class":109},[103,31862,31363],{"class":113},[103,31864,31865,31867,31869,31871],{"class":105,"line":1300},[103,31866,30727],{"class":109},[103,31868,31388],{"class":113},[103,31870,30382],{"class":109},[103,31872,31393],{"class":113},[103,31874,31875,31877,31879,31881],{"class":105,"line":1306},[103,31876,30382],{"class":109},[103,31878,31405],{"class":113},[103,31880,31373],{"class":109},[103,31882,31410],{"class":113},[103,31884,31885,31887,31889,31891],{"class":105,"line":1318},[103,31886,30382],{"class":109},[103,31888,31422],{"class":113},[103,31890,31373],{"class":109},[103,31892,31427],{"class":113},[103,31894,31895],{"class":105,"line":1601},[103,31896,31897],{"class":172},"# 导入模型\n",[103,31899,31900,31902,31905,31907],{"class":105,"line":1606},[103,31901,30727],{"class":109},[103,31903,31904],{"class":113}," model ",[103,31906,30382],{"class":109},[103,31908,31909],{"class":113}," LeNet\n",[103,31911,31912,31914,31916,31918],{"class":105,"line":1612},[103,31913,30727],{"class":109},[103,31915,30730],{"class":113},[103,31917,30382],{"class":109},[103,31919,30735],{"class":113},[103,31921,31922],{"class":105,"line":1617},[103,31923,2389],{"emptyLinePlaceholder":30},[103,31925,31926],{"class":105,"line":1631},[103,31927,2389],{"emptyLinePlaceholder":30},[103,31929,31930],{"class":105,"line":1636},[103,31931,31932],{"class":172},"# 处理训练集与验证集函数--->划分数据集\n",[103,31934,31935,31938,31941],{"class":105,"line":1642},[103,31936,31937],{"class":109},"def",[103,31939,31940],{"class":1952}," train_val_data_process",[103,31942,31943],{"class":113},"():\n",[103,31945,31946,31949,31951,31953,31955],{"class":105,"line":1663},[103,31947,31948],{"class":113},"    train_data",[103,31950,159],{"class":109},[103,31952,31445],{"class":113},[103,31954,31453],{"class":218},[103,31956,31456],{"class":113},[103,31958,31959,31962,31964,31966],{"class":105,"line":1668},[103,31960,31961],{"class":5206},"                            train",[103,31963,159],{"class":109},[103,31965,31466],{"class":162},[103,31967,31456],{"class":113},[103,31969,31970,31973,31975,31977,31979,31981,31983],{"class":105,"line":1682},[103,31971,31972],{"class":5206},"                            transform",[103,31974,159],{"class":109},[103,31976,31483],{"class":113},[103,31978,31486],{"class":5206},[103,31980,159],{"class":109},[103,31982,1014],{"class":162},[103,31984,31494],{"class":113},[103,31986,31987,31990,31992,31994],{"class":105,"line":1687},[103,31988,31989],{"class":5206},"                            download",[103,31991,159],{"class":109},[103,31993,31466],{"class":162},[103,31995,120],{"class":113},[103,31997,31998,32001,32003,32006,32009,32011,32014,32016,32018,32021,32023,32025,32028,32030,32032],{"class":105,"line":1716},[103,31999,32000],{"class":113},"    train_data,val_data",[103,32002,159],{"class":109},[103,32004,32005],{"class":113},"Data.random_split(train_data,[",[103,32007,32008],{"class":162},"round",[103,32010,114],{"class":113},[103,32012,32013],{"class":162},"0.8",[103,32015,568],{"class":109},[103,32017,7348],{"class":162},[103,32019,32020],{"class":113},"(train_data)),",[103,32022,32008],{"class":162},[103,32024,114],{"class":113},[103,32026,32027],{"class":162},"0.2",[103,32029,568],{"class":109},[103,32031,7348],{"class":162},[103,32033,32034],{"class":113},"(train_data))])\n",[103,32036,32037,32040,32042,32045,32047,32049],{"class":105,"line":1721},[103,32038,32039],{"class":113},"    train_dataloader ",[103,32041,159],{"class":109},[103,32043,32044],{"class":113}," Data.DataLoader(",[103,32046,31527],{"class":5206},[103,32048,159],{"class":109},[103,32050,31532],{"class":113},[103,32052,32053,32056,32058,32061],{"class":105,"line":1738},[103,32054,32055],{"class":5206},"                                       batch_size",[103,32057,159],{"class":109},[103,32059,32060],{"class":162},"128",[103,32062,31456],{"class":113},[103,32064,32065,32068,32070,32072],{"class":105,"line":1743},[103,32066,32067],{"class":5206},"                                       shuffle",[103,32069,159],{"class":109},[103,32071,31466],{"class":162},[103,32073,31456],{"class":113},[103,32075,32076],{"class":105,"line":1748},[103,32077,32078],{"class":172},"                                       # 规定8个进程\n",[103,32080,32081,32084,32086,32088],{"class":105,"line":1753},[103,32082,32083],{"class":5206},"                                       num_workers",[103,32085,159],{"class":109},[103,32087,508],{"class":162},[103,32089,120],{"class":113},[103,32091,32092,32095,32097,32099,32101,32103],{"class":105,"line":1767},[103,32093,32094],{"class":113},"    val_dataloader",[103,32096,159],{"class":109},[103,32098,31524],{"class":113},[103,32100,31527],{"class":5206},[103,32102,159],{"class":109},[103,32104,32105],{"class":113},"val_data,\n",[103,32107,32108,32111,32113,32115],{"class":105,"line":1772},[103,32109,32110],{"class":5206},"                                   batch_size",[103,32112,159],{"class":109},[103,32114,32060],{"class":162},[103,32116,31456],{"class":113},[103,32118,32119,32122,32124,32126],{"class":105,"line":2566},[103,32120,32121],{"class":5206},"                                   shuffle",[103,32123,159],{"class":109},[103,32125,31466],{"class":162},[103,32127,31456],{"class":113},[103,32129,32130,32133,32135,32137],{"class":105,"line":2580},[103,32131,32132],{"class":5206},"                                   num_workers",[103,32134,159],{"class":109},[103,32136,508],{"class":162},[103,32138,120],{"class":113},[103,32140,32141,32143],{"class":105,"line":2588},[103,32142,4079],{"class":109},[103,32144,32145],{"class":113}," train_dataloader,val_dataloader\n",[103,32147,32148],{"class":105,"line":2593},[103,32149,2389],{"emptyLinePlaceholder":30},[103,32151,32152],{"class":105,"line":2599},[103,32153,32154],{"class":172},"# 验证是否出错\n",[103,32156,32157],{"class":105,"line":2605},[103,32158,32159],{"class":172},"# train_val_data_process()\n",[103,32161,32162],{"class":105,"line":2610},[103,32163,2389],{"emptyLinePlaceholder":30},[103,32165,32166],{"class":105,"line":7938},[103,32167,32168],{"class":172},"# 定义模型训练函数\n",[103,32170,32171,32173,32176],{"class":105,"line":7962},[103,32172,31937],{"class":109},[103,32174,32175],{"class":1952}," train_model_process",[103,32177,32178],{"class":113},"(model,train_dataloader,val_dataloader,num_epochs):\n",[103,32180,32181,32183,32185,32187,32189,32191,32193,32195,32198],{"class":105,"line":7967},[103,32182,31227],{"class":113},[103,32184,159],{"class":109},[103,32186,30441],{"class":113},[103,32188,31234],{"class":218},[103,32190,1693],{"class":109},[103,32192,31239],{"class":113},[103,32194,1690],{"class":109},[103,32196,32197],{"class":218}," 'cpu'",[103,32199,120],{"class":113},[103,32201,32202],{"class":105,"line":7973},[103,32203,2389],{"emptyLinePlaceholder":30},[103,32205,32206],{"class":105,"line":8000},[103,32207,2389],{"emptyLinePlaceholder":30},[103,32209,32210],{"class":105,"line":8005},[103,32211,32212],{"class":172},"    # 定义优化器\n",[103,32214,32215],{"class":105,"line":8011},[103,32216,32217],{"class":172},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[103,32219,32220],{"class":105,"line":8023},[103,32221,32222],{"class":172},"    # lr为学习率\n",[103,32224,32225,32228,32230,32233,32236,32238,32241],{"class":105,"line":8035},[103,32226,32227],{"class":113},"    optimizer",[103,32229,159],{"class":109},[103,32231,32232],{"class":113},"torch.optim.Adam(model.parameters(),",[103,32234,32235],{"class":5206},"lr",[103,32237,159],{"class":109},[103,32239,32240],{"class":162},"0.001",[103,32242,120],{"class":113},[103,32244,32245],{"class":105,"line":8047},[103,32246,2389],{"emptyLinePlaceholder":30},[103,32248,32249],{"class":105,"line":9706},[103,32250,32251],{"class":172},"    # 定义损失函数使用交叉熵损失函数\n",[103,32253,32254,32257,32259],{"class":105,"line":9731},[103,32255,32256],{"class":113},"    criterion",[103,32258,159],{"class":109},[103,32260,32261],{"class":113},"nn.CrossEntropyLoss()\n",[103,32263,32264],{"class":105,"line":9754},[103,32265,2389],{"emptyLinePlaceholder":30},[103,32267,32268],{"class":105,"line":9778},[103,32269,32270],{"class":172},"    # 将模型放到GPU中进行训练\n",[103,32272,32273,32275,32277],{"class":105,"line":9783},[103,32274,31279],{"class":113},[103,32276,159],{"class":109},[103,32278,32279],{"class":113},"model.to(device)\n",[103,32281,32282],{"class":105,"line":9788},[103,32283,32284],{"class":172},"    # 复制当前模型的参数\n",[103,32286,32287],{"class":105,"line":9793},[103,32288,32289],{"class":172},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[103,32291,32292],{"class":105,"line":9802},[103,32293,32294],{"class":172},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[103,32296,32297,32300,32302],{"class":105,"line":9807},[103,32298,32299],{"class":113},"    best_model_wts",[103,32301,159],{"class":109},[103,32303,32304],{"class":113},"copy.deepcopy(model.state_dict())\n",[103,32306,32307],{"class":105,"line":9813},[103,32308,2389],{"emptyLinePlaceholder":30},[103,32310,32311],{"class":105,"line":9834},[103,32312,2389],{"emptyLinePlaceholder":30},[103,32314,32315],{"class":105,"line":9840},[103,32316,32317],{"class":172},"    # 初始化参数\n",[103,32319,32320],{"class":105,"line":9854},[103,32321,32322],{"class":172},"    # 最高准确度\n",[103,32324,32325,32328,32330],{"class":105,"line":9860},[103,32326,32327],{"class":113},"    best_acc",[103,32329,159],{"class":109},[103,32331,32332],{"class":162},"0.0\n",[103,32334,32335],{"class":105,"line":9887},[103,32336,32337],{"class":172},"    # 训练集损失列表\n",[103,32339,32340,32343,32345],{"class":105,"line":9896},[103,32341,32342],{"class":113},"    train_loss_all",[103,32344,159],{"class":109},[103,32346,32347],{"class":113},"[]\n",[103,32349,32350],{"class":105,"line":9902},[103,32351,32352],{"class":172},"    # 验证集函数列表\n",[103,32354,32355,32358,32360],{"class":105,"line":9910},[103,32356,32357],{"class":113},"    val_loss_all",[103,32359,159],{"class":109},[103,32361,32347],{"class":113},[103,32363,32364],{"class":105,"line":9915},[103,32365,32366],{"class":172},"    # 训练集准确度列表\n",[103,32368,32369,32372,32374],{"class":105,"line":16594},[103,32370,32371],{"class":113},"    train_acc_all",[103,32373,159],{"class":109},[103,32375,32347],{"class":113},[103,32377,32378],{"class":105,"line":16600},[103,32379,32380],{"class":172},"    # 验证集准确度列表\n",[103,32382,32383,32386,32388],{"class":105,"line":16623},[103,32384,32385],{"class":113},"    val_acc_all",[103,32387,159],{"class":109},[103,32389,32347],{"class":113},[103,32391,32392],{"class":105,"line":16629},[103,32393,2389],{"emptyLinePlaceholder":30},[103,32395,32396],{"class":105,"line":16652},[103,32397,32398],{"class":172},"    # 保存当前时间--->方便看每轮训练的时间\n",[103,32400,32401,32404,32406],{"class":105,"line":16666},[103,32402,32403],{"class":113},"    since",[103,32405,159],{"class":109},[103,32407,32408],{"class":113},"time.time()\n",[103,32410,32411],{"class":105,"line":16686},[103,32412,2389],{"emptyLinePlaceholder":30},[103,32414,32415],{"class":105,"line":16692},[103,32416,2389],{"emptyLinePlaceholder":30},[103,32418,32419],{"class":105,"line":16703},[103,32420,32421],{"class":172},"    # 准备工作完成--->开始训练模型\n",[103,32423,32424,32426,32429,32431,32434],{"class":105,"line":16726},[103,32425,3190],{"class":109},[103,32427,32428],{"class":113}," epoch ",[103,32430,26033],{"class":109},[103,32432,32433],{"class":162}," range",[103,32435,32436],{"class":113},"(num_epochs):\n",[103,32438,32439,32442,32444,32447,32450,32452,32454,32456,32459,32461,32463],{"class":105,"line":16748},[103,32440,32441],{"class":162},"        print",[103,32443,114],{"class":113},[103,32445,32446],{"class":218},"\"Epoch ",[103,32448,32449],{"class":162},"{}",[103,32451,697],{"class":218},[103,32453,32449],{"class":162},[103,32455,364],{"class":218},[103,32457,32458],{"class":113},".format(epoch,num_epochs",[103,32460,645],{"class":109},[103,32462,331],{"class":162},[103,32464,30487],{"class":113},[103,32466,32467,32469,32471,32474,32476,32478],{"class":105,"line":16753},[103,32468,32441],{"class":162},[103,32470,114],{"class":113},[103,32472,32473],{"class":218},"\"-\"",[103,32475,568],{"class":109},[103,32477,559],{"class":162},[103,32479,120],{"class":113},[103,32481,32482],{"class":105,"line":16759},[103,32483,2389],{"emptyLinePlaceholder":30},[103,32485,32486],{"class":105,"line":16773},[103,32487,32488],{"class":172},"        # 初始化参数\n",[103,32490,32491],{"class":105,"line":16786},[103,32492,32493],{"class":172},"        # 训练集损失函数\n",[103,32495,32496,32499,32501],{"class":105,"line":16791},[103,32497,32498],{"class":113},"        train_loss",[103,32500,159],{"class":109},[103,32502,32332],{"class":162},[103,32504,32505],{"class":105,"line":16805},[103,32506,32507],{"class":172},"        # 训练集准确度\n",[103,32509,32510,32513,32515],{"class":105,"line":16810},[103,32511,32512],{"class":113},"        train_corrects",[103,32514,159],{"class":109},[103,32516,3074],{"class":162},[103,32518,32519],{"class":105,"line":16816},[103,32520,32521],{"class":172},"        # 验证集损失函数\n",[103,32523,32524,32527,32529],{"class":105,"line":16821},[103,32525,32526],{"class":113},"        val_loss",[103,32528,159],{"class":109},[103,32530,32332],{"class":162},[103,32532,32533],{"class":105,"line":16835},[103,32534,32535],{"class":172},"        # 验证集准确度\n",[103,32537,32538,32541,32543],{"class":105,"line":16840},[103,32539,32540],{"class":113},"        val_corrects",[103,32542,159],{"class":109},[103,32544,3074],{"class":162},[103,32546,32547],{"class":105,"line":16845},[103,32548,32549],{"class":172},"        # 训练集样本数量\n",[103,32551,32552,32555,32557],{"class":105,"line":16859},[103,32553,32554],{"class":113},"        train_num",[103,32556,159],{"class":109},[103,32558,3074],{"class":162},[103,32560,32561],{"class":105,"line":16871},[103,32562,32563],{"class":172},"        # 验证集样本数量\n",[103,32565,32566,32569,32571],{"class":105,"line":16876},[103,32567,32568],{"class":113},"        val_num",[103,32570,159],{"class":109},[103,32572,3074],{"class":162},[103,32574,32575],{"class":105,"line":16889},[103,32576,32577],{"class":172},"        # 将数据放到设备,并开始训练\n",[103,32579,32580,32582,32584,32586,32588],{"class":105,"line":16894},[103,32581,3392],{"class":109},[103,32583,31591],{"class":113},[103,32585,26033],{"class":109},[103,32587,31596],{"class":162},[103,32589,32590],{"class":113},"(train_dataloader):\n",[103,32592,32593],{"class":105,"line":16899},[103,32594,32595],{"class":172},"            # 将特征放入到训练设备\n",[103,32597,32598,32601,32603],{"class":105,"line":16904},[103,32599,32600],{"class":113},"            b_x",[103,32602,159],{"class":109},[103,32604,32605],{"class":113},"b_x.to(device)\n",[103,32607,32608],{"class":105,"line":16917},[103,32609,32610],{"class":172},"            # 将标签放入到训练设备当中\n",[103,32612,32613,32616,32618],{"class":105,"line":16922},[103,32614,32615],{"class":113},"            b_y",[103,32617,159],{"class":109},[103,32619,32620],{"class":113},"b_y.to(device)\n",[103,32622,32624],{"class":105,"line":32623},98,[103,32625,32626],{"class":172},"            # 设置模型为训练模式\n",[103,32628,32630],{"class":105,"line":32629},99,[103,32631,32632],{"class":113},"            model.train()\n",[103,32634,32636],{"class":105,"line":32635},100,[103,32637,32638],{"class":172},"            # 将数据放到模型当中,开始前向传播\n",[103,32640,32642],{"class":105,"line":32641},101,[103,32643,32644],{"class":172},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[103,32646,32648,32651,32653],{"class":105,"line":32647},102,[103,32649,32650],{"class":113},"            output",[103,32652,159],{"class":109},[103,32654,32655],{"class":113},"model(b_x)\n",[103,32657,32659],{"class":105,"line":32658},103,[103,32660,32661],{"class":172},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[103,32663,32665,32668,32670,32673,32676,32678,32680],{"class":105,"line":32664},104,[103,32666,32667],{"class":113},"            pre_lab",[103,32669,159],{"class":109},[103,32671,32672],{"class":113},"torch.argmax(output,",[103,32674,32675],{"class":5206},"dim",[103,32677,159],{"class":109},[103,32679,331],{"class":162},[103,32681,120],{"class":113},[103,32683,32685],{"class":105,"line":32684},105,[103,32686,32687],{"class":172},"            # 计算每一个batch的损失函数\n",[103,32689,32691,32694,32696],{"class":105,"line":32690},106,[103,32692,32693],{"class":113},"            loss",[103,32695,159],{"class":109},[103,32697,32698],{"class":113},"criterion(output,b_y)\n",[103,32700,32702],{"class":105,"line":32701},107,[103,32703,32704],{"class":172},"            # 将梯度初始化为0\n",[103,32706,32708],{"class":105,"line":32707},108,[103,32709,32710],{"class":113},"            optimizer.zero_grad()\n",[103,32712,32714],{"class":105,"line":32713},109,[103,32715,32716],{"class":172},"            # 梯度置为0后再进行反向传播\n",[103,32718,32720],{"class":105,"line":32719},110,[103,32721,32722],{"class":113},"            loss.backward()\n",[103,32724,32726],{"class":105,"line":32725},111,[103,32727,32728],{"class":172},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[103,32730,32732],{"class":105,"line":32731},112,[103,32733,32734],{"class":113},"            optimizer.step()\n",[103,32736,32738],{"class":105,"line":32737},113,[103,32739,32740],{"class":172},"            # loss.item()指的是batch的平均损失\n",[103,32742,32744,32747,32749,32752,32754,32757,32759],{"class":105,"line":32743},114,[103,32745,32746],{"class":113},"            train_loss",[103,32748,9467],{"class":109},[103,32750,32751],{"class":113},"loss.item()",[103,32753,568],{"class":109},[103,32755,32756],{"class":113},"b_x.size(",[103,32758,305],{"class":162},[103,32760,120],{"class":113},[103,32762,32764],{"class":105,"line":32763},115,[103,32765,32766],{"class":172},"            # 计算每个批次中正确预测的数量\n",[103,32768,32770,32773,32775,32778,32780],{"class":105,"line":32769},116,[103,32771,32772],{"class":113},"            train_corrects",[103,32774,9467],{"class":109},[103,32776,32777],{"class":113},"torch.sum(pre_lab",[103,32779,2938],{"class":109},[103,32781,32782],{"class":113},"b_y.data)\n",[103,32784,32786],{"class":105,"line":32785},117,[103,32787,32788],{"class":172},"            # 计算目前为止一共处理了多少样本\n",[103,32790,32792,32795,32797,32799,32801],{"class":105,"line":32791},118,[103,32793,32794],{"class":113},"            train_num",[103,32796,9467],{"class":109},[103,32798,32756],{"class":113},[103,32800,305],{"class":162},[103,32802,120],{"class":113},[103,32804,32806],{"class":105,"line":32805},119,[103,32807,32808],{"class":172},"        # 验证数据\n",[103,32810,32812,32814,32817,32819,32821],{"class":105,"line":32811},120,[103,32813,3392],{"class":109},[103,32815,32816],{"class":113}," step ,(b_x,b_y) ",[103,32818,26033],{"class":109},[103,32820,31596],{"class":162},[103,32822,32823],{"class":113},"(val_dataloader):\n",[103,32825,32827],{"class":105,"line":32826},121,[103,32828,32829],{"class":172},"            # 将特征放到验证设备当中\n",[103,32831,32833,32835,32837],{"class":105,"line":32832},122,[103,32834,32600],{"class":113},[103,32836,159],{"class":109},[103,32838,32605],{"class":113},[103,32840,32842],{"class":105,"line":32841},123,[103,32843,32844],{"class":172},"            # 将标签放到放到训练设备当中\n",[103,32846,32848,32850,32852],{"class":105,"line":32847},124,[103,32849,32615],{"class":113},[103,32851,159],{"class":109},[103,32853,32620],{"class":113},[103,32855,32857],{"class":105,"line":32856},125,[103,32858,32859],{"class":172},"            # 开启验证模式，设置模型为评估模式\n",[103,32861,32863],{"class":105,"line":32862},126,[103,32864,32865],{"class":113},"            model.eval()\n",[103,32867,32869,32872],{"class":105,"line":32868},127,[103,32870,32871],{"class":109},"            with",[103,32873,32874],{"class":113}," torch.no_grad():\n",[103,32876,32878],{"class":105,"line":32877},128,[103,32879,32880],{"class":172},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[103,32882,32884,32887,32889],{"class":105,"line":32883},129,[103,32885,32886],{"class":113},"                output ",[103,32888,159],{"class":109},[103,32890,32891],{"class":113}," model(b_x)\n",[103,32893,32895],{"class":105,"line":32894},130,[103,32896,32897],{"class":172},"                # 查找每一行中最大值对应的下标\n",[103,32899,32901,32904,32906,32909,32911,32913,32915],{"class":105,"line":32900},131,[103,32902,32903],{"class":113},"                pre_lab ",[103,32905,159],{"class":109},[103,32907,32908],{"class":113}," torch.argmax(output, ",[103,32910,32675],{"class":5206},[103,32912,159],{"class":109},[103,32914,331],{"class":162},[103,32916,120],{"class":113},[103,32918,32920],{"class":105,"line":32919},132,[103,32921,32922],{"class":172},"                # 计算验证集上的当前 batch 损失\n",[103,32924,32926,32929,32931],{"class":105,"line":32925},133,[103,32927,32928],{"class":113},"                val_batch_loss ",[103,32930,159],{"class":109},[103,32932,32933],{"class":113}," criterion(output, b_y)\n",[103,32935,32937],{"class":105,"line":32936},134,[103,32938,32939],{"class":172},"                # 对损失函数进行累加（按样本数加权）\n",[103,32941,32943,32946,32948,32951,32953,32956,32958],{"class":105,"line":32942},135,[103,32944,32945],{"class":113},"                val_loss ",[103,32947,9467],{"class":109},[103,32949,32950],{"class":113}," val_batch_loss.item() ",[103,32952,568],{"class":109},[103,32954,32955],{"class":113}," b_x.size(",[103,32957,305],{"class":162},[103,32959,120],{"class":113},[103,32961,32963,32966,32968,32971,32973],{"class":105,"line":32962},136,[103,32964,32965],{"class":113},"                val_corrects ",[103,32967,9467],{"class":109},[103,32969,32970],{"class":113}," torch.sum(pre_lab ",[103,32972,2938],{"class":109},[103,32974,32975],{"class":113}," b_y.data)\n",[103,32977,32979],{"class":105,"line":32978},137,[103,32980,32981],{"class":172},"                # 当前用于验证的样本数量\n",[103,32983,32985,32988,32990,32992,32994],{"class":105,"line":32984},138,[103,32986,32987],{"class":113},"            val_num ",[103,32989,9467],{"class":109},[103,32991,32955],{"class":113},[103,32993,305],{"class":162},[103,32995,120],{"class":113},[103,32997,32999],{"class":105,"line":32998},139,[103,33000,33001],{"class":172},"        # 计算并保存每一次迭代的loss值和准确率\n",[103,33003,33005],{"class":105,"line":33004},140,[103,33006,33007],{"class":172},"        # 计算并保存训练集的loss值\n",[103,33009,33011,33014,33016],{"class":105,"line":33010},141,[103,33012,33013],{"class":113},"        train_loss_all.append(train_loss",[103,33015,697],{"class":109},[103,33017,33018],{"class":113},"train_num)\n",[103,33020,33022],{"class":105,"line":33021},142,[103,33023,33024],{"class":172},"        # 取双精度\n",[103,33026,33028],{"class":105,"line":33027},143,[103,33029,33030],{"class":172},"        # 计算并保存训练集的准确率\n",[103,33032,33034,33037,33039],{"class":105,"line":33033},144,[103,33035,33036],{"class":113},"        train_acc_all.append(train_corrects.double().item()",[103,33038,697],{"class":109},[103,33040,33018],{"class":113},[103,33042,33044],{"class":105,"line":33043},145,[103,33045,33046],{"class":172},"        # 计算并保存验证集的loss值\n",[103,33048,33050,33053,33055],{"class":105,"line":33049},146,[103,33051,33052],{"class":113},"        val_loss_all.append(val_loss",[103,33054,697],{"class":109},[103,33056,33057],{"class":113},"val_num)\n",[103,33059,33061],{"class":105,"line":33060},147,[103,33062,33063],{"class":172},"        # 计算并保存验证集的准确率\n",[103,33065,33067,33070,33072],{"class":105,"line":33066},148,[103,33068,33069],{"class":113},"        val_acc_all.append(val_corrects.double().item()",[103,33071,697],{"class":109},[103,33073,33057],{"class":113},[103,33075,33077],{"class":105,"line":33076},149,[103,33078,2389],{"emptyLinePlaceholder":30},[103,33080,33082],{"class":105,"line":33081},150,[103,33083,33084],{"class":172},"        # 打印训练一轮的loss值和准确率\n",[103,33086,33088,33090,33092,33094,33096,33099,33101,33104,33106,33109,33111,33113,33115,33117,33120,33122,33124,33127,33129,33131],{"class":105,"line":33087},151,[103,33089,32441],{"class":162},[103,33091,114],{"class":113},[103,33093,3581],{"class":218},[103,33095,32449],{"class":162},[103,33097,33098],{"class":218},"train loss:",[103,33100,1009],{"class":162},[103,33102,33103],{"class":109},":.4f",[103,33105,1059],{"class":162},[103,33107,33108],{"class":218}," train acc:",[103,33110,1009],{"class":162},[103,33112,33103],{"class":109},[103,33114,1059],{"class":162},[103,33116,3581],{"class":218},[103,33118,33119],{"class":113},".format(epoch,train_loss_all[",[103,33121,645],{"class":109},[103,33123,331],{"class":162},[103,33125,33126],{"class":113},"],train_acc_all[",[103,33128,645],{"class":109},[103,33130,331],{"class":162},[103,33132,33133],{"class":113},"]))\n",[103,33135,33137,33139,33141,33143,33145,33148,33150,33152,33154,33157,33159,33161,33163,33165,33168,33170,33172,33175,33177,33179],{"class":105,"line":33136},152,[103,33138,32441],{"class":162},[103,33140,114],{"class":113},[103,33142,3581],{"class":218},[103,33144,32449],{"class":162},[103,33146,33147],{"class":218},"val loss:",[103,33149,1009],{"class":162},[103,33151,33103],{"class":109},[103,33153,1059],{"class":162},[103,33155,33156],{"class":218}," val acc:",[103,33158,1009],{"class":162},[103,33160,33103],{"class":109},[103,33162,1059],{"class":162},[103,33164,3581],{"class":218},[103,33166,33167],{"class":113},".format(epoch,val_loss_all[",[103,33169,645],{"class":109},[103,33171,331],{"class":162},[103,33173,33174],{"class":113},"],val_acc_all[",[103,33176,645],{"class":109},[103,33178,331],{"class":162},[103,33180,33133],{"class":113},[103,33182,33184],{"class":105,"line":33183},153,[103,33185,2389],{"emptyLinePlaceholder":30},[103,33187,33189],{"class":105,"line":33188},154,[103,33190,33191],{"class":172},"        # 判断准确度--->保存最优模型\n",[103,33193,33195,33197,33200,33202,33204,33206,33208],{"class":105,"line":33194},155,[103,33196,2486],{"class":109},[103,33198,33199],{"class":113}," val_acc_all[",[103,33201,645],{"class":109},[103,33203,331],{"class":162},[103,33205,1053],{"class":113},[103,33207,1073],{"class":109},[103,33209,33210],{"class":113},"best_acc:\n",[103,33212,33214],{"class":105,"line":33213},156,[103,33215,33216],{"class":172},"            # 保存当前模型准确度\n",[103,33218,33220,33223,33225,33227,33230,33232,33234],{"class":105,"line":33219},157,[103,33221,33222],{"class":113},"            best_acc:",[103,33224,153],{"class":162},[103,33226,159],{"class":109},[103,33228,33229],{"class":113},"val_acc_all[",[103,33231,645],{"class":109},[103,33233,331],{"class":162},[103,33235,33236],{"class":113},"]\n",[103,33238,33240],{"class":105,"line":33239},158,[103,33241,33242],{"class":172},"            # 保存当前的准确度\n",[103,33244,33246],{"class":105,"line":33245},159,[103,33247,33248],{"class":172},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[103,33250,33252,33255,33257],{"class":105,"line":33251},160,[103,33253,33254],{"class":113},"            best_model_wts",[103,33256,159],{"class":109},[103,33258,32304],{"class":113},[103,33260,33262],{"class":105,"line":33261},161,[103,33263,2389],{"emptyLinePlaceholder":30},[103,33265,33267],{"class":105,"line":33266},162,[103,33268,33269],{"class":172},"        # 计算耗时\n",[103,33271,33273,33276,33278,33281,33283],{"class":105,"line":33272},163,[103,33274,33275],{"class":113},"        time_use",[103,33277,159],{"class":109},[103,33279,33280],{"class":113},"time.time()",[103,33282,645],{"class":109},[103,33284,33285],{"class":113},"since\n",[103,33287,33289,33291,33293,33296,33298,33301,33303,33305,33307,33309,33311,33314,33317,33320,33322,33325,33327,33329],{"class":105,"line":33288},164,[103,33290,32441],{"class":162},[103,33292,114],{"class":113},[103,33294,33295],{"class":218},"'训练和验证耗费的时间",[103,33297,1009],{"class":162},[103,33299,33300],{"class":109},":.0f",[103,33302,1059],{"class":162},[103,33304,657],{"class":218},[103,33306,1009],{"class":162},[103,33308,33300],{"class":109},[103,33310,1059],{"class":162},[103,33312,33313],{"class":218},"s'",[103,33315,33316],{"class":113},".format(time_use",[103,33318,33319],{"class":109},"\u002F\u002F",[103,33321,1020],{"class":162},[103,33323,33324],{"class":113},",time_use",[103,33326,441],{"class":109},[103,33328,1020],{"class":162},[103,33330,30487],{"class":113},[103,33332,33334],{"class":105,"line":33333},165,[103,33335,33336],{"class":172},"    # 选择最优参数\n",[103,33338,33340],{"class":105,"line":33339},166,[103,33341,33342],{"class":172},"    # 加载最高准确率下的模型参数\n",[103,33344,33346],{"class":105,"line":33345},167,[103,33347,33348],{"class":172},"    # model.load_state_dict(best_model_wts)\n",[103,33350,33352,33355,33358],{"class":105,"line":33351},168,[103,33353,33354],{"class":113},"    torch.save(model.state_dict(best_model_wts), ",[103,33356,33357],{"class":218},"'.\u002Fbest_model.pth'",[103,33359,120],{"class":113},[103,33361,33363],{"class":105,"line":33362},169,[103,33364,33365],{"class":172},"    # 或者写成\n",[103,33367,33369],{"class":105,"line":33368},170,[103,33370,33371],{"class":172},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[103,33373,33375],{"class":105,"line":33374},171,[103,33376,33377],{"class":172},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[103,33379,33381,33384,33386,33389,33392,33394],{"class":105,"line":33380},172,[103,33382,33383],{"class":113},"    train_process",[103,33385,159],{"class":109},[103,33387,33388],{"class":113},"pd.DataFrame(",[103,33390,33391],{"class":5206},"data",[103,33393,159],{"class":109},[103,33395,1535],{"class":113},[103,33397,33399,33402,33404,33407],{"class":105,"line":33398},173,[103,33400,33401],{"class":218},"        \"epoch\"",[103,33403,972],{"class":113},[103,33405,33406],{"class":162},"range",[103,33408,33409],{"class":113},"(num_epochs),\n",[103,33411,33413,33416],{"class":105,"line":33412},174,[103,33414,33415],{"class":218},"        \"train_loss_all\"",[103,33417,33418],{"class":113},":train_loss_all,\n",[103,33420,33422,33425],{"class":105,"line":33421},175,[103,33423,33424],{"class":218},"        \"val_loss_all\"",[103,33426,33427],{"class":113},":val_loss_all,\n",[103,33429,33431,33434],{"class":105,"line":33430},176,[103,33432,33433],{"class":218},"        \"train_acc_all\"",[103,33435,33436],{"class":113},":train_acc_all,\n",[103,33438,33440,33443],{"class":105,"line":33439},177,[103,33441,33442],{"class":218},"        \"val_acc_all\"",[103,33444,33445],{"class":113},":val_acc_all\n",[103,33447,33449],{"class":105,"line":33448},178,[103,33450,33451],{"class":113},"    })\n",[103,33453,33455],{"class":105,"line":33454},179,[103,33456,33457],{"class":172},"    # 返回训练保存的过程\n",[103,33459,33461,33463],{"class":105,"line":33460},180,[103,33462,4079],{"class":109},[103,33464,33465],{"class":113}," train_process\n",[103,33467,33469],{"class":105,"line":33468},181,[103,33470,2389],{"emptyLinePlaceholder":30},[103,33472,33474],{"class":105,"line":33473},182,[103,33475,33476],{"class":172},"# 将loss值和精度按照图片的形式展示出来\n",[103,33478,33480,33482,33485],{"class":105,"line":33479},183,[103,33481,31937],{"class":109},[103,33483,33484],{"class":1952}," matplot_acc_loss",[103,33486,33487],{"class":113},"(train_process):\n",[103,33489,33491],{"class":105,"line":33490},184,[103,33492,33493],{"class":172},"    # 设置图的大小\n",[103,33495,33497,33500,33502,33504,33506,33508,33510,33512],{"class":105,"line":33496},185,[103,33498,33499],{"class":113},"    plt.figure(",[103,33501,31683],{"class":5206},[103,33503,159],{"class":109},[103,33505,114],{"class":113},[103,33507,611],{"class":162},[103,33509,491],{"class":113},[103,33511,406],{"class":162},[103,33513,30487],{"class":113},[103,33515,33517],{"class":105,"line":33516},186,[103,33518,33519],{"class":172},"    # 设置图中有几张图\n",[103,33521,33523],{"class":105,"line":33522},187,[103,33524,33525],{"class":172},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[103,33527,33529],{"class":105,"line":33528},188,[103,33530,33531],{"class":172},"    # ①loss图\n",[103,33533,33535,33537,33539,33541,33543,33545,33547],{"class":105,"line":33534},189,[103,33536,31717],{"class":113},[103,33538,331],{"class":162},[103,33540,491],{"class":113},[103,33542,191],{"class":162},[103,33544,491],{"class":113},[103,33546,331],{"class":162},[103,33548,120],{"class":113},[103,33550,33552],{"class":105,"line":33551},190,[103,33553,33554],{"class":172},"    # 补充:\n",[103,33556,33558],{"class":105,"line":33557},191,[103,33559,33560],{"class":172},"    # plt.subplot(nrows, ncols, index)\n",[103,33562,33564],{"class":105,"line":33563},192,[103,33565,33566],{"class":172},"    # nrows：行数\n",[103,33568,33570],{"class":105,"line":33569},193,[103,33571,33572],{"class":172},"    # ncols：列数\n",[103,33574,33576],{"class":105,"line":33575},194,[103,33577,33578],{"class":172},"    # index：目前选中第几个子图（从1开始）\n",[103,33580,33582,33585,33588,33591,33594,33596,33599,33601,33604],{"class":105,"line":33581},195,[103,33583,33584],{"class":113},"    plt.plot(train_process[",[103,33586,33587],{"class":218},"\"epoch\"",[103,33589,33590],{"class":113},"],train_process.train_loss_all,",[103,33592,33593],{"class":218},"'ro-'",[103,33595,491],{"class":113},[103,33597,33598],{"class":5206},"label",[103,33600,159],{"class":109},[103,33602,33603],{"class":218},"'train loss'",[103,33605,120],{"class":113},[103,33607,33609,33611,33613,33616,33619,33621,33623,33625,33628],{"class":105,"line":33608},196,[103,33610,33584],{"class":113},[103,33612,33587],{"class":218},[103,33614,33615],{"class":113},"],train_process.val_loss_all,",[103,33617,33618],{"class":218},"'bs--'",[103,33620,491],{"class":113},[103,33622,33598],{"class":5206},[103,33624,159],{"class":109},[103,33626,33627],{"class":218},"'val loss'",[103,33629,120],{"class":113},[103,33631,33633],{"class":105,"line":33632},197,[103,33634,33635],{"class":172},"    # 添加一个图例\n",[103,33637,33639],{"class":105,"line":33638},198,[103,33640,33641],{"class":113},"    plt.legend()\n",[103,33643,33645],{"class":105,"line":33644},199,[103,33646,33647],{"class":172},"    # 给轴添加标签\n",[103,33649,33651,33654,33657],{"class":105,"line":33650},200,[103,33652,33653],{"class":113},"    plt.xlabel(",[103,33655,33656],{"class":218},"'epoch'",[103,33658,120],{"class":113},[103,33660,33662,33665,33668],{"class":105,"line":33661},201,[103,33663,33664],{"class":113},"    plt.ylabel(",[103,33666,33667],{"class":218},"'loss'",[103,33669,120],{"class":113},[103,33671,33673],{"class":105,"line":33672},202,[103,33674,33675],{"class":172},"    # ②准确度图\n",[103,33677,33679,33681,33683,33685,33687,33689,33691],{"class":105,"line":33678},203,[103,33680,31717],{"class":113},[103,33682,331],{"class":162},[103,33684,491],{"class":113},[103,33686,191],{"class":162},[103,33688,491],{"class":113},[103,33690,191],{"class":162},[103,33692,120],{"class":113},[103,33694,33696,33698,33700,33703,33705,33707,33709,33711,33714],{"class":105,"line":33695},204,[103,33697,33584],{"class":113},[103,33699,33587],{"class":218},[103,33701,33702],{"class":113},"],train_process.train_acc_all,",[103,33704,33593],{"class":218},[103,33706,491],{"class":113},[103,33708,33598],{"class":5206},[103,33710,159],{"class":109},[103,33712,33713],{"class":218},"'train acc'",[103,33715,120],{"class":113},[103,33717,33719,33721,33723,33726,33728,33730,33732,33734,33737],{"class":105,"line":33718},205,[103,33720,33584],{"class":113},[103,33722,33587],{"class":218},[103,33724,33725],{"class":113},"],train_process.val_acc_all,",[103,33727,33618],{"class":218},[103,33729,491],{"class":113},[103,33731,33598],{"class":5206},[103,33733,159],{"class":109},[103,33735,33736],{"class":218},"'val acc'",[103,33738,120],{"class":113},[103,33740,33742],{"class":105,"line":33741},206,[103,33743,33744],{"class":172},"    # 添加图例\n",[103,33746,33748],{"class":105,"line":33747},207,[103,33749,33641],{"class":113},[103,33751,33753,33755,33757],{"class":105,"line":33752},208,[103,33754,33653],{"class":113},[103,33756,33587],{"class":218},[103,33758,120],{"class":113},[103,33760,33762,33764,33767],{"class":105,"line":33761},209,[103,33763,33664],{"class":113},[103,33765,33766],{"class":218},"\"acc\"",[103,33768,120],{"class":113},[103,33770,33772],{"class":105,"line":33771},210,[103,33773,33774],{"class":113},"    plt.show()\n",[103,33776,33778],{"class":105,"line":33777},211,[103,33779,2389],{"emptyLinePlaceholder":30},[103,33781,33783],{"class":105,"line":33782},212,[103,33784,33785],{"class":172},"# 正式开始训练:\n",[103,33787,33789,33791,33793,33795,33797],{"class":105,"line":33788},213,[103,33790,1520],{"class":109},[103,33792,31210],{"class":162},[103,33794,2938],{"class":109},[103,33796,31215],{"class":218},[103,33798,3728],{"class":113},[103,33800,33802],{"class":105,"line":33801},214,[103,33803,33804],{"class":172},"    # 将模型实例化\n",[103,33806,33808,33811,33813],{"class":105,"line":33807},215,[103,33809,33810],{"class":113},"    LeNet",[103,33812,159],{"class":109},[103,33814,33815],{"class":113},"LeNet()\n",[103,33817,33819,33822,33824],{"class":105,"line":33818},216,[103,33820,33821],{"class":113},"    train_dataloader,val_dataloader",[103,33823,159],{"class":109},[103,33825,33826],{"class":113},"train_val_data_process()\n",[103,33828,33830,33832,33834,33837,33840,33842,33844],{"class":105,"line":33829},217,[103,33831,33383],{"class":113},[103,33833,159],{"class":109},[103,33835,33836],{"class":113},"train_model_process(LeNet,train_dataloader,val_dataloader,",[103,33838,33839],{"class":5206},"num_epochs",[103,33841,159],{"class":109},[103,33843,813],{"class":162},[103,33845,120],{"class":113},[103,33847,33849],{"class":105,"line":33848},218,[103,33850,33851],{"class":113},"    matplot_acc_loss(train_process)\n",[14,33853,33854],{},"画图的补充点学习：",[14,33856,33857],{},[1451,33858],{"alt":24,"src":33859},"\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",[57,33861,33862],{"start":1168},[60,33863,33864],{},"测试",[94,33866,33868],{"className":30368,"code":33867,"language":30370,"meta":24,"style":24},"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",[100,33869,33870,33876,33886,33898,33908,33913,33923,33933,33937,33942,33951,33968,33980,33997,34008,34024,34029,34040,34051,34062,34069,34073,34078,34088,34093,34110,34118,34122,34127,34136,34145,34149,34154,34159,34164,34171,34176,34188,34198,34208,34213,34217,34222,34231,34236,34252,34257,34262,34267,34281,34286,34300,34304,34309,34324,34329,34341,34345,34350,34362,34367,34375,34380,34385,34395,34400,34409,34414,34419,34423,34428,34433,34449,34457,34462,34467,34526,34532,34537,34548,34556,34564,34568,34573,34577,34582,34590,34595,34611,34616,34626,34636],{"__ignoreMap":24},[103,33871,33872,33874],{"class":105,"line":106},[103,33873,30382],{"class":109},[103,33875,30385],{"class":113},[103,33877,33878,33880,33882,33884],{"class":105,"line":25},[103,33879,30382],{"class":109},[103,33881,31405],{"class":113},[103,33883,31373],{"class":109},[103,33885,31410],{"class":113},[103,33887,33888,33890,33893,33895],{"class":105,"line":1168},[103,33889,30727],{"class":109},[103,33891,33892],{"class":113}," jupyter_client.consoleapp ",[103,33894,30382],{"class":109},[103,33896,33897],{"class":113}," classes\n",[103,33899,33900,33902,33904,33906],{"class":105,"line":1183},[103,33901,30727],{"class":109},[103,33903,31388],{"class":113},[103,33905,30382],{"class":109},[103,33907,31393],{"class":113},[103,33909,33910],{"class":105,"line":1189},[103,33911,33912],{"class":172},"# 导入数据集\n",[103,33914,33915,33917,33919,33921],{"class":105,"line":1203},[103,33916,30727],{"class":109},[103,33918,31358],{"class":113},[103,33920,30382],{"class":109},[103,33922,31363],{"class":113},[103,33924,33925,33927,33929,33931],{"class":105,"line":1209},[103,33926,30727],{"class":109},[103,33928,31904],{"class":113},[103,33930,30382],{"class":109},[103,33932,31909],{"class":113},[103,33934,33935],{"class":105,"line":1300},[103,33936,2389],{"emptyLinePlaceholder":30},[103,33938,33939],{"class":105,"line":1306},[103,33940,33941],{"class":172},"# 测试数据处理\n",[103,33943,33944,33946,33949],{"class":105,"line":1318},[103,33945,31937],{"class":109},[103,33947,33948],{"class":1952}," test_data_process",[103,33950,31943],{"class":113},[103,33952,33953,33956,33958,33960,33962,33964,33966],{"class":105,"line":1601},[103,33954,33955],{"class":113},"    test_data",[103,33957,159],{"class":109},[103,33959,31445],{"class":113},[103,33961,31448],{"class":5206},[103,33963,159],{"class":109},[103,33965,31453],{"class":218},[103,33967,31456],{"class":113},[103,33969,33970,33973,33975,33978],{"class":105,"line":1606},[103,33971,33972],{"class":5206},"                           train",[103,33974,159],{"class":109},[103,33976,33977],{"class":162},"False",[103,33979,31456],{"class":113},[103,33981,33982,33985,33987,33989,33991,33993,33995],{"class":105,"line":1612},[103,33983,33984],{"class":5206},"                           transform",[103,33986,159],{"class":109},[103,33988,31483],{"class":113},[103,33990,31486],{"class":5206},[103,33992,159],{"class":109},[103,33994,1014],{"class":162},[103,33996,31494],{"class":113},[103,33998,33999,34002,34004,34006],{"class":105,"line":1617},[103,34000,34001],{"class":5206},"                           download",[103,34003,159],{"class":109},[103,34005,31466],{"class":162},[103,34007,120],{"class":113},[103,34009,34010,34013,34015,34017,34019,34021],{"class":105,"line":1631},[103,34011,34012],{"class":113},"    test_dataloader",[103,34014,159],{"class":109},[103,34016,31524],{"class":113},[103,34018,31527],{"class":5206},[103,34020,159],{"class":109},[103,34022,34023],{"class":113},"test_data,\n",[103,34025,34026],{"class":105,"line":1636},[103,34027,34028],{"class":172},"                                    # 这里是一张一张进行测试\n",[103,34030,34031,34034,34036,34038],{"class":105,"line":1642},[103,34032,34033],{"class":5206},"                                    batch_size",[103,34035,159],{"class":109},[103,34037,331],{"class":162},[103,34039,31456],{"class":113},[103,34041,34042,34045,34047,34049],{"class":105,"line":1663},[103,34043,34044],{"class":5206},"                                    shuffle",[103,34046,159],{"class":109},[103,34048,31466],{"class":162},[103,34050,31456],{"class":113},[103,34052,34053,34056,34058,34060],{"class":105,"line":1668},[103,34054,34055],{"class":5206},"                                    num_workers",[103,34057,159],{"class":109},[103,34059,305],{"class":162},[103,34061,120],{"class":113},[103,34063,34064,34066],{"class":105,"line":1682},[103,34065,4079],{"class":109},[103,34067,34068],{"class":113}," test_dataloader\n",[103,34070,34071],{"class":105,"line":1687},[103,34072,2389],{"emptyLinePlaceholder":30},[103,34074,34075],{"class":105,"line":1716},[103,34076,34077],{"class":172},"# 定义模型测试函数\n",[103,34079,34080,34082,34085],{"class":105,"line":1721},[103,34081,31937],{"class":109},[103,34083,34084],{"class":1952}," test_model_process",[103,34086,34087],{"class":113},"(model,test_dataloader):\n",[103,34089,34090],{"class":105,"line":1738},[103,34091,34092],{"class":172},"    # 将模型放到设备当中，先进行判断\n",[103,34094,34095,34097,34099,34101,34103,34105,34107],{"class":105,"line":1743},[103,34096,31227],{"class":113},[103,34098,159],{"class":109},[103,34100,31234],{"class":218},[103,34102,1693],{"class":109},[103,34104,31239],{"class":113},[103,34106,1690],{"class":109},[103,34108,34109],{"class":218}," \"cpu\"\n",[103,34111,34112,34114,34116],{"class":105,"line":1748},[103,34113,31279],{"class":113},[103,34115,159],{"class":109},[103,34117,32279],{"class":113},[103,34119,34120],{"class":105,"line":1753},[103,34121,2389],{"emptyLinePlaceholder":30},[103,34123,34124],{"class":105,"line":1767},[103,34125,34126],{"class":172},"    # 设置初始化参数\n",[103,34128,34129,34132,34134],{"class":105,"line":1772},[103,34130,34131],{"class":113},"    test_corrects",[103,34133,159],{"class":109},[103,34135,32332],{"class":162},[103,34137,34138,34141,34143],{"class":105,"line":2566},[103,34139,34140],{"class":113},"    test_num",[103,34142,159],{"class":109},[103,34144,3074],{"class":162},[103,34146,34147],{"class":105,"line":2580},[103,34148,2389],{"emptyLinePlaceholder":30},[103,34150,34151],{"class":105,"line":2588},[103,34152,34153],{"class":172},"    # 进行模型测试\n",[103,34155,34156],{"class":105,"line":2593},[103,34157,34158],{"class":172},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[103,34160,34161],{"class":105,"line":2599},[103,34162,34163],{"class":172},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[103,34165,34166,34169],{"class":105,"line":2605},[103,34167,34168],{"class":109},"    with",[103,34170,32874],{"class":113},[103,34172,34173],{"class":105,"line":2610},[103,34174,34175],{"class":172},"        # 从数据中进行\n",[103,34177,34178,34180,34183,34185],{"class":105,"line":7938},[103,34179,3392],{"class":109},[103,34181,34182],{"class":113}," test_data_x,test_data_y ",[103,34184,26033],{"class":109},[103,34186,34187],{"class":113}," test_dataloader:\n",[103,34189,34190,34193,34195],{"class":105,"line":7962},[103,34191,34192],{"class":113},"            test_data_x",[103,34194,159],{"class":109},[103,34196,34197],{"class":113},"test_data_x.to(device)\n",[103,34199,34200,34203,34205],{"class":105,"line":7967},[103,34201,34202],{"class":113},"            test_data_y",[103,34204,159],{"class":109},[103,34206,34207],{"class":113},"test_data_y.to(device)\n",[103,34209,34210],{"class":105,"line":7973},[103,34211,34212],{"class":172},"            # 设置为验证模式\n",[103,34214,34215],{"class":105,"line":8000},[103,34216,32865],{"class":113},[103,34218,34219],{"class":105,"line":8005},[103,34220,34221],{"class":172},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[103,34223,34224,34226,34228],{"class":105,"line":8011},[103,34225,32650],{"class":113},[103,34227,159],{"class":109},[103,34229,34230],{"class":113},"model(test_data_x)\n",[103,34232,34233],{"class":105,"line":8023},[103,34234,34235],{"class":172},"            # 查找每一行中最大值对应的下标\n",[103,34237,34238,34240,34242,34244,34246,34248,34250],{"class":105,"line":8035},[103,34239,32667],{"class":113},[103,34241,159],{"class":109},[103,34243,32672],{"class":113},[103,34245,32675],{"class":5206},[103,34247,159],{"class":109},[103,34249,331],{"class":162},[103,34251,120],{"class":113},[103,34253,34254],{"class":105,"line":8047},[103,34255,34256],{"class":172},"            # 计算正确率\n",[103,34258,34259],{"class":105,"line":9706},[103,34260,34261],{"class":172},"            # .data表示是一个不带梯度信息的tensor\n",[103,34263,34264],{"class":105,"line":9731},[103,34265,34266],{"class":172},"            # 如果预测正确，则准确度test_corrects加1\n",[103,34268,34269,34272,34274,34276,34278],{"class":105,"line":9754},[103,34270,34271],{"class":113},"            test_corrects",[103,34273,9467],{"class":109},[103,34275,32777],{"class":113},[103,34277,2938],{"class":109},[103,34279,34280],{"class":113},"test_data_y.data)\n",[103,34282,34283],{"class":105,"line":9778},[103,34284,34285],{"class":172},"            # 将所有的测试样本进行累计\n",[103,34287,34288,34291,34293,34296,34298],{"class":105,"line":9783},[103,34289,34290],{"class":113},"            test_num",[103,34292,9467],{"class":109},[103,34294,34295],{"class":113},"test_data_x.size(",[103,34297,305],{"class":162},[103,34299,120],{"class":113},[103,34301,34302],{"class":105,"line":9788},[103,34303,2389],{"emptyLinePlaceholder":30},[103,34305,34306],{"class":105,"line":9793},[103,34307,34308],{"class":172},"        # 计算准确度\n",[103,34310,34311,34314,34316,34319,34321],{"class":105,"line":9802},[103,34312,34313],{"class":113},"        test_acc",[103,34315,159],{"class":109},[103,34317,34318],{"class":113},"test_corrects.double().item()",[103,34320,697],{"class":109},[103,34322,34323],{"class":113},"test_num\n",[103,34325,34326],{"class":105,"line":9807},[103,34327,34328],{"class":172},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[103,34330,34331,34333,34335,34338],{"class":105,"line":9813},[103,34332,32441],{"class":162},[103,34334,114],{"class":113},[103,34336,34337],{"class":218},"\"测试的准确率：\"",[103,34339,34340],{"class":113},",test_acc)\n",[103,34342,34343],{"class":105,"line":9834},[103,34344,2389],{"emptyLinePlaceholder":30},[103,34346,34347],{"class":105,"line":9840},[103,34348,34349],{"class":172},"# 实现模型的测试功能\n",[103,34351,34352,34354,34356,34358,34360],{"class":105,"line":9854},[103,34353,1520],{"class":109},[103,34355,31210],{"class":162},[103,34357,2938],{"class":109},[103,34359,31215],{"class":218},[103,34361,3728],{"class":113},[103,34363,34364],{"class":105,"line":9860},[103,34365,34366],{"class":172},"    # 加载模型\n",[103,34368,34369,34371,34373],{"class":105,"line":9887},[103,34370,31279],{"class":113},[103,34372,159],{"class":109},[103,34374,33815],{"class":113},[103,34376,34377],{"class":105,"line":9896},[103,34378,34379],{"class":172},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[103,34381,34382],{"class":105,"line":9902},[103,34383,34384],{"class":172},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[103,34386,34387,34390,34393],{"class":105,"line":9910},[103,34388,34389],{"class":113},"    model.load_state_dict(torch.load(",[103,34391,34392],{"class":218},"'best_model.pth'",[103,34394,30487],{"class":113},[103,34396,34397],{"class":105,"line":9915},[103,34398,34399],{"class":172},"    # 数据加载\n",[103,34401,34402,34404,34406],{"class":105,"line":16594},[103,34403,34012],{"class":113},[103,34405,159],{"class":109},[103,34407,34408],{"class":113},"test_data_process()\n",[103,34410,34411],{"class":105,"line":16600},[103,34412,34413],{"class":172},"    # 加载模型测试的函数\n",[103,34415,34416],{"class":105,"line":16623},[103,34417,34418],{"class":113},"    test_model_process(model,test_dataloader)\n",[103,34420,34421],{"class":105,"line":16629},[103,34422,2389],{"emptyLinePlaceholder":30},[103,34424,34425],{"class":105,"line":16652},[103,34426,34427],{"class":172},"    # 验证集推理实现：\n",[103,34429,34430],{"class":105,"line":16666},[103,34431,34432],{"class":172},"    # 加载数据加载的更详细一些\n",[103,34434,34435,34437,34439,34441,34443,34445,34447],{"class":105,"line":16686},[103,34436,31227],{"class":113},[103,34438,159],{"class":109},[103,34440,31234],{"class":218},[103,34442,1693],{"class":109},[103,34444,31239],{"class":113},[103,34446,1690],{"class":109},[103,34448,34109],{"class":218},[103,34450,34451,34453,34455],{"class":105,"line":16692},[103,34452,31279],{"class":113},[103,34454,159],{"class":109},[103,34456,32279],{"class":113},[103,34458,34459],{"class":105,"line":16703},[103,34460,34461],{"class":172},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[103,34463,34464],{"class":105,"line":16726},[103,34465,34466],{"class":172},"    # 顺序不可改变\n",[103,34468,34469,34472,34474,34476,34479,34481,34484,34486,34489,34491,34494,34496,34499,34501,34504,34506,34509,34511,34514,34516,34519,34521,34524],{"class":105,"line":16748},[103,34470,34471],{"class":113},"    classes",[103,34473,159],{"class":109},[103,34475,1003],{"class":113},[103,34477,34478],{"class":218},"'T-shirt\u002Ftop'",[103,34480,491],{"class":113},[103,34482,34483],{"class":218},"'Trouser'",[103,34485,491],{"class":113},[103,34487,34488],{"class":218},"'Pullover'",[103,34490,491],{"class":113},[103,34492,34493],{"class":218},"'Dress'",[103,34495,491],{"class":113},[103,34497,34498],{"class":218},"'Coat'",[103,34500,491],{"class":113},[103,34502,34503],{"class":218},"'Sandal'",[103,34505,491],{"class":113},[103,34507,34508],{"class":218},"'Shirt'",[103,34510,491],{"class":113},[103,34512,34513],{"class":218},"'Sneaker'",[103,34515,491],{"class":113},[103,34517,34518],{"class":218},"'Bag'",[103,34520,491],{"class":113},[103,34522,34523],{"class":218},"'Ankle boot'",[103,34525,33236],{"class":113},[103,34527,34528,34530],{"class":105,"line":16753},[103,34529,34168],{"class":109},[103,34531,32874],{"class":113},[103,34533,34534],{"class":105,"line":16759},[103,34535,34536],{"class":172},"        # 将数据和标签都放到设备当中\n",[103,34538,34539,34541,34544,34546],{"class":105,"line":16773},[103,34540,3392],{"class":109},[103,34542,34543],{"class":113}," b_x,b_y ",[103,34545,26033],{"class":109},[103,34547,34187],{"class":113},[103,34549,34550,34552,34554],{"class":105,"line":16786},[103,34551,32600],{"class":113},[103,34553,159],{"class":109},[103,34555,32605],{"class":113},[103,34557,34558,34560,34562],{"class":105,"line":16791},[103,34559,32615],{"class":113},[103,34561,159],{"class":109},[103,34563,32620],{"class":113},[103,34565,34566],{"class":105,"line":16805},[103,34567,2389],{"emptyLinePlaceholder":30},[103,34569,34570],{"class":105,"line":16810},[103,34571,34572],{"class":172},"            # 设置模型为验证模式\n",[103,34574,34575],{"class":105,"line":16816},[103,34576,32865],{"class":113},[103,34578,34579],{"class":105,"line":16821},[103,34580,34581],{"class":172},"            # 模型推理结果\n",[103,34583,34584,34586,34588],{"class":105,"line":16835},[103,34585,32650],{"class":113},[103,34587,159],{"class":109},[103,34589,32655],{"class":113},[103,34591,34592],{"class":105,"line":16840},[103,34593,34594],{"class":172},"            # 获取最大下标，最大下标就是类别号\n",[103,34596,34597,34599,34601,34603,34605,34607,34609],{"class":105,"line":16845},[103,34598,32667],{"class":113},[103,34600,159],{"class":109},[103,34602,32672],{"class":113},[103,34604,32675],{"class":5206},[103,34606,159],{"class":109},[103,34608,331],{"class":162},[103,34610,120],{"class":113},[103,34612,34613],{"class":105,"line":16859},[103,34614,34615],{"class":172},"            # 取出张量中的数值\n",[103,34617,34618,34621,34623],{"class":105,"line":16871},[103,34619,34620],{"class":113},"            result",[103,34622,159],{"class":109},[103,34624,34625],{"class":113},"pre_lab.item()\n",[103,34627,34628,34631,34633],{"class":105,"line":16876},[103,34629,34630],{"class":113},"            label",[103,34632,159],{"class":109},[103,34634,34635],{"class":113},"b_y.item()\n",[103,34637,34638,34641,34643,34646,34649,34652,34654,34657],{"class":105,"line":16889},[103,34639,34640],{"class":162},"            print",[103,34642,114],{"class":113},[103,34644,34645],{"class":218},"\"预测值：\"",[103,34647,34648],{"class":113},",classes[result],",[103,34650,34651],{"class":218},"\"------\"",[103,34653,491],{"class":113},[103,34655,34656],{"class":218},"\"真实值：\"",[103,34658,34659],{"class":113},",classes[label])\n",[14,34661,34662],{},"（2）AlexNet",[57,34664,34665],{},[60,34666,34667],{},"神经网络构建",[94,34669,34671],{"className":30368,"code":34670,"language":30370,"meta":24,"style":24},"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",[100,34672,34673,34679,34689,34699,34711,34715,34732,34740,34755,34767,34809,34836,34879,34905,34949,34992,35035,35062,35066,35076,35081,35109,35128,35147,35151,35156,35164,35179,35189,35203,35213,35228,35243,35258,35269,35273,35278,35288,35303,35308,35322,35337,35349,35354,35365,35370,35376,35381,35393,35413,35418,35427],{"__ignoreMap":24},[103,34674,34675,34677],{"class":105,"line":106},[103,34676,30382],{"class":109},[103,34678,30385],{"class":113},[103,34680,34681,34683,34685,34687],{"class":105,"line":25},[103,34682,30727],{"class":109},[103,34684,30730],{"class":113},[103,34686,30382],{"class":109},[103,34688,30735],{"class":113},[103,34690,34691,34693,34695,34697],{"class":105,"line":1168},[103,34692,30727],{"class":109},[103,34694,30747],{"class":113},[103,34696,30382],{"class":109},[103,34698,30752],{"class":113},[103,34700,34701,34703,34706,34708],{"class":105,"line":1183},[103,34702,30382],{"class":109},[103,34704,34705],{"class":113}," torch.nn.functional ",[103,34707,31373],{"class":109},[103,34709,34710],{"class":113}," F\n",[103,34712,34713],{"class":105,"line":1189},[103,34714,2389],{"emptyLinePlaceholder":30},[103,34716,34717,34719,34722,34724,34726,34728,34730],{"class":105,"line":1203},[103,34718,14684],{"class":109},[103,34720,34721],{"class":1952}," AlexNet",[103,34723,114],{"class":113},[103,34725,30768],{"class":1952},[103,34727,671],{"class":113},[103,34729,30773],{"class":1952},[103,34731,30776],{"class":113},[103,34733,34734,34736,34738],{"class":105,"line":1209},[103,34735,30791],{"class":109},[103,34737,30794],{"class":162},[103,34739,30797],{"class":113},[103,34741,34742,34744,34747,34749,34751,34753],{"class":105,"line":1300},[103,34743,30807],{"class":162},[103,34745,34746],{"class":113},"(AlexNet,",[103,34748,30813],{"class":162},[103,34750,30816],{"class":113},[103,34752,30819],{"class":162},[103,34754,1965],{"class":113},[103,34756,34757,34759,34762,34764],{"class":105,"line":1306},[103,34758,30835],{"class":162},[103,34760,34761],{"class":113},".ReLu",[103,34763,159],{"class":109},[103,34765,34766],{"class":113},"nn.ReLU()\n",[103,34768,34769,34771,34773,34775,34777,34779,34781,34783,34785,34787,34789,34791,34793,34795,34797,34799,34801,34803,34805,34807],{"class":105,"line":1318},[103,34770,30835],{"class":162},[103,34772,30838],{"class":113},[103,34774,159],{"class":109},[103,34776,30843],{"class":113},[103,34778,30846],{"class":5206},[103,34780,159],{"class":109},[103,34782,331],{"class":162},[103,34784,491],{"class":113},[103,34786,30855],{"class":5206},[103,34788,159],{"class":109},[103,34790,323],{"class":162},[103,34792,491],{"class":113},[103,34794,30864],{"class":5206},[103,34796,159],{"class":109},[103,34798,585],{"class":162},[103,34800,491],{"class":113},[103,34802,30919],{"class":5206},[103,34804,159],{"class":109},[103,34806,406],{"class":162},[103,34808,120],{"class":113},[103,34810,34811,34813,34815,34817,34820,34822,34824,34826,34828,34830,34832,34834],{"class":105,"line":1601},[103,34812,30835],{"class":162},[103,34814,30903],{"class":113},[103,34816,159],{"class":109},[103,34818,34819],{"class":113},"nn.MaxPool2d(",[103,34821,30864],{"class":5206},[103,34823,159],{"class":109},[103,34825,185],{"class":162},[103,34827,491],{"class":113},[103,34829,30919],{"class":5206},[103,34831,159],{"class":109},[103,34833,191],{"class":162},[103,34835,120],{"class":113},[103,34837,34838,34840,34842,34844,34846,34848,34850,34852,34854,34856,34858,34861,34863,34865,34867,34869,34871,34873,34875,34877],{"class":105,"line":1606},[103,34839,30835],{"class":162},[103,34841,30932],{"class":113},[103,34843,159],{"class":109},[103,34845,30843],{"class":113},[103,34847,30846],{"class":5206},[103,34849,159],{"class":109},[103,34851,323],{"class":162},[103,34853,491],{"class":113},[103,34855,30855],{"class":5206},[103,34857,159],{"class":109},[103,34859,34860],{"class":162},"256",[103,34862,491],{"class":113},[103,34864,30864],{"class":5206},[103,34866,159],{"class":109},[103,34868,432],{"class":162},[103,34870,491],{"class":113},[103,34872,30873],{"class":5206},[103,34874,159],{"class":109},[103,34876,191],{"class":162},[103,34878,120],{"class":113},[103,34880,34881,34883,34885,34887,34889,34891,34893,34895,34897,34899,34901,34903],{"class":105,"line":1612},[103,34882,30835],{"class":162},[103,34884,30967],{"class":113},[103,34886,159],{"class":109},[103,34888,34819],{"class":113},[103,34890,30864],{"class":5206},[103,34892,159],{"class":109},[103,34894,185],{"class":162},[103,34896,491],{"class":113},[103,34898,30919],{"class":5206},[103,34900,159],{"class":109},[103,34902,191],{"class":162},[103,34904,120],{"class":113},[103,34906,34907,34909,34912,34914,34916,34918,34920,34922,34924,34926,34928,34931,34933,34935,34937,34939,34941,34943,34945,34947],{"class":105,"line":1617},[103,34908,30835],{"class":162},[103,34910,34911],{"class":113},".c5",[103,34913,159],{"class":109},[103,34915,30843],{"class":113},[103,34917,30846],{"class":5206},[103,34919,159],{"class":109},[103,34921,34860],{"class":162},[103,34923,491],{"class":113},[103,34925,30855],{"class":5206},[103,34927,159],{"class":109},[103,34929,34930],{"class":162},"384",[103,34932,491],{"class":113},[103,34934,30864],{"class":5206},[103,34936,159],{"class":109},[103,34938,185],{"class":162},[103,34940,491],{"class":113},[103,34942,30873],{"class":5206},[103,34944,159],{"class":109},[103,34946,331],{"class":162},[103,34948,120],{"class":113},[103,34950,34951,34953,34956,34958,34960,34962,34964,34966,34968,34970,34972,34974,34976,34978,34980,34982,34984,34986,34988,34990],{"class":105,"line":1631},[103,34952,30835],{"class":162},[103,34954,34955],{"class":113},".c6",[103,34957,159],{"class":109},[103,34959,30843],{"class":113},[103,34961,30846],{"class":5206},[103,34963,159],{"class":109},[103,34965,34930],{"class":162},[103,34967,491],{"class":113},[103,34969,30855],{"class":5206},[103,34971,159],{"class":109},[103,34973,34930],{"class":162},[103,34975,491],{"class":113},[103,34977,30864],{"class":5206},[103,34979,159],{"class":109},[103,34981,185],{"class":162},[103,34983,491],{"class":113},[103,34985,30873],{"class":5206},[103,34987,159],{"class":109},[103,34989,331],{"class":162},[103,34991,120],{"class":113},[103,34993,34994,34996,34999,35001,35003,35005,35007,35009,35011,35013,35015,35017,35019,35021,35023,35025,35027,35029,35031,35033],{"class":105,"line":1636},[103,34995,30835],{"class":162},[103,34997,34998],{"class":113},".c7",[103,35000,159],{"class":109},[103,35002,30843],{"class":113},[103,35004,30846],{"class":5206},[103,35006,159],{"class":109},[103,35008,34930],{"class":162},[103,35010,491],{"class":113},[103,35012,30855],{"class":5206},[103,35014,159],{"class":109},[103,35016,34860],{"class":162},[103,35018,491],{"class":113},[103,35020,30864],{"class":5206},[103,35022,159],{"class":109},[103,35024,185],{"class":162},[103,35026,491],{"class":113},[103,35028,30873],{"class":5206},[103,35030,159],{"class":109},[103,35032,331],{"class":162},[103,35034,120],{"class":113},[103,35036,35037,35039,35042,35044,35046,35048,35050,35052,35054,35056,35058,35060],{"class":105,"line":1642},[103,35038,30835],{"class":162},[103,35040,35041],{"class":113},".s8",[103,35043,159],{"class":109},[103,35045,34819],{"class":113},[103,35047,30864],{"class":5206},[103,35049,159],{"class":109},[103,35051,185],{"class":162},[103,35053,491],{"class":113},[103,35055,30919],{"class":5206},[103,35057,159],{"class":109},[103,35059,191],{"class":162},[103,35061,120],{"class":113},[103,35063,35064],{"class":105,"line":1663},[103,35065,30992],{"class":172},[103,35067,35068,35070,35072,35074],{"class":105,"line":1668},[103,35069,30835],{"class":162},[103,35071,30999],{"class":113},[103,35073,159],{"class":109},[103,35075,31004],{"class":113},[103,35077,35078],{"class":105,"line":1682},[103,35079,35080],{"class":172},"       # 定义全连接层\n",[103,35082,35083,35085,35088,35090,35092,35094,35096,35098,35100,35102,35104,35107],{"class":105,"line":1687},[103,35084,30835],{"class":162},[103,35086,35087],{"class":113},".f1",[103,35089,159],{"class":109},[103,35091,31021],{"class":113},[103,35093,457],{"class":162},[103,35095,568],{"class":109},[103,35097,457],{"class":162},[103,35099,568],{"class":109},[103,35101,34860],{"class":162},[103,35103,491],{"class":113},[103,35105,35106],{"class":162},"4096",[103,35108,120],{"class":113},[103,35110,35111,35113,35116,35118,35120,35122,35124,35126],{"class":105,"line":1716},[103,35112,30835],{"class":162},[103,35114,35115],{"class":113},".f2",[103,35117,159],{"class":109},[103,35119,31021],{"class":113},[103,35121,35106],{"class":162},[103,35123,491],{"class":113},[103,35125,35106],{"class":162},[103,35127,120],{"class":113},[103,35129,35130,35132,35135,35137,35139,35141,35143,35145],{"class":105,"line":1721},[103,35131,30835],{"class":162},[103,35133,35134],{"class":113},".f3",[103,35136,159],{"class":109},[103,35138,31021],{"class":113},[103,35140,35106],{"class":162},[103,35142,491],{"class":113},[103,35144,559],{"class":162},[103,35146,120],{"class":113},[103,35148,35149],{"class":105,"line":1738},[103,35150,2389],{"emptyLinePlaceholder":30},[103,35152,35153],{"class":105,"line":1743},[103,35154,35155],{"class":172},"    # 定义前向传播\n",[103,35157,35158,35160,35162],{"class":105,"line":1748},[103,35159,30791],{"class":109},[103,35161,31083],{"class":1952},[103,35163,31086],{"class":113},[103,35165,35166,35168,35170,35172,35175,35177],{"class":105,"line":1753},[103,35167,31091],{"class":113},[103,35169,159],{"class":109},[103,35171,30813],{"class":162},[103,35173,35174],{"class":113},".ReLu(",[103,35176,30813],{"class":162},[103,35178,31103],{"class":113},[103,35180,35181,35183,35185,35187],{"class":105,"line":1767},[103,35182,31091],{"class":113},[103,35184,159],{"class":109},[103,35186,30813],{"class":162},[103,35188,31114],{"class":113},[103,35190,35191,35193,35195,35197,35199,35201],{"class":105,"line":1772},[103,35192,31091],{"class":113},[103,35194,159],{"class":109},[103,35196,30813],{"class":162},[103,35198,35174],{"class":113},[103,35200,30813],{"class":162},[103,35202,31129],{"class":113},[103,35204,35205,35207,35209,35211],{"class":105,"line":2566},[103,35206,31091],{"class":113},[103,35208,159],{"class":109},[103,35210,30813],{"class":162},[103,35212,31140],{"class":113},[103,35214,35215,35217,35219,35221,35223,35225],{"class":105,"line":2580},[103,35216,31091],{"class":113},[103,35218,159],{"class":109},[103,35220,30813],{"class":162},[103,35222,35174],{"class":113},[103,35224,30813],{"class":162},[103,35226,35227],{"class":113},".c5(x))\n",[103,35229,35230,35232,35234,35236,35238,35240],{"class":105,"line":2588},[103,35231,31091],{"class":113},[103,35233,159],{"class":109},[103,35235,30813],{"class":162},[103,35237,35174],{"class":113},[103,35239,30813],{"class":162},[103,35241,35242],{"class":113},".c6(x))\n",[103,35244,35245,35247,35249,35251,35253,35255],{"class":105,"line":2593},[103,35246,31091],{"class":113},[103,35248,159],{"class":109},[103,35250,30813],{"class":162},[103,35252,35174],{"class":113},[103,35254,30813],{"class":162},[103,35256,35257],{"class":113},".c7(x))\n",[103,35259,35260,35262,35264,35266],{"class":105,"line":2599},[103,35261,31091],{"class":113},[103,35263,159],{"class":109},[103,35265,30813],{"class":162},[103,35267,35268],{"class":113},".s8(x)\n",[103,35270,35271],{"class":105,"line":2605},[103,35272,2389],{"emptyLinePlaceholder":30},[103,35274,35275],{"class":105,"line":2610},[103,35276,35277],{"class":172},"        # 展平加线性全连接层\n",[103,35279,35280,35282,35284,35286],{"class":105,"line":7938},[103,35281,31091],{"class":113},[103,35283,159],{"class":109},[103,35285,30813],{"class":162},[103,35287,31151],{"class":113},[103,35289,35290,35292,35294,35296,35298,35300],{"class":105,"line":7962},[103,35291,31091],{"class":113},[103,35293,159],{"class":109},[103,35295,30813],{"class":162},[103,35297,35174],{"class":113},[103,35299,30813],{"class":162},[103,35301,35302],{"class":113},".f1(x))\n",[103,35304,35305],{"class":105,"line":7967},[103,35306,35307],{"class":172},"        # 还需要dropout对神经元随机进行失活\n",[103,35309,35310,35312,35314,35317,35320],{"class":105,"line":7973},[103,35311,31091],{"class":113},[103,35313,159],{"class":109},[103,35315,35316],{"class":113},"F.dropout(x,",[103,35318,35319],{"class":162},"0.5",[103,35321,120],{"class":113},[103,35323,35324,35326,35328,35330,35332,35334],{"class":105,"line":8000},[103,35325,31091],{"class":113},[103,35327,159],{"class":109},[103,35329,30813],{"class":162},[103,35331,35174],{"class":113},[103,35333,30813],{"class":162},[103,35335,35336],{"class":113},".f2(x))\n",[103,35338,35339,35341,35343,35345,35347],{"class":105,"line":8005},[103,35340,31091],{"class":113},[103,35342,159],{"class":109},[103,35344,35316],{"class":113},[103,35346,35319],{"class":162},[103,35348,120],{"class":113},[103,35350,35351],{"class":105,"line":8011},[103,35352,35353],{"class":172},"        # 直接输出\n",[103,35355,35356,35358,35360,35362],{"class":105,"line":8023},[103,35357,31091],{"class":113},[103,35359,159],{"class":109},[103,35361,30813],{"class":162},[103,35363,35364],{"class":113},".f3(x)\n",[103,35366,35367],{"class":105,"line":8035},[103,35368,35369],{"class":172},"        # 前向传播输出\n",[103,35371,35372,35374],{"class":105,"line":8047},[103,35373,14742],{"class":109},[103,35375,31199],{"class":113},[103,35377,35378],{"class":105,"line":9706},[103,35379,35380],{"class":172},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[103,35382,35383,35385,35387,35389,35391],{"class":105,"line":9731},[103,35384,1520],{"class":109},[103,35386,31210],{"class":162},[103,35388,2938],{"class":109},[103,35390,31215],{"class":218},[103,35392,3728],{"class":113},[103,35394,35395,35397,35399,35401,35403,35405,35407,35409,35411],{"class":105,"line":9754},[103,35396,31227],{"class":113},[103,35398,159],{"class":109},[103,35400,30441],{"class":113},[103,35402,31234],{"class":218},[103,35404,1693],{"class":109},[103,35406,31239],{"class":113},[103,35408,1690],{"class":109},[103,35410,30466],{"class":218},[103,35412,120],{"class":113},[103,35414,35415],{"class":105,"line":9778},[103,35416,35417],{"class":172},"    # 模型实例化，然后将实例化的模型放到设备中\n",[103,35419,35420,35422,35424],{"class":105,"line":9783},[103,35421,31279],{"class":113},[103,35423,159],{"class":109},[103,35425,35426],{"class":113},"AlexNet().to(device)\n",[103,35428,35429,35431,35433,35435,35437,35440,35442,35444],{"class":105,"line":9788},[103,35430,31289],{"class":162},[103,35432,31292],{"class":113},[103,35434,331],{"class":162},[103,35436,491],{"class":113},[103,35438,35439],{"class":162},"227",[103,35441,491],{"class":113},[103,35443,35439],{"class":162},[103,35445,31305],{"class":113},[57,35447,35448],{"start":25},[60,35449,31318],{},[94,35451,35453],{"className":30368,"code":35452,"language":30370,"meta":24,"style":24},"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",[100,35454,35455,35461,35467,35477,35483,35493,35503,35513,35523,35533,35537,35548,35558,35562,35566,35570,35578,35590,35600,35616,35626,35658,35672,35682,35692,35696,35706,35720,35730,35740,35750,35756,35760,35764,35768,35772,35776,35784,35804,35808,35812,35816,35820,35824,35840,35844,35848,35856,35860,35864,35872,35876,35880,35884,35892,35896,35900,35904,35908,35916,35920,35928,35932,35940,35944,35952,35956,35964,35968,35972,35980,35984,35988,35992,36004,36028,36042,36046,36050,36054,36062,36066,36074,36078,36086,36090,36098,36102,36110,36114,36122,36126,36138,36142,36150,36154,36162,36166,36170,36174,36178,36186,36190,36206,36210,36218,36222,36226,36230,36234,36238,36242,36246,36262,36266,36278,36282,36294,36298,36310,36314,36322,36326,36334,36338,36342,36347,36353,36357,36366,36370,36387,36391,36400,36404,36422,36435,36440,36453,36457,36461,36469,36473,36477,36485,36489,36497,36501,36509,36513,36517,36559,36601,36605,36609,36625,36629,36645,36649,36653,36661,36665,36669,36681,36719,36724,36729,36738,36742,36756,36766,36772,36778,36784,36790,36794,36798,36804,36808,36812,36820,36824,36842,36846,36850,36854,36870,36874,36878,36882,36886,36890,36910,36930,36934,36938,36942,36950,36958,36962,36978,36998,37018,37022,37026,37034,37042,37046,37050,37054,37066,37070,37080,37088,37105],{"__ignoreMap":24},[103,35456,35457,35459],{"class":105,"line":106},[103,35458,30382],{"class":109},[103,35460,31812],{"class":113},[103,35462,35463,35465],{"class":105,"line":25},[103,35464,30382],{"class":109},[103,35466,31819],{"class":113},[103,35468,35469,35471,35473,35475],{"class":105,"line":1168},[103,35470,30382],{"class":109},[103,35472,31830],{"class":113},[103,35474,31373],{"class":109},[103,35476,31835],{"class":113},[103,35478,35479,35481],{"class":105,"line":1183},[103,35480,30382],{"class":109},[103,35482,30385],{"class":113},[103,35484,35485,35487,35489,35491],{"class":105,"line":1189},[103,35486,30727],{"class":109},[103,35488,31405],{"class":113},[103,35490,30382],{"class":109},[103,35492,31852],{"class":113},[103,35494,35495,35497,35499,35501],{"class":105,"line":1203},[103,35496,30727],{"class":109},[103,35498,31358],{"class":113},[103,35500,30382],{"class":109},[103,35502,31363],{"class":113},[103,35504,35505,35507,35509,35511],{"class":105,"line":1209},[103,35506,30727],{"class":109},[103,35508,31388],{"class":113},[103,35510,30382],{"class":109},[103,35512,31393],{"class":113},[103,35514,35515,35517,35519,35521],{"class":105,"line":1300},[103,35516,30382],{"class":109},[103,35518,31405],{"class":113},[103,35520,31373],{"class":109},[103,35522,31410],{"class":113},[103,35524,35525,35527,35529,35531],{"class":105,"line":1306},[103,35526,30382],{"class":109},[103,35528,31422],{"class":113},[103,35530,31373],{"class":109},[103,35532,31427],{"class":113},[103,35534,35535],{"class":105,"line":1318},[103,35536,31897],{"class":172},[103,35538,35539,35541,35543,35545],{"class":105,"line":1601},[103,35540,30727],{"class":109},[103,35542,31904],{"class":113},[103,35544,30382],{"class":109},[103,35546,35547],{"class":113}," AlexNet\n",[103,35549,35550,35552,35554,35556],{"class":105,"line":1606},[103,35551,30727],{"class":109},[103,35553,30730],{"class":113},[103,35555,30382],{"class":109},[103,35557,30735],{"class":113},[103,35559,35560],{"class":105,"line":1612},[103,35561,2389],{"emptyLinePlaceholder":30},[103,35563,35564],{"class":105,"line":1617},[103,35565,2389],{"emptyLinePlaceholder":30},[103,35567,35568],{"class":105,"line":1631},[103,35569,31932],{"class":172},[103,35571,35572,35574,35576],{"class":105,"line":1636},[103,35573,31937],{"class":109},[103,35575,31940],{"class":1952},[103,35577,31943],{"class":113},[103,35579,35580,35582,35584,35586,35588],{"class":105,"line":1642},[103,35581,31948],{"class":113},[103,35583,159],{"class":109},[103,35585,31445],{"class":113},[103,35587,31453],{"class":218},[103,35589,31456],{"class":113},[103,35591,35592,35594,35596,35598],{"class":105,"line":1663},[103,35593,31961],{"class":5206},[103,35595,159],{"class":109},[103,35597,31466],{"class":162},[103,35599,31456],{"class":113},[103,35601,35602,35604,35606,35608,35610,35612,35614],{"class":105,"line":1668},[103,35603,31972],{"class":5206},[103,35605,159],{"class":109},[103,35607,31483],{"class":113},[103,35609,31486],{"class":5206},[103,35611,159],{"class":109},[103,35613,35439],{"class":162},[103,35615,31494],{"class":113},[103,35617,35618,35620,35622,35624],{"class":105,"line":1682},[103,35619,31989],{"class":5206},[103,35621,159],{"class":109},[103,35623,31466],{"class":162},[103,35625,120],{"class":113},[103,35627,35628,35630,35632,35634,35636,35638,35640,35642,35644,35646,35648,35650,35652,35654,35656],{"class":105,"line":1687},[103,35629,32000],{"class":113},[103,35631,159],{"class":109},[103,35633,32005],{"class":113},[103,35635,32008],{"class":162},[103,35637,114],{"class":113},[103,35639,32013],{"class":162},[103,35641,568],{"class":109},[103,35643,7348],{"class":162},[103,35645,32020],{"class":113},[103,35647,32008],{"class":162},[103,35649,114],{"class":113},[103,35651,32027],{"class":162},[103,35653,568],{"class":109},[103,35655,7348],{"class":162},[103,35657,32034],{"class":113},[103,35659,35660,35662,35664,35666,35668,35670],{"class":105,"line":1716},[103,35661,32039],{"class":113},[103,35663,159],{"class":109},[103,35665,32044],{"class":113},[103,35667,31527],{"class":5206},[103,35669,159],{"class":109},[103,35671,31532],{"class":113},[103,35673,35674,35676,35678,35680],{"class":105,"line":1721},[103,35675,32055],{"class":5206},[103,35677,159],{"class":109},[103,35679,32060],{"class":162},[103,35681,31456],{"class":113},[103,35683,35684,35686,35688,35690],{"class":105,"line":1738},[103,35685,32067],{"class":5206},[103,35687,159],{"class":109},[103,35689,31466],{"class":162},[103,35691,31456],{"class":113},[103,35693,35694],{"class":105,"line":1743},[103,35695,32078],{"class":172},[103,35697,35698,35700,35702,35704],{"class":105,"line":1748},[103,35699,32083],{"class":5206},[103,35701,159],{"class":109},[103,35703,508],{"class":162},[103,35705,120],{"class":113},[103,35707,35708,35710,35712,35714,35716,35718],{"class":105,"line":1753},[103,35709,32094],{"class":113},[103,35711,159],{"class":109},[103,35713,31524],{"class":113},[103,35715,31527],{"class":5206},[103,35717,159],{"class":109},[103,35719,32105],{"class":113},[103,35721,35722,35724,35726,35728],{"class":105,"line":1767},[103,35723,32110],{"class":5206},[103,35725,159],{"class":109},[103,35727,32060],{"class":162},[103,35729,31456],{"class":113},[103,35731,35732,35734,35736,35738],{"class":105,"line":1772},[103,35733,32121],{"class":5206},[103,35735,159],{"class":109},[103,35737,31466],{"class":162},[103,35739,31456],{"class":113},[103,35741,35742,35744,35746,35748],{"class":105,"line":2566},[103,35743,32132],{"class":5206},[103,35745,159],{"class":109},[103,35747,508],{"class":162},[103,35749,120],{"class":113},[103,35751,35752,35754],{"class":105,"line":2580},[103,35753,4079],{"class":109},[103,35755,32145],{"class":113},[103,35757,35758],{"class":105,"line":2588},[103,35759,2389],{"emptyLinePlaceholder":30},[103,35761,35762],{"class":105,"line":2593},[103,35763,32154],{"class":172},[103,35765,35766],{"class":105,"line":2599},[103,35767,32159],{"class":172},[103,35769,35770],{"class":105,"line":2605},[103,35771,2389],{"emptyLinePlaceholder":30},[103,35773,35774],{"class":105,"line":2610},[103,35775,32168],{"class":172},[103,35777,35778,35780,35782],{"class":105,"line":7938},[103,35779,31937],{"class":109},[103,35781,32175],{"class":1952},[103,35783,32178],{"class":113},[103,35785,35786,35788,35790,35792,35794,35796,35798,35800,35802],{"class":105,"line":7962},[103,35787,31227],{"class":113},[103,35789,159],{"class":109},[103,35791,30441],{"class":113},[103,35793,31234],{"class":218},[103,35795,1693],{"class":109},[103,35797,31239],{"class":113},[103,35799,1690],{"class":109},[103,35801,32197],{"class":218},[103,35803,120],{"class":113},[103,35805,35806],{"class":105,"line":7967},[103,35807,2389],{"emptyLinePlaceholder":30},[103,35809,35810],{"class":105,"line":7973},[103,35811,2389],{"emptyLinePlaceholder":30},[103,35813,35814],{"class":105,"line":8000},[103,35815,32212],{"class":172},[103,35817,35818],{"class":105,"line":8005},[103,35819,32217],{"class":172},[103,35821,35822],{"class":105,"line":8011},[103,35823,32222],{"class":172},[103,35825,35826,35828,35830,35832,35834,35836,35838],{"class":105,"line":8023},[103,35827,32227],{"class":113},[103,35829,159],{"class":109},[103,35831,32232],{"class":113},[103,35833,32235],{"class":5206},[103,35835,159],{"class":109},[103,35837,32240],{"class":162},[103,35839,120],{"class":113},[103,35841,35842],{"class":105,"line":8035},[103,35843,2389],{"emptyLinePlaceholder":30},[103,35845,35846],{"class":105,"line":8047},[103,35847,32251],{"class":172},[103,35849,35850,35852,35854],{"class":105,"line":9706},[103,35851,32256],{"class":113},[103,35853,159],{"class":109},[103,35855,32261],{"class":113},[103,35857,35858],{"class":105,"line":9731},[103,35859,2389],{"emptyLinePlaceholder":30},[103,35861,35862],{"class":105,"line":9754},[103,35863,32270],{"class":172},[103,35865,35866,35868,35870],{"class":105,"line":9778},[103,35867,31279],{"class":113},[103,35869,159],{"class":109},[103,35871,32279],{"class":113},[103,35873,35874],{"class":105,"line":9783},[103,35875,32284],{"class":172},[103,35877,35878],{"class":105,"line":9788},[103,35879,32289],{"class":172},[103,35881,35882],{"class":105,"line":9793},[103,35883,32294],{"class":172},[103,35885,35886,35888,35890],{"class":105,"line":9802},[103,35887,32299],{"class":113},[103,35889,159],{"class":109},[103,35891,32304],{"class":113},[103,35893,35894],{"class":105,"line":9807},[103,35895,2389],{"emptyLinePlaceholder":30},[103,35897,35898],{"class":105,"line":9813},[103,35899,2389],{"emptyLinePlaceholder":30},[103,35901,35902],{"class":105,"line":9834},[103,35903,32317],{"class":172},[103,35905,35906],{"class":105,"line":9840},[103,35907,32322],{"class":172},[103,35909,35910,35912,35914],{"class":105,"line":9854},[103,35911,32327],{"class":113},[103,35913,159],{"class":109},[103,35915,32332],{"class":162},[103,35917,35918],{"class":105,"line":9860},[103,35919,32337],{"class":172},[103,35921,35922,35924,35926],{"class":105,"line":9887},[103,35923,32342],{"class":113},[103,35925,159],{"class":109},[103,35927,32347],{"class":113},[103,35929,35930],{"class":105,"line":9896},[103,35931,32352],{"class":172},[103,35933,35934,35936,35938],{"class":105,"line":9902},[103,35935,32357],{"class":113},[103,35937,159],{"class":109},[103,35939,32347],{"class":113},[103,35941,35942],{"class":105,"line":9910},[103,35943,32366],{"class":172},[103,35945,35946,35948,35950],{"class":105,"line":9915},[103,35947,32371],{"class":113},[103,35949,159],{"class":109},[103,35951,32347],{"class":113},[103,35953,35954],{"class":105,"line":16594},[103,35955,32380],{"class":172},[103,35957,35958,35960,35962],{"class":105,"line":16600},[103,35959,32385],{"class":113},[103,35961,159],{"class":109},[103,35963,32347],{"class":113},[103,35965,35966],{"class":105,"line":16623},[103,35967,2389],{"emptyLinePlaceholder":30},[103,35969,35970],{"class":105,"line":16629},[103,35971,32398],{"class":172},[103,35973,35974,35976,35978],{"class":105,"line":16652},[103,35975,32403],{"class":113},[103,35977,159],{"class":109},[103,35979,32408],{"class":113},[103,35981,35982],{"class":105,"line":16666},[103,35983,2389],{"emptyLinePlaceholder":30},[103,35985,35986],{"class":105,"line":16686},[103,35987,2389],{"emptyLinePlaceholder":30},[103,35989,35990],{"class":105,"line":16692},[103,35991,32421],{"class":172},[103,35993,35994,35996,35998,36000,36002],{"class":105,"line":16703},[103,35995,3190],{"class":109},[103,35997,32428],{"class":113},[103,35999,26033],{"class":109},[103,36001,32433],{"class":162},[103,36003,32436],{"class":113},[103,36005,36006,36008,36010,36012,36014,36016,36018,36020,36022,36024,36026],{"class":105,"line":16726},[103,36007,32441],{"class":162},[103,36009,114],{"class":113},[103,36011,32446],{"class":218},[103,36013,32449],{"class":162},[103,36015,697],{"class":218},[103,36017,32449],{"class":162},[103,36019,364],{"class":218},[103,36021,32458],{"class":113},[103,36023,645],{"class":109},[103,36025,331],{"class":162},[103,36027,30487],{"class":113},[103,36029,36030,36032,36034,36036,36038,36040],{"class":105,"line":16748},[103,36031,32441],{"class":162},[103,36033,114],{"class":113},[103,36035,32473],{"class":218},[103,36037,568],{"class":109},[103,36039,559],{"class":162},[103,36041,120],{"class":113},[103,36043,36044],{"class":105,"line":16753},[103,36045,2389],{"emptyLinePlaceholder":30},[103,36047,36048],{"class":105,"line":16759},[103,36049,32488],{"class":172},[103,36051,36052],{"class":105,"line":16773},[103,36053,32493],{"class":172},[103,36055,36056,36058,36060],{"class":105,"line":16786},[103,36057,32498],{"class":113},[103,36059,159],{"class":109},[103,36061,32332],{"class":162},[103,36063,36064],{"class":105,"line":16791},[103,36065,32507],{"class":172},[103,36067,36068,36070,36072],{"class":105,"line":16805},[103,36069,32512],{"class":113},[103,36071,159],{"class":109},[103,36073,3074],{"class":162},[103,36075,36076],{"class":105,"line":16810},[103,36077,32521],{"class":172},[103,36079,36080,36082,36084],{"class":105,"line":16816},[103,36081,32526],{"class":113},[103,36083,159],{"class":109},[103,36085,32332],{"class":162},[103,36087,36088],{"class":105,"line":16821},[103,36089,32535],{"class":172},[103,36091,36092,36094,36096],{"class":105,"line":16835},[103,36093,32540],{"class":113},[103,36095,159],{"class":109},[103,36097,3074],{"class":162},[103,36099,36100],{"class":105,"line":16840},[103,36101,32549],{"class":172},[103,36103,36104,36106,36108],{"class":105,"line":16845},[103,36105,32554],{"class":113},[103,36107,159],{"class":109},[103,36109,3074],{"class":162},[103,36111,36112],{"class":105,"line":16859},[103,36113,32563],{"class":172},[103,36115,36116,36118,36120],{"class":105,"line":16871},[103,36117,32568],{"class":113},[103,36119,159],{"class":109},[103,36121,3074],{"class":162},[103,36123,36124],{"class":105,"line":16876},[103,36125,32577],{"class":172},[103,36127,36128,36130,36132,36134,36136],{"class":105,"line":16889},[103,36129,3392],{"class":109},[103,36131,31591],{"class":113},[103,36133,26033],{"class":109},[103,36135,31596],{"class":162},[103,36137,32590],{"class":113},[103,36139,36140],{"class":105,"line":16894},[103,36141,32595],{"class":172},[103,36143,36144,36146,36148],{"class":105,"line":16899},[103,36145,32600],{"class":113},[103,36147,159],{"class":109},[103,36149,32605],{"class":113},[103,36151,36152],{"class":105,"line":16904},[103,36153,32610],{"class":172},[103,36155,36156,36158,36160],{"class":105,"line":16917},[103,36157,32615],{"class":113},[103,36159,159],{"class":109},[103,36161,32620],{"class":113},[103,36163,36164],{"class":105,"line":16922},[103,36165,32626],{"class":172},[103,36167,36168],{"class":105,"line":32623},[103,36169,32632],{"class":113},[103,36171,36172],{"class":105,"line":32629},[103,36173,32638],{"class":172},[103,36175,36176],{"class":105,"line":32635},[103,36177,32644],{"class":172},[103,36179,36180,36182,36184],{"class":105,"line":32641},[103,36181,32650],{"class":113},[103,36183,159],{"class":109},[103,36185,32655],{"class":113},[103,36187,36188],{"class":105,"line":32647},[103,36189,32661],{"class":172},[103,36191,36192,36194,36196,36198,36200,36202,36204],{"class":105,"line":32658},[103,36193,32667],{"class":113},[103,36195,159],{"class":109},[103,36197,32672],{"class":113},[103,36199,32675],{"class":5206},[103,36201,159],{"class":109},[103,36203,331],{"class":162},[103,36205,120],{"class":113},[103,36207,36208],{"class":105,"line":32664},[103,36209,32687],{"class":172},[103,36211,36212,36214,36216],{"class":105,"line":32684},[103,36213,32693],{"class":113},[103,36215,159],{"class":109},[103,36217,32698],{"class":113},[103,36219,36220],{"class":105,"line":32690},[103,36221,32704],{"class":172},[103,36223,36224],{"class":105,"line":32701},[103,36225,32710],{"class":113},[103,36227,36228],{"class":105,"line":32707},[103,36229,32716],{"class":172},[103,36231,36232],{"class":105,"line":32713},[103,36233,32722],{"class":113},[103,36235,36236],{"class":105,"line":32719},[103,36237,32728],{"class":172},[103,36239,36240],{"class":105,"line":32725},[103,36241,32734],{"class":113},[103,36243,36244],{"class":105,"line":32731},[103,36245,32740],{"class":172},[103,36247,36248,36250,36252,36254,36256,36258,36260],{"class":105,"line":32737},[103,36249,32746],{"class":113},[103,36251,9467],{"class":109},[103,36253,32751],{"class":113},[103,36255,568],{"class":109},[103,36257,32756],{"class":113},[103,36259,305],{"class":162},[103,36261,120],{"class":113},[103,36263,36264],{"class":105,"line":32743},[103,36265,32766],{"class":172},[103,36267,36268,36270,36272,36274,36276],{"class":105,"line":32763},[103,36269,32772],{"class":113},[103,36271,9467],{"class":109},[103,36273,32777],{"class":113},[103,36275,2938],{"class":109},[103,36277,32782],{"class":113},[103,36279,36280],{"class":105,"line":32769},[103,36281,32788],{"class":172},[103,36283,36284,36286,36288,36290,36292],{"class":105,"line":32785},[103,36285,32794],{"class":113},[103,36287,9467],{"class":109},[103,36289,32756],{"class":113},[103,36291,305],{"class":162},[103,36293,120],{"class":113},[103,36295,36296],{"class":105,"line":32791},[103,36297,32808],{"class":172},[103,36299,36300,36302,36304,36306,36308],{"class":105,"line":32805},[103,36301,3392],{"class":109},[103,36303,32816],{"class":113},[103,36305,26033],{"class":109},[103,36307,31596],{"class":162},[103,36309,32823],{"class":113},[103,36311,36312],{"class":105,"line":32811},[103,36313,32829],{"class":172},[103,36315,36316,36318,36320],{"class":105,"line":32826},[103,36317,32600],{"class":113},[103,36319,159],{"class":109},[103,36321,32605],{"class":113},[103,36323,36324],{"class":105,"line":32832},[103,36325,32844],{"class":172},[103,36327,36328,36330,36332],{"class":105,"line":32841},[103,36329,32615],{"class":113},[103,36331,159],{"class":109},[103,36333,32620],{"class":113},[103,36335,36336],{"class":105,"line":32847},[103,36337,32859],{"class":172},[103,36339,36340],{"class":105,"line":32856},[103,36341,32865],{"class":113},[103,36343,36344],{"class":105,"line":32862},[103,36345,36346],{"class":172},"            # 验证时不计算梯度以节省内存\u002F计算\n",[103,36348,36349,36351],{"class":105,"line":32868},[103,36350,32871],{"class":109},[103,36352,32874],{"class":113},[103,36354,36355],{"class":105,"line":32877},[103,36356,32880],{"class":172},[103,36358,36359,36362,36364],{"class":105,"line":32883},[103,36360,36361],{"class":113},"                output",[103,36363,159],{"class":109},[103,36365,32655],{"class":113},[103,36367,36368],{"class":105,"line":32894},[103,36369,32897],{"class":172},[103,36371,36372,36375,36377,36379,36381,36383,36385],{"class":105,"line":32900},[103,36373,36374],{"class":113},"                pre_lab",[103,36376,159],{"class":109},[103,36378,32672],{"class":113},[103,36380,32675],{"class":5206},[103,36382,159],{"class":109},[103,36384,331],{"class":162},[103,36386,120],{"class":113},[103,36388,36389],{"class":105,"line":32919},[103,36390,32922],{"class":172},[103,36392,36393,36396,36398],{"class":105,"line":32925},[103,36394,36395],{"class":113},"                val_batch_loss",[103,36397,159],{"class":109},[103,36399,32698],{"class":113},[103,36401,36402],{"class":105,"line":32936},[103,36403,32939],{"class":172},[103,36405,36406,36409,36411,36414,36416,36418,36420],{"class":105,"line":32942},[103,36407,36408],{"class":113},"                val_loss",[103,36410,9467],{"class":109},[103,36412,36413],{"class":113},"val_batch_loss.item()",[103,36415,568],{"class":109},[103,36417,32756],{"class":113},[103,36419,305],{"class":162},[103,36421,120],{"class":113},[103,36423,36424,36427,36429,36431,36433],{"class":105,"line":32962},[103,36425,36426],{"class":113},"                val_corrects",[103,36428,9467],{"class":109},[103,36430,32777],{"class":113},[103,36432,2938],{"class":109},[103,36434,32782],{"class":113},[103,36436,36437],{"class":105,"line":32978},[103,36438,36439],{"class":172},"            # 当前用于验证的样本数量\n",[103,36441,36442,36445,36447,36449,36451],{"class":105,"line":32984},[103,36443,36444],{"class":113},"            val_num",[103,36446,9467],{"class":109},[103,36448,32756],{"class":113},[103,36450,305],{"class":162},[103,36452,120],{"class":113},[103,36454,36455],{"class":105,"line":32998},[103,36456,33001],{"class":172},[103,36458,36459],{"class":105,"line":33004},[103,36460,33007],{"class":172},[103,36462,36463,36465,36467],{"class":105,"line":33010},[103,36464,33013],{"class":113},[103,36466,697],{"class":109},[103,36468,33018],{"class":113},[103,36470,36471],{"class":105,"line":33021},[103,36472,33024],{"class":172},[103,36474,36475],{"class":105,"line":33027},[103,36476,33030],{"class":172},[103,36478,36479,36481,36483],{"class":105,"line":33033},[103,36480,33036],{"class":113},[103,36482,697],{"class":109},[103,36484,33018],{"class":113},[103,36486,36487],{"class":105,"line":33043},[103,36488,33046],{"class":172},[103,36490,36491,36493,36495],{"class":105,"line":33049},[103,36492,33052],{"class":113},[103,36494,697],{"class":109},[103,36496,33057],{"class":113},[103,36498,36499],{"class":105,"line":33060},[103,36500,33063],{"class":172},[103,36502,36503,36505,36507],{"class":105,"line":33066},[103,36504,33069],{"class":113},[103,36506,697],{"class":109},[103,36508,33057],{"class":113},[103,36510,36511],{"class":105,"line":33076},[103,36512,2389],{"emptyLinePlaceholder":30},[103,36514,36515],{"class":105,"line":33081},[103,36516,33084],{"class":172},[103,36518,36519,36521,36523,36525,36527,36529,36531,36533,36535,36537,36539,36541,36543,36545,36547,36549,36551,36553,36555,36557],{"class":105,"line":33087},[103,36520,32441],{"class":162},[103,36522,114],{"class":113},[103,36524,3581],{"class":218},[103,36526,32449],{"class":162},[103,36528,33098],{"class":218},[103,36530,1009],{"class":162},[103,36532,33103],{"class":109},[103,36534,1059],{"class":162},[103,36536,33108],{"class":218},[103,36538,1009],{"class":162},[103,36540,33103],{"class":109},[103,36542,1059],{"class":162},[103,36544,3581],{"class":218},[103,36546,33119],{"class":113},[103,36548,645],{"class":109},[103,36550,331],{"class":162},[103,36552,33126],{"class":113},[103,36554,645],{"class":109},[103,36556,331],{"class":162},[103,36558,33133],{"class":113},[103,36560,36561,36563,36565,36567,36569,36571,36573,36575,36577,36579,36581,36583,36585,36587,36589,36591,36593,36595,36597,36599],{"class":105,"line":33136},[103,36562,32441],{"class":162},[103,36564,114],{"class":113},[103,36566,3581],{"class":218},[103,36568,32449],{"class":162},[103,36570,33147],{"class":218},[103,36572,1009],{"class":162},[103,36574,33103],{"class":109},[103,36576,1059],{"class":162},[103,36578,33156],{"class":218},[103,36580,1009],{"class":162},[103,36582,33103],{"class":109},[103,36584,1059],{"class":162},[103,36586,3581],{"class":218},[103,36588,33167],{"class":113},[103,36590,645],{"class":109},[103,36592,331],{"class":162},[103,36594,33174],{"class":113},[103,36596,645],{"class":109},[103,36598,331],{"class":162},[103,36600,33133],{"class":113},[103,36602,36603],{"class":105,"line":33183},[103,36604,2389],{"emptyLinePlaceholder":30},[103,36606,36607],{"class":105,"line":33188},[103,36608,33191],{"class":172},[103,36610,36611,36613,36615,36617,36619,36621,36623],{"class":105,"line":33194},[103,36612,2486],{"class":109},[103,36614,33199],{"class":113},[103,36616,645],{"class":109},[103,36618,331],{"class":162},[103,36620,1053],{"class":113},[103,36622,1073],{"class":109},[103,36624,33210],{"class":113},[103,36626,36627],{"class":105,"line":33213},[103,36628,33216],{"class":172},[103,36630,36631,36633,36635,36637,36639,36641,36643],{"class":105,"line":33219},[103,36632,33222],{"class":113},[103,36634,153],{"class":162},[103,36636,159],{"class":109},[103,36638,33229],{"class":113},[103,36640,645],{"class":109},[103,36642,331],{"class":162},[103,36644,33236],{"class":113},[103,36646,36647],{"class":105,"line":33239},[103,36648,33242],{"class":172},[103,36650,36651],{"class":105,"line":33245},[103,36652,33248],{"class":172},[103,36654,36655,36657,36659],{"class":105,"line":33251},[103,36656,33254],{"class":113},[103,36658,159],{"class":109},[103,36660,32304],{"class":113},[103,36662,36663],{"class":105,"line":33261},[103,36664,2389],{"emptyLinePlaceholder":30},[103,36666,36667],{"class":105,"line":33266},[103,36668,33269],{"class":172},[103,36670,36671,36673,36675,36677,36679],{"class":105,"line":33272},[103,36672,33275],{"class":113},[103,36674,159],{"class":109},[103,36676,33280],{"class":113},[103,36678,645],{"class":109},[103,36680,33285],{"class":113},[103,36682,36683,36685,36687,36689,36691,36693,36695,36697,36699,36701,36703,36705,36707,36709,36711,36713,36715,36717],{"class":105,"line":33288},[103,36684,32441],{"class":162},[103,36686,114],{"class":113},[103,36688,33295],{"class":218},[103,36690,1009],{"class":162},[103,36692,33300],{"class":109},[103,36694,1059],{"class":162},[103,36696,657],{"class":218},[103,36698,1009],{"class":162},[103,36700,33300],{"class":109},[103,36702,1059],{"class":162},[103,36704,33313],{"class":218},[103,36706,33316],{"class":113},[103,36708,33319],{"class":109},[103,36710,1020],{"class":162},[103,36712,33324],{"class":113},[103,36714,441],{"class":109},[103,36716,1020],{"class":162},[103,36718,30487],{"class":113},[103,36720,36721],{"class":105,"line":33333},[103,36722,36723],{"class":172},"    # 选择最优参数并保存\n",[103,36725,36726],{"class":105,"line":33339},[103,36727,36728],{"class":172},"    # 保存最佳模型权重字典\n",[103,36730,36731,36734,36736],{"class":105,"line":33345},[103,36732,36733],{"class":113},"    torch.save(best_model_wts,",[103,36735,33357],{"class":218},[103,36737,120],{"class":113},[103,36739,36740],{"class":105,"line":33351},[103,36741,33377],{"class":172},[103,36743,36744,36746,36748,36750,36752,36754],{"class":105,"line":33362},[103,36745,33383],{"class":113},[103,36747,159],{"class":109},[103,36749,33388],{"class":113},[103,36751,33391],{"class":5206},[103,36753,159],{"class":109},[103,36755,1535],{"class":113},[103,36757,36758,36760,36762,36764],{"class":105,"line":33368},[103,36759,33401],{"class":218},[103,36761,972],{"class":113},[103,36763,33406],{"class":162},[103,36765,33409],{"class":113},[103,36767,36768,36770],{"class":105,"line":33374},[103,36769,33415],{"class":218},[103,36771,33418],{"class":113},[103,36773,36774,36776],{"class":105,"line":33380},[103,36775,33424],{"class":218},[103,36777,33427],{"class":113},[103,36779,36780,36782],{"class":105,"line":33398},[103,36781,33433],{"class":218},[103,36783,33436],{"class":113},[103,36785,36786,36788],{"class":105,"line":33412},[103,36787,33442],{"class":218},[103,36789,33445],{"class":113},[103,36791,36792],{"class":105,"line":33421},[103,36793,33451],{"class":113},[103,36795,36796],{"class":105,"line":33430},[103,36797,33457],{"class":172},[103,36799,36800,36802],{"class":105,"line":33439},[103,36801,4079],{"class":109},[103,36803,33465],{"class":113},[103,36805,36806],{"class":105,"line":33448},[103,36807,2389],{"emptyLinePlaceholder":30},[103,36809,36810],{"class":105,"line":33454},[103,36811,33476],{"class":172},[103,36813,36814,36816,36818],{"class":105,"line":33460},[103,36815,31937],{"class":109},[103,36817,33484],{"class":1952},[103,36819,33487],{"class":113},[103,36821,36822],{"class":105,"line":33468},[103,36823,33493],{"class":172},[103,36825,36826,36828,36830,36832,36834,36836,36838,36840],{"class":105,"line":33473},[103,36827,33499],{"class":113},[103,36829,31683],{"class":5206},[103,36831,159],{"class":109},[103,36833,114],{"class":113},[103,36835,611],{"class":162},[103,36837,491],{"class":113},[103,36839,406],{"class":162},[103,36841,30487],{"class":113},[103,36843,36844],{"class":105,"line":33479},[103,36845,33519],{"class":172},[103,36847,36848],{"class":105,"line":33490},[103,36849,33525],{"class":172},[103,36851,36852],{"class":105,"line":33496},[103,36853,33531],{"class":172},[103,36855,36856,36858,36860,36862,36864,36866,36868],{"class":105,"line":33516},[103,36857,31717],{"class":113},[103,36859,331],{"class":162},[103,36861,491],{"class":113},[103,36863,191],{"class":162},[103,36865,491],{"class":113},[103,36867,331],{"class":162},[103,36869,120],{"class":113},[103,36871,36872],{"class":105,"line":33522},[103,36873,33554],{"class":172},[103,36875,36876],{"class":105,"line":33528},[103,36877,33560],{"class":172},[103,36879,36880],{"class":105,"line":33534},[103,36881,33566],{"class":172},[103,36883,36884],{"class":105,"line":33551},[103,36885,33572],{"class":172},[103,36887,36888],{"class":105,"line":33557},[103,36889,33578],{"class":172},[103,36891,36892,36894,36896,36898,36900,36902,36904,36906,36908],{"class":105,"line":33563},[103,36893,33584],{"class":113},[103,36895,33587],{"class":218},[103,36897,33590],{"class":113},[103,36899,33593],{"class":218},[103,36901,491],{"class":113},[103,36903,33598],{"class":5206},[103,36905,159],{"class":109},[103,36907,33603],{"class":218},[103,36909,120],{"class":113},[103,36911,36912,36914,36916,36918,36920,36922,36924,36926,36928],{"class":105,"line":33569},[103,36913,33584],{"class":113},[103,36915,33587],{"class":218},[103,36917,33615],{"class":113},[103,36919,33618],{"class":218},[103,36921,491],{"class":113},[103,36923,33598],{"class":5206},[103,36925,159],{"class":109},[103,36927,33627],{"class":218},[103,36929,120],{"class":113},[103,36931,36932],{"class":105,"line":33575},[103,36933,33635],{"class":172},[103,36935,36936],{"class":105,"line":33581},[103,36937,33641],{"class":113},[103,36939,36940],{"class":105,"line":33608},[103,36941,33647],{"class":172},[103,36943,36944,36946,36948],{"class":105,"line":33632},[103,36945,33653],{"class":113},[103,36947,33656],{"class":218},[103,36949,120],{"class":113},[103,36951,36952,36954,36956],{"class":105,"line":33638},[103,36953,33664],{"class":113},[103,36955,33667],{"class":218},[103,36957,120],{"class":113},[103,36959,36960],{"class":105,"line":33644},[103,36961,33675],{"class":172},[103,36963,36964,36966,36968,36970,36972,36974,36976],{"class":105,"line":33650},[103,36965,31717],{"class":113},[103,36967,331],{"class":162},[103,36969,491],{"class":113},[103,36971,191],{"class":162},[103,36973,491],{"class":113},[103,36975,191],{"class":162},[103,36977,120],{"class":113},[103,36979,36980,36982,36984,36986,36988,36990,36992,36994,36996],{"class":105,"line":33661},[103,36981,33584],{"class":113},[103,36983,33587],{"class":218},[103,36985,33702],{"class":113},[103,36987,33593],{"class":218},[103,36989,491],{"class":113},[103,36991,33598],{"class":5206},[103,36993,159],{"class":109},[103,36995,33713],{"class":218},[103,36997,120],{"class":113},[103,36999,37000,37002,37004,37006,37008,37010,37012,37014,37016],{"class":105,"line":33672},[103,37001,33584],{"class":113},[103,37003,33587],{"class":218},[103,37005,33725],{"class":113},[103,37007,33618],{"class":218},[103,37009,491],{"class":113},[103,37011,33598],{"class":5206},[103,37013,159],{"class":109},[103,37015,33736],{"class":218},[103,37017,120],{"class":113},[103,37019,37020],{"class":105,"line":33678},[103,37021,33744],{"class":172},[103,37023,37024],{"class":105,"line":33695},[103,37025,33641],{"class":113},[103,37027,37028,37030,37032],{"class":105,"line":33718},[103,37029,33653],{"class":113},[103,37031,33587],{"class":218},[103,37033,120],{"class":113},[103,37035,37036,37038,37040],{"class":105,"line":33741},[103,37037,33664],{"class":113},[103,37039,33766],{"class":218},[103,37041,120],{"class":113},[103,37043,37044],{"class":105,"line":33747},[103,37045,33774],{"class":113},[103,37047,37048],{"class":105,"line":33752},[103,37049,2389],{"emptyLinePlaceholder":30},[103,37051,37052],{"class":105,"line":33761},[103,37053,33785],{"class":172},[103,37055,37056,37058,37060,37062,37064],{"class":105,"line":33771},[103,37057,1520],{"class":109},[103,37059,31210],{"class":162},[103,37061,2938],{"class":109},[103,37063,31215],{"class":218},[103,37065,3728],{"class":113},[103,37067,37068],{"class":105,"line":33777},[103,37069,33804],{"class":172},[103,37071,37072,37075,37077],{"class":105,"line":33782},[103,37073,37074],{"class":113},"    AlexNet",[103,37076,159],{"class":109},[103,37078,37079],{"class":113},"AlexNet()\n",[103,37081,37082,37084,37086],{"class":105,"line":33788},[103,37083,33821],{"class":113},[103,37085,159],{"class":109},[103,37087,33826],{"class":113},[103,37089,37090,37092,37094,37097,37099,37101,37103],{"class":105,"line":33801},[103,37091,33383],{"class":113},[103,37093,159],{"class":109},[103,37095,37096],{"class":113},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[103,37098,33839],{"class":5206},[103,37100,159],{"class":109},[103,37102,813],{"class":162},[103,37104,120],{"class":113},[103,37106,37107],{"class":105,"line":33807},[103,37108,33851],{"class":113},[57,37110,37111],{"start":1168},[60,37112,33864],{},[94,37114,37116],{"className":30368,"code":37115,"language":30370,"meta":24,"style":24},"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",[100,37117,37118,37124,37134,37144,37154,37158,37168,37178,37189,37193,37197,37201,37209,37225,37235,37251,37261,37275,37279,37289,37299,37309,37315,37319,37323,37331,37335,37351,37359,37363,37367,37375,37383,37387,37391,37395,37399,37405,37409,37419,37427,37435,37439,37443,37447,37455,37459,37475,37479,37483,37487,37499,37503,37515,37519,37523,37535,37539,37549,37553,37557,37569,37573,37581,37585,37589,37597,37601,37609,37613,37617,37621,37625,37629,37645,37653,37657,37661,37709,37715,37719,37729,37737,37745,37749,37753,37757,37761,37769,37773,37789,37793,37801,37809],{"__ignoreMap":24},[103,37119,37120,37122],{"class":105,"line":106},[103,37121,30382],{"class":109},[103,37123,30385],{"class":113},[103,37125,37126,37128,37130,37132],{"class":105,"line":25},[103,37127,30382],{"class":109},[103,37129,31405],{"class":113},[103,37131,31373],{"class":109},[103,37133,31410],{"class":113},[103,37135,37136,37138,37140,37142],{"class":105,"line":1168},[103,37137,30727],{"class":109},[103,37139,33892],{"class":113},[103,37141,30382],{"class":109},[103,37143,33897],{"class":113},[103,37145,37146,37148,37150,37152],{"class":105,"line":1183},[103,37147,30727],{"class":109},[103,37149,31388],{"class":113},[103,37151,30382],{"class":109},[103,37153,31393],{"class":113},[103,37155,37156],{"class":105,"line":1189},[103,37157,33912],{"class":172},[103,37159,37160,37162,37164,37166],{"class":105,"line":1203},[103,37161,30727],{"class":109},[103,37163,31358],{"class":113},[103,37165,30382],{"class":109},[103,37167,31363],{"class":113},[103,37169,37170,37172,37174,37176],{"class":105,"line":1209},[103,37171,30727],{"class":109},[103,37173,31904],{"class":113},[103,37175,30382],{"class":109},[103,37177,35547],{"class":113},[103,37179,37180,37182,37185,37187],{"class":105,"line":1300},[103,37181,30727],{"class":109},[103,37183,37184],{"class":113}," 练习.AlexNet.model ",[103,37186,30382],{"class":109},[103,37188,35547],{"class":113},[103,37190,37191],{"class":105,"line":1306},[103,37192,2389],{"emptyLinePlaceholder":30},[103,37194,37195],{"class":105,"line":1318},[103,37196,2389],{"emptyLinePlaceholder":30},[103,37198,37199],{"class":105,"line":1601},[103,37200,33941],{"class":172},[103,37202,37203,37205,37207],{"class":105,"line":1606},[103,37204,31937],{"class":109},[103,37206,33948],{"class":1952},[103,37208,31943],{"class":113},[103,37210,37211,37213,37215,37217,37219,37221,37223],{"class":105,"line":1612},[103,37212,33955],{"class":113},[103,37214,159],{"class":109},[103,37216,31445],{"class":113},[103,37218,31448],{"class":5206},[103,37220,159],{"class":109},[103,37222,31453],{"class":218},[103,37224,31456],{"class":113},[103,37226,37227,37229,37231,37233],{"class":105,"line":1617},[103,37228,33972],{"class":5206},[103,37230,159],{"class":109},[103,37232,33977],{"class":162},[103,37234,31456],{"class":113},[103,37236,37237,37239,37241,37243,37245,37247,37249],{"class":105,"line":1631},[103,37238,33984],{"class":5206},[103,37240,159],{"class":109},[103,37242,31483],{"class":113},[103,37244,31486],{"class":5206},[103,37246,159],{"class":109},[103,37248,35439],{"class":162},[103,37250,31494],{"class":113},[103,37252,37253,37255,37257,37259],{"class":105,"line":1636},[103,37254,34001],{"class":5206},[103,37256,159],{"class":109},[103,37258,31466],{"class":162},[103,37260,120],{"class":113},[103,37262,37263,37265,37267,37269,37271,37273],{"class":105,"line":1642},[103,37264,34012],{"class":113},[103,37266,159],{"class":109},[103,37268,31524],{"class":113},[103,37270,31527],{"class":5206},[103,37272,159],{"class":109},[103,37274,34023],{"class":113},[103,37276,37277],{"class":105,"line":1663},[103,37278,34028],{"class":172},[103,37280,37281,37283,37285,37287],{"class":105,"line":1668},[103,37282,34033],{"class":5206},[103,37284,159],{"class":109},[103,37286,331],{"class":162},[103,37288,31456],{"class":113},[103,37290,37291,37293,37295,37297],{"class":105,"line":1682},[103,37292,34044],{"class":5206},[103,37294,159],{"class":109},[103,37296,31466],{"class":162},[103,37298,31456],{"class":113},[103,37300,37301,37303,37305,37307],{"class":105,"line":1687},[103,37302,34055],{"class":5206},[103,37304,159],{"class":109},[103,37306,305],{"class":162},[103,37308,120],{"class":113},[103,37310,37311,37313],{"class":105,"line":1716},[103,37312,4079],{"class":109},[103,37314,34068],{"class":113},[103,37316,37317],{"class":105,"line":1721},[103,37318,2389],{"emptyLinePlaceholder":30},[103,37320,37321],{"class":105,"line":1738},[103,37322,34077],{"class":172},[103,37324,37325,37327,37329],{"class":105,"line":1743},[103,37326,31937],{"class":109},[103,37328,34084],{"class":1952},[103,37330,34087],{"class":113},[103,37332,37333],{"class":105,"line":1748},[103,37334,34092],{"class":172},[103,37336,37337,37339,37341,37343,37345,37347,37349],{"class":105,"line":1753},[103,37338,31227],{"class":113},[103,37340,159],{"class":109},[103,37342,31234],{"class":218},[103,37344,1693],{"class":109},[103,37346,31239],{"class":113},[103,37348,1690],{"class":109},[103,37350,34109],{"class":218},[103,37352,37353,37355,37357],{"class":105,"line":1767},[103,37354,31279],{"class":113},[103,37356,159],{"class":109},[103,37358,32279],{"class":113},[103,37360,37361],{"class":105,"line":1772},[103,37362,2389],{"emptyLinePlaceholder":30},[103,37364,37365],{"class":105,"line":2566},[103,37366,34126],{"class":172},[103,37368,37369,37371,37373],{"class":105,"line":2580},[103,37370,34131],{"class":113},[103,37372,159],{"class":109},[103,37374,32332],{"class":162},[103,37376,37377,37379,37381],{"class":105,"line":2588},[103,37378,34140],{"class":113},[103,37380,159],{"class":109},[103,37382,3074],{"class":162},[103,37384,37385],{"class":105,"line":2593},[103,37386,2389],{"emptyLinePlaceholder":30},[103,37388,37389],{"class":105,"line":2599},[103,37390,34153],{"class":172},[103,37392,37393],{"class":105,"line":2605},[103,37394,34158],{"class":172},[103,37396,37397],{"class":105,"line":2610},[103,37398,34163],{"class":172},[103,37400,37401,37403],{"class":105,"line":7938},[103,37402,34168],{"class":109},[103,37404,32874],{"class":113},[103,37406,37407],{"class":105,"line":7962},[103,37408,34175],{"class":172},[103,37410,37411,37413,37415,37417],{"class":105,"line":7967},[103,37412,3392],{"class":109},[103,37414,34182],{"class":113},[103,37416,26033],{"class":109},[103,37418,34187],{"class":113},[103,37420,37421,37423,37425],{"class":105,"line":7973},[103,37422,34192],{"class":113},[103,37424,159],{"class":109},[103,37426,34197],{"class":113},[103,37428,37429,37431,37433],{"class":105,"line":8000},[103,37430,34202],{"class":113},[103,37432,159],{"class":109},[103,37434,34207],{"class":113},[103,37436,37437],{"class":105,"line":8005},[103,37438,34212],{"class":172},[103,37440,37441],{"class":105,"line":8011},[103,37442,32865],{"class":113},[103,37444,37445],{"class":105,"line":8023},[103,37446,34221],{"class":172},[103,37448,37449,37451,37453],{"class":105,"line":8035},[103,37450,32650],{"class":113},[103,37452,159],{"class":109},[103,37454,34230],{"class":113},[103,37456,37457],{"class":105,"line":8047},[103,37458,34235],{"class":172},[103,37460,37461,37463,37465,37467,37469,37471,37473],{"class":105,"line":9706},[103,37462,32667],{"class":113},[103,37464,159],{"class":109},[103,37466,32672],{"class":113},[103,37468,32675],{"class":5206},[103,37470,159],{"class":109},[103,37472,331],{"class":162},[103,37474,120],{"class":113},[103,37476,37477],{"class":105,"line":9731},[103,37478,34256],{"class":172},[103,37480,37481],{"class":105,"line":9754},[103,37482,34261],{"class":172},[103,37484,37485],{"class":105,"line":9778},[103,37486,34266],{"class":172},[103,37488,37489,37491,37493,37495,37497],{"class":105,"line":9783},[103,37490,34271],{"class":113},[103,37492,9467],{"class":109},[103,37494,32777],{"class":113},[103,37496,2938],{"class":109},[103,37498,34280],{"class":113},[103,37500,37501],{"class":105,"line":9788},[103,37502,34285],{"class":172},[103,37504,37505,37507,37509,37511,37513],{"class":105,"line":9793},[103,37506,34290],{"class":113},[103,37508,9467],{"class":109},[103,37510,34295],{"class":113},[103,37512,305],{"class":162},[103,37514,120],{"class":113},[103,37516,37517],{"class":105,"line":9802},[103,37518,2389],{"emptyLinePlaceholder":30},[103,37520,37521],{"class":105,"line":9807},[103,37522,34308],{"class":172},[103,37524,37525,37527,37529,37531,37533],{"class":105,"line":9813},[103,37526,34313],{"class":113},[103,37528,159],{"class":109},[103,37530,34318],{"class":113},[103,37532,697],{"class":109},[103,37534,34323],{"class":113},[103,37536,37537],{"class":105,"line":9834},[103,37538,34328],{"class":172},[103,37540,37541,37543,37545,37547],{"class":105,"line":9840},[103,37542,32441],{"class":162},[103,37544,114],{"class":113},[103,37546,34337],{"class":218},[103,37548,34340],{"class":113},[103,37550,37551],{"class":105,"line":9854},[103,37552,2389],{"emptyLinePlaceholder":30},[103,37554,37555],{"class":105,"line":9860},[103,37556,34349],{"class":172},[103,37558,37559,37561,37563,37565,37567],{"class":105,"line":9887},[103,37560,1520],{"class":109},[103,37562,31210],{"class":162},[103,37564,2938],{"class":109},[103,37566,31215],{"class":218},[103,37568,3728],{"class":113},[103,37570,37571],{"class":105,"line":9896},[103,37572,34366],{"class":172},[103,37574,37575,37577,37579],{"class":105,"line":9902},[103,37576,31279],{"class":113},[103,37578,159],{"class":109},[103,37580,37079],{"class":113},[103,37582,37583],{"class":105,"line":9910},[103,37584,34379],{"class":172},[103,37586,37587],{"class":105,"line":9915},[103,37588,34384],{"class":172},[103,37590,37591,37593,37595],{"class":105,"line":16594},[103,37592,34389],{"class":113},[103,37594,34392],{"class":218},[103,37596,30487],{"class":113},[103,37598,37599],{"class":105,"line":16600},[103,37600,34399],{"class":172},[103,37602,37603,37605,37607],{"class":105,"line":16623},[103,37604,34012],{"class":113},[103,37606,159],{"class":109},[103,37608,34408],{"class":113},[103,37610,37611],{"class":105,"line":16629},[103,37612,34413],{"class":172},[103,37614,37615],{"class":105,"line":16652},[103,37616,34418],{"class":113},[103,37618,37619],{"class":105,"line":16666},[103,37620,2389],{"emptyLinePlaceholder":30},[103,37622,37623],{"class":105,"line":16686},[103,37624,34427],{"class":172},[103,37626,37627],{"class":105,"line":16692},[103,37628,34432],{"class":172},[103,37630,37631,37633,37635,37637,37639,37641,37643],{"class":105,"line":16703},[103,37632,31227],{"class":113},[103,37634,159],{"class":109},[103,37636,31234],{"class":218},[103,37638,1693],{"class":109},[103,37640,31239],{"class":113},[103,37642,1690],{"class":109},[103,37644,34109],{"class":218},[103,37646,37647,37649,37651],{"class":105,"line":16726},[103,37648,31279],{"class":113},[103,37650,159],{"class":109},[103,37652,32279],{"class":113},[103,37654,37655],{"class":105,"line":16748},[103,37656,34461],{"class":172},[103,37658,37659],{"class":105,"line":16753},[103,37660,34466],{"class":172},[103,37662,37663,37665,37667,37669,37671,37673,37675,37677,37679,37681,37683,37685,37687,37689,37691,37693,37695,37697,37699,37701,37703,37705,37707],{"class":105,"line":16759},[103,37664,34471],{"class":113},[103,37666,159],{"class":109},[103,37668,1003],{"class":113},[103,37670,34478],{"class":218},[103,37672,491],{"class":113},[103,37674,34483],{"class":218},[103,37676,491],{"class":113},[103,37678,34488],{"class":218},[103,37680,491],{"class":113},[103,37682,34493],{"class":218},[103,37684,491],{"class":113},[103,37686,34498],{"class":218},[103,37688,491],{"class":113},[103,37690,34503],{"class":218},[103,37692,491],{"class":113},[103,37694,34508],{"class":218},[103,37696,491],{"class":113},[103,37698,34513],{"class":218},[103,37700,491],{"class":113},[103,37702,34518],{"class":218},[103,37704,491],{"class":113},[103,37706,34523],{"class":218},[103,37708,33236],{"class":113},[103,37710,37711,37713],{"class":105,"line":16773},[103,37712,34168],{"class":109},[103,37714,32874],{"class":113},[103,37716,37717],{"class":105,"line":16786},[103,37718,34536],{"class":172},[103,37720,37721,37723,37725,37727],{"class":105,"line":16791},[103,37722,3392],{"class":109},[103,37724,34543],{"class":113},[103,37726,26033],{"class":109},[103,37728,34187],{"class":113},[103,37730,37731,37733,37735],{"class":105,"line":16805},[103,37732,32600],{"class":113},[103,37734,159],{"class":109},[103,37736,32605],{"class":113},[103,37738,37739,37741,37743],{"class":105,"line":16810},[103,37740,32615],{"class":113},[103,37742,159],{"class":109},[103,37744,32620],{"class":113},[103,37746,37747],{"class":105,"line":16816},[103,37748,2389],{"emptyLinePlaceholder":30},[103,37750,37751],{"class":105,"line":16821},[103,37752,34572],{"class":172},[103,37754,37755],{"class":105,"line":16835},[103,37756,32865],{"class":113},[103,37758,37759],{"class":105,"line":16840},[103,37760,34581],{"class":172},[103,37762,37763,37765,37767],{"class":105,"line":16845},[103,37764,32650],{"class":113},[103,37766,159],{"class":109},[103,37768,32655],{"class":113},[103,37770,37771],{"class":105,"line":16859},[103,37772,34594],{"class":172},[103,37774,37775,37777,37779,37781,37783,37785,37787],{"class":105,"line":16871},[103,37776,32667],{"class":113},[103,37778,159],{"class":109},[103,37780,32672],{"class":113},[103,37782,32675],{"class":5206},[103,37784,159],{"class":109},[103,37786,331],{"class":162},[103,37788,120],{"class":113},[103,37790,37791],{"class":105,"line":16876},[103,37792,34615],{"class":172},[103,37794,37795,37797,37799],{"class":105,"line":16889},[103,37796,34620],{"class":113},[103,37798,159],{"class":109},[103,37800,34625],{"class":113},[103,37802,37803,37805,37807],{"class":105,"line":16894},[103,37804,34630],{"class":113},[103,37806,159],{"class":109},[103,37808,34635],{"class":113},[103,37810,37811,37813,37815,37817,37819,37821,37823,37825],{"class":105,"line":16899},[103,37812,34640],{"class":162},[103,37814,114],{"class":113},[103,37816,34645],{"class":218},[103,37818,34648],{"class":113},[103,37820,34651],{"class":218},[103,37822,491],{"class":113},[103,37824,34656],{"class":218},[103,37826,34659],{"class":113},[74,37828,37830],{"id":37829},"_22vgg","2.2.VGG",[21988,37832,37834],{"id":37833},"_221原理","2.2.1.原理",[14,37836,37837],{},[1451,37838],{"alt":24,"src":37839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[14,37841,37842],{},[1451,37843],{"alt":24,"src":37844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[14,37846,37847],{},[1451,37848],{"alt":24,"src":37849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[14,37851,37852],{},"参数详细描述：",[14,37854,37855],{},[1451,37856],{"alt":24,"src":37857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[14,37859,37860],{},[1451,37861],{"alt":24,"src":37862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[14,37864,37865],{},[1451,37866],{"alt":24,"src":37867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,37869,37870],{},[1451,37871],{"alt":24,"src":37872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[14,37874,37875],{},[1451,37876],{"alt":24,"src":37877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-022.png",[21988,37879,37881],{"id":37880},"_222代码实现","2.2.2.代码实现",[57,37883,37884],{},[60,37885,37886],{},"网络搭建",[94,37888,37890],{"className":30368,"code":37889,"language":30370,"meta":24,"style":24},"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",[100,37891,37892,37898,37910,37920,37930,37934,37951,37959,37978,37983,37988,38000,38038,38043,38079,38083,38112,38117,38122,38133,38169,38173,38209,38213,38241,38245,38250,38261,38297,38301,38337,38341,38377,38381,38409,38413,38418,38429,38466,38470,38506,38510,38546,38550,38578,38582,38587,38598,38634,38638,38674,38678,38714,38718,38746,38750,38755,38766,38771,38776,38781,38802,38806,38818,38822,38834,38838,38842,38847,38852,38867,38872,38882,38887,38902,38907,38926,38931,38940,38945,38955,38960,38965,38979,38984,38998,39006,39010,39014,39022,39033,39044,39055,39066,39077,39088,39094,39098,39103,39116,39136,39142,39151],{"__ignoreMap":24},[103,37893,37894,37896],{"class":105,"line":106},[103,37895,30382],{"class":109},[103,37897,30385],{"class":113},[103,37899,37900,37902,37905,37907],{"class":105,"line":25},[103,37901,30727],{"class":109},[103,37903,37904],{"class":113}," sympy.core.sympify ",[103,37906,30382],{"class":109},[103,37908,37909],{"class":113}," kernS\n",[103,37911,37912,37914,37916,37918],{"class":105,"line":1168},[103,37913,30727],{"class":109},[103,37915,30730],{"class":113},[103,37917,30382],{"class":109},[103,37919,30735],{"class":113},[103,37921,37922,37924,37926,37928],{"class":105,"line":1183},[103,37923,30727],{"class":109},[103,37925,30747],{"class":113},[103,37927,30382],{"class":109},[103,37929,30752],{"class":113},[103,37931,37932],{"class":105,"line":1189},[103,37933,2389],{"emptyLinePlaceholder":30},[103,37935,37936,37938,37941,37943,37945,37947,37949],{"class":105,"line":1203},[103,37937,14684],{"class":109},[103,37939,37940],{"class":1952}," VGG16",[103,37942,114],{"class":113},[103,37944,30768],{"class":1952},[103,37946,671],{"class":113},[103,37948,30773],{"class":1952},[103,37950,30776],{"class":113},[103,37952,37953,37955,37957],{"class":105,"line":1209},[103,37954,30791],{"class":109},[103,37956,30794],{"class":162},[103,37958,30797],{"class":113},[103,37960,37961,37963,37965,37968,37970,37972,37974,37976],{"class":105,"line":1300},[103,37962,30807],{"class":162},[103,37964,114],{"class":113},[103,37966,37967],{"class":162},"VGG16",[103,37969,12425],{"class":113},[103,37971,30813],{"class":162},[103,37973,30816],{"class":113},[103,37975,30819],{"class":162},[103,37977,1965],{"class":113},[103,37979,37980],{"class":105,"line":1306},[103,37981,37982],{"class":172},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[103,37984,37985],{"class":105,"line":1318},[103,37986,37987],{"class":172},"        # 这里用的是灰度图\n",[103,37989,37990,37992,37995,37997],{"class":105,"line":1601},[103,37991,30835],{"class":162},[103,37993,37994],{"class":113},".block1",[103,37996,159],{"class":109},[103,37998,37999],{"class":113},"nn.Sequential(\n",[103,38001,38002,38005,38007,38009,38011,38013,38015,38017,38019,38021,38023,38025,38027,38029,38031,38033,38035],{"class":105,"line":1606},[103,38003,38004],{"class":113},"            nn.Conv2d(",[103,38006,30846],{"class":5206},[103,38008,159],{"class":109},[103,38010,331],{"class":162},[103,38012,491],{"class":113},[103,38014,30855],{"class":5206},[103,38016,159],{"class":109},[103,38018,317],{"class":162},[103,38020,491],{"class":113},[103,38022,30864],{"class":5206},[103,38024,159],{"class":109},[103,38026,185],{"class":162},[103,38028,491],{"class":113},[103,38030,30873],{"class":5206},[103,38032,159],{"class":109},[103,38034,331],{"class":162},[103,38036,38037],{"class":113},"),\n",[103,38039,38040],{"class":105,"line":1612},[103,38041,38042],{"class":113},"            nn.ReLU(),\n",[103,38044,38045,38047,38049,38051,38053,38055,38057,38059,38061,38063,38065,38067,38069,38071,38073,38075,38077],{"class":105,"line":1617},[103,38046,38004],{"class":113},[103,38048,30846],{"class":5206},[103,38050,159],{"class":109},[103,38052,317],{"class":162},[103,38054,491],{"class":113},[103,38056,30855],{"class":5206},[103,38058,159],{"class":109},[103,38060,317],{"class":162},[103,38062,491],{"class":113},[103,38064,30864],{"class":5206},[103,38066,159],{"class":109},[103,38068,185],{"class":162},[103,38070,491],{"class":113},[103,38072,30873],{"class":5206},[103,38074,159],{"class":109},[103,38076,331],{"class":162},[103,38078,38037],{"class":113},[103,38080,38081],{"class":105,"line":1631},[103,38082,38042],{"class":113},[103,38084,38085,38088,38090,38092,38094,38096,38098,38100,38102,38104,38106,38108,38110],{"class":105,"line":1636},[103,38086,38087],{"class":113},"            nn.MaxPool2d(",[103,38089,30864],{"class":5206},[103,38091,159],{"class":109},[103,38093,191],{"class":162},[103,38095,491],{"class":113},[103,38097,30919],{"class":5206},[103,38099,159],{"class":109},[103,38101,191],{"class":162},[103,38103,491],{"class":113},[103,38105,30873],{"class":5206},[103,38107,159],{"class":109},[103,38109,305],{"class":162},[103,38111,120],{"class":113},[103,38113,38114],{"class":105,"line":1642},[103,38115,38116],{"class":113},"        )\n",[103,38118,38119],{"class":105,"line":1663},[103,38120,38121],{"class":172},"        # 第二层\n",[103,38123,38124,38126,38129,38131],{"class":105,"line":1668},[103,38125,30835],{"class":162},[103,38127,38128],{"class":113},".block2",[103,38130,159],{"class":109},[103,38132,37999],{"class":113},[103,38134,38135,38137,38139,38141,38143,38145,38147,38149,38151,38153,38155,38157,38159,38161,38163,38165,38167],{"class":105,"line":1682},[103,38136,38004],{"class":113},[103,38138,30846],{"class":5206},[103,38140,159],{"class":109},[103,38142,317],{"class":162},[103,38144,491],{"class":113},[103,38146,30855],{"class":5206},[103,38148,159],{"class":109},[103,38150,32060],{"class":162},[103,38152,491],{"class":113},[103,38154,30864],{"class":5206},[103,38156,159],{"class":109},[103,38158,185],{"class":162},[103,38160,491],{"class":113},[103,38162,30873],{"class":5206},[103,38164,159],{"class":109},[103,38166,331],{"class":162},[103,38168,38037],{"class":113},[103,38170,38171],{"class":105,"line":1687},[103,38172,38042],{"class":113},[103,38174,38175,38177,38179,38181,38183,38185,38187,38189,38191,38193,38195,38197,38199,38201,38203,38205,38207],{"class":105,"line":1716},[103,38176,38004],{"class":113},[103,38178,30846],{"class":5206},[103,38180,159],{"class":109},[103,38182,32060],{"class":162},[103,38184,491],{"class":113},[103,38186,30855],{"class":5206},[103,38188,159],{"class":109},[103,38190,32060],{"class":162},[103,38192,491],{"class":113},[103,38194,30864],{"class":5206},[103,38196,159],{"class":109},[103,38198,185],{"class":162},[103,38200,491],{"class":113},[103,38202,30873],{"class":5206},[103,38204,159],{"class":109},[103,38206,331],{"class":162},[103,38208,38037],{"class":113},[103,38210,38211],{"class":105,"line":1721},[103,38212,38042],{"class":113},[103,38214,38215,38217,38219,38221,38223,38225,38227,38229,38231,38233,38235,38237,38239],{"class":105,"line":1738},[103,38216,38087],{"class":113},[103,38218,30864],{"class":5206},[103,38220,159],{"class":109},[103,38222,191],{"class":162},[103,38224,491],{"class":113},[103,38226,30919],{"class":5206},[103,38228,159],{"class":109},[103,38230,191],{"class":162},[103,38232,491],{"class":113},[103,38234,30873],{"class":5206},[103,38236,159],{"class":109},[103,38238,305],{"class":162},[103,38240,120],{"class":113},[103,38242,38243],{"class":105,"line":1743},[103,38244,38116],{"class":113},[103,38246,38247],{"class":105,"line":1748},[103,38248,38249],{"class":172},"        # 第三层\n",[103,38251,38252,38254,38257,38259],{"class":105,"line":1753},[103,38253,30835],{"class":162},[103,38255,38256],{"class":113},".block3",[103,38258,159],{"class":109},[103,38260,37999],{"class":113},[103,38262,38263,38265,38267,38269,38271,38273,38275,38277,38279,38281,38283,38285,38287,38289,38291,38293,38295],{"class":105,"line":1767},[103,38264,38004],{"class":113},[103,38266,30846],{"class":5206},[103,38268,159],{"class":109},[103,38270,32060],{"class":162},[103,38272,491],{"class":113},[103,38274,30855],{"class":5206},[103,38276,159],{"class":109},[103,38278,34860],{"class":162},[103,38280,491],{"class":113},[103,38282,30864],{"class":5206},[103,38284,159],{"class":109},[103,38286,185],{"class":162},[103,38288,491],{"class":113},[103,38290,30873],{"class":5206},[103,38292,159],{"class":109},[103,38294,331],{"class":162},[103,38296,38037],{"class":113},[103,38298,38299],{"class":105,"line":1772},[103,38300,38042],{"class":113},[103,38302,38303,38305,38307,38309,38311,38313,38315,38317,38319,38321,38323,38325,38327,38329,38331,38333,38335],{"class":105,"line":2566},[103,38304,38004],{"class":113},[103,38306,30846],{"class":5206},[103,38308,159],{"class":109},[103,38310,34860],{"class":162},[103,38312,491],{"class":113},[103,38314,30855],{"class":5206},[103,38316,159],{"class":109},[103,38318,34860],{"class":162},[103,38320,491],{"class":113},[103,38322,30864],{"class":5206},[103,38324,159],{"class":109},[103,38326,185],{"class":162},[103,38328,491],{"class":113},[103,38330,30873],{"class":5206},[103,38332,159],{"class":109},[103,38334,331],{"class":162},[103,38336,38037],{"class":113},[103,38338,38339],{"class":105,"line":2580},[103,38340,38042],{"class":113},[103,38342,38343,38345,38347,38349,38351,38353,38355,38357,38359,38361,38363,38365,38367,38369,38371,38373,38375],{"class":105,"line":2588},[103,38344,38004],{"class":113},[103,38346,30846],{"class":5206},[103,38348,159],{"class":109},[103,38350,34860],{"class":162},[103,38352,491],{"class":113},[103,38354,30855],{"class":5206},[103,38356,159],{"class":109},[103,38358,34860],{"class":162},[103,38360,491],{"class":113},[103,38362,30864],{"class":5206},[103,38364,159],{"class":109},[103,38366,185],{"class":162},[103,38368,491],{"class":113},[103,38370,30873],{"class":5206},[103,38372,159],{"class":109},[103,38374,331],{"class":162},[103,38376,38037],{"class":113},[103,38378,38379],{"class":105,"line":2593},[103,38380,38042],{"class":113},[103,38382,38383,38385,38387,38389,38391,38393,38395,38397,38399,38401,38403,38405,38407],{"class":105,"line":2599},[103,38384,38087],{"class":113},[103,38386,30864],{"class":5206},[103,38388,159],{"class":109},[103,38390,191],{"class":162},[103,38392,491],{"class":113},[103,38394,30919],{"class":5206},[103,38396,159],{"class":109},[103,38398,191],{"class":162},[103,38400,491],{"class":113},[103,38402,30873],{"class":5206},[103,38404,159],{"class":109},[103,38406,305],{"class":162},[103,38408,120],{"class":113},[103,38410,38411],{"class":105,"line":2605},[103,38412,38116],{"class":113},[103,38414,38415],{"class":105,"line":2610},[103,38416,38417],{"class":172},"        # 第四层\n",[103,38419,38420,38422,38425,38427],{"class":105,"line":7938},[103,38421,30835],{"class":162},[103,38423,38424],{"class":113},".block4",[103,38426,159],{"class":109},[103,38428,37999],{"class":113},[103,38430,38431,38433,38435,38437,38439,38441,38443,38445,38448,38450,38452,38454,38456,38458,38460,38462,38464],{"class":105,"line":7962},[103,38432,38004],{"class":113},[103,38434,30846],{"class":5206},[103,38436,159],{"class":109},[103,38438,34860],{"class":162},[103,38440,491],{"class":113},[103,38442,30855],{"class":5206},[103,38444,159],{"class":109},[103,38446,38447],{"class":162},"512",[103,38449,491],{"class":113},[103,38451,30864],{"class":5206},[103,38453,159],{"class":109},[103,38455,185],{"class":162},[103,38457,491],{"class":113},[103,38459,30873],{"class":5206},[103,38461,159],{"class":109},[103,38463,331],{"class":162},[103,38465,38037],{"class":113},[103,38467,38468],{"class":105,"line":7967},[103,38469,38042],{"class":113},[103,38471,38472,38474,38476,38478,38480,38482,38484,38486,38488,38490,38492,38494,38496,38498,38500,38502,38504],{"class":105,"line":7973},[103,38473,38004],{"class":113},[103,38475,30846],{"class":5206},[103,38477,159],{"class":109},[103,38479,38447],{"class":162},[103,38481,491],{"class":113},[103,38483,30855],{"class":5206},[103,38485,159],{"class":109},[103,38487,38447],{"class":162},[103,38489,491],{"class":113},[103,38491,30864],{"class":5206},[103,38493,159],{"class":109},[103,38495,185],{"class":162},[103,38497,491],{"class":113},[103,38499,30873],{"class":5206},[103,38501,159],{"class":109},[103,38503,331],{"class":162},[103,38505,38037],{"class":113},[103,38507,38508],{"class":105,"line":8000},[103,38509,38042],{"class":113},[103,38511,38512,38514,38516,38518,38520,38522,38524,38526,38528,38530,38532,38534,38536,38538,38540,38542,38544],{"class":105,"line":8005},[103,38513,38004],{"class":113},[103,38515,30846],{"class":5206},[103,38517,159],{"class":109},[103,38519,38447],{"class":162},[103,38521,491],{"class":113},[103,38523,30855],{"class":5206},[103,38525,159],{"class":109},[103,38527,38447],{"class":162},[103,38529,491],{"class":113},[103,38531,30864],{"class":5206},[103,38533,159],{"class":109},[103,38535,185],{"class":162},[103,38537,491],{"class":113},[103,38539,30873],{"class":5206},[103,38541,159],{"class":109},[103,38543,331],{"class":162},[103,38545,38037],{"class":113},[103,38547,38548],{"class":105,"line":8011},[103,38549,38042],{"class":113},[103,38551,38552,38554,38556,38558,38560,38562,38564,38566,38568,38570,38572,38574,38576],{"class":105,"line":8023},[103,38553,38087],{"class":113},[103,38555,30864],{"class":5206},[103,38557,159],{"class":109},[103,38559,191],{"class":162},[103,38561,491],{"class":113},[103,38563,30919],{"class":5206},[103,38565,159],{"class":109},[103,38567,191],{"class":162},[103,38569,491],{"class":113},[103,38571,30873],{"class":5206},[103,38573,159],{"class":109},[103,38575,305],{"class":162},[103,38577,120],{"class":113},[103,38579,38580],{"class":105,"line":8035},[103,38581,38116],{"class":113},[103,38583,38584],{"class":105,"line":8047},[103,38585,38586],{"class":172},"        # 第五层\n",[103,38588,38589,38591,38594,38596],{"class":105,"line":9706},[103,38590,30835],{"class":162},[103,38592,38593],{"class":113},".block5",[103,38595,159],{"class":109},[103,38597,37999],{"class":113},[103,38599,38600,38602,38604,38606,38608,38610,38612,38614,38616,38618,38620,38622,38624,38626,38628,38630,38632],{"class":105,"line":9731},[103,38601,38004],{"class":113},[103,38603,30846],{"class":5206},[103,38605,159],{"class":109},[103,38607,38447],{"class":162},[103,38609,491],{"class":113},[103,38611,30855],{"class":5206},[103,38613,159],{"class":109},[103,38615,38447],{"class":162},[103,38617,491],{"class":113},[103,38619,30864],{"class":5206},[103,38621,159],{"class":109},[103,38623,185],{"class":162},[103,38625,491],{"class":113},[103,38627,30873],{"class":5206},[103,38629,159],{"class":109},[103,38631,331],{"class":162},[103,38633,38037],{"class":113},[103,38635,38636],{"class":105,"line":9754},[103,38637,38042],{"class":113},[103,38639,38640,38642,38644,38646,38648,38650,38652,38654,38656,38658,38660,38662,38664,38666,38668,38670,38672],{"class":105,"line":9778},[103,38641,38004],{"class":113},[103,38643,30846],{"class":5206},[103,38645,159],{"class":109},[103,38647,38447],{"class":162},[103,38649,491],{"class":113},[103,38651,30855],{"class":5206},[103,38653,159],{"class":109},[103,38655,38447],{"class":162},[103,38657,491],{"class":113},[103,38659,30864],{"class":5206},[103,38661,159],{"class":109},[103,38663,185],{"class":162},[103,38665,491],{"class":113},[103,38667,30873],{"class":5206},[103,38669,159],{"class":109},[103,38671,331],{"class":162},[103,38673,38037],{"class":113},[103,38675,38676],{"class":105,"line":9783},[103,38677,38042],{"class":113},[103,38679,38680,38682,38684,38686,38688,38690,38692,38694,38696,38698,38700,38702,38704,38706,38708,38710,38712],{"class":105,"line":9788},[103,38681,38004],{"class":113},[103,38683,30846],{"class":5206},[103,38685,159],{"class":109},[103,38687,38447],{"class":162},[103,38689,491],{"class":113},[103,38691,30855],{"class":5206},[103,38693,159],{"class":109},[103,38695,38447],{"class":162},[103,38697,491],{"class":113},[103,38699,30864],{"class":5206},[103,38701,159],{"class":109},[103,38703,185],{"class":162},[103,38705,491],{"class":113},[103,38707,30873],{"class":5206},[103,38709,159],{"class":109},[103,38711,331],{"class":162},[103,38713,38037],{"class":113},[103,38715,38716],{"class":105,"line":9793},[103,38717,38042],{"class":113},[103,38719,38720,38722,38724,38726,38728,38730,38732,38734,38736,38738,38740,38742,38744],{"class":105,"line":9802},[103,38721,38087],{"class":113},[103,38723,30864],{"class":5206},[103,38725,159],{"class":109},[103,38727,191],{"class":162},[103,38729,491],{"class":113},[103,38731,30919],{"class":5206},[103,38733,159],{"class":109},[103,38735,191],{"class":162},[103,38737,491],{"class":113},[103,38739,30873],{"class":5206},[103,38741,159],{"class":109},[103,38743,305],{"class":162},[103,38745,120],{"class":113},[103,38747,38748],{"class":105,"line":9807},[103,38749,38116],{"class":113},[103,38751,38752],{"class":105,"line":9813},[103,38753,38754],{"class":172},"        # 全连接层\n",[103,38756,38757,38759,38762,38764],{"class":105,"line":9834},[103,38758,30835],{"class":162},[103,38760,38761],{"class":113},".block6",[103,38763,159],{"class":109},[103,38765,37999],{"class":113},[103,38767,38768],{"class":105,"line":9840},[103,38769,38770],{"class":172},"            # 平展操作\n",[103,38772,38773],{"class":105,"line":9854},[103,38774,38775],{"class":172},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[103,38777,38778],{"class":105,"line":9860},[103,38779,38780],{"class":113},"            nn.Flatten(),\n",[103,38782,38783,38786,38788,38790,38792,38794,38796,38798,38800],{"class":105,"line":9887},[103,38784,38785],{"class":113},"            nn.Linear(",[103,38787,482],{"class":162},[103,38789,568],{"class":109},[103,38791,482],{"class":162},[103,38793,568],{"class":109},[103,38795,38447],{"class":162},[103,38797,491],{"class":113},[103,38799,34860],{"class":162},[103,38801,38037],{"class":113},[103,38803,38804],{"class":105,"line":9896},[103,38805,38042],{"class":113},[103,38807,38808,38810,38812,38814,38816],{"class":105,"line":9902},[103,38809,38785],{"class":113},[103,38811,34860],{"class":162},[103,38813,491],{"class":113},[103,38815,32060],{"class":162},[103,38817,38037],{"class":113},[103,38819,38820],{"class":105,"line":9910},[103,38821,38042],{"class":113},[103,38823,38824,38826,38828,38830,38832],{"class":105,"line":9915},[103,38825,38785],{"class":113},[103,38827,32060],{"class":162},[103,38829,491],{"class":113},[103,38831,559],{"class":162},[103,38833,120],{"class":113},[103,38835,38836],{"class":105,"line":16594},[103,38837,38116],{"class":113},[103,38839,38840],{"class":105,"line":16600},[103,38841,2389],{"emptyLinePlaceholder":30},[103,38843,38844],{"class":105,"line":16623},[103,38845,38846],{"class":172},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[103,38848,38849],{"class":105,"line":16629},[103,38850,38851],{"class":172},"        # 循环遍历模型\n",[103,38853,38854,38856,38859,38861,38864],{"class":105,"line":16652},[103,38855,3392],{"class":109},[103,38857,38858],{"class":113}," m ",[103,38860,26033],{"class":109},[103,38862,38863],{"class":162}," self",[103,38865,38866],{"class":113},".modules():\n",[103,38868,38869],{"class":105,"line":16666},[103,38870,38871],{"class":172},"            # print(m)\n",[103,38873,38874,38876,38879],{"class":105,"line":16686},[103,38875,4631],{"class":109},[103,38877,38878],{"class":162}," isinstance",[103,38880,38881],{"class":113},"(m,nn.Conv2d):\n",[103,38883,38884],{"class":105,"line":16692},[103,38885,38886],{"class":172},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[103,38888,38889,38892,38895,38897,38900],{"class":105,"line":16703},[103,38890,38891],{"class":113},"                nn.init.kaiming_normal_(m.weight,",[103,38893,38894],{"class":5206},"nonlinearity",[103,38896,159],{"class":109},[103,38898,38899],{"class":218},"'relu'",[103,38901,120],{"class":113},[103,38903,38904],{"class":105,"line":16726},[103,38905,38906],{"class":172},"                # 判断b参数是否存在\n",[103,38908,38909,38912,38915,38918,38921,38924],{"class":105,"line":16748},[103,38910,38911],{"class":109},"                if",[103,38913,38914],{"class":113}," m.bias ",[103,38916,38917],{"class":109},"is",[103,38919,38920],{"class":109}," not",[103,38922,38923],{"class":162}," None",[103,38925,3728],{"class":113},[103,38927,38928],{"class":105,"line":16753},[103,38929,38930],{"class":172},"                    # 如果参数不存在的化初始化b=0\n",[103,38932,38933,38936,38938],{"class":105,"line":16759},[103,38934,38935],{"class":113},"                    nn.init.constant_(m.bias,",[103,38937,305],{"class":162},[103,38939,120],{"class":113},[103,38941,38942],{"class":105,"line":16773},[103,38943,38944],{"class":172},"            # 全连接层初始化\n",[103,38946,38947,38950,38952],{"class":105,"line":16786},[103,38948,38949],{"class":109},"            elif",[103,38951,38878],{"class":162},[103,38953,38954],{"class":113},"(m,nn.Linear):\n",[103,38956,38957],{"class":105,"line":16791},[103,38958,38959],{"class":172},"                # 这个初始化方法是利用的是正太分布的方式\n",[103,38961,38962],{"class":105,"line":16805},[103,38963,38964],{"class":172},"                # 均值为0，方差为0.01\n",[103,38966,38967,38970,38972,38974,38977],{"class":105,"line":16810},[103,38968,38969],{"class":113},"                nn.init.normal_(m.weight,",[103,38971,305],{"class":162},[103,38973,491],{"class":113},[103,38975,38976],{"class":162},"0.01",[103,38978,120],{"class":113},[103,38980,38981],{"class":105,"line":16816},[103,38982,38983],{"class":172},"                # 初始化b参数\n",[103,38985,38986,38988,38990,38992,38994,38996],{"class":105,"line":16821},[103,38987,38911],{"class":109},[103,38989,38914],{"class":113},[103,38991,38917],{"class":109},[103,38993,38920],{"class":109},[103,38995,38923],{"class":162},[103,38997,3728],{"class":113},[103,38999,39000,39002,39004],{"class":105,"line":16835},[103,39001,38935],{"class":113},[103,39003,305],{"class":162},[103,39005,120],{"class":113},[103,39007,39008],{"class":105,"line":16840},[103,39009,2389],{"emptyLinePlaceholder":30},[103,39011,39012],{"class":105,"line":16845},[103,39013,35155],{"class":172},[103,39015,39016,39018,39020],{"class":105,"line":16859},[103,39017,30791],{"class":109},[103,39019,31083],{"class":1952},[103,39021,31086],{"class":113},[103,39023,39024,39026,39028,39030],{"class":105,"line":16871},[103,39025,31091],{"class":113},[103,39027,159],{"class":109},[103,39029,30813],{"class":162},[103,39031,39032],{"class":113},".block1(x)\n",[103,39034,39035,39037,39039,39041],{"class":105,"line":16876},[103,39036,31091],{"class":113},[103,39038,159],{"class":109},[103,39040,30813],{"class":162},[103,39042,39043],{"class":113},".block2(x)\n",[103,39045,39046,39048,39050,39052],{"class":105,"line":16889},[103,39047,31091],{"class":113},[103,39049,159],{"class":109},[103,39051,30813],{"class":162},[103,39053,39054],{"class":113},".block3(x)\n",[103,39056,39057,39059,39061,39063],{"class":105,"line":16894},[103,39058,31091],{"class":113},[103,39060,159],{"class":109},[103,39062,30813],{"class":162},[103,39064,39065],{"class":113},".block4(x)\n",[103,39067,39068,39070,39072,39074],{"class":105,"line":16899},[103,39069,31091],{"class":113},[103,39071,159],{"class":109},[103,39073,30813],{"class":162},[103,39075,39076],{"class":113},".block5(x)\n",[103,39078,39079,39081,39083,39085],{"class":105,"line":16904},[103,39080,31091],{"class":113},[103,39082,159],{"class":109},[103,39084,30813],{"class":162},[103,39086,39087],{"class":113},".block6(x)\n",[103,39089,39090,39092],{"class":105,"line":16917},[103,39091,14742],{"class":109},[103,39093,31199],{"class":113},[103,39095,39096],{"class":105,"line":16922},[103,39097,2389],{"emptyLinePlaceholder":30},[103,39099,39100],{"class":105,"line":32623},[103,39101,39102],{"class":172},"# 验证模型\n",[103,39104,39105,39107,39109,39111,39114],{"class":105,"line":32629},[103,39106,1520],{"class":109},[103,39108,31210],{"class":162},[103,39110,2938],{"class":109},[103,39112,39113],{"class":218},"'__main__'",[103,39115,3728],{"class":113},[103,39117,39118,39120,39122,39124,39126,39128,39130,39132,39134],{"class":105,"line":32635},[103,39119,31227],{"class":113},[103,39121,159],{"class":109},[103,39123,30441],{"class":113},[103,39125,31234],{"class":218},[103,39127,1693],{"class":109},[103,39129,31239],{"class":113},[103,39131,1690],{"class":109},[103,39133,30466],{"class":218},[103,39135,120],{"class":113},[103,39137,39138,39140],{"class":105,"line":32641},[103,39139,31289],{"class":162},[103,39141,30475],{"class":113},[103,39143,39144,39146,39148],{"class":105,"line":32647},[103,39145,31279],{"class":113},[103,39147,159],{"class":109},[103,39149,39150],{"class":113},"VGG16().to(device)\n",[103,39152,39153,39155,39157,39159,39161,39163,39165,39167],{"class":105,"line":32658},[103,39154,31289],{"class":162},[103,39156,31292],{"class":113},[103,39158,331],{"class":162},[103,39160,491],{"class":113},[103,39162,31491],{"class":162},[103,39164,491],{"class":113},[103,39166,31491],{"class":162},[103,39168,31305],{"class":113},[57,39170,39171],{"start":25},[60,39172,39173],{},"训练代码",[14,39175,39176],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39178,39179],{},"解决方式:",[14,39181,39182],{},"①权重初始化",[94,39184,39186],{"className":30368,"code":39185,"language":30370,"meta":24,"style":24},"# 权重初始化,保证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",[100,39187,39188,39193,39198,39210,39215,39223,39228,39241,39246,39260,39265,39274,39279,39288,39293,39298,39311,39316,39330],{"__ignoreMap":24},[103,39189,39190],{"class":105,"line":106},[103,39191,39192],{"class":172},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[103,39194,39195],{"class":105,"line":25},[103,39196,39197],{"class":172},"# 循环遍历模型\n",[103,39199,39200,39202,39204,39206,39208],{"class":105,"line":1168},[103,39201,3014],{"class":109},[103,39203,38858],{"class":113},[103,39205,26033],{"class":109},[103,39207,38863],{"class":162},[103,39209,38866],{"class":113},[103,39211,39212],{"class":105,"line":1183},[103,39213,39214],{"class":172},"    # print(m)\n",[103,39216,39217,39219,39221],{"class":105,"line":1189},[103,39218,3090],{"class":109},[103,39220,38878],{"class":162},[103,39222,38881],{"class":113},[103,39224,39225],{"class":105,"line":1203},[103,39226,39227],{"class":172},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[103,39229,39230,39233,39235,39237,39239],{"class":105,"line":1209},[103,39231,39232],{"class":113},"        nn.init.kaiming_normal_(m.weight,",[103,39234,38894],{"class":5206},[103,39236,159],{"class":109},[103,39238,38899],{"class":218},[103,39240,120],{"class":113},[103,39242,39243],{"class":105,"line":1300},[103,39244,39245],{"class":172},"        # 判断b参数是否存在\n",[103,39247,39248,39250,39252,39254,39256,39258],{"class":105,"line":1306},[103,39249,2486],{"class":109},[103,39251,38914],{"class":113},[103,39253,38917],{"class":109},[103,39255,38920],{"class":109},[103,39257,38923],{"class":162},[103,39259,3728],{"class":113},[103,39261,39262],{"class":105,"line":1318},[103,39263,39264],{"class":172},"            # 如果参数不存在的化初始化b=0\n",[103,39266,39267,39270,39272],{"class":105,"line":1601},[103,39268,39269],{"class":113},"            nn.init.constant_(m.bias,",[103,39271,305],{"class":162},[103,39273,120],{"class":113},[103,39275,39276],{"class":105,"line":1606},[103,39277,39278],{"class":172},"    # 全连接层初始化\n",[103,39280,39281,39284,39286],{"class":105,"line":1612},[103,39282,39283],{"class":109},"    elif",[103,39285,38878],{"class":162},[103,39287,38954],{"class":113},[103,39289,39290],{"class":105,"line":1617},[103,39291,39292],{"class":172},"        # 这个初始化方法是利用的是正太分布的方式\n",[103,39294,39295],{"class":105,"line":1631},[103,39296,39297],{"class":172},"        # 均值为0，方差为0.01\n",[103,39299,39300,39303,39305,39307,39309],{"class":105,"line":1636},[103,39301,39302],{"class":113},"        nn.init.normal_(m.weight,",[103,39304,305],{"class":162},[103,39306,491],{"class":113},[103,39308,38976],{"class":162},[103,39310,120],{"class":113},[103,39312,39313],{"class":105,"line":1642},[103,39314,39315],{"class":172},"        # 初始化b参数\n",[103,39317,39318,39320,39322,39324,39326,39328],{"class":105,"line":1663},[103,39319,2486],{"class":109},[103,39321,38914],{"class":113},[103,39323,38917],{"class":109},[103,39325,38920],{"class":109},[103,39327,38923],{"class":162},[103,39329,3728],{"class":113},[103,39331,39332,39334,39336],{"class":105,"line":1668},[103,39333,39269],{"class":113},[103,39335,305],{"class":162},[103,39337,120],{"class":113},[14,39339,39340],{},"②尽可能地增加批次",[14,39342,39343],{},"训练完整代码：",[94,39345,39346],{"className":30368,"code":37889,"language":30370,"meta":24,"style":24},[100,39347,39348,39354,39364,39374,39384,39388,39404,39412,39430,39434,39438,39448,39484,39488,39524,39528,39556,39560,39564,39574,39610,39614,39650,39654,39682,39686,39690,39700,39736,39740,39776,39780,39816,39820,39848,39852,39856,39866,39902,39906,39942,39946,39982,39986,40014,40018,40022,40032,40068,40072,40108,40112,40148,40152,40180,40184,40188,40198,40202,40206,40210,40230,40234,40246,40250,40262,40266,40270,40274,40278,40290,40294,40302,40306,40318,40322,40336,40340,40348,40352,40360,40364,40368,40380,40384,40398,40406,40410,40414,40422,40432,40442,40452,40462,40472,40482,40488,40492,40496,40508,40528,40534,40542],{"__ignoreMap":24},[103,39349,39350,39352],{"class":105,"line":106},[103,39351,30382],{"class":109},[103,39353,30385],{"class":113},[103,39355,39356,39358,39360,39362],{"class":105,"line":25},[103,39357,30727],{"class":109},[103,39359,37904],{"class":113},[103,39361,30382],{"class":109},[103,39363,37909],{"class":113},[103,39365,39366,39368,39370,39372],{"class":105,"line":1168},[103,39367,30727],{"class":109},[103,39369,30730],{"class":113},[103,39371,30382],{"class":109},[103,39373,30735],{"class":113},[103,39375,39376,39378,39380,39382],{"class":105,"line":1183},[103,39377,30727],{"class":109},[103,39379,30747],{"class":113},[103,39381,30382],{"class":109},[103,39383,30752],{"class":113},[103,39385,39386],{"class":105,"line":1189},[103,39387,2389],{"emptyLinePlaceholder":30},[103,39389,39390,39392,39394,39396,39398,39400,39402],{"class":105,"line":1203},[103,39391,14684],{"class":109},[103,39393,37940],{"class":1952},[103,39395,114],{"class":113},[103,39397,30768],{"class":1952},[103,39399,671],{"class":113},[103,39401,30773],{"class":1952},[103,39403,30776],{"class":113},[103,39405,39406,39408,39410],{"class":105,"line":1209},[103,39407,30791],{"class":109},[103,39409,30794],{"class":162},[103,39411,30797],{"class":113},[103,39413,39414,39416,39418,39420,39422,39424,39426,39428],{"class":105,"line":1300},[103,39415,30807],{"class":162},[103,39417,114],{"class":113},[103,39419,37967],{"class":162},[103,39421,12425],{"class":113},[103,39423,30813],{"class":162},[103,39425,30816],{"class":113},[103,39427,30819],{"class":162},[103,39429,1965],{"class":113},[103,39431,39432],{"class":105,"line":1306},[103,39433,37982],{"class":172},[103,39435,39436],{"class":105,"line":1318},[103,39437,37987],{"class":172},[103,39439,39440,39442,39444,39446],{"class":105,"line":1601},[103,39441,30835],{"class":162},[103,39443,37994],{"class":113},[103,39445,159],{"class":109},[103,39447,37999],{"class":113},[103,39449,39450,39452,39454,39456,39458,39460,39462,39464,39466,39468,39470,39472,39474,39476,39478,39480,39482],{"class":105,"line":1606},[103,39451,38004],{"class":113},[103,39453,30846],{"class":5206},[103,39455,159],{"class":109},[103,39457,331],{"class":162},[103,39459,491],{"class":113},[103,39461,30855],{"class":5206},[103,39463,159],{"class":109},[103,39465,317],{"class":162},[103,39467,491],{"class":113},[103,39469,30864],{"class":5206},[103,39471,159],{"class":109},[103,39473,185],{"class":162},[103,39475,491],{"class":113},[103,39477,30873],{"class":5206},[103,39479,159],{"class":109},[103,39481,331],{"class":162},[103,39483,38037],{"class":113},[103,39485,39486],{"class":105,"line":1612},[103,39487,38042],{"class":113},[103,39489,39490,39492,39494,39496,39498,39500,39502,39504,39506,39508,39510,39512,39514,39516,39518,39520,39522],{"class":105,"line":1617},[103,39491,38004],{"class":113},[103,39493,30846],{"class":5206},[103,39495,159],{"class":109},[103,39497,317],{"class":162},[103,39499,491],{"class":113},[103,39501,30855],{"class":5206},[103,39503,159],{"class":109},[103,39505,317],{"class":162},[103,39507,491],{"class":113},[103,39509,30864],{"class":5206},[103,39511,159],{"class":109},[103,39513,185],{"class":162},[103,39515,491],{"class":113},[103,39517,30873],{"class":5206},[103,39519,159],{"class":109},[103,39521,331],{"class":162},[103,39523,38037],{"class":113},[103,39525,39526],{"class":105,"line":1631},[103,39527,38042],{"class":113},[103,39529,39530,39532,39534,39536,39538,39540,39542,39544,39546,39548,39550,39552,39554],{"class":105,"line":1636},[103,39531,38087],{"class":113},[103,39533,30864],{"class":5206},[103,39535,159],{"class":109},[103,39537,191],{"class":162},[103,39539,491],{"class":113},[103,39541,30919],{"class":5206},[103,39543,159],{"class":109},[103,39545,191],{"class":162},[103,39547,491],{"class":113},[103,39549,30873],{"class":5206},[103,39551,159],{"class":109},[103,39553,305],{"class":162},[103,39555,120],{"class":113},[103,39557,39558],{"class":105,"line":1642},[103,39559,38116],{"class":113},[103,39561,39562],{"class":105,"line":1663},[103,39563,38121],{"class":172},[103,39565,39566,39568,39570,39572],{"class":105,"line":1668},[103,39567,30835],{"class":162},[103,39569,38128],{"class":113},[103,39571,159],{"class":109},[103,39573,37999],{"class":113},[103,39575,39576,39578,39580,39582,39584,39586,39588,39590,39592,39594,39596,39598,39600,39602,39604,39606,39608],{"class":105,"line":1682},[103,39577,38004],{"class":113},[103,39579,30846],{"class":5206},[103,39581,159],{"class":109},[103,39583,317],{"class":162},[103,39585,491],{"class":113},[103,39587,30855],{"class":5206},[103,39589,159],{"class":109},[103,39591,32060],{"class":162},[103,39593,491],{"class":113},[103,39595,30864],{"class":5206},[103,39597,159],{"class":109},[103,39599,185],{"class":162},[103,39601,491],{"class":113},[103,39603,30873],{"class":5206},[103,39605,159],{"class":109},[103,39607,331],{"class":162},[103,39609,38037],{"class":113},[103,39611,39612],{"class":105,"line":1687},[103,39613,38042],{"class":113},[103,39615,39616,39618,39620,39622,39624,39626,39628,39630,39632,39634,39636,39638,39640,39642,39644,39646,39648],{"class":105,"line":1716},[103,39617,38004],{"class":113},[103,39619,30846],{"class":5206},[103,39621,159],{"class":109},[103,39623,32060],{"class":162},[103,39625,491],{"class":113},[103,39627,30855],{"class":5206},[103,39629,159],{"class":109},[103,39631,32060],{"class":162},[103,39633,491],{"class":113},[103,39635,30864],{"class":5206},[103,39637,159],{"class":109},[103,39639,185],{"class":162},[103,39641,491],{"class":113},[103,39643,30873],{"class":5206},[103,39645,159],{"class":109},[103,39647,331],{"class":162},[103,39649,38037],{"class":113},[103,39651,39652],{"class":105,"line":1721},[103,39653,38042],{"class":113},[103,39655,39656,39658,39660,39662,39664,39666,39668,39670,39672,39674,39676,39678,39680],{"class":105,"line":1738},[103,39657,38087],{"class":113},[103,39659,30864],{"class":5206},[103,39661,159],{"class":109},[103,39663,191],{"class":162},[103,39665,491],{"class":113},[103,39667,30919],{"class":5206},[103,39669,159],{"class":109},[103,39671,191],{"class":162},[103,39673,491],{"class":113},[103,39675,30873],{"class":5206},[103,39677,159],{"class":109},[103,39679,305],{"class":162},[103,39681,120],{"class":113},[103,39683,39684],{"class":105,"line":1743},[103,39685,38116],{"class":113},[103,39687,39688],{"class":105,"line":1748},[103,39689,38249],{"class":172},[103,39691,39692,39694,39696,39698],{"class":105,"line":1753},[103,39693,30835],{"class":162},[103,39695,38256],{"class":113},[103,39697,159],{"class":109},[103,39699,37999],{"class":113},[103,39701,39702,39704,39706,39708,39710,39712,39714,39716,39718,39720,39722,39724,39726,39728,39730,39732,39734],{"class":105,"line":1767},[103,39703,38004],{"class":113},[103,39705,30846],{"class":5206},[103,39707,159],{"class":109},[103,39709,32060],{"class":162},[103,39711,491],{"class":113},[103,39713,30855],{"class":5206},[103,39715,159],{"class":109},[103,39717,34860],{"class":162},[103,39719,491],{"class":113},[103,39721,30864],{"class":5206},[103,39723,159],{"class":109},[103,39725,185],{"class":162},[103,39727,491],{"class":113},[103,39729,30873],{"class":5206},[103,39731,159],{"class":109},[103,39733,331],{"class":162},[103,39735,38037],{"class":113},[103,39737,39738],{"class":105,"line":1772},[103,39739,38042],{"class":113},[103,39741,39742,39744,39746,39748,39750,39752,39754,39756,39758,39760,39762,39764,39766,39768,39770,39772,39774],{"class":105,"line":2566},[103,39743,38004],{"class":113},[103,39745,30846],{"class":5206},[103,39747,159],{"class":109},[103,39749,34860],{"class":162},[103,39751,491],{"class":113},[103,39753,30855],{"class":5206},[103,39755,159],{"class":109},[103,39757,34860],{"class":162},[103,39759,491],{"class":113},[103,39761,30864],{"class":5206},[103,39763,159],{"class":109},[103,39765,185],{"class":162},[103,39767,491],{"class":113},[103,39769,30873],{"class":5206},[103,39771,159],{"class":109},[103,39773,331],{"class":162},[103,39775,38037],{"class":113},[103,39777,39778],{"class":105,"line":2580},[103,39779,38042],{"class":113},[103,39781,39782,39784,39786,39788,39790,39792,39794,39796,39798,39800,39802,39804,39806,39808,39810,39812,39814],{"class":105,"line":2588},[103,39783,38004],{"class":113},[103,39785,30846],{"class":5206},[103,39787,159],{"class":109},[103,39789,34860],{"class":162},[103,39791,491],{"class":113},[103,39793,30855],{"class":5206},[103,39795,159],{"class":109},[103,39797,34860],{"class":162},[103,39799,491],{"class":113},[103,39801,30864],{"class":5206},[103,39803,159],{"class":109},[103,39805,185],{"class":162},[103,39807,491],{"class":113},[103,39809,30873],{"class":5206},[103,39811,159],{"class":109},[103,39813,331],{"class":162},[103,39815,38037],{"class":113},[103,39817,39818],{"class":105,"line":2593},[103,39819,38042],{"class":113},[103,39821,39822,39824,39826,39828,39830,39832,39834,39836,39838,39840,39842,39844,39846],{"class":105,"line":2599},[103,39823,38087],{"class":113},[103,39825,30864],{"class":5206},[103,39827,159],{"class":109},[103,39829,191],{"class":162},[103,39831,491],{"class":113},[103,39833,30919],{"class":5206},[103,39835,159],{"class":109},[103,39837,191],{"class":162},[103,39839,491],{"class":113},[103,39841,30873],{"class":5206},[103,39843,159],{"class":109},[103,39845,305],{"class":162},[103,39847,120],{"class":113},[103,39849,39850],{"class":105,"line":2605},[103,39851,38116],{"class":113},[103,39853,39854],{"class":105,"line":2610},[103,39855,38417],{"class":172},[103,39857,39858,39860,39862,39864],{"class":105,"line":7938},[103,39859,30835],{"class":162},[103,39861,38424],{"class":113},[103,39863,159],{"class":109},[103,39865,37999],{"class":113},[103,39867,39868,39870,39872,39874,39876,39878,39880,39882,39884,39886,39888,39890,39892,39894,39896,39898,39900],{"class":105,"line":7962},[103,39869,38004],{"class":113},[103,39871,30846],{"class":5206},[103,39873,159],{"class":109},[103,39875,34860],{"class":162},[103,39877,491],{"class":113},[103,39879,30855],{"class":5206},[103,39881,159],{"class":109},[103,39883,38447],{"class":162},[103,39885,491],{"class":113},[103,39887,30864],{"class":5206},[103,39889,159],{"class":109},[103,39891,185],{"class":162},[103,39893,491],{"class":113},[103,39895,30873],{"class":5206},[103,39897,159],{"class":109},[103,39899,331],{"class":162},[103,39901,38037],{"class":113},[103,39903,39904],{"class":105,"line":7967},[103,39905,38042],{"class":113},[103,39907,39908,39910,39912,39914,39916,39918,39920,39922,39924,39926,39928,39930,39932,39934,39936,39938,39940],{"class":105,"line":7973},[103,39909,38004],{"class":113},[103,39911,30846],{"class":5206},[103,39913,159],{"class":109},[103,39915,38447],{"class":162},[103,39917,491],{"class":113},[103,39919,30855],{"class":5206},[103,39921,159],{"class":109},[103,39923,38447],{"class":162},[103,39925,491],{"class":113},[103,39927,30864],{"class":5206},[103,39929,159],{"class":109},[103,39931,185],{"class":162},[103,39933,491],{"class":113},[103,39935,30873],{"class":5206},[103,39937,159],{"class":109},[103,39939,331],{"class":162},[103,39941,38037],{"class":113},[103,39943,39944],{"class":105,"line":8000},[103,39945,38042],{"class":113},[103,39947,39948,39950,39952,39954,39956,39958,39960,39962,39964,39966,39968,39970,39972,39974,39976,39978,39980],{"class":105,"line":8005},[103,39949,38004],{"class":113},[103,39951,30846],{"class":5206},[103,39953,159],{"class":109},[103,39955,38447],{"class":162},[103,39957,491],{"class":113},[103,39959,30855],{"class":5206},[103,39961,159],{"class":109},[103,39963,38447],{"class":162},[103,39965,491],{"class":113},[103,39967,30864],{"class":5206},[103,39969,159],{"class":109},[103,39971,185],{"class":162},[103,39973,491],{"class":113},[103,39975,30873],{"class":5206},[103,39977,159],{"class":109},[103,39979,331],{"class":162},[103,39981,38037],{"class":113},[103,39983,39984],{"class":105,"line":8011},[103,39985,38042],{"class":113},[103,39987,39988,39990,39992,39994,39996,39998,40000,40002,40004,40006,40008,40010,40012],{"class":105,"line":8023},[103,39989,38087],{"class":113},[103,39991,30864],{"class":5206},[103,39993,159],{"class":109},[103,39995,191],{"class":162},[103,39997,491],{"class":113},[103,39999,30919],{"class":5206},[103,40001,159],{"class":109},[103,40003,191],{"class":162},[103,40005,491],{"class":113},[103,40007,30873],{"class":5206},[103,40009,159],{"class":109},[103,40011,305],{"class":162},[103,40013,120],{"class":113},[103,40015,40016],{"class":105,"line":8035},[103,40017,38116],{"class":113},[103,40019,40020],{"class":105,"line":8047},[103,40021,38586],{"class":172},[103,40023,40024,40026,40028,40030],{"class":105,"line":9706},[103,40025,30835],{"class":162},[103,40027,38593],{"class":113},[103,40029,159],{"class":109},[103,40031,37999],{"class":113},[103,40033,40034,40036,40038,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066],{"class":105,"line":9731},[103,40035,38004],{"class":113},[103,40037,30846],{"class":5206},[103,40039,159],{"class":109},[103,40041,38447],{"class":162},[103,40043,491],{"class":113},[103,40045,30855],{"class":5206},[103,40047,159],{"class":109},[103,40049,38447],{"class":162},[103,40051,491],{"class":113},[103,40053,30864],{"class":5206},[103,40055,159],{"class":109},[103,40057,185],{"class":162},[103,40059,491],{"class":113},[103,40061,30873],{"class":5206},[103,40063,159],{"class":109},[103,40065,331],{"class":162},[103,40067,38037],{"class":113},[103,40069,40070],{"class":105,"line":9754},[103,40071,38042],{"class":113},[103,40073,40074,40076,40078,40080,40082,40084,40086,40088,40090,40092,40094,40096,40098,40100,40102,40104,40106],{"class":105,"line":9778},[103,40075,38004],{"class":113},[103,40077,30846],{"class":5206},[103,40079,159],{"class":109},[103,40081,38447],{"class":162},[103,40083,491],{"class":113},[103,40085,30855],{"class":5206},[103,40087,159],{"class":109},[103,40089,38447],{"class":162},[103,40091,491],{"class":113},[103,40093,30864],{"class":5206},[103,40095,159],{"class":109},[103,40097,185],{"class":162},[103,40099,491],{"class":113},[103,40101,30873],{"class":5206},[103,40103,159],{"class":109},[103,40105,331],{"class":162},[103,40107,38037],{"class":113},[103,40109,40110],{"class":105,"line":9783},[103,40111,38042],{"class":113},[103,40113,40114,40116,40118,40120,40122,40124,40126,40128,40130,40132,40134,40136,40138,40140,40142,40144,40146],{"class":105,"line":9788},[103,40115,38004],{"class":113},[103,40117,30846],{"class":5206},[103,40119,159],{"class":109},[103,40121,38447],{"class":162},[103,40123,491],{"class":113},[103,40125,30855],{"class":5206},[103,40127,159],{"class":109},[103,40129,38447],{"class":162},[103,40131,491],{"class":113},[103,40133,30864],{"class":5206},[103,40135,159],{"class":109},[103,40137,185],{"class":162},[103,40139,491],{"class":113},[103,40141,30873],{"class":5206},[103,40143,159],{"class":109},[103,40145,331],{"class":162},[103,40147,38037],{"class":113},[103,40149,40150],{"class":105,"line":9793},[103,40151,38042],{"class":113},[103,40153,40154,40156,40158,40160,40162,40164,40166,40168,40170,40172,40174,40176,40178],{"class":105,"line":9802},[103,40155,38087],{"class":113},[103,40157,30864],{"class":5206},[103,40159,159],{"class":109},[103,40161,191],{"class":162},[103,40163,491],{"class":113},[103,40165,30919],{"class":5206},[103,40167,159],{"class":109},[103,40169,191],{"class":162},[103,40171,491],{"class":113},[103,40173,30873],{"class":5206},[103,40175,159],{"class":109},[103,40177,305],{"class":162},[103,40179,120],{"class":113},[103,40181,40182],{"class":105,"line":9807},[103,40183,38116],{"class":113},[103,40185,40186],{"class":105,"line":9813},[103,40187,38754],{"class":172},[103,40189,40190,40192,40194,40196],{"class":105,"line":9834},[103,40191,30835],{"class":162},[103,40193,38761],{"class":113},[103,40195,159],{"class":109},[103,40197,37999],{"class":113},[103,40199,40200],{"class":105,"line":9840},[103,40201,38770],{"class":172},[103,40203,40204],{"class":105,"line":9854},[103,40205,38775],{"class":172},[103,40207,40208],{"class":105,"line":9860},[103,40209,38780],{"class":113},[103,40211,40212,40214,40216,40218,40220,40222,40224,40226,40228],{"class":105,"line":9887},[103,40213,38785],{"class":113},[103,40215,482],{"class":162},[103,40217,568],{"class":109},[103,40219,482],{"class":162},[103,40221,568],{"class":109},[103,40223,38447],{"class":162},[103,40225,491],{"class":113},[103,40227,34860],{"class":162},[103,40229,38037],{"class":113},[103,40231,40232],{"class":105,"line":9896},[103,40233,38042],{"class":113},[103,40235,40236,40238,40240,40242,40244],{"class":105,"line":9902},[103,40237,38785],{"class":113},[103,40239,34860],{"class":162},[103,40241,491],{"class":113},[103,40243,32060],{"class":162},[103,40245,38037],{"class":113},[103,40247,40248],{"class":105,"line":9910},[103,40249,38042],{"class":113},[103,40251,40252,40254,40256,40258,40260],{"class":105,"line":9915},[103,40253,38785],{"class":113},[103,40255,32060],{"class":162},[103,40257,491],{"class":113},[103,40259,559],{"class":162},[103,40261,120],{"class":113},[103,40263,40264],{"class":105,"line":16594},[103,40265,38116],{"class":113},[103,40267,40268],{"class":105,"line":16600},[103,40269,2389],{"emptyLinePlaceholder":30},[103,40271,40272],{"class":105,"line":16623},[103,40273,38846],{"class":172},[103,40275,40276],{"class":105,"line":16629},[103,40277,38851],{"class":172},[103,40279,40280,40282,40284,40286,40288],{"class":105,"line":16652},[103,40281,3392],{"class":109},[103,40283,38858],{"class":113},[103,40285,26033],{"class":109},[103,40287,38863],{"class":162},[103,40289,38866],{"class":113},[103,40291,40292],{"class":105,"line":16666},[103,40293,38871],{"class":172},[103,40295,40296,40298,40300],{"class":105,"line":16686},[103,40297,4631],{"class":109},[103,40299,38878],{"class":162},[103,40301,38881],{"class":113},[103,40303,40304],{"class":105,"line":16692},[103,40305,38886],{"class":172},[103,40307,40308,40310,40312,40314,40316],{"class":105,"line":16703},[103,40309,38891],{"class":113},[103,40311,38894],{"class":5206},[103,40313,159],{"class":109},[103,40315,38899],{"class":218},[103,40317,120],{"class":113},[103,40319,40320],{"class":105,"line":16726},[103,40321,38906],{"class":172},[103,40323,40324,40326,40328,40330,40332,40334],{"class":105,"line":16748},[103,40325,38911],{"class":109},[103,40327,38914],{"class":113},[103,40329,38917],{"class":109},[103,40331,38920],{"class":109},[103,40333,38923],{"class":162},[103,40335,3728],{"class":113},[103,40337,40338],{"class":105,"line":16753},[103,40339,38930],{"class":172},[103,40341,40342,40344,40346],{"class":105,"line":16759},[103,40343,38935],{"class":113},[103,40345,305],{"class":162},[103,40347,120],{"class":113},[103,40349,40350],{"class":105,"line":16773},[103,40351,38944],{"class":172},[103,40353,40354,40356,40358],{"class":105,"line":16786},[103,40355,38949],{"class":109},[103,40357,38878],{"class":162},[103,40359,38954],{"class":113},[103,40361,40362],{"class":105,"line":16791},[103,40363,38959],{"class":172},[103,40365,40366],{"class":105,"line":16805},[103,40367,38964],{"class":172},[103,40369,40370,40372,40374,40376,40378],{"class":105,"line":16810},[103,40371,38969],{"class":113},[103,40373,305],{"class":162},[103,40375,491],{"class":113},[103,40377,38976],{"class":162},[103,40379,120],{"class":113},[103,40381,40382],{"class":105,"line":16816},[103,40383,38983],{"class":172},[103,40385,40386,40388,40390,40392,40394,40396],{"class":105,"line":16821},[103,40387,38911],{"class":109},[103,40389,38914],{"class":113},[103,40391,38917],{"class":109},[103,40393,38920],{"class":109},[103,40395,38923],{"class":162},[103,40397,3728],{"class":113},[103,40399,40400,40402,40404],{"class":105,"line":16835},[103,40401,38935],{"class":113},[103,40403,305],{"class":162},[103,40405,120],{"class":113},[103,40407,40408],{"class":105,"line":16840},[103,40409,2389],{"emptyLinePlaceholder":30},[103,40411,40412],{"class":105,"line":16845},[103,40413,35155],{"class":172},[103,40415,40416,40418,40420],{"class":105,"line":16859},[103,40417,30791],{"class":109},[103,40419,31083],{"class":1952},[103,40421,31086],{"class":113},[103,40423,40424,40426,40428,40430],{"class":105,"line":16871},[103,40425,31091],{"class":113},[103,40427,159],{"class":109},[103,40429,30813],{"class":162},[103,40431,39032],{"class":113},[103,40433,40434,40436,40438,40440],{"class":105,"line":16876},[103,40435,31091],{"class":113},[103,40437,159],{"class":109},[103,40439,30813],{"class":162},[103,40441,39043],{"class":113},[103,40443,40444,40446,40448,40450],{"class":105,"line":16889},[103,40445,31091],{"class":113},[103,40447,159],{"class":109},[103,40449,30813],{"class":162},[103,40451,39054],{"class":113},[103,40453,40454,40456,40458,40460],{"class":105,"line":16894},[103,40455,31091],{"class":113},[103,40457,159],{"class":109},[103,40459,30813],{"class":162},[103,40461,39065],{"class":113},[103,40463,40464,40466,40468,40470],{"class":105,"line":16899},[103,40465,31091],{"class":113},[103,40467,159],{"class":109},[103,40469,30813],{"class":162},[103,40471,39076],{"class":113},[103,40473,40474,40476,40478,40480],{"class":105,"line":16904},[103,40475,31091],{"class":113},[103,40477,159],{"class":109},[103,40479,30813],{"class":162},[103,40481,39087],{"class":113},[103,40483,40484,40486],{"class":105,"line":16917},[103,40485,14742],{"class":109},[103,40487,31199],{"class":113},[103,40489,40490],{"class":105,"line":16922},[103,40491,2389],{"emptyLinePlaceholder":30},[103,40493,40494],{"class":105,"line":32623},[103,40495,39102],{"class":172},[103,40497,40498,40500,40502,40504,40506],{"class":105,"line":32629},[103,40499,1520],{"class":109},[103,40501,31210],{"class":162},[103,40503,2938],{"class":109},[103,40505,39113],{"class":218},[103,40507,3728],{"class":113},[103,40509,40510,40512,40514,40516,40518,40520,40522,40524,40526],{"class":105,"line":32635},[103,40511,31227],{"class":113},[103,40513,159],{"class":109},[103,40515,30441],{"class":113},[103,40517,31234],{"class":218},[103,40519,1693],{"class":109},[103,40521,31239],{"class":113},[103,40523,1690],{"class":109},[103,40525,30466],{"class":218},[103,40527,120],{"class":113},[103,40529,40530,40532],{"class":105,"line":32641},[103,40531,31289],{"class":162},[103,40533,30475],{"class":113},[103,40535,40536,40538,40540],{"class":105,"line":32647},[103,40537,31279],{"class":113},[103,40539,159],{"class":109},[103,40541,39150],{"class":113},[103,40543,40544,40546,40548,40550,40552,40554,40556,40558],{"class":105,"line":32658},[103,40545,31289],{"class":162},[103,40547,31292],{"class":113},[103,40549,331],{"class":162},[103,40551,491],{"class":113},[103,40553,31491],{"class":162},[103,40555,491],{"class":113},[103,40557,31491],{"class":162},[103,40559,31305],{"class":113},[57,40561,40562],{"start":1168},[60,40563,40564],{},"测试代码",[94,40566,40568],{"className":30368,"code":40567,"language":30370,"meta":24,"style":24},"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",[100,40569,40570,40576,40586,40596,40600,40610,40621,40625,40629,40633,40641,40657,40667,40683,40693,40707,40711,40721,40731,40741,40747,40751,40755,40763,40767,40783,40791,40795,40799,40807,40815,40819,40823,40827,40831,40837,40841,40851,40859,40867,40871,40875,40879,40887,40891,40907,40911,40915,40919,40931,40935,40947,40951,40955,40967,40971,40981,40985,40989,41001,41005,41014,41018,41022,41030,41034,41042,41046,41050,41054,41058,41062,41078,41086,41090,41094,41142,41148,41152,41162,41170,41178,41182,41186,41190,41194,41202,41206,41222,41226,41234,41242],{"__ignoreMap":24},[103,40571,40572,40574],{"class":105,"line":106},[103,40573,30382],{"class":109},[103,40575,30385],{"class":113},[103,40577,40578,40580,40582,40584],{"class":105,"line":25},[103,40579,30382],{"class":109},[103,40581,31405],{"class":113},[103,40583,31373],{"class":109},[103,40585,31410],{"class":113},[103,40587,40588,40590,40592,40594],{"class":105,"line":1168},[103,40589,30727],{"class":109},[103,40591,31388],{"class":113},[103,40593,30382],{"class":109},[103,40595,31393],{"class":113},[103,40597,40598],{"class":105,"line":1183},[103,40599,33912],{"class":172},[103,40601,40602,40604,40606,40608],{"class":105,"line":1189},[103,40603,30727],{"class":109},[103,40605,31358],{"class":113},[103,40607,30382],{"class":109},[103,40609,31363],{"class":113},[103,40611,40612,40614,40616,40618],{"class":105,"line":1203},[103,40613,30727],{"class":109},[103,40615,31904],{"class":113},[103,40617,30382],{"class":109},[103,40619,40620],{"class":162}," VGG16\n",[103,40622,40623],{"class":105,"line":1209},[103,40624,2389],{"emptyLinePlaceholder":30},[103,40626,40627],{"class":105,"line":1300},[103,40628,2389],{"emptyLinePlaceholder":30},[103,40630,40631],{"class":105,"line":1306},[103,40632,33941],{"class":172},[103,40634,40635,40637,40639],{"class":105,"line":1318},[103,40636,31937],{"class":109},[103,40638,33948],{"class":1952},[103,40640,31943],{"class":113},[103,40642,40643,40645,40647,40649,40651,40653,40655],{"class":105,"line":1601},[103,40644,33955],{"class":113},[103,40646,159],{"class":109},[103,40648,31445],{"class":113},[103,40650,31448],{"class":5206},[103,40652,159],{"class":109},[103,40654,31453],{"class":218},[103,40656,31456],{"class":113},[103,40658,40659,40661,40663,40665],{"class":105,"line":1606},[103,40660,33972],{"class":5206},[103,40662,159],{"class":109},[103,40664,33977],{"class":162},[103,40666,31456],{"class":113},[103,40668,40669,40671,40673,40675,40677,40679,40681],{"class":105,"line":1612},[103,40670,33984],{"class":5206},[103,40672,159],{"class":109},[103,40674,31483],{"class":113},[103,40676,31486],{"class":5206},[103,40678,159],{"class":109},[103,40680,31491],{"class":162},[103,40682,31494],{"class":113},[103,40684,40685,40687,40689,40691],{"class":105,"line":1617},[103,40686,34001],{"class":5206},[103,40688,159],{"class":109},[103,40690,31466],{"class":162},[103,40692,120],{"class":113},[103,40694,40695,40697,40699,40701,40703,40705],{"class":105,"line":1631},[103,40696,34012],{"class":113},[103,40698,159],{"class":109},[103,40700,31524],{"class":113},[103,40702,31527],{"class":5206},[103,40704,159],{"class":109},[103,40706,34023],{"class":113},[103,40708,40709],{"class":105,"line":1636},[103,40710,34028],{"class":172},[103,40712,40713,40715,40717,40719],{"class":105,"line":1642},[103,40714,34033],{"class":5206},[103,40716,159],{"class":109},[103,40718,331],{"class":162},[103,40720,31456],{"class":113},[103,40722,40723,40725,40727,40729],{"class":105,"line":1663},[103,40724,34044],{"class":5206},[103,40726,159],{"class":109},[103,40728,31466],{"class":162},[103,40730,31456],{"class":113},[103,40732,40733,40735,40737,40739],{"class":105,"line":1668},[103,40734,34055],{"class":5206},[103,40736,159],{"class":109},[103,40738,305],{"class":162},[103,40740,120],{"class":113},[103,40742,40743,40745],{"class":105,"line":1682},[103,40744,4079],{"class":109},[103,40746,34068],{"class":113},[103,40748,40749],{"class":105,"line":1687},[103,40750,2389],{"emptyLinePlaceholder":30},[103,40752,40753],{"class":105,"line":1716},[103,40754,34077],{"class":172},[103,40756,40757,40759,40761],{"class":105,"line":1721},[103,40758,31937],{"class":109},[103,40760,34084],{"class":1952},[103,40762,34087],{"class":113},[103,40764,40765],{"class":105,"line":1738},[103,40766,34092],{"class":172},[103,40768,40769,40771,40773,40775,40777,40779,40781],{"class":105,"line":1743},[103,40770,31227],{"class":113},[103,40772,159],{"class":109},[103,40774,31234],{"class":218},[103,40776,1693],{"class":109},[103,40778,31239],{"class":113},[103,40780,1690],{"class":109},[103,40782,34109],{"class":218},[103,40784,40785,40787,40789],{"class":105,"line":1748},[103,40786,31279],{"class":113},[103,40788,159],{"class":109},[103,40790,32279],{"class":113},[103,40792,40793],{"class":105,"line":1753},[103,40794,2389],{"emptyLinePlaceholder":30},[103,40796,40797],{"class":105,"line":1767},[103,40798,34126],{"class":172},[103,40800,40801,40803,40805],{"class":105,"line":1772},[103,40802,34131],{"class":113},[103,40804,159],{"class":109},[103,40806,32332],{"class":162},[103,40808,40809,40811,40813],{"class":105,"line":2566},[103,40810,34140],{"class":113},[103,40812,159],{"class":109},[103,40814,3074],{"class":162},[103,40816,40817],{"class":105,"line":2580},[103,40818,2389],{"emptyLinePlaceholder":30},[103,40820,40821],{"class":105,"line":2588},[103,40822,34153],{"class":172},[103,40824,40825],{"class":105,"line":2593},[103,40826,34158],{"class":172},[103,40828,40829],{"class":105,"line":2599},[103,40830,34163],{"class":172},[103,40832,40833,40835],{"class":105,"line":2605},[103,40834,34168],{"class":109},[103,40836,32874],{"class":113},[103,40838,40839],{"class":105,"line":2610},[103,40840,34175],{"class":172},[103,40842,40843,40845,40847,40849],{"class":105,"line":7938},[103,40844,3392],{"class":109},[103,40846,34182],{"class":113},[103,40848,26033],{"class":109},[103,40850,34187],{"class":113},[103,40852,40853,40855,40857],{"class":105,"line":7962},[103,40854,34192],{"class":113},[103,40856,159],{"class":109},[103,40858,34197],{"class":113},[103,40860,40861,40863,40865],{"class":105,"line":7967},[103,40862,34202],{"class":113},[103,40864,159],{"class":109},[103,40866,34207],{"class":113},[103,40868,40869],{"class":105,"line":7973},[103,40870,34212],{"class":172},[103,40872,40873],{"class":105,"line":8000},[103,40874,32865],{"class":113},[103,40876,40877],{"class":105,"line":8005},[103,40878,34221],{"class":172},[103,40880,40881,40883,40885],{"class":105,"line":8011},[103,40882,32650],{"class":113},[103,40884,159],{"class":109},[103,40886,34230],{"class":113},[103,40888,40889],{"class":105,"line":8023},[103,40890,34235],{"class":172},[103,40892,40893,40895,40897,40899,40901,40903,40905],{"class":105,"line":8035},[103,40894,32667],{"class":113},[103,40896,159],{"class":109},[103,40898,32672],{"class":113},[103,40900,32675],{"class":5206},[103,40902,159],{"class":109},[103,40904,331],{"class":162},[103,40906,120],{"class":113},[103,40908,40909],{"class":105,"line":8047},[103,40910,34256],{"class":172},[103,40912,40913],{"class":105,"line":9706},[103,40914,34261],{"class":172},[103,40916,40917],{"class":105,"line":9731},[103,40918,34266],{"class":172},[103,40920,40921,40923,40925,40927,40929],{"class":105,"line":9754},[103,40922,34271],{"class":113},[103,40924,9467],{"class":109},[103,40926,32777],{"class":113},[103,40928,2938],{"class":109},[103,40930,34280],{"class":113},[103,40932,40933],{"class":105,"line":9778},[103,40934,34285],{"class":172},[103,40936,40937,40939,40941,40943,40945],{"class":105,"line":9783},[103,40938,34290],{"class":113},[103,40940,9467],{"class":109},[103,40942,34295],{"class":113},[103,40944,305],{"class":162},[103,40946,120],{"class":113},[103,40948,40949],{"class":105,"line":9788},[103,40950,2389],{"emptyLinePlaceholder":30},[103,40952,40953],{"class":105,"line":9793},[103,40954,34308],{"class":172},[103,40956,40957,40959,40961,40963,40965],{"class":105,"line":9802},[103,40958,34313],{"class":113},[103,40960,159],{"class":109},[103,40962,34318],{"class":113},[103,40964,697],{"class":109},[103,40966,34323],{"class":113},[103,40968,40969],{"class":105,"line":9807},[103,40970,34328],{"class":172},[103,40972,40973,40975,40977,40979],{"class":105,"line":9813},[103,40974,32441],{"class":162},[103,40976,114],{"class":113},[103,40978,34337],{"class":218},[103,40980,34340],{"class":113},[103,40982,40983],{"class":105,"line":9834},[103,40984,2389],{"emptyLinePlaceholder":30},[103,40986,40987],{"class":105,"line":9840},[103,40988,34349],{"class":172},[103,40990,40991,40993,40995,40997,40999],{"class":105,"line":9854},[103,40992,1520],{"class":109},[103,40994,31210],{"class":162},[103,40996,2938],{"class":109},[103,40998,31215],{"class":218},[103,41000,3728],{"class":113},[103,41002,41003],{"class":105,"line":9860},[103,41004,34366],{"class":172},[103,41006,41007,41009,41011],{"class":105,"line":9887},[103,41008,31279],{"class":113},[103,41010,159],{"class":109},[103,41012,41013],{"class":113},"VGG16()\n",[103,41015,41016],{"class":105,"line":9896},[103,41017,34379],{"class":172},[103,41019,41020],{"class":105,"line":9902},[103,41021,34384],{"class":172},[103,41023,41024,41026,41028],{"class":105,"line":9910},[103,41025,34389],{"class":113},[103,41027,34392],{"class":218},[103,41029,30487],{"class":113},[103,41031,41032],{"class":105,"line":9915},[103,41033,34399],{"class":172},[103,41035,41036,41038,41040],{"class":105,"line":16594},[103,41037,34012],{"class":113},[103,41039,159],{"class":109},[103,41041,34408],{"class":113},[103,41043,41044],{"class":105,"line":16600},[103,41045,34413],{"class":172},[103,41047,41048],{"class":105,"line":16623},[103,41049,34418],{"class":113},[103,41051,41052],{"class":105,"line":16629},[103,41053,2389],{"emptyLinePlaceholder":30},[103,41055,41056],{"class":105,"line":16652},[103,41057,34427],{"class":172},[103,41059,41060],{"class":105,"line":16666},[103,41061,34432],{"class":172},[103,41063,41064,41066,41068,41070,41072,41074,41076],{"class":105,"line":16686},[103,41065,31227],{"class":113},[103,41067,159],{"class":109},[103,41069,31234],{"class":218},[103,41071,1693],{"class":109},[103,41073,31239],{"class":113},[103,41075,1690],{"class":109},[103,41077,34109],{"class":218},[103,41079,41080,41082,41084],{"class":105,"line":16692},[103,41081,31279],{"class":113},[103,41083,159],{"class":109},[103,41085,32279],{"class":113},[103,41087,41088],{"class":105,"line":16703},[103,41089,34461],{"class":172},[103,41091,41092],{"class":105,"line":16726},[103,41093,34466],{"class":172},[103,41095,41096,41098,41100,41102,41104,41106,41108,41110,41112,41114,41116,41118,41120,41122,41124,41126,41128,41130,41132,41134,41136,41138,41140],{"class":105,"line":16748},[103,41097,34471],{"class":113},[103,41099,159],{"class":109},[103,41101,1003],{"class":113},[103,41103,34478],{"class":218},[103,41105,491],{"class":113},[103,41107,34483],{"class":218},[103,41109,491],{"class":113},[103,41111,34488],{"class":218},[103,41113,491],{"class":113},[103,41115,34493],{"class":218},[103,41117,491],{"class":113},[103,41119,34498],{"class":218},[103,41121,491],{"class":113},[103,41123,34503],{"class":218},[103,41125,491],{"class":113},[103,41127,34508],{"class":218},[103,41129,491],{"class":113},[103,41131,34513],{"class":218},[103,41133,491],{"class":113},[103,41135,34518],{"class":218},[103,41137,491],{"class":113},[103,41139,34523],{"class":218},[103,41141,33236],{"class":113},[103,41143,41144,41146],{"class":105,"line":16753},[103,41145,34168],{"class":109},[103,41147,32874],{"class":113},[103,41149,41150],{"class":105,"line":16759},[103,41151,34536],{"class":172},[103,41153,41154,41156,41158,41160],{"class":105,"line":16773},[103,41155,3392],{"class":109},[103,41157,34543],{"class":113},[103,41159,26033],{"class":109},[103,41161,34187],{"class":113},[103,41163,41164,41166,41168],{"class":105,"line":16786},[103,41165,32600],{"class":113},[103,41167,159],{"class":109},[103,41169,32605],{"class":113},[103,41171,41172,41174,41176],{"class":105,"line":16791},[103,41173,32615],{"class":113},[103,41175,159],{"class":109},[103,41177,32620],{"class":113},[103,41179,41180],{"class":105,"line":16805},[103,41181,2389],{"emptyLinePlaceholder":30},[103,41183,41184],{"class":105,"line":16810},[103,41185,34572],{"class":172},[103,41187,41188],{"class":105,"line":16816},[103,41189,32865],{"class":113},[103,41191,41192],{"class":105,"line":16821},[103,41193,34581],{"class":172},[103,41195,41196,41198,41200],{"class":105,"line":16835},[103,41197,32650],{"class":113},[103,41199,159],{"class":109},[103,41201,32655],{"class":113},[103,41203,41204],{"class":105,"line":16840},[103,41205,34594],{"class":172},[103,41207,41208,41210,41212,41214,41216,41218,41220],{"class":105,"line":16845},[103,41209,32667],{"class":113},[103,41211,159],{"class":109},[103,41213,32672],{"class":113},[103,41215,32675],{"class":5206},[103,41217,159],{"class":109},[103,41219,331],{"class":162},[103,41221,120],{"class":113},[103,41223,41224],{"class":105,"line":16859},[103,41225,34615],{"class":172},[103,41227,41228,41230,41232],{"class":105,"line":16871},[103,41229,34620],{"class":113},[103,41231,159],{"class":109},[103,41233,34625],{"class":113},[103,41235,41236,41238,41240],{"class":105,"line":16876},[103,41237,34630],{"class":113},[103,41239,159],{"class":109},[103,41241,34635],{"class":113},[103,41243,41244,41246,41248,41250,41252,41254,41256,41258],{"class":105,"line":16889},[103,41245,34640],{"class":162},[103,41247,114],{"class":113},[103,41249,34645],{"class":218},[103,41251,34648],{"class":113},[103,41253,34651],{"class":218},[103,41255,491],{"class":113},[103,41257,34656],{"class":218},[103,41259,34659],{"class":113},[74,41261,41263],{"id":41262},"_23googlenet","2.3.GoogLeNet",[21988,41265,41267],{"id":41266},"_231原理","2.3.1.原理",[57,41269,41270],{},[60,41271,41272],{},"网络结构",[14,41274,41275],{},[1451,41276],{"alt":24,"src":41277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[14,41279,41280],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41282,41283],{},[1451,41284],{"alt":24,"src":41285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,41287,41288],{},[1451,41289],{"alt":24,"src":41290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,41292,41293],{},[1451,41294],{"alt":24,"src":41295},"\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",[57,41297,41298],{"start":25},[60,41299,41300],{},"1x1卷积的优点",[14,41302,41303],{},[1451,41304],{"alt":24,"src":41305},"\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",[57,41307,41308],{"start":1168},[60,41309,41310],{},"全局平均池化层优点",[14,41312,41313],{},[1451,41314],{"alt":24,"src":41315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,41317,41318],{},[1451,41319],{"alt":24,"src":41320},"\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",[57,41322,41323],{"start":1183},[60,41324,41325],{},"参数详细描述",[14,41327,41328],{},[1451,41329],{"alt":24,"src":41330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[14,41332,41333],{},[1451,41334],{"alt":24,"src":41335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,41337,41338],{},[1451,41339],{"alt":24,"src":41340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[14,41342,41343],{},[1451,41344],{"alt":24,"src":41345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,41347,41348],{},[1451,41349],{"alt":24,"src":41350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,41352,41353],{},[1451,41354],{"alt":24,"src":41355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[14,41357,41358],{},[1451,41359],{"alt":24,"src":41360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[14,41362,41363],{},[1451,41364],{"alt":24,"src":41365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[14,41367,41368],{},[1451,41369],{"alt":24,"src":41370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[14,41372,41373],{},[1451,41374],{"alt":24,"src":41375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[14,41377,41378],{},[1451,41379],{"alt":24,"src":41380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,41382,41383],{},[1451,41384],{"alt":24,"src":41385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[14,41387,41388],{},[1451,41389],{"alt":24,"src":41390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[14,41392,41393],{},[1451,41394],{"alt":24,"src":41395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,41397,41398],{},[1451,41399],{"alt":24,"src":41400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[14,41402,41403],{},[1451,41404],{"alt":24,"src":41405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[14,41407,41408],{},[1451,41409],{"alt":24,"src":41410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[14,41412,41413],{},[1451,41414],{"alt":24,"src":41415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[14,41417,41418],{},[1451,41419],{"alt":24,"src":41420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[14,41422,41423],{},[1451,41424],{"alt":24,"src":41425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[14,41427,41428],{},[1451,41429],{"alt":24,"src":41430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-050.png",[21988,41432,41434],{"id":41433},"_232代码实现","2.3.2.代码实现",[57,41436,41437],{},[60,41438,30701],{},[14,41440,41441],{},"根据原理一步一步搭建即可",[94,41443,41445],{"className":30368,"code":41444,"language":30370,"meta":24,"style":24},"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",[100,41446,41447,41453,41463,41473,41477,41494,41503,41518,41528,41533,41566,41571,41608,41655,41660,41696,41743,41748,41753,41788,41820,41824,41832,41848,41872,41897,41918,41923,41938,41942,41946,41951,41968,41973,41982,41997,42008,42052,42056,42084,42088,42099,42127,42131,42168,42172,42200,42204,42215,42251,42283,42311,42315,42326,42360,42392,42424,42457,42491,42519,42523,42534,42567,42599,42613,42617,42630,42634,42639,42651,42659,42681,42686,42691,42696,42701,42706,42711,42725,42733,42742,42755,42770,42779,42783,42791,42802,42813,42824,42835,42846,42852,42856,42861,42873,42893,42902],{"__ignoreMap":24},[103,41448,41449,41451],{"class":105,"line":106},[103,41450,30382],{"class":109},[103,41452,30385],{"class":113},[103,41454,41455,41457,41459,41461],{"class":105,"line":25},[103,41456,30727],{"class":109},[103,41458,30730],{"class":113},[103,41460,30382],{"class":109},[103,41462,30735],{"class":113},[103,41464,41465,41467,41469,41471],{"class":105,"line":1168},[103,41466,30727],{"class":109},[103,41468,30747],{"class":113},[103,41470,30382],{"class":109},[103,41472,30752],{"class":113},[103,41474,41475],{"class":105,"line":1183},[103,41476,2389],{"emptyLinePlaceholder":30},[103,41478,41479,41481,41484,41486,41488,41490,41492],{"class":105,"line":1189},[103,41480,14684],{"class":109},[103,41482,41483],{"class":1952}," Inception",[103,41485,114],{"class":113},[103,41487,30768],{"class":1952},[103,41489,671],{"class":113},[103,41491,30773],{"class":1952},[103,41493,30776],{"class":113},[103,41495,41496,41498,41500],{"class":105,"line":1203},[103,41497,30791],{"class":109},[103,41499,30794],{"class":162},[103,41501,41502],{"class":113},"(self,in_channels,c1,c2,c3,c4):\n",[103,41504,41505,41507,41510,41512,41514,41516],{"class":105,"line":1209},[103,41506,30807],{"class":162},[103,41508,41509],{"class":113},"(Inception,",[103,41511,30813],{"class":162},[103,41513,30816],{"class":113},[103,41515,30819],{"class":162},[103,41517,1965],{"class":113},[103,41519,41520,41522,41524,41526],{"class":105,"line":1300},[103,41521,30835],{"class":162},[103,41523,34761],{"class":113},[103,41525,159],{"class":109},[103,41527,34766],{"class":113},[103,41529,41530],{"class":105,"line":1306},[103,41531,41532],{"class":172},"        # 路线1：定义1*1卷积\n",[103,41534,41535,41537,41540,41542,41544,41546,41548,41551,41553,41555,41558,41560,41562,41564],{"class":105,"line":1318},[103,41536,30835],{"class":162},[103,41538,41539],{"class":113},".p1_1",[103,41541,159],{"class":109},[103,41543,30843],{"class":113},[103,41545,30846],{"class":5206},[103,41547,159],{"class":109},[103,41549,41550],{"class":113},"in_channels,",[103,41552,30855],{"class":5206},[103,41554,159],{"class":109},[103,41556,41557],{"class":113},"c1,",[103,41559,30864],{"class":5206},[103,41561,159],{"class":109},[103,41563,331],{"class":162},[103,41565,120],{"class":113},[103,41567,41568],{"class":105,"line":1601},[103,41569,41570],{"class":172},"        # 路线2：定义1*1卷积和3*3\n",[103,41572,41573,41575,41578,41580,41582,41584,41586,41588,41590,41592,41595,41597,41600,41602,41604,41606],{"class":105,"line":1606},[103,41574,30835],{"class":162},[103,41576,41577],{"class":113},".p2_1",[103,41579,159],{"class":109},[103,41581,30843],{"class":113},[103,41583,30846],{"class":5206},[103,41585,159],{"class":109},[103,41587,41550],{"class":113},[103,41589,30855],{"class":5206},[103,41591,159],{"class":109},[103,41593,41594],{"class":113},"c2[",[103,41596,305],{"class":162},[103,41598,41599],{"class":113},"],",[103,41601,30864],{"class":5206},[103,41603,159],{"class":109},[103,41605,331],{"class":162},[103,41607,120],{"class":113},[103,41609,41610,41612,41615,41617,41619,41621,41623,41625,41627,41629,41631,41633,41635,41637,41639,41641,41643,41645,41647,41649,41651,41653],{"class":105,"line":1612},[103,41611,30835],{"class":162},[103,41613,41614],{"class":113},".p2_2",[103,41616,159],{"class":109},[103,41618,30843],{"class":113},[103,41620,30846],{"class":5206},[103,41622,159],{"class":109},[103,41624,41594],{"class":113},[103,41626,305],{"class":162},[103,41628,41599],{"class":113},[103,41630,30855],{"class":5206},[103,41632,159],{"class":109},[103,41634,41594],{"class":113},[103,41636,331],{"class":162},[103,41638,41599],{"class":113},[103,41640,30864],{"class":5206},[103,41642,159],{"class":109},[103,41644,185],{"class":162},[103,41646,491],{"class":113},[103,41648,30873],{"class":5206},[103,41650,159],{"class":109},[103,41652,331],{"class":162},[103,41654,120],{"class":113},[103,41656,41657],{"class":105,"line":1617},[103,41658,41659],{"class":172},"        # 路线3：定义1*1卷积和5*5\n",[103,41661,41662,41664,41667,41669,41671,41673,41675,41677,41679,41681,41684,41686,41688,41690,41692,41694],{"class":105,"line":1631},[103,41663,30835],{"class":162},[103,41665,41666],{"class":113},".p3_1",[103,41668,159],{"class":109},[103,41670,30843],{"class":113},[103,41672,30846],{"class":5206},[103,41674,159],{"class":109},[103,41676,41550],{"class":113},[103,41678,30855],{"class":5206},[103,41680,159],{"class":109},[103,41682,41683],{"class":113},"c3[",[103,41685,305],{"class":162},[103,41687,41599],{"class":113},[103,41689,30864],{"class":5206},[103,41691,159],{"class":109},[103,41693,331],{"class":162},[103,41695,120],{"class":113},[103,41697,41698,41700,41703,41705,41707,41709,41711,41713,41715,41717,41719,41721,41723,41725,41727,41729,41731,41733,41735,41737,41739,41741],{"class":105,"line":1636},[103,41699,30835],{"class":162},[103,41701,41702],{"class":113},".p3_2",[103,41704,159],{"class":109},[103,41706,30843],{"class":113},[103,41708,30846],{"class":5206},[103,41710,159],{"class":109},[103,41712,41683],{"class":113},[103,41714,305],{"class":162},[103,41716,41599],{"class":113},[103,41718,30855],{"class":5206},[103,41720,159],{"class":109},[103,41722,41683],{"class":113},[103,41724,331],{"class":162},[103,41726,41599],{"class":113},[103,41728,30864],{"class":5206},[103,41730,159],{"class":109},[103,41732,432],{"class":162},[103,41734,491],{"class":113},[103,41736,30873],{"class":5206},[103,41738,159],{"class":109},[103,41740,191],{"class":162},[103,41742,120],{"class":113},[103,41744,41745],{"class":105,"line":1642},[103,41746,41747],{"class":172},"        # 路线4：定义3*3最大池化和1*1卷积\n",[103,41749,41750],{"class":105,"line":1663},[103,41751,41752],{"class":172},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[103,41754,41755,41757,41760,41762,41764,41766,41768,41770,41772,41774,41776,41778,41780,41782,41784,41786],{"class":105,"line":1668},[103,41756,30835],{"class":162},[103,41758,41759],{"class":113},".p4_1",[103,41761,159],{"class":109},[103,41763,34819],{"class":113},[103,41765,30864],{"class":5206},[103,41767,159],{"class":109},[103,41769,185],{"class":162},[103,41771,491],{"class":113},[103,41773,30919],{"class":5206},[103,41775,159],{"class":109},[103,41777,331],{"class":162},[103,41779,491],{"class":113},[103,41781,30873],{"class":5206},[103,41783,159],{"class":109},[103,41785,331],{"class":162},[103,41787,120],{"class":113},[103,41789,41790,41792,41795,41797,41799,41801,41803,41805,41807,41809,41812,41814,41816,41818],{"class":105,"line":1682},[103,41791,30835],{"class":162},[103,41793,41794],{"class":113},".p4_2",[103,41796,159],{"class":109},[103,41798,30843],{"class":113},[103,41800,30846],{"class":5206},[103,41802,159],{"class":109},[103,41804,41550],{"class":113},[103,41806,30855],{"class":5206},[103,41808,159],{"class":109},[103,41810,41811],{"class":113},"c4,",[103,41813,30864],{"class":5206},[103,41815,159],{"class":109},[103,41817,331],{"class":162},[103,41819,120],{"class":113},[103,41821,41822],{"class":105,"line":1687},[103,41823,2389],{"emptyLinePlaceholder":30},[103,41825,41826,41828,41830],{"class":105,"line":1716},[103,41827,30791],{"class":109},[103,41829,31083],{"class":1952},[103,41831,31086],{"class":113},[103,41833,41834,41837,41839,41841,41843,41845],{"class":105,"line":1721},[103,41835,41836],{"class":113},"        p1",[103,41838,159],{"class":109},[103,41840,30813],{"class":162},[103,41842,35174],{"class":113},[103,41844,30813],{"class":162},[103,41846,41847],{"class":113},".p1_1(x))\n",[103,41849,41850,41852,41854,41856,41858,41860,41863,41865,41867,41869],{"class":105,"line":1738},[103,41851,7075],{"class":113},[103,41853,159],{"class":109},[103,41855,30813],{"class":162},[103,41857,35174],{"class":113},[103,41859,30813],{"class":162},[103,41861,41862],{"class":113},".p2_2(",[103,41864,30813],{"class":162},[103,41866,35174],{"class":113},[103,41868,30813],{"class":162},[103,41870,41871],{"class":113},".p2_1(x))))\n",[103,41873,41874,41877,41879,41881,41883,41885,41888,41890,41892,41894],{"class":105,"line":1743},[103,41875,41876],{"class":113},"        p3",[103,41878,159],{"class":109},[103,41880,30813],{"class":162},[103,41882,35174],{"class":113},[103,41884,30813],{"class":162},[103,41886,41887],{"class":113},".p3_2(",[103,41889,30813],{"class":162},[103,41891,35174],{"class":113},[103,41893,30813],{"class":162},[103,41895,41896],{"class":113},".p3_1(x))))\n",[103,41898,41899,41902,41904,41906,41908,41910,41913,41915],{"class":105,"line":1748},[103,41900,41901],{"class":113},"        p4",[103,41903,159],{"class":109},[103,41905,30813],{"class":162},[103,41907,35174],{"class":113},[103,41909,30813],{"class":162},[103,41911,41912],{"class":113},".p4_2(",[103,41914,30813],{"class":162},[103,41916,41917],{"class":113},".p4_1(x)))\n",[103,41919,41920],{"class":105,"line":1753},[103,41921,41922],{"class":172},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[103,41924,41925,41927,41930,41932,41934,41936],{"class":105,"line":1767},[103,41926,14742],{"class":109},[103,41928,41929],{"class":113}," torch.cat((p1,p2,p3,p4),",[103,41931,32675],{"class":5206},[103,41933,159],{"class":109},[103,41935,331],{"class":162},[103,41937,120],{"class":113},[103,41939,41940],{"class":105,"line":1772},[103,41941,2389],{"emptyLinePlaceholder":30},[103,41943,41944],{"class":105,"line":2566},[103,41945,2389],{"emptyLinePlaceholder":30},[103,41947,41948],{"class":105,"line":2580},[103,41949,41950],{"class":172},"# 搭建GoogLeNet网络\n",[103,41952,41953,41955,41958,41960,41962,41964,41966],{"class":105,"line":2588},[103,41954,14684],{"class":109},[103,41956,41957],{"class":1952}," GoogLeNet",[103,41959,114],{"class":113},[103,41961,30768],{"class":1952},[103,41963,671],{"class":113},[103,41965,30773],{"class":1952},[103,41967,30776],{"class":113},[103,41969,41970],{"class":105,"line":2593},[103,41971,41972],{"class":172},"    # 必须把Inception导入到里边\n",[103,41974,41975,41977,41979],{"class":105,"line":2599},[103,41976,30791],{"class":109},[103,41978,30794],{"class":162},[103,41980,41981],{"class":113},"(self,Inception):\n",[103,41983,41984,41986,41989,41991,41993,41995],{"class":105,"line":2605},[103,41985,30807],{"class":162},[103,41987,41988],{"class":113},"(GoogLeNet,",[103,41990,30813],{"class":162},[103,41992,30816],{"class":113},[103,41994,30819],{"class":162},[103,41996,1965],{"class":113},[103,41998,41999,42001,42004,42006],{"class":105,"line":2610},[103,42000,30835],{"class":162},[103,42002,42003],{"class":113},".b1",[103,42005,159],{"class":109},[103,42007,37999],{"class":113},[103,42009,42010,42012,42014,42016,42018,42020,42022,42024,42026,42028,42030,42032,42034,42036,42038,42040,42042,42044,42046,42048,42050],{"class":105,"line":7938},[103,42011,38004],{"class":113},[103,42013,30846],{"class":5206},[103,42015,159],{"class":109},[103,42017,331],{"class":162},[103,42019,491],{"class":113},[103,42021,30855],{"class":5206},[103,42023,159],{"class":109},[103,42025,317],{"class":162},[103,42027,491],{"class":113},[103,42029,30864],{"class":5206},[103,42031,159],{"class":109},[103,42033,482],{"class":162},[103,42035,491],{"class":113},[103,42037,30919],{"class":5206},[103,42039,159],{"class":109},[103,42041,191],{"class":162},[103,42043,491],{"class":113},[103,42045,30873],{"class":5206},[103,42047,159],{"class":109},[103,42049,185],{"class":162},[103,42051,38037],{"class":113},[103,42053,42054],{"class":105,"line":7962},[103,42055,38042],{"class":113},[103,42057,42058,42060,42062,42064,42066,42068,42070,42072,42074,42076,42078,42080,42082],{"class":105,"line":7967},[103,42059,38087],{"class":113},[103,42061,30864],{"class":5206},[103,42063,159],{"class":109},[103,42065,185],{"class":162},[103,42067,491],{"class":113},[103,42069,30919],{"class":5206},[103,42071,159],{"class":109},[103,42073,191],{"class":162},[103,42075,491],{"class":113},[103,42077,30873],{"class":5206},[103,42079,159],{"class":109},[103,42081,331],{"class":162},[103,42083,120],{"class":113},[103,42085,42086],{"class":105,"line":7973},[103,42087,38116],{"class":113},[103,42089,42090,42092,42095,42097],{"class":105,"line":8000},[103,42091,30835],{"class":162},[103,42093,42094],{"class":113},".b2",[103,42096,159],{"class":109},[103,42098,37999],{"class":113},[103,42100,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125],{"class":105,"line":8005},[103,42102,38004],{"class":113},[103,42104,30846],{"class":5206},[103,42106,159],{"class":109},[103,42108,317],{"class":162},[103,42110,491],{"class":113},[103,42112,30855],{"class":5206},[103,42114,159],{"class":109},[103,42116,317],{"class":162},[103,42118,491],{"class":113},[103,42120,30864],{"class":5206},[103,42122,159],{"class":109},[103,42124,331],{"class":162},[103,42126,38037],{"class":113},[103,42128,42129],{"class":105,"line":8011},[103,42130,38042],{"class":113},[103,42132,42133,42135,42137,42139,42141,42143,42145,42147,42150,42152,42154,42156,42158,42160,42162,42164,42166],{"class":105,"line":8023},[103,42134,38004],{"class":113},[103,42136,30846],{"class":5206},[103,42138,159],{"class":109},[103,42140,317],{"class":162},[103,42142,491],{"class":113},[103,42144,30855],{"class":5206},[103,42146,159],{"class":109},[103,42148,42149],{"class":162},"192",[103,42151,491],{"class":113},[103,42153,30864],{"class":5206},[103,42155,159],{"class":109},[103,42157,185],{"class":162},[103,42159,491],{"class":113},[103,42161,30873],{"class":5206},[103,42163,159],{"class":109},[103,42165,331],{"class":162},[103,42167,38037],{"class":113},[103,42169,42170],{"class":105,"line":8035},[103,42171,38042],{"class":113},[103,42173,42174,42176,42178,42180,42182,42184,42186,42188,42190,42192,42194,42196,42198],{"class":105,"line":8047},[103,42175,38087],{"class":113},[103,42177,30864],{"class":5206},[103,42179,159],{"class":109},[103,42181,185],{"class":162},[103,42183,491],{"class":113},[103,42185,30919],{"class":5206},[103,42187,159],{"class":109},[103,42189,191],{"class":162},[103,42191,491],{"class":113},[103,42193,30873],{"class":5206},[103,42195,159],{"class":109},[103,42197,331],{"class":162},[103,42199,120],{"class":113},[103,42201,42202],{"class":105,"line":9706},[103,42203,38116],{"class":113},[103,42205,42206,42208,42211,42213],{"class":105,"line":9731},[103,42207,30835],{"class":162},[103,42209,42210],{"class":113},".b3",[103,42212,159],{"class":109},[103,42214,37999],{"class":113},[103,42216,42217,42220,42222,42224,42226,42229,42231,42233,42235,42238,42240,42242,42244,42247,42249],{"class":105,"line":9754},[103,42218,42219],{"class":113},"            Inception(",[103,42221,42149],{"class":162},[103,42223,491],{"class":113},[103,42225,317],{"class":162},[103,42227,42228],{"class":113},",(",[103,42230,323],{"class":162},[103,42232,491],{"class":113},[103,42234,32060],{"class":162},[103,42236,42237],{"class":113},"),(",[103,42239,714],{"class":162},[103,42241,491],{"class":113},[103,42243,311],{"class":162},[103,42245,42246],{"class":113},"),",[103,42248,311],{"class":162},[103,42250,38037],{"class":113},[103,42252,42253,42255,42257,42259,42261,42263,42265,42267,42269,42271,42273,42275,42277,42279,42281],{"class":105,"line":9778},[103,42254,42219],{"class":113},[103,42256,34860],{"class":162},[103,42258,491],{"class":113},[103,42260,32060],{"class":162},[103,42262,42228],{"class":113},[103,42264,32060],{"class":162},[103,42266,491],{"class":113},[103,42268,42149],{"class":162},[103,42270,42237],{"class":113},[103,42272,311],{"class":162},[103,42274,491],{"class":113},[103,42276,323],{"class":162},[103,42278,42246],{"class":113},[103,42280,317],{"class":162},[103,42282,38037],{"class":113},[103,42284,42285,42287,42289,42291,42293,42295,42297,42299,42301,42303,42305,42307,42309],{"class":105,"line":9783},[103,42286,38087],{"class":113},[103,42288,30864],{"class":5206},[103,42290,159],{"class":109},[103,42292,185],{"class":162},[103,42294,491],{"class":113},[103,42296,30919],{"class":5206},[103,42298,159],{"class":109},[103,42300,191],{"class":162},[103,42302,491],{"class":113},[103,42304,30873],{"class":5206},[103,42306,159],{"class":109},[103,42308,331],{"class":162},[103,42310,120],{"class":113},[103,42312,42313],{"class":105,"line":9788},[103,42314,38116],{"class":113},[103,42316,42317,42319,42322,42324],{"class":105,"line":9793},[103,42318,30835],{"class":162},[103,42320,42321],{"class":113},".b4",[103,42323,159],{"class":109},[103,42325,37999],{"class":113},[103,42327,42328,42330,42333,42335,42337,42339,42341,42343,42346,42348,42350,42352,42354,42356,42358],{"class":105,"line":9802},[103,42329,42219],{"class":113},[103,42331,42332],{"class":162},"480",[103,42334,491],{"class":113},[103,42336,42149],{"class":162},[103,42338,42228],{"class":113},[103,42340,323],{"class":162},[103,42342,491],{"class":113},[103,42344,42345],{"class":162},"208",[103,42347,42237],{"class":113},[103,42349,714],{"class":162},[103,42351,491],{"class":113},[103,42353,720],{"class":162},[103,42355,42246],{"class":113},[103,42357,317],{"class":162},[103,42359,38037],{"class":113},[103,42361,42362,42364,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386,42388,42390],{"class":105,"line":9807},[103,42363,42219],{"class":113},[103,42365,38447],{"class":162},[103,42367,491],{"class":113},[103,42369,21038],{"class":162},[103,42371,42228],{"class":113},[103,42373,731],{"class":162},[103,42375,491],{"class":113},[103,42377,31491],{"class":162},[103,42379,42237],{"class":113},[103,42381,913],{"class":162},[103,42383,491],{"class":113},[103,42385,317],{"class":162},[103,42387,42246],{"class":113},[103,42389,317],{"class":162},[103,42391,38037],{"class":113},[103,42393,42394,42396,42398,42400,42402,42404,42406,42408,42410,42412,42414,42416,42418,42420,42422],{"class":105,"line":9813},[103,42395,42219],{"class":113},[103,42397,38447],{"class":162},[103,42399,491],{"class":113},[103,42401,32060],{"class":162},[103,42403,42228],{"class":113},[103,42405,32060],{"class":162},[103,42407,491],{"class":113},[103,42409,34860],{"class":162},[103,42411,42237],{"class":113},[103,42413,913],{"class":162},[103,42415,491],{"class":113},[103,42417,317],{"class":162},[103,42419,42246],{"class":113},[103,42421,317],{"class":162},[103,42423,38037],{"class":113},[103,42425,42426,42428,42430,42432,42434,42436,42438,42440,42443,42445,42447,42449,42451,42453,42455],{"class":105,"line":9834},[103,42427,42219],{"class":113},[103,42429,38447],{"class":162},[103,42431,491],{"class":113},[103,42433,731],{"class":162},[103,42435,42228],{"class":113},[103,42437,32060],{"class":162},[103,42439,491],{"class":113},[103,42441,42442],{"class":162},"288",[103,42444,42237],{"class":113},[103,42446,311],{"class":162},[103,42448,491],{"class":113},[103,42450,317],{"class":162},[103,42452,42246],{"class":113},[103,42454,317],{"class":162},[103,42456,38037],{"class":113},[103,42458,42459,42461,42464,42466,42468,42470,42472,42474,42477,42479,42481,42483,42485,42487,42489],{"class":105,"line":9840},[103,42460,42219],{"class":113},[103,42462,42463],{"class":162},"528",[103,42465,491],{"class":113},[103,42467,34860],{"class":162},[103,42469,42228],{"class":113},[103,42471,21038],{"class":162},[103,42473,491],{"class":113},[103,42475,42476],{"class":162},"320",[103,42478,42237],{"class":113},[103,42480,311],{"class":162},[103,42482,491],{"class":113},[103,42484,32060],{"class":162},[103,42486,42246],{"class":113},[103,42488,32060],{"class":162},[103,42490,38037],{"class":113},[103,42492,42493,42495,42497,42499,42501,42503,42505,42507,42509,42511,42513,42515,42517],{"class":105,"line":9854},[103,42494,38087],{"class":113},[103,42496,30864],{"class":5206},[103,42498,159],{"class":109},[103,42500,185],{"class":162},[103,42502,491],{"class":113},[103,42504,30919],{"class":5206},[103,42506,159],{"class":109},[103,42508,191],{"class":162},[103,42510,491],{"class":113},[103,42512,30873],{"class":5206},[103,42514,159],{"class":109},[103,42516,331],{"class":162},[103,42518,120],{"class":113},[103,42520,42521],{"class":105,"line":9860},[103,42522,38116],{"class":113},[103,42524,42525,42527,42530,42532],{"class":105,"line":9887},[103,42526,30835],{"class":162},[103,42528,42529],{"class":113},".b5",[103,42531,159],{"class":109},[103,42533,37999],{"class":113},[103,42535,42536,42538,42541,42543,42545,42547,42549,42551,42553,42555,42557,42559,42561,42563,42565],{"class":105,"line":9896},[103,42537,42219],{"class":113},[103,42539,42540],{"class":162},"832",[103,42542,491],{"class":113},[103,42544,34860],{"class":162},[103,42546,42228],{"class":113},[103,42548,21038],{"class":162},[103,42550,491],{"class":113},[103,42552,42476],{"class":162},[103,42554,42237],{"class":113},[103,42556,311],{"class":162},[103,42558,491],{"class":113},[103,42560,32060],{"class":162},[103,42562,42246],{"class":113},[103,42564,32060],{"class":162},[103,42566,38037],{"class":113},[103,42568,42569,42571,42573,42575,42577,42579,42581,42583,42585,42587,42589,42591,42593,42595,42597],{"class":105,"line":9902},[103,42570,42219],{"class":113},[103,42572,42540],{"class":162},[103,42574,491],{"class":113},[103,42576,34930],{"class":162},[103,42578,42228],{"class":113},[103,42580,42149],{"class":162},[103,42582,491],{"class":113},[103,42584,34930],{"class":162},[103,42586,42237],{"class":113},[103,42588,720],{"class":162},[103,42590,491],{"class":113},[103,42592,32060],{"class":162},[103,42594,42246],{"class":113},[103,42596,32060],{"class":162},[103,42598,38037],{"class":113},[103,42600,42601,42604,42606,42608,42610],{"class":105,"line":9910},[103,42602,42603],{"class":113},"            nn.AdaptiveAvgPool2d((",[103,42605,331],{"class":162},[103,42607,491],{"class":113},[103,42609,331],{"class":162},[103,42611,42612],{"class":113},")),\n",[103,42614,42615],{"class":105,"line":9915},[103,42616,38780],{"class":113},[103,42618,42619,42621,42624,42626,42628],{"class":105,"line":16594},[103,42620,38785],{"class":113},[103,42622,42623],{"class":162},"1024",[103,42625,491],{"class":113},[103,42627,559],{"class":162},[103,42629,120],{"class":113},[103,42631,42632],{"class":105,"line":16600},[103,42633,38116],{"class":113},[103,42635,42636],{"class":105,"line":16623},[103,42637,42638],{"class":172},"        # 对模型参数初始化\n",[103,42640,42641,42643,42645,42647,42649],{"class":105,"line":16629},[103,42642,3392],{"class":109},[103,42644,38858],{"class":113},[103,42646,26033],{"class":109},[103,42648,38863],{"class":162},[103,42650,38866],{"class":113},[103,42652,42653,42655,42657],{"class":105,"line":16652},[103,42654,4631],{"class":109},[103,42656,38878],{"class":162},[103,42658,38881],{"class":113},[103,42660,42661,42663,42666,42668,42671,42673,42675,42677,42679],{"class":105,"line":16666},[103,42662,38891],{"class":113},[103,42664,42665],{"class":5206},"mode",[103,42667,159],{"class":109},[103,42669,42670],{"class":218},"'fan_out'",[103,42672,491],{"class":113},[103,42674,38894],{"class":5206},[103,42676,159],{"class":109},[103,42678,38899],{"class":218},[103,42680,120],{"class":113},[103,42682,42683],{"class":105,"line":16686},[103,42684,42685],{"class":172},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[103,42687,42688],{"class":105,"line":16692},[103,42689,42690],{"class":172},"                # ② mode = 'fan_out'决定使用的fan值：\n",[103,42692,42693],{"class":105,"line":16703},[103,42694,42695],{"class":172},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[103,42697,42698],{"class":105,"line":16726},[103,42699,42700],{"class":172},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[103,42702,42703],{"class":105,"line":16748},[103,42704,42705],{"class":172},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[103,42707,42708],{"class":105,"line":16753},[103,42709,42710],{"class":172},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[103,42712,42713,42715,42717,42719,42721,42723],{"class":105,"line":16759},[103,42714,38911],{"class":109},[103,42716,38914],{"class":113},[103,42718,38917],{"class":109},[103,42720,38920],{"class":109},[103,42722,38923],{"class":162},[103,42724,3728],{"class":113},[103,42726,42727,42729,42731],{"class":105,"line":16773},[103,42728,38935],{"class":113},[103,42730,305],{"class":162},[103,42732,120],{"class":113},[103,42734,42735,42738,42740],{"class":105,"line":16786},[103,42736,42737],{"class":109},"                elif",[103,42739,38878],{"class":162},[103,42741,38954],{"class":113},[103,42743,42744,42747,42749,42751,42753],{"class":105,"line":16791},[103,42745,42746],{"class":113},"                    nn.init.normal_(m.weight,",[103,42748,305],{"class":162},[103,42750,491],{"class":113},[103,42752,38976],{"class":162},[103,42754,120],{"class":113},[103,42756,42757,42760,42762,42764,42766,42768],{"class":105,"line":16805},[103,42758,42759],{"class":109},"                    if",[103,42761,38914],{"class":113},[103,42763,38917],{"class":109},[103,42765,38920],{"class":109},[103,42767,38923],{"class":162},[103,42769,3728],{"class":113},[103,42771,42772,42775,42777],{"class":105,"line":16810},[103,42773,42774],{"class":113},"                        nn.init.constant_(m.bias,",[103,42776,305],{"class":162},[103,42778,120],{"class":113},[103,42780,42781],{"class":105,"line":16816},[103,42782,35155],{"class":172},[103,42784,42785,42787,42789],{"class":105,"line":16821},[103,42786,30791],{"class":109},[103,42788,31083],{"class":1952},[103,42790,31086],{"class":113},[103,42792,42793,42795,42797,42799],{"class":105,"line":16835},[103,42794,31091],{"class":113},[103,42796,159],{"class":109},[103,42798,30813],{"class":162},[103,42800,42801],{"class":113},".b1(x)\n",[103,42803,42804,42806,42808,42810],{"class":105,"line":16840},[103,42805,31091],{"class":113},[103,42807,159],{"class":109},[103,42809,30813],{"class":162},[103,42811,42812],{"class":113},".b2(x)\n",[103,42814,42815,42817,42819,42821],{"class":105,"line":16845},[103,42816,31091],{"class":113},[103,42818,159],{"class":109},[103,42820,30813],{"class":162},[103,42822,42823],{"class":113},".b3(x)\n",[103,42825,42826,42828,42830,42832],{"class":105,"line":16859},[103,42827,31091],{"class":113},[103,42829,159],{"class":109},[103,42831,30813],{"class":162},[103,42833,42834],{"class":113},".b4(x)\n",[103,42836,42837,42839,42841,42843],{"class":105,"line":16871},[103,42838,31091],{"class":113},[103,42840,159],{"class":109},[103,42842,30813],{"class":162},[103,42844,42845],{"class":113},".b5(x)\n",[103,42847,42848,42850],{"class":105,"line":16876},[103,42849,14742],{"class":109},[103,42851,31199],{"class":113},[103,42853,42854],{"class":105,"line":16889},[103,42855,2389],{"emptyLinePlaceholder":30},[103,42857,42858],{"class":105,"line":16894},[103,42859,42860],{"class":172},"# 模型展示\n",[103,42862,42863,42865,42867,42869,42871],{"class":105,"line":16899},[103,42864,1520],{"class":109},[103,42866,31210],{"class":162},[103,42868,2938],{"class":109},[103,42870,31215],{"class":218},[103,42872,3728],{"class":113},[103,42874,42875,42877,42879,42881,42883,42885,42887,42889,42891],{"class":105,"line":16904},[103,42876,31227],{"class":113},[103,42878,159],{"class":109},[103,42880,30441],{"class":113},[103,42882,31234],{"class":218},[103,42884,1693],{"class":109},[103,42886,31239],{"class":113},[103,42888,1690],{"class":109},[103,42890,30466],{"class":218},[103,42892,120],{"class":113},[103,42894,42895,42897,42899],{"class":105,"line":16917},[103,42896,31279],{"class":113},[103,42898,159],{"class":109},[103,42900,42901],{"class":113},"GoogLeNet(Inception).to(device)\n",[103,42903,42904,42906,42908,42910,42912,42914,42916,42918],{"class":105,"line":16922},[103,42905,31289],{"class":162},[103,42907,31292],{"class":113},[103,42909,331],{"class":162},[103,42911,491],{"class":113},[103,42913,31491],{"class":162},[103,42915,491],{"class":113},[103,42917,31491],{"class":162},[103,42919,31305],{"class":113},[57,42921,42922],{"start":25},[60,42923,39173],{},[94,42925,42927],{"className":30368,"code":42926,"language":30370,"meta":24,"style":24},"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",[100,42928,42929,42935,42941,42951,42957,42967,42977,42987,42997,43007,43011,43022,43032,43036,43040,43044,43052,43064,43074,43090,43100,43132,43146,43156,43166,43170,43180,43194,43204,43214,43224,43230,43234,43238,43242,43246,43250,43258,43278,43282,43286,43290,43294,43298,43314,43318,43322,43330,43334,43338,43346,43350,43354,43358,43366,43370,43374,43378,43382,43390,43394,43402,43406,43414,43418,43426,43430,43438,43442,43446,43454,43458,43462,43466,43478,43502,43516,43520,43524,43528,43536,43540,43548,43552,43560,43564,43572,43576,43584,43588,43596,43600,43612,43616,43624,43628,43636,43640,43644,43648,43652,43660,43664,43680,43684,43692,43696,43700,43704,43708,43712,43716,43720,43736,43740,43752,43756,43768,43772,43784,43788,43796,43800,43808,43812,43816,43820,43826,43830,43838,43842,43858,43862,43870,43874,43890,43902,43906,43918,43922,43926,43934,43938,43942,43950,43954,43962,43966,43974,43978,43982,44024,44066,44070,44074,44090,44094,44110,44114,44118,44126,44130,44134,44146,44184,44188,44192,44200,44204,44218,44228,44234,44240,44246,44252,44256,44260,44266,44270,44274,44282,44286,44304,44308,44312,44316,44332,44336,44340,44344,44348,44352,44372,44392,44396,44400,44404,44412,44420,44424,44440,44460,44480,44484,44488,44496,44504,44508,44512,44516,44528,44532,44542,44550,44567],{"__ignoreMap":24},[103,42930,42931,42933],{"class":105,"line":106},[103,42932,30382],{"class":109},[103,42934,31812],{"class":113},[103,42936,42937,42939],{"class":105,"line":25},[103,42938,30382],{"class":109},[103,42940,31819],{"class":113},[103,42942,42943,42945,42947,42949],{"class":105,"line":1168},[103,42944,30382],{"class":109},[103,42946,31830],{"class":113},[103,42948,31373],{"class":109},[103,42950,31835],{"class":113},[103,42952,42953,42955],{"class":105,"line":1183},[103,42954,30382],{"class":109},[103,42956,30385],{"class":113},[103,42958,42959,42961,42963,42965],{"class":105,"line":1189},[103,42960,30727],{"class":109},[103,42962,31405],{"class":113},[103,42964,30382],{"class":109},[103,42966,31852],{"class":113},[103,42968,42969,42971,42973,42975],{"class":105,"line":1203},[103,42970,30727],{"class":109},[103,42972,31358],{"class":113},[103,42974,30382],{"class":109},[103,42976,31363],{"class":113},[103,42978,42979,42981,42983,42985],{"class":105,"line":1209},[103,42980,30727],{"class":109},[103,42982,31388],{"class":113},[103,42984,30382],{"class":109},[103,42986,31393],{"class":113},[103,42988,42989,42991,42993,42995],{"class":105,"line":1300},[103,42990,30382],{"class":109},[103,42992,31405],{"class":113},[103,42994,31373],{"class":109},[103,42996,31410],{"class":113},[103,42998,42999,43001,43003,43005],{"class":105,"line":1306},[103,43000,30382],{"class":109},[103,43002,31422],{"class":113},[103,43004,31373],{"class":109},[103,43006,31427],{"class":113},[103,43008,43009],{"class":105,"line":1318},[103,43010,31897],{"class":172},[103,43012,43013,43015,43017,43019],{"class":105,"line":1601},[103,43014,30727],{"class":109},[103,43016,31904],{"class":113},[103,43018,30382],{"class":109},[103,43020,43021],{"class":113}," GoogLeNet, Inception\n",[103,43023,43024,43026,43028,43030],{"class":105,"line":1606},[103,43025,30727],{"class":109},[103,43027,30730],{"class":113},[103,43029,30382],{"class":109},[103,43031,30735],{"class":113},[103,43033,43034],{"class":105,"line":1612},[103,43035,2389],{"emptyLinePlaceholder":30},[103,43037,43038],{"class":105,"line":1617},[103,43039,2389],{"emptyLinePlaceholder":30},[103,43041,43042],{"class":105,"line":1631},[103,43043,31932],{"class":172},[103,43045,43046,43048,43050],{"class":105,"line":1636},[103,43047,31937],{"class":109},[103,43049,31940],{"class":1952},[103,43051,31943],{"class":113},[103,43053,43054,43056,43058,43060,43062],{"class":105,"line":1642},[103,43055,31948],{"class":113},[103,43057,159],{"class":109},[103,43059,31445],{"class":113},[103,43061,31453],{"class":218},[103,43063,31456],{"class":113},[103,43065,43066,43068,43070,43072],{"class":105,"line":1663},[103,43067,31961],{"class":5206},[103,43069,159],{"class":109},[103,43071,31466],{"class":162},[103,43073,31456],{"class":113},[103,43075,43076,43078,43080,43082,43084,43086,43088],{"class":105,"line":1668},[103,43077,31972],{"class":5206},[103,43079,159],{"class":109},[103,43081,31483],{"class":113},[103,43083,31486],{"class":5206},[103,43085,159],{"class":109},[103,43087,35439],{"class":162},[103,43089,31494],{"class":113},[103,43091,43092,43094,43096,43098],{"class":105,"line":1682},[103,43093,31989],{"class":5206},[103,43095,159],{"class":109},[103,43097,31466],{"class":162},[103,43099,120],{"class":113},[103,43101,43102,43104,43106,43108,43110,43112,43114,43116,43118,43120,43122,43124,43126,43128,43130],{"class":105,"line":1687},[103,43103,32000],{"class":113},[103,43105,159],{"class":109},[103,43107,32005],{"class":113},[103,43109,32008],{"class":162},[103,43111,114],{"class":113},[103,43113,32013],{"class":162},[103,43115,568],{"class":109},[103,43117,7348],{"class":162},[103,43119,32020],{"class":113},[103,43121,32008],{"class":162},[103,43123,114],{"class":113},[103,43125,32027],{"class":162},[103,43127,568],{"class":109},[103,43129,7348],{"class":162},[103,43131,32034],{"class":113},[103,43133,43134,43136,43138,43140,43142,43144],{"class":105,"line":1716},[103,43135,32039],{"class":113},[103,43137,159],{"class":109},[103,43139,32044],{"class":113},[103,43141,31527],{"class":5206},[103,43143,159],{"class":109},[103,43145,31532],{"class":113},[103,43147,43148,43150,43152,43154],{"class":105,"line":1721},[103,43149,32055],{"class":5206},[103,43151,159],{"class":109},[103,43153,311],{"class":162},[103,43155,31456],{"class":113},[103,43157,43158,43160,43162,43164],{"class":105,"line":1738},[103,43159,32067],{"class":5206},[103,43161,159],{"class":109},[103,43163,31466],{"class":162},[103,43165,31456],{"class":113},[103,43167,43168],{"class":105,"line":1743},[103,43169,32078],{"class":172},[103,43171,43172,43174,43176,43178],{"class":105,"line":1748},[103,43173,32083],{"class":5206},[103,43175,159],{"class":109},[103,43177,508],{"class":162},[103,43179,120],{"class":113},[103,43181,43182,43184,43186,43188,43190,43192],{"class":105,"line":1753},[103,43183,32094],{"class":113},[103,43185,159],{"class":109},[103,43187,31524],{"class":113},[103,43189,31527],{"class":5206},[103,43191,159],{"class":109},[103,43193,32105],{"class":113},[103,43195,43196,43198,43200,43202],{"class":105,"line":1767},[103,43197,32110],{"class":5206},[103,43199,159],{"class":109},[103,43201,311],{"class":162},[103,43203,31456],{"class":113},[103,43205,43206,43208,43210,43212],{"class":105,"line":1772},[103,43207,32121],{"class":5206},[103,43209,159],{"class":109},[103,43211,31466],{"class":162},[103,43213,31456],{"class":113},[103,43215,43216,43218,43220,43222],{"class":105,"line":2566},[103,43217,32132],{"class":5206},[103,43219,159],{"class":109},[103,43221,508],{"class":162},[103,43223,120],{"class":113},[103,43225,43226,43228],{"class":105,"line":2580},[103,43227,4079],{"class":109},[103,43229,32145],{"class":113},[103,43231,43232],{"class":105,"line":2588},[103,43233,2389],{"emptyLinePlaceholder":30},[103,43235,43236],{"class":105,"line":2593},[103,43237,32154],{"class":172},[103,43239,43240],{"class":105,"line":2599},[103,43241,32159],{"class":172},[103,43243,43244],{"class":105,"line":2605},[103,43245,2389],{"emptyLinePlaceholder":30},[103,43247,43248],{"class":105,"line":2610},[103,43249,32168],{"class":172},[103,43251,43252,43254,43256],{"class":105,"line":7938},[103,43253,31937],{"class":109},[103,43255,32175],{"class":1952},[103,43257,32178],{"class":113},[103,43259,43260,43262,43264,43266,43268,43270,43272,43274,43276],{"class":105,"line":7962},[103,43261,31227],{"class":113},[103,43263,159],{"class":109},[103,43265,30441],{"class":113},[103,43267,31234],{"class":218},[103,43269,1693],{"class":109},[103,43271,31239],{"class":113},[103,43273,1690],{"class":109},[103,43275,32197],{"class":218},[103,43277,120],{"class":113},[103,43279,43280],{"class":105,"line":7967},[103,43281,2389],{"emptyLinePlaceholder":30},[103,43283,43284],{"class":105,"line":7973},[103,43285,2389],{"emptyLinePlaceholder":30},[103,43287,43288],{"class":105,"line":8000},[103,43289,32212],{"class":172},[103,43291,43292],{"class":105,"line":8005},[103,43293,32217],{"class":172},[103,43295,43296],{"class":105,"line":8011},[103,43297,32222],{"class":172},[103,43299,43300,43302,43304,43306,43308,43310,43312],{"class":105,"line":8023},[103,43301,32227],{"class":113},[103,43303,159],{"class":109},[103,43305,32232],{"class":113},[103,43307,32235],{"class":5206},[103,43309,159],{"class":109},[103,43311,32240],{"class":162},[103,43313,120],{"class":113},[103,43315,43316],{"class":105,"line":8035},[103,43317,2389],{"emptyLinePlaceholder":30},[103,43319,43320],{"class":105,"line":8047},[103,43321,32251],{"class":172},[103,43323,43324,43326,43328],{"class":105,"line":9706},[103,43325,32256],{"class":113},[103,43327,159],{"class":109},[103,43329,32261],{"class":113},[103,43331,43332],{"class":105,"line":9731},[103,43333,2389],{"emptyLinePlaceholder":30},[103,43335,43336],{"class":105,"line":9754},[103,43337,32270],{"class":172},[103,43339,43340,43342,43344],{"class":105,"line":9778},[103,43341,31279],{"class":113},[103,43343,159],{"class":109},[103,43345,32279],{"class":113},[103,43347,43348],{"class":105,"line":9783},[103,43349,32284],{"class":172},[103,43351,43352],{"class":105,"line":9788},[103,43353,32289],{"class":172},[103,43355,43356],{"class":105,"line":9793},[103,43357,32294],{"class":172},[103,43359,43360,43362,43364],{"class":105,"line":9802},[103,43361,32299],{"class":113},[103,43363,159],{"class":109},[103,43365,32304],{"class":113},[103,43367,43368],{"class":105,"line":9807},[103,43369,2389],{"emptyLinePlaceholder":30},[103,43371,43372],{"class":105,"line":9813},[103,43373,2389],{"emptyLinePlaceholder":30},[103,43375,43376],{"class":105,"line":9834},[103,43377,32317],{"class":172},[103,43379,43380],{"class":105,"line":9840},[103,43381,32322],{"class":172},[103,43383,43384,43386,43388],{"class":105,"line":9854},[103,43385,32327],{"class":113},[103,43387,159],{"class":109},[103,43389,32332],{"class":162},[103,43391,43392],{"class":105,"line":9860},[103,43393,32337],{"class":172},[103,43395,43396,43398,43400],{"class":105,"line":9887},[103,43397,32342],{"class":113},[103,43399,159],{"class":109},[103,43401,32347],{"class":113},[103,43403,43404],{"class":105,"line":9896},[103,43405,32352],{"class":172},[103,43407,43408,43410,43412],{"class":105,"line":9902},[103,43409,32357],{"class":113},[103,43411,159],{"class":109},[103,43413,32347],{"class":113},[103,43415,43416],{"class":105,"line":9910},[103,43417,32366],{"class":172},[103,43419,43420,43422,43424],{"class":105,"line":9915},[103,43421,32371],{"class":113},[103,43423,159],{"class":109},[103,43425,32347],{"class":113},[103,43427,43428],{"class":105,"line":16594},[103,43429,32380],{"class":172},[103,43431,43432,43434,43436],{"class":105,"line":16600},[103,43433,32385],{"class":113},[103,43435,159],{"class":109},[103,43437,32347],{"class":113},[103,43439,43440],{"class":105,"line":16623},[103,43441,2389],{"emptyLinePlaceholder":30},[103,43443,43444],{"class":105,"line":16629},[103,43445,32398],{"class":172},[103,43447,43448,43450,43452],{"class":105,"line":16652},[103,43449,32403],{"class":113},[103,43451,159],{"class":109},[103,43453,32408],{"class":113},[103,43455,43456],{"class":105,"line":16666},[103,43457,2389],{"emptyLinePlaceholder":30},[103,43459,43460],{"class":105,"line":16686},[103,43461,2389],{"emptyLinePlaceholder":30},[103,43463,43464],{"class":105,"line":16692},[103,43465,32421],{"class":172},[103,43467,43468,43470,43472,43474,43476],{"class":105,"line":16703},[103,43469,3190],{"class":109},[103,43471,32428],{"class":113},[103,43473,26033],{"class":109},[103,43475,32433],{"class":162},[103,43477,32436],{"class":113},[103,43479,43480,43482,43484,43486,43488,43490,43492,43494,43496,43498,43500],{"class":105,"line":16726},[103,43481,32441],{"class":162},[103,43483,114],{"class":113},[103,43485,32446],{"class":218},[103,43487,32449],{"class":162},[103,43489,697],{"class":218},[103,43491,32449],{"class":162},[103,43493,364],{"class":218},[103,43495,32458],{"class":113},[103,43497,645],{"class":109},[103,43499,331],{"class":162},[103,43501,30487],{"class":113},[103,43503,43504,43506,43508,43510,43512,43514],{"class":105,"line":16748},[103,43505,32441],{"class":162},[103,43507,114],{"class":113},[103,43509,32473],{"class":218},[103,43511,568],{"class":109},[103,43513,559],{"class":162},[103,43515,120],{"class":113},[103,43517,43518],{"class":105,"line":16753},[103,43519,2389],{"emptyLinePlaceholder":30},[103,43521,43522],{"class":105,"line":16759},[103,43523,32488],{"class":172},[103,43525,43526],{"class":105,"line":16773},[103,43527,32493],{"class":172},[103,43529,43530,43532,43534],{"class":105,"line":16786},[103,43531,32498],{"class":113},[103,43533,159],{"class":109},[103,43535,32332],{"class":162},[103,43537,43538],{"class":105,"line":16791},[103,43539,32507],{"class":172},[103,43541,43542,43544,43546],{"class":105,"line":16805},[103,43543,32512],{"class":113},[103,43545,159],{"class":109},[103,43547,3074],{"class":162},[103,43549,43550],{"class":105,"line":16810},[103,43551,32521],{"class":172},[103,43553,43554,43556,43558],{"class":105,"line":16816},[103,43555,32526],{"class":113},[103,43557,159],{"class":109},[103,43559,32332],{"class":162},[103,43561,43562],{"class":105,"line":16821},[103,43563,32535],{"class":172},[103,43565,43566,43568,43570],{"class":105,"line":16835},[103,43567,32540],{"class":113},[103,43569,159],{"class":109},[103,43571,3074],{"class":162},[103,43573,43574],{"class":105,"line":16840},[103,43575,32549],{"class":172},[103,43577,43578,43580,43582],{"class":105,"line":16845},[103,43579,32554],{"class":113},[103,43581,159],{"class":109},[103,43583,3074],{"class":162},[103,43585,43586],{"class":105,"line":16859},[103,43587,32563],{"class":172},[103,43589,43590,43592,43594],{"class":105,"line":16871},[103,43591,32568],{"class":113},[103,43593,159],{"class":109},[103,43595,3074],{"class":162},[103,43597,43598],{"class":105,"line":16876},[103,43599,32577],{"class":172},[103,43601,43602,43604,43606,43608,43610],{"class":105,"line":16889},[103,43603,3392],{"class":109},[103,43605,31591],{"class":113},[103,43607,26033],{"class":109},[103,43609,31596],{"class":162},[103,43611,32590],{"class":113},[103,43613,43614],{"class":105,"line":16894},[103,43615,32595],{"class":172},[103,43617,43618,43620,43622],{"class":105,"line":16899},[103,43619,32600],{"class":113},[103,43621,159],{"class":109},[103,43623,32605],{"class":113},[103,43625,43626],{"class":105,"line":16904},[103,43627,32610],{"class":172},[103,43629,43630,43632,43634],{"class":105,"line":16917},[103,43631,32615],{"class":113},[103,43633,159],{"class":109},[103,43635,32620],{"class":113},[103,43637,43638],{"class":105,"line":16922},[103,43639,32626],{"class":172},[103,43641,43642],{"class":105,"line":32623},[103,43643,32632],{"class":113},[103,43645,43646],{"class":105,"line":32629},[103,43647,32638],{"class":172},[103,43649,43650],{"class":105,"line":32635},[103,43651,32644],{"class":172},[103,43653,43654,43656,43658],{"class":105,"line":32641},[103,43655,32650],{"class":113},[103,43657,159],{"class":109},[103,43659,32655],{"class":113},[103,43661,43662],{"class":105,"line":32647},[103,43663,32661],{"class":172},[103,43665,43666,43668,43670,43672,43674,43676,43678],{"class":105,"line":32658},[103,43667,32667],{"class":113},[103,43669,159],{"class":109},[103,43671,32672],{"class":113},[103,43673,32675],{"class":5206},[103,43675,159],{"class":109},[103,43677,331],{"class":162},[103,43679,120],{"class":113},[103,43681,43682],{"class":105,"line":32664},[103,43683,32687],{"class":172},[103,43685,43686,43688,43690],{"class":105,"line":32684},[103,43687,32693],{"class":113},[103,43689,159],{"class":109},[103,43691,32698],{"class":113},[103,43693,43694],{"class":105,"line":32690},[103,43695,32704],{"class":172},[103,43697,43698],{"class":105,"line":32701},[103,43699,32710],{"class":113},[103,43701,43702],{"class":105,"line":32707},[103,43703,32716],{"class":172},[103,43705,43706],{"class":105,"line":32713},[103,43707,32722],{"class":113},[103,43709,43710],{"class":105,"line":32719},[103,43711,32728],{"class":172},[103,43713,43714],{"class":105,"line":32725},[103,43715,32734],{"class":113},[103,43717,43718],{"class":105,"line":32731},[103,43719,32740],{"class":172},[103,43721,43722,43724,43726,43728,43730,43732,43734],{"class":105,"line":32737},[103,43723,32746],{"class":113},[103,43725,9467],{"class":109},[103,43727,32751],{"class":113},[103,43729,568],{"class":109},[103,43731,32756],{"class":113},[103,43733,305],{"class":162},[103,43735,120],{"class":113},[103,43737,43738],{"class":105,"line":32743},[103,43739,32766],{"class":172},[103,43741,43742,43744,43746,43748,43750],{"class":105,"line":32763},[103,43743,32772],{"class":113},[103,43745,9467],{"class":109},[103,43747,32777],{"class":113},[103,43749,2938],{"class":109},[103,43751,32782],{"class":113},[103,43753,43754],{"class":105,"line":32769},[103,43755,32788],{"class":172},[103,43757,43758,43760,43762,43764,43766],{"class":105,"line":32785},[103,43759,32794],{"class":113},[103,43761,9467],{"class":109},[103,43763,32756],{"class":113},[103,43765,305],{"class":162},[103,43767,120],{"class":113},[103,43769,43770],{"class":105,"line":32791},[103,43771,32808],{"class":172},[103,43773,43774,43776,43778,43780,43782],{"class":105,"line":32805},[103,43775,3392],{"class":109},[103,43777,32816],{"class":113},[103,43779,26033],{"class":109},[103,43781,31596],{"class":162},[103,43783,32823],{"class":113},[103,43785,43786],{"class":105,"line":32811},[103,43787,32829],{"class":172},[103,43789,43790,43792,43794],{"class":105,"line":32826},[103,43791,32600],{"class":113},[103,43793,159],{"class":109},[103,43795,32605],{"class":113},[103,43797,43798],{"class":105,"line":32832},[103,43799,32844],{"class":172},[103,43801,43802,43804,43806],{"class":105,"line":32841},[103,43803,32615],{"class":113},[103,43805,159],{"class":109},[103,43807,32620],{"class":113},[103,43809,43810],{"class":105,"line":32847},[103,43811,32859],{"class":172},[103,43813,43814],{"class":105,"line":32856},[103,43815,32865],{"class":113},[103,43817,43818],{"class":105,"line":32862},[103,43819,36346],{"class":172},[103,43821,43822,43824],{"class":105,"line":32868},[103,43823,32871],{"class":109},[103,43825,32874],{"class":113},[103,43827,43828],{"class":105,"line":32877},[103,43829,32880],{"class":172},[103,43831,43832,43834,43836],{"class":105,"line":32883},[103,43833,36361],{"class":113},[103,43835,159],{"class":109},[103,43837,32655],{"class":113},[103,43839,43840],{"class":105,"line":32894},[103,43841,32897],{"class":172},[103,43843,43844,43846,43848,43850,43852,43854,43856],{"class":105,"line":32900},[103,43845,36374],{"class":113},[103,43847,159],{"class":109},[103,43849,32672],{"class":113},[103,43851,32675],{"class":5206},[103,43853,159],{"class":109},[103,43855,331],{"class":162},[103,43857,120],{"class":113},[103,43859,43860],{"class":105,"line":32919},[103,43861,32922],{"class":172},[103,43863,43864,43866,43868],{"class":105,"line":32925},[103,43865,36395],{"class":113},[103,43867,159],{"class":109},[103,43869,32698],{"class":113},[103,43871,43872],{"class":105,"line":32936},[103,43873,32939],{"class":172},[103,43875,43876,43878,43880,43882,43884,43886,43888],{"class":105,"line":32942},[103,43877,36408],{"class":113},[103,43879,9467],{"class":109},[103,43881,36413],{"class":113},[103,43883,568],{"class":109},[103,43885,32756],{"class":113},[103,43887,305],{"class":162},[103,43889,120],{"class":113},[103,43891,43892,43894,43896,43898,43900],{"class":105,"line":32962},[103,43893,36426],{"class":113},[103,43895,9467],{"class":109},[103,43897,32777],{"class":113},[103,43899,2938],{"class":109},[103,43901,32782],{"class":113},[103,43903,43904],{"class":105,"line":32978},[103,43905,36439],{"class":172},[103,43907,43908,43910,43912,43914,43916],{"class":105,"line":32984},[103,43909,36444],{"class":113},[103,43911,9467],{"class":109},[103,43913,32756],{"class":113},[103,43915,305],{"class":162},[103,43917,120],{"class":113},[103,43919,43920],{"class":105,"line":32998},[103,43921,33001],{"class":172},[103,43923,43924],{"class":105,"line":33004},[103,43925,33007],{"class":172},[103,43927,43928,43930,43932],{"class":105,"line":33010},[103,43929,33013],{"class":113},[103,43931,697],{"class":109},[103,43933,33018],{"class":113},[103,43935,43936],{"class":105,"line":33021},[103,43937,33024],{"class":172},[103,43939,43940],{"class":105,"line":33027},[103,43941,33030],{"class":172},[103,43943,43944,43946,43948],{"class":105,"line":33033},[103,43945,33036],{"class":113},[103,43947,697],{"class":109},[103,43949,33018],{"class":113},[103,43951,43952],{"class":105,"line":33043},[103,43953,33046],{"class":172},[103,43955,43956,43958,43960],{"class":105,"line":33049},[103,43957,33052],{"class":113},[103,43959,697],{"class":109},[103,43961,33057],{"class":113},[103,43963,43964],{"class":105,"line":33060},[103,43965,33063],{"class":172},[103,43967,43968,43970,43972],{"class":105,"line":33066},[103,43969,33069],{"class":113},[103,43971,697],{"class":109},[103,43973,33057],{"class":113},[103,43975,43976],{"class":105,"line":33076},[103,43977,2389],{"emptyLinePlaceholder":30},[103,43979,43980],{"class":105,"line":33081},[103,43981,33084],{"class":172},[103,43983,43984,43986,43988,43990,43992,43994,43996,43998,44000,44002,44004,44006,44008,44010,44012,44014,44016,44018,44020,44022],{"class":105,"line":33087},[103,43985,32441],{"class":162},[103,43987,114],{"class":113},[103,43989,3581],{"class":218},[103,43991,32449],{"class":162},[103,43993,33098],{"class":218},[103,43995,1009],{"class":162},[103,43997,33103],{"class":109},[103,43999,1059],{"class":162},[103,44001,33108],{"class":218},[103,44003,1009],{"class":162},[103,44005,33103],{"class":109},[103,44007,1059],{"class":162},[103,44009,3581],{"class":218},[103,44011,33119],{"class":113},[103,44013,645],{"class":109},[103,44015,331],{"class":162},[103,44017,33126],{"class":113},[103,44019,645],{"class":109},[103,44021,331],{"class":162},[103,44023,33133],{"class":113},[103,44025,44026,44028,44030,44032,44034,44036,44038,44040,44042,44044,44046,44048,44050,44052,44054,44056,44058,44060,44062,44064],{"class":105,"line":33136},[103,44027,32441],{"class":162},[103,44029,114],{"class":113},[103,44031,3581],{"class":218},[103,44033,32449],{"class":162},[103,44035,33147],{"class":218},[103,44037,1009],{"class":162},[103,44039,33103],{"class":109},[103,44041,1059],{"class":162},[103,44043,33156],{"class":218},[103,44045,1009],{"class":162},[103,44047,33103],{"class":109},[103,44049,1059],{"class":162},[103,44051,3581],{"class":218},[103,44053,33167],{"class":113},[103,44055,645],{"class":109},[103,44057,331],{"class":162},[103,44059,33174],{"class":113},[103,44061,645],{"class":109},[103,44063,331],{"class":162},[103,44065,33133],{"class":113},[103,44067,44068],{"class":105,"line":33183},[103,44069,2389],{"emptyLinePlaceholder":30},[103,44071,44072],{"class":105,"line":33188},[103,44073,33191],{"class":172},[103,44075,44076,44078,44080,44082,44084,44086,44088],{"class":105,"line":33194},[103,44077,2486],{"class":109},[103,44079,33199],{"class":113},[103,44081,645],{"class":109},[103,44083,331],{"class":162},[103,44085,1053],{"class":113},[103,44087,1073],{"class":109},[103,44089,33210],{"class":113},[103,44091,44092],{"class":105,"line":33213},[103,44093,33216],{"class":172},[103,44095,44096,44098,44100,44102,44104,44106,44108],{"class":105,"line":33219},[103,44097,33222],{"class":113},[103,44099,153],{"class":162},[103,44101,159],{"class":109},[103,44103,33229],{"class":113},[103,44105,645],{"class":109},[103,44107,331],{"class":162},[103,44109,33236],{"class":113},[103,44111,44112],{"class":105,"line":33239},[103,44113,33242],{"class":172},[103,44115,44116],{"class":105,"line":33245},[103,44117,33248],{"class":172},[103,44119,44120,44122,44124],{"class":105,"line":33251},[103,44121,33254],{"class":113},[103,44123,159],{"class":109},[103,44125,32304],{"class":113},[103,44127,44128],{"class":105,"line":33261},[103,44129,2389],{"emptyLinePlaceholder":30},[103,44131,44132],{"class":105,"line":33266},[103,44133,33269],{"class":172},[103,44135,44136,44138,44140,44142,44144],{"class":105,"line":33272},[103,44137,33275],{"class":113},[103,44139,159],{"class":109},[103,44141,33280],{"class":113},[103,44143,645],{"class":109},[103,44145,33285],{"class":113},[103,44147,44148,44150,44152,44154,44156,44158,44160,44162,44164,44166,44168,44170,44172,44174,44176,44178,44180,44182],{"class":105,"line":33288},[103,44149,32441],{"class":162},[103,44151,114],{"class":113},[103,44153,33295],{"class":218},[103,44155,1009],{"class":162},[103,44157,33300],{"class":109},[103,44159,1059],{"class":162},[103,44161,657],{"class":218},[103,44163,1009],{"class":162},[103,44165,33300],{"class":109},[103,44167,1059],{"class":162},[103,44169,33313],{"class":218},[103,44171,33316],{"class":113},[103,44173,33319],{"class":109},[103,44175,1020],{"class":162},[103,44177,33324],{"class":113},[103,44179,441],{"class":109},[103,44181,1020],{"class":162},[103,44183,30487],{"class":113},[103,44185,44186],{"class":105,"line":33333},[103,44187,36723],{"class":172},[103,44189,44190],{"class":105,"line":33339},[103,44191,36728],{"class":172},[103,44193,44194,44196,44198],{"class":105,"line":33345},[103,44195,36733],{"class":113},[103,44197,33357],{"class":218},[103,44199,120],{"class":113},[103,44201,44202],{"class":105,"line":33351},[103,44203,33377],{"class":172},[103,44205,44206,44208,44210,44212,44214,44216],{"class":105,"line":33362},[103,44207,33383],{"class":113},[103,44209,159],{"class":109},[103,44211,33388],{"class":113},[103,44213,33391],{"class":5206},[103,44215,159],{"class":109},[103,44217,1535],{"class":113},[103,44219,44220,44222,44224,44226],{"class":105,"line":33368},[103,44221,33401],{"class":218},[103,44223,972],{"class":113},[103,44225,33406],{"class":162},[103,44227,33409],{"class":113},[103,44229,44230,44232],{"class":105,"line":33374},[103,44231,33415],{"class":218},[103,44233,33418],{"class":113},[103,44235,44236,44238],{"class":105,"line":33380},[103,44237,33424],{"class":218},[103,44239,33427],{"class":113},[103,44241,44242,44244],{"class":105,"line":33398},[103,44243,33433],{"class":218},[103,44245,33436],{"class":113},[103,44247,44248,44250],{"class":105,"line":33412},[103,44249,33442],{"class":218},[103,44251,33445],{"class":113},[103,44253,44254],{"class":105,"line":33421},[103,44255,33451],{"class":113},[103,44257,44258],{"class":105,"line":33430},[103,44259,33457],{"class":172},[103,44261,44262,44264],{"class":105,"line":33439},[103,44263,4079],{"class":109},[103,44265,33465],{"class":113},[103,44267,44268],{"class":105,"line":33448},[103,44269,2389],{"emptyLinePlaceholder":30},[103,44271,44272],{"class":105,"line":33454},[103,44273,33476],{"class":172},[103,44275,44276,44278,44280],{"class":105,"line":33460},[103,44277,31937],{"class":109},[103,44279,33484],{"class":1952},[103,44281,33487],{"class":113},[103,44283,44284],{"class":105,"line":33468},[103,44285,33493],{"class":172},[103,44287,44288,44290,44292,44294,44296,44298,44300,44302],{"class":105,"line":33473},[103,44289,33499],{"class":113},[103,44291,31683],{"class":5206},[103,44293,159],{"class":109},[103,44295,114],{"class":113},[103,44297,611],{"class":162},[103,44299,491],{"class":113},[103,44301,406],{"class":162},[103,44303,30487],{"class":113},[103,44305,44306],{"class":105,"line":33479},[103,44307,33519],{"class":172},[103,44309,44310],{"class":105,"line":33490},[103,44311,33525],{"class":172},[103,44313,44314],{"class":105,"line":33496},[103,44315,33531],{"class":172},[103,44317,44318,44320,44322,44324,44326,44328,44330],{"class":105,"line":33516},[103,44319,31717],{"class":113},[103,44321,331],{"class":162},[103,44323,491],{"class":113},[103,44325,191],{"class":162},[103,44327,491],{"class":113},[103,44329,331],{"class":162},[103,44331,120],{"class":113},[103,44333,44334],{"class":105,"line":33522},[103,44335,33554],{"class":172},[103,44337,44338],{"class":105,"line":33528},[103,44339,33560],{"class":172},[103,44341,44342],{"class":105,"line":33534},[103,44343,33566],{"class":172},[103,44345,44346],{"class":105,"line":33551},[103,44347,33572],{"class":172},[103,44349,44350],{"class":105,"line":33557},[103,44351,33578],{"class":172},[103,44353,44354,44356,44358,44360,44362,44364,44366,44368,44370],{"class":105,"line":33563},[103,44355,33584],{"class":113},[103,44357,33587],{"class":218},[103,44359,33590],{"class":113},[103,44361,33593],{"class":218},[103,44363,491],{"class":113},[103,44365,33598],{"class":5206},[103,44367,159],{"class":109},[103,44369,33603],{"class":218},[103,44371,120],{"class":113},[103,44373,44374,44376,44378,44380,44382,44384,44386,44388,44390],{"class":105,"line":33569},[103,44375,33584],{"class":113},[103,44377,33587],{"class":218},[103,44379,33615],{"class":113},[103,44381,33618],{"class":218},[103,44383,491],{"class":113},[103,44385,33598],{"class":5206},[103,44387,159],{"class":109},[103,44389,33627],{"class":218},[103,44391,120],{"class":113},[103,44393,44394],{"class":105,"line":33575},[103,44395,33635],{"class":172},[103,44397,44398],{"class":105,"line":33581},[103,44399,33641],{"class":113},[103,44401,44402],{"class":105,"line":33608},[103,44403,33647],{"class":172},[103,44405,44406,44408,44410],{"class":105,"line":33632},[103,44407,33653],{"class":113},[103,44409,33656],{"class":218},[103,44411,120],{"class":113},[103,44413,44414,44416,44418],{"class":105,"line":33638},[103,44415,33664],{"class":113},[103,44417,33667],{"class":218},[103,44419,120],{"class":113},[103,44421,44422],{"class":105,"line":33644},[103,44423,33675],{"class":172},[103,44425,44426,44428,44430,44432,44434,44436,44438],{"class":105,"line":33650},[103,44427,31717],{"class":113},[103,44429,331],{"class":162},[103,44431,491],{"class":113},[103,44433,191],{"class":162},[103,44435,491],{"class":113},[103,44437,191],{"class":162},[103,44439,120],{"class":113},[103,44441,44442,44444,44446,44448,44450,44452,44454,44456,44458],{"class":105,"line":33661},[103,44443,33584],{"class":113},[103,44445,33587],{"class":218},[103,44447,33702],{"class":113},[103,44449,33593],{"class":218},[103,44451,491],{"class":113},[103,44453,33598],{"class":5206},[103,44455,159],{"class":109},[103,44457,33713],{"class":218},[103,44459,120],{"class":113},[103,44461,44462,44464,44466,44468,44470,44472,44474,44476,44478],{"class":105,"line":33672},[103,44463,33584],{"class":113},[103,44465,33587],{"class":218},[103,44467,33725],{"class":113},[103,44469,33618],{"class":218},[103,44471,491],{"class":113},[103,44473,33598],{"class":5206},[103,44475,159],{"class":109},[103,44477,33736],{"class":218},[103,44479,120],{"class":113},[103,44481,44482],{"class":105,"line":33678},[103,44483,33744],{"class":172},[103,44485,44486],{"class":105,"line":33695},[103,44487,33641],{"class":113},[103,44489,44490,44492,44494],{"class":105,"line":33718},[103,44491,33653],{"class":113},[103,44493,33587],{"class":218},[103,44495,120],{"class":113},[103,44497,44498,44500,44502],{"class":105,"line":33741},[103,44499,33664],{"class":113},[103,44501,33766],{"class":218},[103,44503,120],{"class":113},[103,44505,44506],{"class":105,"line":33747},[103,44507,33774],{"class":113},[103,44509,44510],{"class":105,"line":33752},[103,44511,2389],{"emptyLinePlaceholder":30},[103,44513,44514],{"class":105,"line":33761},[103,44515,33785],{"class":172},[103,44517,44518,44520,44522,44524,44526],{"class":105,"line":33771},[103,44519,1520],{"class":109},[103,44521,31210],{"class":162},[103,44523,2938],{"class":109},[103,44525,31215],{"class":218},[103,44527,3728],{"class":113},[103,44529,44530],{"class":105,"line":33777},[103,44531,33804],{"class":172},[103,44533,44534,44537,44539],{"class":105,"line":33782},[103,44535,44536],{"class":113},"    GoogLeNet",[103,44538,159],{"class":109},[103,44540,44541],{"class":113},"GoogLeNet(Inception)\n",[103,44543,44544,44546,44548],{"class":105,"line":33788},[103,44545,33821],{"class":113},[103,44547,159],{"class":109},[103,44549,33826],{"class":113},[103,44551,44552,44554,44556,44559,44561,44563,44565],{"class":105,"line":33801},[103,44553,33383],{"class":113},[103,44555,159],{"class":109},[103,44557,44558],{"class":113},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[103,44560,33839],{"class":5206},[103,44562,159],{"class":109},[103,44564,1064],{"class":162},[103,44566,120],{"class":113},[103,44568,44569],{"class":105,"line":33807},[103,44570,33851],{"class":113},[57,44572,44573],{"start":1168},[60,44574,40564],{},[94,44576,44578],{"className":30368,"code":44577,"language":30370,"meta":24,"style":24},"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",[100,44579,44580,44586,44596,44606,44610,44620,44631,44635,44639,44643,44651,44667,44677,44693,44703,44717,44721,44731,44741,44751,44757,44761,44765,44773,44777,44793,44801,44805,44809,44817,44825,44829,44833,44837,44841,44847,44851,44861,44869,44877,44881,44885,44889,44897,44901,44917,44921,44925,44929,44941,44945,44957,44961,44965,44977,44981,44991,44995,44999,45011,45015,45023,45027,45031,45039,45043,45051,45055,45059,45063,45067,45071,45087,45095,45099,45103,45151,45157,45161,45171,45179,45187,45191,45195,45199,45203,45211,45215,45231,45235,45243,45251],{"__ignoreMap":24},[103,44581,44582,44584],{"class":105,"line":106},[103,44583,30382],{"class":109},[103,44585,30385],{"class":113},[103,44587,44588,44590,44592,44594],{"class":105,"line":25},[103,44589,30382],{"class":109},[103,44591,31405],{"class":113},[103,44593,31373],{"class":109},[103,44595,31410],{"class":113},[103,44597,44598,44600,44602,44604],{"class":105,"line":1168},[103,44599,30727],{"class":109},[103,44601,31388],{"class":113},[103,44603,30382],{"class":109},[103,44605,31393],{"class":113},[103,44607,44608],{"class":105,"line":1183},[103,44609,33912],{"class":172},[103,44611,44612,44614,44616,44618],{"class":105,"line":1189},[103,44613,30727],{"class":109},[103,44615,31358],{"class":113},[103,44617,30382],{"class":109},[103,44619,31363],{"class":113},[103,44621,44622,44624,44626,44628],{"class":105,"line":1203},[103,44623,30727],{"class":109},[103,44625,31904],{"class":113},[103,44627,30382],{"class":109},[103,44629,44630],{"class":113}," GoogLeNet,Inception\n",[103,44632,44633],{"class":105,"line":1209},[103,44634,2389],{"emptyLinePlaceholder":30},[103,44636,44637],{"class":105,"line":1300},[103,44638,2389],{"emptyLinePlaceholder":30},[103,44640,44641],{"class":105,"line":1306},[103,44642,33941],{"class":172},[103,44644,44645,44647,44649],{"class":105,"line":1318},[103,44646,31937],{"class":109},[103,44648,33948],{"class":1952},[103,44650,31943],{"class":113},[103,44652,44653,44655,44657,44659,44661,44663,44665],{"class":105,"line":1601},[103,44654,33955],{"class":113},[103,44656,159],{"class":109},[103,44658,31445],{"class":113},[103,44660,31448],{"class":5206},[103,44662,159],{"class":109},[103,44664,31453],{"class":218},[103,44666,31456],{"class":113},[103,44668,44669,44671,44673,44675],{"class":105,"line":1606},[103,44670,33972],{"class":5206},[103,44672,159],{"class":109},[103,44674,33977],{"class":162},[103,44676,31456],{"class":113},[103,44678,44679,44681,44683,44685,44687,44689,44691],{"class":105,"line":1612},[103,44680,33984],{"class":5206},[103,44682,159],{"class":109},[103,44684,31483],{"class":113},[103,44686,31486],{"class":5206},[103,44688,159],{"class":109},[103,44690,35439],{"class":162},[103,44692,31494],{"class":113},[103,44694,44695,44697,44699,44701],{"class":105,"line":1617},[103,44696,34001],{"class":5206},[103,44698,159],{"class":109},[103,44700,31466],{"class":162},[103,44702,120],{"class":113},[103,44704,44705,44707,44709,44711,44713,44715],{"class":105,"line":1631},[103,44706,34012],{"class":113},[103,44708,159],{"class":109},[103,44710,31524],{"class":113},[103,44712,31527],{"class":5206},[103,44714,159],{"class":109},[103,44716,34023],{"class":113},[103,44718,44719],{"class":105,"line":1636},[103,44720,34028],{"class":172},[103,44722,44723,44725,44727,44729],{"class":105,"line":1642},[103,44724,34033],{"class":5206},[103,44726,159],{"class":109},[103,44728,331],{"class":162},[103,44730,31456],{"class":113},[103,44732,44733,44735,44737,44739],{"class":105,"line":1663},[103,44734,34044],{"class":5206},[103,44736,159],{"class":109},[103,44738,31466],{"class":162},[103,44740,31456],{"class":113},[103,44742,44743,44745,44747,44749],{"class":105,"line":1668},[103,44744,34055],{"class":5206},[103,44746,159],{"class":109},[103,44748,305],{"class":162},[103,44750,120],{"class":113},[103,44752,44753,44755],{"class":105,"line":1682},[103,44754,4079],{"class":109},[103,44756,34068],{"class":113},[103,44758,44759],{"class":105,"line":1687},[103,44760,2389],{"emptyLinePlaceholder":30},[103,44762,44763],{"class":105,"line":1716},[103,44764,34077],{"class":172},[103,44766,44767,44769,44771],{"class":105,"line":1721},[103,44768,31937],{"class":109},[103,44770,34084],{"class":1952},[103,44772,34087],{"class":113},[103,44774,44775],{"class":105,"line":1738},[103,44776,34092],{"class":172},[103,44778,44779,44781,44783,44785,44787,44789,44791],{"class":105,"line":1743},[103,44780,31227],{"class":113},[103,44782,159],{"class":109},[103,44784,31234],{"class":218},[103,44786,1693],{"class":109},[103,44788,31239],{"class":113},[103,44790,1690],{"class":109},[103,44792,34109],{"class":218},[103,44794,44795,44797,44799],{"class":105,"line":1748},[103,44796,31279],{"class":113},[103,44798,159],{"class":109},[103,44800,32279],{"class":113},[103,44802,44803],{"class":105,"line":1753},[103,44804,2389],{"emptyLinePlaceholder":30},[103,44806,44807],{"class":105,"line":1767},[103,44808,34126],{"class":172},[103,44810,44811,44813,44815],{"class":105,"line":1772},[103,44812,34131],{"class":113},[103,44814,159],{"class":109},[103,44816,32332],{"class":162},[103,44818,44819,44821,44823],{"class":105,"line":2566},[103,44820,34140],{"class":113},[103,44822,159],{"class":109},[103,44824,3074],{"class":162},[103,44826,44827],{"class":105,"line":2580},[103,44828,2389],{"emptyLinePlaceholder":30},[103,44830,44831],{"class":105,"line":2588},[103,44832,34153],{"class":172},[103,44834,44835],{"class":105,"line":2593},[103,44836,34158],{"class":172},[103,44838,44839],{"class":105,"line":2599},[103,44840,34163],{"class":172},[103,44842,44843,44845],{"class":105,"line":2605},[103,44844,34168],{"class":109},[103,44846,32874],{"class":113},[103,44848,44849],{"class":105,"line":2610},[103,44850,34175],{"class":172},[103,44852,44853,44855,44857,44859],{"class":105,"line":7938},[103,44854,3392],{"class":109},[103,44856,34182],{"class":113},[103,44858,26033],{"class":109},[103,44860,34187],{"class":113},[103,44862,44863,44865,44867],{"class":105,"line":7962},[103,44864,34192],{"class":113},[103,44866,159],{"class":109},[103,44868,34197],{"class":113},[103,44870,44871,44873,44875],{"class":105,"line":7967},[103,44872,34202],{"class":113},[103,44874,159],{"class":109},[103,44876,34207],{"class":113},[103,44878,44879],{"class":105,"line":7973},[103,44880,34212],{"class":172},[103,44882,44883],{"class":105,"line":8000},[103,44884,32865],{"class":113},[103,44886,44887],{"class":105,"line":8005},[103,44888,34221],{"class":172},[103,44890,44891,44893,44895],{"class":105,"line":8011},[103,44892,32650],{"class":113},[103,44894,159],{"class":109},[103,44896,34230],{"class":113},[103,44898,44899],{"class":105,"line":8023},[103,44900,34235],{"class":172},[103,44902,44903,44905,44907,44909,44911,44913,44915],{"class":105,"line":8035},[103,44904,32667],{"class":113},[103,44906,159],{"class":109},[103,44908,32672],{"class":113},[103,44910,32675],{"class":5206},[103,44912,159],{"class":109},[103,44914,331],{"class":162},[103,44916,120],{"class":113},[103,44918,44919],{"class":105,"line":8047},[103,44920,34256],{"class":172},[103,44922,44923],{"class":105,"line":9706},[103,44924,34261],{"class":172},[103,44926,44927],{"class":105,"line":9731},[103,44928,34266],{"class":172},[103,44930,44931,44933,44935,44937,44939],{"class":105,"line":9754},[103,44932,34271],{"class":113},[103,44934,9467],{"class":109},[103,44936,32777],{"class":113},[103,44938,2938],{"class":109},[103,44940,34280],{"class":113},[103,44942,44943],{"class":105,"line":9778},[103,44944,34285],{"class":172},[103,44946,44947,44949,44951,44953,44955],{"class":105,"line":9783},[103,44948,34290],{"class":113},[103,44950,9467],{"class":109},[103,44952,34295],{"class":113},[103,44954,305],{"class":162},[103,44956,120],{"class":113},[103,44958,44959],{"class":105,"line":9788},[103,44960,2389],{"emptyLinePlaceholder":30},[103,44962,44963],{"class":105,"line":9793},[103,44964,34308],{"class":172},[103,44966,44967,44969,44971,44973,44975],{"class":105,"line":9802},[103,44968,34313],{"class":113},[103,44970,159],{"class":109},[103,44972,34318],{"class":113},[103,44974,697],{"class":109},[103,44976,34323],{"class":113},[103,44978,44979],{"class":105,"line":9807},[103,44980,34328],{"class":172},[103,44982,44983,44985,44987,44989],{"class":105,"line":9813},[103,44984,32441],{"class":162},[103,44986,114],{"class":113},[103,44988,34337],{"class":218},[103,44990,34340],{"class":113},[103,44992,44993],{"class":105,"line":9834},[103,44994,2389],{"emptyLinePlaceholder":30},[103,44996,44997],{"class":105,"line":9840},[103,44998,34349],{"class":172},[103,45000,45001,45003,45005,45007,45009],{"class":105,"line":9854},[103,45002,1520],{"class":109},[103,45004,31210],{"class":162},[103,45006,2938],{"class":109},[103,45008,31215],{"class":218},[103,45010,3728],{"class":113},[103,45012,45013],{"class":105,"line":9860},[103,45014,34366],{"class":172},[103,45016,45017,45019,45021],{"class":105,"line":9887},[103,45018,31279],{"class":113},[103,45020,159],{"class":109},[103,45022,44541],{"class":113},[103,45024,45025],{"class":105,"line":9896},[103,45026,34379],{"class":172},[103,45028,45029],{"class":105,"line":9902},[103,45030,34384],{"class":172},[103,45032,45033,45035,45037],{"class":105,"line":9910},[103,45034,34389],{"class":113},[103,45036,34392],{"class":218},[103,45038,30487],{"class":113},[103,45040,45041],{"class":105,"line":9915},[103,45042,34399],{"class":172},[103,45044,45045,45047,45049],{"class":105,"line":16594},[103,45046,34012],{"class":113},[103,45048,159],{"class":109},[103,45050,34408],{"class":113},[103,45052,45053],{"class":105,"line":16600},[103,45054,34413],{"class":172},[103,45056,45057],{"class":105,"line":16623},[103,45058,34418],{"class":113},[103,45060,45061],{"class":105,"line":16629},[103,45062,2389],{"emptyLinePlaceholder":30},[103,45064,45065],{"class":105,"line":16652},[103,45066,34427],{"class":172},[103,45068,45069],{"class":105,"line":16666},[103,45070,34432],{"class":172},[103,45072,45073,45075,45077,45079,45081,45083,45085],{"class":105,"line":16686},[103,45074,31227],{"class":113},[103,45076,159],{"class":109},[103,45078,31234],{"class":218},[103,45080,1693],{"class":109},[103,45082,31239],{"class":113},[103,45084,1690],{"class":109},[103,45086,34109],{"class":218},[103,45088,45089,45091,45093],{"class":105,"line":16692},[103,45090,31279],{"class":113},[103,45092,159],{"class":109},[103,45094,32279],{"class":113},[103,45096,45097],{"class":105,"line":16703},[103,45098,34461],{"class":172},[103,45100,45101],{"class":105,"line":16726},[103,45102,34466],{"class":172},[103,45104,45105,45107,45109,45111,45113,45115,45117,45119,45121,45123,45125,45127,45129,45131,45133,45135,45137,45139,45141,45143,45145,45147,45149],{"class":105,"line":16748},[103,45106,34471],{"class":113},[103,45108,159],{"class":109},[103,45110,1003],{"class":113},[103,45112,34478],{"class":218},[103,45114,491],{"class":113},[103,45116,34483],{"class":218},[103,45118,491],{"class":113},[103,45120,34488],{"class":218},[103,45122,491],{"class":113},[103,45124,34493],{"class":218},[103,45126,491],{"class":113},[103,45128,34498],{"class":218},[103,45130,491],{"class":113},[103,45132,34503],{"class":218},[103,45134,491],{"class":113},[103,45136,34508],{"class":218},[103,45138,491],{"class":113},[103,45140,34513],{"class":218},[103,45142,491],{"class":113},[103,45144,34518],{"class":218},[103,45146,491],{"class":113},[103,45148,34523],{"class":218},[103,45150,33236],{"class":113},[103,45152,45153,45155],{"class":105,"line":16753},[103,45154,34168],{"class":109},[103,45156,32874],{"class":113},[103,45158,45159],{"class":105,"line":16759},[103,45160,34536],{"class":172},[103,45162,45163,45165,45167,45169],{"class":105,"line":16773},[103,45164,3392],{"class":109},[103,45166,34543],{"class":113},[103,45168,26033],{"class":109},[103,45170,34187],{"class":113},[103,45172,45173,45175,45177],{"class":105,"line":16786},[103,45174,32600],{"class":113},[103,45176,159],{"class":109},[103,45178,32605],{"class":113},[103,45180,45181,45183,45185],{"class":105,"line":16791},[103,45182,32615],{"class":113},[103,45184,159],{"class":109},[103,45186,32620],{"class":113},[103,45188,45189],{"class":105,"line":16805},[103,45190,2389],{"emptyLinePlaceholder":30},[103,45192,45193],{"class":105,"line":16810},[103,45194,34572],{"class":172},[103,45196,45197],{"class":105,"line":16816},[103,45198,32865],{"class":113},[103,45200,45201],{"class":105,"line":16821},[103,45202,34581],{"class":172},[103,45204,45205,45207,45209],{"class":105,"line":16835},[103,45206,32650],{"class":113},[103,45208,159],{"class":109},[103,45210,32655],{"class":113},[103,45212,45213],{"class":105,"line":16840},[103,45214,34594],{"class":172},[103,45216,45217,45219,45221,45223,45225,45227,45229],{"class":105,"line":16845},[103,45218,32667],{"class":113},[103,45220,159],{"class":109},[103,45222,32672],{"class":113},[103,45224,32675],{"class":5206},[103,45226,159],{"class":109},[103,45228,331],{"class":162},[103,45230,120],{"class":113},[103,45232,45233],{"class":105,"line":16859},[103,45234,34615],{"class":172},[103,45236,45237,45239,45241],{"class":105,"line":16871},[103,45238,34620],{"class":113},[103,45240,159],{"class":109},[103,45242,34625],{"class":113},[103,45244,45245,45247,45249],{"class":105,"line":16876},[103,45246,34630],{"class":113},[103,45248,159],{"class":109},[103,45250,34635],{"class":113},[103,45252,45253,45255,45257,45259,45261,45263,45265,45267],{"class":105,"line":16889},[103,45254,34640],{"class":162},[103,45256,114],{"class":113},[103,45258,34645],{"class":218},[103,45260,34648],{"class":113},[103,45262,34651],{"class":218},[103,45264,491],{"class":113},[103,45266,34656],{"class":218},[103,45268,34659],{"class":113},[74,45270,45272],{"id":45271},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45274,45275],{},"猫狗分类任务",[14,45277,45278],{},"划分数据集和验证集",[94,45280,45282],{"className":30368,"code":45281,"language":30370,"meta":24,"style":24},"# 创建脚本，用于划分数据集和验证集\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",[100,45283,45284,45289,45296,45301,45312,45319,45323,45333,45347,45356,45360,45365,45375,45395,45399,45404,45414,45425,45438,45442,45447,45456,45466,45477,45481,45486,45496,45500,45505,45510,45515,45520,45525,45529,45539,45566,45579,45591,45618,45623,45628,45642,45647,45659,45674,45689,45697,45701,45706,45712,45724,45737,45742,45747,45752,45802,45808,45812],{"__ignoreMap":24},[103,45285,45286],{"class":105,"line":106},[103,45287,45288],{"class":172},"# 创建脚本，用于划分数据集和验证集\n",[103,45290,45291,45293],{"class":105,"line":25},[103,45292,30382],{"class":109},[103,45294,45295],{"class":113}," os\n",[103,45297,45298],{"class":105,"line":1168},[103,45299,45300],{"class":172},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[103,45302,45303,45305,45308,45310],{"class":105,"line":1183},[103,45304,30727],{"class":109},[103,45306,45307],{"class":113}," shutil ",[103,45309,30382],{"class":109},[103,45311,31812],{"class":113},[103,45313,45314,45316],{"class":105,"line":1189},[103,45315,30382],{"class":109},[103,45317,45318],{"class":113}," random\n",[103,45320,45321],{"class":105,"line":1203},[103,45322,2389],{"emptyLinePlaceholder":30},[103,45324,45325,45327,45330],{"class":105,"line":1209},[103,45326,31937],{"class":109},[103,45328,45329],{"class":1952}," mkfile",[103,45331,45332],{"class":113},"(file):\n",[103,45334,45335,45337,45339,45342,45345],{"class":105,"line":1300},[103,45336,3090],{"class":109},[103,45338,38920],{"class":109},[103,45340,45341],{"class":113}," os.path.exists(",[103,45343,45344],{"class":5206},"file",[103,45346,30776],{"class":113},[103,45348,45349,45352,45354],{"class":105,"line":1306},[103,45350,45351],{"class":113},"        os.makedirs(",[103,45353,45344],{"class":5206},[103,45355,120],{"class":113},[103,45357,45358],{"class":105,"line":1318},[103,45359,2389],{"emptyLinePlaceholder":30},[103,45361,45362],{"class":105,"line":1601},[103,45363,45364],{"class":172},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[103,45366,45367,45370,45372],{"class":105,"line":1606},[103,45368,45369],{"class":113},"file_path",[103,45371,159],{"class":109},[103,45373,45374],{"class":218},"'data_cat_dog'\n",[103,45376,45377,45380,45382,45385,45387,45390,45392],{"class":105,"line":1612},[103,45378,45379],{"class":113},"flower_class",[103,45381,159],{"class":109},[103,45383,45384],{"class":113},"[cla ",[103,45386,3014],{"class":109},[103,45388,45389],{"class":113}," cla ",[103,45391,26033],{"class":109},[103,45393,45394],{"class":113}," os.listdir(file_path)]\n",[103,45396,45397],{"class":105,"line":1617},[103,45398,2389],{"emptyLinePlaceholder":30},[103,45400,45401],{"class":105,"line":1631},[103,45402,45403],{"class":172},"# 创建训练集train文件夹\n",[103,45405,45406,45409,45412],{"class":105,"line":1636},[103,45407,45408],{"class":113},"mkfile(",[103,45410,45411],{"class":218},"'data\u002Ftrain'",[103,45413,120],{"class":113},[103,45415,45416,45418,45420,45422],{"class":105,"line":1642},[103,45417,3014],{"class":109},[103,45419,45389],{"class":113},[103,45421,26033],{"class":109},[103,45423,45424],{"class":113}," flower_class:\n",[103,45426,45427,45430,45433,45435],{"class":105,"line":1663},[103,45428,45429],{"class":113},"    mkfile(",[103,45431,45432],{"class":218},"'data\u002Ftrain\u002F'",[103,45434,594],{"class":109},[103,45436,45437],{"class":113},"cla)\n",[103,45439,45440],{"class":105,"line":1668},[103,45441,2389],{"emptyLinePlaceholder":30},[103,45443,45444],{"class":105,"line":1682},[103,45445,45446],{"class":172},"# 创建验证集val文件夹\n",[103,45448,45449,45451,45454],{"class":105,"line":1687},[103,45450,45408],{"class":113},[103,45452,45453],{"class":218},"'data\u002Ftest'",[103,45455,120],{"class":113},[103,45457,45458,45460,45462,45464],{"class":105,"line":1716},[103,45459,3014],{"class":109},[103,45461,45389],{"class":113},[103,45463,26033],{"class":109},[103,45465,45424],{"class":113},[103,45467,45468,45470,45473,45475],{"class":105,"line":1721},[103,45469,45429],{"class":113},[103,45471,45472],{"class":218},"'data\u002Ftest\u002F'",[103,45474,594],{"class":109},[103,45476,45437],{"class":113},[103,45478,45479],{"class":105,"line":1738},[103,45480,2389],{"emptyLinePlaceholder":30},[103,45482,45483],{"class":105,"line":1743},[103,45484,45485],{"class":172},"# 划分比例，训练集：测试集=9：1\n",[103,45487,45488,45491,45493],{"class":105,"line":1748},[103,45489,45490],{"class":113},"split_rate",[103,45492,159],{"class":109},[103,45494,45495],{"class":162},"0.1\n",[103,45497,45498],{"class":105,"line":1753},[103,45499,2389],{"emptyLinePlaceholder":30},[103,45501,45502],{"class":105,"line":1767},[103,45503,45504],{"class":172},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[103,45506,45507],{"class":105,"line":1772},[103,45508,45509],{"class":172},"# cla_path：当前类别的原始图片路径\n",[103,45511,45512],{"class":105,"line":2566},[103,45513,45514],{"class":172},"# images：当前类别下所有图片的文件名列表\n",[103,45516,45517],{"class":105,"line":2580},[103,45518,45519],{"class":172},"# num：该类别图片总数\n",[103,45521,45522],{"class":105,"line":2588},[103,45523,45524],{"class":172},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[103,45526,45527],{"class":105,"line":2593},[103,45528,2389],{"emptyLinePlaceholder":30},[103,45530,45531,45533,45535,45537],{"class":105,"line":2599},[103,45532,3014],{"class":109},[103,45534,45389],{"class":113},[103,45536,26033],{"class":109},[103,45538,45424],{"class":113},[103,45540,45541,45544,45546,45549,45551,45554,45557,45559,45561,45563],{"class":105,"line":2605},[103,45542,45543],{"class":113},"    cla_path ",[103,45545,159],{"class":109},[103,45547,45548],{"class":113}," file_path ",[103,45550,594],{"class":109},[103,45552,45553],{"class":218}," '\u002F'",[103,45555,45556],{"class":109}," +",[103,45558,45389],{"class":113},[103,45560,594],{"class":109},[103,45562,45553],{"class":218},[103,45564,45565],{"class":172},"  # 某一类别的子目录\n",[103,45567,45568,45571,45573,45576],{"class":105,"line":2610},[103,45569,45570],{"class":113},"    images ",[103,45572,159],{"class":109},[103,45574,45575],{"class":113}," os.listdir(cla_path)  ",[103,45577,45578],{"class":172},"# iamges 列表存储了该目录下所有图像的名称\n",[103,45580,45581,45584,45586,45588],{"class":105,"line":7938},[103,45582,45583],{"class":113},"    num ",[103,45585,159],{"class":109},[103,45587,7321],{"class":162},[103,45589,45590],{"class":113},"(images)\n",[103,45592,45593,45596,45598,45601,45603,45605,45607,45610,45612,45615],{"class":105,"line":7962},[103,45594,45595],{"class":113},"    eval_index ",[103,45597,159],{"class":109},[103,45599,45600],{"class":113}," random.sample(images, ",[103,45602,606],{"class":5206},[103,45604,159],{"class":109},[103,45606,117],{"class":162},[103,45608,45609],{"class":113},"(num ",[103,45611,568],{"class":109},[103,45613,45614],{"class":113}," split_rate))  ",[103,45616,45617],{"class":172},"# 从images列表中随机抽取 k 个图像名称\n",[103,45619,45620],{"class":105,"line":7967},[103,45621,45622],{"class":172},"    # 遍历该类别下的所有图片\n",[103,45624,45625],{"class":105,"line":7973},[103,45626,45627],{"class":172},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[103,45629,45630,45632,45635,45637,45639],{"class":105,"line":8000},[103,45631,3190],{"class":109},[103,45633,45634],{"class":113}," index, image ",[103,45636,26033],{"class":109},[103,45638,31596],{"class":162},[103,45640,45641],{"class":113},"(images):\n",[103,45643,45644],{"class":105,"line":8005},[103,45645,45646],{"class":172},"        # eval_index 中保存验证集val的图像名称\n",[103,45648,45649,45651,45654,45656],{"class":105,"line":8011},[103,45650,2486],{"class":109},[103,45652,45653],{"class":113}," image ",[103,45655,26033],{"class":109},[103,45657,45658],{"class":113}," eval_index:\n",[103,45660,45661,45664,45666,45669,45671],{"class":105,"line":8023},[103,45662,45663],{"class":113},"            image_path ",[103,45665,159],{"class":109},[103,45667,45668],{"class":113}," cla_path ",[103,45670,594],{"class":109},[103,45672,45673],{"class":113}," image\n",[103,45675,45676,45679,45681,45684,45686],{"class":105,"line":8035},[103,45677,45678],{"class":113},"            new_path ",[103,45680,159],{"class":109},[103,45682,45683],{"class":218}," 'data\u002Ftest\u002F'",[103,45685,45556],{"class":109},[103,45687,45688],{"class":113}," cla\n",[103,45690,45691,45694],{"class":105,"line":8047},[103,45692,45693],{"class":113},"            copy(image_path, new_path)  ",[103,45695,45696],{"class":172},"# 将选中的图像复制到新路径\n",[103,45698,45699],{"class":105,"line":9706},[103,45700,2389],{"emptyLinePlaceholder":30},[103,45702,45703],{"class":105,"line":9731},[103,45704,45705],{"class":172},"        # 其余的图像保存在训练集train中\n",[103,45707,45708,45710],{"class":105,"line":9754},[103,45709,2523],{"class":109},[103,45711,3728],{"class":113},[103,45713,45714,45716,45718,45720,45722],{"class":105,"line":9778},[103,45715,45663],{"class":113},[103,45717,159],{"class":109},[103,45719,45668],{"class":113},[103,45721,594],{"class":109},[103,45723,45673],{"class":113},[103,45725,45726,45728,45730,45733,45735],{"class":105,"line":9783},[103,45727,45678],{"class":113},[103,45729,159],{"class":109},[103,45731,45732],{"class":218}," 'data\u002Ftrain\u002F'",[103,45734,45556],{"class":109},[103,45736,45688],{"class":113},[103,45738,45739],{"class":105,"line":9788},[103,45740,45741],{"class":113},"            copy(image_path, new_path)\n",[103,45743,45744],{"class":105,"line":9793},[103,45745,45746],{"class":172},"            # 打印进度条信息\n",[103,45748,45749],{"class":105,"line":9802},[103,45750,45751],{"class":172},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[103,45753,45754,45756,45758,45760,45763,45765,45767,45770,45772,45774,45776,45779,45782,45784,45786,45789,45792,45794,45796,45799],{"class":105,"line":9807},[103,45755,32441],{"class":162},[103,45757,114],{"class":113},[103,45759,364],{"class":218},[103,45761,45762],{"class":162},"\\r",[103,45764,1003],{"class":218},[103,45766,32449],{"class":162},[103,45768,45769],{"class":218},"] processing [",[103,45771,32449],{"class":162},[103,45773,697],{"class":218},[103,45775,32449],{"class":162},[103,45777,45778],{"class":218},"]\"",[103,45780,45781],{"class":113},".format(cla, index ",[103,45783,594],{"class":109},[103,45785,25108],{"class":162},[103,45787,45788],{"class":113},", num), ",[103,45790,45791],{"class":5206},"end",[103,45793,159],{"class":109},[103,45795,7642],{"class":218},[103,45797,45798],{"class":113},")  ",[103,45800,45801],{"class":172},"# processing bar\n",[103,45803,45804,45806],{"class":105,"line":9813},[103,45805,31289],{"class":162},[103,45807,1965],{"class":113},[103,45809,45810],{"class":105,"line":9834},[103,45811,2389],{"emptyLinePlaceholder":30},[103,45813,45814,45816,45818,45821],{"class":105,"line":9840},[103,45815,30405],{"class":162},[103,45817,114],{"class":113},[103,45819,45820],{"class":218},"\"processing done!\"",[103,45822,120],{"class":113},[14,45824,45825],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21988,45827,45829],{"id":45828},"_242模型代码","2.4.2.模型代码",[14,45831,45832],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[94,45834,45836],{"className":30368,"code":45835,"language":30370,"meta":24,"style":24},"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",[100,45837,45838,45844,45854,45864,45868,45884,45892,45906,45916,45920,45950,45954,45988,46034,46038,46072,46118,46122,46126,46160,46190,46194,46202,46216,46238,46260,46278,46282,46296,46300,46304,46320,46324,46332,46346,46356,46400,46404,46432,46436,46446,46474,46478,46514,46518,46546,46550,46560,46592,46624,46652,46656,46666,46698,46730,46762,46794,46826,46854,46858,46868,46900,46932,46944,46948,46960,46964,46968,46980,46988,47008,47012,47016,47020,47024,47028,47032,47046,47054,47062,47074,47088,47096,47100,47108,47118,47128,47138,47148,47158,47164,47168,47172,47184,47204,47212],{"__ignoreMap":24},[103,45839,45840,45842],{"class":105,"line":106},[103,45841,30382],{"class":109},[103,45843,30385],{"class":113},[103,45845,45846,45848,45850,45852],{"class":105,"line":25},[103,45847,30727],{"class":109},[103,45849,30730],{"class":113},[103,45851,30382],{"class":109},[103,45853,30735],{"class":113},[103,45855,45856,45858,45860,45862],{"class":105,"line":1168},[103,45857,30727],{"class":109},[103,45859,30747],{"class":113},[103,45861,30382],{"class":109},[103,45863,30752],{"class":113},[103,45865,45866],{"class":105,"line":1183},[103,45867,2389],{"emptyLinePlaceholder":30},[103,45869,45870,45872,45874,45876,45878,45880,45882],{"class":105,"line":1189},[103,45871,14684],{"class":109},[103,45873,41483],{"class":1952},[103,45875,114],{"class":113},[103,45877,30768],{"class":1952},[103,45879,671],{"class":113},[103,45881,30773],{"class":1952},[103,45883,30776],{"class":113},[103,45885,45886,45888,45890],{"class":105,"line":1203},[103,45887,30791],{"class":109},[103,45889,30794],{"class":162},[103,45891,41502],{"class":113},[103,45893,45894,45896,45898,45900,45902,45904],{"class":105,"line":1209},[103,45895,30807],{"class":162},[103,45897,41509],{"class":113},[103,45899,30813],{"class":162},[103,45901,30816],{"class":113},[103,45903,30819],{"class":162},[103,45905,1965],{"class":113},[103,45907,45908,45910,45912,45914],{"class":105,"line":1300},[103,45909,30835],{"class":162},[103,45911,34761],{"class":113},[103,45913,159],{"class":109},[103,45915,34766],{"class":113},[103,45917,45918],{"class":105,"line":1306},[103,45919,41532],{"class":172},[103,45921,45922,45924,45926,45928,45930,45932,45934,45936,45938,45940,45942,45944,45946,45948],{"class":105,"line":1318},[103,45923,30835],{"class":162},[103,45925,41539],{"class":113},[103,45927,159],{"class":109},[103,45929,30843],{"class":113},[103,45931,30846],{"class":5206},[103,45933,159],{"class":109},[103,45935,41550],{"class":113},[103,45937,30855],{"class":5206},[103,45939,159],{"class":109},[103,45941,41557],{"class":113},[103,45943,30864],{"class":5206},[103,45945,159],{"class":109},[103,45947,331],{"class":162},[103,45949,120],{"class":113},[103,45951,45952],{"class":105,"line":1601},[103,45953,41570],{"class":172},[103,45955,45956,45958,45960,45962,45964,45966,45968,45970,45972,45974,45976,45978,45980,45982,45984,45986],{"class":105,"line":1606},[103,45957,30835],{"class":162},[103,45959,41577],{"class":113},[103,45961,159],{"class":109},[103,45963,30843],{"class":113},[103,45965,30846],{"class":5206},[103,45967,159],{"class":109},[103,45969,41550],{"class":113},[103,45971,30855],{"class":5206},[103,45973,159],{"class":109},[103,45975,41594],{"class":113},[103,45977,305],{"class":162},[103,45979,41599],{"class":113},[103,45981,30864],{"class":5206},[103,45983,159],{"class":109},[103,45985,331],{"class":162},[103,45987,120],{"class":113},[103,45989,45990,45992,45994,45996,45998,46000,46002,46004,46006,46008,46010,46012,46014,46016,46018,46020,46022,46024,46026,46028,46030,46032],{"class":105,"line":1612},[103,45991,30835],{"class":162},[103,45993,41614],{"class":113},[103,45995,159],{"class":109},[103,45997,30843],{"class":113},[103,45999,30846],{"class":5206},[103,46001,159],{"class":109},[103,46003,41594],{"class":113},[103,46005,305],{"class":162},[103,46007,41599],{"class":113},[103,46009,30855],{"class":5206},[103,46011,159],{"class":109},[103,46013,41594],{"class":113},[103,46015,331],{"class":162},[103,46017,41599],{"class":113},[103,46019,30864],{"class":5206},[103,46021,159],{"class":109},[103,46023,185],{"class":162},[103,46025,491],{"class":113},[103,46027,30873],{"class":5206},[103,46029,159],{"class":109},[103,46031,331],{"class":162},[103,46033,120],{"class":113},[103,46035,46036],{"class":105,"line":1617},[103,46037,41659],{"class":172},[103,46039,46040,46042,46044,46046,46048,46050,46052,46054,46056,46058,46060,46062,46064,46066,46068,46070],{"class":105,"line":1631},[103,46041,30835],{"class":162},[103,46043,41666],{"class":113},[103,46045,159],{"class":109},[103,46047,30843],{"class":113},[103,46049,30846],{"class":5206},[103,46051,159],{"class":109},[103,46053,41550],{"class":113},[103,46055,30855],{"class":5206},[103,46057,159],{"class":109},[103,46059,41683],{"class":113},[103,46061,305],{"class":162},[103,46063,41599],{"class":113},[103,46065,30864],{"class":5206},[103,46067,159],{"class":109},[103,46069,331],{"class":162},[103,46071,120],{"class":113},[103,46073,46074,46076,46078,46080,46082,46084,46086,46088,46090,46092,46094,46096,46098,46100,46102,46104,46106,46108,46110,46112,46114,46116],{"class":105,"line":1636},[103,46075,30835],{"class":162},[103,46077,41702],{"class":113},[103,46079,159],{"class":109},[103,46081,30843],{"class":113},[103,46083,30846],{"class":5206},[103,46085,159],{"class":109},[103,46087,41683],{"class":113},[103,46089,305],{"class":162},[103,46091,41599],{"class":113},[103,46093,30855],{"class":5206},[103,46095,159],{"class":109},[103,46097,41683],{"class":113},[103,46099,331],{"class":162},[103,46101,41599],{"class":113},[103,46103,30864],{"class":5206},[103,46105,159],{"class":109},[103,46107,432],{"class":162},[103,46109,491],{"class":113},[103,46111,30873],{"class":5206},[103,46113,159],{"class":109},[103,46115,191],{"class":162},[103,46117,120],{"class":113},[103,46119,46120],{"class":105,"line":1642},[103,46121,41747],{"class":172},[103,46123,46124],{"class":105,"line":1663},[103,46125,41752],{"class":172},[103,46127,46128,46130,46132,46134,46136,46138,46140,46142,46144,46146,46148,46150,46152,46154,46156,46158],{"class":105,"line":1668},[103,46129,30835],{"class":162},[103,46131,41759],{"class":113},[103,46133,159],{"class":109},[103,46135,34819],{"class":113},[103,46137,30864],{"class":5206},[103,46139,159],{"class":109},[103,46141,185],{"class":162},[103,46143,491],{"class":113},[103,46145,30919],{"class":5206},[103,46147,159],{"class":109},[103,46149,331],{"class":162},[103,46151,491],{"class":113},[103,46153,30873],{"class":5206},[103,46155,159],{"class":109},[103,46157,331],{"class":162},[103,46159,120],{"class":113},[103,46161,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180,46182,46184,46186,46188],{"class":105,"line":1682},[103,46163,30835],{"class":162},[103,46165,41794],{"class":113},[103,46167,159],{"class":109},[103,46169,30843],{"class":113},[103,46171,30846],{"class":5206},[103,46173,159],{"class":109},[103,46175,41550],{"class":113},[103,46177,30855],{"class":5206},[103,46179,159],{"class":109},[103,46181,41811],{"class":113},[103,46183,30864],{"class":5206},[103,46185,159],{"class":109},[103,46187,331],{"class":162},[103,46189,120],{"class":113},[103,46191,46192],{"class":105,"line":1687},[103,46193,2389],{"emptyLinePlaceholder":30},[103,46195,46196,46198,46200],{"class":105,"line":1716},[103,46197,30791],{"class":109},[103,46199,31083],{"class":1952},[103,46201,31086],{"class":113},[103,46203,46204,46206,46208,46210,46212,46214],{"class":105,"line":1721},[103,46205,41836],{"class":113},[103,46207,159],{"class":109},[103,46209,30813],{"class":162},[103,46211,35174],{"class":113},[103,46213,30813],{"class":162},[103,46215,41847],{"class":113},[103,46217,46218,46220,46222,46224,46226,46228,46230,46232,46234,46236],{"class":105,"line":1738},[103,46219,7075],{"class":113},[103,46221,159],{"class":109},[103,46223,30813],{"class":162},[103,46225,35174],{"class":113},[103,46227,30813],{"class":162},[103,46229,41862],{"class":113},[103,46231,30813],{"class":162},[103,46233,35174],{"class":113},[103,46235,30813],{"class":162},[103,46237,41871],{"class":113},[103,46239,46240,46242,46244,46246,46248,46250,46252,46254,46256,46258],{"class":105,"line":1743},[103,46241,41876],{"class":113},[103,46243,159],{"class":109},[103,46245,30813],{"class":162},[103,46247,35174],{"class":113},[103,46249,30813],{"class":162},[103,46251,41887],{"class":113},[103,46253,30813],{"class":162},[103,46255,35174],{"class":113},[103,46257,30813],{"class":162},[103,46259,41896],{"class":113},[103,46261,46262,46264,46266,46268,46270,46272,46274,46276],{"class":105,"line":1748},[103,46263,41901],{"class":113},[103,46265,159],{"class":109},[103,46267,30813],{"class":162},[103,46269,35174],{"class":113},[103,46271,30813],{"class":162},[103,46273,41912],{"class":113},[103,46275,30813],{"class":162},[103,46277,41917],{"class":113},[103,46279,46280],{"class":105,"line":1753},[103,46281,41922],{"class":172},[103,46283,46284,46286,46288,46290,46292,46294],{"class":105,"line":1767},[103,46285,14742],{"class":109},[103,46287,41929],{"class":113},[103,46289,32675],{"class":5206},[103,46291,159],{"class":109},[103,46293,331],{"class":162},[103,46295,120],{"class":113},[103,46297,46298],{"class":105,"line":1772},[103,46299,2389],{"emptyLinePlaceholder":30},[103,46301,46302],{"class":105,"line":2566},[103,46303,41950],{"class":172},[103,46305,46306,46308,46310,46312,46314,46316,46318],{"class":105,"line":2580},[103,46307,14684],{"class":109},[103,46309,41957],{"class":1952},[103,46311,114],{"class":113},[103,46313,30768],{"class":1952},[103,46315,671],{"class":113},[103,46317,30773],{"class":1952},[103,46319,30776],{"class":113},[103,46321,46322],{"class":105,"line":2588},[103,46323,41972],{"class":172},[103,46325,46326,46328,46330],{"class":105,"line":2593},[103,46327,30791],{"class":109},[103,46329,30794],{"class":162},[103,46331,41981],{"class":113},[103,46333,46334,46336,46338,46340,46342,46344],{"class":105,"line":2599},[103,46335,30807],{"class":162},[103,46337,41988],{"class":113},[103,46339,30813],{"class":162},[103,46341,30816],{"class":113},[103,46343,30819],{"class":162},[103,46345,1965],{"class":113},[103,46347,46348,46350,46352,46354],{"class":105,"line":2605},[103,46349,30835],{"class":162},[103,46351,42003],{"class":113},[103,46353,159],{"class":109},[103,46355,37999],{"class":113},[103,46357,46358,46360,46362,46364,46366,46368,46370,46372,46374,46376,46378,46380,46382,46384,46386,46388,46390,46392,46394,46396,46398],{"class":105,"line":2610},[103,46359,38004],{"class":113},[103,46361,30846],{"class":5206},[103,46363,159],{"class":109},[103,46365,185],{"class":162},[103,46367,491],{"class":113},[103,46369,30855],{"class":5206},[103,46371,159],{"class":109},[103,46373,317],{"class":162},[103,46375,491],{"class":113},[103,46377,30864],{"class":5206},[103,46379,159],{"class":109},[103,46381,482],{"class":162},[103,46383,491],{"class":113},[103,46385,30919],{"class":5206},[103,46387,159],{"class":109},[103,46389,191],{"class":162},[103,46391,491],{"class":113},[103,46393,30873],{"class":5206},[103,46395,159],{"class":109},[103,46397,185],{"class":162},[103,46399,38037],{"class":113},[103,46401,46402],{"class":105,"line":7938},[103,46403,38042],{"class":113},[103,46405,46406,46408,46410,46412,46414,46416,46418,46420,46422,46424,46426,46428,46430],{"class":105,"line":7962},[103,46407,38087],{"class":113},[103,46409,30864],{"class":5206},[103,46411,159],{"class":109},[103,46413,185],{"class":162},[103,46415,491],{"class":113},[103,46417,30919],{"class":5206},[103,46419,159],{"class":109},[103,46421,191],{"class":162},[103,46423,491],{"class":113},[103,46425,30873],{"class":5206},[103,46427,159],{"class":109},[103,46429,331],{"class":162},[103,46431,120],{"class":113},[103,46433,46434],{"class":105,"line":7967},[103,46435,38116],{"class":113},[103,46437,46438,46440,46442,46444],{"class":105,"line":7973},[103,46439,30835],{"class":162},[103,46441,42094],{"class":113},[103,46443,159],{"class":109},[103,46445,37999],{"class":113},[103,46447,46448,46450,46452,46454,46456,46458,46460,46462,46464,46466,46468,46470,46472],{"class":105,"line":8000},[103,46449,38004],{"class":113},[103,46451,30846],{"class":5206},[103,46453,159],{"class":109},[103,46455,317],{"class":162},[103,46457,491],{"class":113},[103,46459,30855],{"class":5206},[103,46461,159],{"class":109},[103,46463,317],{"class":162},[103,46465,491],{"class":113},[103,46467,30864],{"class":5206},[103,46469,159],{"class":109},[103,46471,331],{"class":162},[103,46473,38037],{"class":113},[103,46475,46476],{"class":105,"line":8005},[103,46477,38042],{"class":113},[103,46479,46480,46482,46484,46486,46488,46490,46492,46494,46496,46498,46500,46502,46504,46506,46508,46510,46512],{"class":105,"line":8011},[103,46481,38004],{"class":113},[103,46483,30846],{"class":5206},[103,46485,159],{"class":109},[103,46487,317],{"class":162},[103,46489,491],{"class":113},[103,46491,30855],{"class":5206},[103,46493,159],{"class":109},[103,46495,42149],{"class":162},[103,46497,491],{"class":113},[103,46499,30864],{"class":5206},[103,46501,159],{"class":109},[103,46503,185],{"class":162},[103,46505,491],{"class":113},[103,46507,30873],{"class":5206},[103,46509,159],{"class":109},[103,46511,331],{"class":162},[103,46513,38037],{"class":113},[103,46515,46516],{"class":105,"line":8023},[103,46517,38042],{"class":113},[103,46519,46520,46522,46524,46526,46528,46530,46532,46534,46536,46538,46540,46542,46544],{"class":105,"line":8035},[103,46521,38087],{"class":113},[103,46523,30864],{"class":5206},[103,46525,159],{"class":109},[103,46527,185],{"class":162},[103,46529,491],{"class":113},[103,46531,30919],{"class":5206},[103,46533,159],{"class":109},[103,46535,191],{"class":162},[103,46537,491],{"class":113},[103,46539,30873],{"class":5206},[103,46541,159],{"class":109},[103,46543,331],{"class":162},[103,46545,120],{"class":113},[103,46547,46548],{"class":105,"line":8047},[103,46549,38116],{"class":113},[103,46551,46552,46554,46556,46558],{"class":105,"line":9706},[103,46553,30835],{"class":162},[103,46555,42210],{"class":113},[103,46557,159],{"class":109},[103,46559,37999],{"class":113},[103,46561,46562,46564,46566,46568,46570,46572,46574,46576,46578,46580,46582,46584,46586,46588,46590],{"class":105,"line":9731},[103,46563,42219],{"class":113},[103,46565,42149],{"class":162},[103,46567,491],{"class":113},[103,46569,317],{"class":162},[103,46571,42228],{"class":113},[103,46573,323],{"class":162},[103,46575,491],{"class":113},[103,46577,32060],{"class":162},[103,46579,42237],{"class":113},[103,46581,714],{"class":162},[103,46583,491],{"class":113},[103,46585,311],{"class":162},[103,46587,42246],{"class":113},[103,46589,311],{"class":162},[103,46591,38037],{"class":113},[103,46593,46594,46596,46598,46600,46602,46604,46606,46608,46610,46612,46614,46616,46618,46620,46622],{"class":105,"line":9754},[103,46595,42219],{"class":113},[103,46597,34860],{"class":162},[103,46599,491],{"class":113},[103,46601,32060],{"class":162},[103,46603,42228],{"class":113},[103,46605,32060],{"class":162},[103,46607,491],{"class":113},[103,46609,42149],{"class":162},[103,46611,42237],{"class":113},[103,46613,311],{"class":162},[103,46615,491],{"class":113},[103,46617,323],{"class":162},[103,46619,42246],{"class":113},[103,46621,317],{"class":162},[103,46623,38037],{"class":113},[103,46625,46626,46628,46630,46632,46634,46636,46638,46640,46642,46644,46646,46648,46650],{"class":105,"line":9778},[103,46627,38087],{"class":113},[103,46629,30864],{"class":5206},[103,46631,159],{"class":109},[103,46633,185],{"class":162},[103,46635,491],{"class":113},[103,46637,30919],{"class":5206},[103,46639,159],{"class":109},[103,46641,191],{"class":162},[103,46643,491],{"class":113},[103,46645,30873],{"class":5206},[103,46647,159],{"class":109},[103,46649,331],{"class":162},[103,46651,120],{"class":113},[103,46653,46654],{"class":105,"line":9783},[103,46655,38116],{"class":113},[103,46657,46658,46660,46662,46664],{"class":105,"line":9788},[103,46659,30835],{"class":162},[103,46661,42321],{"class":113},[103,46663,159],{"class":109},[103,46665,37999],{"class":113},[103,46667,46668,46670,46672,46674,46676,46678,46680,46682,46684,46686,46688,46690,46692,46694,46696],{"class":105,"line":9793},[103,46669,42219],{"class":113},[103,46671,42332],{"class":162},[103,46673,491],{"class":113},[103,46675,42149],{"class":162},[103,46677,42228],{"class":113},[103,46679,323],{"class":162},[103,46681,491],{"class":113},[103,46683,42345],{"class":162},[103,46685,42237],{"class":113},[103,46687,714],{"class":162},[103,46689,491],{"class":113},[103,46691,720],{"class":162},[103,46693,42246],{"class":113},[103,46695,317],{"class":162},[103,46697,38037],{"class":113},[103,46699,46700,46702,46704,46706,46708,46710,46712,46714,46716,46718,46720,46722,46724,46726,46728],{"class":105,"line":9802},[103,46701,42219],{"class":113},[103,46703,38447],{"class":162},[103,46705,491],{"class":113},[103,46707,21038],{"class":162},[103,46709,42228],{"class":113},[103,46711,731],{"class":162},[103,46713,491],{"class":113},[103,46715,31491],{"class":162},[103,46717,42237],{"class":113},[103,46719,913],{"class":162},[103,46721,491],{"class":113},[103,46723,317],{"class":162},[103,46725,42246],{"class":113},[103,46727,317],{"class":162},[103,46729,38037],{"class":113},[103,46731,46732,46734,46736,46738,46740,46742,46744,46746,46748,46750,46752,46754,46756,46758,46760],{"class":105,"line":9807},[103,46733,42219],{"class":113},[103,46735,38447],{"class":162},[103,46737,491],{"class":113},[103,46739,32060],{"class":162},[103,46741,42228],{"class":113},[103,46743,32060],{"class":162},[103,46745,491],{"class":113},[103,46747,34860],{"class":162},[103,46749,42237],{"class":113},[103,46751,913],{"class":162},[103,46753,491],{"class":113},[103,46755,317],{"class":162},[103,46757,42246],{"class":113},[103,46759,317],{"class":162},[103,46761,38037],{"class":113},[103,46763,46764,46766,46768,46770,46772,46774,46776,46778,46780,46782,46784,46786,46788,46790,46792],{"class":105,"line":9813},[103,46765,42219],{"class":113},[103,46767,38447],{"class":162},[103,46769,491],{"class":113},[103,46771,731],{"class":162},[103,46773,42228],{"class":113},[103,46775,32060],{"class":162},[103,46777,491],{"class":113},[103,46779,42442],{"class":162},[103,46781,42237],{"class":113},[103,46783,311],{"class":162},[103,46785,491],{"class":113},[103,46787,317],{"class":162},[103,46789,42246],{"class":113},[103,46791,317],{"class":162},[103,46793,38037],{"class":113},[103,46795,46796,46798,46800,46802,46804,46806,46808,46810,46812,46814,46816,46818,46820,46822,46824],{"class":105,"line":9834},[103,46797,42219],{"class":113},[103,46799,42463],{"class":162},[103,46801,491],{"class":113},[103,46803,34860],{"class":162},[103,46805,42228],{"class":113},[103,46807,21038],{"class":162},[103,46809,491],{"class":113},[103,46811,42476],{"class":162},[103,46813,42237],{"class":113},[103,46815,311],{"class":162},[103,46817,491],{"class":113},[103,46819,32060],{"class":162},[103,46821,42246],{"class":113},[103,46823,32060],{"class":162},[103,46825,38037],{"class":113},[103,46827,46828,46830,46832,46834,46836,46838,46840,46842,46844,46846,46848,46850,46852],{"class":105,"line":9840},[103,46829,38087],{"class":113},[103,46831,30864],{"class":5206},[103,46833,159],{"class":109},[103,46835,185],{"class":162},[103,46837,491],{"class":113},[103,46839,30919],{"class":5206},[103,46841,159],{"class":109},[103,46843,191],{"class":162},[103,46845,491],{"class":113},[103,46847,30873],{"class":5206},[103,46849,159],{"class":109},[103,46851,331],{"class":162},[103,46853,120],{"class":113},[103,46855,46856],{"class":105,"line":9854},[103,46857,38116],{"class":113},[103,46859,46860,46862,46864,46866],{"class":105,"line":9860},[103,46861,30835],{"class":162},[103,46863,42529],{"class":113},[103,46865,159],{"class":109},[103,46867,37999],{"class":113},[103,46869,46870,46872,46874,46876,46878,46880,46882,46884,46886,46888,46890,46892,46894,46896,46898],{"class":105,"line":9887},[103,46871,42219],{"class":113},[103,46873,42540],{"class":162},[103,46875,491],{"class":113},[103,46877,34860],{"class":162},[103,46879,42228],{"class":113},[103,46881,21038],{"class":162},[103,46883,491],{"class":113},[103,46885,42476],{"class":162},[103,46887,42237],{"class":113},[103,46889,311],{"class":162},[103,46891,491],{"class":113},[103,46893,32060],{"class":162},[103,46895,42246],{"class":113},[103,46897,32060],{"class":162},[103,46899,38037],{"class":113},[103,46901,46902,46904,46906,46908,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930],{"class":105,"line":9896},[103,46903,42219],{"class":113},[103,46905,42540],{"class":162},[103,46907,491],{"class":113},[103,46909,34930],{"class":162},[103,46911,42228],{"class":113},[103,46913,42149],{"class":162},[103,46915,491],{"class":113},[103,46917,34930],{"class":162},[103,46919,42237],{"class":113},[103,46921,720],{"class":162},[103,46923,491],{"class":113},[103,46925,32060],{"class":162},[103,46927,42246],{"class":113},[103,46929,32060],{"class":162},[103,46931,38037],{"class":113},[103,46933,46934,46936,46938,46940,46942],{"class":105,"line":9902},[103,46935,42603],{"class":113},[103,46937,331],{"class":162},[103,46939,491],{"class":113},[103,46941,331],{"class":162},[103,46943,42612],{"class":113},[103,46945,46946],{"class":105,"line":9910},[103,46947,38780],{"class":113},[103,46949,46950,46952,46954,46956,46958],{"class":105,"line":9915},[103,46951,38785],{"class":113},[103,46953,42623],{"class":162},[103,46955,491],{"class":113},[103,46957,191],{"class":162},[103,46959,120],{"class":113},[103,46961,46962],{"class":105,"line":16594},[103,46963,38116],{"class":113},[103,46965,46966],{"class":105,"line":16600},[103,46967,42638],{"class":172},[103,46969,46970,46972,46974,46976,46978],{"class":105,"line":16623},[103,46971,3392],{"class":109},[103,46973,38858],{"class":113},[103,46975,26033],{"class":109},[103,46977,38863],{"class":162},[103,46979,38866],{"class":113},[103,46981,46982,46984,46986],{"class":105,"line":16629},[103,46983,4631],{"class":109},[103,46985,38878],{"class":162},[103,46987,38881],{"class":113},[103,46989,46990,46992,46994,46996,46998,47000,47002,47004,47006],{"class":105,"line":16652},[103,46991,38891],{"class":113},[103,46993,42665],{"class":5206},[103,46995,159],{"class":109},[103,46997,42670],{"class":218},[103,46999,491],{"class":113},[103,47001,38894],{"class":5206},[103,47003,159],{"class":109},[103,47005,38899],{"class":218},[103,47007,120],{"class":113},[103,47009,47010],{"class":105,"line":16666},[103,47011,42685],{"class":172},[103,47013,47014],{"class":105,"line":16686},[103,47015,42690],{"class":172},[103,47017,47018],{"class":105,"line":16692},[103,47019,42695],{"class":172},[103,47021,47022],{"class":105,"line":16703},[103,47023,42700],{"class":172},[103,47025,47026],{"class":105,"line":16726},[103,47027,42705],{"class":172},[103,47029,47030],{"class":105,"line":16748},[103,47031,42710],{"class":172},[103,47033,47034,47036,47038,47040,47042,47044],{"class":105,"line":16753},[103,47035,38911],{"class":109},[103,47037,38914],{"class":113},[103,47039,38917],{"class":109},[103,47041,38920],{"class":109},[103,47043,38923],{"class":162},[103,47045,3728],{"class":113},[103,47047,47048,47050,47052],{"class":105,"line":16759},[103,47049,38935],{"class":113},[103,47051,305],{"class":162},[103,47053,120],{"class":113},[103,47055,47056,47058,47060],{"class":105,"line":16773},[103,47057,42737],{"class":109},[103,47059,38878],{"class":162},[103,47061,38954],{"class":113},[103,47063,47064,47066,47068,47070,47072],{"class":105,"line":16786},[103,47065,42746],{"class":113},[103,47067,305],{"class":162},[103,47069,491],{"class":113},[103,47071,38976],{"class":162},[103,47073,120],{"class":113},[103,47075,47076,47078,47080,47082,47084,47086],{"class":105,"line":16791},[103,47077,42759],{"class":109},[103,47079,38914],{"class":113},[103,47081,38917],{"class":109},[103,47083,38920],{"class":109},[103,47085,38923],{"class":162},[103,47087,3728],{"class":113},[103,47089,47090,47092,47094],{"class":105,"line":16805},[103,47091,42774],{"class":113},[103,47093,305],{"class":162},[103,47095,120],{"class":113},[103,47097,47098],{"class":105,"line":16810},[103,47099,35155],{"class":172},[103,47101,47102,47104,47106],{"class":105,"line":16816},[103,47103,30791],{"class":109},[103,47105,31083],{"class":1952},[103,47107,31086],{"class":113},[103,47109,47110,47112,47114,47116],{"class":105,"line":16821},[103,47111,31091],{"class":113},[103,47113,159],{"class":109},[103,47115,30813],{"class":162},[103,47117,42801],{"class":113},[103,47119,47120,47122,47124,47126],{"class":105,"line":16835},[103,47121,31091],{"class":113},[103,47123,159],{"class":109},[103,47125,30813],{"class":162},[103,47127,42812],{"class":113},[103,47129,47130,47132,47134,47136],{"class":105,"line":16840},[103,47131,31091],{"class":113},[103,47133,159],{"class":109},[103,47135,30813],{"class":162},[103,47137,42823],{"class":113},[103,47139,47140,47142,47144,47146],{"class":105,"line":16845},[103,47141,31091],{"class":113},[103,47143,159],{"class":109},[103,47145,30813],{"class":162},[103,47147,42834],{"class":113},[103,47149,47150,47152,47154,47156],{"class":105,"line":16859},[103,47151,31091],{"class":113},[103,47153,159],{"class":109},[103,47155,30813],{"class":162},[103,47157,42845],{"class":113},[103,47159,47160,47162],{"class":105,"line":16871},[103,47161,14742],{"class":109},[103,47163,31199],{"class":113},[103,47165,47166],{"class":105,"line":16876},[103,47167,2389],{"emptyLinePlaceholder":30},[103,47169,47170],{"class":105,"line":16889},[103,47171,42860],{"class":172},[103,47173,47174,47176,47178,47180,47182],{"class":105,"line":16894},[103,47175,1520],{"class":109},[103,47177,31210],{"class":162},[103,47179,2938],{"class":109},[103,47181,31215],{"class":218},[103,47183,3728],{"class":113},[103,47185,47186,47188,47190,47192,47194,47196,47198,47200,47202],{"class":105,"line":16899},[103,47187,31227],{"class":113},[103,47189,159],{"class":109},[103,47191,30441],{"class":113},[103,47193,31234],{"class":218},[103,47195,1693],{"class":109},[103,47197,31239],{"class":113},[103,47199,1690],{"class":109},[103,47201,30466],{"class":218},[103,47203,120],{"class":113},[103,47205,47206,47208,47210],{"class":105,"line":16904},[103,47207,31279],{"class":113},[103,47209,159],{"class":109},[103,47211,42901],{"class":113},[103,47213,47214,47216,47218,47220,47222,47224,47226,47228],{"class":105,"line":16917},[103,47215,31289],{"class":162},[103,47217,31292],{"class":113},[103,47219,331],{"class":162},[103,47221,491],{"class":113},[103,47223,31491],{"class":162},[103,47225,491],{"class":113},[103,47227,31491],{"class":162},[103,47229,31305],{"class":113},[21988,47231,47233],{"id":47232},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47235,47236],{},"计算图片的均值与方差，用于训练中归一化处理操作",[94,47238,47240],{"className":30368,"code":47239,"language":30370,"meta":24,"style":24},"# 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",[100,47241,47242,47247,47260,47265,47271,47276,47286,47290,47295,47305,47309,47314,47324,47341,47345,47350,47362,47374,47405,47414,47424,47434,47438,47443,47458,47462,47467,47472,47477,47487,47492,47517,47521,47526,47541,47545,47558,47562,47567,47572,47577,47582,47587,47597,47607,47630,47638,47646,47654,47658,47670,47674,47679,47683,47687,47694,47714,47738,47745,47759,47764,47769,47773,47787,47791,47803],{"__ignoreMap":24},[103,47243,47244],{"class":105,"line":106},[103,47245,47246],{"class":172},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[103,47248,47249,47251,47254,47257],{"class":105,"line":25},[103,47250,30727],{"class":109},[103,47252,47253],{"class":162}," PIL",[103,47255,47256],{"class":109}," import",[103,47258,47259],{"class":113}," Image\n",[103,47261,47262],{"class":105,"line":1168},[103,47263,47264],{"class":172},"# os 用来处理文件夹和文件路径\n",[103,47266,47267,47269],{"class":105,"line":1183},[103,47268,30382],{"class":109},[103,47270,45295],{"class":113},[103,47272,47273],{"class":105,"line":1189},[103,47274,47275],{"class":172},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[103,47277,47278,47280,47282,47284],{"class":105,"line":1203},[103,47279,30382],{"class":109},[103,47281,31370],{"class":113},[103,47283,31373],{"class":109},[103,47285,31376],{"class":113},[103,47287,47288],{"class":105,"line":1209},[103,47289,2389],{"emptyLinePlaceholder":30},[103,47291,47292],{"class":105,"line":1300},[103,47293,47294],{"class":172},"# 文件夹路径，包含所有图片文件\n",[103,47296,47297,47300,47302],{"class":105,"line":1306},[103,47298,47299],{"class":113},"folder_path ",[103,47301,159],{"class":109},[103,47303,47304],{"class":218}," 'data_cat_dog'\n",[103,47306,47307],{"class":105,"line":1318},[103,47308,2389],{"emptyLinePlaceholder":30},[103,47310,47311],{"class":105,"line":1601},[103,47312,47313],{"class":172},"# 初始化累积变量\n",[103,47315,47316,47319,47321],{"class":105,"line":1606},[103,47317,47318],{"class":113},"total_pixels ",[103,47320,159],{"class":109},[103,47322,47323],{"class":162}," 0\n",[103,47325,47326,47329,47331,47334,47336,47338],{"class":105,"line":1612},[103,47327,47328],{"class":113},"sum_normalized_pixel_values ",[103,47330,159],{"class":109},[103,47332,47333],{"class":113}," np.zeros(",[103,47335,185],{"class":162},[103,47337,45798],{"class":113},[103,47339,47340],{"class":172},"# 如果是RGB图像，需要三个通道的均值和方差\n",[103,47342,47343],{"class":105,"line":1617},[103,47344,2389],{"emptyLinePlaceholder":30},[103,47346,47347],{"class":105,"line":1631},[103,47348,47349],{"class":172},"# 遍历文件夹中的图片文件\n",[103,47351,47352,47354,47357,47359],{"class":105,"line":1636},[103,47353,3014],{"class":109},[103,47355,47356],{"class":113}," root, dirs, files ",[103,47358,26033],{"class":109},[103,47360,47361],{"class":113}," os.walk(folder_path):\n",[103,47363,47364,47366,47369,47371],{"class":105,"line":1642},[103,47365,3190],{"class":109},[103,47367,47368],{"class":113}," filename ",[103,47370,26033],{"class":109},[103,47372,47373],{"class":113}," files:\n",[103,47375,47376,47378,47381,47384,47386,47389,47391,47394,47396,47399,47402],{"class":105,"line":1663},[103,47377,2486],{"class":109},[103,47379,47380],{"class":113}," filename.endswith((",[103,47382,47383],{"class":218},"'.jpg'",[103,47385,12425],{"class":113},[103,47387,47388],{"class":218},"'.jpeg'",[103,47390,12425],{"class":113},[103,47392,47393],{"class":218},"'.png'",[103,47395,12425],{"class":113},[103,47397,47398],{"class":218},"'.bmp'",[103,47400,47401],{"class":113},")):  ",[103,47403,47404],{"class":172},"# 可根据实际情况添加其他格式\n",[103,47406,47407,47409,47411],{"class":105,"line":1668},[103,47408,45663],{"class":113},[103,47410,159],{"class":109},[103,47412,47413],{"class":113}," os.path.join(root, filename)\n",[103,47415,47416,47419,47421],{"class":105,"line":1682},[103,47417,47418],{"class":113},"            image ",[103,47420,159],{"class":109},[103,47422,47423],{"class":113}," Image.open(image_path)\n",[103,47425,47426,47429,47431],{"class":105,"line":1687},[103,47427,47428],{"class":113},"            image_array ",[103,47430,159],{"class":109},[103,47432,47433],{"class":113}," np.array(image)\n",[103,47435,47436],{"class":105,"line":1716},[103,47437,2389],{"emptyLinePlaceholder":30},[103,47439,47440],{"class":105,"line":1721},[103,47441,47442],{"class":172},"            # 归一化像素值到0-1之间\n",[103,47444,47445,47448,47450,47453,47455],{"class":105,"line":1738},[103,47446,47447],{"class":113},"            normalized_image_array ",[103,47449,159],{"class":109},[103,47451,47452],{"class":113}," image_array ",[103,47454,697],{"class":109},[103,47456,47457],{"class":162}," 255.0\n",[103,47459,47460],{"class":105,"line":1743},[103,47461,2389],{"emptyLinePlaceholder":30},[103,47463,47464],{"class":105,"line":1748},[103,47465,47466],{"class":172},"            # print(image_path)\n",[103,47468,47469],{"class":105,"line":1753},[103,47470,47471],{"class":172},"            # print(normalized_image_array.shape)\n",[103,47473,47474],{"class":105,"line":1767},[103,47475,47476],{"class":172},"            # 累积归一化后的像素值和像素数量\n",[103,47478,47479,47482,47484],{"class":105,"line":1772},[103,47480,47481],{"class":113},"            total_pixels ",[103,47483,9467],{"class":109},[103,47485,47486],{"class":113}," normalized_image_array.size\n",[103,47488,47489],{"class":105,"line":2566},[103,47490,47491],{"class":172},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[103,47493,47494,47497,47499,47502,47505,47507,47509,47511,47513,47515],{"class":105,"line":2580},[103,47495,47496],{"class":113},"            sum_normalized_pixel_values ",[103,47498,9467],{"class":109},[103,47500,47501],{"class":113}," np.sum(normalized_image_array, ",[103,47503,47504],{"class":5206},"axis",[103,47506,159],{"class":109},[103,47508,114],{"class":113},[103,47510,305],{"class":162},[103,47512,12425],{"class":113},[103,47514,331],{"class":162},[103,47516,30487],{"class":113},[103,47518,47519],{"class":105,"line":2588},[103,47520,2389],{"emptyLinePlaceholder":30},[103,47522,47523],{"class":105,"line":2593},[103,47524,47525],{"class":172},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[103,47527,47528,47531,47533,47536,47538],{"class":105,"line":2599},[103,47529,47530],{"class":113},"mean ",[103,47532,159],{"class":109},[103,47534,47535],{"class":113}," sum_normalized_pixel_values ",[103,47537,697],{"class":109},[103,47539,47540],{"class":113}," total_pixels\n",[103,47542,47543],{"class":105,"line":2605},[103,47544,2389],{"emptyLinePlaceholder":30},[103,47546,47547,47550,47552,47554,47556],{"class":105,"line":2610},[103,47548,47549],{"class":113},"sum_squared_diff ",[103,47551,159],{"class":109},[103,47553,47333],{"class":113},[103,47555,185],{"class":162},[103,47557,120],{"class":113},[103,47559,47560],{"class":105,"line":7938},[103,47561,2389],{"emptyLinePlaceholder":30},[103,47563,47564],{"class":105,"line":7962},[103,47565,47566],{"class":172},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[103,47568,47569],{"class":105,"line":7967},[103,47570,47571],{"class":172},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[103,47573,47574],{"class":105,"line":7973},[103,47575,47576],{"class":172},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[103,47578,47579],{"class":105,"line":8000},[103,47580,47581],{"class":172},"# Image.open(image_path)：打开图片\n",[103,47583,47584],{"class":105,"line":8005},[103,47585,47586],{"class":172},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[103,47588,47589,47591,47593,47595],{"class":105,"line":8011},[103,47590,3014],{"class":109},[103,47592,47356],{"class":113},[103,47594,26033],{"class":109},[103,47596,47361],{"class":113},[103,47598,47599,47601,47603,47605],{"class":105,"line":8023},[103,47600,3190],{"class":109},[103,47602,47368],{"class":113},[103,47604,26033],{"class":109},[103,47606,47373],{"class":113},[103,47608,47609,47611,47613,47615,47617,47619,47621,47623,47625,47627],{"class":105,"line":8035},[103,47610,2486],{"class":109},[103,47612,47380],{"class":113},[103,47614,47383],{"class":218},[103,47616,12425],{"class":113},[103,47618,47388],{"class":218},[103,47620,12425],{"class":113},[103,47622,47393],{"class":218},[103,47624,12425],{"class":113},[103,47626,47398],{"class":218},[103,47628,47629],{"class":113},")):\n",[103,47631,47632,47634,47636],{"class":105,"line":8047},[103,47633,45663],{"class":113},[103,47635,159],{"class":109},[103,47637,47413],{"class":113},[103,47639,47640,47642,47644],{"class":105,"line":9706},[103,47641,47418],{"class":113},[103,47643,159],{"class":109},[103,47645,47423],{"class":113},[103,47647,47648,47650,47652],{"class":105,"line":9731},[103,47649,47428],{"class":113},[103,47651,159],{"class":109},[103,47653,47433],{"class":113},[103,47655,47656],{"class":105,"line":9754},[103,47657,47442],{"class":172},[103,47659,47660,47662,47664,47666,47668],{"class":105,"line":9778},[103,47661,47447],{"class":113},[103,47663,159],{"class":109},[103,47665,47452],{"class":113},[103,47667,697],{"class":109},[103,47669,47457],{"class":162},[103,47671,47672],{"class":105,"line":9783},[103,47673,47471],{"class":172},[103,47675,47676],{"class":105,"line":9788},[103,47677,47678],{"class":172},"            # print(mean.shape)\n",[103,47680,47681],{"class":105,"line":9793},[103,47682,47466],{"class":172},[103,47684,47685],{"class":105,"line":9802},[103,47686,2389],{"emptyLinePlaceholder":30},[103,47688,47689,47692],{"class":105,"line":9807},[103,47690,47691],{"class":109},"            try",[103,47693,3728],{"class":113},[103,47695,47696,47699,47701,47704,47706,47709,47711],{"class":105,"line":9813},[103,47697,47698],{"class":113},"                diff ",[103,47700,159],{"class":109},[103,47702,47703],{"class":113}," (normalized_image_array ",[103,47705,645],{"class":109},[103,47707,47708],{"class":113}," mean) ",[103,47710,10651],{"class":109},[103,47712,47713],{"class":162}," 2\n",[103,47715,47716,47719,47721,47724,47726,47728,47730,47732,47734,47736],{"class":105,"line":9834},[103,47717,47718],{"class":113},"                sum_squared_diff ",[103,47720,9467],{"class":109},[103,47722,47723],{"class":113}," np.sum(diff, ",[103,47725,47504],{"class":5206},[103,47727,159],{"class":109},[103,47729,114],{"class":113},[103,47731,305],{"class":162},[103,47733,12425],{"class":113},[103,47735,331],{"class":162},[103,47737,30487],{"class":113},[103,47739,47740,47743],{"class":105,"line":9840},[103,47741,47742],{"class":109},"            except",[103,47744,3728],{"class":113},[103,47746,47747,47750,47752,47754,47757],{"class":105,"line":9854},[103,47748,47749],{"class":162},"                print",[103,47751,114],{"class":113},[103,47753,166],{"class":109},[103,47755,47756],{"class":218},"\"捕获到自定义异常\"",[103,47758,120],{"class":113},[103,47760,47761],{"class":105,"line":9860},[103,47762,47763],{"class":172},"            # diff = (normalized_image_array - mean) ** 2\n",[103,47765,47766],{"class":105,"line":9887},[103,47767,47768],{"class":172},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[103,47770,47771],{"class":105,"line":9896},[103,47772,2389],{"emptyLinePlaceholder":30},[103,47774,47775,47778,47780,47783,47785],{"class":105,"line":9902},[103,47776,47777],{"class":113},"variance ",[103,47779,159],{"class":109},[103,47781,47782],{"class":113}," sum_squared_diff ",[103,47784,697],{"class":109},[103,47786,47540],{"class":113},[103,47788,47789],{"class":105,"line":9910},[103,47790,2389],{"emptyLinePlaceholder":30},[103,47792,47793,47795,47797,47800],{"class":105,"line":9915},[103,47794,30405],{"class":162},[103,47796,114],{"class":113},[103,47798,47799],{"class":218},"\"Mean:\"",[103,47801,47802],{"class":113},", mean)\n",[103,47804,47805,47807,47809,47812],{"class":105,"line":16594},[103,47806,30405],{"class":162},[103,47808,114],{"class":113},[103,47810,47811],{"class":218},"\"Variance:\"",[103,47813,47814],{"class":113},", variance)\n",[94,47816,47818],{"className":30368,"code":47817,"language":30370,"meta":24,"style":24},"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",[100,47819,47820,47826,47832,47842,47848,47858,47872,47882,47892,47902,47906,47916,47926,47930,47934,47942,47947,47952,47971,47975,47980,47985,47990,47995,48036,48041,48051,48056,48069,48074,48079,48084,48089,48094,48098,48103,48108,48130,48134,48166,48180,48190,48200,48204,48214,48228,48238,48248,48258,48264,48268,48272,48276,48280,48284,48292,48312,48316,48320,48324,48328,48344,48348,48352,48360,48364,48368,48376,48380,48384,48388,48396,48400,48404,48408,48416,48420,48428,48432,48440,48444,48452,48456,48464,48468,48472,48480,48484,48488,48500,48524,48538,48542,48546,48550,48558,48562,48570,48574,48582,48586,48594,48598,48606,48610,48618,48622,48634,48638,48646,48650,48658,48662,48666,48670,48674,48682,48686,48702,48706,48714,48718,48722,48726,48730,48734,48738,48742,48758,48762,48774,48778,48790,48794,48806,48810,48818,48822,48830,48834,48838,48842,48848,48852,48860,48864,48880,48884,48892,48896,48912,48924,48928,48940,48944,48948,48956,48960,48964,48972,48976,48984,48988,48996,49000,49004,49046,49088,49092,49096,49112,49116,49132,49136,49140,49148,49152,49156,49168,49206,49210,49214,49222,49226,49240,49250,49256,49262,49268,49274,49278,49282,49288,49292,49296,49304,49308,49326,49330,49334,49338,49354,49358,49362,49366,49370,49374,49394,49414,49418,49422,49426,49434,49442,49446,49462,49482,49502,49506,49511,49520,49529,49534,49539,49544,49557,49562,49571,49580,49597],{"__ignoreMap":24},[103,47821,47822,47824],{"class":105,"line":106},[103,47823,30382],{"class":109},[103,47825,31812],{"class":113},[103,47827,47828,47830],{"class":105,"line":25},[103,47829,30382],{"class":109},[103,47831,31819],{"class":113},[103,47833,47834,47836,47838,47840],{"class":105,"line":1168},[103,47835,30382],{"class":109},[103,47837,31830],{"class":113},[103,47839,31373],{"class":109},[103,47841,31835],{"class":113},[103,47843,47844,47846],{"class":105,"line":1183},[103,47845,30382],{"class":109},[103,47847,30385],{"class":113},[103,47849,47850,47852,47854,47856],{"class":105,"line":1189},[103,47851,30727],{"class":109},[103,47853,31405],{"class":113},[103,47855,30382],{"class":109},[103,47857,31852],{"class":113},[103,47859,47860,47862,47864,47866,47869],{"class":105,"line":1203},[103,47861,30727],{"class":109},[103,47863,31358],{"class":113},[103,47865,30382],{"class":109},[103,47867,47868],{"class":113}," ImageFolder ",[103,47870,47871],{"class":172},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[103,47873,47874,47876,47878,47880],{"class":105,"line":1209},[103,47875,30727],{"class":109},[103,47877,31388],{"class":113},[103,47879,30382],{"class":109},[103,47881,31393],{"class":113},[103,47883,47884,47886,47888,47890],{"class":105,"line":1300},[103,47885,30382],{"class":109},[103,47887,31405],{"class":113},[103,47889,31373],{"class":109},[103,47891,31410],{"class":113},[103,47893,47894,47896,47898,47900],{"class":105,"line":1306},[103,47895,30382],{"class":109},[103,47897,31422],{"class":113},[103,47899,31373],{"class":109},[103,47901,31427],{"class":113},[103,47903,47904],{"class":105,"line":1318},[103,47905,31897],{"class":172},[103,47907,47908,47910,47912,47914],{"class":105,"line":1601},[103,47909,30727],{"class":109},[103,47911,31904],{"class":113},[103,47913,30382],{"class":109},[103,47915,43021],{"class":113},[103,47917,47918,47920,47922,47924],{"class":105,"line":1606},[103,47919,30727],{"class":109},[103,47921,30730],{"class":113},[103,47923,30382],{"class":109},[103,47925,30735],{"class":113},[103,47927,47928],{"class":105,"line":1612},[103,47929,2389],{"emptyLinePlaceholder":30},[103,47931,47932],{"class":105,"line":1617},[103,47933,31932],{"class":172},[103,47935,47936,47938,47940],{"class":105,"line":1631},[103,47937,31937],{"class":109},[103,47939,31940],{"class":1952},[103,47941,31943],{"class":113},[103,47943,47944],{"class":105,"line":1636},[103,47945,47946],{"class":172},"    # 导入自己的数据集，并进行数据处理\n",[103,47948,47949],{"class":105,"line":1642},[103,47950,47951],{"class":172},"    # 定义数据集的路径\n",[103,47953,47954,47957,47959,47961,47963,47965,47969],{"class":105,"line":1663},[103,47955,47956],{"class":162},"    ROOT_PATH",[103,47958,159],{"class":109},[103,47960,783],{"class":109},[103,47962,364],{"class":218},[103,47964,671],{"class":162},[103,47966,47968],{"class":47967},"sA_wV","\u002Fdata\u002Ftrain",[103,47970,25123],{"class":218},[103,47972,47973],{"class":105,"line":1668},[103,47974,2389],{"emptyLinePlaceholder":30},[103,47976,47977],{"class":105,"line":1682},[103,47978,47979],{"class":172},"    # 定义归一化方法\n",[103,47981,47982],{"class":105,"line":1687},[103,47983,47984],{"class":172},"    # 这里需要先计算一下数据集的均值和方差\n",[103,47986,47987],{"class":105,"line":1716},[103,47988,47989],{"class":172},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[103,47991,47992],{"class":105,"line":1721},[103,47993,47994],{"class":172},"    # 第一个参数是均值，第二个参数是方差\n",[103,47996,47997,48000,48002,48005,48008,48010,48013,48015,48018,48021,48024,48026,48029,48031,48034],{"class":105,"line":1738},[103,47998,47999],{"class":113},"    normalize",[103,48001,159],{"class":109},[103,48003,48004],{"class":113},"transforms.Normalize([",[103,48006,48007],{"class":162},"0.162",[103,48009,491],{"class":113},[103,48011,48012],{"class":162},"0.151",[103,48014,491],{"class":113},[103,48016,48017],{"class":162},"0.138",[103,48019,48020],{"class":113},"],[",[103,48022,48023],{"class":162},"0.058",[103,48025,491],{"class":113},[103,48027,48028],{"class":162},"0.052",[103,48030,491],{"class":113},[103,48032,48033],{"class":162},"0.048",[103,48035,4646],{"class":113},[103,48037,48038],{"class":105,"line":1743},[103,48039,48040],{"class":172},"    # 定义数据集处理方法变量\n",[103,48042,48043,48046,48048],{"class":105,"line":1748},[103,48044,48045],{"class":113},"    train_transform",[103,48047,159],{"class":109},[103,48049,48050],{"class":113},"transforms.Compose([\n",[103,48052,48053],{"class":105,"line":1753},[103,48054,48055],{"class":172},"        # 调整图像大小为224*224\n",[103,48057,48058,48061,48063,48065,48067],{"class":105,"line":1767},[103,48059,48060],{"class":113},"        transforms.Resize((",[103,48062,31491],{"class":162},[103,48064,491],{"class":113},[103,48066,31491],{"class":162},[103,48068,42612],{"class":113},[103,48070,48071],{"class":105,"line":1772},[103,48072,48073],{"class":172},"        # 将图像转换为张量\n",[103,48075,48076],{"class":105,"line":2566},[103,48077,48078],{"class":113},"        transforms.ToTensor(),\n",[103,48080,48081],{"class":105,"line":2580},[103,48082,48083],{"class":113},"        normalize])\n",[103,48085,48086],{"class":105,"line":2588},[103,48087,48088],{"class":172},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[103,48090,48091],{"class":105,"line":2593},[103,48092,48093],{"class":172},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[103,48095,48096],{"class":105,"line":2599},[103,48097,2389],{"emptyLinePlaceholder":30},[103,48099,48100],{"class":105,"line":2605},[103,48101,48102],{"class":172},"    # 加载数据集\n",[103,48104,48105],{"class":105,"line":2610},[103,48106,48107],{"class":172},"    # 传入数据集路径与处理方法\n",[103,48109,48110,48112,48114,48117,48120,48122,48125,48127],{"class":105,"line":7938},[103,48111,31948],{"class":113},[103,48113,159],{"class":109},[103,48115,48116],{"class":113},"ImageFolder(",[103,48118,48119],{"class":162},"ROOT_PATH",[103,48121,491],{"class":113},[103,48123,48124],{"class":5206},"transform",[103,48126,159],{"class":109},[103,48128,48129],{"class":113},"train_transform)\n",[103,48131,48132],{"class":105,"line":7962},[103,48133,2389],{"emptyLinePlaceholder":30},[103,48135,48136,48138,48140,48142,48144,48146,48148,48150,48152,48154,48156,48158,48160,48162,48164],{"class":105,"line":7967},[103,48137,32000],{"class":113},[103,48139,159],{"class":109},[103,48141,32005],{"class":113},[103,48143,32008],{"class":162},[103,48145,114],{"class":113},[103,48147,32013],{"class":162},[103,48149,568],{"class":109},[103,48151,7348],{"class":162},[103,48153,32020],{"class":113},[103,48155,32008],{"class":162},[103,48157,114],{"class":113},[103,48159,32027],{"class":162},[103,48161,568],{"class":109},[103,48163,7348],{"class":162},[103,48165,32034],{"class":113},[103,48167,48168,48170,48172,48174,48176,48178],{"class":105,"line":7973},[103,48169,32039],{"class":113},[103,48171,159],{"class":109},[103,48173,32044],{"class":113},[103,48175,31527],{"class":5206},[103,48177,159],{"class":109},[103,48179,31532],{"class":113},[103,48181,48182,48184,48186,48188],{"class":105,"line":8000},[103,48183,32055],{"class":5206},[103,48185,159],{"class":109},[103,48187,311],{"class":162},[103,48189,31456],{"class":113},[103,48191,48192,48194,48196,48198],{"class":105,"line":8005},[103,48193,32067],{"class":5206},[103,48195,159],{"class":109},[103,48197,31466],{"class":162},[103,48199,31456],{"class":113},[103,48201,48202],{"class":105,"line":8011},[103,48203,32078],{"class":172},[103,48205,48206,48208,48210,48212],{"class":105,"line":8023},[103,48207,32083],{"class":5206},[103,48209,159],{"class":109},[103,48211,508],{"class":162},[103,48213,120],{"class":113},[103,48215,48216,48218,48220,48222,48224,48226],{"class":105,"line":8035},[103,48217,32094],{"class":113},[103,48219,159],{"class":109},[103,48221,31524],{"class":113},[103,48223,31527],{"class":5206},[103,48225,159],{"class":109},[103,48227,32105],{"class":113},[103,48229,48230,48232,48234,48236],{"class":105,"line":8047},[103,48231,32110],{"class":5206},[103,48233,159],{"class":109},[103,48235,311],{"class":162},[103,48237,31456],{"class":113},[103,48239,48240,48242,48244,48246],{"class":105,"line":9706},[103,48241,32121],{"class":5206},[103,48243,159],{"class":109},[103,48245,31466],{"class":162},[103,48247,31456],{"class":113},[103,48249,48250,48252,48254,48256],{"class":105,"line":9731},[103,48251,32132],{"class":5206},[103,48253,159],{"class":109},[103,48255,508],{"class":162},[103,48257,120],{"class":113},[103,48259,48260,48262],{"class":105,"line":9754},[103,48261,4079],{"class":109},[103,48263,32145],{"class":113},[103,48265,48266],{"class":105,"line":9778},[103,48267,2389],{"emptyLinePlaceholder":30},[103,48269,48270],{"class":105,"line":9783},[103,48271,32154],{"class":172},[103,48273,48274],{"class":105,"line":9788},[103,48275,32159],{"class":172},[103,48277,48278],{"class":105,"line":9793},[103,48279,2389],{"emptyLinePlaceholder":30},[103,48281,48282],{"class":105,"line":9802},[103,48283,32168],{"class":172},[103,48285,48286,48288,48290],{"class":105,"line":9807},[103,48287,31937],{"class":109},[103,48289,32175],{"class":1952},[103,48291,32178],{"class":113},[103,48293,48294,48296,48298,48300,48302,48304,48306,48308,48310],{"class":105,"line":9813},[103,48295,31227],{"class":113},[103,48297,159],{"class":109},[103,48299,30441],{"class":113},[103,48301,31234],{"class":218},[103,48303,1693],{"class":109},[103,48305,31239],{"class":113},[103,48307,1690],{"class":109},[103,48309,32197],{"class":218},[103,48311,120],{"class":113},[103,48313,48314],{"class":105,"line":9834},[103,48315,2389],{"emptyLinePlaceholder":30},[103,48317,48318],{"class":105,"line":9840},[103,48319,32212],{"class":172},[103,48321,48322],{"class":105,"line":9854},[103,48323,32217],{"class":172},[103,48325,48326],{"class":105,"line":9860},[103,48327,32222],{"class":172},[103,48329,48330,48332,48334,48336,48338,48340,48342],{"class":105,"line":9887},[103,48331,32227],{"class":113},[103,48333,159],{"class":109},[103,48335,32232],{"class":113},[103,48337,32235],{"class":5206},[103,48339,159],{"class":109},[103,48341,32240],{"class":162},[103,48343,120],{"class":113},[103,48345,48346],{"class":105,"line":9896},[103,48347,2389],{"emptyLinePlaceholder":30},[103,48349,48350],{"class":105,"line":9902},[103,48351,32251],{"class":172},[103,48353,48354,48356,48358],{"class":105,"line":9910},[103,48355,32256],{"class":113},[103,48357,159],{"class":109},[103,48359,32261],{"class":113},[103,48361,48362],{"class":105,"line":9915},[103,48363,2389],{"emptyLinePlaceholder":30},[103,48365,48366],{"class":105,"line":16594},[103,48367,32270],{"class":172},[103,48369,48370,48372,48374],{"class":105,"line":16600},[103,48371,31279],{"class":113},[103,48373,159],{"class":109},[103,48375,32279],{"class":113},[103,48377,48378],{"class":105,"line":16623},[103,48379,32284],{"class":172},[103,48381,48382],{"class":105,"line":16629},[103,48383,32289],{"class":172},[103,48385,48386],{"class":105,"line":16652},[103,48387,32294],{"class":172},[103,48389,48390,48392,48394],{"class":105,"line":16666},[103,48391,32299],{"class":113},[103,48393,159],{"class":109},[103,48395,32304],{"class":113},[103,48397,48398],{"class":105,"line":16686},[103,48399,2389],{"emptyLinePlaceholder":30},[103,48401,48402],{"class":105,"line":16692},[103,48403,32317],{"class":172},[103,48405,48406],{"class":105,"line":16703},[103,48407,32322],{"class":172},[103,48409,48410,48412,48414],{"class":105,"line":16726},[103,48411,32327],{"class":113},[103,48413,159],{"class":109},[103,48415,32332],{"class":162},[103,48417,48418],{"class":105,"line":16748},[103,48419,32337],{"class":172},[103,48421,48422,48424,48426],{"class":105,"line":16753},[103,48423,32342],{"class":113},[103,48425,159],{"class":109},[103,48427,32347],{"class":113},[103,48429,48430],{"class":105,"line":16759},[103,48431,32352],{"class":172},[103,48433,48434,48436,48438],{"class":105,"line":16773},[103,48435,32357],{"class":113},[103,48437,159],{"class":109},[103,48439,32347],{"class":113},[103,48441,48442],{"class":105,"line":16786},[103,48443,32366],{"class":172},[103,48445,48446,48448,48450],{"class":105,"line":16791},[103,48447,32371],{"class":113},[103,48449,159],{"class":109},[103,48451,32347],{"class":113},[103,48453,48454],{"class":105,"line":16805},[103,48455,32380],{"class":172},[103,48457,48458,48460,48462],{"class":105,"line":16810},[103,48459,32385],{"class":113},[103,48461,159],{"class":109},[103,48463,32347],{"class":113},[103,48465,48466],{"class":105,"line":16816},[103,48467,2389],{"emptyLinePlaceholder":30},[103,48469,48470],{"class":105,"line":16821},[103,48471,32398],{"class":172},[103,48473,48474,48476,48478],{"class":105,"line":16835},[103,48475,32403],{"class":113},[103,48477,159],{"class":109},[103,48479,32408],{"class":113},[103,48481,48482],{"class":105,"line":16840},[103,48483,2389],{"emptyLinePlaceholder":30},[103,48485,48486],{"class":105,"line":16845},[103,48487,32421],{"class":172},[103,48489,48490,48492,48494,48496,48498],{"class":105,"line":16859},[103,48491,3190],{"class":109},[103,48493,32428],{"class":113},[103,48495,26033],{"class":109},[103,48497,32433],{"class":162},[103,48499,32436],{"class":113},[103,48501,48502,48504,48506,48508,48510,48512,48514,48516,48518,48520,48522],{"class":105,"line":16871},[103,48503,32441],{"class":162},[103,48505,114],{"class":113},[103,48507,32446],{"class":218},[103,48509,32449],{"class":162},[103,48511,697],{"class":218},[103,48513,32449],{"class":162},[103,48515,364],{"class":218},[103,48517,32458],{"class":113},[103,48519,645],{"class":109},[103,48521,331],{"class":162},[103,48523,30487],{"class":113},[103,48525,48526,48528,48530,48532,48534,48536],{"class":105,"line":16876},[103,48527,32441],{"class":162},[103,48529,114],{"class":113},[103,48531,32473],{"class":218},[103,48533,568],{"class":109},[103,48535,559],{"class":162},[103,48537,120],{"class":113},[103,48539,48540],{"class":105,"line":16889},[103,48541,2389],{"emptyLinePlaceholder":30},[103,48543,48544],{"class":105,"line":16894},[103,48545,32488],{"class":172},[103,48547,48548],{"class":105,"line":16899},[103,48549,32493],{"class":172},[103,48551,48552,48554,48556],{"class":105,"line":16904},[103,48553,32498],{"class":113},[103,48555,159],{"class":109},[103,48557,32332],{"class":162},[103,48559,48560],{"class":105,"line":16917},[103,48561,32507],{"class":172},[103,48563,48564,48566,48568],{"class":105,"line":16922},[103,48565,32512],{"class":113},[103,48567,159],{"class":109},[103,48569,3074],{"class":162},[103,48571,48572],{"class":105,"line":32623},[103,48573,32521],{"class":172},[103,48575,48576,48578,48580],{"class":105,"line":32629},[103,48577,32526],{"class":113},[103,48579,159],{"class":109},[103,48581,32332],{"class":162},[103,48583,48584],{"class":105,"line":32635},[103,48585,32535],{"class":172},[103,48587,48588,48590,48592],{"class":105,"line":32641},[103,48589,32540],{"class":113},[103,48591,159],{"class":109},[103,48593,3074],{"class":162},[103,48595,48596],{"class":105,"line":32647},[103,48597,32549],{"class":172},[103,48599,48600,48602,48604],{"class":105,"line":32658},[103,48601,32554],{"class":113},[103,48603,159],{"class":109},[103,48605,3074],{"class":162},[103,48607,48608],{"class":105,"line":32664},[103,48609,32563],{"class":172},[103,48611,48612,48614,48616],{"class":105,"line":32684},[103,48613,32568],{"class":113},[103,48615,159],{"class":109},[103,48617,3074],{"class":162},[103,48619,48620],{"class":105,"line":32690},[103,48621,32577],{"class":172},[103,48623,48624,48626,48628,48630,48632],{"class":105,"line":32701},[103,48625,3392],{"class":109},[103,48627,31591],{"class":113},[103,48629,26033],{"class":109},[103,48631,31596],{"class":162},[103,48633,32590],{"class":113},[103,48635,48636],{"class":105,"line":32707},[103,48637,32595],{"class":172},[103,48639,48640,48642,48644],{"class":105,"line":32713},[103,48641,32600],{"class":113},[103,48643,159],{"class":109},[103,48645,32605],{"class":113},[103,48647,48648],{"class":105,"line":32719},[103,48649,32610],{"class":172},[103,48651,48652,48654,48656],{"class":105,"line":32725},[103,48653,32615],{"class":113},[103,48655,159],{"class":109},[103,48657,32620],{"class":113},[103,48659,48660],{"class":105,"line":32731},[103,48661,32626],{"class":172},[103,48663,48664],{"class":105,"line":32737},[103,48665,32632],{"class":113},[103,48667,48668],{"class":105,"line":32743},[103,48669,32638],{"class":172},[103,48671,48672],{"class":105,"line":32763},[103,48673,32644],{"class":172},[103,48675,48676,48678,48680],{"class":105,"line":32769},[103,48677,32650],{"class":113},[103,48679,159],{"class":109},[103,48681,32655],{"class":113},[103,48683,48684],{"class":105,"line":32785},[103,48685,32661],{"class":172},[103,48687,48688,48690,48692,48694,48696,48698,48700],{"class":105,"line":32791},[103,48689,32667],{"class":113},[103,48691,159],{"class":109},[103,48693,32672],{"class":113},[103,48695,32675],{"class":5206},[103,48697,159],{"class":109},[103,48699,331],{"class":162},[103,48701,120],{"class":113},[103,48703,48704],{"class":105,"line":32805},[103,48705,32687],{"class":172},[103,48707,48708,48710,48712],{"class":105,"line":32811},[103,48709,32693],{"class":113},[103,48711,159],{"class":109},[103,48713,32698],{"class":113},[103,48715,48716],{"class":105,"line":32826},[103,48717,32704],{"class":172},[103,48719,48720],{"class":105,"line":32832},[103,48721,32710],{"class":113},[103,48723,48724],{"class":105,"line":32841},[103,48725,32716],{"class":172},[103,48727,48728],{"class":105,"line":32847},[103,48729,32722],{"class":113},[103,48731,48732],{"class":105,"line":32856},[103,48733,32728],{"class":172},[103,48735,48736],{"class":105,"line":32862},[103,48737,32734],{"class":113},[103,48739,48740],{"class":105,"line":32868},[103,48741,32740],{"class":172},[103,48743,48744,48746,48748,48750,48752,48754,48756],{"class":105,"line":32877},[103,48745,32746],{"class":113},[103,48747,9467],{"class":109},[103,48749,32751],{"class":113},[103,48751,568],{"class":109},[103,48753,32756],{"class":113},[103,48755,305],{"class":162},[103,48757,120],{"class":113},[103,48759,48760],{"class":105,"line":32883},[103,48761,32766],{"class":172},[103,48763,48764,48766,48768,48770,48772],{"class":105,"line":32894},[103,48765,32772],{"class":113},[103,48767,9467],{"class":109},[103,48769,32777],{"class":113},[103,48771,2938],{"class":109},[103,48773,32782],{"class":113},[103,48775,48776],{"class":105,"line":32900},[103,48777,32788],{"class":172},[103,48779,48780,48782,48784,48786,48788],{"class":105,"line":32919},[103,48781,32794],{"class":113},[103,48783,9467],{"class":109},[103,48785,32756],{"class":113},[103,48787,305],{"class":162},[103,48789,120],{"class":113},[103,48791,48792],{"class":105,"line":32925},[103,48793,32808],{"class":172},[103,48795,48796,48798,48800,48802,48804],{"class":105,"line":32936},[103,48797,3392],{"class":109},[103,48799,32816],{"class":113},[103,48801,26033],{"class":109},[103,48803,31596],{"class":162},[103,48805,32823],{"class":113},[103,48807,48808],{"class":105,"line":32942},[103,48809,32829],{"class":172},[103,48811,48812,48814,48816],{"class":105,"line":32962},[103,48813,32600],{"class":113},[103,48815,159],{"class":109},[103,48817,32605],{"class":113},[103,48819,48820],{"class":105,"line":32978},[103,48821,32844],{"class":172},[103,48823,48824,48826,48828],{"class":105,"line":32984},[103,48825,32615],{"class":113},[103,48827,159],{"class":109},[103,48829,32620],{"class":113},[103,48831,48832],{"class":105,"line":32998},[103,48833,32859],{"class":172},[103,48835,48836],{"class":105,"line":33004},[103,48837,32865],{"class":113},[103,48839,48840],{"class":105,"line":33010},[103,48841,36346],{"class":172},[103,48843,48844,48846],{"class":105,"line":33021},[103,48845,32871],{"class":109},[103,48847,32874],{"class":113},[103,48849,48850],{"class":105,"line":33027},[103,48851,32880],{"class":172},[103,48853,48854,48856,48858],{"class":105,"line":33033},[103,48855,36361],{"class":113},[103,48857,159],{"class":109},[103,48859,32655],{"class":113},[103,48861,48862],{"class":105,"line":33043},[103,48863,32897],{"class":172},[103,48865,48866,48868,48870,48872,48874,48876,48878],{"class":105,"line":33049},[103,48867,36374],{"class":113},[103,48869,159],{"class":109},[103,48871,32672],{"class":113},[103,48873,32675],{"class":5206},[103,48875,159],{"class":109},[103,48877,331],{"class":162},[103,48879,120],{"class":113},[103,48881,48882],{"class":105,"line":33060},[103,48883,32922],{"class":172},[103,48885,48886,48888,48890],{"class":105,"line":33066},[103,48887,36395],{"class":113},[103,48889,159],{"class":109},[103,48891,32698],{"class":113},[103,48893,48894],{"class":105,"line":33076},[103,48895,32939],{"class":172},[103,48897,48898,48900,48902,48904,48906,48908,48910],{"class":105,"line":33081},[103,48899,36408],{"class":113},[103,48901,9467],{"class":109},[103,48903,36413],{"class":113},[103,48905,568],{"class":109},[103,48907,32756],{"class":113},[103,48909,305],{"class":162},[103,48911,120],{"class":113},[103,48913,48914,48916,48918,48920,48922],{"class":105,"line":33087},[103,48915,36426],{"class":113},[103,48917,9467],{"class":109},[103,48919,32777],{"class":113},[103,48921,2938],{"class":109},[103,48923,32782],{"class":113},[103,48925,48926],{"class":105,"line":33136},[103,48927,36439],{"class":172},[103,48929,48930,48932,48934,48936,48938],{"class":105,"line":33183},[103,48931,36444],{"class":113},[103,48933,9467],{"class":109},[103,48935,32756],{"class":113},[103,48937,305],{"class":162},[103,48939,120],{"class":113},[103,48941,48942],{"class":105,"line":33188},[103,48943,33001],{"class":172},[103,48945,48946],{"class":105,"line":33194},[103,48947,33007],{"class":172},[103,48949,48950,48952,48954],{"class":105,"line":33213},[103,48951,33013],{"class":113},[103,48953,697],{"class":109},[103,48955,33018],{"class":113},[103,48957,48958],{"class":105,"line":33219},[103,48959,33024],{"class":172},[103,48961,48962],{"class":105,"line":33239},[103,48963,33030],{"class":172},[103,48965,48966,48968,48970],{"class":105,"line":33245},[103,48967,33036],{"class":113},[103,48969,697],{"class":109},[103,48971,33018],{"class":113},[103,48973,48974],{"class":105,"line":33251},[103,48975,33046],{"class":172},[103,48977,48978,48980,48982],{"class":105,"line":33261},[103,48979,33052],{"class":113},[103,48981,697],{"class":109},[103,48983,33057],{"class":113},[103,48985,48986],{"class":105,"line":33266},[103,48987,33063],{"class":172},[103,48989,48990,48992,48994],{"class":105,"line":33272},[103,48991,33069],{"class":113},[103,48993,697],{"class":109},[103,48995,33057],{"class":113},[103,48997,48998],{"class":105,"line":33288},[103,48999,2389],{"emptyLinePlaceholder":30},[103,49001,49002],{"class":105,"line":33333},[103,49003,33084],{"class":172},[103,49005,49006,49008,49010,49012,49014,49016,49018,49020,49022,49024,49026,49028,49030,49032,49034,49036,49038,49040,49042,49044],{"class":105,"line":33339},[103,49007,32441],{"class":162},[103,49009,114],{"class":113},[103,49011,3581],{"class":218},[103,49013,32449],{"class":162},[103,49015,33098],{"class":218},[103,49017,1009],{"class":162},[103,49019,33103],{"class":109},[103,49021,1059],{"class":162},[103,49023,33108],{"class":218},[103,49025,1009],{"class":162},[103,49027,33103],{"class":109},[103,49029,1059],{"class":162},[103,49031,3581],{"class":218},[103,49033,33119],{"class":113},[103,49035,645],{"class":109},[103,49037,331],{"class":162},[103,49039,33126],{"class":113},[103,49041,645],{"class":109},[103,49043,331],{"class":162},[103,49045,33133],{"class":113},[103,49047,49048,49050,49052,49054,49056,49058,49060,49062,49064,49066,49068,49070,49072,49074,49076,49078,49080,49082,49084,49086],{"class":105,"line":33345},[103,49049,32441],{"class":162},[103,49051,114],{"class":113},[103,49053,3581],{"class":218},[103,49055,32449],{"class":162},[103,49057,33147],{"class":218},[103,49059,1009],{"class":162},[103,49061,33103],{"class":109},[103,49063,1059],{"class":162},[103,49065,33156],{"class":218},[103,49067,1009],{"class":162},[103,49069,33103],{"class":109},[103,49071,1059],{"class":162},[103,49073,3581],{"class":218},[103,49075,33167],{"class":113},[103,49077,645],{"class":109},[103,49079,331],{"class":162},[103,49081,33174],{"class":113},[103,49083,645],{"class":109},[103,49085,331],{"class":162},[103,49087,33133],{"class":113},[103,49089,49090],{"class":105,"line":33351},[103,49091,2389],{"emptyLinePlaceholder":30},[103,49093,49094],{"class":105,"line":33362},[103,49095,33191],{"class":172},[103,49097,49098,49100,49102,49104,49106,49108,49110],{"class":105,"line":33368},[103,49099,2486],{"class":109},[103,49101,33199],{"class":113},[103,49103,645],{"class":109},[103,49105,331],{"class":162},[103,49107,1053],{"class":113},[103,49109,1073],{"class":109},[103,49111,33210],{"class":113},[103,49113,49114],{"class":105,"line":33374},[103,49115,33216],{"class":172},[103,49117,49118,49120,49122,49124,49126,49128,49130],{"class":105,"line":33380},[103,49119,33222],{"class":113},[103,49121,153],{"class":162},[103,49123,159],{"class":109},[103,49125,33229],{"class":113},[103,49127,645],{"class":109},[103,49129,331],{"class":162},[103,49131,33236],{"class":113},[103,49133,49134],{"class":105,"line":33398},[103,49135,33242],{"class":172},[103,49137,49138],{"class":105,"line":33412},[103,49139,33248],{"class":172},[103,49141,49142,49144,49146],{"class":105,"line":33421},[103,49143,33254],{"class":113},[103,49145,159],{"class":109},[103,49147,32304],{"class":113},[103,49149,49150],{"class":105,"line":33430},[103,49151,2389],{"emptyLinePlaceholder":30},[103,49153,49154],{"class":105,"line":33439},[103,49155,33269],{"class":172},[103,49157,49158,49160,49162,49164,49166],{"class":105,"line":33448},[103,49159,33275],{"class":113},[103,49161,159],{"class":109},[103,49163,33280],{"class":113},[103,49165,645],{"class":109},[103,49167,33285],{"class":113},[103,49169,49170,49172,49174,49176,49178,49180,49182,49184,49186,49188,49190,49192,49194,49196,49198,49200,49202,49204],{"class":105,"line":33454},[103,49171,32441],{"class":162},[103,49173,114],{"class":113},[103,49175,33295],{"class":218},[103,49177,1009],{"class":162},[103,49179,33300],{"class":109},[103,49181,1059],{"class":162},[103,49183,657],{"class":218},[103,49185,1009],{"class":162},[103,49187,33300],{"class":109},[103,49189,1059],{"class":162},[103,49191,33313],{"class":218},[103,49193,33316],{"class":113},[103,49195,33319],{"class":109},[103,49197,1020],{"class":162},[103,49199,33324],{"class":113},[103,49201,441],{"class":109},[103,49203,1020],{"class":162},[103,49205,30487],{"class":113},[103,49207,49208],{"class":105,"line":33460},[103,49209,36723],{"class":172},[103,49211,49212],{"class":105,"line":33468},[103,49213,36728],{"class":172},[103,49215,49216,49218,49220],{"class":105,"line":33473},[103,49217,36733],{"class":113},[103,49219,33357],{"class":218},[103,49221,120],{"class":113},[103,49223,49224],{"class":105,"line":33479},[103,49225,33377],{"class":172},[103,49227,49228,49230,49232,49234,49236,49238],{"class":105,"line":33490},[103,49229,33383],{"class":113},[103,49231,159],{"class":109},[103,49233,33388],{"class":113},[103,49235,33391],{"class":5206},[103,49237,159],{"class":109},[103,49239,1535],{"class":113},[103,49241,49242,49244,49246,49248],{"class":105,"line":33496},[103,49243,33401],{"class":218},[103,49245,972],{"class":113},[103,49247,33406],{"class":162},[103,49249,33409],{"class":113},[103,49251,49252,49254],{"class":105,"line":33516},[103,49253,33415],{"class":218},[103,49255,33418],{"class":113},[103,49257,49258,49260],{"class":105,"line":33522},[103,49259,33424],{"class":218},[103,49261,33427],{"class":113},[103,49263,49264,49266],{"class":105,"line":33528},[103,49265,33433],{"class":218},[103,49267,33436],{"class":113},[103,49269,49270,49272],{"class":105,"line":33534},[103,49271,33442],{"class":218},[103,49273,33445],{"class":113},[103,49275,49276],{"class":105,"line":33551},[103,49277,33451],{"class":113},[103,49279,49280],{"class":105,"line":33557},[103,49281,33457],{"class":172},[103,49283,49284,49286],{"class":105,"line":33563},[103,49285,4079],{"class":109},[103,49287,33465],{"class":113},[103,49289,49290],{"class":105,"line":33569},[103,49291,2389],{"emptyLinePlaceholder":30},[103,49293,49294],{"class":105,"line":33575},[103,49295,33476],{"class":172},[103,49297,49298,49300,49302],{"class":105,"line":33581},[103,49299,31937],{"class":109},[103,49301,33484],{"class":1952},[103,49303,33487],{"class":113},[103,49305,49306],{"class":105,"line":33608},[103,49307,33493],{"class":172},[103,49309,49310,49312,49314,49316,49318,49320,49322,49324],{"class":105,"line":33632},[103,49311,33499],{"class":113},[103,49313,31683],{"class":5206},[103,49315,159],{"class":109},[103,49317,114],{"class":113},[103,49319,611],{"class":162},[103,49321,491],{"class":113},[103,49323,406],{"class":162},[103,49325,30487],{"class":113},[103,49327,49328],{"class":105,"line":33638},[103,49329,33519],{"class":172},[103,49331,49332],{"class":105,"line":33644},[103,49333,33525],{"class":172},[103,49335,49336],{"class":105,"line":33650},[103,49337,33531],{"class":172},[103,49339,49340,49342,49344,49346,49348,49350,49352],{"class":105,"line":33661},[103,49341,31717],{"class":113},[103,49343,331],{"class":162},[103,49345,491],{"class":113},[103,49347,191],{"class":162},[103,49349,491],{"class":113},[103,49351,331],{"class":162},[103,49353,120],{"class":113},[103,49355,49356],{"class":105,"line":33672},[103,49357,33554],{"class":172},[103,49359,49360],{"class":105,"line":33678},[103,49361,33560],{"class":172},[103,49363,49364],{"class":105,"line":33695},[103,49365,33566],{"class":172},[103,49367,49368],{"class":105,"line":33718},[103,49369,33572],{"class":172},[103,49371,49372],{"class":105,"line":33741},[103,49373,33578],{"class":172},[103,49375,49376,49378,49380,49382,49384,49386,49388,49390,49392],{"class":105,"line":33747},[103,49377,33584],{"class":113},[103,49379,33587],{"class":218},[103,49381,33590],{"class":113},[103,49383,33593],{"class":218},[103,49385,491],{"class":113},[103,49387,33598],{"class":5206},[103,49389,159],{"class":109},[103,49391,33603],{"class":218},[103,49393,120],{"class":113},[103,49395,49396,49398,49400,49402,49404,49406,49408,49410,49412],{"class":105,"line":33752},[103,49397,33584],{"class":113},[103,49399,33587],{"class":218},[103,49401,33615],{"class":113},[103,49403,33618],{"class":218},[103,49405,491],{"class":113},[103,49407,33598],{"class":5206},[103,49409,159],{"class":109},[103,49411,33627],{"class":218},[103,49413,120],{"class":113},[103,49415,49416],{"class":105,"line":33761},[103,49417,33635],{"class":172},[103,49419,49420],{"class":105,"line":33771},[103,49421,33641],{"class":113},[103,49423,49424],{"class":105,"line":33777},[103,49425,33647],{"class":172},[103,49427,49428,49430,49432],{"class":105,"line":33782},[103,49429,33653],{"class":113},[103,49431,33656],{"class":218},[103,49433,120],{"class":113},[103,49435,49436,49438,49440],{"class":105,"line":33788},[103,49437,33664],{"class":113},[103,49439,33667],{"class":218},[103,49441,120],{"class":113},[103,49443,49444],{"class":105,"line":33801},[103,49445,33675],{"class":172},[103,49447,49448,49450,49452,49454,49456,49458,49460],{"class":105,"line":33807},[103,49449,31717],{"class":113},[103,49451,331],{"class":162},[103,49453,491],{"class":113},[103,49455,191],{"class":162},[103,49457,491],{"class":113},[103,49459,191],{"class":162},[103,49461,120],{"class":113},[103,49463,49464,49466,49468,49470,49472,49474,49476,49478,49480],{"class":105,"line":33818},[103,49465,33584],{"class":113},[103,49467,33587],{"class":218},[103,49469,33702],{"class":113},[103,49471,33593],{"class":218},[103,49473,491],{"class":113},[103,49475,33598],{"class":5206},[103,49477,159],{"class":109},[103,49479,33713],{"class":218},[103,49481,120],{"class":113},[103,49483,49484,49486,49488,49490,49492,49494,49496,49498,49500],{"class":105,"line":33829},[103,49485,33584],{"class":113},[103,49487,33587],{"class":218},[103,49489,33725],{"class":113},[103,49491,33618],{"class":218},[103,49493,491],{"class":113},[103,49495,33598],{"class":5206},[103,49497,159],{"class":109},[103,49499,33736],{"class":218},[103,49501,120],{"class":113},[103,49503,49504],{"class":105,"line":33848},[103,49505,33744],{"class":172},[103,49507,49509],{"class":105,"line":49508},219,[103,49510,33641],{"class":113},[103,49512,49514,49516,49518],{"class":105,"line":49513},220,[103,49515,33653],{"class":113},[103,49517,33587],{"class":218},[103,49519,120],{"class":113},[103,49521,49523,49525,49527],{"class":105,"line":49522},221,[103,49524,33664],{"class":113},[103,49526,33766],{"class":218},[103,49528,120],{"class":113},[103,49530,49532],{"class":105,"line":49531},222,[103,49533,33774],{"class":113},[103,49535,49537],{"class":105,"line":49536},223,[103,49538,2389],{"emptyLinePlaceholder":30},[103,49540,49542],{"class":105,"line":49541},224,[103,49543,33785],{"class":172},[103,49545,49547,49549,49551,49553,49555],{"class":105,"line":49546},225,[103,49548,1520],{"class":109},[103,49550,31210],{"class":162},[103,49552,2938],{"class":109},[103,49554,31215],{"class":218},[103,49556,3728],{"class":113},[103,49558,49560],{"class":105,"line":49559},226,[103,49561,33804],{"class":172},[103,49563,49565,49567,49569],{"class":105,"line":49564},227,[103,49566,44536],{"class":113},[103,49568,159],{"class":109},[103,49570,44541],{"class":113},[103,49572,49574,49576,49578],{"class":105,"line":49573},228,[103,49575,33821],{"class":113},[103,49577,159],{"class":109},[103,49579,33826],{"class":113},[103,49581,49583,49585,49587,49589,49591,49593,49595],{"class":105,"line":49582},229,[103,49584,33383],{"class":113},[103,49586,159],{"class":109},[103,49588,44558],{"class":113},[103,49590,33839],{"class":5206},[103,49592,159],{"class":109},[103,49594,1020],{"class":162},[103,49596,120],{"class":113},[103,49598,49600],{"class":105,"line":49599},230,[103,49601,33851],{"class":113},[21988,49603,49605],{"id":49604},"_242测试代码","2.4.2.测试代码",[14,49607,49608],{},"使用测试集进行测试与推理",[94,49610,49612],{"className":30368,"code":49611,"language":30370,"meta":24,"style":24},"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",[100,49613,49614,49620,49630,49640,49651,49661,49665,49669,49677,49682,49686,49703,49707,49711,49715,49719,49723,49755,49759,49767,49771,49783,49787,49791,49795,49799,49803,49807,49811,49815,49833,49847,49851,49861,49871,49881,49887,49891,49895,49903,49907,49923,49931,49935,49939,49947,49955,49959,49963,49967,49971,49977,49981,49991,49999,50007,50011,50015,50019,50027,50031,50047,50051,50055,50059,50071,50075,50087,50091,50095,50107,50111,50121,50125,50129,50141,50145,50153,50157,50161,50169,50173,50181,50185,50189,50193,50197,50201,50217,50225,50229,50233,50251,50257,50261,50271,50279,50287,50291,50295,50299,50303,50311,50315,50331,50335,50343,50351],{"__ignoreMap":24},[103,49615,49616,49618],{"class":105,"line":106},[103,49617,30382],{"class":109},[103,49619,30385],{"class":113},[103,49621,49622,49624,49626,49628],{"class":105,"line":25},[103,49623,30382],{"class":109},[103,49625,31405],{"class":113},[103,49627,31373],{"class":109},[103,49629,31410],{"class":113},[103,49631,49632,49634,49636,49638],{"class":105,"line":1168},[103,49633,30727],{"class":109},[103,49635,31388],{"class":113},[103,49637,30382],{"class":109},[103,49639,31393],{"class":113},[103,49641,49642,49644,49646,49648],{"class":105,"line":1183},[103,49643,30727],{"class":109},[103,49645,31358],{"class":113},[103,49647,30382],{"class":109},[103,49649,49650],{"class":113}," ImageFolder\n",[103,49652,49653,49655,49657,49659],{"class":105,"line":1189},[103,49654,30727],{"class":109},[103,49656,31904],{"class":113},[103,49658,30382],{"class":109},[103,49660,44630],{"class":113},[103,49662,49663],{"class":105,"line":1203},[103,49664,2389],{"emptyLinePlaceholder":30},[103,49666,49667],{"class":105,"line":1209},[103,49668,33941],{"class":172},[103,49670,49671,49673,49675],{"class":105,"line":1300},[103,49672,31937],{"class":109},[103,49674,33948],{"class":1952},[103,49676,31943],{"class":113},[103,49678,49679],{"class":105,"line":1306},[103,49680,49681],{"class":172},"   # 导入自己的数据集，并进行数据处理\n",[103,49683,49684],{"class":105,"line":1318},[103,49685,47951],{"class":172},[103,49687,49688,49690,49692,49694,49696,49698,49701],{"class":105,"line":1601},[103,49689,47956],{"class":162},[103,49691,159],{"class":109},[103,49693,783],{"class":109},[103,49695,364],{"class":218},[103,49697,671],{"class":162},[103,49699,49700],{"class":47967},"\u002Fdata\u002Ftest",[103,49702,25123],{"class":218},[103,49704,49705],{"class":105,"line":1606},[103,49706,2389],{"emptyLinePlaceholder":30},[103,49708,49709],{"class":105,"line":1612},[103,49710,47979],{"class":172},[103,49712,49713],{"class":105,"line":1617},[103,49714,47984],{"class":172},[103,49716,49717],{"class":105,"line":1631},[103,49718,47989],{"class":172},[103,49720,49721],{"class":105,"line":1636},[103,49722,47994],{"class":172},[103,49724,49725,49727,49729,49731,49733,49735,49737,49739,49741,49743,49745,49747,49749,49751,49753],{"class":105,"line":1642},[103,49726,47999],{"class":113},[103,49728,159],{"class":109},[103,49730,48004],{"class":113},[103,49732,48007],{"class":162},[103,49734,491],{"class":113},[103,49736,48012],{"class":162},[103,49738,491],{"class":113},[103,49740,48017],{"class":162},[103,49742,48020],{"class":113},[103,49744,48023],{"class":162},[103,49746,491],{"class":113},[103,49748,48028],{"class":162},[103,49750,491],{"class":113},[103,49752,48033],{"class":162},[103,49754,4646],{"class":113},[103,49756,49757],{"class":105,"line":1663},[103,49758,48040],{"class":172},[103,49760,49761,49763,49765],{"class":105,"line":1668},[103,49762,48045],{"class":113},[103,49764,159],{"class":109},[103,49766,48050],{"class":113},[103,49768,49769],{"class":105,"line":1682},[103,49770,48055],{"class":172},[103,49772,49773,49775,49777,49779,49781],{"class":105,"line":1687},[103,49774,48060],{"class":113},[103,49776,31491],{"class":162},[103,49778,491],{"class":113},[103,49780,31491],{"class":162},[103,49782,42612],{"class":113},[103,49784,49785],{"class":105,"line":1716},[103,49786,48073],{"class":172},[103,49788,49789],{"class":105,"line":1721},[103,49790,48078],{"class":113},[103,49792,49793],{"class":105,"line":1738},[103,49794,48083],{"class":113},[103,49796,49797],{"class":105,"line":1743},[103,49798,48088],{"class":172},[103,49800,49801],{"class":105,"line":1748},[103,49802,48093],{"class":172},[103,49804,49805],{"class":105,"line":1753},[103,49806,2389],{"emptyLinePlaceholder":30},[103,49808,49809],{"class":105,"line":1767},[103,49810,48102],{"class":172},[103,49812,49813],{"class":105,"line":1772},[103,49814,48107],{"class":172},[103,49816,49817,49819,49821,49823,49825,49827,49829,49831],{"class":105,"line":2566},[103,49818,33955],{"class":113},[103,49820,159],{"class":109},[103,49822,48116],{"class":113},[103,49824,48119],{"class":162},[103,49826,491],{"class":113},[103,49828,48124],{"class":5206},[103,49830,159],{"class":109},[103,49832,48129],{"class":113},[103,49834,49835,49837,49839,49841,49843,49845],{"class":105,"line":2580},[103,49836,34012],{"class":113},[103,49838,159],{"class":109},[103,49840,31524],{"class":113},[103,49842,31527],{"class":5206},[103,49844,159],{"class":109},[103,49846,34023],{"class":113},[103,49848,49849],{"class":105,"line":2588},[103,49850,34028],{"class":172},[103,49852,49853,49855,49857,49859],{"class":105,"line":2593},[103,49854,34033],{"class":5206},[103,49856,159],{"class":109},[103,49858,331],{"class":162},[103,49860,31456],{"class":113},[103,49862,49863,49865,49867,49869],{"class":105,"line":2599},[103,49864,34044],{"class":5206},[103,49866,159],{"class":109},[103,49868,31466],{"class":162},[103,49870,31456],{"class":113},[103,49872,49873,49875,49877,49879],{"class":105,"line":2605},[103,49874,34055],{"class":5206},[103,49876,159],{"class":109},[103,49878,305],{"class":162},[103,49880,120],{"class":113},[103,49882,49883,49885],{"class":105,"line":2610},[103,49884,4079],{"class":109},[103,49886,34068],{"class":113},[103,49888,49889],{"class":105,"line":7938},[103,49890,2389],{"emptyLinePlaceholder":30},[103,49892,49893],{"class":105,"line":7962},[103,49894,34077],{"class":172},[103,49896,49897,49899,49901],{"class":105,"line":7967},[103,49898,31937],{"class":109},[103,49900,34084],{"class":1952},[103,49902,34087],{"class":113},[103,49904,49905],{"class":105,"line":7973},[103,49906,34092],{"class":172},[103,49908,49909,49911,49913,49915,49917,49919,49921],{"class":105,"line":8000},[103,49910,31227],{"class":113},[103,49912,159],{"class":109},[103,49914,31234],{"class":218},[103,49916,1693],{"class":109},[103,49918,31239],{"class":113},[103,49920,1690],{"class":109},[103,49922,34109],{"class":218},[103,49924,49925,49927,49929],{"class":105,"line":8005},[103,49926,31279],{"class":113},[103,49928,159],{"class":109},[103,49930,32279],{"class":113},[103,49932,49933],{"class":105,"line":8011},[103,49934,2389],{"emptyLinePlaceholder":30},[103,49936,49937],{"class":105,"line":8023},[103,49938,34126],{"class":172},[103,49940,49941,49943,49945],{"class":105,"line":8035},[103,49942,34131],{"class":113},[103,49944,159],{"class":109},[103,49946,32332],{"class":162},[103,49948,49949,49951,49953],{"class":105,"line":8047},[103,49950,34140],{"class":113},[103,49952,159],{"class":109},[103,49954,3074],{"class":162},[103,49956,49957],{"class":105,"line":9706},[103,49958,2389],{"emptyLinePlaceholder":30},[103,49960,49961],{"class":105,"line":9731},[103,49962,34153],{"class":172},[103,49964,49965],{"class":105,"line":9754},[103,49966,34158],{"class":172},[103,49968,49969],{"class":105,"line":9778},[103,49970,34163],{"class":172},[103,49972,49973,49975],{"class":105,"line":9783},[103,49974,34168],{"class":109},[103,49976,32874],{"class":113},[103,49978,49979],{"class":105,"line":9788},[103,49980,34175],{"class":172},[103,49982,49983,49985,49987,49989],{"class":105,"line":9793},[103,49984,3392],{"class":109},[103,49986,34182],{"class":113},[103,49988,26033],{"class":109},[103,49990,34187],{"class":113},[103,49992,49993,49995,49997],{"class":105,"line":9802},[103,49994,34192],{"class":113},[103,49996,159],{"class":109},[103,49998,34197],{"class":113},[103,50000,50001,50003,50005],{"class":105,"line":9807},[103,50002,34202],{"class":113},[103,50004,159],{"class":109},[103,50006,34207],{"class":113},[103,50008,50009],{"class":105,"line":9813},[103,50010,34212],{"class":172},[103,50012,50013],{"class":105,"line":9834},[103,50014,32865],{"class":113},[103,50016,50017],{"class":105,"line":9840},[103,50018,34221],{"class":172},[103,50020,50021,50023,50025],{"class":105,"line":9854},[103,50022,32650],{"class":113},[103,50024,159],{"class":109},[103,50026,34230],{"class":113},[103,50028,50029],{"class":105,"line":9860},[103,50030,34235],{"class":172},[103,50032,50033,50035,50037,50039,50041,50043,50045],{"class":105,"line":9887},[103,50034,32667],{"class":113},[103,50036,159],{"class":109},[103,50038,32672],{"class":113},[103,50040,32675],{"class":5206},[103,50042,159],{"class":109},[103,50044,331],{"class":162},[103,50046,120],{"class":113},[103,50048,50049],{"class":105,"line":9896},[103,50050,34256],{"class":172},[103,50052,50053],{"class":105,"line":9902},[103,50054,34261],{"class":172},[103,50056,50057],{"class":105,"line":9910},[103,50058,34266],{"class":172},[103,50060,50061,50063,50065,50067,50069],{"class":105,"line":9915},[103,50062,34271],{"class":113},[103,50064,9467],{"class":109},[103,50066,32777],{"class":113},[103,50068,2938],{"class":109},[103,50070,34280],{"class":113},[103,50072,50073],{"class":105,"line":16594},[103,50074,34285],{"class":172},[103,50076,50077,50079,50081,50083,50085],{"class":105,"line":16600},[103,50078,34290],{"class":113},[103,50080,9467],{"class":109},[103,50082,34295],{"class":113},[103,50084,305],{"class":162},[103,50086,120],{"class":113},[103,50088,50089],{"class":105,"line":16623},[103,50090,2389],{"emptyLinePlaceholder":30},[103,50092,50093],{"class":105,"line":16629},[103,50094,34308],{"class":172},[103,50096,50097,50099,50101,50103,50105],{"class":105,"line":16652},[103,50098,34313],{"class":113},[103,50100,159],{"class":109},[103,50102,34318],{"class":113},[103,50104,697],{"class":109},[103,50106,34323],{"class":113},[103,50108,50109],{"class":105,"line":16666},[103,50110,34328],{"class":172},[103,50112,50113,50115,50117,50119],{"class":105,"line":16686},[103,50114,32441],{"class":162},[103,50116,114],{"class":113},[103,50118,34337],{"class":218},[103,50120,34340],{"class":113},[103,50122,50123],{"class":105,"line":16692},[103,50124,2389],{"emptyLinePlaceholder":30},[103,50126,50127],{"class":105,"line":16703},[103,50128,34349],{"class":172},[103,50130,50131,50133,50135,50137,50139],{"class":105,"line":16726},[103,50132,1520],{"class":109},[103,50134,31210],{"class":162},[103,50136,2938],{"class":109},[103,50138,31215],{"class":218},[103,50140,3728],{"class":113},[103,50142,50143],{"class":105,"line":16748},[103,50144,34366],{"class":172},[103,50146,50147,50149,50151],{"class":105,"line":16753},[103,50148,31279],{"class":113},[103,50150,159],{"class":109},[103,50152,44541],{"class":113},[103,50154,50155],{"class":105,"line":16759},[103,50156,34379],{"class":172},[103,50158,50159],{"class":105,"line":16773},[103,50160,34384],{"class":172},[103,50162,50163,50165,50167],{"class":105,"line":16786},[103,50164,34389],{"class":113},[103,50166,34392],{"class":218},[103,50168,30487],{"class":113},[103,50170,50171],{"class":105,"line":16791},[103,50172,34399],{"class":172},[103,50174,50175,50177,50179],{"class":105,"line":16805},[103,50176,34012],{"class":113},[103,50178,159],{"class":109},[103,50180,34408],{"class":113},[103,50182,50183],{"class":105,"line":16810},[103,50184,34413],{"class":172},[103,50186,50187],{"class":105,"line":16816},[103,50188,34418],{"class":113},[103,50190,50191],{"class":105,"line":16821},[103,50192,2389],{"emptyLinePlaceholder":30},[103,50194,50195],{"class":105,"line":16835},[103,50196,34427],{"class":172},[103,50198,50199],{"class":105,"line":16840},[103,50200,34432],{"class":172},[103,50202,50203,50205,50207,50209,50211,50213,50215],{"class":105,"line":16845},[103,50204,31227],{"class":113},[103,50206,159],{"class":109},[103,50208,31234],{"class":218},[103,50210,1693],{"class":109},[103,50212,31239],{"class":113},[103,50214,1690],{"class":109},[103,50216,34109],{"class":218},[103,50218,50219,50221,50223],{"class":105,"line":16859},[103,50220,31279],{"class":113},[103,50222,159],{"class":109},[103,50224,32279],{"class":113},[103,50226,50227],{"class":105,"line":16871},[103,50228,34461],{"class":172},[103,50230,50231],{"class":105,"line":16876},[103,50232,34466],{"class":172},[103,50234,50235,50237,50239,50241,50244,50246,50249],{"class":105,"line":16889},[103,50236,34471],{"class":113},[103,50238,159],{"class":109},[103,50240,1003],{"class":113},[103,50242,50243],{"class":218},"'猫'",[103,50245,491],{"class":113},[103,50247,50248],{"class":218},"'狗'",[103,50250,33236],{"class":113},[103,50252,50253,50255],{"class":105,"line":16894},[103,50254,34168],{"class":109},[103,50256,32874],{"class":113},[103,50258,50259],{"class":105,"line":16899},[103,50260,34536],{"class":172},[103,50262,50263,50265,50267,50269],{"class":105,"line":16904},[103,50264,3392],{"class":109},[103,50266,34543],{"class":113},[103,50268,26033],{"class":109},[103,50270,34187],{"class":113},[103,50272,50273,50275,50277],{"class":105,"line":16917},[103,50274,32600],{"class":113},[103,50276,159],{"class":109},[103,50278,32605],{"class":113},[103,50280,50281,50283,50285],{"class":105,"line":16922},[103,50282,32615],{"class":113},[103,50284,159],{"class":109},[103,50286,32620],{"class":113},[103,50288,50289],{"class":105,"line":32623},[103,50290,2389],{"emptyLinePlaceholder":30},[103,50292,50293],{"class":105,"line":32629},[103,50294,34572],{"class":172},[103,50296,50297],{"class":105,"line":32635},[103,50298,32865],{"class":113},[103,50300,50301],{"class":105,"line":32641},[103,50302,34581],{"class":172},[103,50304,50305,50307,50309],{"class":105,"line":32647},[103,50306,32650],{"class":113},[103,50308,159],{"class":109},[103,50310,32655],{"class":113},[103,50312,50313],{"class":105,"line":32658},[103,50314,34594],{"class":172},[103,50316,50317,50319,50321,50323,50325,50327,50329],{"class":105,"line":32664},[103,50318,32667],{"class":113},[103,50320,159],{"class":109},[103,50322,32672],{"class":113},[103,50324,32675],{"class":5206},[103,50326,159],{"class":109},[103,50328,331],{"class":162},[103,50330,120],{"class":113},[103,50332,50333],{"class":105,"line":32684},[103,50334,34615],{"class":172},[103,50336,50337,50339,50341],{"class":105,"line":32690},[103,50338,34620],{"class":113},[103,50340,159],{"class":109},[103,50342,34625],{"class":113},[103,50344,50345,50347,50349],{"class":105,"line":32701},[103,50346,34630],{"class":113},[103,50348,159],{"class":109},[103,50350,34635],{"class":113},[103,50352,50353,50355,50357,50359,50361,50363,50365,50367],{"class":105,"line":32707},[103,50354,34640],{"class":162},[103,50356,114],{"class":113},[103,50358,34645],{"class":218},[103,50360,34648],{"class":113},[103,50362,34651],{"class":218},[103,50364,491],{"class":113},[103,50366,34656],{"class":218},[103,50368,34659],{"class":113},[5116,50370,50371],{},"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":24,"searchDepth":25,"depth":25,"links":50373},[50374,50375,50376,50377],{"id":30581,"depth":1168,"text":30582},{"id":37829,"depth":1168,"text":37830},{"id":41262,"depth":1168,"text":41263},{"id":45271,"depth":1168,"text":45272},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30573,"description":27},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50384,"title":50385,"body":50386,"description":27,"extension":28,"meta":50393,"navigation":30,"path":50394,"seo":50395,"stem":50396,"__hash__":50397},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50387,"toc":50391},[50388],[10,50389,50385],{"id":50390},"_3yolo模型学习",{"title":24,"searchDepth":25,"depth":25,"links":50392},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50385,"description":27},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50399,"title":50400,"body":50401,"description":50408,"extension":28,"meta":50409,"navigation":30,"path":50411,"seo":50412,"stem":50413,"__hash__":50414},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50402,"toc":50406},[50403],[14,50404,50405],{},"yolo模型还未补充",{"title":24,"searchDepth":25,"depth":25,"links":50407},[],"深度学习学习",{"category":50410},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50400,"description":50408},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50416,"title":50417,"body":50418,"description":27,"extension":28,"meta":50443,"navigation":30,"path":50444,"seo":50445,"stem":50446,"__hash__":50447},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50419,"toc":50441},[50420,50423,50426,50431,50438],[10,50421,50417],{"id":50422},"_1工具",[14,50424,50425],{},"提示错误插件：有问题会提前报错",[14,50427,50428],{},[1451,50429],{"alt":24,"src":50430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50432,50433],{},[17,50434,50437],{"href":50435,"rel":50436},"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",[21],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50439,50440],{},"alt键加上下箭头可以实现语句的移动",{"title":24,"searchDepth":25,"depth":25,"links":50442},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50417,"description":27},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50449,"title":50450,"body":50451,"description":27,"extension":28,"meta":53315,"navigation":30,"path":53316,"seo":53317,"stem":53318,"__hash__":53319},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50452,"toc":53266},[50453,50456,50460,50464,50469,50472,50477,50481,50488,50493,50500,50505,50512,50517,50521,50526,50529,50533,50538,50542,50547,50550,50553,50556,50559,50562,50565,50568,50571,50576,50581,50586,50590,50593,50596,50600,50605,50608,50616,50621,50638,50646,50651,50656,50661,50666,50671,50674,50679,50684,50688,50697,50702,50707,50711,50716,50719,50723,50728,50736,50741,50746,50749,50754,50759,50764,50767,50770,50773,50778,50783,50786,50791,50794,50799,50802,50805,50808,50813,50816,50819,50834,50839,50844,50849,50852,50855,50858,50872,50875,50880,50885,50888,50891,50894,50897,50900,50903,50906,50910,50914,50919,50923,50926,50931,50936,50939,50944,50947,50951,50956,50959,50962,50965,50968,50971,50974,50977,50980,50983,50987,50992,50997,51002,51005,51008,51012,51017,51020,51024,51027,51030,51035,51038,51041,51045,51049,51052,51057,51062,51065,51094,51099,51104,51109,51114,51118,51123,51127,51132,51135,51139,51143,51148,51152,51157,51162,51166,51171,51174,51176,51179,51184,51188,51193,51197,51201,51206,51211,51216,51221,51225,51230,51235,51240,51243,51246,51251,51254,51259,51264,51269,51274,51278,52085,52089,52432,52437,52440,52443,52446,52449,52452,52455,52458,52461,52463,52466,52468,52471,52475,52480,52483,52486,52489,52493,52498,52503,52523,52526,52530,52535,52540,52557,52561,52590,52594,52616,52618,52657,52665,52671,52675,52678,52681,52686,52691,52694,52697,52700,52705,52710,52713,52716,52719,52722,52725,52728,52731,52734,52737,52740,52743,52745,52748,52751,52754,52757,52760,52763,52766,52769,52773,52778,52781,52786,52789,52792,52795,52798,52801,52804,52807,52809,52812,52815,52818,52821,52824,52827,52831,52834,52843,52846,52851,52854,52859,52862,52865,52868,52871,52874,52877,52880,52884,52888,52891,52894,52899,52904,52909,52913,52918,52923,52926,52929,52932,52935,52938,52943,52946,52951,52953,52958,52961,52965,52970,52973,52976,52981,52985,52988,52993,52996,52999,53028,53033,53036,53039,53042,53045,53048,53052,53055,53141,53145,53148,53153,53158,53165,53168,53171,53174,53177,53180,53185,53190,53193,53196,53199,53202,53205,53208,53211,53214,53217,53219,53222,53226,53231,53236,53241,53244,53249,53254,53257,53260,53263],[10,50454,50450],{"id":50455},"_2基础语法",[45,50457,50459],{"id":50458},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[74,50461,50463],{"id":50462},"_211-js组成","2.1.1 js组成",[57,50465,50466],{},[60,50467,50468],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50470,50471],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[57,50473,50474],{"start":25},[60,50475,50476],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[74,50478,50480],{"id":50479},"_212-js书写位置","2.1.2 js书写位置",[57,50482,50483],{},[60,50484,50485],{},[263,50486,50487],{},"内部 JavaScript",[14,50489,50490],{},[1451,50491],{"alt":24,"src":50492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[57,50494,50495],{"start":25},[60,50496,50497],{},[263,50498,50499],{},"外部 JavaScript",[14,50501,50502],{},[1451,50503],{"alt":24,"src":50504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[57,50506,50507],{"start":1168},[60,50508,50509],{},[263,50510,50511],{},"内联 JavaScript",[14,50513,50514],{},[1451,50515],{"alt":24,"src":50516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[74,50518,50520],{"id":50519},"_213-javascript注释","2.1.3 JavaScript注释",[14,50522,50523],{},[1451,50524],{"alt":24,"src":50525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50527,50528],{},"alt+shift+a一定要记住！",[74,50530,50532],{"id":50531},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50534,50535],{},[1451,50536],{"alt":24,"src":50537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[74,50539,50541],{"id":50540},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[57,50543,50544],{},[60,50545,50546],{},"输出语法：",[14,50548,50549],{},"①document.write('要出的内容')",[14,50551,50552],{},"向body内输出内容；",[14,50554,50555],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50557,50558],{},"②alert('要出的内容')",[14,50560,50561],{},"页面弹出警告对话框",[14,50563,50564],{},"③console.log('控制台打印')",[14,50566,50567],{},"控制台输出语法，程序员调试使用",[14,50569,50570],{},"输入log就行，自动生成：",[14,50572,50573],{},[1451,50574],{"alt":24,"src":50575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[57,50577,50578],{"start":25},[60,50579,50580],{},"输入语法：",[14,50582,50583],{},[1451,50584],{"alt":24,"src":50585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[74,50587,50589],{"id":50588},"_2116-字面量","21.1.6 字面量",[14,50591,50592],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50594,50595],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[45,50597,50599],{"id":50598},"_22-变量","2.2 变量",[57,50601,50602],{},[60,50603,50604],{},"变量声明",[14,50606,50607],{},"let 变量名",[1120,50609,50610,50613],{},[60,50611,50612],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[60,50614,50615],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[57,50617,50618],{"start":25},[60,50619,50620],{},"变量赋值",[94,50622,50626],{"className":50623,"code":50624,"language":50625,"meta":24,"style":24},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[100,50627,50628,50633],{"__ignoreMap":24},[103,50629,50630],{"class":105,"line":106},[103,50631,50632],{"class":113},"let age\n",[103,50634,50635],{"class":105,"line":25},[103,50636,50637],{"class":113},"age=18\n",[57,50639,50640,50643],{"start":1168},[60,50641,50642],{},"连这些（变量的初始化）：let age=18",[60,50644,50645],{},"更新变量",[14,50647,50648],{},[1451,50649],{"alt":24,"src":50650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[57,50652,50653],{"start":1189},[60,50654,50655],{},"声明多个变量",[14,50657,50658],{},[1451,50659],{"alt":24,"src":50660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[57,50662,50663],{"start":1203},[60,50664,50665],{},"变量命名规则与规范",[14,50667,50668],{},[1451,50669],{"alt":24,"src":50670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50672,50673],{},"遵守小驼峰！",[57,50675,50676],{"start":1209},[60,50677,50678],{},"变量拓展-let和var的区别",[14,50680,50681],{},[1451,50682],{"alt":24,"src":50683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[45,50685,50687],{"id":50686},"_23-数组","2.3 数组",[94,50689,50691],{"className":50623,"code":50690,"language":50625,"meta":24,"style":24},"let arr = []\n",[100,50692,50693],{"__ignoreMap":24},[103,50694,50695],{"class":105,"line":106},[103,50696,50690],{"class":113},[14,50698,50699],{},[1451,50700],{"alt":24,"src":50701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50703,50704],{},[1451,50705],{"alt":24,"src":50706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[45,50708,50710],{"id":50709},"_24-常量","2.4 常量",[14,50712,50713],{},[1451,50714],{"alt":24,"src":50715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50717,50718],{},"const — 类似于 let ，但是变量的值无法被修改",[45,50720,50722],{"id":50721},"_25-数据类型","2.5 数据类型",[14,50724,50725],{},[1451,50726],{"alt":24,"src":50727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[57,50729,50730,50733],{},[60,50731,50732],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[60,50734,50735],{},"算数运算符：",[14,50737,50738],{},[1451,50739],{"alt":24,"src":50740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[57,50742,50743],{"start":1168},[60,50744,50745],{},"数字类型（Number）",[14,50747,50748],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50750,50751],{},[1451,50752],{"alt":24,"src":50753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[57,50755,50756],{"start":1183},[60,50757,50758],{},"字符串类型（string）",[14,50760,50761],{},[1451,50762],{"alt":24,"src":50763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50765,50766],{},"反引号也是可以使用的",[14,50768,50769],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50771,50772],{},"例如：document.write(\"我今年\"+age+\"岁\")",[57,50774,50775],{"start":1189},[60,50776,50777],{},"模板字符串",[14,50779,50780],{},[1451,50781],{"alt":24,"src":50782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50784,50785],{},"类似于python的字符串格式化",[57,50787,50788],{"start":1203},[60,50789,50790],{},"布尔类型",[14,50792,50793],{},"true 和 false",[57,50795,50796],{"start":1209},[60,50797,50798],{},"未定义类型（underfined）",[14,50800,50801],{},"表示没有赋值",[14,50803,50804],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50806,50807],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[57,50809,50810],{"start":1300},[60,50811,50812],{},"null（空类型）",[14,50814,50815],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50817,50818],{},"赋值了，但是内容为空",[94,50820,50822],{"className":50623,"code":50821,"language":50625,"meta":24,"style":24},"typeof null\n输出的是'object'，是一个对象数据类型\n",[100,50823,50824,50829],{"__ignoreMap":24},[103,50825,50826],{"class":105,"line":106},[103,50827,50828],{"class":113},"typeof null\n",[103,50830,50831],{"class":105,"line":25},[103,50832,50833],{"class":113},"输出的是'object'，是一个对象数据类型\n",[57,50835,50836],{"start":1306},[60,50837,50838],{},"控制台检测数据类型",[14,50840,50841],{},[1451,50842],{"alt":24,"src":50843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[57,50845,50846],{"start":1318},[60,50847,50848],{},"类型转换",[14,50850,50851],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50853,50854],{},"转换方式：隐式转换和显示转换",[14,50856,50857],{},"①隐式转换",[1120,50859,50860,50863,50866,50869],{},[60,50861,50862],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[60,50864,50865],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[60,50867,50868],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[60,50870,50871],{},"任何数据和字符串相加结果都是字符串",[14,50873,50874],{},"②显示转换",[14,50876,50877],{},[1451,50878],{"alt":24,"src":50879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50881,50882],{},[1451,50883],{"alt":24,"src":50884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50886,50887],{},"在输入的时候要用好隐式转换，简单写起来",[14,50889,50890],{},"let num = +prompt(’请输入数字：‘)",[14,50892,50893],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50895,50896],{},"console.log(parseInt('12.333px'))",[14,50898,50899],{},"输出为：12",[14,50901,50902],{},"console.log(parseInt('a'a'a12.333px'))",[14,50904,50905],{},"输出：NaN",[45,50907,50909],{"id":50908},"_26-运算符","2.6 运算符",[74,50911,50913],{"id":50912},"_261-赋值运算符","2.6.1 赋值运算符",[14,50915,50916],{},[1451,50917],{"alt":24,"src":50918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[74,50920,50922],{"id":50921},"_262-一元运算符","2.6.2 一元运算符",[14,50924,50925],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,50927,50928],{},[1451,50929],{"alt":24,"src":50930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,50932,50933],{},[1451,50934],{"alt":24,"src":50935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,50937,50938],{},"两者的区别：",[14,50940,50941],{},[1451,50942],{"alt":24,"src":50943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,50945,50946],{},"前置先自加；后置后加，代码执行完之后再加",[74,50948,50950],{"id":50949},"_263-比较运算符","2.6.3 比较运算符",[14,50952,50953],{},[1451,50954],{"alt":24,"src":50955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,50957,50958],{},"比较运算符也有隐式转换",[14,50960,50961],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,50963,50964],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,50966,50967],{},"要使用三等，开发的时候",[14,50969,50970],{},"NaN不等于任何人，包括它自己",[14,50972,50973],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,50975,50976],{},"7\u002F10=0.7",[14,50978,50979],{},"最后：0.5+0.2=0.7",[14,50981,50982],{},"字符串比较，比较的是字符对应的ASCII码",[74,50984,50986],{"id":50985},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,50988,50989],{},[1451,50990],{"alt":24,"src":50991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,50993,50994],{},[1451,50995],{"alt":24,"src":50996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,50998,50999],{},[1451,51000],{"alt":24,"src":51001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51003,51004],{},"上述题目选D",[14,51006,51007],{},"与真2假1；或真1假2",[74,51009,51011],{"id":51010},"_265-运算符优先级","2.6.5 运算符优先级",[14,51013,51014],{},[1451,51015],{"alt":24,"src":51016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51018,51019],{},"先算逻辑与，后算逻辑或",[45,51021,51023],{"id":51022},"_27-语句","2.7 语句",[14,51025,51026],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51028,51029],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51031,51032],{},[1451,51033],{"alt":24,"src":51034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51036,51037],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51039,51040],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[74,51042,51044],{"id":51043},"_271-分支语句","2.7.1 分支语句",[21988,51046,51048],{"id":51047},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51050,51051],{},"if语句单行简单的话，可以不写{}，写在一行就行",[57,51053,51054],{},[60,51055,51056],{},"单分支语句",[14,51058,51059],{},[1451,51060],{"alt":24,"src":51061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51063,51064],{},"除了0，所有数字都为真",[94,51066,51068],{"className":50623,"code":51067,"language":50625,"meta":24,"style":24},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[100,51069,51070,51075,51080,51085,51089],{"__ignoreMap":24},[103,51071,51072],{"class":105,"line":106},[103,51073,51074],{"class":113},"if（0) {\n",[103,51076,51077],{"class":105,"line":25},[103,51078,51079],{"class":113},"    let a=1\n",[103,51081,51082],{"class":105,"line":1168},[103,51083,51084],{"class":113},"    alert(typeof a)\n",[103,51086,51087],{"class":105,"line":1183},[103,51088,1554],{"class":113},[103,51090,51091],{"class":105,"line":1189},[103,51092,51093],{"class":113},"不输出，括号为假\n",[57,51095,51096],{"start":25},[60,51097,51098],{},"双分支语句",[14,51100,51101],{},[1451,51102],{"alt":24,"src":51103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[57,51105,51106],{"start":1168},[60,51107,51108],{},"多分支语句",[14,51110,51111],{},[1451,51112],{"alt":24,"src":51113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21988,51115,51117],{"id":51116},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51119,51120],{},[1451,51121],{"alt":24,"src":51122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21988,51124,51126],{"id":51125},"_2713-switch语句","2.7.1.3 switch语句",[14,51128,51129],{},[1451,51130],{"alt":24,"src":51131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51133,51134],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[74,51136,51138],{"id":51137},"_272-循环语句","2.7.2 循环语句",[21988,51140,51142],{"id":51141},"_2721-断点演示","2.7.2.1 断点演示",[14,51144,51145],{},[1451,51146],{"alt":24,"src":51147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21988,51149,51151],{"id":51150},"_2722-while循环","2.7.2.2 while循环",[14,51153,51154],{},[1451,51155],{"alt":24,"src":51156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51158,51159],{},[1451,51160],{"alt":24,"src":51161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21988,51163,51165],{"id":51164},"_2723-for循环","2.7.2.3 for循环",[14,51167,51168],{},[1451,51169],{"alt":24,"src":51170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51172,51173],{},"for(;;) {",[14,51175,1059],{},[14,51177,51178],{},"表示无限循环",[14,51180,51181],{},[1451,51182],{"alt":24,"src":51183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21988,51185,51187],{"id":51186},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51189,51190],{},[1451,51191],{"alt":24,"src":51192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[45,51194,51196],{"id":51195},"_28-数组","2.8 数组",[74,51198,51200],{"id":51199},"_281-基础认识","2.8.1 基础认识",[14,51202,51203],{},[1451,51204],{"alt":24,"src":51205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51207,51208],{},[1451,51209],{"alt":24,"src":51210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51212,51213],{},[1451,51214],{"alt":24,"src":51215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51217,51218],{},[1451,51219],{"alt":24,"src":51220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[74,51222,51224],{"id":51223},"_282-操作数组","2.8.2 操作数组",[14,51226,51227],{},[1451,51228],{"alt":24,"src":51229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[57,51231,51232],{},[60,51233,51234],{},"添加元素",[14,51236,51237],{},[1451,51238],{"alt":24,"src":51239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51241,51242],{},"console.log(arr.push('green'))",[14,51244,51245],{},"输出结果：为新数组的长度",[14,51247,51248],{},[1451,51249],{"alt":24,"src":51250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51252,51253],{},"push用的非常多，一定要记住",[57,51255,51256],{},[60,51257,51258],{},"删除元素",[14,51260,51261],{},[1451,51262],{"alt":24,"src":51263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51265,51266],{},[1451,51267],{"alt":24,"src":51268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51270,51271],{},[1451,51272],{"alt":24,"src":51273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[74,51275,51277],{"id":51276},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[94,51279,51281],{"className":50623,"code":51280,"language":50625,"meta":24,"style":24},"\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",[100,51282,51283,51298,51314,51318,51327,51345,51369,51391,51405,51413,51420,51432,51443,51447,51451,51458,51470,51485,51498,51517,51534,51549,51561,51573,51585,51589,51593,51604,51614,51626,51638,51650,51661,51665,51669,51681,51685,51699,51703,51707,51718,51732,51744,51758,51762,51771,51780,51784,51793,51797,51806,51811,51816,51829,51857,51862,51867,51892,51897,51901,51906,51911,51926,51930,51935,51965,51977,51993,52009,52023,52028,52035,52039,52044,52057,52065,52073,52077],{"__ignoreMap":24},[103,51284,51285,51288,51292,51295],{"class":105,"line":106},[103,51286,51287],{"class":113},"\u003C!",[103,51289,51291],{"class":51290},"s9eBZ","DOCTYPE",[103,51293,51294],{"class":1952}," html",[103,51296,51297],{"class":113},">\n",[103,51299,51300,51302,51304,51307,51309,51312],{"class":105,"line":25},[103,51301,1023],{"class":113},[103,51303,50625],{"class":51290},[103,51305,51306],{"class":1952}," lang",[103,51308,159],{"class":113},[103,51310,51311],{"class":218},"\"en\"",[103,51313,51297],{"class":113},[103,51315,51316],{"class":105,"line":1168},[103,51317,2389],{"emptyLinePlaceholder":30},[103,51319,51320,51322,51325],{"class":105,"line":1183},[103,51321,1023],{"class":113},[103,51323,51324],{"class":51290},"head",[103,51326,51297],{"class":113},[103,51328,51329,51332,51335,51338,51340,51343],{"class":105,"line":1189},[103,51330,51331],{"class":113},"    \u003C",[103,51333,51334],{"class":51290},"meta",[103,51336,51337],{"class":1952}," charset",[103,51339,159],{"class":113},[103,51341,51342],{"class":218},"\"UTF-8\"",[103,51344,51297],{"class":113},[103,51346,51347,51349,51351,51354,51356,51359,51362,51364,51367],{"class":105,"line":1203},[103,51348,51331],{"class":113},[103,51350,51334],{"class":51290},[103,51352,51353],{"class":1952}," http-equiv",[103,51355,159],{"class":113},[103,51357,51358],{"class":218},"\"X-UA-Compatible\"",[103,51360,51361],{"class":1952}," content",[103,51363,159],{"class":113},[103,51365,51366],{"class":218},"\"IE=edge\"",[103,51368,51297],{"class":113},[103,51370,51371,51373,51375,51377,51379,51382,51384,51386,51389],{"class":105,"line":1209},[103,51372,51331],{"class":113},[103,51374,51334],{"class":51290},[103,51376,14910],{"class":1952},[103,51378,159],{"class":113},[103,51380,51381],{"class":218},"\"viewport\"",[103,51383,51361],{"class":1952},[103,51385,159],{"class":113},[103,51387,51388],{"class":218},"\"width=device-width, initial-scale=1.0\"",[103,51390,51297],{"class":113},[103,51392,51393,51395,51398,51401,51403],{"class":105,"line":1300},[103,51394,51331],{"class":113},[103,51396,51397],{"class":51290},"title",[103,51399,51400],{"class":113},">Document\u003C\u002F",[103,51402,51397],{"class":51290},[103,51404,51297],{"class":113},[103,51406,51407,51409,51411],{"class":105,"line":1306},[103,51408,51331],{"class":113},[103,51410,5116],{"class":51290},[103,51412,51297],{"class":113},[103,51414,51415,51418],{"class":105,"line":1318},[103,51416,51417],{"class":51290},"        *",[103,51419,15562],{"class":113},[103,51421,51422,51425,51428,51430],{"class":105,"line":1601},[103,51423,51424],{"class":162},"            margin",[103,51426,51427],{"class":113},": ",[103,51429,305],{"class":162},[103,51431,1279],{"class":113},[103,51433,51434,51437,51439,51441],{"class":105,"line":1606},[103,51435,51436],{"class":162},"            padding",[103,51438,51427],{"class":113},[103,51440,305],{"class":162},[103,51442,1279],{"class":113},[103,51444,51445],{"class":105,"line":1612},[103,51446,2518],{"class":113},[103,51448,51449],{"class":105,"line":1617},[103,51450,2389],{"emptyLinePlaceholder":30},[103,51452,51453,51456],{"class":105,"line":1631},[103,51454,51455],{"class":1952},"        .box",[103,51457,15562],{"class":113},[103,51459,51460,51463,51465,51468],{"class":105,"line":1636},[103,51461,51462],{"class":162},"            display",[103,51464,51427],{"class":113},[103,51466,51467],{"class":162},"flex",[103,51469,1279],{"class":113},[103,51471,51472,51475,51477,51480,51483],{"class":105,"line":1642},[103,51473,51474],{"class":162},"            width",[103,51476,51427],{"class":113},[103,51478,51479],{"class":162},"700",[103,51481,51482],{"class":109},"px",[103,51484,1279],{"class":113},[103,51486,51487,51490,51492,51494,51496],{"class":105,"line":1663},[103,51488,51489],{"class":162},"            height",[103,51491,51427],{"class":113},[103,51493,3962],{"class":162},[103,51495,51482],{"class":109},[103,51497,1279],{"class":113},[103,51499,51500,51503,51505,51507,51509,51512,51515],{"class":105,"line":1668},[103,51501,51502],{"class":162},"            border-left",[103,51504,51427],{"class":113},[103,51506,331],{"class":162},[103,51508,51482],{"class":109},[103,51510,51511],{"class":162}," solid",[103,51513,51514],{"class":162}," pink",[103,51516,1279],{"class":113},[103,51518,51519,51522,51524,51526,51528,51530,51532],{"class":105,"line":1682},[103,51520,51521],{"class":162},"            border-bottom",[103,51523,51427],{"class":113},[103,51525,331],{"class":162},[103,51527,51482],{"class":109},[103,51529,51511],{"class":162},[103,51531,51514],{"class":162},[103,51533,1279],{"class":113},[103,51535,51536,51538,51540,51542,51544,51547],{"class":105,"line":1687},[103,51537,51424],{"class":162},[103,51539,51427],{"class":113},[103,51541,769],{"class":162},[103,51543,51482],{"class":109},[103,51545,51546],{"class":162}," auto",[103,51548,1279],{"class":113},[103,51550,51551,51554,51556,51559],{"class":105,"line":1716},[103,51552,51553],{"class":162},"            justify-content",[103,51555,51427],{"class":113},[103,51557,51558],{"class":162},"space-around",[103,51560,1279],{"class":113},[103,51562,51563,51566,51568,51571],{"class":105,"line":1721},[103,51564,51565],{"class":162},"            align-items",[103,51567,51427],{"class":113},[103,51569,51570],{"class":162},"flex-end",[103,51572,1279],{"class":113},[103,51574,51575,51578,51580,51583],{"class":105,"line":1738},[103,51576,51577],{"class":162},"            text-align",[103,51579,51427],{"class":113},[103,51581,51582],{"class":162},"center",[103,51584,1279],{"class":113},[103,51586,51587],{"class":105,"line":1743},[103,51588,2518],{"class":113},[103,51590,51591],{"class":105,"line":1748},[103,51592,2389],{"emptyLinePlaceholder":30},[103,51594,51595,51597,51599,51602],{"class":105,"line":1753},[103,51596,51455],{"class":1952},[103,51598,1073],{"class":109},[103,51600,51601],{"class":51290},"div",[103,51603,15562],{"class":113},[103,51605,51606,51608,51610,51612],{"class":105,"line":1767},[103,51607,51462],{"class":162},[103,51609,51427],{"class":113},[103,51611,51467],{"class":162},[103,51613,1279],{"class":113},[103,51615,51616,51618,51620,51622,51624],{"class":105,"line":1772},[103,51617,51474],{"class":162},[103,51619,51427],{"class":113},[103,51621,769],{"class":162},[103,51623,51482],{"class":109},[103,51625,1279],{"class":113},[103,51627,51628,51631,51633,51636],{"class":105,"line":2566},[103,51629,51630],{"class":162},"            background-color",[103,51632,51427],{"class":113},[103,51634,51635],{"class":162},"pink",[103,51637,1279],{"class":113},[103,51639,51640,51643,51645,51648],{"class":105,"line":2580},[103,51641,51642],{"class":162},"            flex-direction",[103,51644,51427],{"class":113},[103,51646,51647],{"class":162},"column",[103,51649,1279],{"class":113},[103,51651,51652,51654,51656,51659],{"class":105,"line":2588},[103,51653,51553],{"class":162},[103,51655,51427],{"class":113},[103,51657,51658],{"class":162},"space-between",[103,51660,1279],{"class":113},[103,51662,51663],{"class":105,"line":2593},[103,51664,2518],{"class":113},[103,51666,51667],{"class":105,"line":2599},[103,51668,2389],{"emptyLinePlaceholder":30},[103,51670,51671,51673,51676,51679],{"class":105,"line":2605},[103,51672,51455],{"class":1952},[103,51674,51675],{"class":51290}," div",[103,51677,51678],{"class":51290}," span",[103,51680,15562],{"class":113},[103,51682,51683],{"class":105,"line":2610},[103,51684,2389],{"emptyLinePlaceholder":30},[103,51686,51687,51690,51692,51695,51697],{"class":105,"line":7938},[103,51688,51689],{"class":162},"            margin-top",[103,51691,51427],{"class":113},[103,51693,51694],{"class":162},"-20",[103,51696,51482],{"class":109},[103,51698,1279],{"class":113},[103,51700,51701],{"class":105,"line":7962},[103,51702,2518],{"class":113},[103,51704,51705],{"class":105,"line":7967},[103,51706,2389],{"emptyLinePlaceholder":30},[103,51708,51709,51711,51713,51716],{"class":105,"line":7973},[103,51710,51455],{"class":1952},[103,51712,51675],{"class":51290},[103,51714,51715],{"class":51290}," h4",[103,51717,15562],{"class":113},[103,51719,51720,51723,51725,51728,51730],{"class":105,"line":8000},[103,51721,51722],{"class":162},"            margin-bottom",[103,51724,51427],{"class":113},[103,51726,51727],{"class":162},"-35",[103,51729,51482],{"class":109},[103,51731,1279],{"class":113},[103,51733,51734,51736,51738,51740,51742],{"class":105,"line":8005},[103,51735,51474],{"class":162},[103,51737,51427],{"class":113},[103,51739,469],{"class":162},[103,51741,51482],{"class":109},[103,51743,1279],{"class":113},[103,51745,51746,51749,51751,51754,51756],{"class":105,"line":8011},[103,51747,51748],{"class":162},"            margin-left",[103,51750,51427],{"class":113},[103,51752,51753],{"class":162},"-10",[103,51755,51482],{"class":109},[103,51757,1279],{"class":113},[103,51759,51760],{"class":105,"line":8023},[103,51761,2518],{"class":113},[103,51763,51764,51767,51769],{"class":105,"line":8035},[103,51765,51766],{"class":113},"    \u003C\u002F",[103,51768,5116],{"class":51290},[103,51770,51297],{"class":113},[103,51772,51773,51776,51778],{"class":105,"line":8047},[103,51774,51775],{"class":113},"\u003C\u002F",[103,51777,51324],{"class":51290},[103,51779,51297],{"class":113},[103,51781,51782],{"class":105,"line":9706},[103,51783,2389],{"emptyLinePlaceholder":30},[103,51785,51786,51788,51791],{"class":105,"line":9731},[103,51787,1023],{"class":113},[103,51789,51790],{"class":51290},"body",[103,51792,51297],{"class":113},[103,51794,51795],{"class":105,"line":9754},[103,51796,2389],{"emptyLinePlaceholder":30},[103,51798,51799,51801,51804],{"class":105,"line":9778},[103,51800,51331],{"class":113},[103,51802,51803],{"class":51290},"script",[103,51805,51297],{"class":113},[103,51807,51808],{"class":105,"line":9783},[103,51809,51810],{"class":172},"        \u002F\u002F 1. 四次弹框效果\n",[103,51812,51813],{"class":105,"line":9788},[103,51814,51815],{"class":172},"        \u002F\u002F 声明一个新的数组\n",[103,51817,51818,51821,51824,51826],{"class":105,"line":9793},[103,51819,51820],{"class":109},"        let",[103,51822,51823],{"class":113}," arr ",[103,51825,159],{"class":109},[103,51827,51828],{"class":113}," []\n",[103,51830,51831,51833,51835,51838,51840,51842,51844,51846,51848,51851,51853,51855],{"class":105,"line":9802},[103,51832,3392],{"class":109},[103,51834,1647],{"class":113},[103,51836,51837],{"class":109},"let",[103,51839,9428],{"class":113},[103,51841,159],{"class":109},[103,51843,25108],{"class":162},[103,51845,9435],{"class":113},[103,51847,1577],{"class":109},[103,51849,51850],{"class":162}," 4",[103,51852,3203],{"class":113},[103,51854,2281],{"class":109},[103,51856,12432],{"class":113},[103,51858,51859],{"class":105,"line":9807},[103,51860,51861],{"class":172},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[103,51863,51864],{"class":105,"line":9813},[103,51865,51866],{"class":172},"            \u002F\u002F arr.push(num)\n",[103,51868,51869,51872,51875,51877,51880,51882,51885,51887,51890],{"class":105,"line":9834},[103,51870,51871],{"class":113},"            arr.",[103,51873,51874],{"class":1952},"push",[103,51876,114],{"class":113},[103,51878,51879],{"class":1952},"prompt",[103,51881,114],{"class":113},[103,51883,51884],{"class":218},"`请输入第${",[103,51886,554],{"class":113},[103,51888,51889],{"class":218},"}季度的数据:`",[103,51891,30487],{"class":113},[103,51893,51894],{"class":105,"line":9840},[103,51895,51896],{"class":172},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[103,51898,51899],{"class":105,"line":9854},[103,51900,2518],{"class":113},[103,51902,51903],{"class":105,"line":9860},[103,51904,51905],{"class":172},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[103,51907,51908],{"class":105,"line":9887},[103,51909,51910],{"class":172},"        \u002F\u002F 盒子开头\n",[103,51912,51913,51916,51919,51921,51924],{"class":105,"line":9896},[103,51914,51915],{"class":113},"        document.",[103,51917,51918],{"class":1952},"write",[103,51920,114],{"class":113},[103,51922,51923],{"class":218},"` \u003Cdiv class=\"box\">`",[103,51925,120],{"class":113},[103,51927,51928],{"class":105,"line":9902},[103,51929,2389],{"emptyLinePlaceholder":30},[103,51931,51932],{"class":105,"line":9910},[103,51933,51934],{"class":172},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[103,51936,51937,51939,51941,51943,51945,51947,51949,51951,51953,51956,51959,51961,51963],{"class":105,"line":9915},[103,51938,3392],{"class":109},[103,51940,1647],{"class":113},[103,51942,51837],{"class":109},[103,51944,9428],{"class":113},[103,51946,159],{"class":109},[103,51948,4082],{"class":162},[103,51950,9435],{"class":113},[103,51952,1023],{"class":109},[103,51954,51955],{"class":113}," arr.",[103,51957,51958],{"class":162},"length",[103,51960,3203],{"class":113},[103,51962,2281],{"class":109},[103,51964,12432],{"class":113},[103,51966,51967,51970,51972,51974],{"class":105,"line":16594},[103,51968,51969],{"class":113},"            document.",[103,51971,51918],{"class":1952},[103,51973,114],{"class":113},[103,51975,51976],{"class":218},"`\n",[103,51978,51979,51982,51984,51986,51988,51990],{"class":105,"line":16600},[103,51980,51981],{"class":218},"              \u003Cdiv style=\"height: ${",[103,51983,3869],{"class":113},[103,51985,1003],{"class":218},[103,51987,554],{"class":113},[103,51989,1053],{"class":218},[103,51991,51992],{"class":218},"}px;\">\n",[103,51994,51995,51998,52000,52002,52004,52006],{"class":105,"line":16623},[103,51996,51997],{"class":218},"                \u003Cspan>${",[103,51999,3869],{"class":113},[103,52001,1003],{"class":218},[103,52003,554],{"class":113},[103,52005,1053],{"class":218},[103,52007,52008],{"class":218},"}\u003C\u002Fspan>\n",[103,52010,52011,52014,52016,52018,52020],{"class":105,"line":16629},[103,52012,52013],{"class":218},"                \u003Ch4>第${",[103,52015,554],{"class":113},[103,52017,45556],{"class":109},[103,52019,25108],{"class":162},[103,52021,52022],{"class":218},"}季度\u003C\u002Fh4>\n",[103,52024,52025],{"class":105,"line":16652},[103,52026,52027],{"class":218},"              \u003C\u002Fdiv>          \n",[103,52029,52030,52033],{"class":105,"line":16666},[103,52031,52032],{"class":218},"            `",[103,52034,120],{"class":113},[103,52036,52037],{"class":105,"line":16686},[103,52038,2518],{"class":113},[103,52040,52041],{"class":105,"line":16692},[103,52042,52043],{"class":172},"        \u002F\u002F 盒子结尾\n",[103,52045,52046,52048,52050,52052,52055],{"class":105,"line":16703},[103,52047,51915],{"class":113},[103,52049,51918],{"class":1952},[103,52051,114],{"class":113},[103,52053,52054],{"class":218},"` \u003C\u002Fdiv>`",[103,52056,120],{"class":113},[103,52058,52059,52061,52063],{"class":105,"line":16726},[103,52060,51766],{"class":113},[103,52062,51803],{"class":51290},[103,52064,51297],{"class":113},[103,52066,52067,52069,52071],{"class":105,"line":16748},[103,52068,51775],{"class":113},[103,52070,51790],{"class":51290},[103,52072,51297],{"class":113},[103,52074,52075],{"class":105,"line":16753},[103,52076,2389],{"emptyLinePlaceholder":30},[103,52078,52079,52081,52083],{"class":105,"line":16759},[103,52080,51775],{"class":113},[103,52082,50625],{"class":51290},[103,52084,51297],{"class":113},[74,52086,52088],{"id":52087},"_284-冒泡排序","2.8.4 冒泡排序",[94,52090,52092],{"className":50623,"code":52091,"language":50625,"meta":24,"style":24},"\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",[100,52093,52094,52104,52118,52122,52130,52145,52165,52177,52185,52189,52197,52205,52237,52270,52307,52312,52331,52336,52349,52364,52380,52384,52389,52393,52403,52412,52420,52424],{"__ignoreMap":24},[103,52095,52096,52098,52100,52102],{"class":105,"line":106},[103,52097,51287],{"class":113},[103,52099,51291],{"class":51290},[103,52101,51294],{"class":1952},[103,52103,51297],{"class":113},[103,52105,52106,52108,52110,52112,52114,52116],{"class":105,"line":25},[103,52107,1023],{"class":113},[103,52109,50625],{"class":51290},[103,52111,51306],{"class":1952},[103,52113,159],{"class":113},[103,52115,51311],{"class":218},[103,52117,51297],{"class":113},[103,52119,52120],{"class":105,"line":1168},[103,52121,2389],{"emptyLinePlaceholder":30},[103,52123,52124,52126,52128],{"class":105,"line":1183},[103,52125,1023],{"class":113},[103,52127,51324],{"class":51290},[103,52129,51297],{"class":113},[103,52131,52132,52135,52137,52139,52141,52143],{"class":105,"line":1189},[103,52133,52134],{"class":113},"  \u003C",[103,52136,51334],{"class":51290},[103,52138,51337],{"class":1952},[103,52140,159],{"class":113},[103,52142,51342],{"class":218},[103,52144,51297],{"class":113},[103,52146,52147,52149,52151,52153,52155,52157,52159,52161,52163],{"class":105,"line":1203},[103,52148,52134],{"class":113},[103,52150,51334],{"class":51290},[103,52152,14910],{"class":1952},[103,52154,159],{"class":113},[103,52156,51381],{"class":218},[103,52158,51361],{"class":1952},[103,52160,159],{"class":113},[103,52162,51388],{"class":218},[103,52164,51297],{"class":113},[103,52166,52167,52169,52171,52173,52175],{"class":105,"line":1209},[103,52168,52134],{"class":113},[103,52170,51397],{"class":51290},[103,52172,51400],{"class":113},[103,52174,51397],{"class":51290},[103,52176,51297],{"class":113},[103,52178,52179,52181,52183],{"class":105,"line":1300},[103,52180,51775],{"class":113},[103,52182,51324],{"class":51290},[103,52184,51297],{"class":113},[103,52186,52187],{"class":105,"line":1306},[103,52188,2389],{"emptyLinePlaceholder":30},[103,52190,52191,52193,52195],{"class":105,"line":1318},[103,52192,1023],{"class":113},[103,52194,51790],{"class":51290},[103,52196,51297],{"class":113},[103,52198,52199,52201,52203],{"class":105,"line":1601},[103,52200,52134],{"class":113},[103,52202,51803],{"class":51290},[103,52204,51297],{"class":113},[103,52206,52207,52210,52212,52214,52217,52219,52221,52223,52225,52227,52229,52231,52233,52235],{"class":105,"line":1606},[103,52208,52209],{"class":109},"    let",[103,52211,51823],{"class":113},[103,52213,159],{"class":109},[103,52215,52216],{"class":113}," [",[103,52218,432],{"class":162},[103,52220,12425],{"class":113},[103,52222,406],{"class":162},[103,52224,12425],{"class":113},[103,52226,185],{"class":162},[103,52228,12425],{"class":113},[103,52230,191],{"class":162},[103,52232,12425],{"class":113},[103,52234,331],{"class":162},[103,52236,33236],{"class":113},[103,52238,52239,52241,52243,52245,52247,52249,52251,52253,52255,52257,52259,52262,52264,52266,52268],{"class":105,"line":1612},[103,52240,3190],{"class":109},[103,52242,1647],{"class":113},[103,52244,51837],{"class":109},[103,52246,9428],{"class":113},[103,52248,159],{"class":109},[103,52250,4082],{"class":162},[103,52252,9435],{"class":113},[103,52254,1023],{"class":109},[103,52256,51955],{"class":113},[103,52258,51958],{"class":162},[103,52260,52261],{"class":109}," -",[103,52263,25108],{"class":162},[103,52265,3203],{"class":113},[103,52267,2281],{"class":109},[103,52269,12432],{"class":113},[103,52271,52272,52275,52277,52279,52281,52283,52285,52287,52289,52291,52293,52295,52297,52299,52301,52303,52305],{"class":105,"line":1617},[103,52273,52274],{"class":109},"      for",[103,52276,1647],{"class":113},[103,52278,51837],{"class":109},[103,52280,9490],{"class":113},[103,52282,159],{"class":109},[103,52284,4082],{"class":162},[103,52286,9497],{"class":113},[103,52288,1023],{"class":109},[103,52290,51955],{"class":113},[103,52292,51958],{"class":162},[103,52294,52261],{"class":109},[103,52296,9428],{"class":113},[103,52298,645],{"class":109},[103,52300,25108],{"class":162},[103,52302,9504],{"class":113},[103,52304,2281],{"class":109},[103,52306,12432],{"class":113},[103,52308,52309],{"class":105,"line":1631},[103,52310,52311],{"class":172},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[103,52313,52314,52316,52319,52321,52324,52326,52328],{"class":105,"line":1636},[103,52315,2486],{"class":109},[103,52317,52318],{"class":113}," (arr[j] ",[103,52320,1073],{"class":109},[103,52322,52323],{"class":113}," arr[j ",[103,52325,594],{"class":109},[103,52327,25108],{"class":162},[103,52329,52330],{"class":113},"]) {\n",[103,52332,52333],{"class":105,"line":1642},[103,52334,52335],{"class":172},"          \u002F\u002F 交换两个变量\n",[103,52337,52338,52341,52344,52346],{"class":105,"line":1663},[103,52339,52340],{"class":109},"          let",[103,52342,52343],{"class":113}," tmp ",[103,52345,159],{"class":109},[103,52347,52348],{"class":113}," arr[j]\n",[103,52350,52351,52354,52356,52358,52360,52362],{"class":105,"line":1668},[103,52352,52353],{"class":113},"          arr[j] ",[103,52355,159],{"class":109},[103,52357,52323],{"class":113},[103,52359,594],{"class":109},[103,52361,25108],{"class":162},[103,52363,33236],{"class":113},[103,52365,52366,52369,52371,52373,52375,52377],{"class":105,"line":1682},[103,52367,52368],{"class":113},"          arr[j ",[103,52370,594],{"class":109},[103,52372,25108],{"class":162},[103,52374,4432],{"class":113},[103,52376,159],{"class":109},[103,52378,52379],{"class":113}," tmp\n",[103,52381,52382],{"class":105,"line":1687},[103,52383,2518],{"class":113},[103,52385,52386],{"class":105,"line":1716},[103,52387,52388],{"class":113},"      }\n",[103,52390,52391],{"class":105,"line":1721},[103,52392,2176],{"class":113},[103,52394,52395,52398,52400],{"class":105,"line":1738},[103,52396,52397],{"class":113},"    document.",[103,52399,51918],{"class":1952},[103,52401,52402],{"class":113},"(arr)\n",[103,52404,52405,52408,52410],{"class":105,"line":1743},[103,52406,52407],{"class":113},"  \u003C\u002F",[103,52409,51803],{"class":51290},[103,52411,51297],{"class":113},[103,52413,52414,52416,52418],{"class":105,"line":1748},[103,52415,51775],{"class":113},[103,52417,51790],{"class":51290},[103,52419,51297],{"class":113},[103,52421,52422],{"class":105,"line":1753},[103,52423,2389],{"emptyLinePlaceholder":30},[103,52425,52426,52428,52430],{"class":105,"line":1767},[103,52427,51775],{"class":113},[103,52429,50625],{"class":51290},[103,52431,51297],{"class":113},[14,52433,52434],{},[1451,52435],{"alt":24,"src":52436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52438,52439],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52441,52442],{},"let arr = [4, 2, 5, 1, 3]",[14,52444,52445],{},"\u002F\u002F 1.升序排列写法",[14,52447,52448],{},"arr.sort(function (a, b) {",[14,52450,52451],{},"return a - b",[14,52453,52454],{},"})",[14,52456,52457],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52459,52460],{},"\u002F\u002F 降序排列写法",[14,52462,52448],{},[14,52464,52465],{},"return b - a",[14,52467,52454],{},[14,52469,52470],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[45,52472,52474],{"id":52473},"_29-函数","2.9 函数",[14,52476,52477],{},[1451,52478],{"alt":24,"src":52479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52481,52482],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52484,52485],{},"函数的声明用function",[14,52487,52488],{},"函数里边可以嵌套函数",[74,52490,52492],{"id":52491},"_291-函数传参","2.9.1 函数传参",[14,52494,52495],{},[1451,52496],{"alt":24,"src":52497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52499,52500],{},[1451,52501],{"alt":24,"src":52502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1120,52504,52505,52508,52511,52514,52517,52520],{},[60,52506,52507],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[60,52509,52510],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[60,52512,52513],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[60,52515,52516],{},"开发中尽量保持形参和实参个数一致",[60,52518,52519],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[60,52521,52522],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52524,52525],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[74,52527,52529],{"id":52528},"_292-函数的返回值","2.9.2 函数的返回值",[14,52531,52532],{},[1451,52533],{"alt":24,"src":52534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52536,52537],{},[1451,52538],{"alt":24,"src":52539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1120,52541,52542,52545,52548,52551,52554],{},[60,52543,52544],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[60,52546,52547],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[60,52549,52550],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[60,52552,52553],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[60,52555,52556],{},"断点调试:进入函数内部看执行过程F11",[74,52558,52560],{"id":52559},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[94,52562,52564],{"className":50623,"code":52563,"language":50625,"meta":24,"style":24},"    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",[100,52565,52566,52571,52576,52580,52585],{"__ignoreMap":24},[103,52567,52568],{"class":105,"line":106},[103,52569,52570],{"class":113},"    function fn(a, b) {\n",[103,52572,52573],{"class":105,"line":25},[103,52574,52575],{"class":113},"      console.log(a + b);\n",[103,52577,52578],{"class":105,"line":1168},[103,52579,2176],{"class":113},[103,52581,52582],{"class":105,"line":1183},[103,52583,52584],{"class":113},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[103,52586,52587],{"class":105,"line":1189},[103,52588,52589],{"class":113},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[74,52591,52593],{"id":52592},"_294-作用域","2.9.4 作用域",[1120,52595,52596,52602,52607,52610,52613],{},[60,52597,52598,52599],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[263,52600,52601],{},"作用域",[60,52603,52604],{},[263,52605,52606],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[60,52608,52609],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[60,52611,52612],{},"函数内部可以直接所使用全局变量",[60,52614,52615],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52617,14623],{},[94,52619,52621],{"className":50623,"code":52620,"language":50625,"meta":24,"style":24},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[100,52622,52623,52628,52633,52637,52642,52647,52652],{"__ignoreMap":24},[103,52624,52625],{"class":105,"line":106},[103,52626,52627],{"class":113},"    function fun() {\n",[103,52629,52630],{"class":105,"line":25},[103,52631,52632],{"class":113},"      num = 10\n",[103,52634,52635],{"class":105,"line":1168},[103,52636,2176],{"class":113},[103,52638,52639],{"class":105,"line":1183},[103,52640,52641],{"class":113},"    fun()\n",[103,52643,52644],{"class":105,"line":1189},[103,52645,52646],{"class":113},"    console.log(num)\n",[103,52648,52649],{"class":105,"line":1203},[103,52650,52651],{"class":113},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[103,52653,52654],{"class":105,"line":1209},[103,52655,52656],{"class":113},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1120,52658,52659,52662],{},[60,52660,52661],{},"函数内部的形参可以看做是局部变量",[60,52663,52664],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52666,52667,52668],{},"变量访问原则： ",[263,52669,52670],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[74,52672,52674],{"id":52673},"_295-匿名函数","2.9.5 匿名函数",[14,52676,52677],{},"函数可以分为具名函数和匿名函数",[14,52679,52680],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[57,52682,52683],{},[60,52684,52685],{},"函数表达式",[14,52687,52688],{},[1451,52689],{"alt":24,"src":52690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52692,52693],{},"里边也可以写参数",[14,52695,52696],{},"具名函数调用位置可以随意调整；",[14,52698,52699],{},"匿名函数函数表达式形式只能在声明后才可以使用",[57,52701,52702],{"start":25},[60,52703,52704],{},"立即执行函数",[14,52706,52707],{},[1451,52708],{"alt":24,"src":52709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52711,52712],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52714,52715],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52717,52718],{},"(function () {})();",[14,52720,52721],{},"不要落下最后的;",[14,52723,52724],{},"立即执行函数必须要加;",[14,52726,52727],{},"分号写前写后都没问题",[14,52729,52730],{},"写前：",[14,52732,52733],{},"(function() {})()",[14,52735,52736],{},";(function () {})();",[14,52738,52739],{},"写后:",[14,52741,52742],{},"(function() {})();",[14,52744,52718],{},[14,52746,52747],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52749,52750],{},"还有一种写法：",[14,52752,52753],{},"(function(){}());",[14,52755,52756],{},"或者:",[14,52758,52759],{},"!function(){}();",[14,52761,52762],{},"立即执行函数有时候也是可以加名字的：",[14,52764,52765],{},"(function flexible(window,document) {}(window,document));",[14,52767,52768],{},"省一些调用方法",[74,52770,52772],{"id":52771},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52774,52775],{},[1451,52776],{"alt":24,"src":52777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52779,52780],{},"这样就不用非得给x,y初始化了",[14,52782,52783],{},[1451,52784],{"alt":24,"src":52785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52787,52788],{},"代码执行时先看左边",[14,52790,52791],{},"例如：console.log(false && 3+5)",[14,52793,52794],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52796,52797],{},"&&都是真时，就返回最后一个真值",[14,52799,52800],{},"console.log(11 && 22)",[14,52802,52803],{},"输出22",[14,52805,52806],{},"逻辑与：遇真则真",[14,52808,14623],{},[14,52810,52811],{},"let age=1",[14,52813,52814],{},"console.log(11 || age++)",[14,52816,52817],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52819,52820],{},"console.log(11 || 22)",[14,52822,52823],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52825,52826],{},"||如果都是假的话，就取最后一个假的值了",[74,52828,52830],{"id":52829},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52832,52833],{},"显示转换：",[14,52835,52836,52839,52840],{},[263,52837,52838],{},"记忆","： ",[263,52841,52842],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52844,52845],{},"空字符串为假，其他字符串全为真",[14,52847,52848],{},[1451,52849],{"alt":24,"src":52850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52852,52853],{},"隐式转换：",[14,52855,52856],{},[1451,52857],{"alt":24,"src":52858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52860,52861],{},"隐式转换:",[14,52863,52864],{},"null+3=3",[14,52866,52867],{},"undefined+3=NaN",[14,52869,52870],{},"null==undefined 输出true,他两个都当0看",[14,52872,52873],{},"null===undefined 输出false",[14,52875,52876],{},"undefined做任何操作都是NaN",[14,52878,52879],{},"NaN不等于NaN，NaN表示计算错误",[45,52881,52883],{"id":52882},"_210-对象","2.10 对象",[74,52885,52887],{"id":52886},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52889,52890],{},"对象也是一种数据类型，里边的数据是无序的",[14,52892,52893],{},"对象由属性和方法组成",[14,52895,52896],{},[1451,52897],{"alt":24,"src":52898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52900,52901],{},[1451,52902],{"alt":24,"src":52903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52905,52906],{},[1451,52907],{"alt":24,"src":52908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[74,52910,52912],{"id":52911},"_2102-对象属性","2.10.2 对象属性",[14,52914,52915],{},[1451,52916],{"alt":24,"src":52917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[57,52919,52920],{},[60,52921,52922],{},"查询对象",[14,52924,52925],{},"对象名.属性 goods.uname",[14,52927,52928],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,52930,52931],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,52933,52934],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,52936,52937],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[57,52939,52940],{"start":25},[60,52941,52942],{},"重新赋值",[14,52944,52945],{},"对象名.属性=新值",[57,52947,52948],{"start":1168},[60,52949,52950],{},"增加新数据",[14,52952,52945],{},[57,52954,52955],{"start":1183},[60,52956,52957],{},"删除对象中的属性",[14,52959,52960],{},"delete 对象名.属性",[74,52962,52964],{"id":52963},"_2103-对象方法","2.10.3 对象方法",[14,52966,52967],{},[1451,52968],{"alt":24,"src":52969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,52971,52972],{},"后边跟的是匿名函数",[14,52974,52975],{},"对象外面的叫函数；对象内部的叫方法",[14,52977,52978],{},[1451,52979],{"alt":24,"src":52980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[74,52982,52984],{"id":52983},"_2104-遍历对象","2.10.4 遍历对象",[14,52986,52987],{},"理解为加括号的python字典遍历",[14,52989,52990],{},[1451,52991],{"alt":24,"src":52992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,52994,52995],{},"k是字符串类型",[14,52997,52998],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[94,53000,53002],{"className":50623,"code":53001,"language":50625,"meta":24,"style":24},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[100,53003,53004,53009,53014,53019,53024],{"__ignoreMap":24},[103,53005,53006],{"class":105,"line":106},[103,53007,53008],{"class":113},"   let arr = [1, 2, 3]\n",[103,53010,53011],{"class":105,"line":25},[103,53012,53013],{"class":113},"    for (let k in arr) {\n",[103,53015,53016],{"class":105,"line":1168},[103,53017,53018],{"class":113},"      console.log(k)\n",[103,53020,53021],{"class":105,"line":1183},[103,53022,53023],{"class":113},"      console.log(arr[k])\n",[103,53025,53026],{"class":105,"line":1189},[103,53027,2176],{"class":113},[14,53029,53030],{},[1451,53031],{"alt":24,"src":53032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53034,53035],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53037,53038],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53040,53041],{},"for in 得到的k是属性名",[51803,53043,53044],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[14,53046,53047],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[74,53049,53051],{"id":53050},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53053,53054],{},"数组中放对象信息",[94,53056,53060],{"className":53057,"code":53058,"language":53059,"meta":24,"style":24},"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",[100,53061,53062,53070,53075,53080,53085,53090,53095,53100,53105,53110,53115,53120,53125,53129,53133],{"__ignoreMap":24},[103,53063,53064,53066,53068],{"class":105,"line":106},[103,53065,1023],{"class":113},[103,53067,51803],{"class":51290},[103,53069,51297],{"class":113},[103,53071,53072],{"class":105,"line":25},[103,53073,53074],{"class":113},"    let students = [\n",[103,53076,53077],{"class":105,"line":1168},[103,53078,53079],{"class":113},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[103,53081,53082],{"class":105,"line":1183},[103,53083,53084],{"class":113},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[103,53086,53087],{"class":105,"line":1189},[103,53088,53089],{"class":113},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[103,53091,53092],{"class":105,"line":1203},[103,53093,53094],{"class":113},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[103,53096,53097],{"class":105,"line":1209},[103,53098,53099],{"class":113},"    ]\n",[103,53101,53102],{"class":105,"line":1300},[103,53103,53104],{"class":113},"    for (let i = 0; i \u003C students.length; i++) {\n",[103,53106,53107],{"class":105,"line":1306},[103,53108,53109],{"class":113},"      for (let k in students[i]) {\n",[103,53111,53112],{"class":105,"line":1318},[103,53113,53114],{"class":113},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[103,53116,53117],{"class":105,"line":1601},[103,53118,53119],{"class":113},"        \u002F\u002F输出每个人的名字：\n",[103,53121,53122],{"class":105,"line":1606},[103,53123,53124],{"class":113},"        \u002F\u002Fconsole.log(students[i].name)\n",[103,53126,53127],{"class":105,"line":1612},[103,53128,52388],{"class":113},[103,53130,53131],{"class":105,"line":1617},[103,53132,2176],{"class":113},[103,53134,53135,53137,53139],{"class":105,"line":1631},[103,53136,52407],{"class":113},[103,53138,51803],{"class":51290},[103,53140,51297],{"class":113},[74,53142,53144],{"id":53143},"_2106-内置对象","2.10.6 内置对象",[14,53146,53147],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[57,53149,53150],{},[60,53151,53152],{},"数学对象Math",[14,53154,53155],{},[1451,53156],{"alt":24,"src":53157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53159,53160],{},[17,53161,53164],{"href":53162,"rel":53163},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[21],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53166,53167],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53169,53170],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53172,53173],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53175,53176],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53178,53179],{},"null属于对象数据类型",[57,53181,53182],{"start":25},[60,53183,53184],{},"生成任意范围随机数",[14,53186,53187],{},[1451,53188],{"alt":24,"src":53189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53191,53192],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53194,53195],{},"乘以几就取不到几",[14,53197,53198],{},"取数组中的随机元素：",[14,53200,53201],{},"let arr = ['red', 'green', 'blue']",[14,53203,53204],{},"let random = Math.floor(Math.random() * arr.length)",[14,53206,53207],{},"console.log(arr[random])",[14,53209,53210],{},"这个函数得到的是全闭区间",[14,53212,53213],{},"function getRandom(N, M) {",[14,53215,53216],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53218,1059],{},[14,53220,53221],{},"console.log(getRandom(4, 8))",[74,53223,53225],{"id":53224},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53227,53228],{},[1451,53229],{"alt":24,"src":53230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53232,53233],{},[1451,53234],{"alt":24,"src":53235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53237,53238],{},[1451,53239],{"alt":24,"src":53240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53242,53243],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53245,53246],{},[1451,53247],{"alt":24,"src":53248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53250,53251],{},[1451,53252],{"alt":24,"src":53253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53255,53256],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53258,53259],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53261,53262],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5116,53264,53265],{},"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":24,"searchDepth":25,"depth":25,"links":53267},[53268,53276,53277,53278,53279,53280,53287,53291,53297,53306],{"id":50458,"depth":25,"text":50459,"children":53269},[53270,53271,53272,53273,53274,53275],{"id":50462,"depth":1168,"text":50463},{"id":50479,"depth":1168,"text":50480},{"id":50519,"depth":1168,"text":50520},{"id":50531,"depth":1168,"text":50532},{"id":50540,"depth":1168,"text":50541},{"id":50588,"depth":1168,"text":50589},{"id":50598,"depth":25,"text":50599},{"id":50686,"depth":25,"text":50687},{"id":50709,"depth":25,"text":50710},{"id":50721,"depth":25,"text":50722},{"id":50908,"depth":25,"text":50909,"children":53281},[53282,53283,53284,53285,53286],{"id":50912,"depth":1168,"text":50913},{"id":50921,"depth":1168,"text":50922},{"id":50949,"depth":1168,"text":50950},{"id":50985,"depth":1168,"text":50986},{"id":51010,"depth":1168,"text":51011},{"id":51022,"depth":25,"text":51023,"children":53288},[53289,53290],{"id":51043,"depth":1168,"text":51044},{"id":51137,"depth":1168,"text":51138},{"id":51195,"depth":25,"text":51196,"children":53292},[53293,53294,53295,53296],{"id":51199,"depth":1168,"text":51200},{"id":51223,"depth":1168,"text":51224},{"id":51276,"depth":1168,"text":51277},{"id":52087,"depth":1168,"text":52088},{"id":52473,"depth":25,"text":52474,"children":53298},[53299,53300,53301,53302,53303,53304,53305],{"id":52491,"depth":1168,"text":52492},{"id":52528,"depth":1168,"text":52529},{"id":52559,"depth":1168,"text":52560},{"id":52592,"depth":1168,"text":52593},{"id":52673,"depth":1168,"text":52674},{"id":52771,"depth":1168,"text":52772},{"id":52829,"depth":1168,"text":52830},{"id":52882,"depth":25,"text":52883,"children":53307},[53308,53309,53310,53311,53312,53313,53314],{"id":52886,"depth":1168,"text":52887},{"id":52911,"depth":1168,"text":52912},{"id":52963,"depth":1168,"text":52964},{"id":52983,"depth":1168,"text":52984},{"id":53050,"depth":1168,"text":53051},{"id":53143,"depth":1168,"text":53144},{"id":53224,"depth":1168,"text":53225},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50450,"description":27},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53321,"title":53322,"body":53323,"description":27,"extension":28,"meta":76663,"navigation":30,"path":76664,"seo":76665,"stem":76666,"__hash__":76667},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53324,"toc":76603},[53325,53328,53331,53334,53339,53342,53345,53348,53352,53356,53362,53367,53375,53382,53385,53389,53394,53399,53404,53407,53410,53421,53424,53428,53431,53434,53439,53444,53449,53452,53455,53547,53550,53555,53558,53563,53566,53569,53574,53577,53582,53586,53589,53603,53607,53612,53615,53618,53622,53627,53630,53634,53638,53643,53647,53652,53655,53658,53661,53664,53667,53670,53675,53680,53708,53711,53714,53717,53722,53725,53728,53731,53734,53738,53767,53771,53776,53781,53784,53787,53790,53795,53910,53915,53920,54081,54086,54089,54093,54098,54103,54106,54109,54112,54115,54118,54121,54124,54127,54130,54133,54136,54139,54142,54145,54147,54150,54153,54156,54161,54165,54562,54565,54571,54575,54580,55862,55867,55870,55873,55876,55881,57077,57081,57087,57092,57095,57100,57105,57109,57113,57118,57121,57126,57129,57132,57136,58044,58047,58051,58272,58275,58278,58281,58507,58510,58734,58737,58741,58746,58749,58752,58980,58983,59016,59019,59023,59028,59032,59035,59038,59041,59044,59047,59050,59053,59058,60338,60342,60345,61438,61442,61445,61448,61451,61454,61458,61461,61464,61466,61474,62955,62959,62962,62965,62968,63177,63180,63184,63188,63193,63198,63201,63204,63209,63213,63218,63221,63330,63334,63339,63344,63347,63350,63354,63359,63364,63369,63372,63375,63386,63389,63394,63399,63402,63405,63478,63482,63487,63490,63492,63503,63507,63512,64838,64841,64844,64847,64849,64852,64855,64858,64861,64864,64867,64870,64873,64876,64879,64882,64885,64887,64889,64892,64896,65990,65993,65996,66012,66026,66029,66034,66040,66045,66049,66053,66058,66062,66067,66509,66514,66517,66521,66526,66529,66532,66536,66541,66545,66550,66555,66559,66564,66569,66572,66577,66582,66586,66591,66596,66700,66703,66707,66712,67078,67081,67084,67087,67090,67093,67096,67099,67102,68398,68402,68407,68412,68415,68418,68421,68424,68426,68431,68436,68439,68443,68448,68453,68458,68461,68464,68467,68470,68473,68478,68481,68485,68490,68495,68499,68504,68507,68512,68515,68518,68521,68524,68527,68532,68535,68538,68541,68544,68548,68553,68556,68560,68565,68568,68571,68575,68604,68607,68611,68615,68620,68624,68629,68632,68635,68638,68641,68644,68647,68650,68653,68656,68659,68662,68665,68668,68671,68675,68680,68685,68688,68692,68696,68701,68704,68708,68711,68714,68719,68724,68729,68734,68739,68742,68745,68750,68755,68759,68764,68767,68772,68775,68778,68781,68784,68789,68792,68801,68805,68810,68813,68816,68820,68823,68828,68832,68835,68841,68847,68851,68877,68880,70441,70444,70940,70943,70948,70953,70958,70962,70967,70972,70977,70981,70986,70989,70992,70995,70998,71002,71005,71010,71013,71018,71022,71027,71030,71035,71040,71045,71048,71051,71056,71061,71064,71067,71071,71074,71079,71082,71087,71090,71095,71100,71105,71108,71113,71178,71181,71192,71196,71201,71373,71377,71382,71385,71388,71391,71395,71406,71410,71413,71418,71423,71426,71429,71432,71435,71438,71440,71443,71446,71449,71454,71457,71462,71465,71469,71472,71475,71489,71493,71496,71551,71556,71559,71562,71567,71570,71574,71579,71709,71713,71718,71723,71804,71809,71813,71816,71821,71826,71832,71835,71838,71841,71845,71850,71853,71864,71868,71885,74932,74936,74939,74942,74945,74966,74970,74973,74981,74984,74989,74992,74995,75000,75005,75009,75030,75034,75039,75042,75045,75048,75051,75055,75060,75063,75067,75072,75075,75080,75083,75088,75091,75096,76299,76303,76308,76311,76316,76600],[10,53326,53322],{"id":53327},"_3web-apis",[14,53329,53330],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53332,53333],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53335,53336],{},[1451,53337],{"alt":24,"src":53338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53340,53341],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53343,53344],{},"建议数组和对象使用 const 来声明",[14,53346,53347],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[45,53349,53351],{"id":53350},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[74,53353,53355],{"id":53354},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53357,53358,53361],{},[100,53359,53360],{},"document"," = HTML 文件解析后的对象化表示；",[14,53363,53364,53366],{},[100,53365,53360],{}," ≠ HTML 文件本身",[14,53368,53369,53374],{},[263,53370,53371],{},[100,53372,53373],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53376,53377,53381],{},[263,53378,53379],{},[100,53380,53360],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53383,53384],{},"document实际上为window.document的简写",[74,53386,53388],{"id":53387},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53390,53391],{},[1451,53392],{"alt":24,"src":53393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53395,53396],{},[1451,53397],{"alt":24,"src":53398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53400,53401],{},[1451,53402],{"alt":24,"src":53403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53405,53406],{},"console.dir()",[14,53408,53409],{},"dir用来打印对象",[1120,53411,53412,53415,53418],{},[60,53413,53414],{},"任何一个标签，都是一个对象",[60,53416,53417],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[60,53419,53420],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53422,53423],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[74,53425,53427],{"id":53426},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53429,53430],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53432,53433],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53435,53436],{},[263,53437,53438],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[57,53440,53441],{},[60,53442,53443],{},"利用CSS选择器来获取标签元素",[14,53445,53446],{},[1451,53447],{"alt":24,"src":53448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53450,53451],{},"里边的选择器必须必须加引号！！！",[14,53453,53454],{},"只选择第一个元素",[94,53456,53458],{"className":53057,"code":53457,"language":53059,"meta":24,"style":24},"\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",[100,53459,53460,53468,53489,53508,53516,53521,53526,53531,53539],{"__ignoreMap":24},[103,53461,53462,53464,53466],{"class":105,"line":106},[103,53463,1023],{"class":113},[103,53465,51790],{"class":51290},[103,53467,51297],{"class":113},[103,53469,53470,53472,53474,53477,53479,53482,53485,53487],{"class":105,"line":25},[103,53471,52134],{"class":113},[103,53473,51601],{"class":51290},[103,53475,53476],{"class":1952}," class",[103,53478,159],{"class":113},[103,53480,53481],{"class":218},"\"box\"",[103,53483,53484],{"class":113},">123\u003C\u002F",[103,53486,51601],{"class":51290},[103,53488,51297],{"class":113},[103,53490,53491,53493,53495,53497,53499,53501,53504,53506],{"class":105,"line":1168},[103,53492,52134],{"class":113},[103,53494,51601],{"class":51290},[103,53496,53476],{"class":1952},[103,53498,159],{"class":113},[103,53500,53481],{"class":218},[103,53502,53503],{"class":113},">456\u003C\u002F",[103,53505,51601],{"class":51290},[103,53507,51297],{"class":113},[103,53509,53510,53512,53514],{"class":105,"line":1183},[103,53511,52134],{"class":113},[103,53513,51803],{"class":51290},[103,53515,51297],{"class":113},[103,53517,53518],{"class":105,"line":1189},[103,53519,53520],{"class":113},"    \u002F\u002F 1.获取匹配的第一个元素\n",[103,53522,53523],{"class":105,"line":1203},[103,53524,53525],{"class":113},"    const box = document.querySelector('div')\n",[103,53527,53528],{"class":105,"line":1209},[103,53529,53530],{"class":113},"    console.dir(box)\n",[103,53532,53533,53535,53537],{"class":105,"line":1300},[103,53534,52407],{"class":113},[103,53536,51803],{"class":51290},[103,53538,51297],{"class":113},[103,53540,53541,53543,53545],{"class":105,"line":1306},[103,53542,51775],{"class":113},[103,53544,51790],{"class":51290},[103,53546,51297],{"class":113},[14,53548,53549],{},"只选123，不选456",[14,53551,53552],{},[1451,53553],{"alt":24,"src":53554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53556,53557],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53559,53560],{},[1451,53561],{"alt":24,"src":53562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53564,53565],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53567,53568],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[57,53570,53571],{"start":25},[60,53572,53573],{},"其他方法来获取标签元素",[14,53575,53576],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53578,53579],{},[1451,53580],{"alt":24,"src":53581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[74,53583,53585],{"id":53584},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53587,53588],{},"设置修改DOM元素内容有两种方式：",[1120,53590,53591,53594,53597,53600],{},[60,53592,53593],{},"元素.innerText=''",[60,53595,53596],{},"元素.innerHTML=''",[60,53598,53599],{},"不写字符串输出数字也是可以的",[60,53601,53602],{},"元素.innerHtml=1",[21988,53604,53606],{"id":53605},"_3131-innertext","3.1.3.1 innerText",[14,53608,53609],{},[1451,53610],{"alt":24,"src":53611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53613,53614],{},"思路：实现了修改盒子中的内容！",[14,53616,53617],{},"它只显示纯文本，不解析标签",[21988,53619,53621],{"id":53620},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53623,53624],{},[1451,53625],{"alt":24,"src":53626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53628,53629],{},"相比于innerText，他的强大之处在于可以解析标签",[74,53631,53633],{"id":53632},"_314-操作元素属性","3.1.4 操作元素属性",[21988,53635,53637],{"id":53636},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53639,53640],{},[1451,53641],{"alt":24,"src":53642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21988,53644,53646],{"id":53645},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53648,53649],{},[1451,53650],{"alt":24,"src":53651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53653,53654],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53656,53657],{},"div.style.backgroundColor = 'hotpink'",[14,53659,53660],{},"如果按照css的写法，-表示减，就会出错",[14,53662,53663],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53665,53666],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53668,53669],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53671,53672],{},[1451,53673],{"alt":24,"src":53674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53676,53677],{},[1451,53678],{"alt":24,"src":53679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[57,53681,53682,53685,53688,53691,53694,53697],{},[60,53683,53684],{},"className这个方式就是修改很多样式的时候来使用的！",[60,53686,53687],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[60,53689,53690],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[60,53692,53693],{},"className为属性名，如果还用class的话就导致与关键字冲突",[60,53695,53696],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[60,53698,53699,53700,53705],{},"解析标签的时候就变为了",[51601,53701],{"className":53702},[53703,53704],"nav","box",[53706,53707],"br",{},[14,53709,53710],{},"例子：",[51601,53712],{"className":53713},[53703],[51803,53715,53716],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53718,53719],{},[1451,53720],{"alt":24,"src":53721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53723,53724],{},"追加和删除类名用classList",[14,53726,53727],{},"常用于类似于开关的操作",[14,53729,53730],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53732,53733],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21988,53735,53737],{"id":53736},"_3143-牢记点","3.1.4.3 牢记点",[57,53739,53740,53743,53746,53749,53752,53755,53758,53761,53764],{},[60,53741,53742],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[60,53744,53745],{},"使用style属性操作css时不要忘记引号",[60,53747,53748],{},"使用className或者classList时也不要忘记引号",[60,53750,53751],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[60,53753,53754],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[60,53756,53757],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[60,53759,53760],{},"若： let arr=['1','2',3] arr[0]=1",[60,53762,53763],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[60,53765,53766],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[74,53768,53770],{"id":53769},"_315-操作表单元素","3.1.5 操作表单元素",[57,53772,53773],{},[60,53774,53775],{},"天生的属性",[14,53777,53778],{},[1451,53779],{"alt":24,"src":53780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53782,53783],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53785,53786],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53788,53789],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53791,53792],{},[1451,53793],{"alt":24,"src":53794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[94,53796,53798],{"className":50623,"code":53797,"language":50625,"meta":24,"style":24},"在复选框中如果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",[100,53799,53800,53805,53837,53842,53847,53852,53857,53861,53866,53871,53888,53900,53905],{"__ignoreMap":24},[103,53801,53802],{"class":105,"line":106},[103,53803,53804],{"class":113},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[103,53806,53807,53809,53812,53815,53817,53820,53822,53824,53826,53828,53830,53832,53835],{"class":105,"line":25},[103,53808,1023],{"class":113},[103,53810,53811],{"class":51290},"input",[103,53813,53814],{"class":1952}," type",[103,53816,159],{"class":113},[103,53818,53819],{"class":218},"\"checkbox\"",[103,53821,14910],{"class":1952},[103,53823,159],{"class":113},[103,53825,7642],{"class":218},[103,53827,14949],{"class":1952},[103,53829,159],{"class":113},[103,53831,7642],{"class":218},[103,53833,53834],{"class":1952}," checked",[103,53836,51297],{"class":113},[103,53838,53839],{"class":105,"line":1168},[103,53840,53841],{"class":113},"不选的话：\n",[103,53843,53844],{"class":105,"line":1183},[103,53845,53846],{"class":113},"const input = document.querySelector('input')\n",[103,53848,53849],{"class":105,"line":1189},[103,53850,53851],{"class":113},"input.checked=false\n",[103,53853,53854],{"class":105,"line":1203},[103,53855,53856],{"class":113},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[103,53858,53859],{"class":105,"line":1209},[103,53860,2389],{"emptyLinePlaceholder":30},[103,53862,53863],{"class":105,"line":1300},[103,53864,53865],{"class":113},"禁用按钮：\n",[103,53867,53868],{"class":105,"line":1306},[103,53869,53870],{"class":113},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[103,53872,53873,53875,53878,53881,53884,53886],{"class":105,"line":1318},[103,53874,1023],{"class":113},[103,53876,53877],{"class":51290},"button",[103,53879,53880],{"class":1952}," disabled",[103,53882,53883],{"class":113},">点击\u003C\u002F",[103,53885,53877],{"class":51290},[103,53887,51297],{"class":113},[103,53889,53890,53892,53894,53896,53898],{"class":105,"line":1601},[103,53891,1023],{"class":113},[103,53893,53877],{"class":51290},[103,53895,53883],{"class":113},[103,53897,53877],{"class":51290},[103,53899,51297],{"class":113},[103,53901,53902],{"class":105,"line":1606},[103,53903,53904],{"class":113},"const bt = document.querySelector('button')\n",[103,53906,53907],{"class":105,"line":1612},[103,53908,53909],{"class":113},"bt.disabled = false\n",[57,53911,53912],{"start":25},[60,53913,53914],{},"自定义属性",[14,53916,53917],{},[1451,53918],{"alt":24,"src":53919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[94,53921,53923],{"className":53057,"code":53922,"language":53059,"meta":24,"style":24},"\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",[100,53924,53925,53933,53961,53980,53999,54018,54037,54045,54050,54055,54060,54065,54073],{"__ignoreMap":24},[103,53926,53927,53929,53931],{"class":105,"line":106},[103,53928,1023],{"class":113},[103,53930,51790],{"class":51290},[103,53932,51297],{"class":113},[103,53934,53935,53937,53939,53942,53944,53946,53949,53951,53954,53957,53959],{"class":105,"line":25},[103,53936,52134],{"class":113},[103,53938,51601],{"class":51290},[103,53940,53941],{"class":1952}," data-id",[103,53943,159],{"class":113},[103,53945,3667],{"class":218},[103,53947,53948],{"class":1952}," data-spm",[103,53950,159],{"class":113},[103,53952,53953],{"class":218},"\"我不知道\"",[103,53955,53956],{"class":113},">1\u003C\u002F",[103,53958,51601],{"class":51290},[103,53960,51297],{"class":113},[103,53962,53963,53965,53967,53969,53971,53973,53976,53978],{"class":105,"line":1168},[103,53964,52134],{"class":113},[103,53966,51601],{"class":51290},[103,53968,53941],{"class":1952},[103,53970,159],{"class":113},[103,53972,3690],{"class":218},[103,53974,53975],{"class":113},">2\u003C\u002F",[103,53977,51601],{"class":51290},[103,53979,51297],{"class":113},[103,53981,53982,53984,53986,53988,53990,53992,53995,53997],{"class":105,"line":1183},[103,53983,52134],{"class":113},[103,53985,51601],{"class":51290},[103,53987,53941],{"class":1952},[103,53989,159],{"class":113},[103,53991,3703],{"class":218},[103,53993,53994],{"class":113},">3\u003C\u002F",[103,53996,51601],{"class":51290},[103,53998,51297],{"class":113},[103,54000,54001,54003,54005,54007,54009,54011,54014,54016],{"class":105,"line":1189},[103,54002,52134],{"class":113},[103,54004,51601],{"class":51290},[103,54006,53941],{"class":1952},[103,54008,159],{"class":113},[103,54010,3716],{"class":218},[103,54012,54013],{"class":113},">4\u003C\u002F",[103,54015,51601],{"class":51290},[103,54017,51297],{"class":113},[103,54019,54020,54022,54024,54026,54028,54030,54033,54035],{"class":105,"line":1203},[103,54021,52134],{"class":113},[103,54023,51601],{"class":51290},[103,54025,53941],{"class":1952},[103,54027,159],{"class":113},[103,54029,3737],{"class":218},[103,54031,54032],{"class":113},">5\u003C\u002F",[103,54034,51601],{"class":51290},[103,54036,51297],{"class":113},[103,54038,54039,54041,54043],{"class":105,"line":1209},[103,54040,52134],{"class":113},[103,54042,51803],{"class":51290},[103,54044,51297],{"class":113},[103,54046,54047],{"class":105,"line":1300},[103,54048,54049],{"class":113},"    const one = document.querySelector('div')\n",[103,54051,54052],{"class":105,"line":1306},[103,54053,54054],{"class":113},"    console.log(one.dataset)\n",[103,54056,54057],{"class":105,"line":1318},[103,54058,54059],{"class":113},"    console.log(one.dataset.id)\n",[103,54061,54062],{"class":105,"line":1601},[103,54063,54064],{"class":113},"    console.log(one.dataset.spm)\n",[103,54066,54067,54069,54071],{"class":105,"line":1606},[103,54068,52407],{"class":113},[103,54070,51803],{"class":51290},[103,54072,51297],{"class":113},[103,54074,54075,54077,54079],{"class":105,"line":1612},[103,54076,51775],{"class":113},[103,54078,51790],{"class":51290},[103,54080,51297],{"class":113},[14,54082,54083],{},[1451,54084],{"alt":24,"src":54085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54087,54088],{},"document.querySelector选择的是第一个对象（元素）",[74,54090,54092],{"id":54091},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54094,54095],{},[1451,54096],{"alt":24,"src":54097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54099,54100],{},[1451,54101],{"alt":24,"src":54102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54104,54105],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51803,54107,54108],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54110,54111],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51803,54113,54114],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[14,54116,54117],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54119,54120],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54122,54123],{},"单位为毫秒！！！",[14,54125,54126],{},"可以搭配匿名函数来用！！！",[14,54128,54129],{},"setInterval(function () {",[14,54131,54132],{},"alert('两秒执行一次')",[14,54134,54135],{},"}, 2000)",[14,54137,54138],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54140,54141],{},"function fn() {",[14,54143,54144],{},"document.write(1)",[14,54146,1059],{},[14,54148,54149],{},"setInterval(fn, 1000)",[14,54151,54152],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54154,54155],{},"setInterval('fn()', 1000)",[14,54157,54158],{},[1451,54159],{"alt":24,"src":54160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21988,54162,54164],{"id":54163},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[94,54166,54168],{"className":50623,"code":54167,"language":50625,"meta":24,"style":24},"\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",[100,54169,54170,54180,54194,54198,54206,54220,54240,54252,54260,54264,54272,54309,54314,54319,54324,54332,54340,54362,54370,54375,54397,54402,54407,54418,54423,54443,54451,54466,54481,54492,54497,54507,54517,54521,54530,54534,54542,54550,54554],{"__ignoreMap":24},[103,54171,54172,54174,54176,54178],{"class":105,"line":106},[103,54173,51287],{"class":113},[103,54175,51291],{"class":51290},[103,54177,51294],{"class":1952},[103,54179,51297],{"class":113},[103,54181,54182,54184,54186,54188,54190,54192],{"class":105,"line":25},[103,54183,1023],{"class":113},[103,54185,50625],{"class":51290},[103,54187,51306],{"class":1952},[103,54189,159],{"class":113},[103,54191,51311],{"class":218},[103,54193,51297],{"class":113},[103,54195,54196],{"class":105,"line":1168},[103,54197,2389],{"emptyLinePlaceholder":30},[103,54199,54200,54202,54204],{"class":105,"line":1183},[103,54201,1023],{"class":113},[103,54203,51324],{"class":51290},[103,54205,51297],{"class":113},[103,54207,54208,54210,54212,54214,54216,54218],{"class":105,"line":1189},[103,54209,52134],{"class":113},[103,54211,51334],{"class":51290},[103,54213,51337],{"class":1952},[103,54215,159],{"class":113},[103,54217,51342],{"class":218},[103,54219,51297],{"class":113},[103,54221,54222,54224,54226,54228,54230,54232,54234,54236,54238],{"class":105,"line":1203},[103,54223,52134],{"class":113},[103,54225,51334],{"class":51290},[103,54227,14910],{"class":1952},[103,54229,159],{"class":113},[103,54231,51381],{"class":218},[103,54233,51361],{"class":1952},[103,54235,159],{"class":113},[103,54237,51388],{"class":218},[103,54239,51297],{"class":113},[103,54241,54242,54244,54246,54248,54250],{"class":105,"line":1209},[103,54243,52134],{"class":113},[103,54245,51397],{"class":51290},[103,54247,51400],{"class":113},[103,54249,51397],{"class":51290},[103,54251,51297],{"class":113},[103,54253,54254,54256,54258],{"class":105,"line":1300},[103,54255,51775],{"class":113},[103,54257,51324],{"class":51290},[103,54259,51297],{"class":113},[103,54261,54262],{"class":105,"line":1306},[103,54263,2389],{"emptyLinePlaceholder":30},[103,54265,54266,54268,54270],{"class":105,"line":1318},[103,54267,1023],{"class":113},[103,54269,51790],{"class":51290},[103,54271,51297],{"class":113},[103,54273,54274,54276,54279,54281,54283,54285,54287,54289,54291,54294,54296,54299,54302,54304,54307],{"class":105,"line":1601},[103,54275,52134],{"class":113},[103,54277,54278],{"class":51290},"textarea",[103,54280,14910],{"class":1952},[103,54282,159],{"class":113},[103,54284,7642],{"class":218},[103,54286,14949],{"class":1952},[103,54288,159],{"class":113},[103,54290,7642],{"class":218},[103,54292,54293],{"class":1952}," cols",[103,54295,159],{"class":113},[103,54297,54298],{"class":218},"\"30\"",[103,54300,54301],{"class":1952}," rows",[103,54303,159],{"class":113},[103,54305,54306],{"class":218},"\"10\"",[103,54308,51297],{"class":113},[103,54310,54311],{"class":105,"line":1606},[103,54312,54313],{"class":113},"        用户注册协议\n",[103,54315,54316],{"class":105,"line":1612},[103,54317,54318],{"class":113},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[103,54320,54321],{"class":105,"line":1617},[103,54322,54323],{"class":113},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[103,54325,54326,54328,54330],{"class":105,"line":1631},[103,54327,51766],{"class":113},[103,54329,54278],{"class":51290},[103,54331,51297],{"class":113},[103,54333,54334,54336,54338],{"class":105,"line":1636},[103,54335,52134],{"class":113},[103,54337,53706],{"class":51290},[103,54339,51297],{"class":113},[103,54341,54342,54344,54346,54348,54350,54353,54355,54358,54360],{"class":105,"line":1642},[103,54343,52134],{"class":113},[103,54345,53877],{"class":51290},[103,54347,53476],{"class":1952},[103,54349,159],{"class":113},[103,54351,54352],{"class":218},"\"btn\"",[103,54354,53880],{"class":1952},[103,54356,54357],{"class":113},">我已经阅读用户协议(5)\u003C\u002F",[103,54359,53877],{"class":51290},[103,54361,51297],{"class":113},[103,54363,54364,54366,54368],{"class":105,"line":1663},[103,54365,52134],{"class":113},[103,54367,51803],{"class":51290},[103,54369,51297],{"class":113},[103,54371,54372],{"class":105,"line":1668},[103,54373,54374],{"class":172},"    \u002F\u002F 1. 获取元素\n",[103,54376,54377,54379,54382,54384,54387,54390,54392,54395],{"class":105,"line":1682},[103,54378,11211],{"class":109},[103,54380,54381],{"class":162}," btn",[103,54383,13554],{"class":109},[103,54385,54386],{"class":113}," document.",[103,54388,54389],{"class":1952},"querySelector",[103,54391,114],{"class":113},[103,54393,54394],{"class":218},"'.btn'",[103,54396,120],{"class":113},[103,54398,54399],{"class":105,"line":1687},[103,54400,54401],{"class":172},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[103,54403,54404],{"class":105,"line":1716},[103,54405,54406],{"class":172},"    \u002F\u002F 2. 倒计时\n",[103,54408,54409,54411,54413,54415],{"class":105,"line":1721},[103,54410,52209],{"class":109},[103,54412,9428],{"class":113},[103,54414,159],{"class":109},[103,54416,54417],{"class":162}," 5\n",[103,54419,54420],{"class":105,"line":1738},[103,54421,54422],{"class":172},"    \u002F\u002F 2.1 开启定时器\n",[103,54424,54425,54427,54430,54432,54435,54437,54440],{"class":105,"line":1743},[103,54426,52209],{"class":109},[103,54428,54429],{"class":113}," n ",[103,54431,159],{"class":109},[103,54433,54434],{"class":1952}," setInterval",[103,54436,114],{"class":113},[103,54438,54439],{"class":109},"function",[103,54441,54442],{"class":113}," () {\n",[103,54444,54445,54448],{"class":105,"line":1748},[103,54446,54447],{"class":113},"      i",[103,54449,54450],{"class":109},"--\n",[103,54452,54453,54456,54458,54461,54463],{"class":105,"line":1753},[103,54454,54455],{"class":113},"      btn.innerHTML ",[103,54457,159],{"class":109},[103,54459,54460],{"class":218}," `我已经阅读用户协议(${",[103,54462,554],{"class":113},[103,54464,54465],{"class":218},"})`\n",[103,54467,54468,54471,54474,54477,54479],{"class":105,"line":1767},[103,54469,54470],{"class":109},"      if",[103,54472,54473],{"class":113}," (i ",[103,54475,54476],{"class":109},"===",[103,54478,4082],{"class":162},[103,54480,12432],{"class":113},[103,54482,54483,54486,54489],{"class":105,"line":1772},[103,54484,54485],{"class":1952},"        clearInterval",[103,54487,54488],{"class":113},"(n)  ",[103,54490,54491],{"class":172},"\u002F\u002F 关闭定时器\n",[103,54493,54494],{"class":105,"line":2566},[103,54495,54496],{"class":172},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[103,54498,54499,54502,54504],{"class":105,"line":2580},[103,54500,54501],{"class":113},"        btn.disabled ",[103,54503,159],{"class":109},[103,54505,54506],{"class":162}," false\n",[103,54508,54509,54512,54514],{"class":105,"line":2588},[103,54510,54511],{"class":113},"        btn.innerHTML ",[103,54513,159],{"class":109},[103,54515,54516],{"class":218}," '同意'\n",[103,54518,54519],{"class":105,"line":2593},[103,54520,52388],{"class":113},[103,54522,54523,54526,54528],{"class":105,"line":2599},[103,54524,54525],{"class":113},"    }, ",[103,54527,6400],{"class":162},[103,54529,120],{"class":113},[103,54531,54532],{"class":105,"line":2605},[103,54533,2389],{"emptyLinePlaceholder":30},[103,54535,54536,54538,54540],{"class":105,"line":2610},[103,54537,52407],{"class":113},[103,54539,51803],{"class":51290},[103,54541,51297],{"class":113},[103,54543,54544,54546,54548],{"class":105,"line":7938},[103,54545,51775],{"class":113},[103,54547,51790],{"class":51290},[103,54549,51297],{"class":113},[103,54551,54552],{"class":105,"line":7962},[103,54553,2389],{"emptyLinePlaceholder":30},[103,54555,54556,54558,54560],{"class":105,"line":7967},[103,54557,51775],{"class":113},[103,54559,50625],{"class":51290},[103,54561,51297],{"class":113},[14,54563,54564],{},"不要一直想着用死循环,避免死循环",[14,54566,54567,54570],{},[100,54568,54569],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21988,54572,54574],{"id":54573},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[57,54576,54577],{},[60,54578,54579],{},"法1",[94,54581,54583],{"className":50623,"code":54582,"language":50625,"meta":24,"style":24},"\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",[100,54584,54585,54595,54609,54613,54621,54635,54655,54667,54675,54681,54692,54703,54707,54711,54718,54730,54734,54738,54745,54757,54771,54784,54798,54802,54806,54813,54824,54835,54846,54858,54870,54882,54886,54890,54898,54908,54921,54933,54946,54950,54954,54961,54971,54983,54995,55006,55017,55027,55039,55051,55055,55059,55068,55080,55092,55120,55133,55137,55141,55148,55159,55163,55171,55179,55183,55191,55205,55220,55244,55252,55267,55280,55288,55309,55321,55333,55345,55357,55369,55381,55393,55402,55410,55418,55426,55438,55461,55480,55499,55518,55537,55556,55575,55595,55599,55619,55638,55658,55679,55690,55707,55717,55727,55737,55742,55747,55752,55757,55782,55795,55799,55822,55826,55834,55842,55850,55854],{"__ignoreMap":24},[103,54586,54587,54589,54591,54593],{"class":105,"line":106},[103,54588,51287],{"class":113},[103,54590,51291],{"class":51290},[103,54592,51294],{"class":1952},[103,54594,51297],{"class":113},[103,54596,54597,54599,54601,54603,54605,54607],{"class":105,"line":25},[103,54598,1023],{"class":113},[103,54600,50625],{"class":51290},[103,54602,51306],{"class":1952},[103,54604,159],{"class":113},[103,54606,51311],{"class":218},[103,54608,51297],{"class":113},[103,54610,54611],{"class":105,"line":1168},[103,54612,2389],{"emptyLinePlaceholder":30},[103,54614,54615,54617,54619],{"class":105,"line":1183},[103,54616,1023],{"class":113},[103,54618,51324],{"class":51290},[103,54620,51297],{"class":113},[103,54622,54623,54625,54627,54629,54631,54633],{"class":105,"line":1189},[103,54624,52134],{"class":113},[103,54626,51334],{"class":51290},[103,54628,51337],{"class":1952},[103,54630,159],{"class":113},[103,54632,51342],{"class":218},[103,54634,51297],{"class":113},[103,54636,54637,54639,54641,54643,54645,54647,54649,54651,54653],{"class":105,"line":1203},[103,54638,52134],{"class":113},[103,54640,51334],{"class":51290},[103,54642,14910],{"class":1952},[103,54644,159],{"class":113},[103,54646,51381],{"class":218},[103,54648,51361],{"class":1952},[103,54650,159],{"class":113},[103,54652,51388],{"class":218},[103,54654,51297],{"class":113},[103,54656,54657,54659,54661,54663,54665],{"class":105,"line":1209},[103,54658,52134],{"class":113},[103,54660,51397],{"class":51290},[103,54662,51400],{"class":113},[103,54664,51397],{"class":51290},[103,54666,51297],{"class":113},[103,54668,54669,54671,54673],{"class":105,"line":1300},[103,54670,52134],{"class":113},[103,54672,5116],{"class":51290},[103,54674,51297],{"class":113},[103,54676,54677,54679],{"class":105,"line":1306},[103,54678,6393],{"class":51290},[103,54680,15562],{"class":113},[103,54682,54683,54686,54688,54690],{"class":105,"line":1318},[103,54684,54685],{"class":162},"      padding",[103,54687,51427],{"class":113},[103,54689,305],{"class":162},[103,54691,1279],{"class":113},[103,54693,54694,54697,54699,54701],{"class":105,"line":1601},[103,54695,54696],{"class":162},"      margin",[103,54698,51427],{"class":113},[103,54700,305],{"class":162},[103,54702,1279],{"class":113},[103,54704,54705],{"class":105,"line":1606},[103,54706,2176],{"class":113},[103,54708,54709],{"class":105,"line":1612},[103,54710,2389],{"emptyLinePlaceholder":30},[103,54712,54713,54716],{"class":105,"line":1617},[103,54714,54715],{"class":51290},"    li",[103,54717,15562],{"class":113},[103,54719,54720,54723,54725,54728],{"class":105,"line":1631},[103,54721,54722],{"class":162},"      list-style",[103,54724,51427],{"class":113},[103,54726,54727],{"class":162},"none",[103,54729,1279],{"class":113},[103,54731,54732],{"class":105,"line":1636},[103,54733,2176],{"class":113},[103,54735,54736],{"class":105,"line":1642},[103,54737,2389],{"emptyLinePlaceholder":30},[103,54739,54740,54743],{"class":105,"line":1663},[103,54741,54742],{"class":1952},"    .box",[103,54744,15562],{"class":113},[103,54746,54747,54750,54752,54755],{"class":105,"line":1668},[103,54748,54749],{"class":162},"      position",[103,54751,51427],{"class":113},[103,54753,54754],{"class":162},"relative",[103,54756,1279],{"class":113},[103,54758,54759,54762,54764,54767,54769],{"class":105,"line":1682},[103,54760,54761],{"class":162},"      width",[103,54763,51427],{"class":113},[103,54765,54766],{"class":162},"976",[103,54768,51482],{"class":109},[103,54770,1279],{"class":113},[103,54772,54773,54776,54778,54780,54782],{"class":105,"line":1687},[103,54774,54775],{"class":162},"      height",[103,54777,51427],{"class":113},[103,54779,1528],{"class":162},[103,54781,51482],{"class":109},[103,54783,1279],{"class":113},[103,54785,54786,54788,54790,54792,54794,54796],{"class":105,"line":1716},[103,54787,54696],{"class":162},[103,54789,51427],{"class":113},[103,54791,424],{"class":162},[103,54793,51482],{"class":109},[103,54795,51546],{"class":162},[103,54797,1279],{"class":113},[103,54799,54800],{"class":105,"line":1721},[103,54801,2176],{"class":113},[103,54803,54804],{"class":105,"line":1738},[103,54805,2389],{"emptyLinePlaceholder":30},[103,54807,54808,54811],{"class":105,"line":1743},[103,54809,54810],{"class":1952},"    .slider-footer",[103,54812,15562],{"class":113},[103,54814,54815,54817,54819,54822],{"class":105,"line":1748},[103,54816,54749],{"class":162},[103,54818,51427],{"class":113},[103,54820,54821],{"class":162},"absolute",[103,54823,1279],{"class":113},[103,54825,54826,54829,54831,54833],{"class":105,"line":1753},[103,54827,54828],{"class":162},"      left",[103,54830,51427],{"class":113},[103,54832,305],{"class":162},[103,54834,1279],{"class":113},[103,54836,54837,54840,54842,54844],{"class":105,"line":1767},[103,54838,54839],{"class":162},"      bottom",[103,54841,51427],{"class":113},[103,54843,305],{"class":162},[103,54845,1279],{"class":113},[103,54847,54848,54850,54852,54854,54856],{"class":105,"line":1772},[103,54849,54761],{"class":162},[103,54851,51427],{"class":113},[103,54853,424],{"class":162},[103,54855,441],{"class":109},[103,54857,1279],{"class":113},[103,54859,54860,54862,54864,54866,54868],{"class":105,"line":2566},[103,54861,54775],{"class":162},[103,54863,51427],{"class":113},[103,54865,688],{"class":162},[103,54867,441],{"class":109},[103,54869,1279],{"class":113},[103,54871,54872,54875,54877,54880],{"class":105,"line":2580},[103,54873,54874],{"class":162},"      background-color",[103,54876,51427],{"class":113},[103,54878,54879],{"class":162},"skyblue",[103,54881,1279],{"class":113},[103,54883,54884],{"class":105,"line":2588},[103,54885,2176],{"class":113},[103,54887,54888],{"class":105,"line":2593},[103,54889,2389],{"emptyLinePlaceholder":30},[103,54891,54892,54894,54896],{"class":105,"line":2599},[103,54893,54810],{"class":1952},[103,54895,6815],{"class":51290},[103,54897,15562],{"class":113},[103,54899,54900,54902,54904,54906],{"class":105,"line":2605},[103,54901,54749],{"class":162},[103,54903,51427],{"class":113},[103,54905,54821],{"class":162},[103,54907,1279],{"class":113},[103,54909,54910,54913,54915,54917,54919],{"class":105,"line":2610},[103,54911,54912],{"class":162},"      font-size",[103,54914,51427],{"class":113},[103,54916,1014],{"class":162},[103,54918,51482],{"class":109},[103,54920,1279],{"class":113},[103,54922,54923,54925,54927,54929,54931],{"class":105,"line":7938},[103,54924,54828],{"class":162},[103,54926,51427],{"class":113},[103,54928,813],{"class":162},[103,54930,51482],{"class":109},[103,54932,1279],{"class":113},[103,54934,54935,54938,54940,54942,54944],{"class":105,"line":7962},[103,54936,54937],{"class":162},"      top",[103,54939,51427],{"class":113},[103,54941,432],{"class":162},[103,54943,51482],{"class":109},[103,54945,1279],{"class":113},[103,54947,54948],{"class":105,"line":7967},[103,54949,2176],{"class":113},[103,54951,54952],{"class":105,"line":7973},[103,54953,2389],{"emptyLinePlaceholder":30},[103,54955,54956,54959],{"class":105,"line":8000},[103,54957,54958],{"class":51290},"    ul",[103,54960,15562],{"class":113},[103,54962,54963,54965,54967,54969],{"class":105,"line":8005},[103,54964,54749],{"class":162},[103,54966,51427],{"class":113},[103,54968,54821],{"class":162},[103,54970,1279],{"class":113},[103,54972,54973,54975,54977,54979,54981],{"class":105,"line":8011},[103,54974,54937],{"class":162},[103,54976,51427],{"class":113},[103,54978,894],{"class":162},[103,54980,51482],{"class":109},[103,54982,1279],{"class":113},[103,54984,54985,54987,54989,54991,54993],{"class":105,"line":8023},[103,54986,54828],{"class":162},[103,54988,51427],{"class":113},[103,54990,813],{"class":162},[103,54992,51482],{"class":109},[103,54994,1279],{"class":113},[103,54996,54997,55000,55002,55004],{"class":105,"line":8035},[103,54998,54999],{"class":162},"      display",[103,55001,51427],{"class":113},[103,55003,51467],{"class":162},[103,55005,1279],{"class":113},[103,55007,55008,55011,55013,55015],{"class":105,"line":8047},[103,55009,55010],{"class":162},"      justify-content",[103,55012,51427],{"class":113},[103,55014,51658],{"class":162},[103,55016,1279],{"class":113},[103,55018,55019,55021,55023,55025],{"class":105,"line":9706},[103,55020,54749],{"class":162},[103,55022,51427],{"class":113},[103,55024,54821],{"class":162},[103,55026,1279],{"class":113},[103,55028,55029,55031,55033,55035,55037],{"class":105,"line":9731},[103,55030,54761],{"class":162},[103,55032,51427],{"class":113},[103,55034,3981],{"class":162},[103,55036,51482],{"class":109},[103,55038,1279],{"class":113},[103,55040,55041,55043,55045,55047,55049],{"class":105,"line":9754},[103,55042,54775],{"class":162},[103,55044,51427],{"class":113},[103,55046,813],{"class":162},[103,55048,51482],{"class":109},[103,55050,1279],{"class":113},[103,55052,55053],{"class":105,"line":9778},[103,55054,2176],{"class":113},[103,55056,55057],{"class":105,"line":9783},[103,55058,2389],{"emptyLinePlaceholder":30},[103,55060,55061,55063,55066],{"class":105,"line":9788},[103,55062,54958],{"class":51290},[103,55064,55065],{"class":51290}," li",[103,55067,15562],{"class":113},[103,55069,55070,55072,55074,55076,55078],{"class":105,"line":9793},[103,55071,54761],{"class":162},[103,55073,51427],{"class":113},[103,55075,813],{"class":162},[103,55077,51482],{"class":109},[103,55079,1279],{"class":113},[103,55081,55082,55084,55086,55088,55090],{"class":105,"line":9802},[103,55083,54775],{"class":162},[103,55085,51427],{"class":113},[103,55087,813],{"class":162},[103,55089,51482],{"class":109},[103,55091,1279],{"class":113},[103,55093,55094,55096,55098,55101,55103,55105,55107,55109,55111,55113,55115,55118],{"class":105,"line":9807},[103,55095,54874],{"class":162},[103,55097,51427],{"class":113},[103,55099,55100],{"class":162},"rgba",[103,55102,114],{"class":113},[103,55104,305],{"class":162},[103,55106,12425],{"class":113},[103,55108,305],{"class":162},[103,55110,12425],{"class":113},[103,55112,305],{"class":162},[103,55114,12425],{"class":113},[103,55116,55117],{"class":162},".4",[103,55119,2708],{"class":113},[103,55121,55122,55125,55127,55129,55131],{"class":105,"line":9813},[103,55123,55124],{"class":162},"      border-radius",[103,55126,51427],{"class":113},[103,55128,559],{"class":162},[103,55130,51482],{"class":109},[103,55132,1279],{"class":113},[103,55134,55135],{"class":105,"line":9834},[103,55136,2176],{"class":113},[103,55138,55139],{"class":105,"line":9840},[103,55140,2389],{"emptyLinePlaceholder":30},[103,55142,55143,55146],{"class":105,"line":9854},[103,55144,55145],{"class":1952},"    .activate",[103,55147,15562],{"class":113},[103,55149,55150,55152,55154,55157],{"class":105,"line":9860},[103,55151,54874],{"class":162},[103,55153,51427],{"class":113},[103,55155,55156],{"class":162},"#f7f7f7",[103,55158,1279],{"class":113},[103,55160,55161],{"class":105,"line":9887},[103,55162,2176],{"class":113},[103,55164,55165,55167,55169],{"class":105,"line":9896},[103,55166,52407],{"class":113},[103,55168,5116],{"class":51290},[103,55170,51297],{"class":113},[103,55172,55173,55175,55177],{"class":105,"line":9902},[103,55174,51775],{"class":113},[103,55176,51324],{"class":51290},[103,55178,51297],{"class":113},[103,55180,55181],{"class":105,"line":9910},[103,55182,2389],{"emptyLinePlaceholder":30},[103,55184,55185,55187,55189],{"class":105,"line":9915},[103,55186,1023],{"class":113},[103,55188,51790],{"class":51290},[103,55190,51297],{"class":113},[103,55192,55193,55195,55197,55199,55201,55203],{"class":105,"line":16594},[103,55194,52134],{"class":113},[103,55196,51601],{"class":51290},[103,55198,53476],{"class":1952},[103,55200,159],{"class":113},[103,55202,53481],{"class":218},[103,55204,51297],{"class":113},[103,55206,55207,55209,55211,55213,55215,55218],{"class":105,"line":16600},[103,55208,51331],{"class":113},[103,55210,51601],{"class":51290},[103,55212,53476],{"class":1952},[103,55214,159],{"class":113},[103,55216,55217],{"class":218},"\"slider-wrapper\"",[103,55219,51297],{"class":113},[103,55221,55222,55225,55227,55230,55232,55235,55238,55240,55242],{"class":105,"line":16623},[103,55223,55224],{"class":113},"      \u003C",[103,55226,1451],{"class":51290},[103,55228,55229],{"class":1952}," src",[103,55231,159],{"class":113},[103,55233,55234],{"class":218},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[103,55236,55237],{"class":1952}," alt",[103,55239,159],{"class":113},[103,55241,7642],{"class":218},[103,55243,51297],{"class":113},[103,55245,55246,55248,55250],{"class":105,"line":16629},[103,55247,51766],{"class":113},[103,55249,51601],{"class":51290},[103,55251,51297],{"class":113},[103,55253,55254,55256,55258,55260,55262,55265],{"class":105,"line":16652},[103,55255,51331],{"class":113},[103,55257,51601],{"class":51290},[103,55259,53476],{"class":1952},[103,55261,159],{"class":113},[103,55263,55264],{"class":218},"\"slider-footer\"",[103,55266,51297],{"class":113},[103,55268,55269,55271,55273,55276,55278],{"class":105,"line":16666},[103,55270,55224],{"class":113},[103,55272,14],{"class":51290},[103,55274,55275],{"class":113},">对人类来说会不会太超前了?\u003C\u002F",[103,55277,14],{"class":51290},[103,55279,51297],{"class":113},[103,55281,55282,55284,55286],{"class":105,"line":16686},[103,55283,55224],{"class":113},[103,55285,1120],{"class":51290},[103,55287,51297],{"class":113},[103,55289,55290,55293,55295,55297,55299,55302,55305,55307],{"class":105,"line":16692},[103,55291,55292],{"class":113},"        \u003C",[103,55294,60],{"class":51290},[103,55296,53476],{"class":1952},[103,55298,159],{"class":113},[103,55300,55301],{"class":218},"\"activate\"",[103,55303,55304],{"class":113},">\u003C\u002F",[103,55306,60],{"class":51290},[103,55308,51297],{"class":113},[103,55310,55311,55313,55315,55317,55319],{"class":105,"line":16703},[103,55312,55292],{"class":113},[103,55314,60],{"class":51290},[103,55316,55304],{"class":113},[103,55318,60],{"class":51290},[103,55320,51297],{"class":113},[103,55322,55323,55325,55327,55329,55331],{"class":105,"line":16726},[103,55324,55292],{"class":113},[103,55326,60],{"class":51290},[103,55328,55304],{"class":113},[103,55330,60],{"class":51290},[103,55332,51297],{"class":113},[103,55334,55335,55337,55339,55341,55343],{"class":105,"line":16748},[103,55336,55292],{"class":113},[103,55338,60],{"class":51290},[103,55340,55304],{"class":113},[103,55342,60],{"class":51290},[103,55344,51297],{"class":113},[103,55346,55347,55349,55351,55353,55355],{"class":105,"line":16753},[103,55348,55292],{"class":113},[103,55350,60],{"class":51290},[103,55352,55304],{"class":113},[103,55354,60],{"class":51290},[103,55356,51297],{"class":113},[103,55358,55359,55361,55363,55365,55367],{"class":105,"line":16759},[103,55360,55292],{"class":113},[103,55362,60],{"class":51290},[103,55364,55304],{"class":113},[103,55366,60],{"class":51290},[103,55368,51297],{"class":113},[103,55370,55371,55373,55375,55377,55379],{"class":105,"line":16773},[103,55372,55292],{"class":113},[103,55374,60],{"class":51290},[103,55376,55304],{"class":113},[103,55378,60],{"class":51290},[103,55380,51297],{"class":113},[103,55382,55383,55385,55387,55389,55391],{"class":105,"line":16786},[103,55384,55292],{"class":113},[103,55386,60],{"class":51290},[103,55388,55304],{"class":113},[103,55390,60],{"class":51290},[103,55392,51297],{"class":113},[103,55394,55395,55398,55400],{"class":105,"line":16791},[103,55396,55397],{"class":113},"      \u003C\u002F",[103,55399,1120],{"class":51290},[103,55401,51297],{"class":113},[103,55403,55404,55406,55408],{"class":105,"line":16805},[103,55405,51766],{"class":113},[103,55407,51601],{"class":51290},[103,55409,51297],{"class":113},[103,55411,55412,55414,55416],{"class":105,"line":16810},[103,55413,52407],{"class":113},[103,55415,51601],{"class":51290},[103,55417,51297],{"class":113},[103,55419,55420,55422,55424],{"class":105,"line":16816},[103,55421,52134],{"class":113},[103,55423,51803],{"class":51290},[103,55425,51297],{"class":113},[103,55427,55428,55430,55433,55435],{"class":105,"line":16821},[103,55429,11211],{"class":109},[103,55431,55432],{"class":162}," arrImage",[103,55434,13554],{"class":109},[103,55436,55437],{"class":113}," [\n",[103,55439,55440,55443,55446,55449,55452,55455,55458],{"class":105,"line":16835},[103,55441,55442],{"class":113},"      { url: ",[103,55444,55445],{"class":218},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[103,55447,55448],{"class":113},", title: ",[103,55450,55451],{"class":218},"'对人类来说会不会太超前了?'",[103,55453,55454],{"class":113},", color: ",[103,55456,55457],{"class":218},"'rgba(100,67,68)'",[103,55459,55460],{"class":113}," },\n",[103,55462,55463,55465,55468,55470,55473,55475,55478],{"class":105,"line":16840},[103,55464,55442],{"class":113},[103,55466,55467],{"class":218},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[103,55469,55448],{"class":113},[103,55471,55472],{"class":218},"'开启剑与雪的黑暗传说!'",[103,55474,55454],{"class":113},[103,55476,55477],{"class":218},"'rgba(43,35,26)'",[103,55479,55460],{"class":113},[103,55481,55482,55484,55487,55489,55492,55494,55497],{"class":105,"line":16845},[103,55483,55442],{"class":113},[103,55485,55486],{"class":218},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[103,55488,55448],{"class":113},[103,55490,55491],{"class":218},"'真正的jo厨出现了!'",[103,55493,55454],{"class":113},[103,55495,55496],{"class":218},"'rgba(36,31,33)'",[103,55498,55460],{"class":113},[103,55500,55501,55503,55506,55508,55511,55513,55516],{"class":105,"line":16859},[103,55502,55442],{"class":113},[103,55504,55505],{"class":218},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[103,55507,55448],{"class":113},[103,55509,55510],{"class":218},"'李玉刚:让世界通过b站看到东方大国文化'",[103,55512,55454],{"class":113},[103,55514,55515],{"class":218},"'rgba(139,98,66)'",[103,55517,55460],{"class":113},[103,55519,55520,55522,55525,55527,55530,55532,55535],{"class":105,"line":16871},[103,55521,55442],{"class":113},[103,55523,55524],{"class":218},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[103,55526,55448],{"class":113},[103,55528,55529],{"class":218},"'快来分享你的寒假日常吧'",[103,55531,55454],{"class":113},[103,55533,55534],{"class":218},"'rgba(67,90,92)'",[103,55536,55460],{"class":113},[103,55538,55539,55541,55544,55546,55549,55551,55554],{"class":105,"line":16876},[103,55540,55442],{"class":113},[103,55542,55543],{"class":218},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[103,55545,55448],{"class":113},[103,55547,55548],{"class":218},"'哔哩哔哩小年YEAR'",[103,55550,55454],{"class":113},[103,55552,55553],{"class":218},"'rgba(166,131,143)'",[103,55555,55460],{"class":113},[103,55557,55558,55560,55563,55565,55568,55570,55573],{"class":105,"line":16889},[103,55559,55442],{"class":113},[103,55561,55562],{"class":218},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[103,55564,55448],{"class":113},[103,55566,55567],{"class":218},"'一站式解决你的电脑配置问题'",[103,55569,55454],{"class":113},[103,55571,55572],{"class":218},"'rgba(53,29,25)'",[103,55574,55460],{"class":113},[103,55576,55577,55579,55582,55584,55587,55589,55592],{"class":105,"line":16894},[103,55578,55442],{"class":113},[103,55580,55581],{"class":218},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[103,55583,55448],{"class":113},[103,55585,55586],{"class":218},"'谁不想和小猫咪贴贴呢?'",[103,55588,55454],{"class":113},[103,55590,55591],{"class":218},"'rgba(99,72,114)'",[103,55593,55594],{"class":113}," }\n",[103,55596,55597],{"class":105,"line":16899},[103,55598,53099],{"class":113},[103,55600,55601,55603,55606,55608,55610,55612,55614,55617],{"class":105,"line":16904},[103,55602,11211],{"class":109},[103,55604,55605],{"class":162}," img",[103,55607,13554],{"class":109},[103,55609,54386],{"class":113},[103,55611,54389],{"class":1952},[103,55613,114],{"class":113},[103,55615,55616],{"class":218},"'.slider-wrapper img'",[103,55618,120],{"class":113},[103,55620,55621,55623,55625,55627,55629,55631,55633,55636],{"class":105,"line":16917},[103,55622,11211],{"class":109},[103,55624,6815],{"class":162},[103,55626,13554],{"class":109},[103,55628,54386],{"class":113},[103,55630,54389],{"class":1952},[103,55632,114],{"class":113},[103,55634,55635],{"class":218},"'.slider-footer p'",[103,55637,120],{"class":113},[103,55639,55640,55642,55645,55647,55649,55651,55653,55656],{"class":105,"line":16922},[103,55641,11211],{"class":109},[103,55643,55644],{"class":162}," color",[103,55646,13554],{"class":109},[103,55648,54386],{"class":113},[103,55650,54389],{"class":1952},[103,55652,114],{"class":113},[103,55654,55655],{"class":218},"'.slider-footer'",[103,55657,120],{"class":113},[103,55659,55660,55662,55665,55667,55669,55672,55674,55677],{"class":105,"line":32623},[103,55661,11211],{"class":109},[103,55663,55664],{"class":162}," lis",[103,55666,13554],{"class":109},[103,55668,54386],{"class":113},[103,55670,55671],{"class":1952},"querySelectorAll",[103,55673,114],{"class":113},[103,55675,55676],{"class":218},"'.slider-footer ul li'",[103,55678,120],{"class":113},[103,55680,55681,55683,55685,55687],{"class":105,"line":32629},[103,55682,52209],{"class":109},[103,55684,9428],{"class":113},[103,55686,159],{"class":109},[103,55688,55689],{"class":162}," 1\n",[103,55691,55692,55694,55697,55699,55701,55703,55705],{"class":105,"line":32635},[103,55693,52209],{"class":109},[103,55695,55696],{"class":113}," timer ",[103,55698,159],{"class":109},[103,55700,54434],{"class":1952},[103,55702,114],{"class":113},[103,55704,54439],{"class":109},[103,55706,54442],{"class":113},[103,55708,55709,55712,55714],{"class":105,"line":32641},[103,55710,55711],{"class":113},"      img.src ",[103,55713,159],{"class":109},[103,55715,55716],{"class":113}," arrImage[i].url\n",[103,55718,55719,55722,55724],{"class":105,"line":32647},[103,55720,55721],{"class":113},"      p.innerHTML ",[103,55723,159],{"class":109},[103,55725,55726],{"class":113}," arrImage[i].title\n",[103,55728,55729,55732,55734],{"class":105,"line":32658},[103,55730,55731],{"class":113},"      color.style.backgroundColor ",[103,55733,159],{"class":109},[103,55735,55736],{"class":113}," arrImage[i].color\n",[103,55738,55739],{"class":105,"line":32664},[103,55740,55741],{"class":172},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[103,55743,55744],{"class":105,"line":32684},[103,55745,55746],{"class":172},"      \u002F\u002F li.classList.add('activate')\n",[103,55748,55749],{"class":105,"line":32690},[103,55750,55751],{"class":172},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[103,55753,55754],{"class":105,"line":32701},[103,55755,55756],{"class":172},"      \u002F\u002F lis[i].classList.remove('activate')\n",[103,55758,55759,55762,55764,55766,55769,55772,55775,55777,55780],{"class":105,"line":32707},[103,55760,55761],{"class":113},"      document.",[103,55763,54389],{"class":1952},[103,55765,114],{"class":113},[103,55767,55768],{"class":218},"'.activate'",[103,55770,55771],{"class":113},")?.classList.",[103,55773,55774],{"class":1952},"toggle",[103,55776,114],{"class":113},[103,55778,55779],{"class":218},"'activate'",[103,55781,120],{"class":113},[103,55783,55784,55787,55789,55791,55793],{"class":105,"line":32713},[103,55785,55786],{"class":113},"      lis[i].classList.",[103,55788,5324],{"class":1952},[103,55790,114],{"class":113},[103,55792,55779],{"class":218},[103,55794,120],{"class":113},[103,55796,55797],{"class":105,"line":32719},[103,55798,2389],{"emptyLinePlaceholder":30},[103,55800,55801,55804,55806,55808,55810,55812,55814,55816,55819],{"class":105,"line":32725},[103,55802,55803],{"class":113},"      i ",[103,55805,159],{"class":109},[103,55807,54473],{"class":113},[103,55809,594],{"class":109},[103,55811,25108],{"class":162},[103,55813,13704],{"class":113},[103,55815,441],{"class":109},[103,55817,55818],{"class":113}," arrImage.",[103,55820,55821],{"class":162},"length\n",[103,55823,55824],{"class":105,"line":32731},[103,55825,2389],{"emptyLinePlaceholder":30},[103,55827,55828,55830,55832],{"class":105,"line":32737},[103,55829,54525],{"class":113},[103,55831,6400],{"class":162},[103,55833,120],{"class":113},[103,55835,55836,55838,55840],{"class":105,"line":32743},[103,55837,52407],{"class":113},[103,55839,51803],{"class":51290},[103,55841,51297],{"class":113},[103,55843,55844,55846,55848],{"class":105,"line":32763},[103,55845,51775],{"class":113},[103,55847,51790],{"class":51290},[103,55849,51297],{"class":113},[103,55851,55852],{"class":105,"line":32769},[103,55853,2389],{"emptyLinePlaceholder":30},[103,55855,55856,55858,55860],{"class":105,"line":32785},[103,55857,51775],{"class":113},[103,55859,50625],{"class":51290},[103,55861,51297],{"class":113},[14,55863,55864],{},[1451,55865],{"alt":24,"src":55866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55868,55869],{},"?.就是短路保护,确保输出正常进行",[14,55871,55872],{},"不要忘记取余%,有时候可以用",[14,55874,55875],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[57,55877,55878],{"start":25},[60,55879,55880],{},"法2",[94,55882,55884],{"className":50623,"code":55883,"language":50625,"meta":24,"style":24},"\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",[100,55885,55886,55896,55910,55914,55922,55936,55956,55968,55976,55982,55992,56002,56006,56010,56016,56026,56030,56034,56040,56050,56062,56074,56088,56092,56096,56102,56112,56122,56132,56144,56156,56166,56170,56174,56182,56192,56204,56216,56228,56232,56236,56242,56252,56264,56276,56286,56296,56306,56318,56330,56334,56338,56346,56358,56370,56396,56408,56412,56416,56422,56432,56436,56444,56452,56456,56464,56478,56492,56512,56520,56534,56546,56554,56572,56584,56596,56608,56620,56632,56644,56656,56664,56672,56680,56688,56699,56715,56731,56747,56763,56779,56795,56811,56827,56831,56836,56854,56872,56882,56887,56892,56903,56909,56924,56933,56937,56942,56951,56956,56965,56970,56975,56980,57003,57033,57037,57045,57049,57057,57065,57069],{"__ignoreMap":24},[103,55887,55888,55890,55892,55894],{"class":105,"line":106},[103,55889,51287],{"class":113},[103,55891,51291],{"class":51290},[103,55893,51294],{"class":1952},[103,55895,51297],{"class":113},[103,55897,55898,55900,55902,55904,55906,55908],{"class":105,"line":25},[103,55899,1023],{"class":113},[103,55901,50625],{"class":51290},[103,55903,51306],{"class":1952},[103,55905,159],{"class":113},[103,55907,51311],{"class":218},[103,55909,51297],{"class":113},[103,55911,55912],{"class":105,"line":1168},[103,55913,2389],{"emptyLinePlaceholder":30},[103,55915,55916,55918,55920],{"class":105,"line":1183},[103,55917,1023],{"class":113},[103,55919,51324],{"class":51290},[103,55921,51297],{"class":113},[103,55923,55924,55926,55928,55930,55932,55934],{"class":105,"line":1189},[103,55925,52134],{"class":113},[103,55927,51334],{"class":51290},[103,55929,51337],{"class":1952},[103,55931,159],{"class":113},[103,55933,51342],{"class":218},[103,55935,51297],{"class":113},[103,55937,55938,55940,55942,55944,55946,55948,55950,55952,55954],{"class":105,"line":1203},[103,55939,52134],{"class":113},[103,55941,51334],{"class":51290},[103,55943,14910],{"class":1952},[103,55945,159],{"class":113},[103,55947,51381],{"class":218},[103,55949,51361],{"class":1952},[103,55951,159],{"class":113},[103,55953,51388],{"class":218},[103,55955,51297],{"class":113},[103,55957,55958,55960,55962,55964,55966],{"class":105,"line":1209},[103,55959,52134],{"class":113},[103,55961,51397],{"class":51290},[103,55963,51400],{"class":113},[103,55965,51397],{"class":51290},[103,55967,51297],{"class":113},[103,55969,55970,55972,55974],{"class":105,"line":1300},[103,55971,52134],{"class":113},[103,55973,5116],{"class":51290},[103,55975,51297],{"class":113},[103,55977,55978,55980],{"class":105,"line":1306},[103,55979,6393],{"class":51290},[103,55981,15562],{"class":113},[103,55983,55984,55986,55988,55990],{"class":105,"line":1318},[103,55985,54685],{"class":162},[103,55987,51427],{"class":113},[103,55989,305],{"class":162},[103,55991,1279],{"class":113},[103,55993,55994,55996,55998,56000],{"class":105,"line":1601},[103,55995,54696],{"class":162},[103,55997,51427],{"class":113},[103,55999,305],{"class":162},[103,56001,1279],{"class":113},[103,56003,56004],{"class":105,"line":1606},[103,56005,2176],{"class":113},[103,56007,56008],{"class":105,"line":1612},[103,56009,2389],{"emptyLinePlaceholder":30},[103,56011,56012,56014],{"class":105,"line":1617},[103,56013,54715],{"class":51290},[103,56015,15562],{"class":113},[103,56017,56018,56020,56022,56024],{"class":105,"line":1631},[103,56019,54722],{"class":162},[103,56021,51427],{"class":113},[103,56023,54727],{"class":162},[103,56025,1279],{"class":113},[103,56027,56028],{"class":105,"line":1636},[103,56029,2176],{"class":113},[103,56031,56032],{"class":105,"line":1642},[103,56033,2389],{"emptyLinePlaceholder":30},[103,56035,56036,56038],{"class":105,"line":1663},[103,56037,54742],{"class":1952},[103,56039,15562],{"class":113},[103,56041,56042,56044,56046,56048],{"class":105,"line":1668},[103,56043,54749],{"class":162},[103,56045,51427],{"class":113},[103,56047,54754],{"class":162},[103,56049,1279],{"class":113},[103,56051,56052,56054,56056,56058,56060],{"class":105,"line":1682},[103,56053,54761],{"class":162},[103,56055,51427],{"class":113},[103,56057,54766],{"class":162},[103,56059,51482],{"class":109},[103,56061,1279],{"class":113},[103,56063,56064,56066,56068,56070,56072],{"class":105,"line":1687},[103,56065,54775],{"class":162},[103,56067,51427],{"class":113},[103,56069,1528],{"class":162},[103,56071,51482],{"class":109},[103,56073,1279],{"class":113},[103,56075,56076,56078,56080,56082,56084,56086],{"class":105,"line":1716},[103,56077,54696],{"class":162},[103,56079,51427],{"class":113},[103,56081,424],{"class":162},[103,56083,51482],{"class":109},[103,56085,51546],{"class":162},[103,56087,1279],{"class":113},[103,56089,56090],{"class":105,"line":1721},[103,56091,2176],{"class":113},[103,56093,56094],{"class":105,"line":1738},[103,56095,2389],{"emptyLinePlaceholder":30},[103,56097,56098,56100],{"class":105,"line":1743},[103,56099,54810],{"class":1952},[103,56101,15562],{"class":113},[103,56103,56104,56106,56108,56110],{"class":105,"line":1748},[103,56105,54749],{"class":162},[103,56107,51427],{"class":113},[103,56109,54821],{"class":162},[103,56111,1279],{"class":113},[103,56113,56114,56116,56118,56120],{"class":105,"line":1753},[103,56115,54828],{"class":162},[103,56117,51427],{"class":113},[103,56119,305],{"class":162},[103,56121,1279],{"class":113},[103,56123,56124,56126,56128,56130],{"class":105,"line":1767},[103,56125,54839],{"class":162},[103,56127,51427],{"class":113},[103,56129,305],{"class":162},[103,56131,1279],{"class":113},[103,56133,56134,56136,56138,56140,56142],{"class":105,"line":1772},[103,56135,54761],{"class":162},[103,56137,51427],{"class":113},[103,56139,424],{"class":162},[103,56141,441],{"class":109},[103,56143,1279],{"class":113},[103,56145,56146,56148,56150,56152,56154],{"class":105,"line":2566},[103,56147,54775],{"class":162},[103,56149,51427],{"class":113},[103,56151,688],{"class":162},[103,56153,441],{"class":109},[103,56155,1279],{"class":113},[103,56157,56158,56160,56162,56164],{"class":105,"line":2580},[103,56159,54874],{"class":162},[103,56161,51427],{"class":113},[103,56163,54879],{"class":162},[103,56165,1279],{"class":113},[103,56167,56168],{"class":105,"line":2588},[103,56169,2176],{"class":113},[103,56171,56172],{"class":105,"line":2593},[103,56173,2389],{"emptyLinePlaceholder":30},[103,56175,56176,56178,56180],{"class":105,"line":2599},[103,56177,54810],{"class":1952},[103,56179,6815],{"class":51290},[103,56181,15562],{"class":113},[103,56183,56184,56186,56188,56190],{"class":105,"line":2605},[103,56185,54749],{"class":162},[103,56187,51427],{"class":113},[103,56189,54821],{"class":162},[103,56191,1279],{"class":113},[103,56193,56194,56196,56198,56200,56202],{"class":105,"line":2610},[103,56195,54912],{"class":162},[103,56197,51427],{"class":113},[103,56199,1014],{"class":162},[103,56201,51482],{"class":109},[103,56203,1279],{"class":113},[103,56205,56206,56208,56210,56212,56214],{"class":105,"line":7938},[103,56207,54828],{"class":162},[103,56209,51427],{"class":113},[103,56211,813],{"class":162},[103,56213,51482],{"class":109},[103,56215,1279],{"class":113},[103,56217,56218,56220,56222,56224,56226],{"class":105,"line":7962},[103,56219,54937],{"class":162},[103,56221,51427],{"class":113},[103,56223,432],{"class":162},[103,56225,51482],{"class":109},[103,56227,1279],{"class":113},[103,56229,56230],{"class":105,"line":7967},[103,56231,2176],{"class":113},[103,56233,56234],{"class":105,"line":7973},[103,56235,2389],{"emptyLinePlaceholder":30},[103,56237,56238,56240],{"class":105,"line":8000},[103,56239,54958],{"class":51290},[103,56241,15562],{"class":113},[103,56243,56244,56246,56248,56250],{"class":105,"line":8005},[103,56245,54749],{"class":162},[103,56247,51427],{"class":113},[103,56249,54821],{"class":162},[103,56251,1279],{"class":113},[103,56253,56254,56256,56258,56260,56262],{"class":105,"line":8011},[103,56255,54937],{"class":162},[103,56257,51427],{"class":113},[103,56259,894],{"class":162},[103,56261,51482],{"class":109},[103,56263,1279],{"class":113},[103,56265,56266,56268,56270,56272,56274],{"class":105,"line":8023},[103,56267,54828],{"class":162},[103,56269,51427],{"class":113},[103,56271,813],{"class":162},[103,56273,51482],{"class":109},[103,56275,1279],{"class":113},[103,56277,56278,56280,56282,56284],{"class":105,"line":8035},[103,56279,54999],{"class":162},[103,56281,51427],{"class":113},[103,56283,51467],{"class":162},[103,56285,1279],{"class":113},[103,56287,56288,56290,56292,56294],{"class":105,"line":8047},[103,56289,55010],{"class":162},[103,56291,51427],{"class":113},[103,56293,51658],{"class":162},[103,56295,1279],{"class":113},[103,56297,56298,56300,56302,56304],{"class":105,"line":9706},[103,56299,54749],{"class":162},[103,56301,51427],{"class":113},[103,56303,54821],{"class":162},[103,56305,1279],{"class":113},[103,56307,56308,56310,56312,56314,56316],{"class":105,"line":9731},[103,56309,54761],{"class":162},[103,56311,51427],{"class":113},[103,56313,3981],{"class":162},[103,56315,51482],{"class":109},[103,56317,1279],{"class":113},[103,56319,56320,56322,56324,56326,56328],{"class":105,"line":9754},[103,56321,54775],{"class":162},[103,56323,51427],{"class":113},[103,56325,813],{"class":162},[103,56327,51482],{"class":109},[103,56329,1279],{"class":113},[103,56331,56332],{"class":105,"line":9778},[103,56333,2176],{"class":113},[103,56335,56336],{"class":105,"line":9783},[103,56337,2389],{"emptyLinePlaceholder":30},[103,56339,56340,56342,56344],{"class":105,"line":9788},[103,56341,54958],{"class":51290},[103,56343,55065],{"class":51290},[103,56345,15562],{"class":113},[103,56347,56348,56350,56352,56354,56356],{"class":105,"line":9793},[103,56349,54761],{"class":162},[103,56351,51427],{"class":113},[103,56353,813],{"class":162},[103,56355,51482],{"class":109},[103,56357,1279],{"class":113},[103,56359,56360,56362,56364,56366,56368],{"class":105,"line":9802},[103,56361,54775],{"class":162},[103,56363,51427],{"class":113},[103,56365,813],{"class":162},[103,56367,51482],{"class":109},[103,56369,1279],{"class":113},[103,56371,56372,56374,56376,56378,56380,56382,56384,56386,56388,56390,56392,56394],{"class":105,"line":9807},[103,56373,54874],{"class":162},[103,56375,51427],{"class":113},[103,56377,55100],{"class":162},[103,56379,114],{"class":113},[103,56381,305],{"class":162},[103,56383,12425],{"class":113},[103,56385,305],{"class":162},[103,56387,12425],{"class":113},[103,56389,305],{"class":162},[103,56391,12425],{"class":113},[103,56393,55117],{"class":162},[103,56395,2708],{"class":113},[103,56397,56398,56400,56402,56404,56406],{"class":105,"line":9813},[103,56399,55124],{"class":162},[103,56401,51427],{"class":113},[103,56403,559],{"class":162},[103,56405,51482],{"class":109},[103,56407,1279],{"class":113},[103,56409,56410],{"class":105,"line":9834},[103,56411,2176],{"class":113},[103,56413,56414],{"class":105,"line":9840},[103,56415,2389],{"emptyLinePlaceholder":30},[103,56417,56418,56420],{"class":105,"line":9854},[103,56419,55145],{"class":1952},[103,56421,15562],{"class":113},[103,56423,56424,56426,56428,56430],{"class":105,"line":9860},[103,56425,54874],{"class":162},[103,56427,51427],{"class":113},[103,56429,55156],{"class":162},[103,56431,1279],{"class":113},[103,56433,56434],{"class":105,"line":9887},[103,56435,2176],{"class":113},[103,56437,56438,56440,56442],{"class":105,"line":9896},[103,56439,52407],{"class":113},[103,56441,5116],{"class":51290},[103,56443,51297],{"class":113},[103,56445,56446,56448,56450],{"class":105,"line":9902},[103,56447,51775],{"class":113},[103,56449,51324],{"class":51290},[103,56451,51297],{"class":113},[103,56453,56454],{"class":105,"line":9910},[103,56455,2389],{"emptyLinePlaceholder":30},[103,56457,56458,56460,56462],{"class":105,"line":9915},[103,56459,1023],{"class":113},[103,56461,51790],{"class":51290},[103,56463,51297],{"class":113},[103,56465,56466,56468,56470,56472,56474,56476],{"class":105,"line":16594},[103,56467,52134],{"class":113},[103,56469,51601],{"class":51290},[103,56471,53476],{"class":1952},[103,56473,159],{"class":113},[103,56475,53481],{"class":218},[103,56477,51297],{"class":113},[103,56479,56480,56482,56484,56486,56488,56490],{"class":105,"line":16600},[103,56481,51331],{"class":113},[103,56483,51601],{"class":51290},[103,56485,53476],{"class":1952},[103,56487,159],{"class":113},[103,56489,55217],{"class":218},[103,56491,51297],{"class":113},[103,56493,56494,56496,56498,56500,56502,56504,56506,56508,56510],{"class":105,"line":16623},[103,56495,55224],{"class":113},[103,56497,1451],{"class":51290},[103,56499,55229],{"class":1952},[103,56501,159],{"class":113},[103,56503,55234],{"class":218},[103,56505,55237],{"class":1952},[103,56507,159],{"class":113},[103,56509,7642],{"class":218},[103,56511,51297],{"class":113},[103,56513,56514,56516,56518],{"class":105,"line":16629},[103,56515,51766],{"class":113},[103,56517,51601],{"class":51290},[103,56519,51297],{"class":113},[103,56521,56522,56524,56526,56528,56530,56532],{"class":105,"line":16652},[103,56523,51331],{"class":113},[103,56525,51601],{"class":51290},[103,56527,53476],{"class":1952},[103,56529,159],{"class":113},[103,56531,55264],{"class":218},[103,56533,51297],{"class":113},[103,56535,56536,56538,56540,56542,56544],{"class":105,"line":16666},[103,56537,55224],{"class":113},[103,56539,14],{"class":51290},[103,56541,55275],{"class":113},[103,56543,14],{"class":51290},[103,56545,51297],{"class":113},[103,56547,56548,56550,56552],{"class":105,"line":16686},[103,56549,55224],{"class":113},[103,56551,1120],{"class":51290},[103,56553,51297],{"class":113},[103,56555,56556,56558,56560,56562,56564,56566,56568,56570],{"class":105,"line":16692},[103,56557,55292],{"class":113},[103,56559,60],{"class":51290},[103,56561,53476],{"class":1952},[103,56563,159],{"class":113},[103,56565,55301],{"class":218},[103,56567,55304],{"class":113},[103,56569,60],{"class":51290},[103,56571,51297],{"class":113},[103,56573,56574,56576,56578,56580,56582],{"class":105,"line":16703},[103,56575,55292],{"class":113},[103,56577,60],{"class":51290},[103,56579,55304],{"class":113},[103,56581,60],{"class":51290},[103,56583,51297],{"class":113},[103,56585,56586,56588,56590,56592,56594],{"class":105,"line":16726},[103,56587,55292],{"class":113},[103,56589,60],{"class":51290},[103,56591,55304],{"class":113},[103,56593,60],{"class":51290},[103,56595,51297],{"class":113},[103,56597,56598,56600,56602,56604,56606],{"class":105,"line":16748},[103,56599,55292],{"class":113},[103,56601,60],{"class":51290},[103,56603,55304],{"class":113},[103,56605,60],{"class":51290},[103,56607,51297],{"class":113},[103,56609,56610,56612,56614,56616,56618],{"class":105,"line":16753},[103,56611,55292],{"class":113},[103,56613,60],{"class":51290},[103,56615,55304],{"class":113},[103,56617,60],{"class":51290},[103,56619,51297],{"class":113},[103,56621,56622,56624,56626,56628,56630],{"class":105,"line":16759},[103,56623,55292],{"class":113},[103,56625,60],{"class":51290},[103,56627,55304],{"class":113},[103,56629,60],{"class":51290},[103,56631,51297],{"class":113},[103,56633,56634,56636,56638,56640,56642],{"class":105,"line":16773},[103,56635,55292],{"class":113},[103,56637,60],{"class":51290},[103,56639,55304],{"class":113},[103,56641,60],{"class":51290},[103,56643,51297],{"class":113},[103,56645,56646,56648,56650,56652,56654],{"class":105,"line":16786},[103,56647,55292],{"class":113},[103,56649,60],{"class":51290},[103,56651,55304],{"class":113},[103,56653,60],{"class":51290},[103,56655,51297],{"class":113},[103,56657,56658,56660,56662],{"class":105,"line":16791},[103,56659,55397],{"class":113},[103,56661,1120],{"class":51290},[103,56663,51297],{"class":113},[103,56665,56666,56668,56670],{"class":105,"line":16805},[103,56667,51766],{"class":113},[103,56669,51601],{"class":51290},[103,56671,51297],{"class":113},[103,56673,56674,56676,56678],{"class":105,"line":16810},[103,56675,52407],{"class":113},[103,56677,51601],{"class":51290},[103,56679,51297],{"class":113},[103,56681,56682,56684,56686],{"class":105,"line":16816},[103,56683,52134],{"class":113},[103,56685,51803],{"class":51290},[103,56687,51297],{"class":113},[103,56689,56690,56692,56695,56697],{"class":105,"line":16821},[103,56691,11211],{"class":109},[103,56693,56694],{"class":162}," sliderData",[103,56696,13554],{"class":109},[103,56698,55437],{"class":113},[103,56700,56701,56703,56705,56707,56709,56711,56713],{"class":105,"line":16835},[103,56702,55442],{"class":113},[103,56704,55445],{"class":218},[103,56706,55448],{"class":113},[103,56708,55451],{"class":218},[103,56710,55454],{"class":113},[103,56712,55457],{"class":218},[103,56714,55460],{"class":113},[103,56716,56717,56719,56721,56723,56725,56727,56729],{"class":105,"line":16840},[103,56718,55442],{"class":113},[103,56720,55467],{"class":218},[103,56722,55448],{"class":113},[103,56724,55472],{"class":218},[103,56726,55454],{"class":113},[103,56728,55477],{"class":218},[103,56730,55460],{"class":113},[103,56732,56733,56735,56737,56739,56741,56743,56745],{"class":105,"line":16845},[103,56734,55442],{"class":113},[103,56736,55486],{"class":218},[103,56738,55448],{"class":113},[103,56740,55491],{"class":218},[103,56742,55454],{"class":113},[103,56744,55496],{"class":218},[103,56746,55460],{"class":113},[103,56748,56749,56751,56753,56755,56757,56759,56761],{"class":105,"line":16859},[103,56750,55442],{"class":113},[103,56752,55505],{"class":218},[103,56754,55448],{"class":113},[103,56756,55510],{"class":218},[103,56758,55454],{"class":113},[103,56760,55515],{"class":218},[103,56762,55460],{"class":113},[103,56764,56765,56767,56769,56771,56773,56775,56777],{"class":105,"line":16871},[103,56766,55442],{"class":113},[103,56768,55524],{"class":218},[103,56770,55448],{"class":113},[103,56772,55529],{"class":218},[103,56774,55454],{"class":113},[103,56776,55534],{"class":218},[103,56778,55460],{"class":113},[103,56780,56781,56783,56785,56787,56789,56791,56793],{"class":105,"line":16876},[103,56782,55442],{"class":113},[103,56784,55543],{"class":218},[103,56786,55448],{"class":113},[103,56788,55548],{"class":218},[103,56790,55454],{"class":113},[103,56792,55553],{"class":218},[103,56794,55460],{"class":113},[103,56796,56797,56799,56801,56803,56805,56807,56809],{"class":105,"line":16889},[103,56798,55442],{"class":113},[103,56800,55562],{"class":218},[103,56802,55448],{"class":113},[103,56804,55567],{"class":218},[103,56806,55454],{"class":113},[103,56808,55572],{"class":218},[103,56810,55460],{"class":113},[103,56812,56813,56815,56817,56819,56821,56823,56825],{"class":105,"line":16894},[103,56814,55442],{"class":113},[103,56816,55581],{"class":218},[103,56818,55448],{"class":113},[103,56820,55586],{"class":218},[103,56822,55454],{"class":113},[103,56824,55591],{"class":218},[103,56826,55594],{"class":113},[103,56828,56829],{"class":105,"line":16899},[103,56830,53099],{"class":113},[103,56832,56833],{"class":105,"line":16904},[103,56834,56835],{"class":172},"    \u002F\u002F 1.获取元素\n",[103,56837,56838,56840,56842,56844,56846,56848,56850,56852],{"class":105,"line":16917},[103,56839,11211],{"class":109},[103,56841,55605],{"class":162},[103,56843,13554],{"class":109},[103,56845,54386],{"class":113},[103,56847,54389],{"class":1952},[103,56849,114],{"class":113},[103,56851,55616],{"class":218},[103,56853,120],{"class":113},[103,56855,56856,56858,56860,56862,56864,56866,56868,56870],{"class":105,"line":16922},[103,56857,11211],{"class":109},[103,56859,6815],{"class":162},[103,56861,13554],{"class":109},[103,56863,54386],{"class":113},[103,56865,54389],{"class":1952},[103,56867,114],{"class":113},[103,56869,55635],{"class":218},[103,56871,120],{"class":113},[103,56873,56874,56876,56878,56880],{"class":105,"line":32623},[103,56875,52209],{"class":109},[103,56877,9428],{"class":113},[103,56879,159],{"class":109},[103,56881,47323],{"class":162},[103,56883,56884],{"class":105,"line":32629},[103,56885,56886],{"class":172},"    \u002F\u002F 2.开启定时器\n",[103,56888,56889],{"class":105,"line":32635},[103,56890,56891],{"class":172},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[103,56893,56894,56897,56899,56901],{"class":105,"line":32641},[103,56895,56896],{"class":1952},"    setInterval",[103,56898,114],{"class":113},[103,56900,54439],{"class":109},[103,56902,54442],{"class":113},[103,56904,56905,56907],{"class":105,"line":32647},[103,56906,54447],{"class":113},[103,56908,2691],{"class":109},[103,56910,56911,56913,56915,56917,56920,56922],{"class":105,"line":32658},[103,56912,54470],{"class":109},[103,56914,54473],{"class":113},[103,56916,1699],{"class":109},[103,56918,56919],{"class":113}," sliderData.",[103,56921,51958],{"class":162},[103,56923,12432],{"class":113},[103,56925,56926,56929,56931],{"class":105,"line":32664},[103,56927,56928],{"class":113},"        i ",[103,56930,159],{"class":109},[103,56932,47323],{"class":162},[103,56934,56935],{"class":105,"line":32684},[103,56936,52388],{"class":113},[103,56938,56939],{"class":105,"line":32690},[103,56940,56941],{"class":172},"      \u002F\u002F 更换图片路径\n",[103,56943,56944,56946,56948],{"class":105,"line":32701},[103,56945,55711],{"class":113},[103,56947,159],{"class":109},[103,56949,56950],{"class":113}," sliderData[i].url\n",[103,56952,56953],{"class":105,"line":32707},[103,56954,56955],{"class":172},"      \u002F\u002F 把文字写到p里面\n",[103,56957,56958,56960,56962],{"class":105,"line":32713},[103,56959,55721],{"class":113},[103,56961,159],{"class":109},[103,56963,56964],{"class":113}," sliderData[i].title\n",[103,56966,56967],{"class":105,"line":32719},[103,56968,56969],{"class":172},"      \u002F\u002F 小圆点\n",[103,56971,56972],{"class":105,"line":32725},[103,56973,56974],{"class":172},"      \u002F\u002F 先删除以前的active\n",[103,56976,56977],{"class":105,"line":32731},[103,56978,56979],{"class":172},"      \u002F\u002F 只让当前li添加active\n",[103,56981,56982,56984,56986,56988,56991,56994,56997,56999,57001],{"class":105,"line":32737},[103,56983,55761],{"class":113},[103,56985,54389],{"class":1952},[103,56987,114],{"class":113},[103,56989,56990],{"class":218},"'.slider-footer .activate'",[103,56992,56993],{"class":113},").classList.",[103,56995,56996],{"class":1952},"remove",[103,56998,114],{"class":113},[103,57000,55779],{"class":218},[103,57002,120],{"class":113},[103,57004,57005,57007,57009,57011,57014,57016,57018,57020,57023,57025,57027,57029,57031],{"class":105,"line":32743},[103,57006,55761],{"class":113},[103,57008,54389],{"class":1952},[103,57010,114],{"class":113},[103,57012,57013],{"class":218},"`.slider-footer ul li:nth-child(${",[103,57015,554],{"class":113},[103,57017,45556],{"class":109},[103,57019,25108],{"class":162},[103,57021,57022],{"class":218},"})`",[103,57024,56993],{"class":113},[103,57026,5324],{"class":1952},[103,57028,114],{"class":113},[103,57030,55779],{"class":218},[103,57032,120],{"class":113},[103,57034,57035],{"class":105,"line":32763},[103,57036,2389],{"emptyLinePlaceholder":30},[103,57038,57039,57041,57043],{"class":105,"line":32769},[103,57040,54525],{"class":113},[103,57042,6400],{"class":162},[103,57044,120],{"class":113},[103,57046,57047],{"class":105,"line":32785},[103,57048,2389],{"emptyLinePlaceholder":30},[103,57050,57051,57053,57055],{"class":105,"line":32791},[103,57052,52407],{"class":113},[103,57054,51803],{"class":51290},[103,57056,51297],{"class":113},[103,57058,57059,57061,57063],{"class":105,"line":32805},[103,57060,51775],{"class":113},[103,57062,51790],{"class":51290},[103,57064,51297],{"class":113},[103,57066,57067],{"class":105,"line":32811},[103,57068,2389],{"emptyLinePlaceholder":30},[103,57070,57071,57073,57075],{"class":105,"line":32826},[103,57072,51775],{"class":113},[103,57074,50625],{"class":51290},[103,57076,51297],{"class":113},[74,57078,57080],{"id":57079},"_317-重要知识点","3.1.7 重要知识点",[14,57082,57083,57084],{},"浏览器在渲染文本时， ",[263,57085,57086],{},"没有空格或换行符就没有“断行点”",[14,57088,57089],{},[1451,57090],{"alt":24,"src":57091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57093,57094],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57096,57097],{},[1451,57098],{"alt":24,"src":57099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57101,57102],{},[1451,57103],{"alt":24,"src":57104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[45,57106,57108],{"id":57107},"_32-dom事件基础","3.2 DOM事件基础",[74,57110,57112],{"id":57111},"_321-事件监听","3.2.1 事件监听",[14,57114,57115],{},[1451,57116],{"alt":24,"src":57117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57119,57120],{},"事件监听有响应的发生",[14,57122,57123],{},[1451,57124],{"alt":24,"src":57125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57127,57128],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57130,57131],{},"对于有名函数,要执行的函数名后边不要加()",[74,57133,57135],{"id":57134},"_322-随机点名案例","3.2.2 随机点名案例",[94,57137,57139],{"className":50623,"code":57138,"language":50625,"meta":24,"style":24},"\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",[100,57140,57141,57151,57165,57169,57177,57191,57211,57223,57231,57237,57247,57257,57261,57265,57272,57283,57287,57291,57297,57309,57323,57333,57345,57358,57362,57366,57373,57377,57390,57402,57414,57418,57422,57426,57433,57443,57447,57451,57460,57472,57484,57499,57503,57511,57519,57523,57531,57544,57558,57571,57591,57599,57614,57634,57654,57662,57666,57674,57679,57715,57735,57740,57759,57764,57775,57780,57791,57796,57815,57830,57835,57861,57871,57880,57885,57901,57906,57911,57916,57931,57935,57939,57944,57963,57980,57988,57993,58008,58012,58016,58024,58032,58036],{"__ignoreMap":24},[103,57142,57143,57145,57147,57149],{"class":105,"line":106},[103,57144,51287],{"class":113},[103,57146,51291],{"class":51290},[103,57148,51294],{"class":1952},[103,57150,51297],{"class":113},[103,57152,57153,57155,57157,57159,57161,57163],{"class":105,"line":25},[103,57154,1023],{"class":113},[103,57156,50625],{"class":51290},[103,57158,51306],{"class":1952},[103,57160,159],{"class":113},[103,57162,51311],{"class":218},[103,57164,51297],{"class":113},[103,57166,57167],{"class":105,"line":1168},[103,57168,2389],{"emptyLinePlaceholder":30},[103,57170,57171,57173,57175],{"class":105,"line":1183},[103,57172,1023],{"class":113},[103,57174,51324],{"class":51290},[103,57176,51297],{"class":113},[103,57178,57179,57181,57183,57185,57187,57189],{"class":105,"line":1189},[103,57180,52134],{"class":113},[103,57182,51334],{"class":51290},[103,57184,51337],{"class":1952},[103,57186,159],{"class":113},[103,57188,51342],{"class":218},[103,57190,51297],{"class":113},[103,57192,57193,57195,57197,57199,57201,57203,57205,57207,57209],{"class":105,"line":1203},[103,57194,52134],{"class":113},[103,57196,51334],{"class":51290},[103,57198,14910],{"class":1952},[103,57200,159],{"class":113},[103,57202,51381],{"class":218},[103,57204,51361],{"class":1952},[103,57206,159],{"class":113},[103,57208,51388],{"class":218},[103,57210,51297],{"class":113},[103,57212,57213,57215,57217,57219,57221],{"class":105,"line":1209},[103,57214,52134],{"class":113},[103,57216,51397],{"class":51290},[103,57218,51400],{"class":113},[103,57220,51397],{"class":51290},[103,57222,51297],{"class":113},[103,57224,57225,57227,57229],{"class":105,"line":1300},[103,57226,52134],{"class":113},[103,57228,5116],{"class":51290},[103,57230,51297],{"class":113},[103,57232,57233,57235],{"class":105,"line":1306},[103,57234,6393],{"class":51290},[103,57236,15562],{"class":113},[103,57238,57239,57241,57243,57245],{"class":105,"line":1318},[103,57240,54696],{"class":162},[103,57242,51427],{"class":113},[103,57244,305],{"class":162},[103,57246,1279],{"class":113},[103,57248,57249,57251,57253,57255],{"class":105,"line":1601},[103,57250,54685],{"class":162},[103,57252,51427],{"class":113},[103,57254,305],{"class":162},[103,57256,1279],{"class":113},[103,57258,57259],{"class":105,"line":1606},[103,57260,2176],{"class":113},[103,57262,57263],{"class":105,"line":1612},[103,57264,2389],{"emptyLinePlaceholder":30},[103,57266,57267,57270],{"class":105,"line":1617},[103,57268,57269],{"class":51290},"    h2",[103,57271,15562],{"class":113},[103,57273,57274,57277,57279,57281],{"class":105,"line":1631},[103,57275,57276],{"class":162},"      text-align",[103,57278,51427],{"class":113},[103,57280,51582],{"class":162},[103,57282,1279],{"class":113},[103,57284,57285],{"class":105,"line":1636},[103,57286,2176],{"class":113},[103,57288,57289],{"class":105,"line":1642},[103,57290,2389],{"emptyLinePlaceholder":30},[103,57292,57293,57295],{"class":105,"line":1663},[103,57294,54742],{"class":1952},[103,57296,15562],{"class":113},[103,57298,57299,57301,57303,57305,57307],{"class":105,"line":1668},[103,57300,54761],{"class":162},[103,57302,51427],{"class":113},[103,57304,1528],{"class":162},[103,57306,51482],{"class":109},[103,57308,1279],{"class":113},[103,57310,57311,57313,57315,57317,57319,57321],{"class":105,"line":1682},[103,57312,54696],{"class":162},[103,57314,51427],{"class":113},[103,57316,769],{"class":162},[103,57318,51482],{"class":109},[103,57320,51546],{"class":162},[103,57322,1279],{"class":113},[103,57324,57325,57327,57329,57331],{"class":105,"line":1687},[103,57326,54999],{"class":162},[103,57328,51427],{"class":113},[103,57330,51467],{"class":162},[103,57332,1279],{"class":113},[103,57334,57335,57337,57339,57341,57343],{"class":105,"line":1716},[103,57336,54912],{"class":162},[103,57338,51427],{"class":113},[103,57340,938],{"class":162},[103,57342,51482],{"class":109},[103,57344,1279],{"class":113},[103,57346,57347,57350,57352,57354,57356],{"class":105,"line":1721},[103,57348,57349],{"class":162},"      line-height",[103,57351,51427],{"class":113},[103,57353,514],{"class":162},[103,57355,51482],{"class":109},[103,57357,1279],{"class":113},[103,57359,57360],{"class":105,"line":1738},[103,57361,2176],{"class":113},[103,57363,57364],{"class":105,"line":1743},[103,57365,2389],{"emptyLinePlaceholder":30},[103,57367,57368,57371],{"class":105,"line":1748},[103,57369,57370],{"class":1952},"    .qs",[103,57372,15562],{"class":113},[103,57374,57375],{"class":105,"line":1753},[103,57376,2389],{"emptyLinePlaceholder":30},[103,57378,57379,57381,57383,57386,57388],{"class":105,"line":1767},[103,57380,54761],{"class":162},[103,57382,51427],{"class":113},[103,57384,57385],{"class":162},"450",[103,57387,51482],{"class":109},[103,57389,1279],{"class":113},[103,57391,57392,57394,57396,57398,57400],{"class":105,"line":1772},[103,57393,54775],{"class":162},[103,57395,51427],{"class":113},[103,57397,514],{"class":162},[103,57399,51482],{"class":109},[103,57401,1279],{"class":113},[103,57403,57404,57407,57409,57412],{"class":105,"line":2566},[103,57405,57406],{"class":162},"      color",[103,57408,51427],{"class":113},[103,57410,57411],{"class":162},"red",[103,57413,1279],{"class":113},[103,57415,57416],{"class":105,"line":2580},[103,57417,2389],{"emptyLinePlaceholder":30},[103,57419,57420],{"class":105,"line":2588},[103,57421,2176],{"class":113},[103,57423,57424],{"class":105,"line":2593},[103,57425,2389],{"emptyLinePlaceholder":30},[103,57427,57428,57431],{"class":105,"line":2599},[103,57429,57430],{"class":1952},"    .btns",[103,57432,15562],{"class":113},[103,57434,57435,57437,57439,57441],{"class":105,"line":2605},[103,57436,57276],{"class":162},[103,57438,51427],{"class":113},[103,57440,51582],{"class":162},[103,57442,1279],{"class":113},[103,57444,57445],{"class":105,"line":2610},[103,57446,2176],{"class":113},[103,57448,57449],{"class":105,"line":7938},[103,57450,2389],{"emptyLinePlaceholder":30},[103,57452,57453,57455,57458],{"class":105,"line":7962},[103,57454,57430],{"class":1952},[103,57456,57457],{"class":51290}," button",[103,57459,15562],{"class":113},[103,57461,57462,57464,57466,57468,57470],{"class":105,"line":7967},[103,57463,54761],{"class":162},[103,57465,51427],{"class":113},[103,57467,930],{"class":162},[103,57469,51482],{"class":109},[103,57471,1279],{"class":113},[103,57473,57474,57476,57478,57480,57482],{"class":105,"line":7973},[103,57475,54775],{"class":162},[103,57477,51427],{"class":113},[103,57479,386],{"class":162},[103,57481,51482],{"class":109},[103,57483,1279],{"class":113},[103,57485,57486,57488,57490,57492,57495,57497],{"class":105,"line":8000},[103,57487,54696],{"class":162},[103,57489,51427],{"class":113},[103,57491,305],{"class":162},[103,57493,57494],{"class":162}," 50",[103,57496,51482],{"class":109},[103,57498,1279],{"class":113},[103,57500,57501],{"class":105,"line":8005},[103,57502,2176],{"class":113},[103,57504,57505,57507,57509],{"class":105,"line":8011},[103,57506,52407],{"class":113},[103,57508,5116],{"class":51290},[103,57510,51297],{"class":113},[103,57512,57513,57515,57517],{"class":105,"line":8023},[103,57514,51775],{"class":113},[103,57516,51324],{"class":51290},[103,57518,51297],{"class":113},[103,57520,57521],{"class":105,"line":8035},[103,57522,2389],{"emptyLinePlaceholder":30},[103,57524,57525,57527,57529],{"class":105,"line":8047},[103,57526,1023],{"class":113},[103,57528,51790],{"class":51290},[103,57530,51297],{"class":113},[103,57532,57533,57535,57537,57540,57542],{"class":105,"line":9706},[103,57534,52134],{"class":113},[103,57536,45],{"class":51290},[103,57538,57539],{"class":113},">随机点名\u003C\u002F",[103,57541,45],{"class":51290},[103,57543,51297],{"class":113},[103,57545,57546,57548,57550,57552,57554,57556],{"class":105,"line":9731},[103,57547,52134],{"class":113},[103,57549,51601],{"class":51290},[103,57551,53476],{"class":1952},[103,57553,159],{"class":113},[103,57555,53481],{"class":218},[103,57557,51297],{"class":113},[103,57559,57560,57562,57564,57567,57569],{"class":105,"line":9754},[103,57561,51331],{"class":113},[103,57563,103],{"class":51290},[103,57565,57566],{"class":113},">名字是：\u003C\u002F",[103,57568,103],{"class":51290},[103,57570,51297],{"class":113},[103,57572,57573,57575,57577,57579,57581,57584,57587,57589],{"class":105,"line":9778},[103,57574,51331],{"class":113},[103,57576,51601],{"class":51290},[103,57578,53476],{"class":1952},[103,57580,159],{"class":113},[103,57582,57583],{"class":218},"\"qs\"",[103,57585,57586],{"class":113},">这里显示姓名\u003C\u002F",[103,57588,51601],{"class":51290},[103,57590,51297],{"class":113},[103,57592,57593,57595,57597],{"class":105,"line":9783},[103,57594,52407],{"class":113},[103,57596,51601],{"class":51290},[103,57598,51297],{"class":113},[103,57600,57601,57603,57605,57607,57609,57612],{"class":105,"line":9788},[103,57602,52134],{"class":113},[103,57604,51601],{"class":51290},[103,57606,53476],{"class":1952},[103,57608,159],{"class":113},[103,57610,57611],{"class":218},"\"btns\"",[103,57613,51297],{"class":113},[103,57615,57616,57618,57620,57622,57624,57627,57630,57632],{"class":105,"line":9793},[103,57617,51331],{"class":113},[103,57619,53877],{"class":51290},[103,57621,53476],{"class":1952},[103,57623,159],{"class":113},[103,57625,57626],{"class":218},"\"start\"",[103,57628,57629],{"class":113},">开始\u003C\u002F",[103,57631,53877],{"class":51290},[103,57633,51297],{"class":113},[103,57635,57636,57638,57640,57642,57644,57647,57650,57652],{"class":105,"line":9802},[103,57637,51331],{"class":113},[103,57639,53877],{"class":51290},[103,57641,53476],{"class":1952},[103,57643,159],{"class":113},[103,57645,57646],{"class":218},"\"end\"",[103,57648,57649],{"class":113},">结束\u003C\u002F",[103,57651,53877],{"class":51290},[103,57653,51297],{"class":113},[103,57655,57656,57658,57660],{"class":105,"line":9807},[103,57657,52407],{"class":113},[103,57659,51601],{"class":51290},[103,57661,51297],{"class":113},[103,57663,57664],{"class":105,"line":9813},[103,57665,2389],{"emptyLinePlaceholder":30},[103,57667,57668,57670,57672],{"class":105,"line":9834},[103,57669,52134],{"class":113},[103,57671,51803],{"class":51290},[103,57673,51297],{"class":113},[103,57675,57676],{"class":105,"line":9840},[103,57677,57678],{"class":172},"    \u002F\u002F 数据数组\n",[103,57680,57681,57683,57686,57688,57690,57693,57695,57698,57700,57703,57705,57708,57710,57713],{"class":105,"line":9854},[103,57682,11211],{"class":109},[103,57684,57685],{"class":162}," arr",[103,57687,13554],{"class":109},[103,57689,52216],{"class":113},[103,57691,57692],{"class":218},"'马超'",[103,57694,12425],{"class":113},[103,57696,57697],{"class":218},"'黄忠'",[103,57699,12425],{"class":113},[103,57701,57702],{"class":218},"'赵云'",[103,57704,12425],{"class":113},[103,57706,57707],{"class":218},"'关羽'",[103,57709,12425],{"class":113},[103,57711,57712],{"class":218},"'张飞'",[103,57714,33236],{"class":113},[103,57716,57717,57719,57722,57724,57726,57728,57730,57733],{"class":105,"line":9860},[103,57718,11211],{"class":109},[103,57720,57721],{"class":162}," qs",[103,57723,13554],{"class":109},[103,57725,54386],{"class":113},[103,57727,54389],{"class":1952},[103,57729,114],{"class":113},[103,57731,57732],{"class":218},"'.qs'",[103,57734,120],{"class":113},[103,57736,57737],{"class":105,"line":9887},[103,57738,57739],{"class":172},"    \u002F\u002F 1.业务1.开始按钮模块\n",[103,57741,57742,57744,57746,57748,57750,57752,57754,57757],{"class":105,"line":9896},[103,57743,11211],{"class":109},[103,57745,4173],{"class":162},[103,57747,13554],{"class":109},[103,57749,54386],{"class":113},[103,57751,54389],{"class":1952},[103,57753,114],{"class":113},[103,57755,57756],{"class":218},"'.start'",[103,57758,120],{"class":113},[103,57760,57761],{"class":105,"line":9902},[103,57762,57763],{"class":172},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[103,57765,57766,57768,57771,57773],{"class":105,"line":9910},[103,57767,52209],{"class":109},[103,57769,57770],{"class":113}," timerId ",[103,57772,159],{"class":109},[103,57774,47323],{"class":162},[103,57776,57777],{"class":105,"line":9915},[103,57778,57779],{"class":172},"    \u002F\u002F 随机号要全局变量\n",[103,57781,57782,57784,57787,57789],{"class":105,"line":16594},[103,57783,52209],{"class":109},[103,57785,57786],{"class":113}," random ",[103,57788,159],{"class":109},[103,57790,47323],{"class":162},[103,57792,57793],{"class":105,"line":16600},[103,57794,57795],{"class":172},"    \u002F\u002F 1.1 添加点击事件\n",[103,57797,57798,57801,57804,57806,57809,57811,57813],{"class":105,"line":16623},[103,57799,57800],{"class":113},"    start.",[103,57802,57803],{"class":1952},"addEventListener",[103,57805,114],{"class":113},[103,57807,57808],{"class":218},"'click'",[103,57810,12425],{"class":113},[103,57812,54439],{"class":109},[103,57814,54442],{"class":113},[103,57816,57817,57820,57822,57824,57826,57828],{"class":105,"line":16629},[103,57818,57819],{"class":113},"      timerId ",[103,57821,159],{"class":109},[103,57823,54434],{"class":1952},[103,57825,114],{"class":113},[103,57827,54439],{"class":109},[103,57829,54442],{"class":113},[103,57831,57832],{"class":105,"line":16652},[103,57833,57834],{"class":172},"        \u002F\u002F 随机数\n",[103,57836,57837,57840,57842,57845,57848,57851,57853,57855,57857,57859],{"class":105,"line":16666},[103,57838,57839],{"class":113},"        random ",[103,57841,159],{"class":109},[103,57843,57844],{"class":1952}," parseInt",[103,57846,57847],{"class":113},"(Math.",[103,57849,57850],{"class":1952},"random",[103,57852,13040],{"class":113},[103,57854,568],{"class":109},[103,57856,51955],{"class":113},[103,57858,51958],{"class":162},[103,57860,120],{"class":113},[103,57862,57863,57866,57868],{"class":105,"line":16686},[103,57864,57865],{"class":113},"        qs.innerHTML ",[103,57867,159],{"class":109},[103,57869,57870],{"class":113}," arr[random]\n",[103,57872,57873,57876,57878],{"class":105,"line":16692},[103,57874,57875],{"class":113},"      }, ",[103,57877,386],{"class":162},[103,57879,120],{"class":113},[103,57881,57882],{"class":105,"line":16703},[103,57883,57884],{"class":172},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[103,57886,57887,57889,57892,57894,57897,57899],{"class":105,"line":16726},[103,57888,54470],{"class":109},[103,57890,57891],{"class":113}," (arr.",[103,57893,51958],{"class":162},[103,57895,57896],{"class":109}," ===",[103,57898,25108],{"class":162},[103,57900,12432],{"class":113},[103,57902,57903],{"class":105,"line":16748},[103,57904,57905],{"class":172},"        \u002F\u002F start.disabled = true\n",[103,57907,57908],{"class":105,"line":16753},[103,57909,57910],{"class":172},"        \u002F\u002F end.disabled = true\n",[103,57912,57913],{"class":105,"line":16759},[103,57914,57915],{"class":172},"        \u002F\u002F 可以合起来写\n",[103,57917,57918,57921,57923,57926,57928],{"class":105,"line":16773},[103,57919,57920],{"class":113},"        start.disabled ",[103,57922,159],{"class":109},[103,57924,57925],{"class":113}," end.disabled ",[103,57927,159],{"class":109},[103,57929,57930],{"class":162}," true\n",[103,57932,57933],{"class":105,"line":16786},[103,57934,52388],{"class":113},[103,57936,57937],{"class":105,"line":16791},[103,57938,33451],{"class":113},[103,57940,57941],{"class":105,"line":16805},[103,57942,57943],{"class":172},"    \u002F\u002F 1.2 关闭按钮模块\n",[103,57945,57946,57948,57950,57952,57954,57956,57958,57961],{"class":105,"line":16810},[103,57947,11211],{"class":109},[103,57949,4189],{"class":162},[103,57951,13554],{"class":109},[103,57953,54386],{"class":113},[103,57955,54389],{"class":1952},[103,57957,114],{"class":113},[103,57959,57960],{"class":218},"'.end'",[103,57962,120],{"class":113},[103,57964,57965,57968,57970,57972,57974,57976,57978],{"class":105,"line":16816},[103,57966,57967],{"class":113},"    end.",[103,57969,57803],{"class":1952},[103,57971,114],{"class":113},[103,57973,57808],{"class":218},[103,57975,12425],{"class":113},[103,57977,54439],{"class":109},[103,57979,54442],{"class":113},[103,57981,57982,57985],{"class":105,"line":16821},[103,57983,57984],{"class":1952},"      clearInterval",[103,57986,57987],{"class":113},"(timerId)\n",[103,57989,57990],{"class":105,"line":16835},[103,57991,57992],{"class":172},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[103,57994,57995,57998,58001,58004,58006],{"class":105,"line":16840},[103,57996,57997],{"class":113},"      arr.",[103,57999,58000],{"class":1952},"splice",[103,58002,58003],{"class":113},"(random, ",[103,58005,331],{"class":162},[103,58007,120],{"class":113},[103,58009,58010],{"class":105,"line":16845},[103,58011,33451],{"class":113},[103,58013,58014],{"class":105,"line":16859},[103,58015,2389],{"emptyLinePlaceholder":30},[103,58017,58018,58020,58022],{"class":105,"line":16871},[103,58019,52407],{"class":113},[103,58021,51803],{"class":51290},[103,58023,51297],{"class":113},[103,58025,58026,58028,58030],{"class":105,"line":16876},[103,58027,51775],{"class":113},[103,58029,51790],{"class":51290},[103,58031,51297],{"class":113},[103,58033,58034],{"class":105,"line":16889},[103,58035,2389],{"emptyLinePlaceholder":30},[103,58037,58038,58040,58042],{"class":105,"line":16894},[103,58039,51775],{"class":113},[103,58041,50625],{"class":51290},[103,58043,51297],{"class":113},[14,58045,58046],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[74,58048,58050],{"id":58049},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[94,58052,58054],{"className":50623,"code":58053,"language":50625,"meta":24,"style":24},"\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",[100,58055,58056,58066,58080,58084,58092,58106,58126,58138,58146,58150,58158,58170,58178,58197,58214,58230,58240,58244,58252,58260,58264],{"__ignoreMap":24},[103,58057,58058,58060,58062,58064],{"class":105,"line":106},[103,58059,51287],{"class":113},[103,58061,51291],{"class":51290},[103,58063,51294],{"class":1952},[103,58065,51297],{"class":113},[103,58067,58068,58070,58072,58074,58076,58078],{"class":105,"line":25},[103,58069,1023],{"class":113},[103,58071,50625],{"class":51290},[103,58073,51306],{"class":1952},[103,58075,159],{"class":113},[103,58077,51311],{"class":218},[103,58079,51297],{"class":113},[103,58081,58082],{"class":105,"line":1168},[103,58083,2389],{"emptyLinePlaceholder":30},[103,58085,58086,58088,58090],{"class":105,"line":1183},[103,58087,1023],{"class":113},[103,58089,51324],{"class":51290},[103,58091,51297],{"class":113},[103,58093,58094,58096,58098,58100,58102,58104],{"class":105,"line":1189},[103,58095,52134],{"class":113},[103,58097,51334],{"class":51290},[103,58099,51337],{"class":1952},[103,58101,159],{"class":113},[103,58103,51342],{"class":218},[103,58105,51297],{"class":113},[103,58107,58108,58110,58112,58114,58116,58118,58120,58122,58124],{"class":105,"line":1203},[103,58109,52134],{"class":113},[103,58111,51334],{"class":51290},[103,58113,14910],{"class":1952},[103,58115,159],{"class":113},[103,58117,51381],{"class":218},[103,58119,51361],{"class":1952},[103,58121,159],{"class":113},[103,58123,51388],{"class":218},[103,58125,51297],{"class":113},[103,58127,58128,58130,58132,58134,58136],{"class":105,"line":1209},[103,58129,52134],{"class":113},[103,58131,51397],{"class":51290},[103,58133,51400],{"class":113},[103,58135,51397],{"class":51290},[103,58137,51297],{"class":113},[103,58139,58140,58142,58144],{"class":105,"line":1300},[103,58141,51775],{"class":113},[103,58143,51324],{"class":51290},[103,58145,51297],{"class":113},[103,58147,58148],{"class":105,"line":1306},[103,58149,2389],{"emptyLinePlaceholder":30},[103,58151,58152,58154,58156],{"class":105,"line":1318},[103,58153,1023],{"class":113},[103,58155,51790],{"class":51290},[103,58157,51297],{"class":113},[103,58159,58160,58162,58164,58166,58168],{"class":105,"line":1601},[103,58161,52134],{"class":113},[103,58163,53877],{"class":51290},[103,58165,53883],{"class":113},[103,58167,53877],{"class":51290},[103,58169,51297],{"class":113},[103,58171,58172,58174,58176],{"class":105,"line":1606},[103,58173,52134],{"class":113},[103,58175,51803],{"class":51290},[103,58177,51297],{"class":113},[103,58179,58180,58182,58184,58186,58188,58190,58192,58195],{"class":105,"line":1612},[103,58181,11211],{"class":109},[103,58183,54381],{"class":162},[103,58185,13554],{"class":109},[103,58187,54386],{"class":113},[103,58189,54389],{"class":1952},[103,58191,114],{"class":113},[103,58193,58194],{"class":218},"'button'",[103,58196,120],{"class":113},[103,58198,58199,58202,58204,58206,58208,58210,58212],{"class":105,"line":1617},[103,58200,58201],{"class":113},"    btn.",[103,58203,57803],{"class":1952},[103,58205,114],{"class":113},[103,58207,57808],{"class":218},[103,58209,12425],{"class":113},[103,58211,54439],{"class":109},[103,58213,54442],{"class":113},[103,58215,58216,58219,58221,58223,58226,58228],{"class":105,"line":1631},[103,58217,58218],{"class":109},"      const",[103,58220,2229],{"class":162},[103,58222,13554],{"class":109},[103,58224,58225],{"class":113}," Math.",[103,58227,57850],{"class":1952},[103,58229,1965],{"class":113},[103,58231,58232,58235,58238],{"class":105,"line":1636},[103,58233,58234],{"class":113},"      console.",[103,58236,58237],{"class":1952},"log",[103,58239,127],{"class":113},[103,58241,58242],{"class":105,"line":1642},[103,58243,33451],{"class":113},[103,58245,58246,58248,58250],{"class":105,"line":1663},[103,58247,52407],{"class":113},[103,58249,51803],{"class":51290},[103,58251,51297],{"class":113},[103,58253,58254,58256,58258],{"class":105,"line":1668},[103,58255,51775],{"class":113},[103,58257,51790],{"class":51290},[103,58259,51297],{"class":113},[103,58261,58262],{"class":105,"line":1682},[103,58263,2389],{"emptyLinePlaceholder":30},[103,58265,58266,58268,58270],{"class":105,"line":1687},[103,58267,51775],{"class":113},[103,58269,50625],{"class":51290},[103,58271,51297],{"class":113},[14,58273,58274],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58276,58277],{},"常量不可以重新赋值",[14,58279,58280],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[94,58282,58284],{"className":50623,"code":58283,"language":50625,"meta":24,"style":24},"\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",[100,58285,58286,58296,58310,58314,58322,58336,58356,58368,58376,58380,58388,58400,58408,58419,58437,58453,58467,58475,58479,58487,58495,58499],{"__ignoreMap":24},[103,58287,58288,58290,58292,58294],{"class":105,"line":106},[103,58289,51287],{"class":113},[103,58291,51291],{"class":51290},[103,58293,51294],{"class":1952},[103,58295,51297],{"class":113},[103,58297,58298,58300,58302,58304,58306,58308],{"class":105,"line":25},[103,58299,1023],{"class":113},[103,58301,50625],{"class":51290},[103,58303,51306],{"class":1952},[103,58305,159],{"class":113},[103,58307,51311],{"class":218},[103,58309,51297],{"class":113},[103,58311,58312],{"class":105,"line":1168},[103,58313,2389],{"emptyLinePlaceholder":30},[103,58315,58316,58318,58320],{"class":105,"line":1183},[103,58317,1023],{"class":113},[103,58319,51324],{"class":51290},[103,58321,51297],{"class":113},[103,58323,58324,58326,58328,58330,58332,58334],{"class":105,"line":1189},[103,58325,52134],{"class":113},[103,58327,51334],{"class":51290},[103,58329,51337],{"class":1952},[103,58331,159],{"class":113},[103,58333,51342],{"class":218},[103,58335,51297],{"class":113},[103,58337,58338,58340,58342,58344,58346,58348,58350,58352,58354],{"class":105,"line":1203},[103,58339,52134],{"class":113},[103,58341,51334],{"class":51290},[103,58343,14910],{"class":1952},[103,58345,159],{"class":113},[103,58347,51381],{"class":218},[103,58349,51361],{"class":1952},[103,58351,159],{"class":113},[103,58353,51388],{"class":218},[103,58355,51297],{"class":113},[103,58357,58358,58360,58362,58364,58366],{"class":105,"line":1209},[103,58359,52134],{"class":113},[103,58361,51397],{"class":51290},[103,58363,51400],{"class":113},[103,58365,51397],{"class":51290},[103,58367,51297],{"class":113},[103,58369,58370,58372,58374],{"class":105,"line":1300},[103,58371,51775],{"class":113},[103,58373,51324],{"class":51290},[103,58375,51297],{"class":113},[103,58377,58378],{"class":105,"line":1306},[103,58379,2389],{"emptyLinePlaceholder":30},[103,58381,58382,58384,58386],{"class":105,"line":1318},[103,58383,1023],{"class":113},[103,58385,51790],{"class":51290},[103,58387,51297],{"class":113},[103,58389,58390,58392,58394,58396,58398],{"class":105,"line":1601},[103,58391,52134],{"class":113},[103,58393,53877],{"class":51290},[103,58395,53883],{"class":113},[103,58397,53877],{"class":51290},[103,58399,51297],{"class":113},[103,58401,58402,58404,58406],{"class":105,"line":1606},[103,58403,52134],{"class":113},[103,58405,51803],{"class":51290},[103,58407,51297],{"class":113},[103,58409,58410,58412,58414,58416],{"class":105,"line":1612},[103,58411,11211],{"class":109},[103,58413,2229],{"class":162},[103,58415,13554],{"class":109},[103,58417,58418],{"class":162}," 10\n",[103,58420,58421,58423,58425,58427,58429,58431,58433,58435],{"class":105,"line":1617},[103,58422,11211],{"class":109},[103,58424,54381],{"class":162},[103,58426,13554],{"class":109},[103,58428,54386],{"class":113},[103,58430,54389],{"class":1952},[103,58432,114],{"class":113},[103,58434,58194],{"class":218},[103,58436,120],{"class":113},[103,58438,58439,58441,58443,58445,58447,58449,58451],{"class":105,"line":1631},[103,58440,58201],{"class":113},[103,58442,57803],{"class":1952},[103,58444,114],{"class":113},[103,58446,57808],{"class":218},[103,58448,12425],{"class":113},[103,58450,54439],{"class":109},[103,58452,54442],{"class":113},[103,58454,58455,58457,58459,58461,58463,58465],{"class":105,"line":1636},[103,58456,58218],{"class":109},[103,58458,2229],{"class":162},[103,58460,13554],{"class":109},[103,58462,58225],{"class":113},[103,58464,57850],{"class":1952},[103,58466,1965],{"class":113},[103,58468,58469,58471,58473],{"class":105,"line":1642},[103,58470,58234],{"class":113},[103,58472,58237],{"class":1952},[103,58474,127],{"class":113},[103,58476,58477],{"class":105,"line":1663},[103,58478,33451],{"class":113},[103,58480,58481,58483,58485],{"class":105,"line":1668},[103,58482,52407],{"class":113},[103,58484,51803],{"class":51290},[103,58486,51297],{"class":113},[103,58488,58489,58491,58493],{"class":105,"line":1682},[103,58490,51775],{"class":113},[103,58492,51790],{"class":51290},[103,58494,51297],{"class":113},[103,58496,58497],{"class":105,"line":1687},[103,58498,2389],{"emptyLinePlaceholder":30},[103,58500,58501,58503,58505],{"class":105,"line":1716},[103,58502,51775],{"class":113},[103,58504,50625],{"class":51290},[103,58506,51297],{"class":113},[14,58508,58509],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[94,58511,58513],{"className":50623,"code":58512,"language":50625,"meta":24,"style":24},"\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",[100,58514,58515,58525,58539,58543,58551,58565,58585,58597,58605,58609,58617,58629,58637,58647,58665,58681,58694,58702,58706,58714,58722,58726],{"__ignoreMap":24},[103,58516,58517,58519,58521,58523],{"class":105,"line":106},[103,58518,51287],{"class":113},[103,58520,51291],{"class":51290},[103,58522,51294],{"class":1952},[103,58524,51297],{"class":113},[103,58526,58527,58529,58531,58533,58535,58537],{"class":105,"line":25},[103,58528,1023],{"class":113},[103,58530,50625],{"class":51290},[103,58532,51306],{"class":1952},[103,58534,159],{"class":113},[103,58536,51311],{"class":218},[103,58538,51297],{"class":113},[103,58540,58541],{"class":105,"line":1168},[103,58542,2389],{"emptyLinePlaceholder":30},[103,58544,58545,58547,58549],{"class":105,"line":1183},[103,58546,1023],{"class":113},[103,58548,51324],{"class":51290},[103,58550,51297],{"class":113},[103,58552,58553,58555,58557,58559,58561,58563],{"class":105,"line":1189},[103,58554,52134],{"class":113},[103,58556,51334],{"class":51290},[103,58558,51337],{"class":1952},[103,58560,159],{"class":113},[103,58562,51342],{"class":218},[103,58564,51297],{"class":113},[103,58566,58567,58569,58571,58573,58575,58577,58579,58581,58583],{"class":105,"line":1203},[103,58568,52134],{"class":113},[103,58570,51334],{"class":51290},[103,58572,14910],{"class":1952},[103,58574,159],{"class":113},[103,58576,51381],{"class":218},[103,58578,51361],{"class":1952},[103,58580,159],{"class":113},[103,58582,51388],{"class":218},[103,58584,51297],{"class":113},[103,58586,58587,58589,58591,58593,58595],{"class":105,"line":1209},[103,58588,52134],{"class":113},[103,58590,51397],{"class":51290},[103,58592,51400],{"class":113},[103,58594,51397],{"class":51290},[103,58596,51297],{"class":113},[103,58598,58599,58601,58603],{"class":105,"line":1300},[103,58600,51775],{"class":113},[103,58602,51324],{"class":51290},[103,58604,51297],{"class":113},[103,58606,58607],{"class":105,"line":1306},[103,58608,2389],{"emptyLinePlaceholder":30},[103,58610,58611,58613,58615],{"class":105,"line":1318},[103,58612,1023],{"class":113},[103,58614,51790],{"class":51290},[103,58616,51297],{"class":113},[103,58618,58619,58621,58623,58625,58627],{"class":105,"line":1601},[103,58620,52134],{"class":113},[103,58622,53877],{"class":51290},[103,58624,53883],{"class":113},[103,58626,53877],{"class":51290},[103,58628,51297],{"class":113},[103,58630,58631,58633,58635],{"class":105,"line":1606},[103,58632,52134],{"class":113},[103,58634,51803],{"class":51290},[103,58636,51297],{"class":113},[103,58638,58639,58641,58643,58645],{"class":105,"line":1612},[103,58640,11211],{"class":109},[103,58642,2229],{"class":162},[103,58644,13554],{"class":109},[103,58646,58418],{"class":162},[103,58648,58649,58651,58653,58655,58657,58659,58661,58663],{"class":105,"line":1617},[103,58650,11211],{"class":109},[103,58652,54381],{"class":162},[103,58654,13554],{"class":109},[103,58656,54386],{"class":113},[103,58658,54389],{"class":1952},[103,58660,114],{"class":113},[103,58662,58194],{"class":218},[103,58664,120],{"class":113},[103,58666,58667,58669,58671,58673,58675,58677,58679],{"class":105,"line":1631},[103,58668,58201],{"class":113},[103,58670,57803],{"class":1952},[103,58672,114],{"class":113},[103,58674,57808],{"class":218},[103,58676,12425],{"class":113},[103,58678,54439],{"class":109},[103,58680,54442],{"class":113},[103,58682,58683,58686,58688,58690,58692],{"class":105,"line":1636},[103,58684,58685],{"class":113},"      num ",[103,58687,159],{"class":109},[103,58689,58225],{"class":113},[103,58691,57850],{"class":1952},[103,58693,1965],{"class":113},[103,58695,58696,58698,58700],{"class":105,"line":1642},[103,58697,58234],{"class":113},[103,58699,58237],{"class":1952},[103,58701,127],{"class":113},[103,58703,58704],{"class":105,"line":1663},[103,58705,33451],{"class":113},[103,58707,58708,58710,58712],{"class":105,"line":1668},[103,58709,52407],{"class":113},[103,58711,51803],{"class":51290},[103,58713,51297],{"class":113},[103,58715,58716,58718,58720],{"class":105,"line":1682},[103,58717,51775],{"class":113},[103,58719,51790],{"class":51290},[103,58721,51297],{"class":113},[103,58723,58724],{"class":105,"line":1687},[103,58725,2389],{"emptyLinePlaceholder":30},[103,58727,58728,58730,58732],{"class":105,"line":1716},[103,58729,51775],{"class":113},[103,58731,50625],{"class":51290},[103,58733,51297],{"class":113},[14,58735,58736],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[74,58738,58740],{"id":58739},"_324-事件监听版本","3.2.4 事件监听版本",[14,58742,58743],{},[1451,58744],{"alt":24,"src":58745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58747,58748],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58750,58751],{},"这种方式会覆盖前边的事件监听:",[94,58753,58755],{"className":50623,"code":58754,"language":50625,"meta":24,"style":24},"\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",[100,58756,58757,58767,58781,58785,58793,58807,58827,58839,58847,58851,58859,58871,58879,58897,58911,58922,58926,58938,58948,58952,58960,58968,58972],{"__ignoreMap":24},[103,58758,58759,58761,58763,58765],{"class":105,"line":106},[103,58760,51287],{"class":113},[103,58762,51291],{"class":51290},[103,58764,51294],{"class":1952},[103,58766,51297],{"class":113},[103,58768,58769,58771,58773,58775,58777,58779],{"class":105,"line":25},[103,58770,1023],{"class":113},[103,58772,50625],{"class":51290},[103,58774,51306],{"class":1952},[103,58776,159],{"class":113},[103,58778,51311],{"class":218},[103,58780,51297],{"class":113},[103,58782,58783],{"class":105,"line":1168},[103,58784,2389],{"emptyLinePlaceholder":30},[103,58786,58787,58789,58791],{"class":105,"line":1183},[103,58788,1023],{"class":113},[103,58790,51324],{"class":51290},[103,58792,51297],{"class":113},[103,58794,58795,58797,58799,58801,58803,58805],{"class":105,"line":1189},[103,58796,52134],{"class":113},[103,58798,51334],{"class":51290},[103,58800,51337],{"class":1952},[103,58802,159],{"class":113},[103,58804,51342],{"class":218},[103,58806,51297],{"class":113},[103,58808,58809,58811,58813,58815,58817,58819,58821,58823,58825],{"class":105,"line":1203},[103,58810,52134],{"class":113},[103,58812,51334],{"class":51290},[103,58814,14910],{"class":1952},[103,58816,159],{"class":113},[103,58818,51381],{"class":218},[103,58820,51361],{"class":1952},[103,58822,159],{"class":113},[103,58824,51388],{"class":218},[103,58826,51297],{"class":113},[103,58828,58829,58831,58833,58835,58837],{"class":105,"line":1209},[103,58830,52134],{"class":113},[103,58832,51397],{"class":51290},[103,58834,51400],{"class":113},[103,58836,51397],{"class":51290},[103,58838,51297],{"class":113},[103,58840,58841,58843,58845],{"class":105,"line":1300},[103,58842,51775],{"class":113},[103,58844,51324],{"class":51290},[103,58846,51297],{"class":113},[103,58848,58849],{"class":105,"line":1306},[103,58850,2389],{"emptyLinePlaceholder":30},[103,58852,58853,58855,58857],{"class":105,"line":1318},[103,58854,1023],{"class":113},[103,58856,51790],{"class":51290},[103,58858,51297],{"class":113},[103,58860,58861,58863,58865,58867,58869],{"class":105,"line":1601},[103,58862,52134],{"class":113},[103,58864,53877],{"class":51290},[103,58866,53883],{"class":113},[103,58868,53877],{"class":51290},[103,58870,51297],{"class":113},[103,58872,58873,58875,58877],{"class":105,"line":1606},[103,58874,52134],{"class":113},[103,58876,51803],{"class":51290},[103,58878,51297],{"class":113},[103,58880,58881,58883,58885,58887,58889,58891,58893,58895],{"class":105,"line":1612},[103,58882,11211],{"class":109},[103,58884,54381],{"class":162},[103,58886,13554],{"class":109},[103,58888,54386],{"class":113},[103,58890,54389],{"class":1952},[103,58892,114],{"class":113},[103,58894,58194],{"class":218},[103,58896,120],{"class":113},[103,58898,58899,58901,58904,58906,58909],{"class":105,"line":1617},[103,58900,58201],{"class":113},[103,58902,58903],{"class":1952},"onclick",[103,58905,13554],{"class":109},[103,58907,58908],{"class":109}," function",[103,58910,54442],{"class":113},[103,58912,58913,58916,58918,58920],{"class":105,"line":1631},[103,58914,58915],{"class":1952},"      alert",[103,58917,114],{"class":113},[103,58919,585],{"class":162},[103,58921,120],{"class":113},[103,58923,58924],{"class":105,"line":1636},[103,58925,2176],{"class":113},[103,58927,58928,58930,58932,58934,58936],{"class":105,"line":1642},[103,58929,58201],{"class":113},[103,58931,58903],{"class":1952},[103,58933,13554],{"class":109},[103,58935,58908],{"class":109},[103,58937,54442],{"class":113},[103,58939,58940,58942,58944,58946],{"class":105,"line":1663},[103,58941,58915],{"class":1952},[103,58943,114],{"class":113},[103,58945,863],{"class":162},[103,58947,120],{"class":113},[103,58949,58950],{"class":105,"line":1668},[103,58951,2176],{"class":113},[103,58953,58954,58956,58958],{"class":105,"line":1682},[103,58955,52407],{"class":113},[103,58957,51803],{"class":51290},[103,58959,51297],{"class":113},[103,58961,58962,58964,58966],{"class":105,"line":1687},[103,58963,51775],{"class":113},[103,58965,51790],{"class":51290},[103,58967,51297],{"class":113},[103,58969,58970],{"class":105,"line":1716},[103,58971,2389],{"emptyLinePlaceholder":30},[103,58973,58974,58976,58978],{"class":105,"line":1721},[103,58975,51775],{"class":113},[103,58977,50625],{"class":51290},[103,58979,51297],{"class":113},[14,58981,58982],{},"只要点击就输出结果为22,前边11被覆盖了",[94,58984,58986],{"className":50623,"code":58985,"language":50625,"meta":24,"style":24},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[100,58987,58988,58993,58998,59002,59007,59012],{"__ignoreMap":24},[103,58989,58990],{"class":105,"line":106},[103,58991,58992],{"class":113},"  btn.addEventListener('click', function () {\n",[103,58994,58995],{"class":105,"line":25},[103,58996,58997],{"class":113},"      alert(11)\n",[103,58999,59000],{"class":105,"line":1168},[103,59001,33451],{"class":113},[103,59003,59004],{"class":105,"line":1183},[103,59005,59006],{"class":113},"    btn.addEventListener('click', function () {\n",[103,59008,59009],{"class":105,"line":1189},[103,59010,59011],{"class":113},"      alert(22)\n",[103,59013,59014],{"class":105,"line":1203},[103,59015,33451],{"class":113},[14,59017,59018],{},"点击第一次输出11,第二次点击为22",[74,59020,59022],{"id":59021},"_325-事件类型","3.2.5 事件类型",[14,59024,59025],{},[1451,59026],{"alt":24,"src":59027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21988,59029,59031],{"id":59030},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59033,59034],{},"补充知识:",[14,59036,59037],{},"轮播图自动播放模块,可以使用",[14,59039,59040],{},"let timerId = setInterval(function () {",[14,59042,59043],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59045,59046],{},"用js方法模拟进行点击事件,click必须加()",[14,59048,59049],{},"next.click()",[14,59051,59052],{},"}, 1000)",[14,59054,59055],{},[1451,59056],{"alt":24,"src":59057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[94,59059,59061],{"className":53057,"code":59060,"language":53059,"meta":24,"style":24},"\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",[100,59062,59063,59067,59077,59091,59095,59103,59118,59138,59158,59171,59179,59184,59189,59193,59197,59202,59207,59212,59217,59221,59225,59230,59235,59240,59244,59248,59253,59257,59262,59267,59271,59275,59280,59285,59290,59295,59300,59304,59308,59313,59318,59323,59328,59333,59337,59341,59346,59351,59356,59361,59366,59371,59376,59381,59386,59391,59395,59399,59404,59409,59413,59417,59422,59427,59431,59436,59441,59445,59449,59454,59458,59463,59468,59472,59477,59481,59485,59490,59495,59500,59505,59510,59515,59520,59524,59528,59532,59537,59542,59547,59552,59556,59564,59572,59576,59584,59599,59613,59634,59642,59656,59669,59684,59703,59715,59727,59739,59751,59763,59775,59787,59795,59810,59834,59858,59866,59874,59882,59890,59895,59900,59905,59910,59915,59920,59925,59930,59935,59940,59944,59949,59954,59959,59964,59969,59974,59979,59984,59989,59993,59998,60003,60008,60013,60018,60023,60028,60033,60038,60043,60048,60053,60057,60061,60066,60071,60076,60080,60085,60090,60095,60100,60105,60109,60114,60118,60122,60126,60130,60134,60138,60143,60148,60153,60158,60163,60168,60173,60178,60183,60187,60191,60196,60201,60206,60211,60216,60220,60225,60230,60235,60240,60245,60250,60254,60258,60263,60267,60272,60276,60281,60286,60291,60296,60301,60306,60310,60318,60326,60330],{"__ignoreMap":24},[103,59064,59065],{"class":105,"line":106},[103,59066,2389],{"emptyLinePlaceholder":30},[103,59068,59069,59071,59073,59075],{"class":105,"line":25},[103,59070,51287],{"class":113},[103,59072,51291],{"class":109},[103,59074,51294],{"class":162},[103,59076,51297],{"class":113},[103,59078,59079,59081,59083,59085,59087,59089],{"class":105,"line":1168},[103,59080,1023],{"class":113},[103,59082,50625],{"class":51290},[103,59084,51306],{"class":1952},[103,59086,159],{"class":113},[103,59088,51311],{"class":218},[103,59090,51297],{"class":113},[103,59092,59093],{"class":105,"line":1183},[103,59094,2389],{"emptyLinePlaceholder":30},[103,59096,59097,59099,59101],{"class":105,"line":1189},[103,59098,1023],{"class":113},[103,59100,51324],{"class":51290},[103,59102,51297],{"class":113},[103,59104,59105,59107,59109,59111,59113,59115],{"class":105,"line":1203},[103,59106,52134],{"class":113},[103,59108,51334],{"class":51290},[103,59110,51337],{"class":1952},[103,59112,159],{"class":113},[103,59114,51342],{"class":218},[103,59116,59117],{"class":113}," \u002F>\n",[103,59119,59120,59122,59124,59126,59128,59130,59132,59134,59136],{"class":105,"line":1209},[103,59121,52134],{"class":113},[103,59123,51334],{"class":51290},[103,59125,51353],{"class":1952},[103,59127,159],{"class":113},[103,59129,51358],{"class":218},[103,59131,51361],{"class":1952},[103,59133,159],{"class":113},[103,59135,51366],{"class":218},[103,59137,59117],{"class":113},[103,59139,59140,59142,59144,59146,59148,59150,59152,59154,59156],{"class":105,"line":1300},[103,59141,52134],{"class":113},[103,59143,51334],{"class":51290},[103,59145,14910],{"class":1952},[103,59147,159],{"class":113},[103,59149,51381],{"class":218},[103,59151,51361],{"class":1952},[103,59153,159],{"class":113},[103,59155,51388],{"class":218},[103,59157,59117],{"class":113},[103,59159,59160,59162,59164,59167,59169],{"class":105,"line":1306},[103,59161,52134],{"class":113},[103,59163,51397],{"class":51290},[103,59165,59166],{"class":113},">轮播图点击切换\u003C\u002F",[103,59168,51397],{"class":51290},[103,59170,51297],{"class":113},[103,59172,59173,59175,59177],{"class":105,"line":1318},[103,59174,52134],{"class":113},[103,59176,5116],{"class":51290},[103,59178,51297],{"class":113},[103,59180,59181],{"class":105,"line":1601},[103,59182,59183],{"class":113},"    * {\n",[103,59185,59186],{"class":105,"line":1606},[103,59187,59188],{"class":113},"      box-sizing: border-box;\n",[103,59190,59191],{"class":105,"line":1612},[103,59192,2176],{"class":113},[103,59194,59195],{"class":105,"line":1617},[103,59196,2389],{"emptyLinePlaceholder":30},[103,59198,59199],{"class":105,"line":1631},[103,59200,59201],{"class":113},"    .slider {\n",[103,59203,59204],{"class":105,"line":1636},[103,59205,59206],{"class":113},"      width: 560px;\n",[103,59208,59209],{"class":105,"line":1642},[103,59210,59211],{"class":113},"      height: 400px;\n",[103,59213,59214],{"class":105,"line":1663},[103,59215,59216],{"class":113},"      overflow: hidden;\n",[103,59218,59219],{"class":105,"line":1668},[103,59220,2176],{"class":113},[103,59222,59223],{"class":105,"line":1682},[103,59224,2389],{"emptyLinePlaceholder":30},[103,59226,59227],{"class":105,"line":1687},[103,59228,59229],{"class":113},"    .slider-wrapper {\n",[103,59231,59232],{"class":105,"line":1716},[103,59233,59234],{"class":113},"      width: 100%;\n",[103,59236,59237],{"class":105,"line":1721},[103,59238,59239],{"class":113},"      height: 320px;\n",[103,59241,59242],{"class":105,"line":1738},[103,59243,2176],{"class":113},[103,59245,59246],{"class":105,"line":1743},[103,59247,2389],{"emptyLinePlaceholder":30},[103,59249,59250],{"class":105,"line":1748},[103,59251,59252],{"class":113},"    .slider-wrapper img {\n",[103,59254,59255],{"class":105,"line":1753},[103,59256,59234],{"class":113},[103,59258,59259],{"class":105,"line":1767},[103,59260,59261],{"class":113},"      height: 100%;\n",[103,59263,59264],{"class":105,"line":1772},[103,59265,59266],{"class":113},"      display: block;\n",[103,59268,59269],{"class":105,"line":2566},[103,59270,2176],{"class":113},[103,59272,59273],{"class":105,"line":2580},[103,59274,2389],{"emptyLinePlaceholder":30},[103,59276,59277],{"class":105,"line":2588},[103,59278,59279],{"class":113},"    .slider-footer {\n",[103,59281,59282],{"class":105,"line":2593},[103,59283,59284],{"class":113},"      height: 80px;\n",[103,59286,59287],{"class":105,"line":2599},[103,59288,59289],{"class":113},"      background-color: rgb(100, 67, 68);\n",[103,59291,59292],{"class":105,"line":2605},[103,59293,59294],{"class":113},"      padding: 12px 12px 0 12px;\n",[103,59296,59297],{"class":105,"line":2610},[103,59298,59299],{"class":113},"      position: relative;\n",[103,59301,59302],{"class":105,"line":7938},[103,59303,2176],{"class":113},[103,59305,59306],{"class":105,"line":7962},[103,59307,2389],{"emptyLinePlaceholder":30},[103,59309,59310],{"class":105,"line":7967},[103,59311,59312],{"class":113},"    .slider-footer .toggle {\n",[103,59314,59315],{"class":105,"line":7973},[103,59316,59317],{"class":113},"      position: absolute;\n",[103,59319,59320],{"class":105,"line":8000},[103,59321,59322],{"class":113},"      right: 0;\n",[103,59324,59325],{"class":105,"line":8005},[103,59326,59327],{"class":113},"      top: 12px;\n",[103,59329,59330],{"class":105,"line":8011},[103,59331,59332],{"class":113},"      display: flex;\n",[103,59334,59335],{"class":105,"line":8023},[103,59336,2176],{"class":113},[103,59338,59339],{"class":105,"line":8035},[103,59340,2389],{"emptyLinePlaceholder":30},[103,59342,59343],{"class":105,"line":8047},[103,59344,59345],{"class":113},"    .slider-footer .toggle button {\n",[103,59347,59348],{"class":105,"line":9706},[103,59349,59350],{"class":113},"      margin-right: 12px;\n",[103,59352,59353],{"class":105,"line":9731},[103,59354,59355],{"class":113},"      width: 28px;\n",[103,59357,59358],{"class":105,"line":9754},[103,59359,59360],{"class":113},"      height: 28px;\n",[103,59362,59363],{"class":105,"line":9778},[103,59364,59365],{"class":113},"      appearance: none;\n",[103,59367,59368],{"class":105,"line":9783},[103,59369,59370],{"class":113},"      border: none;\n",[103,59372,59373],{"class":105,"line":9788},[103,59374,59375],{"class":113},"      background: rgba(255, 255, 255, 0.1);\n",[103,59377,59378],{"class":105,"line":9793},[103,59379,59380],{"class":113},"      color: #fff;\n",[103,59382,59383],{"class":105,"line":9802},[103,59384,59385],{"class":113},"      border-radius: 4px;\n",[103,59387,59388],{"class":105,"line":9807},[103,59389,59390],{"class":113},"      cursor: pointer;\n",[103,59392,59393],{"class":105,"line":9813},[103,59394,2176],{"class":113},[103,59396,59397],{"class":105,"line":9834},[103,59398,2389],{"emptyLinePlaceholder":30},[103,59400,59401],{"class":105,"line":9840},[103,59402,59403],{"class":113},"    .slider-footer .toggle button:hover {\n",[103,59405,59406],{"class":105,"line":9854},[103,59407,59408],{"class":113},"      background: rgba(255, 255, 255, 0.2);\n",[103,59410,59411],{"class":105,"line":9860},[103,59412,2176],{"class":113},[103,59414,59415],{"class":105,"line":9887},[103,59416,2389],{"emptyLinePlaceholder":30},[103,59418,59419],{"class":105,"line":9896},[103,59420,59421],{"class":113},"    .slider-footer p {\n",[103,59423,59424],{"class":105,"line":9902},[103,59425,59426],{"class":113},"      margin: 0;\n",[103,59428,59429],{"class":105,"line":9910},[103,59430,59380],{"class":113},[103,59432,59433],{"class":105,"line":9915},[103,59434,59435],{"class":113},"      font-size: 18px;\n",[103,59437,59438],{"class":105,"line":16594},[103,59439,59440],{"class":113},"      margin-bottom: 10px;\n",[103,59442,59443],{"class":105,"line":16600},[103,59444,2176],{"class":113},[103,59446,59447],{"class":105,"line":16623},[103,59448,2389],{"emptyLinePlaceholder":30},[103,59450,59451],{"class":105,"line":16629},[103,59452,59453],{"class":113},"    .slider-indicator {\n",[103,59455,59456],{"class":105,"line":16652},[103,59457,59426],{"class":113},[103,59459,59460],{"class":105,"line":16666},[103,59461,59462],{"class":113},"      padding: 0;\n",[103,59464,59465],{"class":105,"line":16686},[103,59466,59467],{"class":113},"      list-style: none;\n",[103,59469,59470],{"class":105,"line":16692},[103,59471,59332],{"class":113},[103,59473,59474],{"class":105,"line":16703},[103,59475,59476],{"class":113},"      align-items: center;\n",[103,59478,59479],{"class":105,"line":16726},[103,59480,2176],{"class":113},[103,59482,59483],{"class":105,"line":16748},[103,59484,2389],{"emptyLinePlaceholder":30},[103,59486,59487],{"class":105,"line":16753},[103,59488,59489],{"class":113},"    .slider-indicator li {\n",[103,59491,59492],{"class":105,"line":16759},[103,59493,59494],{"class":113},"      width: 8px;\n",[103,59496,59497],{"class":105,"line":16773},[103,59498,59499],{"class":113},"      height: 8px;\n",[103,59501,59502],{"class":105,"line":16786},[103,59503,59504],{"class":113},"      margin: 4px;\n",[103,59506,59507],{"class":105,"line":16791},[103,59508,59509],{"class":113},"      border-radius: 50%;\n",[103,59511,59512],{"class":105,"line":16805},[103,59513,59514],{"class":113},"      background: #fff;\n",[103,59516,59517],{"class":105,"line":16810},[103,59518,59519],{"class":113},"      opacity: 0.4;\n",[103,59521,59522],{"class":105,"line":16816},[103,59523,59390],{"class":113},[103,59525,59526],{"class":105,"line":16821},[103,59527,2176],{"class":113},[103,59529,59530],{"class":105,"line":16835},[103,59531,2389],{"emptyLinePlaceholder":30},[103,59533,59534],{"class":105,"line":16840},[103,59535,59536],{"class":113},"    .slider-indicator li.active {\n",[103,59538,59539],{"class":105,"line":16845},[103,59540,59541],{"class":113},"      width: 12px;\n",[103,59543,59544],{"class":105,"line":16859},[103,59545,59546],{"class":113},"      height: 12px;\n",[103,59548,59549],{"class":105,"line":16871},[103,59550,59551],{"class":113},"      opacity: 1;\n",[103,59553,59554],{"class":105,"line":16876},[103,59555,2176],{"class":113},[103,59557,59558,59560,59562],{"class":105,"line":16889},[103,59559,52407],{"class":113},[103,59561,5116],{"class":51290},[103,59563,51297],{"class":113},[103,59565,59566,59568,59570],{"class":105,"line":16894},[103,59567,51775],{"class":113},[103,59569,51324],{"class":51290},[103,59571,51297],{"class":113},[103,59573,59574],{"class":105,"line":16899},[103,59575,2389],{"emptyLinePlaceholder":30},[103,59577,59578,59580,59582],{"class":105,"line":16904},[103,59579,1023],{"class":113},[103,59581,51790],{"class":51290},[103,59583,51297],{"class":113},[103,59585,59586,59588,59590,59592,59594,59597],{"class":105,"line":16917},[103,59587,52134],{"class":113},[103,59589,51601],{"class":51290},[103,59591,53476],{"class":1952},[103,59593,159],{"class":113},[103,59595,59596],{"class":218},"\"slider\"",[103,59598,51297],{"class":113},[103,59600,59601,59603,59605,59607,59609,59611],{"class":105,"line":16922},[103,59602,51331],{"class":113},[103,59604,51601],{"class":51290},[103,59606,53476],{"class":1952},[103,59608,159],{"class":113},[103,59610,55217],{"class":218},[103,59612,51297],{"class":113},[103,59614,59615,59617,59619,59621,59623,59626,59628,59630,59632],{"class":105,"line":32623},[103,59616,55224],{"class":113},[103,59618,1451],{"class":51290},[103,59620,55229],{"class":1952},[103,59622,159],{"class":113},[103,59624,59625],{"class":218},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[103,59627,55237],{"class":1952},[103,59629,159],{"class":113},[103,59631,7642],{"class":218},[103,59633,59117],{"class":113},[103,59635,59636,59638,59640],{"class":105,"line":32629},[103,59637,51766],{"class":113},[103,59639,51601],{"class":51290},[103,59641,51297],{"class":113},[103,59643,59644,59646,59648,59650,59652,59654],{"class":105,"line":32635},[103,59645,51331],{"class":113},[103,59647,51601],{"class":51290},[103,59649,53476],{"class":1952},[103,59651,159],{"class":113},[103,59653,55264],{"class":218},[103,59655,51297],{"class":113},[103,59657,59658,59660,59662,59665,59667],{"class":105,"line":32641},[103,59659,55224],{"class":113},[103,59661,14],{"class":51290},[103,59663,59664],{"class":113},">对人类来说会不会太超前了？\u003C\u002F",[103,59666,14],{"class":51290},[103,59668,51297],{"class":113},[103,59670,59671,59673,59675,59677,59679,59682],{"class":105,"line":32647},[103,59672,55224],{"class":113},[103,59674,1120],{"class":51290},[103,59676,53476],{"class":1952},[103,59678,159],{"class":113},[103,59680,59681],{"class":218},"\"slider-indicator\"",[103,59683,51297],{"class":113},[103,59685,59686,59688,59690,59692,59694,59697,59699,59701],{"class":105,"line":32658},[103,59687,55292],{"class":113},[103,59689,60],{"class":51290},[103,59691,53476],{"class":1952},[103,59693,159],{"class":113},[103,59695,59696],{"class":218},"\"active\"",[103,59698,55304],{"class":113},[103,59700,60],{"class":51290},[103,59702,51297],{"class":113},[103,59704,59705,59707,59709,59711,59713],{"class":105,"line":32664},[103,59706,55292],{"class":113},[103,59708,60],{"class":51290},[103,59710,55304],{"class":113},[103,59712,60],{"class":51290},[103,59714,51297],{"class":113},[103,59716,59717,59719,59721,59723,59725],{"class":105,"line":32684},[103,59718,55292],{"class":113},[103,59720,60],{"class":51290},[103,59722,55304],{"class":113},[103,59724,60],{"class":51290},[103,59726,51297],{"class":113},[103,59728,59729,59731,59733,59735,59737],{"class":105,"line":32690},[103,59730,55292],{"class":113},[103,59732,60],{"class":51290},[103,59734,55304],{"class":113},[103,59736,60],{"class":51290},[103,59738,51297],{"class":113},[103,59740,59741,59743,59745,59747,59749],{"class":105,"line":32701},[103,59742,55292],{"class":113},[103,59744,60],{"class":51290},[103,59746,55304],{"class":113},[103,59748,60],{"class":51290},[103,59750,51297],{"class":113},[103,59752,59753,59755,59757,59759,59761],{"class":105,"line":32707},[103,59754,55292],{"class":113},[103,59756,60],{"class":51290},[103,59758,55304],{"class":113},[103,59760,60],{"class":51290},[103,59762,51297],{"class":113},[103,59764,59765,59767,59769,59771,59773],{"class":105,"line":32713},[103,59766,55292],{"class":113},[103,59768,60],{"class":51290},[103,59770,55304],{"class":113},[103,59772,60],{"class":51290},[103,59774,51297],{"class":113},[103,59776,59777,59779,59781,59783,59785],{"class":105,"line":32719},[103,59778,55292],{"class":113},[103,59780,60],{"class":51290},[103,59782,55304],{"class":113},[103,59784,60],{"class":51290},[103,59786,51297],{"class":113},[103,59788,59789,59791,59793],{"class":105,"line":32725},[103,59790,55397],{"class":113},[103,59792,1120],{"class":51290},[103,59794,51297],{"class":113},[103,59796,59797,59799,59801,59803,59805,59808],{"class":105,"line":32731},[103,59798,55224],{"class":113},[103,59800,51601],{"class":51290},[103,59802,53476],{"class":1952},[103,59804,159],{"class":113},[103,59806,59807],{"class":218},"\"toggle\"",[103,59809,51297],{"class":113},[103,59811,59812,59814,59816,59818,59820,59823,59825,59828,59830,59832],{"class":105,"line":32737},[103,59813,55292],{"class":113},[103,59815,53877],{"class":51290},[103,59817,53476],{"class":1952},[103,59819,159],{"class":113},[103,59821,59822],{"class":218},"\"prev\"",[103,59824,1073],{"class":113},[103,59826,59827],{"class":162},"&lt;",[103,59829,51775],{"class":113},[103,59831,53877],{"class":51290},[103,59833,51297],{"class":113},[103,59835,59836,59838,59840,59842,59844,59847,59849,59852,59854,59856],{"class":105,"line":32743},[103,59837,55292],{"class":113},[103,59839,53877],{"class":51290},[103,59841,53476],{"class":1952},[103,59843,159],{"class":113},[103,59845,59846],{"class":218},"\"next\"",[103,59848,1073],{"class":113},[103,59850,59851],{"class":162},"&gt;",[103,59853,51775],{"class":113},[103,59855,53877],{"class":51290},[103,59857,51297],{"class":113},[103,59859,59860,59862,59864],{"class":105,"line":32763},[103,59861,55397],{"class":113},[103,59863,51601],{"class":51290},[103,59865,51297],{"class":113},[103,59867,59868,59870,59872],{"class":105,"line":32769},[103,59869,51766],{"class":113},[103,59871,51601],{"class":51290},[103,59873,51297],{"class":113},[103,59875,59876,59878,59880],{"class":105,"line":32785},[103,59877,52407],{"class":113},[103,59879,51601],{"class":51290},[103,59881,51297],{"class":113},[103,59883,59884,59886,59888],{"class":105,"line":32791},[103,59885,52134],{"class":113},[103,59887,51803],{"class":51290},[103,59889,51297],{"class":113},[103,59891,59892],{"class":105,"line":32805},[103,59893,59894],{"class":113},"    \u002F\u002F 1. 初始数据\n",[103,59896,59897],{"class":105,"line":32811},[103,59898,59899],{"class":113},"    const data = [\n",[103,59901,59902],{"class":105,"line":32826},[103,59903,59904],{"class":113},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[103,59906,59907],{"class":105,"line":32832},[103,59908,59909],{"class":113},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[103,59911,59912],{"class":105,"line":32841},[103,59913,59914],{"class":113},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[103,59916,59917],{"class":105,"line":32847},[103,59918,59919],{"class":113},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[103,59921,59922],{"class":105,"line":32856},[103,59923,59924],{"class":113},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[103,59926,59927],{"class":105,"line":32862},[103,59928,59929],{"class":113},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[103,59931,59932],{"class":105,"line":32868},[103,59933,59934],{"class":113},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[103,59936,59937],{"class":105,"line":32877},[103,59938,59939],{"class":113},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[103,59941,59942],{"class":105,"line":32883},[103,59943,53099],{"class":113},[103,59945,59946],{"class":105,"line":32894},[103,59947,59948],{"class":113},"    \u002F\u002F 获取元素\n",[103,59950,59951],{"class":105,"line":32900},[103,59952,59953],{"class":113},"    const img = document.querySelector('.slider-wrapper img')\n",[103,59955,59956],{"class":105,"line":32919},[103,59957,59958],{"class":113},"    const p = document.querySelector('.slider-footer p')\n",[103,59960,59961],{"class":105,"line":32925},[103,59962,59963],{"class":113},"    const footer = document.querySelector('.slider-footer')\n",[103,59965,59966],{"class":105,"line":32936},[103,59967,59968],{"class":113},"    \u002F\u002F 1. 右按钮业务\n",[103,59970,59971],{"class":105,"line":32942},[103,59972,59973],{"class":113},"    \u002F\u002F 1.1 获取右侧按钮 \n",[103,59975,59976],{"class":105,"line":32962},[103,59977,59978],{"class":113},"    const next = document.querySelector('.next')\n",[103,59980,59981],{"class":105,"line":32978},[103,59982,59983],{"class":113},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[103,59985,59986],{"class":105,"line":32984},[103,59987,59988],{"class":113},"    \u002F\u002F 1.2 注册点击事件\n",[103,59990,59991],{"class":105,"line":32998},[103,59992,2389],{"emptyLinePlaceholder":30},[103,59994,59995],{"class":105,"line":33004},[103,59996,59997],{"class":113},"    next.addEventListener('click', function () {\n",[103,59999,60000],{"class":105,"line":33010},[103,60001,60002],{"class":113},"      \u002F\u002F console.log(11)\n",[103,60004,60005],{"class":105,"line":33021},[103,60006,60007],{"class":113},"      i++\n",[103,60009,60010],{"class":105,"line":33027},[103,60011,60012],{"class":113},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[103,60014,60015],{"class":105,"line":33033},[103,60016,60017],{"class":113},"      \u002F\u002F if (i >= 8) {\n",[103,60019,60020],{"class":105,"line":33043},[103,60021,60022],{"class":113},"      \u002F\u002F   i = 0\n",[103,60024,60025],{"class":105,"line":33049},[103,60026,60027],{"class":113},"      \u002F\u002F }\n",[103,60029,60030],{"class":105,"line":33060},[103,60031,60032],{"class":113},"      i = i >= data.length ? 0 : i\n",[103,60034,60035],{"class":105,"line":33066},[103,60036,60037],{"class":113},"      \u002F\u002F 1.3 得到对应的对象\n",[103,60039,60040],{"class":105,"line":33076},[103,60041,60042],{"class":113},"      \u002F\u002F console.log(data[i])\n",[103,60044,60045],{"class":105,"line":33081},[103,60046,60047],{"class":113},"      \u002F\u002F 调用函数\n",[103,60049,60050],{"class":105,"line":33087},[103,60051,60052],{"class":113},"      toggle()\n",[103,60054,60055],{"class":105,"line":33136},[103,60056,33451],{"class":113},[103,60058,60059],{"class":105,"line":33183},[103,60060,2389],{"emptyLinePlaceholder":30},[103,60062,60063],{"class":105,"line":33188},[103,60064,60065],{"class":113},"    \u002F\u002F 2. 左侧按钮业务\n",[103,60067,60068],{"class":105,"line":33194},[103,60069,60070],{"class":113},"    \u002F\u002F 2.1 获取左侧按钮 \n",[103,60072,60073],{"class":105,"line":33213},[103,60074,60075],{"class":113},"    const prev = document.querySelector('.prev')\n",[103,60077,60078],{"class":105,"line":33219},[103,60079,59988],{"class":113},[103,60081,60082],{"class":105,"line":33239},[103,60083,60084],{"class":113},"    prev.addEventListener('click', function () {\n",[103,60086,60087],{"class":105,"line":33245},[103,60088,60089],{"class":113},"      i--\n",[103,60091,60092],{"class":105,"line":33251},[103,60093,60094],{"class":113},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[103,60096,60097],{"class":105,"line":33261},[103,60098,60099],{"class":113},"      \u002F\u002F if (i \u003C 0) {\n",[103,60101,60102],{"class":105,"line":33266},[103,60103,60104],{"class":113},"      \u002F\u002F   i = 7\n",[103,60106,60107],{"class":105,"line":33272},[103,60108,60027],{"class":113},[103,60110,60111],{"class":105,"line":33288},[103,60112,60113],{"class":113},"      i = i \u003C 0 ? data.length - 1 : i\n",[103,60115,60116],{"class":105,"line":33333},[103,60117,60037],{"class":113},[103,60119,60120],{"class":105,"line":33339},[103,60121,60042],{"class":113},[103,60123,60124],{"class":105,"line":33345},[103,60125,60047],{"class":113},[103,60127,60128],{"class":105,"line":33351},[103,60129,60052],{"class":113},[103,60131,60132],{"class":105,"line":33362},[103,60133,33451],{"class":113},[103,60135,60136],{"class":105,"line":33368},[103,60137,2389],{"emptyLinePlaceholder":30},[103,60139,60140],{"class":105,"line":33374},[103,60141,60142],{"class":113},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[103,60144,60145],{"class":105,"line":33380},[103,60146,60147],{"class":113},"    function toggle() {\n",[103,60149,60150],{"class":105,"line":33398},[103,60151,60152],{"class":113},"      \u002F\u002F 1.4 渲染对应的数据\n",[103,60154,60155],{"class":105,"line":33412},[103,60156,60157],{"class":113},"      img.src = data[i].url\n",[103,60159,60160],{"class":105,"line":33421},[103,60161,60162],{"class":113},"      p.innerHTML = data[i].title\n",[103,60164,60165],{"class":105,"line":33430},[103,60166,60167],{"class":113},"      footer.style.backgroundColor = data[i].color\n",[103,60169,60170],{"class":105,"line":33439},[103,60171,60172],{"class":113},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[103,60174,60175],{"class":105,"line":33448},[103,60176,60177],{"class":113},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[103,60179,60180],{"class":105,"line":33454},[103,60181,60182],{"class":113},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[103,60184,60185],{"class":105,"line":33460},[103,60186,2176],{"class":113},[103,60188,60189],{"class":105,"line":33468},[103,60190,2389],{"emptyLinePlaceholder":30},[103,60192,60193],{"class":105,"line":33473},[103,60194,60195],{"class":113},"    \u002F\u002F 3. 自动播放模块\n",[103,60197,60198],{"class":105,"line":33479},[103,60199,60200],{"class":113},"    let timerId = setInterval(function () {\n",[103,60202,60203],{"class":105,"line":33490},[103,60204,60205],{"class":113},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[103,60207,60208],{"class":105,"line":33496},[103,60209,60210],{"class":113},"      next.click()\n",[103,60212,60213],{"class":105,"line":33516},[103,60214,60215],{"class":113},"    }, 1000)\n",[103,60217,60218],{"class":105,"line":33522},[103,60219,2389],{"emptyLinePlaceholder":30},[103,60221,60222],{"class":105,"line":33528},[103,60223,60224],{"class":113},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[103,60226,60227],{"class":105,"line":33534},[103,60228,60229],{"class":113},"    const slider = document.querySelector('.slider')\n",[103,60231,60232],{"class":105,"line":33551},[103,60233,60234],{"class":113},"    \u002F\u002F 注册事件\n",[103,60236,60237],{"class":105,"line":33557},[103,60238,60239],{"class":113},"    slider.addEventListener('mouseenter', function () {\n",[103,60241,60242],{"class":105,"line":33563},[103,60243,60244],{"class":113},"      \u002F\u002F 停止定时器\n",[103,60246,60247],{"class":105,"line":33569},[103,60248,60249],{"class":113},"      clearInterval(timerId)\n",[103,60251,60252],{"class":105,"line":33575},[103,60253,33451],{"class":113},[103,60255,60256],{"class":105,"line":33581},[103,60257,2389],{"emptyLinePlaceholder":30},[103,60259,60260],{"class":105,"line":33608},[103,60261,60262],{"class":113},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[103,60264,60265],{"class":105,"line":33632},[103,60266,60234],{"class":113},[103,60268,60269],{"class":105,"line":33638},[103,60270,60271],{"class":113},"    slider.addEventListener('mouseleave', function () {\n",[103,60273,60274],{"class":105,"line":33644},[103,60275,60244],{"class":113},[103,60277,60278],{"class":105,"line":33650},[103,60279,60280],{"class":113},"      if (timerId) clearInterval(timerId)\n",[103,60282,60283],{"class":105,"line":33661},[103,60284,60285],{"class":113},"      \u002F\u002F 开启定时器\n",[103,60287,60288],{"class":105,"line":33672},[103,60289,60290],{"class":113},"      timerId = setInterval(function () {\n",[103,60292,60293],{"class":105,"line":33678},[103,60294,60295],{"class":113},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[103,60297,60298],{"class":105,"line":33695},[103,60299,60300],{"class":113},"        next.click()\n",[103,60302,60303],{"class":105,"line":33718},[103,60304,60305],{"class":113},"      }, 1000)\n",[103,60307,60308],{"class":105,"line":33741},[103,60309,33451],{"class":113},[103,60311,60312,60314,60316],{"class":105,"line":33747},[103,60313,52407],{"class":113},[103,60315,51803],{"class":51290},[103,60317,51297],{"class":113},[103,60319,60320,60322,60324],{"class":105,"line":33752},[103,60321,51775],{"class":113},[103,60323,51790],{"class":51290},[103,60325,51297],{"class":113},[103,60327,60328],{"class":105,"line":33761},[103,60329,2389],{"emptyLinePlaceholder":30},[103,60331,60332,60334,60336],{"class":105,"line":33771},[103,60333,51775],{"class":113},[103,60335,50625],{"class":51290},[103,60337,51297],{"class":113},[21988,60339,60341],{"id":60340},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60343,60344],{},"小米搜索框案例：",[94,60346,60348],{"className":50623,"code":60347,"language":50625,"meta":24,"style":24},"\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",[100,60349,60350,60360,60374,60378,60386,60400,60420,60440,60452,60460,60466,60476,60486,60498,60502,60506,60513,60517,60528,60532,60536,60543,60554,60567,60581,60585,60589,60598,60610,60622,60636,60649,60662,60680,60691,60695,60699,60708,60725,60729,60733,60740,60750,60760,60771,60784,60796,60812,60823,60835,60839,60843,60851,60862,60879,60891,60903,60914,60918,60922,60933,60944,60948,60956,60960,60968,60972,60980,60995,61018,61033,61064,61091,61118,61145,61172,61199,61226,61235,61243,61251,61256,61276,61296,61301,61306,61324,61329,61339,61344,61358,61363,61368,61385,61394,61406,61410,61418,61426,61430],{"__ignoreMap":24},[103,60351,60352,60354,60356,60358],{"class":105,"line":106},[103,60353,51287],{"class":113},[103,60355,51291],{"class":51290},[103,60357,51294],{"class":1952},[103,60359,51297],{"class":113},[103,60361,60362,60364,60366,60368,60370,60372],{"class":105,"line":25},[103,60363,1023],{"class":113},[103,60365,50625],{"class":51290},[103,60367,51306],{"class":1952},[103,60369,159],{"class":113},[103,60371,51311],{"class":218},[103,60373,51297],{"class":113},[103,60375,60376],{"class":105,"line":1168},[103,60377,2389],{"emptyLinePlaceholder":30},[103,60379,60380,60382,60384],{"class":105,"line":1183},[103,60381,1023],{"class":113},[103,60383,51324],{"class":51290},[103,60385,51297],{"class":113},[103,60387,60388,60390,60392,60394,60396,60398],{"class":105,"line":1189},[103,60389,51331],{"class":113},[103,60391,51334],{"class":51290},[103,60393,51337],{"class":1952},[103,60395,159],{"class":113},[103,60397,51342],{"class":218},[103,60399,51297],{"class":113},[103,60401,60402,60404,60406,60408,60410,60412,60414,60416,60418],{"class":105,"line":1203},[103,60403,51331],{"class":113},[103,60405,51334],{"class":51290},[103,60407,51353],{"class":1952},[103,60409,159],{"class":113},[103,60411,51358],{"class":218},[103,60413,51361],{"class":1952},[103,60415,159],{"class":113},[103,60417,51366],{"class":218},[103,60419,51297],{"class":113},[103,60421,60422,60424,60426,60428,60430,60432,60434,60436,60438],{"class":105,"line":1209},[103,60423,51331],{"class":113},[103,60425,51334],{"class":51290},[103,60427,14910],{"class":1952},[103,60429,159],{"class":113},[103,60431,51381],{"class":218},[103,60433,51361],{"class":1952},[103,60435,159],{"class":113},[103,60437,51388],{"class":218},[103,60439,51297],{"class":113},[103,60441,60442,60444,60446,60448,60450],{"class":105,"line":1300},[103,60443,51331],{"class":113},[103,60445,51397],{"class":51290},[103,60447,51400],{"class":113},[103,60449,51397],{"class":51290},[103,60451,51297],{"class":113},[103,60453,60454,60456,60458],{"class":105,"line":1306},[103,60455,51331],{"class":113},[103,60457,5116],{"class":51290},[103,60459,51297],{"class":113},[103,60461,60462,60464],{"class":105,"line":1318},[103,60463,51417],{"class":51290},[103,60465,15562],{"class":113},[103,60467,60468,60470,60472,60474],{"class":105,"line":1601},[103,60469,51424],{"class":162},[103,60471,51427],{"class":113},[103,60473,305],{"class":162},[103,60475,1279],{"class":113},[103,60477,60478,60480,60482,60484],{"class":105,"line":1606},[103,60479,51436],{"class":162},[103,60481,51427],{"class":113},[103,60483,305],{"class":162},[103,60485,1279],{"class":113},[103,60487,60488,60491,60493,60496],{"class":105,"line":1612},[103,60489,60490],{"class":162},"            box-sizing",[103,60492,51427],{"class":113},[103,60494,60495],{"class":162},"border-box",[103,60497,1279],{"class":113},[103,60499,60500],{"class":105,"line":1617},[103,60501,2518],{"class":113},[103,60503,60504],{"class":105,"line":1631},[103,60505,2389],{"emptyLinePlaceholder":30},[103,60507,60508,60511],{"class":105,"line":1636},[103,60509,60510],{"class":51290},"        ul",[103,60512,15562],{"class":113},[103,60514,60515],{"class":105,"line":1642},[103,60516,2389],{"emptyLinePlaceholder":30},[103,60518,60519,60522,60524,60526],{"class":105,"line":1663},[103,60520,60521],{"class":162},"            list-style",[103,60523,51427],{"class":113},[103,60525,54727],{"class":162},[103,60527,1279],{"class":113},[103,60529,60530],{"class":105,"line":1668},[103,60531,2518],{"class":113},[103,60533,60534],{"class":105,"line":1682},[103,60535,2389],{"emptyLinePlaceholder":30},[103,60537,60538,60541],{"class":105,"line":1687},[103,60539,60540],{"class":1952},"        .mi",[103,60542,15562],{"class":113},[103,60544,60545,60548,60550,60552],{"class":105,"line":1716},[103,60546,60547],{"class":162},"            position",[103,60549,51427],{"class":113},[103,60551,54754],{"class":162},[103,60553,1279],{"class":113},[103,60555,60556,60558,60560,60563,60565],{"class":105,"line":1721},[103,60557,51474],{"class":162},[103,60559,51427],{"class":113},[103,60561,60562],{"class":162},"223",[103,60564,51482],{"class":109},[103,60566,1279],{"class":113},[103,60568,60569,60571,60573,60575,60577,60579],{"class":105,"line":1738},[103,60570,51424],{"class":162},[103,60572,51427],{"class":113},[103,60574,424],{"class":162},[103,60576,51482],{"class":109},[103,60578,51546],{"class":162},[103,60580,1279],{"class":113},[103,60582,60583],{"class":105,"line":1743},[103,60584,2518],{"class":113},[103,60586,60587],{"class":105,"line":1748},[103,60588,2389],{"emptyLinePlaceholder":30},[103,60590,60591,60593,60596],{"class":105,"line":1753},[103,60592,60540],{"class":1952},[103,60594,60595],{"class":51290}," input",[103,60597,15562],{"class":113},[103,60599,60600,60602,60604,60606,60608],{"class":105,"line":1767},[103,60601,51474],{"class":162},[103,60603,51427],{"class":113},[103,60605,60562],{"class":162},[103,60607,51482],{"class":109},[103,60609,1279],{"class":113},[103,60611,60612,60614,60616,60618,60620],{"class":105,"line":1772},[103,60613,51489],{"class":162},[103,60615,51427],{"class":113},[103,60617,720],{"class":162},[103,60619,51482],{"class":109},[103,60621,1279],{"class":113},[103,60623,60624,60626,60628,60630,60632,60634],{"class":105,"line":2566},[103,60625,51436],{"class":162},[103,60627,51427],{"class":113},[103,60629,305],{"class":162},[103,60631,2027],{"class":162},[103,60633,51482],{"class":109},[103,60635,1279],{"class":113},[103,60637,60638,60641,60643,60645,60647],{"class":105,"line":2580},[103,60639,60640],{"class":162},"            font-size",[103,60642,51427],{"class":113},[103,60644,662],{"class":162},[103,60646,51482],{"class":109},[103,60648,1279],{"class":113},[103,60650,60651,60654,60656,60658,60660],{"class":105,"line":2588},[103,60652,60653],{"class":162},"            line-height",[103,60655,51427],{"class":113},[103,60657,720],{"class":162},[103,60659,51482],{"class":109},[103,60661,1279],{"class":113},[103,60663,60664,60667,60669,60671,60673,60675,60678],{"class":105,"line":2593},[103,60665,60666],{"class":162},"            border",[103,60668,51427],{"class":113},[103,60670,331],{"class":162},[103,60672,51482],{"class":109},[103,60674,51511],{"class":162},[103,60676,60677],{"class":162}," #e0e0e0",[103,60679,1279],{"class":113},[103,60681,60682,60685,60687,60689],{"class":105,"line":2599},[103,60683,60684],{"class":162},"            outline",[103,60686,51427],{"class":113},[103,60688,54727],{"class":162},[103,60690,1279],{"class":113},[103,60692,60693],{"class":105,"line":2605},[103,60694,2518],{"class":113},[103,60696,60697],{"class":105,"line":2610},[103,60698,2389],{"emptyLinePlaceholder":30},[103,60700,60701,60703,60706],{"class":105,"line":7938},[103,60702,60540],{"class":1952},[103,60704,60705],{"class":1952}," .search",[103,60707,15562],{"class":113},[103,60709,60710,60712,60714,60716,60718,60720,60723],{"class":105,"line":7962},[103,60711,60666],{"class":162},[103,60713,51427],{"class":113},[103,60715,331],{"class":162},[103,60717,51482],{"class":109},[103,60719,51511],{"class":162},[103,60721,60722],{"class":162}," #ff6700",[103,60724,1279],{"class":113},[103,60726,60727],{"class":105,"line":7967},[103,60728,2518],{"class":113},[103,60730,60731],{"class":105,"line":7973},[103,60732,2389],{"emptyLinePlaceholder":30},[103,60734,60735,60738],{"class":105,"line":8000},[103,60736,60737],{"class":1952},"        .result-list",[103,60739,15562],{"class":113},[103,60741,60742,60744,60746,60748],{"class":105,"line":8005},[103,60743,51462],{"class":162},[103,60745,51427],{"class":113},[103,60747,54727],{"class":162},[103,60749,1279],{"class":113},[103,60751,60752,60754,60756,60758],{"class":105,"line":8011},[103,60753,60547],{"class":162},[103,60755,51427],{"class":113},[103,60757,54821],{"class":162},[103,60759,1279],{"class":113},[103,60761,60762,60765,60767,60769],{"class":105,"line":8023},[103,60763,60764],{"class":162},"            left",[103,60766,51427],{"class":113},[103,60768,305],{"class":162},[103,60770,1279],{"class":113},[103,60772,60773,60776,60778,60780,60782],{"class":105,"line":8035},[103,60774,60775],{"class":162},"            top",[103,60777,51427],{"class":113},[103,60779,720],{"class":162},[103,60781,51482],{"class":109},[103,60783,1279],{"class":113},[103,60785,60786,60788,60790,60792,60794],{"class":105,"line":8047},[103,60787,51474],{"class":162},[103,60789,51427],{"class":113},[103,60791,60562],{"class":162},[103,60793,51482],{"class":109},[103,60795,1279],{"class":113},[103,60797,60798,60800,60802,60804,60806,60808,60810],{"class":105,"line":9706},[103,60799,60666],{"class":162},[103,60801,51427],{"class":113},[103,60803,331],{"class":162},[103,60805,51482],{"class":109},[103,60807,51511],{"class":162},[103,60809,60722],{"class":162},[103,60811,1279],{"class":113},[103,60813,60814,60817,60819,60821],{"class":105,"line":9731},[103,60815,60816],{"class":162},"            border-top",[103,60818,51427],{"class":113},[103,60820,305],{"class":162},[103,60822,1279],{"class":113},[103,60824,60825,60828,60830,60833],{"class":105,"line":9754},[103,60826,60827],{"class":162},"            background",[103,60829,51427],{"class":113},[103,60831,60832],{"class":162},"#fff",[103,60834,1279],{"class":113},[103,60836,60837],{"class":105,"line":9778},[103,60838,2518],{"class":113},[103,60840,60841],{"class":105,"line":9783},[103,60842,2389],{"emptyLinePlaceholder":30},[103,60844,60845,60847,60849],{"class":105,"line":9788},[103,60846,60737],{"class":1952},[103,60848,1387],{"class":51290},[103,60850,15562],{"class":113},[103,60852,60853,60855,60857,60860],{"class":105,"line":9793},[103,60854,51462],{"class":162},[103,60856,51427],{"class":113},[103,60858,60859],{"class":162},"block",[103,60861,1279],{"class":113},[103,60863,60864,60866,60868,60870,60872,60875,60877],{"class":105,"line":9802},[103,60865,51436],{"class":162},[103,60867,51427],{"class":113},[103,60869,457],{"class":162},[103,60871,51482],{"class":109},[103,60873,60874],{"class":162}," 15",[103,60876,51482],{"class":109},[103,60878,1279],{"class":113},[103,60880,60881,60883,60885,60887,60889],{"class":105,"line":9807},[103,60882,60640],{"class":162},[103,60884,51427],{"class":113},[103,60886,611],{"class":162},[103,60888,51482],{"class":109},[103,60890,1279],{"class":113},[103,60892,60893,60896,60898,60901],{"class":105,"line":9813},[103,60894,60895],{"class":162},"            color",[103,60897,51427],{"class":113},[103,60899,60900],{"class":162},"#424242",[103,60902,1279],{"class":113},[103,60904,60905,60908,60910,60912],{"class":105,"line":9834},[103,60906,60907],{"class":162},"            text-decoration",[103,60909,51427],{"class":113},[103,60911,54727],{"class":162},[103,60913,1279],{"class":113},[103,60915,60916],{"class":105,"line":9840},[103,60917,2518],{"class":113},[103,60919,60920],{"class":105,"line":9854},[103,60921,2389],{"emptyLinePlaceholder":30},[103,60923,60924,60926,60928,60931],{"class":105,"line":9860},[103,60925,60737],{"class":1952},[103,60927,1387],{"class":51290},[103,60929,60930],{"class":1952},":hover",[103,60932,15562],{"class":113},[103,60934,60935,60937,60939,60942],{"class":105,"line":9887},[103,60936,51630],{"class":162},[103,60938,51427],{"class":113},[103,60940,60941],{"class":162},"#eee",[103,60943,1279],{"class":113},[103,60945,60946],{"class":105,"line":9896},[103,60947,2518],{"class":113},[103,60949,60950,60952,60954],{"class":105,"line":9902},[103,60951,51766],{"class":113},[103,60953,5116],{"class":51290},[103,60955,51297],{"class":113},[103,60957,60958],{"class":105,"line":9910},[103,60959,2389],{"emptyLinePlaceholder":30},[103,60961,60962,60964,60966],{"class":105,"line":9915},[103,60963,51775],{"class":113},[103,60965,51324],{"class":51290},[103,60967,51297],{"class":113},[103,60969,60970],{"class":105,"line":16594},[103,60971,2389],{"emptyLinePlaceholder":30},[103,60973,60974,60976,60978],{"class":105,"line":16600},[103,60975,1023],{"class":113},[103,60977,51790],{"class":51290},[103,60979,51297],{"class":113},[103,60981,60982,60984,60986,60988,60990,60993],{"class":105,"line":16623},[103,60983,51331],{"class":113},[103,60985,51601],{"class":51290},[103,60987,53476],{"class":1952},[103,60989,159],{"class":113},[103,60991,60992],{"class":218},"\"mi\"",[103,60994,51297],{"class":113},[103,60996,60997,60999,61001,61003,61005,61008,61011,61013,61016],{"class":105,"line":16629},[103,60998,55292],{"class":113},[103,61000,53811],{"class":51290},[103,61002,53814],{"class":1952},[103,61004,159],{"class":113},[103,61006,61007],{"class":218},"\"search\"",[103,61009,61010],{"class":1952}," placeholder",[103,61012,159],{"class":113},[103,61014,61015],{"class":218},"\"小米笔记本\"",[103,61017,51297],{"class":113},[103,61019,61020,61022,61024,61026,61028,61031],{"class":105,"line":16652},[103,61021,55292],{"class":113},[103,61023,1120],{"class":51290},[103,61025,53476],{"class":1952},[103,61027,159],{"class":113},[103,61029,61030],{"class":218},"\"result-list\"",[103,61032,51297],{"class":113},[103,61034,61035,61038,61040,61043,61045,61048,61050,61053,61056,61058,61060,61062],{"class":105,"line":16666},[103,61036,61037],{"class":113},"            \u003C",[103,61039,60],{"class":51290},[103,61041,61042],{"class":113},">\u003C",[103,61044,17],{"class":51290},[103,61046,61047],{"class":1952}," href",[103,61049,159],{"class":113},[103,61051,61052],{"class":218},"\"#\"",[103,61054,61055],{"class":113},">全部商品\u003C\u002F",[103,61057,17],{"class":51290},[103,61059,55304],{"class":113},[103,61061,60],{"class":51290},[103,61063,51297],{"class":113},[103,61065,61066,61068,61070,61072,61074,61076,61078,61080,61083,61085,61087,61089],{"class":105,"line":16686},[103,61067,61037],{"class":113},[103,61069,60],{"class":51290},[103,61071,61042],{"class":113},[103,61073,17],{"class":51290},[103,61075,61047],{"class":1952},[103,61077,159],{"class":113},[103,61079,61052],{"class":218},[103,61081,61082],{"class":113},">小米11\u003C\u002F",[103,61084,17],{"class":51290},[103,61086,55304],{"class":113},[103,61088,60],{"class":51290},[103,61090,51297],{"class":113},[103,61092,61093,61095,61097,61099,61101,61103,61105,61107,61110,61112,61114,61116],{"class":105,"line":16692},[103,61094,61037],{"class":113},[103,61096,60],{"class":51290},[103,61098,61042],{"class":113},[103,61100,17],{"class":51290},[103,61102,61047],{"class":1952},[103,61104,159],{"class":113},[103,61106,61052],{"class":218},[103,61108,61109],{"class":113},">小米10S\u003C\u002F",[103,61111,17],{"class":51290},[103,61113,55304],{"class":113},[103,61115,60],{"class":51290},[103,61117,51297],{"class":113},[103,61119,61120,61122,61124,61126,61128,61130,61132,61134,61137,61139,61141,61143],{"class":105,"line":16703},[103,61121,61037],{"class":113},[103,61123,60],{"class":51290},[103,61125,61042],{"class":113},[103,61127,17],{"class":51290},[103,61129,61047],{"class":1952},[103,61131,159],{"class":113},[103,61133,61052],{"class":218},[103,61135,61136],{"class":113},">小米笔记本\u003C\u002F",[103,61138,17],{"class":51290},[103,61140,55304],{"class":113},[103,61142,60],{"class":51290},[103,61144,51297],{"class":113},[103,61146,61147,61149,61151,61153,61155,61157,61159,61161,61164,61166,61168,61170],{"class":105,"line":16726},[103,61148,61037],{"class":113},[103,61150,60],{"class":51290},[103,61152,61042],{"class":113},[103,61154,17],{"class":51290},[103,61156,61047],{"class":1952},[103,61158,159],{"class":113},[103,61160,61052],{"class":218},[103,61162,61163],{"class":113},">小米手机\u003C\u002F",[103,61165,17],{"class":51290},[103,61167,55304],{"class":113},[103,61169,60],{"class":51290},[103,61171,51297],{"class":113},[103,61173,61174,61176,61178,61180,61182,61184,61186,61188,61191,61193,61195,61197],{"class":105,"line":16748},[103,61175,61037],{"class":113},[103,61177,60],{"class":51290},[103,61179,61042],{"class":113},[103,61181,17],{"class":51290},[103,61183,61047],{"class":1952},[103,61185,159],{"class":113},[103,61187,61052],{"class":218},[103,61189,61190],{"class":113},">黑鲨4\u003C\u002F",[103,61192,17],{"class":51290},[103,61194,55304],{"class":113},[103,61196,60],{"class":51290},[103,61198,51297],{"class":113},[103,61200,61201,61203,61205,61207,61209,61211,61213,61215,61218,61220,61222,61224],{"class":105,"line":16753},[103,61202,61037],{"class":113},[103,61204,60],{"class":51290},[103,61206,61042],{"class":113},[103,61208,17],{"class":51290},[103,61210,61047],{"class":1952},[103,61212,159],{"class":113},[103,61214,61052],{"class":218},[103,61216,61217],{"class":113},">空调\u003C\u002F",[103,61219,17],{"class":51290},[103,61221,55304],{"class":113},[103,61223,60],{"class":51290},[103,61225,51297],{"class":113},[103,61227,61228,61231,61233],{"class":105,"line":16759},[103,61229,61230],{"class":113},"        \u003C\u002F",[103,61232,1120],{"class":51290},[103,61234,51297],{"class":113},[103,61236,61237,61239,61241],{"class":105,"line":16773},[103,61238,51766],{"class":113},[103,61240,51601],{"class":51290},[103,61242,51297],{"class":113},[103,61244,61245,61247,61249],{"class":105,"line":16786},[103,61246,51331],{"class":113},[103,61248,51803],{"class":51290},[103,61250,51297],{"class":113},[103,61252,61253],{"class":105,"line":16791},[103,61254,61255],{"class":172},"        \u002F\u002F 1. 获取元素\n",[103,61257,61258,61261,61263,61265,61267,61269,61271,61274],{"class":105,"line":16805},[103,61259,61260],{"class":109},"        const",[103,61262,60595],{"class":162},[103,61264,13554],{"class":109},[103,61266,54386],{"class":113},[103,61268,54389],{"class":1952},[103,61270,114],{"class":113},[103,61272,61273],{"class":218},"'[type=search]'",[103,61275,120],{"class":113},[103,61277,61278,61280,61283,61285,61287,61289,61291,61294],{"class":105,"line":16810},[103,61279,61260],{"class":109},[103,61281,61282],{"class":162}," ul",[103,61284,13554],{"class":109},[103,61286,54386],{"class":113},[103,61288,54389],{"class":1952},[103,61290,114],{"class":113},[103,61292,61293],{"class":218},"'.result-list'",[103,61295,120],{"class":113},[103,61297,61298],{"class":105,"line":16816},[103,61299,61300],{"class":172},"        \u002F\u002F console.log(input)\n",[103,61302,61303],{"class":105,"line":16821},[103,61304,61305],{"class":172},"        \u002F\u002F 2. 监听事件 获得焦点\n",[103,61307,61308,61311,61313,61315,61318,61320,61322],{"class":105,"line":16835},[103,61309,61310],{"class":113},"        input.",[103,61312,57803],{"class":1952},[103,61314,114],{"class":113},[103,61316,61317],{"class":218},"'focus'",[103,61319,12425],{"class":113},[103,61321,54439],{"class":109},[103,61323,54442],{"class":113},[103,61325,61326],{"class":105,"line":16840},[103,61327,61328],{"class":172},"            \u002F\u002F ul显示\n",[103,61330,61331,61334,61336],{"class":105,"line":16845},[103,61332,61333],{"class":113},"            ul.style.display ",[103,61335,159],{"class":109},[103,61337,61338],{"class":218}," 'block'\n",[103,61340,61341],{"class":105,"line":16859},[103,61342,61343],{"class":172},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[103,61345,61346,61349,61351,61353,61356],{"class":105,"line":16871},[103,61347,61348],{"class":113},"            input.classList.",[103,61350,5324],{"class":1952},[103,61352,114],{"class":113},[103,61354,61355],{"class":218},"'search'",[103,61357,120],{"class":113},[103,61359,61360],{"class":105,"line":16876},[103,61361,61362],{"class":113},"        })\n",[103,61364,61365],{"class":105,"line":16889},[103,61366,61367],{"class":172},"        \u002F\u002F 3. 监听事件 失去焦点\n",[103,61369,61370,61372,61374,61376,61379,61381,61383],{"class":105,"line":16894},[103,61371,61310],{"class":113},[103,61373,57803],{"class":1952},[103,61375,114],{"class":113},[103,61377,61378],{"class":218},"'blur'",[103,61380,12425],{"class":113},[103,61382,54439],{"class":109},[103,61384,54442],{"class":113},[103,61386,61387,61389,61391],{"class":105,"line":16899},[103,61388,61333],{"class":113},[103,61390,159],{"class":109},[103,61392,61393],{"class":218}," 'none'\n",[103,61395,61396,61398,61400,61402,61404],{"class":105,"line":16904},[103,61397,61348],{"class":113},[103,61399,56996],{"class":1952},[103,61401,114],{"class":113},[103,61403,61355],{"class":218},[103,61405,120],{"class":113},[103,61407,61408],{"class":105,"line":16917},[103,61409,61362],{"class":113},[103,61411,61412,61414,61416],{"class":105,"line":16922},[103,61413,51766],{"class":113},[103,61415,51803],{"class":51290},[103,61417,51297],{"class":113},[103,61419,61420,61422,61424],{"class":105,"line":32623},[103,61421,51775],{"class":113},[103,61423,51790],{"class":51290},[103,61425,51297],{"class":113},[103,61427,61428],{"class":105,"line":32629},[103,61429,2389],{"emptyLinePlaceholder":30},[103,61431,61432,61434,61436],{"class":105,"line":32635},[103,61433,51775],{"class":113},[103,61435,50625],{"class":51290},[103,61437,51297],{"class":113},[21988,61439,61441],{"id":61440},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61443,61444],{},"评论字数统计案例",[14,61446,61447],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61449,61450],{},"牢记focus伪类选择器",[51334,61452],{"charSet":61453},"UTF-8",[51334,61455],{"name":61456,"content":61457},"viewport","width=device-width, initial-scale=1.0",[51397,61459,61460],{},"Document",[5116,61462,61463],{},"\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",[53811,61465],{"type":5177},[1120,61467,61468,61471],{},[60,61469,61470],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[60,61472,61473],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[94,61475,61477],{"className":50623,"code":61476,"language":50625,"meta":24,"style":24},"\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",[100,61478,61479,61489,61503,61507,61515,61529,61549,61569,61582,61590,61597,61610,61624,61634,61644,61648,61652,61659,61671,61683,61695,61707,61736,61749,61753,61757,61766,61777,61789,61800,61811,61823,61834,61846,61862,61874,61878,61882,61893,61904,61914,61926,61930,61934,61942,61953,61963,61974,61986,61999,62011,62023,62027,62031,62040,62052,62063,62076,62087,62101,62105,62109,62116,62128,62140,62150,62154,62158,62167,62179,62189,62193,62197,62208,62218,62237,62250,62254,62258,62268,62278,62282,62286,62297,62308,62320,62332,62336,62340,62351,62362,62376,62380,62384,62395,62405,62417,62421,62429,62437,62441,62449,62464,62483,62523,62536,62544,62558,62578,62586,62601,62624,62642,62657,62677,62697,62717,62725,62733,62741,62749,62769,62789,62794,62811,62820,62824,62829,62845,62853,62857,62862,62879,62884,62909,62913,62917,62922,62927,62935,62943,62947],{"__ignoreMap":24},[103,61480,61481,61483,61485,61487],{"class":105,"line":106},[103,61482,51287],{"class":113},[103,61484,51291],{"class":51290},[103,61486,51294],{"class":1952},[103,61488,51297],{"class":113},[103,61490,61491,61493,61495,61497,61499,61501],{"class":105,"line":25},[103,61492,1023],{"class":113},[103,61494,50625],{"class":51290},[103,61496,51306],{"class":1952},[103,61498,159],{"class":113},[103,61500,51311],{"class":218},[103,61502,51297],{"class":113},[103,61504,61505],{"class":105,"line":1168},[103,61506,2389],{"emptyLinePlaceholder":30},[103,61508,61509,61511,61513],{"class":105,"line":1183},[103,61510,1023],{"class":113},[103,61512,51324],{"class":51290},[103,61514,51297],{"class":113},[103,61516,61517,61519,61521,61523,61525,61527],{"class":105,"line":1189},[103,61518,52134],{"class":113},[103,61520,51334],{"class":51290},[103,61522,51337],{"class":1952},[103,61524,159],{"class":113},[103,61526,51342],{"class":218},[103,61528,51297],{"class":113},[103,61530,61531,61533,61535,61537,61539,61541,61543,61545,61547],{"class":105,"line":1203},[103,61532,52134],{"class":113},[103,61534,51334],{"class":51290},[103,61536,51353],{"class":1952},[103,61538,159],{"class":113},[103,61540,51358],{"class":218},[103,61542,51361],{"class":1952},[103,61544,159],{"class":113},[103,61546,51366],{"class":218},[103,61548,51297],{"class":113},[103,61550,61551,61553,61555,61557,61559,61561,61563,61565,61567],{"class":105,"line":1209},[103,61552,52134],{"class":113},[103,61554,51334],{"class":51290},[103,61556,14910],{"class":1952},[103,61558,159],{"class":113},[103,61560,51381],{"class":218},[103,61562,51361],{"class":1952},[103,61564,159],{"class":113},[103,61566,51388],{"class":218},[103,61568,51297],{"class":113},[103,61570,61571,61573,61575,61578,61580],{"class":105,"line":1300},[103,61572,52134],{"class":113},[103,61574,51397],{"class":51290},[103,61576,61577],{"class":113},">评论回车发布\u003C\u002F",[103,61579,51397],{"class":51290},[103,61581,51297],{"class":113},[103,61583,61584,61586,61588],{"class":105,"line":1306},[103,61585,52134],{"class":113},[103,61587,5116],{"class":51290},[103,61589,51297],{"class":113},[103,61591,61592,61595],{"class":105,"line":1318},[103,61593,61594],{"class":1952},"    .wrapper",[103,61596,15562],{"class":113},[103,61598,61599,61602,61604,61606,61608],{"class":105,"line":1601},[103,61600,61601],{"class":162},"      min-width",[103,61603,51427],{"class":113},[103,61605,3976],{"class":162},[103,61607,51482],{"class":109},[103,61609,1279],{"class":113},[103,61611,61612,61615,61617,61620,61622],{"class":105,"line":1606},[103,61613,61614],{"class":162},"      max-width",[103,61616,51427],{"class":113},[103,61618,61619],{"class":162},"800",[103,61621,51482],{"class":109},[103,61623,1279],{"class":113},[103,61625,61626,61628,61630,61632],{"class":105,"line":1612},[103,61627,54999],{"class":162},[103,61629,51427],{"class":113},[103,61631,51467],{"class":162},[103,61633,1279],{"class":113},[103,61635,61636,61638,61640,61642],{"class":105,"line":1617},[103,61637,55010],{"class":162},[103,61639,51427],{"class":113},[103,61641,51570],{"class":162},[103,61643,1279],{"class":113},[103,61645,61646],{"class":105,"line":1631},[103,61647,2176],{"class":113},[103,61649,61650],{"class":105,"line":1636},[103,61651,2389],{"emptyLinePlaceholder":30},[103,61653,61654,61657],{"class":105,"line":1642},[103,61655,61656],{"class":1952},"    .avatar",[103,61658,15562],{"class":113},[103,61660,61661,61663,61665,61667,61669],{"class":105,"line":1663},[103,61662,54761],{"class":162},[103,61664,51427],{"class":113},[103,61666,720],{"class":162},[103,61668,51482],{"class":109},[103,61670,1279],{"class":113},[103,61672,61673,61675,61677,61679,61681],{"class":105,"line":1668},[103,61674,54775],{"class":162},[103,61676,51427],{"class":113},[103,61678,720],{"class":162},[103,61680,51482],{"class":109},[103,61682,1279],{"class":113},[103,61684,61685,61687,61689,61691,61693],{"class":105,"line":1682},[103,61686,55124],{"class":162},[103,61688,51427],{"class":113},[103,61690,769],{"class":162},[103,61692,441],{"class":109},[103,61694,1279],{"class":113},[103,61696,61697,61700,61702,61705],{"class":105,"line":1687},[103,61698,61699],{"class":162},"      overflow",[103,61701,51427],{"class":113},[103,61703,61704],{"class":162},"hidden",[103,61706,1279],{"class":113},[103,61708,61709,61712,61714,61717,61719,61722,61724,61727,61729,61731,61734],{"class":105,"line":1716},[103,61710,61711],{"class":162},"      background",[103,61713,51427],{"class":113},[103,61715,61716],{"class":162},"url",[103,61718,114],{"class":113},[103,61720,61721],{"class":5206},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[103,61723,13704],{"class":113},[103,61725,61726],{"class":162},"no-repeat",[103,61728,17134],{"class":162},[103,61730,24968],{"class":113},[103,61732,61733],{"class":162},"cover",[103,61735,1279],{"class":113},[103,61737,61738,61741,61743,61745,61747],{"class":105,"line":1721},[103,61739,61740],{"class":162},"      margin-right",[103,61742,51427],{"class":113},[103,61744,813],{"class":162},[103,61746,51482],{"class":109},[103,61748,1279],{"class":113},[103,61750,61751],{"class":105,"line":1738},[103,61752,2176],{"class":113},[103,61754,61755],{"class":105,"line":1743},[103,61756,2389],{"emptyLinePlaceholder":30},[103,61758,61759,61761,61764],{"class":105,"line":1748},[103,61760,61594],{"class":1952},[103,61762,61763],{"class":51290}," textarea",[103,61765,15562],{"class":113},[103,61767,61768,61771,61773,61775],{"class":105,"line":1753},[103,61769,61770],{"class":162},"      outline",[103,61772,51427],{"class":113},[103,61774,54727],{"class":162},[103,61776,1279],{"class":113},[103,61778,61779,61782,61784,61787],{"class":105,"line":1767},[103,61780,61781],{"class":162},"      border-color",[103,61783,51427],{"class":113},[103,61785,61786],{"class":162},"transparent",[103,61788,1279],{"class":113},[103,61790,61791,61794,61796,61798],{"class":105,"line":1772},[103,61792,61793],{"class":162},"      resize",[103,61795,51427],{"class":113},[103,61797,54727],{"class":162},[103,61799,1279],{"class":113},[103,61801,61802,61804,61806,61809],{"class":105,"line":2566},[103,61803,61711],{"class":162},[103,61805,51427],{"class":113},[103,61807,61808],{"class":162},"#f5f5f5",[103,61810,1279],{"class":113},[103,61812,61813,61815,61817,61819,61821],{"class":105,"line":2580},[103,61814,55124],{"class":162},[103,61816,51427],{"class":113},[103,61818,406],{"class":162},[103,61820,51482],{"class":109},[103,61822,1279],{"class":113},[103,61824,61825,61828,61830,61832],{"class":105,"line":2588},[103,61826,61827],{"class":162},"      flex",[103,61829,51427],{"class":113},[103,61831,331],{"class":162},[103,61833,1279],{"class":113},[103,61835,61836,61838,61840,61842,61844],{"class":105,"line":2593},[103,61837,54685],{"class":162},[103,61839,51427],{"class":113},[103,61841,559],{"class":162},[103,61843,51482],{"class":109},[103,61845,1279],{"class":113},[103,61847,61848,61851,61853,61855,61858,61860],{"class":105,"line":2599},[103,61849,61850],{"class":162},"      transition",[103,61852,51427],{"class":113},[103,61854,28111],{"class":162},[103,61856,61857],{"class":162}," 0.5",[103,61859,808],{"class":109},[103,61861,1279],{"class":113},[103,61863,61864,61866,61868,61870,61872],{"class":105,"line":2605},[103,61865,54775],{"class":162},[103,61867,51427],{"class":113},[103,61869,1064],{"class":162},[103,61871,51482],{"class":109},[103,61873,1279],{"class":113},[103,61875,61876],{"class":105,"line":2610},[103,61877,2176],{"class":113},[103,61879,61880],{"class":105,"line":7938},[103,61881,2389],{"emptyLinePlaceholder":30},[103,61883,61884,61886,61888,61891],{"class":105,"line":7962},[103,61885,61594],{"class":1952},[103,61887,61763],{"class":51290},[103,61889,61890],{"class":1952},":focus",[103,61892,15562],{"class":113},[103,61894,61895,61897,61899,61902],{"class":105,"line":7967},[103,61896,61781],{"class":162},[103,61898,51427],{"class":113},[103,61900,61901],{"class":162},"#e4e4e4",[103,61903,1279],{"class":113},[103,61905,61906,61908,61910,61912],{"class":105,"line":7973},[103,61907,61711],{"class":162},[103,61909,51427],{"class":113},[103,61911,60832],{"class":162},[103,61913,1279],{"class":113},[103,61915,61916,61918,61920,61922,61924],{"class":105,"line":8000},[103,61917,54775],{"class":162},[103,61919,51427],{"class":113},[103,61921,769],{"class":162},[103,61923,51482],{"class":109},[103,61925,1279],{"class":113},[103,61927,61928],{"class":105,"line":8005},[103,61929,2176],{"class":113},[103,61931,61932],{"class":105,"line":8011},[103,61933,2389],{"emptyLinePlaceholder":30},[103,61935,61936,61938,61940],{"class":105,"line":8023},[103,61937,61594],{"class":1952},[103,61939,57457],{"class":51290},[103,61941,15562],{"class":113},[103,61943,61944,61946,61948,61951],{"class":105,"line":8035},[103,61945,61711],{"class":162},[103,61947,51427],{"class":113},[103,61949,61950],{"class":162},"#00aeec",[103,61952,1279],{"class":113},[103,61954,61955,61957,61959,61961],{"class":105,"line":8047},[103,61956,57406],{"class":162},[103,61958,51427],{"class":113},[103,61960,60832],{"class":162},[103,61962,1279],{"class":113},[103,61964,61965,61968,61970,61972],{"class":105,"line":9706},[103,61966,61967],{"class":162},"      border",[103,61969,51427],{"class":113},[103,61971,54727],{"class":162},[103,61973,1279],{"class":113},[103,61975,61976,61978,61980,61982,61984],{"class":105,"line":9731},[103,61977,55124],{"class":162},[103,61979,51427],{"class":113},[103,61981,406],{"class":162},[103,61983,51482],{"class":109},[103,61985,1279],{"class":113},[103,61987,61988,61991,61993,61995,61997],{"class":105,"line":9754},[103,61989,61990],{"class":162},"      margin-left",[103,61992,51427],{"class":113},[103,61994,559],{"class":162},[103,61996,51482],{"class":109},[103,61998,1279],{"class":113},[103,62000,62001,62003,62005,62007,62009],{"class":105,"line":9778},[103,62002,54761],{"class":162},[103,62004,51427],{"class":113},[103,62006,469],{"class":162},[103,62008,51482],{"class":109},[103,62010,1279],{"class":113},[103,62012,62013,62016,62018,62021],{"class":105,"line":9783},[103,62014,62015],{"class":162},"      cursor",[103,62017,51427],{"class":113},[103,62019,62020],{"class":162},"pointer",[103,62022,1279],{"class":113},[103,62024,62025],{"class":105,"line":9788},[103,62026,2176],{"class":113},[103,62028,62029],{"class":105,"line":9793},[103,62030,2389],{"emptyLinePlaceholder":30},[103,62032,62033,62035,62038],{"class":105,"line":9802},[103,62034,61594],{"class":1952},[103,62036,62037],{"class":1952}," .total",[103,62039,15562],{"class":113},[103,62041,62042,62044,62046,62048,62050],{"class":105,"line":9807},[103,62043,61740],{"class":162},[103,62045,51427],{"class":113},[103,62047,725],{"class":162},[103,62049,51482],{"class":109},[103,62051,1279],{"class":113},[103,62053,62054,62056,62058,62061],{"class":105,"line":9813},[103,62055,57406],{"class":162},[103,62057,51427],{"class":113},[103,62059,62060],{"class":162},"#999",[103,62062,1279],{"class":113},[103,62064,62065,62068,62070,62072,62074],{"class":105,"line":9834},[103,62066,62067],{"class":162},"      margin-top",[103,62069,51427],{"class":113},[103,62071,432],{"class":162},[103,62073,51482],{"class":109},[103,62075,1279],{"class":113},[103,62077,62078,62081,62083,62085],{"class":105,"line":9840},[103,62079,62080],{"class":162},"      opacity",[103,62082,51427],{"class":113},[103,62084,305],{"class":162},[103,62086,1279],{"class":113},[103,62088,62089,62091,62093,62095,62097,62099],{"class":105,"line":9854},[103,62090,61850],{"class":162},[103,62092,51427],{"class":113},[103,62094,28111],{"class":162},[103,62096,61857],{"class":162},[103,62098,808],{"class":109},[103,62100,1279],{"class":113},[103,62102,62103],{"class":105,"line":9860},[103,62104,2176],{"class":113},[103,62106,62107],{"class":105,"line":9887},[103,62108,2389],{"emptyLinePlaceholder":30},[103,62110,62111,62114],{"class":105,"line":9896},[103,62112,62113],{"class":1952},"    .list",[103,62115,15562],{"class":113},[103,62117,62118,62120,62122,62124,62126],{"class":105,"line":9902},[103,62119,61601],{"class":162},[103,62121,51427],{"class":113},[103,62123,3976],{"class":162},[103,62125,51482],{"class":109},[103,62127,1279],{"class":113},[103,62129,62130,62132,62134,62136,62138],{"class":105,"line":9910},[103,62131,61614],{"class":162},[103,62133,51427],{"class":113},[103,62135,61619],{"class":162},[103,62137,51482],{"class":109},[103,62139,1279],{"class":113},[103,62141,62142,62144,62146,62148],{"class":105,"line":9915},[103,62143,54999],{"class":162},[103,62145,51427],{"class":113},[103,62147,51467],{"class":162},[103,62149,1279],{"class":113},[103,62151,62152],{"class":105,"line":16594},[103,62153,2176],{"class":113},[103,62155,62156],{"class":105,"line":16600},[103,62157,2389],{"emptyLinePlaceholder":30},[103,62159,62160,62162,62165],{"class":105,"line":16623},[103,62161,62113],{"class":1952},[103,62163,62164],{"class":1952}," .item",[103,62166,15562],{"class":113},[103,62168,62169,62171,62173,62175,62177],{"class":105,"line":16629},[103,62170,54761],{"class":162},[103,62172,51427],{"class":113},[103,62174,424],{"class":162},[103,62176,441],{"class":109},[103,62178,1279],{"class":113},[103,62180,62181,62183,62185,62187],{"class":105,"line":16652},[103,62182,54999],{"class":162},[103,62184,51427],{"class":113},[103,62186,51467],{"class":162},[103,62188,1279],{"class":113},[103,62190,62191],{"class":105,"line":16666},[103,62192,2176],{"class":113},[103,62194,62195],{"class":105,"line":16686},[103,62196,2389],{"emptyLinePlaceholder":30},[103,62198,62199,62201,62203,62206],{"class":105,"line":16692},[103,62200,62113],{"class":1952},[103,62202,62164],{"class":1952},[103,62204,62205],{"class":1952}," .info",[103,62207,15562],{"class":113},[103,62209,62210,62212,62214,62216],{"class":105,"line":16703},[103,62211,61827],{"class":162},[103,62213,51427],{"class":113},[103,62215,331],{"class":162},[103,62217,1279],{"class":113},[103,62219,62220,62223,62225,62227,62229,62232,62235],{"class":105,"line":16726},[103,62221,62222],{"class":162},"      border-bottom",[103,62224,51427],{"class":113},[103,62226,331],{"class":162},[103,62228,51482],{"class":109},[103,62230,62231],{"class":162}," dashed",[103,62233,62234],{"class":162}," #e4e4e4",[103,62236,1279],{"class":113},[103,62238,62239,62242,62244,62246,62248],{"class":105,"line":16748},[103,62240,62241],{"class":162},"      padding-bottom",[103,62243,51427],{"class":113},[103,62245,559],{"class":162},[103,62247,51482],{"class":109},[103,62249,1279],{"class":113},[103,62251,62252],{"class":105,"line":16753},[103,62253,2176],{"class":113},[103,62255,62256],{"class":105,"line":16759},[103,62257,2389],{"emptyLinePlaceholder":30},[103,62259,62260,62262,62264,62266],{"class":105,"line":16773},[103,62261,62113],{"class":1952},[103,62263,62164],{"class":1952},[103,62265,6815],{"class":51290},[103,62267,15562],{"class":113},[103,62269,62270,62272,62274,62276],{"class":105,"line":16786},[103,62271,54696],{"class":162},[103,62273,51427],{"class":113},[103,62275,305],{"class":162},[103,62277,1279],{"class":113},[103,62279,62280],{"class":105,"line":16791},[103,62281,2176],{"class":113},[103,62283,62284],{"class":105,"line":16805},[103,62285,2389],{"emptyLinePlaceholder":30},[103,62287,62288,62290,62292,62295],{"class":105,"line":16810},[103,62289,62113],{"class":1952},[103,62291,62164],{"class":1952},[103,62293,62294],{"class":1952}," .name",[103,62296,15562],{"class":113},[103,62298,62299,62301,62303,62306],{"class":105,"line":16816},[103,62300,57406],{"class":162},[103,62302,51427],{"class":113},[103,62304,62305],{"class":162},"#FB7299",[103,62307,1279],{"class":113},[103,62309,62310,62312,62314,62316,62318],{"class":105,"line":16821},[103,62311,54912],{"class":162},[103,62313,51427],{"class":113},[103,62315,662],{"class":162},[103,62317,51482],{"class":109},[103,62319,1279],{"class":113},[103,62321,62322,62325,62327,62330],{"class":105,"line":16835},[103,62323,62324],{"class":162},"      font-weight",[103,62326,51427],{"class":113},[103,62328,62329],{"class":162},"bold",[103,62331,1279],{"class":113},[103,62333,62334],{"class":105,"line":16840},[103,62335,2176],{"class":113},[103,62337,62338],{"class":105,"line":16845},[103,62339,2389],{"emptyLinePlaceholder":30},[103,62341,62342,62344,62346,62349],{"class":105,"line":16859},[103,62343,62113],{"class":1952},[103,62345,62164],{"class":1952},[103,62347,62348],{"class":1952}," .text",[103,62350,15562],{"class":113},[103,62352,62353,62355,62357,62360],{"class":105,"line":16871},[103,62354,57406],{"class":162},[103,62356,51427],{"class":113},[103,62358,62359],{"class":162},"#333",[103,62361,1279],{"class":113},[103,62363,62364,62366,62368,62370,62372,62374],{"class":105,"line":16876},[103,62365,54685],{"class":162},[103,62367,51427],{"class":113},[103,62369,559],{"class":162},[103,62371,51482],{"class":109},[103,62373,4082],{"class":162},[103,62375,1279],{"class":113},[103,62377,62378],{"class":105,"line":16889},[103,62379,2176],{"class":113},[103,62381,62382],{"class":105,"line":16894},[103,62383,2389],{"emptyLinePlaceholder":30},[103,62385,62386,62388,62390,62393],{"class":105,"line":16899},[103,62387,62113],{"class":1952},[103,62389,62164],{"class":1952},[103,62391,62392],{"class":1952}," .time",[103,62394,15562],{"class":113},[103,62396,62397,62399,62401,62403],{"class":105,"line":16904},[103,62398,57406],{"class":162},[103,62400,51427],{"class":113},[103,62402,62060],{"class":162},[103,62404,1279],{"class":113},[103,62406,62407,62409,62411,62413,62415],{"class":105,"line":16917},[103,62408,54912],{"class":162},[103,62410,51427],{"class":113},[103,62412,611],{"class":162},[103,62414,51482],{"class":109},[103,62416,1279],{"class":113},[103,62418,62419],{"class":105,"line":16922},[103,62420,2176],{"class":113},[103,62422,62423,62425,62427],{"class":105,"line":32623},[103,62424,52407],{"class":113},[103,62426,5116],{"class":51290},[103,62428,51297],{"class":113},[103,62430,62431,62433,62435],{"class":105,"line":32629},[103,62432,51775],{"class":113},[103,62434,51324],{"class":51290},[103,62436,51297],{"class":113},[103,62438,62439],{"class":105,"line":32635},[103,62440,2389],{"emptyLinePlaceholder":30},[103,62442,62443,62445,62447],{"class":105,"line":32641},[103,62444,1023],{"class":113},[103,62446,51790],{"class":51290},[103,62448,51297],{"class":113},[103,62450,62451,62453,62455,62457,62459,62462],{"class":105,"line":32647},[103,62452,52134],{"class":113},[103,62454,51601],{"class":51290},[103,62456,53476],{"class":1952},[103,62458,159],{"class":113},[103,62460,62461],{"class":218},"\"wrapper\"",[103,62463,51297],{"class":113},[103,62465,62466,62468,62470,62472,62474,62477,62479,62481],{"class":105,"line":32658},[103,62467,51331],{"class":113},[103,62469,554],{"class":51290},[103,62471,53476],{"class":1952},[103,62473,159],{"class":113},[103,62475,62476],{"class":218},"\"avatar\"",[103,62478,55304],{"class":113},[103,62480,554],{"class":51290},[103,62482,51297],{"class":113},[103,62484,62485,62487,62489,62491,62493,62496,62498,62500,62503,62505,62507,62509,62512,62514,62517,62519,62521],{"class":105,"line":32664},[103,62486,51331],{"class":113},[103,62488,54278],{"class":51290},[103,62490,14949],{"class":1952},[103,62492,159],{"class":113},[103,62494,62495],{"class":218},"\"tx\"",[103,62497,61010],{"class":1952},[103,62499,159],{"class":113},[103,62501,62502],{"class":218},"\"发一条友善的评论\"",[103,62504,54301],{"class":1952},[103,62506,159],{"class":113},[103,62508,3690],{"class":218},[103,62510,62511],{"class":1952}," maxlength",[103,62513,159],{"class":113},[103,62515,62516],{"class":218},"\"200\"",[103,62518,55304],{"class":113},[103,62520,54278],{"class":51290},[103,62522,51297],{"class":113},[103,62524,62525,62527,62529,62532,62534],{"class":105,"line":32684},[103,62526,51331],{"class":113},[103,62528,53877],{"class":51290},[103,62530,62531],{"class":113},">发布\u003C\u002F",[103,62533,53877],{"class":51290},[103,62535,51297],{"class":113},[103,62537,62538,62540,62542],{"class":105,"line":32690},[103,62539,52407],{"class":113},[103,62541,51601],{"class":51290},[103,62543,51297],{"class":113},[103,62545,62546,62548,62550,62552,62554,62556],{"class":105,"line":32701},[103,62547,52134],{"class":113},[103,62549,51601],{"class":51290},[103,62551,53476],{"class":1952},[103,62553,159],{"class":113},[103,62555,62461],{"class":218},[103,62557,51297],{"class":113},[103,62559,62560,62562,62564,62566,62568,62571,62574,62576],{"class":105,"line":32707},[103,62561,51331],{"class":113},[103,62563,103],{"class":51290},[103,62565,53476],{"class":1952},[103,62567,159],{"class":113},[103,62569,62570],{"class":218},"\"total\"",[103,62572,62573],{"class":113},">0\u002F200字\u003C\u002F",[103,62575,103],{"class":51290},[103,62577,51297],{"class":113},[103,62579,62580,62582,62584],{"class":105,"line":32713},[103,62581,52407],{"class":113},[103,62583,51601],{"class":51290},[103,62585,51297],{"class":113},[103,62587,62588,62590,62592,62594,62596,62599],{"class":105,"line":32719},[103,62589,52134],{"class":113},[103,62591,51601],{"class":51290},[103,62593,53476],{"class":1952},[103,62595,159],{"class":113},[103,62597,62598],{"class":218},"\"list\"",[103,62600,51297],{"class":113},[103,62602,62603,62605,62607,62609,62611,62614,62617,62619,62622],{"class":105,"line":32725},[103,62604,51331],{"class":113},[103,62606,51601],{"class":51290},[103,62608,53476],{"class":1952},[103,62610,159],{"class":113},[103,62612,62613],{"class":218},"\"item\"",[103,62615,62616],{"class":1952}," style",[103,62618,159],{"class":113},[103,62620,62621],{"class":218},"\"display: none;\"",[103,62623,51297],{"class":113},[103,62625,62626,62628,62630,62632,62634,62636,62638,62640],{"class":105,"line":32731},[103,62627,55224],{"class":113},[103,62629,554],{"class":51290},[103,62631,53476],{"class":1952},[103,62633,159],{"class":113},[103,62635,62476],{"class":218},[103,62637,55304],{"class":113},[103,62639,554],{"class":51290},[103,62641,51297],{"class":113},[103,62643,62644,62646,62648,62650,62652,62655],{"class":105,"line":32737},[103,62645,55224],{"class":113},[103,62647,51601],{"class":51290},[103,62649,53476],{"class":1952},[103,62651,159],{"class":113},[103,62653,62654],{"class":218},"\"info\"",[103,62656,51297],{"class":113},[103,62658,62659,62661,62663,62665,62667,62670,62673,62675],{"class":105,"line":32743},[103,62660,55292],{"class":113},[103,62662,14],{"class":51290},[103,62664,53476],{"class":1952},[103,62666,159],{"class":113},[103,62668,62669],{"class":218},"\"name\"",[103,62671,62672],{"class":113},">清风徐来\u003C\u002F",[103,62674,14],{"class":51290},[103,62676,51297],{"class":113},[103,62678,62679,62681,62683,62685,62687,62690,62693,62695],{"class":105,"line":32763},[103,62680,55292],{"class":113},[103,62682,14],{"class":51290},[103,62684,53476],{"class":1952},[103,62686,159],{"class":113},[103,62688,62689],{"class":218},"\"text\"",[103,62691,62692],{"class":113},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[103,62694,14],{"class":51290},[103,62696,51297],{"class":113},[103,62698,62699,62701,62703,62705,62707,62710,62713,62715],{"class":105,"line":32769},[103,62700,55292],{"class":113},[103,62702,14],{"class":51290},[103,62704,53476],{"class":1952},[103,62706,159],{"class":113},[103,62708,62709],{"class":218},"\"time\"",[103,62711,62712],{"class":113},">2022-10-10 20:29:21\u003C\u002F",[103,62714,14],{"class":51290},[103,62716,51297],{"class":113},[103,62718,62719,62721,62723],{"class":105,"line":32785},[103,62720,55397],{"class":113},[103,62722,51601],{"class":51290},[103,62724,51297],{"class":113},[103,62726,62727,62729,62731],{"class":105,"line":32791},[103,62728,51766],{"class":113},[103,62730,51601],{"class":51290},[103,62732,51297],{"class":113},[103,62734,62735,62737,62739],{"class":105,"line":32805},[103,62736,52407],{"class":113},[103,62738,51601],{"class":51290},[103,62740,51297],{"class":113},[103,62742,62743,62745,62747],{"class":105,"line":32811},[103,62744,52134],{"class":113},[103,62746,51803],{"class":51290},[103,62748,51297],{"class":113},[103,62750,62751,62753,62756,62758,62760,62762,62764,62767],{"class":105,"line":32826},[103,62752,11211],{"class":109},[103,62754,62755],{"class":162}," tx",[103,62757,13554],{"class":109},[103,62759,54386],{"class":113},[103,62761,54389],{"class":1952},[103,62763,114],{"class":113},[103,62765,62766],{"class":218},"'#tx'",[103,62768,120],{"class":113},[103,62770,62771,62773,62776,62778,62780,62782,62784,62787],{"class":105,"line":32832},[103,62772,11211],{"class":109},[103,62774,62775],{"class":162}," total",[103,62777,13554],{"class":109},[103,62779,54386],{"class":113},[103,62781,54389],{"class":1952},[103,62783,114],{"class":113},[103,62785,62786],{"class":218},"'.total'",[103,62788,120],{"class":113},[103,62790,62791],{"class":105,"line":32841},[103,62792,62793],{"class":172},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[103,62795,62796,62799,62801,62803,62805,62807,62809],{"class":105,"line":32847},[103,62797,62798],{"class":113},"    tx.",[103,62800,57803],{"class":1952},[103,62802,114],{"class":113},[103,62804,61317],{"class":218},[103,62806,12425],{"class":113},[103,62808,54439],{"class":109},[103,62810,54442],{"class":113},[103,62812,62813,62816,62818],{"class":105,"line":32856},[103,62814,62815],{"class":113},"      total.style.opacity ",[103,62817,159],{"class":109},[103,62819,55689],{"class":162},[103,62821,62822],{"class":105,"line":32862},[103,62823,33451],{"class":113},[103,62825,62826],{"class":105,"line":32868},[103,62827,62828],{"class":172},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[103,62830,62831,62833,62835,62837,62839,62841,62843],{"class":105,"line":32877},[103,62832,62798],{"class":113},[103,62834,57803],{"class":1952},[103,62836,114],{"class":113},[103,62838,61378],{"class":218},[103,62840,12425],{"class":113},[103,62842,54439],{"class":109},[103,62844,54442],{"class":113},[103,62846,62847,62849,62851],{"class":105,"line":32883},[103,62848,62815],{"class":113},[103,62850,159],{"class":109},[103,62852,47323],{"class":162},[103,62854,62855],{"class":105,"line":32894},[103,62856,33451],{"class":113},[103,62858,62859],{"class":105,"line":32900},[103,62860,62861],{"class":172},"    \u002F\u002F 3. 检测用户输入\n",[103,62863,62864,62866,62868,62870,62873,62875,62877],{"class":105,"line":32919},[103,62865,62798],{"class":113},[103,62867,57803],{"class":1952},[103,62869,114],{"class":113},[103,62871,62872],{"class":218},"'input'",[103,62874,12425],{"class":113},[103,62876,54439],{"class":109},[103,62878,54442],{"class":113},[103,62880,62881],{"class":105,"line":32925},[103,62882,62883],{"class":172},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[103,62885,62886,62889,62891,62894,62897,62899,62902,62904,62906],{"class":105,"line":32936},[103,62887,62888],{"class":113},"      total.innerHTML ",[103,62890,159],{"class":109},[103,62892,62893],{"class":218}," `${",[103,62895,62896],{"class":113},"tx",[103,62898,671],{"class":218},[103,62900,62901],{"class":113},"value",[103,62903,671],{"class":218},[103,62905,51958],{"class":162},[103,62907,62908],{"class":218},"}\u002F200字`\n",[103,62910,62911],{"class":105,"line":32942},[103,62912,33451],{"class":113},[103,62914,62915],{"class":105,"line":32962},[103,62916,2389],{"emptyLinePlaceholder":30},[103,62918,62919],{"class":105,"line":32978},[103,62920,62921],{"class":172},"    \u002F\u002F const str = 'andy'\n",[103,62923,62924],{"class":105,"line":32984},[103,62925,62926],{"class":172},"    \u002F\u002F console.log(str.length)\n",[103,62928,62929,62931,62933],{"class":105,"line":32998},[103,62930,52407],{"class":113},[103,62932,51803],{"class":51290},[103,62934,51297],{"class":113},[103,62936,62937,62939,62941],{"class":105,"line":33004},[103,62938,51775],{"class":113},[103,62940,51790],{"class":51290},[103,62942,51297],{"class":113},[103,62944,62945],{"class":105,"line":33010},[103,62946,2389],{"emptyLinePlaceholder":30},[103,62948,62949,62951,62953],{"class":105,"line":33021},[103,62950,51775],{"class":113},[103,62952,50625],{"class":51290},[103,62954,51297],{"class":113},[21988,62956,62958],{"id":62957},"_3254-change事件","3.2.5.4 change事件",[14,62960,62961],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,62963,62964],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,62966,62967],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[94,62969,62971],{"className":50623,"code":62970,"language":50625,"meta":24,"style":24},"\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",[100,62972,62973,62983,62997,63001,63009,63023,63043,63055,63063,63067,63075,63089,63097,63115,63133,63145,63149,63157,63165,63169],{"__ignoreMap":24},[103,62974,62975,62977,62979,62981],{"class":105,"line":106},[103,62976,51287],{"class":113},[103,62978,51291],{"class":51290},[103,62980,51294],{"class":1952},[103,62982,51297],{"class":113},[103,62984,62985,62987,62989,62991,62993,62995],{"class":105,"line":25},[103,62986,1023],{"class":113},[103,62988,50625],{"class":51290},[103,62990,51306],{"class":1952},[103,62992,159],{"class":113},[103,62994,51311],{"class":218},[103,62996,51297],{"class":113},[103,62998,62999],{"class":105,"line":1168},[103,63000,2389],{"emptyLinePlaceholder":30},[103,63002,63003,63005,63007],{"class":105,"line":1183},[103,63004,1023],{"class":113},[103,63006,51324],{"class":51290},[103,63008,51297],{"class":113},[103,63010,63011,63013,63015,63017,63019,63021],{"class":105,"line":1189},[103,63012,52134],{"class":113},[103,63014,51334],{"class":51290},[103,63016,51337],{"class":1952},[103,63018,159],{"class":113},[103,63020,51342],{"class":218},[103,63022,51297],{"class":113},[103,63024,63025,63027,63029,63031,63033,63035,63037,63039,63041],{"class":105,"line":1203},[103,63026,52134],{"class":113},[103,63028,51334],{"class":51290},[103,63030,14910],{"class":1952},[103,63032,159],{"class":113},[103,63034,51381],{"class":218},[103,63036,51361],{"class":1952},[103,63038,159],{"class":113},[103,63040,51388],{"class":218},[103,63042,51297],{"class":113},[103,63044,63045,63047,63049,63051,63053],{"class":105,"line":1209},[103,63046,52134],{"class":113},[103,63048,51397],{"class":51290},[103,63050,51400],{"class":113},[103,63052,51397],{"class":51290},[103,63054,51297],{"class":113},[103,63056,63057,63059,63061],{"class":105,"line":1300},[103,63058,51775],{"class":113},[103,63060,51324],{"class":51290},[103,63062,51297],{"class":113},[103,63064,63065],{"class":105,"line":1306},[103,63066,2389],{"emptyLinePlaceholder":30},[103,63068,63069,63071,63073],{"class":105,"line":1318},[103,63070,1023],{"class":113},[103,63072,51790],{"class":51290},[103,63074,51297],{"class":113},[103,63076,63077,63079,63081,63083,63085,63087],{"class":105,"line":1601},[103,63078,52134],{"class":113},[103,63080,53811],{"class":51290},[103,63082,53814],{"class":1952},[103,63084,159],{"class":113},[103,63086,62689],{"class":218},[103,63088,51297],{"class":113},[103,63090,63091,63093,63095],{"class":105,"line":1606},[103,63092,52134],{"class":113},[103,63094,51803],{"class":51290},[103,63096,51297],{"class":113},[103,63098,63099,63101,63103,63105,63107,63109,63111,63113],{"class":105,"line":1612},[103,63100,11211],{"class":109},[103,63102,60595],{"class":162},[103,63104,13554],{"class":109},[103,63106,54386],{"class":113},[103,63108,54389],{"class":1952},[103,63110,114],{"class":113},[103,63112,62872],{"class":218},[103,63114,120],{"class":113},[103,63116,63117,63120,63122,63124,63127,63129,63131],{"class":105,"line":1617},[103,63118,63119],{"class":113},"    input.",[103,63121,57803],{"class":1952},[103,63123,114],{"class":113},[103,63125,63126],{"class":218},"'change'",[103,63128,12425],{"class":113},[103,63130,54439],{"class":109},[103,63132,54442],{"class":113},[103,63134,63135,63137,63139,63141,63143],{"class":105,"line":1631},[103,63136,58234],{"class":113},[103,63138,58237],{"class":1952},[103,63140,114],{"class":113},[103,63142,706],{"class":162},[103,63144,120],{"class":113},[103,63146,63147],{"class":105,"line":1636},[103,63148,33451],{"class":113},[103,63150,63151,63153,63155],{"class":105,"line":1642},[103,63152,52407],{"class":113},[103,63154,51803],{"class":51290},[103,63156,51297],{"class":113},[103,63158,63159,63161,63163],{"class":105,"line":1663},[103,63160,51775],{"class":113},[103,63162,51790],{"class":51290},[103,63164,51297],{"class":113},[103,63166,63167],{"class":105,"line":1668},[103,63168,2389],{"emptyLinePlaceholder":30},[103,63170,63171,63173,63175],{"class":105,"line":1682},[103,63172,51775],{"class":113},[103,63174,50625],{"class":51290},[103,63176,51297],{"class":113},[14,63178,63179],{},"总结：内容发生改变才回去触发",[74,63181,63183],{"id":63182},"_326-事件对象","3.2.6 事件对象",[21988,63185,63187],{"id":63186},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63189,63190],{},[1451,63191],{"alt":24,"src":63192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63194,63195],{},[1451,63196],{"alt":24,"src":63197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63199,63200],{},"点击一次，就输出了事件对象，它是个对象",[14,63202,63203],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63205,63206],{},[1451,63207],{"alt":24,"src":63208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21988,63210,63212],{"id":63211},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63214,63215],{},[1451,63216],{"alt":24,"src":63217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63219,63220],{},"实现按特殊字符才是实现打印输出效果：",[94,63222,63224],{"className":53057,"code":63223,"language":53059,"meta":24,"style":24},"\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",[100,63225,63226,63234,63239,63253,63261,63266,63271,63276,63281,63286,63291,63296,63301,63306,63310,63314,63322],{"__ignoreMap":24},[103,63227,63228,63230,63232],{"class":105,"line":106},[103,63229,1023],{"class":113},[103,63231,51790],{"class":51290},[103,63233,51297],{"class":113},[103,63235,63236],{"class":105,"line":25},[103,63237,63238],{"class":172},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[103,63240,63241,63243,63245,63247,63249,63251],{"class":105,"line":1168},[103,63242,52134],{"class":113},[103,63244,53811],{"class":51290},[103,63246,53814],{"class":1952},[103,63248,159],{"class":113},[103,63250,62689],{"class":218},[103,63252,51297],{"class":113},[103,63254,63255,63257,63259],{"class":105,"line":1183},[103,63256,52134],{"class":113},[103,63258,51803],{"class":51290},[103,63260,51297],{"class":113},[103,63262,63263],{"class":105,"line":1189},[103,63264,63265],{"class":113},"    \u002F\u002F const btn = document.querySelector('button')\n",[103,63267,63268],{"class":105,"line":1203},[103,63269,63270],{"class":113},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[103,63272,63273],{"class":105,"line":1209},[103,63274,63275],{"class":113},"    \u002F\u002F   console.log(e);\n",[103,63277,63278],{"class":105,"line":1300},[103,63279,63280],{"class":113},"    \u002F\u002F })\n",[103,63282,63283],{"class":105,"line":1306},[103,63284,63285],{"class":113},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[103,63287,63288],{"class":105,"line":1318},[103,63289,63290],{"class":113},"    const input = document.querySelector('input')\n",[103,63292,63293],{"class":105,"line":1601},[103,63294,63295],{"class":113},"    input.addEventListener('keyup', function (e) {\n",[103,63297,63298],{"class":105,"line":1606},[103,63299,63300],{"class":113},"      if (e.key === 'Enter') {\n",[103,63302,63303],{"class":105,"line":1612},[103,63304,63305],{"class":113},"        console.log('我按下了回车键')\n",[103,63307,63308],{"class":105,"line":1617},[103,63309,52388],{"class":113},[103,63311,63312],{"class":105,"line":1631},[103,63313,33451],{"class":113},[103,63315,63316,63318,63320],{"class":105,"line":1636},[103,63317,52407],{"class":113},[103,63319,51803],{"class":51290},[103,63321,51297],{"class":113},[103,63323,63324,63326,63328],{"class":105,"line":1642},[103,63325,51775],{"class":113},[103,63327,51790],{"class":51290},[103,63329,51297],{"class":113},[21988,63331,63333],{"id":63332},"_3263-trim方法","3.2.6.3 trim方法",[14,63335,63336],{},[1451,63337],{"alt":24,"src":63338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63340,63341],{},[1451,63342],{"alt":24,"src":63343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63345,63346],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63348,63349],{},"str.trim()",[74,63351,63353],{"id":63352},"_327-环境对象","3.2.7 环境对象",[14,63355,63356],{},[1451,63357],{"alt":24,"src":63358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63360,63361],{},[1451,63362],{"alt":24,"src":63363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63365,63366],{},[1451,63367],{"alt":24,"src":63368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63370,63371],{},"实际函数调用是window.fn()",[14,63373,63374],{},"普通函数里面this指向的是window",[1120,63376,63377,63380,63383],{},[60,63378,63379],{},"在普通函数下，this指向的是window",[60,63381,63382],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[60,63384,63385],{},"箭头函数没有this",[14,63387,63388],{},"粗略记法就是：谁调用，this就指向谁",[14,63390,63391],{},[1451,63392],{"alt":24,"src":63393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63395,63396],{},[1451,63397],{"alt":24,"src":63398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63400,63401],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63403,63404],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[94,63406,63408],{"className":53057,"code":63407,"language":53059,"meta":24,"style":24},"\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",[100,63409,63410,63418,63430,63438,63443,63448,63453,63458,63462,63470],{"__ignoreMap":24},[103,63411,63412,63414,63416],{"class":105,"line":106},[103,63413,1023],{"class":113},[103,63415,51790],{"class":51290},[103,63417,51297],{"class":113},[103,63419,63420,63422,63424,63426,63428],{"class":105,"line":25},[103,63421,52134],{"class":113},[103,63423,53877],{"class":51290},[103,63425,53883],{"class":113},[103,63427,53877],{"class":51290},[103,63429,51297],{"class":113},[103,63431,63432,63434,63436],{"class":105,"line":1168},[103,63433,52134],{"class":113},[103,63435,51803],{"class":51290},[103,63437,51297],{"class":113},[103,63439,63440],{"class":105,"line":1183},[103,63441,63442],{"class":113},"    const button = document.querySelector('button')\n",[103,63444,63445],{"class":105,"line":1189},[103,63446,63447],{"class":113},"    button.addEventListener('click', function () {\n",[103,63449,63450],{"class":105,"line":1203},[103,63451,63452],{"class":113},"      \u002F\u002F console.log(this);\n",[103,63454,63455],{"class":105,"line":1209},[103,63456,63457],{"class":113},"      this.style.color = 'pink'\n",[103,63459,63460],{"class":105,"line":1300},[103,63461,33451],{"class":113},[103,63463,63464,63466,63468],{"class":105,"line":1306},[103,63465,52407],{"class":113},[103,63467,51803],{"class":51290},[103,63469,51297],{"class":113},[103,63471,63472,63474,63476],{"class":105,"line":1318},[103,63473,51775],{"class":113},[103,63475,51790],{"class":51290},[103,63477,51297],{"class":113},[74,63479,63481],{"id":63480},"_328-回调函数","3.2.8 回调函数",[14,63483,63484],{},[1451,63485],{"alt":24,"src":63486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63488,63489],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63491,11322],{},[1120,63493,63494,63497,63500],{},[60,63495,63496],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[60,63498,63499],{},"回调函数本质还是函数，只不过把它当成参数使用",[60,63501,63502],{},"使用匿名函数做为回调函数比较常见",[74,63504,63506],{"id":63505},"_329-tab栏切换","3.2.9 tab栏切换",[14,63508,63509],{},[1451,63510],{"alt":24,"src":63511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[94,63513,63515],{"className":50623,"code":63514,"language":50625,"meta":24,"style":24},"\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",[100,63516,63517,63527,63541,63545,63553,63567,63587,63607,63620,63628,63634,63644,63654,63658,63662,63669,63682,63695,63707,63723,63727,63731,63738,63750,63762,63774,63784,63794,63798,63802,63811,63823,63834,63846,63850,63854,63862,63872,63882,63892,63896,63900,63910,63924,63936,63940,63944,63956,63967,63984,63994,63998,64002,64017,64028,64038,64042,64046,64053,64068,64072,64076,64084,64094,64098,64102,64111,64121,64125,64133,64141,64145,64153,64168,64183,64196,64204,64238,64265,64292,64319,64346,64354,64362,64377,64414,64449,64484,64519,64554,64562,64570,64578,64583,64588,64608,64613,64642,64647,64652,64670,64675,64680,64685,64707,64712,64728,64732,64737,64742,64763,64768,64797,64801,64806,64810,64818,64826,64830],{"__ignoreMap":24},[103,63518,63519,63521,63523,63525],{"class":105,"line":106},[103,63520,51287],{"class":113},[103,63522,51291],{"class":51290},[103,63524,51294],{"class":1952},[103,63526,51297],{"class":113},[103,63528,63529,63531,63533,63535,63537,63539],{"class":105,"line":25},[103,63530,1023],{"class":113},[103,63532,50625],{"class":51290},[103,63534,51306],{"class":1952},[103,63536,159],{"class":113},[103,63538,51311],{"class":218},[103,63540,51297],{"class":113},[103,63542,63543],{"class":105,"line":1168},[103,63544,2389],{"emptyLinePlaceholder":30},[103,63546,63547,63549,63551],{"class":105,"line":1183},[103,63548,1023],{"class":113},[103,63550,51324],{"class":51290},[103,63552,51297],{"class":113},[103,63554,63555,63557,63559,63561,63563,63565],{"class":105,"line":1189},[103,63556,52134],{"class":113},[103,63558,51334],{"class":51290},[103,63560,51337],{"class":1952},[103,63562,159],{"class":113},[103,63564,51342],{"class":218},[103,63566,59117],{"class":113},[103,63568,63569,63571,63573,63575,63577,63579,63581,63583,63585],{"class":105,"line":1203},[103,63570,52134],{"class":113},[103,63572,51334],{"class":51290},[103,63574,51353],{"class":1952},[103,63576,159],{"class":113},[103,63578,51358],{"class":218},[103,63580,51361],{"class":1952},[103,63582,159],{"class":113},[103,63584,51366],{"class":218},[103,63586,59117],{"class":113},[103,63588,63589,63591,63593,63595,63597,63599,63601,63603,63605],{"class":105,"line":1209},[103,63590,52134],{"class":113},[103,63592,51334],{"class":51290},[103,63594,14910],{"class":1952},[103,63596,159],{"class":113},[103,63598,51381],{"class":218},[103,63600,51361],{"class":1952},[103,63602,159],{"class":113},[103,63604,51388],{"class":218},[103,63606,59117],{"class":113},[103,63608,63609,63611,63613,63616,63618],{"class":105,"line":1300},[103,63610,52134],{"class":113},[103,63612,51397],{"class":51290},[103,63614,63615],{"class":113},">tab栏切换\u003C\u002F",[103,63617,51397],{"class":51290},[103,63619,51297],{"class":113},[103,63621,63622,63624,63626],{"class":105,"line":1306},[103,63623,52134],{"class":113},[103,63625,5116],{"class":51290},[103,63627,51297],{"class":113},[103,63629,63630,63632],{"class":105,"line":1318},[103,63631,6393],{"class":51290},[103,63633,15562],{"class":113},[103,63635,63636,63638,63640,63642],{"class":105,"line":1601},[103,63637,54696],{"class":162},[103,63639,51427],{"class":113},[103,63641,305],{"class":162},[103,63643,1279],{"class":113},[103,63645,63646,63648,63650,63652],{"class":105,"line":1606},[103,63647,54685],{"class":162},[103,63649,51427],{"class":113},[103,63651,305],{"class":162},[103,63653,1279],{"class":113},[103,63655,63656],{"class":105,"line":1612},[103,63657,2176],{"class":113},[103,63659,63660],{"class":105,"line":1617},[103,63661,2389],{"emptyLinePlaceholder":30},[103,63663,63664,63667],{"class":105,"line":1631},[103,63665,63666],{"class":1952},"    .tab",[103,63668,15562],{"class":113},[103,63670,63671,63673,63675,63678,63680],{"class":105,"line":1636},[103,63672,54761],{"class":162},[103,63674,51427],{"class":113},[103,63676,63677],{"class":162},"590",[103,63679,51482],{"class":109},[103,63681,1279],{"class":113},[103,63683,63684,63686,63688,63691,63693],{"class":105,"line":1642},[103,63685,54775],{"class":162},[103,63687,51427],{"class":113},[103,63689,63690],{"class":162},"340",[103,63692,51482],{"class":109},[103,63694,1279],{"class":113},[103,63696,63697,63699,63701,63703,63705],{"class":105,"line":1663},[103,63698,54696],{"class":162},[103,63700,51427],{"class":113},[103,63702,813],{"class":162},[103,63704,51482],{"class":109},[103,63706,1279],{"class":113},[103,63708,63709,63711,63713,63715,63717,63719,63721],{"class":105,"line":1668},[103,63710,61967],{"class":162},[103,63712,51427],{"class":113},[103,63714,331],{"class":162},[103,63716,51482],{"class":109},[103,63718,51511],{"class":162},[103,63720,62234],{"class":162},[103,63722,1279],{"class":113},[103,63724,63725],{"class":105,"line":1682},[103,63726,2176],{"class":113},[103,63728,63729],{"class":105,"line":1687},[103,63730,2389],{"emptyLinePlaceholder":30},[103,63732,63733,63736],{"class":105,"line":1716},[103,63734,63735],{"class":1952},"    .tab-nav",[103,63737,15562],{"class":113},[103,63739,63740,63742,63744,63746,63748],{"class":105,"line":1721},[103,63741,54761],{"class":162},[103,63743,51427],{"class":113},[103,63745,424],{"class":162},[103,63747,441],{"class":109},[103,63749,1279],{"class":113},[103,63751,63752,63754,63756,63758,63760],{"class":105,"line":1738},[103,63753,54775],{"class":162},[103,63755,51427],{"class":113},[103,63757,1020],{"class":162},[103,63759,51482],{"class":109},[103,63761,1279],{"class":113},[103,63763,63764,63766,63768,63770,63772],{"class":105,"line":1743},[103,63765,57349],{"class":162},[103,63767,51427],{"class":113},[103,63769,1020],{"class":162},[103,63771,51482],{"class":109},[103,63773,1279],{"class":113},[103,63775,63776,63778,63780,63782],{"class":105,"line":1748},[103,63777,54999],{"class":162},[103,63779,51427],{"class":113},[103,63781,51467],{"class":162},[103,63783,1279],{"class":113},[103,63785,63786,63788,63790,63792],{"class":105,"line":1753},[103,63787,55010],{"class":162},[103,63789,51427],{"class":113},[103,63791,51658],{"class":162},[103,63793,1279],{"class":113},[103,63795,63796],{"class":105,"line":1767},[103,63797,2176],{"class":113},[103,63799,63800],{"class":105,"line":1772},[103,63801,2389],{"emptyLinePlaceholder":30},[103,63803,63804,63806,63809],{"class":105,"line":2566},[103,63805,63735],{"class":1952},[103,63807,63808],{"class":51290}," h3",[103,63810,15562],{"class":113},[103,63812,63813,63815,63817,63819,63821],{"class":105,"line":2580},[103,63814,54912],{"class":162},[103,63816,51427],{"class":113},[103,63818,913],{"class":162},[103,63820,51482],{"class":109},[103,63822,1279],{"class":113},[103,63824,63825,63827,63829,63832],{"class":105,"line":2588},[103,63826,62324],{"class":162},[103,63828,51427],{"class":113},[103,63830,63831],{"class":162},"normal",[103,63833,1279],{"class":113},[103,63835,63836,63838,63840,63842,63844],{"class":105,"line":2593},[103,63837,61990],{"class":162},[103,63839,51427],{"class":113},[103,63841,813],{"class":162},[103,63843,51482],{"class":109},[103,63845,1279],{"class":113},[103,63847,63848],{"class":105,"line":2599},[103,63849,2176],{"class":113},[103,63851,63852],{"class":105,"line":2605},[103,63853,2389],{"emptyLinePlaceholder":30},[103,63855,63856,63858,63860],{"class":105,"line":2610},[103,63857,63735],{"class":1952},[103,63859,61282],{"class":51290},[103,63861,15562],{"class":113},[103,63863,63864,63866,63868,63870],{"class":105,"line":7938},[103,63865,54722],{"class":162},[103,63867,51427],{"class":113},[103,63869,54727],{"class":162},[103,63871,1279],{"class":113},[103,63873,63874,63876,63878,63880],{"class":105,"line":7962},[103,63875,54999],{"class":162},[103,63877,51427],{"class":113},[103,63879,51467],{"class":162},[103,63881,1279],{"class":113},[103,63883,63884,63886,63888,63890],{"class":105,"line":7967},[103,63885,55010],{"class":162},[103,63887,51427],{"class":113},[103,63889,51570],{"class":162},[103,63891,1279],{"class":113},[103,63893,63894],{"class":105,"line":7973},[103,63895,2176],{"class":113},[103,63897,63898],{"class":105,"line":8000},[103,63899,2389],{"emptyLinePlaceholder":30},[103,63901,63902,63904,63906,63908],{"class":105,"line":8005},[103,63903,63735],{"class":1952},[103,63905,61282],{"class":51290},[103,63907,55065],{"class":51290},[103,63909,15562],{"class":113},[103,63911,63912,63914,63916,63918,63920,63922],{"class":105,"line":8011},[103,63913,54696],{"class":162},[103,63915,51427],{"class":113},[103,63917,305],{"class":162},[103,63919,8940],{"class":162},[103,63921,51482],{"class":109},[103,63923,1279],{"class":113},[103,63925,63926,63928,63930,63932,63934],{"class":105,"line":8023},[103,63927,54912],{"class":162},[103,63929,51427],{"class":113},[103,63931,662],{"class":162},[103,63933,51482],{"class":109},[103,63935,1279],{"class":113},[103,63937,63938],{"class":105,"line":8035},[103,63939,2176],{"class":113},[103,63941,63942],{"class":105,"line":8047},[103,63943,2389],{"emptyLinePlaceholder":30},[103,63945,63946,63948,63950,63952,63954],{"class":105,"line":9706},[103,63947,63735],{"class":1952},[103,63949,61282],{"class":51290},[103,63951,55065],{"class":51290},[103,63953,1387],{"class":51290},[103,63955,15562],{"class":113},[103,63957,63958,63961,63963,63965],{"class":105,"line":9731},[103,63959,63960],{"class":162},"      text-decoration",[103,63962,51427],{"class":113},[103,63964,54727],{"class":162},[103,63966,1279],{"class":113},[103,63968,63969,63971,63973,63975,63977,63979,63982],{"class":105,"line":9754},[103,63970,62222],{"class":162},[103,63972,51427],{"class":113},[103,63974,191],{"class":162},[103,63976,51482],{"class":109},[103,63978,51511],{"class":162},[103,63980,63981],{"class":162}," transparent",[103,63983,1279],{"class":113},[103,63985,63986,63988,63990,63992],{"class":105,"line":9778},[103,63987,57406],{"class":162},[103,63989,51427],{"class":113},[103,63991,62359],{"class":162},[103,63993,1279],{"class":113},[103,63995,63996],{"class":105,"line":9783},[103,63997,2176],{"class":113},[103,63999,64000],{"class":105,"line":9788},[103,64001,2389],{"emptyLinePlaceholder":30},[103,64003,64004,64006,64008,64010,64012,64015],{"class":105,"line":9793},[103,64005,63735],{"class":1952},[103,64007,61282],{"class":51290},[103,64009,55065],{"class":51290},[103,64011,1387],{"class":51290},[103,64013,64014],{"class":1952},".active",[103,64016,15562],{"class":113},[103,64018,64019,64021,64023,64026],{"class":105,"line":9802},[103,64020,61781],{"class":162},[103,64022,51427],{"class":113},[103,64024,64025],{"class":162},"#e1251b",[103,64027,1279],{"class":113},[103,64029,64030,64032,64034,64036],{"class":105,"line":9807},[103,64031,57406],{"class":162},[103,64033,51427],{"class":113},[103,64035,64025],{"class":162},[103,64037,1279],{"class":113},[103,64039,64040],{"class":105,"line":9813},[103,64041,2176],{"class":113},[103,64043,64044],{"class":105,"line":9834},[103,64045,2389],{"emptyLinePlaceholder":30},[103,64047,64048,64051],{"class":105,"line":9840},[103,64049,64050],{"class":1952},"    .tab-content",[103,64052,15562],{"class":113},[103,64054,64055,64057,64059,64061,64064,64066],{"class":105,"line":9854},[103,64056,54685],{"class":162},[103,64058,51427],{"class":113},[103,64060,305],{"class":162},[103,64062,64063],{"class":162}," 16",[103,64065,51482],{"class":109},[103,64067,1279],{"class":113},[103,64069,64070],{"class":105,"line":9860},[103,64071,2176],{"class":113},[103,64073,64074],{"class":105,"line":9887},[103,64075,2389],{"emptyLinePlaceholder":30},[103,64077,64078,64080,64082],{"class":105,"line":9896},[103,64079,64050],{"class":1952},[103,64081,62164],{"class":1952},[103,64083,15562],{"class":113},[103,64085,64086,64088,64090,64092],{"class":105,"line":9902},[103,64087,54999],{"class":162},[103,64089,51427],{"class":113},[103,64091,54727],{"class":162},[103,64093,1279],{"class":113},[103,64095,64096],{"class":105,"line":9910},[103,64097,2176],{"class":113},[103,64099,64100],{"class":105,"line":9915},[103,64101,2389],{"emptyLinePlaceholder":30},[103,64103,64104,64106,64109],{"class":105,"line":16594},[103,64105,64050],{"class":1952},[103,64107,64108],{"class":1952}," .item.active",[103,64110,15562],{"class":113},[103,64112,64113,64115,64117,64119],{"class":105,"line":16600},[103,64114,54999],{"class":162},[103,64116,51427],{"class":113},[103,64118,60859],{"class":162},[103,64120,1279],{"class":113},[103,64122,64123],{"class":105,"line":16623},[103,64124,2176],{"class":113},[103,64126,64127,64129,64131],{"class":105,"line":16629},[103,64128,52407],{"class":113},[103,64130,5116],{"class":51290},[103,64132,51297],{"class":113},[103,64134,64135,64137,64139],{"class":105,"line":16652},[103,64136,51775],{"class":113},[103,64138,51324],{"class":51290},[103,64140,51297],{"class":113},[103,64142,64143],{"class":105,"line":16666},[103,64144,2389],{"emptyLinePlaceholder":30},[103,64146,64147,64149,64151],{"class":105,"line":16686},[103,64148,1023],{"class":113},[103,64150,51790],{"class":51290},[103,64152,51297],{"class":113},[103,64154,64155,64157,64159,64161,64163,64166],{"class":105,"line":16692},[103,64156,52134],{"class":113},[103,64158,51601],{"class":51290},[103,64160,53476],{"class":1952},[103,64162,159],{"class":113},[103,64164,64165],{"class":218},"\"tab\"",[103,64167,51297],{"class":113},[103,64169,64170,64172,64174,64176,64178,64181],{"class":105,"line":16703},[103,64171,51331],{"class":113},[103,64173,51601],{"class":51290},[103,64175,53476],{"class":1952},[103,64177,159],{"class":113},[103,64179,64180],{"class":218},"\"tab-nav\"",[103,64182,51297],{"class":113},[103,64184,64185,64187,64189,64192,64194],{"class":105,"line":16726},[103,64186,55224],{"class":113},[103,64188,74],{"class":51290},[103,64190,64191],{"class":113},">每日特价\u003C\u002F",[103,64193,74],{"class":51290},[103,64195,51297],{"class":113},[103,64197,64198,64200,64202],{"class":105,"line":16748},[103,64199,55224],{"class":113},[103,64201,1120],{"class":51290},[103,64203,51297],{"class":113},[103,64205,64206,64208,64210,64212,64214,64216,64218,64220,64222,64224,64227,64230,64232,64234,64236],{"class":105,"line":16753},[103,64207,55292],{"class":113},[103,64209,60],{"class":51290},[103,64211,61042],{"class":113},[103,64213,17],{"class":51290},[103,64215,53476],{"class":1952},[103,64217,159],{"class":113},[103,64219,59696],{"class":218},[103,64221,61047],{"class":1952},[103,64223,159],{"class":113},[103,64225,64226],{"class":218},"\"javascript:;\"",[103,64228,64229],{"class":113},">精选\u003C\u002F",[103,64231,17],{"class":51290},[103,64233,55304],{"class":113},[103,64235,60],{"class":51290},[103,64237,51297],{"class":113},[103,64239,64240,64242,64244,64246,64248,64250,64252,64254,64257,64259,64261,64263],{"class":105,"line":16759},[103,64241,55292],{"class":113},[103,64243,60],{"class":51290},[103,64245,61042],{"class":113},[103,64247,17],{"class":51290},[103,64249,61047],{"class":1952},[103,64251,159],{"class":113},[103,64253,64226],{"class":218},[103,64255,64256],{"class":113},">美食\u003C\u002F",[103,64258,17],{"class":51290},[103,64260,55304],{"class":113},[103,64262,60],{"class":51290},[103,64264,51297],{"class":113},[103,64266,64267,64269,64271,64273,64275,64277,64279,64281,64284,64286,64288,64290],{"class":105,"line":16773},[103,64268,55292],{"class":113},[103,64270,60],{"class":51290},[103,64272,61042],{"class":113},[103,64274,17],{"class":51290},[103,64276,61047],{"class":1952},[103,64278,159],{"class":113},[103,64280,64226],{"class":218},[103,64282,64283],{"class":113},">百货\u003C\u002F",[103,64285,17],{"class":51290},[103,64287,55304],{"class":113},[103,64289,60],{"class":51290},[103,64291,51297],{"class":113},[103,64293,64294,64296,64298,64300,64302,64304,64306,64308,64311,64313,64315,64317],{"class":105,"line":16786},[103,64295,55292],{"class":113},[103,64297,60],{"class":51290},[103,64299,61042],{"class":113},[103,64301,17],{"class":51290},[103,64303,61047],{"class":1952},[103,64305,159],{"class":113},[103,64307,64226],{"class":218},[103,64309,64310],{"class":113},">个护\u003C\u002F",[103,64312,17],{"class":51290},[103,64314,55304],{"class":113},[103,64316,60],{"class":51290},[103,64318,51297],{"class":113},[103,64320,64321,64323,64325,64327,64329,64331,64333,64335,64338,64340,64342,64344],{"class":105,"line":16791},[103,64322,55292],{"class":113},[103,64324,60],{"class":51290},[103,64326,61042],{"class":113},[103,64328,17],{"class":51290},[103,64330,61047],{"class":1952},[103,64332,159],{"class":113},[103,64334,64226],{"class":218},[103,64336,64337],{"class":113},">预告\u003C\u002F",[103,64339,17],{"class":51290},[103,64341,55304],{"class":113},[103,64343,60],{"class":51290},[103,64345,51297],{"class":113},[103,64347,64348,64350,64352],{"class":105,"line":16805},[103,64349,55397],{"class":113},[103,64351,1120],{"class":51290},[103,64353,51297],{"class":113},[103,64355,64356,64358,64360],{"class":105,"line":16810},[103,64357,51766],{"class":113},[103,64359,51601],{"class":51290},[103,64361,51297],{"class":113},[103,64363,64364,64366,64368,64370,64372,64375],{"class":105,"line":16816},[103,64365,51331],{"class":113},[103,64367,51601],{"class":51290},[103,64369,53476],{"class":1952},[103,64371,159],{"class":113},[103,64373,64374],{"class":218},"\"tab-content\"",[103,64376,51297],{"class":113},[103,64378,64379,64381,64383,64385,64387,64390,64392,64394,64396,64398,64401,64403,64405,64407,64410,64412],{"class":105,"line":16821},[103,64380,55224],{"class":113},[103,64382,51601],{"class":51290},[103,64384,53476],{"class":1952},[103,64386,159],{"class":113},[103,64388,64389],{"class":218},"\"item active\"",[103,64391,61042],{"class":113},[103,64393,1451],{"class":51290},[103,64395,55229],{"class":1952},[103,64397,159],{"class":113},[103,64399,64400],{"class":218},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[103,64402,55237],{"class":1952},[103,64404,159],{"class":113},[103,64406,7642],{"class":218},[103,64408,64409],{"class":113}," \u002F>\u003C\u002F",[103,64411,51601],{"class":51290},[103,64413,51297],{"class":113},[103,64415,64416,64418,64420,64422,64424,64426,64428,64430,64432,64434,64437,64439,64441,64443,64445,64447],{"class":105,"line":16835},[103,64417,55224],{"class":113},[103,64419,51601],{"class":51290},[103,64421,53476],{"class":1952},[103,64423,159],{"class":113},[103,64425,62613],{"class":218},[103,64427,61042],{"class":113},[103,64429,1451],{"class":51290},[103,64431,55229],{"class":1952},[103,64433,159],{"class":113},[103,64435,64436],{"class":218},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[103,64438,55237],{"class":1952},[103,64440,159],{"class":113},[103,64442,7642],{"class":218},[103,64444,64409],{"class":113},[103,64446,51601],{"class":51290},[103,64448,51297],{"class":113},[103,64450,64451,64453,64455,64457,64459,64461,64463,64465,64467,64469,64472,64474,64476,64478,64480,64482],{"class":105,"line":16840},[103,64452,55224],{"class":113},[103,64454,51601],{"class":51290},[103,64456,53476],{"class":1952},[103,64458,159],{"class":113},[103,64460,62613],{"class":218},[103,64462,61042],{"class":113},[103,64464,1451],{"class":51290},[103,64466,55229],{"class":1952},[103,64468,159],{"class":113},[103,64470,64471],{"class":218},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[103,64473,55237],{"class":1952},[103,64475,159],{"class":113},[103,64477,7642],{"class":218},[103,64479,64409],{"class":113},[103,64481,51601],{"class":51290},[103,64483,51297],{"class":113},[103,64485,64486,64488,64490,64492,64494,64496,64498,64500,64502,64504,64507,64509,64511,64513,64515,64517],{"class":105,"line":16845},[103,64487,55224],{"class":113},[103,64489,51601],{"class":51290},[103,64491,53476],{"class":1952},[103,64493,159],{"class":113},[103,64495,62613],{"class":218},[103,64497,61042],{"class":113},[103,64499,1451],{"class":51290},[103,64501,55229],{"class":1952},[103,64503,159],{"class":113},[103,64505,64506],{"class":218},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[103,64508,55237],{"class":1952},[103,64510,159],{"class":113},[103,64512,7642],{"class":218},[103,64514,64409],{"class":113},[103,64516,51601],{"class":51290},[103,64518,51297],{"class":113},[103,64520,64521,64523,64525,64527,64529,64531,64533,64535,64537,64539,64542,64544,64546,64548,64550,64552],{"class":105,"line":16859},[103,64522,55224],{"class":113},[103,64524,51601],{"class":51290},[103,64526,53476],{"class":1952},[103,64528,159],{"class":113},[103,64530,62613],{"class":218},[103,64532,61042],{"class":113},[103,64534,1451],{"class":51290},[103,64536,55229],{"class":1952},[103,64538,159],{"class":113},[103,64540,64541],{"class":218},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[103,64543,55237],{"class":1952},[103,64545,159],{"class":113},[103,64547,7642],{"class":218},[103,64549,64409],{"class":113},[103,64551,51601],{"class":51290},[103,64553,51297],{"class":113},[103,64555,64556,64558,64560],{"class":105,"line":16871},[103,64557,51766],{"class":113},[103,64559,51601],{"class":51290},[103,64561,51297],{"class":113},[103,64563,64564,64566,64568],{"class":105,"line":16876},[103,64565,52407],{"class":113},[103,64567,51601],{"class":51290},[103,64569,51297],{"class":113},[103,64571,64572,64574,64576],{"class":105,"line":16889},[103,64573,52134],{"class":113},[103,64575,51803],{"class":51290},[103,64577,51297],{"class":113},[103,64579,64580],{"class":105,"line":16894},[103,64581,64582],{"class":172},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[103,64584,64585],{"class":105,"line":16899},[103,64586,64587],{"class":172},"    \u002F\u002F 1.1 获取 a 元素 \n",[103,64589,64590,64592,64595,64597,64599,64601,64603,64606],{"class":105,"line":16904},[103,64591,11211],{"class":109},[103,64593,64594],{"class":162}," as",[103,64596,13554],{"class":109},[103,64598,54386],{"class":113},[103,64600,55671],{"class":1952},[103,64602,114],{"class":113},[103,64604,64605],{"class":218},"'.tab-nav a'",[103,64607,120],{"class":113},[103,64609,64610],{"class":105,"line":16917},[103,64611,64612],{"class":172},"    \u002F\u002F console.log(as) \n",[103,64614,64615,64617,64619,64621,64623,64625,64627,64629,64631,64634,64636,64638,64640],{"class":105,"line":16922},[103,64616,3190],{"class":109},[103,64618,1647],{"class":113},[103,64620,51837],{"class":109},[103,64622,9428],{"class":113},[103,64624,159],{"class":109},[103,64626,4082],{"class":162},[103,64628,9435],{"class":113},[103,64630,1023],{"class":109},[103,64632,64633],{"class":113}," as.",[103,64635,51958],{"class":162},[103,64637,3203],{"class":113},[103,64639,2281],{"class":109},[103,64641,12432],{"class":113},[103,64643,64644],{"class":105,"line":32623},[103,64645,64646],{"class":172},"      \u002F\u002F console.log(as[i])\n",[103,64648,64649],{"class":105,"line":32629},[103,64650,64651],{"class":172},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[103,64653,64654,64657,64659,64661,64664,64666,64668],{"class":105,"line":32635},[103,64655,64656],{"class":113},"      as[i].",[103,64658,57803],{"class":1952},[103,64660,114],{"class":113},[103,64662,64663],{"class":218},"'mouseenter'",[103,64665,12425],{"class":113},[103,64667,54439],{"class":109},[103,64669,54442],{"class":113},[103,64671,64672],{"class":105,"line":32641},[103,64673,64674],{"class":172},"        \u002F\u002F console.log('鼠标经过')\n",[103,64676,64677],{"class":105,"line":32647},[103,64678,64679],{"class":172},"        \u002F\u002F 排他思想  \n",[103,64681,64682],{"class":105,"line":32658},[103,64683,64684],{"class":172},"        \u002F\u002F 干掉别人 移除类active\n",[103,64686,64687,64689,64691,64693,64696,64698,64700,64702,64705],{"class":105,"line":32664},[103,64688,51915],{"class":113},[103,64690,54389],{"class":1952},[103,64692,114],{"class":113},[103,64694,64695],{"class":218},"'.tab-nav .active'",[103,64697,56993],{"class":113},[103,64699,56996],{"class":1952},[103,64701,114],{"class":113},[103,64703,64704],{"class":218},"'active'",[103,64706,120],{"class":113},[103,64708,64709],{"class":105,"line":32684},[103,64710,64711],{"class":172},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[103,64713,64714,64717,64720,64722,64724,64726],{"class":105,"line":32690},[103,64715,64716],{"class":162},"        this",[103,64718,64719],{"class":113},".classList.",[103,64721,5324],{"class":1952},[103,64723,114],{"class":113},[103,64725,64704],{"class":218},[103,64727,120],{"class":113},[103,64729,64730],{"class":105,"line":32701},[103,64731,2389],{"emptyLinePlaceholder":30},[103,64733,64734],{"class":105,"line":32707},[103,64735,64736],{"class":172},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[103,64738,64739],{"class":105,"line":32713},[103,64740,64741],{"class":172},"        \u002F\u002F 干掉别人\n",[103,64743,64744,64746,64748,64750,64753,64755,64757,64759,64761],{"class":105,"line":32719},[103,64745,51915],{"class":113},[103,64747,54389],{"class":1952},[103,64749,114],{"class":113},[103,64751,64752],{"class":218},"'.tab-content .active'",[103,64754,56993],{"class":113},[103,64756,56996],{"class":1952},[103,64758,114],{"class":113},[103,64760,64704],{"class":218},[103,64762,120],{"class":113},[103,64764,64765],{"class":105,"line":32725},[103,64766,64767],{"class":172},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[103,64769,64770,64772,64774,64776,64779,64781,64783,64785,64787,64789,64791,64793,64795],{"class":105,"line":32731},[103,64771,51915],{"class":113},[103,64773,54389],{"class":1952},[103,64775,114],{"class":113},[103,64777,64778],{"class":218},"`.tab-content .item:nth-child(${",[103,64780,554],{"class":113},[103,64782,45556],{"class":109},[103,64784,25108],{"class":162},[103,64786,57022],{"class":218},[103,64788,56993],{"class":113},[103,64790,5324],{"class":1952},[103,64792,114],{"class":113},[103,64794,64704],{"class":218},[103,64796,120],{"class":113},[103,64798,64799],{"class":105,"line":32737},[103,64800,2389],{"emptyLinePlaceholder":30},[103,64802,64803],{"class":105,"line":32743},[103,64804,64805],{"class":113},"      })\n",[103,64807,64808],{"class":105,"line":32763},[103,64809,2176],{"class":113},[103,64811,64812,64814,64816],{"class":105,"line":32769},[103,64813,52407],{"class":113},[103,64815,51803],{"class":51290},[103,64817,51297],{"class":113},[103,64819,64820,64822,64824],{"class":105,"line":32785},[103,64821,51775],{"class":113},[103,64823,51790],{"class":51290},[103,64825,51297],{"class":113},[103,64827,64828],{"class":105,"line":32791},[103,64829,2389],{"emptyLinePlaceholder":30},[103,64831,64832,64834,64836],{"class":105,"line":32805},[103,64833,51775],{"class":113},[103,64835,50625],{"class":51290},[103,64837,51297],{"class":113},[14,64839,64840],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64842,64843],{},"在监听事件中，this指向的就是他的调用者",[14,64845,64846],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64848,53710],{},[14,64850,64851],{},"(function () {",[14,64853,64854],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64856,64857],{},"list.addEventListener('click', function (e) {",[14,64859,64860],{},"if (e.target.tagName === 'A') {",[14,64862,64863],{},"\u002F\u002F 排他思想",[14,64865,64866],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64868,64869],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64871,64872],{},"\u002F\u002F console.log(old);",[14,64874,64875],{},"\u002F\u002F 判断",[14,64877,64878],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64880,64881],{},"if (old) old.classList.remove('active')",[14,64883,64884],{},"e.target.classList.add('active')",[14,64886,1059],{},[14,64888,52454],{},[14,64890,64891],{},"})();",[74,64893,64895],{"id":64894},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[94,64897,64899],{"className":50623,"code":64898,"language":50625,"meta":24,"style":24},"\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",[100,64900,64901,64911,64915,64923,64927,64941,64955,64967,64975,64981,64991,65001,65005,65009,65016,65028,65039,65056,65069,65083,65093,65097,65101,65108,65119,65137,65147,65159,65163,65167,65174,65191,65202,65214,65218,65222,65229,65241,65245,65253,65261,65265,65273,65281,65289,65304,65348,65356,65369,65382,65395,65403,65411,65419,65447,65455,65467,65480,65493,65501,65509,65517,65543,65551,65564,65576,65589,65597,65605,65613,65639,65647,65660,65672,65685,65693,65701,65709,65714,65734,65739,65759,65764,65781,65786,65794,65799,65828,65841,65845,65849,65854,65858,65886,65891,65908,65913,65918,65923,65928,65954,65958,65962,65970,65978,65982],{"__ignoreMap":24},[103,64902,64903,64905,64907,64909],{"class":105,"line":106},[103,64904,51287],{"class":113},[103,64906,51291],{"class":51290},[103,64908,51294],{"class":1952},[103,64910,51297],{"class":113},[103,64912,64913],{"class":105,"line":25},[103,64914,2389],{"emptyLinePlaceholder":30},[103,64916,64917,64919,64921],{"class":105,"line":1168},[103,64918,1023],{"class":113},[103,64920,50625],{"class":51290},[103,64922,51297],{"class":113},[103,64924,64925],{"class":105,"line":1183},[103,64926,2389],{"emptyLinePlaceholder":30},[103,64928,64929,64931,64933,64935,64937,64939],{"class":105,"line":1189},[103,64930,1023],{"class":113},[103,64932,51324],{"class":51290},[103,64934,51306],{"class":1952},[103,64936,159],{"class":113},[103,64938,51311],{"class":218},[103,64940,51297],{"class":113},[103,64942,64943,64945,64947,64949,64951,64953],{"class":105,"line":1203},[103,64944,52134],{"class":113},[103,64946,51334],{"class":51290},[103,64948,51337],{"class":1952},[103,64950,159],{"class":113},[103,64952,51342],{"class":218},[103,64954,51297],{"class":113},[103,64956,64957,64959,64961,64963,64965],{"class":105,"line":1209},[103,64958,52134],{"class":113},[103,64960,51397],{"class":51290},[103,64962,55304],{"class":113},[103,64964,51397],{"class":51290},[103,64966,51297],{"class":113},[103,64968,64969,64971,64973],{"class":105,"line":1300},[103,64970,52134],{"class":113},[103,64972,5116],{"class":51290},[103,64974,51297],{"class":113},[103,64976,64977,64979],{"class":105,"line":1306},[103,64978,6393],{"class":51290},[103,64980,15562],{"class":113},[103,64982,64983,64985,64987,64989],{"class":105,"line":1318},[103,64984,54696],{"class":162},[103,64986,51427],{"class":113},[103,64988,305],{"class":162},[103,64990,1279],{"class":113},[103,64992,64993,64995,64997,64999],{"class":105,"line":1601},[103,64994,54685],{"class":162},[103,64996,51427],{"class":113},[103,64998,305],{"class":162},[103,65000,1279],{"class":113},[103,65002,65003],{"class":105,"line":1606},[103,65004,2176],{"class":113},[103,65006,65007],{"class":105,"line":1612},[103,65008,2389],{"emptyLinePlaceholder":30},[103,65010,65011,65014],{"class":105,"line":1617},[103,65012,65013],{"class":51290},"    table",[103,65015,15562],{"class":113},[103,65017,65018,65021,65023,65026],{"class":105,"line":1631},[103,65019,65020],{"class":162},"      border-collapse",[103,65022,51427],{"class":113},[103,65024,65025],{"class":162},"collapse",[103,65027,1279],{"class":113},[103,65029,65030,65033,65035,65037],{"class":105,"line":1636},[103,65031,65032],{"class":162},"      border-spacing",[103,65034,51427],{"class":113},[103,65036,305],{"class":162},[103,65038,1279],{"class":113},[103,65040,65041,65043,65045,65047,65049,65051,65054],{"class":105,"line":1642},[103,65042,61967],{"class":162},[103,65044,51427],{"class":113},[103,65046,331],{"class":162},[103,65048,51482],{"class":109},[103,65050,51511],{"class":162},[103,65052,65053],{"class":162}," #c0c0c0",[103,65055,1279],{"class":113},[103,65057,65058,65060,65062,65065,65067],{"class":105,"line":1663},[103,65059,54761],{"class":162},[103,65061,51427],{"class":113},[103,65063,65064],{"class":162},"500",[103,65066,51482],{"class":109},[103,65068,1279],{"class":113},[103,65070,65071,65073,65075,65077,65079,65081],{"class":105,"line":1668},[103,65072,54696],{"class":162},[103,65074,51427],{"class":113},[103,65076,424],{"class":162},[103,65078,51482],{"class":109},[103,65080,51546],{"class":162},[103,65082,1279],{"class":113},[103,65084,65085,65087,65089,65091],{"class":105,"line":1682},[103,65086,57276],{"class":162},[103,65088,51427],{"class":113},[103,65090,51582],{"class":162},[103,65092,1279],{"class":113},[103,65094,65095],{"class":105,"line":1687},[103,65096,2176],{"class":113},[103,65098,65099],{"class":105,"line":1716},[103,65100,2389],{"emptyLinePlaceholder":30},[103,65102,65103,65106],{"class":105,"line":1721},[103,65104,65105],{"class":51290},"    th",[103,65107,15562],{"class":113},[103,65109,65110,65112,65114,65117],{"class":105,"line":1738},[103,65111,54874],{"class":162},[103,65113,51427],{"class":113},[103,65115,65116],{"class":162},"#09c",[103,65118,1279],{"class":113},[103,65120,65121,65124,65126,65128,65130,65132,65135],{"class":105,"line":1743},[103,65122,65123],{"class":162},"      font",[103,65125,51427],{"class":113},[103,65127,62329],{"class":162},[103,65129,64063],{"class":162},[103,65131,51482],{"class":109},[103,65133,65134],{"class":218}," \"微软雅黑\"",[103,65136,1279],{"class":113},[103,65138,65139,65141,65143,65145],{"class":105,"line":1748},[103,65140,57406],{"class":162},[103,65142,51427],{"class":113},[103,65144,60832],{"class":162},[103,65146,1279],{"class":113},[103,65148,65149,65151,65153,65155,65157],{"class":105,"line":1753},[103,65150,54775],{"class":162},[103,65152,51427],{"class":113},[103,65154,913],{"class":162},[103,65156,51482],{"class":109},[103,65158,1279],{"class":113},[103,65160,65161],{"class":105,"line":1767},[103,65162,2176],{"class":113},[103,65164,65165],{"class":105,"line":1772},[103,65166,2389],{"emptyLinePlaceholder":30},[103,65168,65169,65172],{"class":105,"line":2566},[103,65170,65171],{"class":51290},"    td",[103,65173,15562],{"class":113},[103,65175,65176,65178,65180,65182,65184,65186,65189],{"class":105,"line":2580},[103,65177,61967],{"class":162},[103,65179,51427],{"class":113},[103,65181,331],{"class":162},[103,65183,51482],{"class":109},[103,65185,51511],{"class":162},[103,65187,65188],{"class":162}," #d0d0d0",[103,65190,1279],{"class":113},[103,65192,65193,65195,65197,65200],{"class":105,"line":2588},[103,65194,57406],{"class":162},[103,65196,51427],{"class":113},[103,65198,65199],{"class":162},"#404060",[103,65201,1279],{"class":113},[103,65203,65204,65206,65208,65210,65212],{"class":105,"line":2593},[103,65205,54685],{"class":162},[103,65207,51427],{"class":113},[103,65209,559],{"class":162},[103,65211,51482],{"class":109},[103,65213,1279],{"class":113},[103,65215,65216],{"class":105,"line":2599},[103,65217,2176],{"class":113},[103,65219,65220],{"class":105,"line":2605},[103,65221,2389],{"emptyLinePlaceholder":30},[103,65223,65224,65227],{"class":105,"line":2610},[103,65225,65226],{"class":1952},"    .allCheck",[103,65228,15562],{"class":113},[103,65230,65231,65233,65235,65237,65239],{"class":105,"line":7938},[103,65232,54761],{"class":162},[103,65234,51427],{"class":113},[103,65236,725],{"class":162},[103,65238,51482],{"class":109},[103,65240,1279],{"class":113},[103,65242,65243],{"class":105,"line":7962},[103,65244,2176],{"class":113},[103,65246,65247,65249,65251],{"class":105,"line":7967},[103,65248,52407],{"class":113},[103,65250,5116],{"class":51290},[103,65252,51297],{"class":113},[103,65254,65255,65257,65259],{"class":105,"line":7973},[103,65256,51775],{"class":113},[103,65258,51324],{"class":51290},[103,65260,51297],{"class":113},[103,65262,65263],{"class":105,"line":8000},[103,65264,2389],{"emptyLinePlaceholder":30},[103,65266,65267,65269,65271],{"class":105,"line":8005},[103,65268,1023],{"class":113},[103,65270,51790],{"class":51290},[103,65272,51297],{"class":113},[103,65274,65275,65277,65279],{"class":105,"line":8011},[103,65276,52134],{"class":113},[103,65278,251],{"class":51290},[103,65280,51297],{"class":113},[103,65282,65283,65285,65287],{"class":105,"line":8023},[103,65284,51331],{"class":113},[103,65286,257],{"class":51290},[103,65288,51297],{"class":113},[103,65290,65291,65293,65295,65297,65299,65302],{"class":105,"line":8035},[103,65292,55224],{"class":113},[103,65294,260],{"class":51290},[103,65296,53476],{"class":1952},[103,65298,159],{"class":113},[103,65300,65301],{"class":218},"\"allCheck\"",[103,65303,51297],{"class":113},[103,65305,65306,65308,65310,65312,65314,65316,65318,65320,65322,65324,65326,65329,65332,65334,65336,65338,65341,65344,65346],{"class":105,"line":8047},[103,65307,55292],{"class":113},[103,65309,53811],{"class":51290},[103,65311,53814],{"class":1952},[103,65313,159],{"class":113},[103,65315,53819],{"class":218},[103,65317,14910],{"class":1952},[103,65319,159],{"class":113},[103,65321,7642],{"class":218},[103,65323,14949],{"class":1952},[103,65325,159],{"class":113},[103,65327,65328],{"class":218},"\"checkAll\"",[103,65330,65331],{"class":113},"> \u003C",[103,65333,103],{"class":51290},[103,65335,53476],{"class":1952},[103,65337,159],{"class":113},[103,65339,65340],{"class":218},"\"all\"",[103,65342,65343],{"class":113},">全选\u003C\u002F",[103,65345,103],{"class":51290},[103,65347,51297],{"class":113},[103,65349,65350,65352,65354],{"class":105,"line":9706},[103,65351,55397],{"class":113},[103,65353,260],{"class":51290},[103,65355,51297],{"class":113},[103,65357,65358,65360,65362,65365,65367],{"class":105,"line":9731},[103,65359,55224],{"class":113},[103,65361,260],{"class":51290},[103,65363,65364],{"class":113},">商品\u003C\u002F",[103,65366,260],{"class":51290},[103,65368,51297],{"class":113},[103,65370,65371,65373,65375,65378,65380],{"class":105,"line":9754},[103,65372,55224],{"class":113},[103,65374,260],{"class":51290},[103,65376,65377],{"class":113},">商家\u003C\u002F",[103,65379,260],{"class":51290},[103,65381,51297],{"class":113},[103,65383,65384,65386,65388,65391,65393],{"class":105,"line":9778},[103,65385,55224],{"class":113},[103,65387,260],{"class":51290},[103,65389,65390],{"class":113},">价格\u003C\u002F",[103,65392,260],{"class":51290},[103,65394,51297],{"class":113},[103,65396,65397,65399,65401],{"class":105,"line":9783},[103,65398,51766],{"class":113},[103,65400,257],{"class":51290},[103,65402,51297],{"class":113},[103,65404,65405,65407,65409],{"class":105,"line":9788},[103,65406,51331],{"class":113},[103,65408,257],{"class":51290},[103,65410,51297],{"class":113},[103,65412,65413,65415,65417],{"class":105,"line":9793},[103,65414,55224],{"class":113},[103,65416,303],{"class":51290},[103,65418,51297],{"class":113},[103,65420,65421,65423,65425,65427,65429,65431,65433,65435,65438,65440,65442,65445],{"class":105,"line":9802},[103,65422,55292],{"class":113},[103,65424,53811],{"class":51290},[103,65426,53814],{"class":1952},[103,65428,159],{"class":113},[103,65430,53819],{"class":218},[103,65432,14910],{"class":1952},[103,65434,159],{"class":113},[103,65436,65437],{"class":218},"\"check\"",[103,65439,53476],{"class":1952},[103,65441,159],{"class":113},[103,65443,65444],{"class":218},"\"ck\"",[103,65446,51297],{"class":113},[103,65448,65449,65451,65453],{"class":105,"line":9807},[103,65450,55397],{"class":113},[103,65452,303],{"class":51290},[103,65454,51297],{"class":113},[103,65456,65457,65459,65461,65463,65465],{"class":105,"line":9813},[103,65458,55224],{"class":113},[103,65460,303],{"class":51290},[103,65462,61163],{"class":113},[103,65464,303],{"class":51290},[103,65466,51297],{"class":113},[103,65468,65469,65471,65473,65476,65478],{"class":105,"line":9834},[103,65470,55224],{"class":113},[103,65472,303],{"class":51290},[103,65474,65475],{"class":113},">小米\u003C\u002F",[103,65477,303],{"class":51290},[103,65479,51297],{"class":113},[103,65481,65482,65484,65486,65489,65491],{"class":105,"line":9840},[103,65483,55224],{"class":113},[103,65485,303],{"class":51290},[103,65487,65488],{"class":113},">￥1999\u003C\u002F",[103,65490,303],{"class":51290},[103,65492,51297],{"class":113},[103,65494,65495,65497,65499],{"class":105,"line":9854},[103,65496,51766],{"class":113},[103,65498,257],{"class":51290},[103,65500,51297],{"class":113},[103,65502,65503,65505,65507],{"class":105,"line":9860},[103,65504,51331],{"class":113},[103,65506,257],{"class":51290},[103,65508,51297],{"class":113},[103,65510,65511,65513,65515],{"class":105,"line":9887},[103,65512,55224],{"class":113},[103,65514,303],{"class":51290},[103,65516,51297],{"class":113},[103,65518,65519,65521,65523,65525,65527,65529,65531,65533,65535,65537,65539,65541],{"class":105,"line":9896},[103,65520,55292],{"class":113},[103,65522,53811],{"class":51290},[103,65524,53814],{"class":1952},[103,65526,159],{"class":113},[103,65528,53819],{"class":218},[103,65530,14910],{"class":1952},[103,65532,159],{"class":113},[103,65534,65437],{"class":218},[103,65536,53476],{"class":1952},[103,65538,159],{"class":113},[103,65540,65444],{"class":218},[103,65542,51297],{"class":113},[103,65544,65545,65547,65549],{"class":105,"line":9902},[103,65546,55397],{"class":113},[103,65548,303],{"class":51290},[103,65550,51297],{"class":113},[103,65552,65553,65555,65557,65560,65562],{"class":105,"line":9910},[103,65554,55224],{"class":113},[103,65556,303],{"class":51290},[103,65558,65559],{"class":113},">小米净水器\u003C\u002F",[103,65561,303],{"class":51290},[103,65563,51297],{"class":113},[103,65565,65566,65568,65570,65572,65574],{"class":105,"line":9915},[103,65567,55224],{"class":113},[103,65569,303],{"class":51290},[103,65571,65475],{"class":113},[103,65573,303],{"class":51290},[103,65575,51297],{"class":113},[103,65577,65578,65580,65582,65585,65587],{"class":105,"line":16594},[103,65579,55224],{"class":113},[103,65581,303],{"class":51290},[103,65583,65584],{"class":113},">￥4999\u003C\u002F",[103,65586,303],{"class":51290},[103,65588,51297],{"class":113},[103,65590,65591,65593,65595],{"class":105,"line":16600},[103,65592,51766],{"class":113},[103,65594,257],{"class":51290},[103,65596,51297],{"class":113},[103,65598,65599,65601,65603],{"class":105,"line":16623},[103,65600,51331],{"class":113},[103,65602,257],{"class":51290},[103,65604,51297],{"class":113},[103,65606,65607,65609,65611],{"class":105,"line":16629},[103,65608,55224],{"class":113},[103,65610,303],{"class":51290},[103,65612,51297],{"class":113},[103,65614,65615,65617,65619,65621,65623,65625,65627,65629,65631,65633,65635,65637],{"class":105,"line":16652},[103,65616,55292],{"class":113},[103,65618,53811],{"class":51290},[103,65620,53814],{"class":1952},[103,65622,159],{"class":113},[103,65624,53819],{"class":218},[103,65626,14910],{"class":1952},[103,65628,159],{"class":113},[103,65630,65437],{"class":218},[103,65632,53476],{"class":1952},[103,65634,159],{"class":113},[103,65636,65444],{"class":218},[103,65638,51297],{"class":113},[103,65640,65641,65643,65645],{"class":105,"line":16666},[103,65642,55397],{"class":113},[103,65644,303],{"class":51290},[103,65646,51297],{"class":113},[103,65648,65649,65651,65653,65656,65658],{"class":105,"line":16686},[103,65650,55224],{"class":113},[103,65652,303],{"class":51290},[103,65654,65655],{"class":113},">小米电视\u003C\u002F",[103,65657,303],{"class":51290},[103,65659,51297],{"class":113},[103,65661,65662,65664,65666,65668,65670],{"class":105,"line":16692},[103,65663,55224],{"class":113},[103,65665,303],{"class":51290},[103,65667,65475],{"class":113},[103,65669,303],{"class":51290},[103,65671,51297],{"class":113},[103,65673,65674,65676,65678,65681,65683],{"class":105,"line":16703},[103,65675,55224],{"class":113},[103,65677,303],{"class":51290},[103,65679,65680],{"class":113},">￥5999\u003C\u002F",[103,65682,303],{"class":51290},[103,65684,51297],{"class":113},[103,65686,65687,65689,65691],{"class":105,"line":16726},[103,65688,51766],{"class":113},[103,65690,257],{"class":51290},[103,65692,51297],{"class":113},[103,65694,65695,65697,65699],{"class":105,"line":16748},[103,65696,52407],{"class":113},[103,65698,251],{"class":51290},[103,65700,51297],{"class":113},[103,65702,65703,65705,65707],{"class":105,"line":16753},[103,65704,52134],{"class":113},[103,65706,51803],{"class":51290},[103,65708,51297],{"class":113},[103,65710,65711],{"class":105,"line":16759},[103,65712,65713],{"class":172},"    \u002F\u002F 1. 获取大复选框\n",[103,65715,65716,65718,65721,65723,65725,65727,65729,65732],{"class":105,"line":16773},[103,65717,11211],{"class":109},[103,65719,65720],{"class":162}," checkAll",[103,65722,13554],{"class":109},[103,65724,54386],{"class":113},[103,65726,54389],{"class":1952},[103,65728,114],{"class":113},[103,65730,65731],{"class":218},"'#checkAll'",[103,65733,120],{"class":113},[103,65735,65736],{"class":105,"line":16786},[103,65737,65738],{"class":172},"    \u002F\u002F 2. 获取所有的小复选框\n",[103,65740,65741,65743,65746,65748,65750,65752,65754,65757],{"class":105,"line":16791},[103,65742,11211],{"class":109},[103,65744,65745],{"class":162}," cks",[103,65747,13554],{"class":109},[103,65749,54386],{"class":113},[103,65751,55671],{"class":1952},[103,65753,114],{"class":113},[103,65755,65756],{"class":218},"'.ck'",[103,65758,120],{"class":113},[103,65760,65761],{"class":105,"line":16805},[103,65762,65763],{"class":172},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[103,65765,65766,65769,65771,65773,65775,65777,65779],{"class":105,"line":16810},[103,65767,65768],{"class":113},"    checkAll.",[103,65770,57803],{"class":1952},[103,65772,114],{"class":113},[103,65774,57808],{"class":218},[103,65776,12425],{"class":113},[103,65778,54439],{"class":109},[103,65780,54442],{"class":113},[103,65782,65783],{"class":105,"line":16816},[103,65784,65785],{"class":172},"      \u002F\u002F 得到当前大复选框的选中状态\n",[103,65787,65788,65791],{"class":105,"line":16821},[103,65789,65790],{"class":172},"      \u002F\u002F console.log(checkAll.checked)",[103,65792,65793],{"class":172},"  \u002F\u002F 得到 是 true 或者是 false\n",[103,65795,65796],{"class":105,"line":16835},[103,65797,65798],{"class":172},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[103,65800,65801,65803,65805,65807,65809,65811,65813,65815,65817,65820,65822,65824,65826],{"class":105,"line":16840},[103,65802,52274],{"class":109},[103,65804,1647],{"class":113},[103,65806,51837],{"class":109},[103,65808,9428],{"class":113},[103,65810,159],{"class":109},[103,65812,4082],{"class":162},[103,65814,9435],{"class":113},[103,65816,1023],{"class":109},[103,65818,65819],{"class":113}," cks.",[103,65821,51958],{"class":162},[103,65823,3203],{"class":113},[103,65825,2281],{"class":109},[103,65827,12432],{"class":113},[103,65829,65830,65833,65835,65838],{"class":105,"line":16845},[103,65831,65832],{"class":113},"        cks[i].checked ",[103,65834,159],{"class":109},[103,65836,65837],{"class":162}," this",[103,65839,65840],{"class":113},".checked\n",[103,65842,65843],{"class":105,"line":16859},[103,65844,52388],{"class":113},[103,65846,65847],{"class":105,"line":16871},[103,65848,33451],{"class":113},[103,65850,65851],{"class":105,"line":16876},[103,65852,65853],{"class":172},"    \u002F\u002F 5. 小复选框控制大复选框\n",[103,65855,65856],{"class":105,"line":16889},[103,65857,2389],{"emptyLinePlaceholder":30},[103,65859,65860,65862,65864,65866,65868,65870,65872,65874,65876,65878,65880,65882,65884],{"class":105,"line":16894},[103,65861,3190],{"class":109},[103,65863,1647],{"class":113},[103,65865,51837],{"class":109},[103,65867,9428],{"class":113},[103,65869,159],{"class":109},[103,65871,4082],{"class":162},[103,65873,9435],{"class":113},[103,65875,1023],{"class":109},[103,65877,65819],{"class":113},[103,65879,51958],{"class":162},[103,65881,3203],{"class":113},[103,65883,2281],{"class":109},[103,65885,12432],{"class":113},[103,65887,65888],{"class":105,"line":16899},[103,65889,65890],{"class":172},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[103,65892,65893,65896,65898,65900,65902,65904,65906],{"class":105,"line":16904},[103,65894,65895],{"class":113},"      cks[i].",[103,65897,57803],{"class":1952},[103,65899,114],{"class":113},[103,65901,57808],{"class":218},[103,65903,12425],{"class":113},[103,65905,54439],{"class":109},[103,65907,54442],{"class":113},[103,65909,65910],{"class":105,"line":16917},[103,65911,65912],{"class":172},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[103,65914,65915],{"class":105,"line":16922},[103,65916,65917],{"class":172},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[103,65919,65920],{"class":105,"line":32623},[103,65921,65922],{"class":172},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[103,65924,65925],{"class":105,"line":32629},[103,65926,65927],{"class":172},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[103,65929,65930,65933,65935,65937,65939,65941,65944,65946,65948,65950,65952],{"class":105,"line":32635},[103,65931,65932],{"class":113},"        checkAll.checked ",[103,65934,159],{"class":109},[103,65936,54386],{"class":113},[103,65938,55671],{"class":1952},[103,65940,114],{"class":113},[103,65942,65943],{"class":218},"'.ck:checked'",[103,65945,30816],{"class":113},[103,65947,51958],{"class":162},[103,65949,57896],{"class":109},[103,65951,65819],{"class":113},[103,65953,55821],{"class":162},[103,65955,65956],{"class":105,"line":32641},[103,65957,64805],{"class":113},[103,65959,65960],{"class":105,"line":32647},[103,65961,2176],{"class":113},[103,65963,65964,65966,65968],{"class":105,"line":32658},[103,65965,52407],{"class":113},[103,65967,51803],{"class":51290},[103,65969,51297],{"class":113},[103,65971,65972,65974,65976],{"class":105,"line":32664},[103,65973,51775],{"class":113},[103,65975,51790],{"class":51290},[103,65977,51297],{"class":113},[103,65979,65980],{"class":105,"line":32684},[103,65981,2389],{"emptyLinePlaceholder":30},[103,65983,65984,65986,65988],{"class":105,"line":32690},[103,65985,51775],{"class":113},[103,65987,50625],{"class":51290},[103,65989,51297],{"class":113},[14,65991,65992],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,65994,65995],{},"用好之间比较得到的布尔值！！！",[14,65997,65998,65999,66002,66003,1647,66006,697,66008,66011],{},"在 JS 里访问的时候，",[100,66000,66001],{},"checkbox.checked"," 是一个 ",[263,66004,66005],{},"布尔值",[100,66007,1351],{},[100,66009,66010],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66013,66014,66015,66018,66019],{},"HTML 的 ",[100,66016,66017],{},"checked=\"checked\""," 只是 ",[263,66020,66021,66022,66025],{},"初始值；JS 的 ",[100,66023,66024],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66027,66028],{},"：checked是一个伪类选择器",[14,66030,66031],{},[1451,66032],{"alt":24,"src":66033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66035,66036,66039],{},[66037,66038],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66041,66042],{},[1451,66043],{"alt":24,"src":66044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[45,66046,66048],{"id":66047},"_33-dom事件进阶","3.3 DOM事件进阶",[74,66050,66052],{"id":66051},"_331-事件流","3.3.1 事件流",[14,66054,66055],{},[1451,66056],{"alt":24,"src":66057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21988,66059,66061],{"id":66060},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66063,66064],{},[1451,66065],{"alt":24,"src":66066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[94,66068,66070],{"className":50623,"code":66069,"language":50625,"meta":24,"style":24},"\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",[100,66071,66072,66082,66096,66100,66108,66122,66142,66154,66162,66169,66181,66193,66203,66207,66211,66218,66230,66242,66252,66256,66264,66272,66276,66284,66299,66318,66326,66334,66354,66374,66390,66401,66409,66426,66437,66445,66462,66473,66481,66489,66497,66501],{"__ignoreMap":24},[103,66073,66074,66076,66078,66080],{"class":105,"line":106},[103,66075,51287],{"class":113},[103,66077,51291],{"class":51290},[103,66079,51294],{"class":1952},[103,66081,51297],{"class":113},[103,66083,66084,66086,66088,66090,66092,66094],{"class":105,"line":25},[103,66085,1023],{"class":113},[103,66087,50625],{"class":51290},[103,66089,51306],{"class":1952},[103,66091,159],{"class":113},[103,66093,51311],{"class":218},[103,66095,51297],{"class":113},[103,66097,66098],{"class":105,"line":1168},[103,66099,2389],{"emptyLinePlaceholder":30},[103,66101,66102,66104,66106],{"class":105,"line":1183},[103,66103,1023],{"class":113},[103,66105,51324],{"class":51290},[103,66107,51297],{"class":113},[103,66109,66110,66112,66114,66116,66118,66120],{"class":105,"line":1189},[103,66111,52134],{"class":113},[103,66113,51334],{"class":51290},[103,66115,51337],{"class":1952},[103,66117,159],{"class":113},[103,66119,51342],{"class":218},[103,66121,51297],{"class":113},[103,66123,66124,66126,66128,66130,66132,66134,66136,66138,66140],{"class":105,"line":1203},[103,66125,52134],{"class":113},[103,66127,51334],{"class":51290},[103,66129,14910],{"class":1952},[103,66131,159],{"class":113},[103,66133,51381],{"class":218},[103,66135,51361],{"class":1952},[103,66137,159],{"class":113},[103,66139,51388],{"class":218},[103,66141,51297],{"class":113},[103,66143,66144,66146,66148,66150,66152],{"class":105,"line":1209},[103,66145,52134],{"class":113},[103,66147,51397],{"class":51290},[103,66149,51400],{"class":113},[103,66151,51397],{"class":51290},[103,66153,51297],{"class":113},[103,66155,66156,66158,66160],{"class":105,"line":1300},[103,66157,52134],{"class":113},[103,66159,5116],{"class":51290},[103,66161,51297],{"class":113},[103,66163,66164,66167],{"class":105,"line":1306},[103,66165,66166],{"class":1952},"    .father",[103,66168,15562],{"class":113},[103,66170,66171,66173,66175,66177,66179],{"class":105,"line":1318},[103,66172,54761],{"class":162},[103,66174,51427],{"class":113},[103,66176,65064],{"class":162},[103,66178,51482],{"class":109},[103,66180,1279],{"class":113},[103,66182,66183,66185,66187,66189,66191],{"class":105,"line":1601},[103,66184,54775],{"class":162},[103,66186,51427],{"class":113},[103,66188,65064],{"class":162},[103,66190,51482],{"class":109},[103,66192,1279],{"class":113},[103,66194,66195,66197,66199,66201],{"class":105,"line":1606},[103,66196,54874],{"class":162},[103,66198,51427],{"class":113},[103,66200,51635],{"class":162},[103,66202,1279],{"class":113},[103,66204,66205],{"class":105,"line":1612},[103,66206,2176],{"class":113},[103,66208,66209],{"class":105,"line":1617},[103,66210,2389],{"emptyLinePlaceholder":30},[103,66212,66213,66216],{"class":105,"line":1631},[103,66214,66215],{"class":1952},"    .son",[103,66217,15562],{"class":113},[103,66219,66220,66222,66224,66226,66228],{"class":105,"line":1636},[103,66221,54761],{"class":162},[103,66223,51427],{"class":113},[103,66225,1711],{"class":162},[103,66227,51482],{"class":109},[103,66229,1279],{"class":113},[103,66231,66232,66234,66236,66238,66240],{"class":105,"line":1642},[103,66233,54775],{"class":162},[103,66235,51427],{"class":113},[103,66237,1711],{"class":162},[103,66239,51482],{"class":109},[103,66241,1279],{"class":113},[103,66243,66244,66246,66248,66250],{"class":105,"line":1663},[103,66245,54874],{"class":162},[103,66247,51427],{"class":113},[103,66249,54879],{"class":162},[103,66251,1279],{"class":113},[103,66253,66254],{"class":105,"line":1668},[103,66255,2176],{"class":113},[103,66257,66258,66260,66262],{"class":105,"line":1682},[103,66259,52407],{"class":113},[103,66261,5116],{"class":51290},[103,66263,51297],{"class":113},[103,66265,66266,66268,66270],{"class":105,"line":1687},[103,66267,51775],{"class":113},[103,66269,51324],{"class":51290},[103,66271,51297],{"class":113},[103,66273,66274],{"class":105,"line":1716},[103,66275,2389],{"emptyLinePlaceholder":30},[103,66277,66278,66280,66282],{"class":105,"line":1721},[103,66279,1023],{"class":113},[103,66281,51790],{"class":51290},[103,66283,51297],{"class":113},[103,66285,66286,66288,66290,66292,66294,66297],{"class":105,"line":1738},[103,66287,52134],{"class":113},[103,66289,51601],{"class":51290},[103,66291,53476],{"class":1952},[103,66293,159],{"class":113},[103,66295,66296],{"class":218},"\"father\"",[103,66298,51297],{"class":113},[103,66300,66301,66303,66305,66307,66309,66312,66314,66316],{"class":105,"line":1743},[103,66302,51331],{"class":113},[103,66304,51601],{"class":51290},[103,66306,53476],{"class":1952},[103,66308,159],{"class":113},[103,66310,66311],{"class":218},"\"son\"",[103,66313,55304],{"class":113},[103,66315,51601],{"class":51290},[103,66317,51297],{"class":113},[103,66319,66320,66322,66324],{"class":105,"line":1748},[103,66321,52407],{"class":113},[103,66323,51601],{"class":51290},[103,66325,51297],{"class":113},[103,66327,66328,66330,66332],{"class":105,"line":1753},[103,66329,52134],{"class":113},[103,66331,51803],{"class":51290},[103,66333,51297],{"class":113},[103,66335,66336,66338,66341,66343,66345,66347,66349,66352],{"class":105,"line":1767},[103,66337,11211],{"class":109},[103,66339,66340],{"class":162}," fa",[103,66342,13554],{"class":109},[103,66344,54386],{"class":113},[103,66346,54389],{"class":1952},[103,66348,114],{"class":113},[103,66350,66351],{"class":218},"'.father'",[103,66353,120],{"class":113},[103,66355,66356,66358,66361,66363,66365,66367,66369,66372],{"class":105,"line":1772},[103,66357,11211],{"class":109},[103,66359,66360],{"class":162}," son",[103,66362,13554],{"class":109},[103,66364,54386],{"class":113},[103,66366,54389],{"class":1952},[103,66368,114],{"class":113},[103,66370,66371],{"class":218},"'.son'",[103,66373,120],{"class":113},[103,66375,66376,66378,66380,66382,66384,66386,66388],{"class":105,"line":2566},[103,66377,52397],{"class":113},[103,66379,57803],{"class":1952},[103,66381,114],{"class":113},[103,66383,57808],{"class":218},[103,66385,12425],{"class":113},[103,66387,54439],{"class":109},[103,66389,54442],{"class":113},[103,66391,66392,66394,66396,66399],{"class":105,"line":2580},[103,66393,58915],{"class":1952},[103,66395,114],{"class":113},[103,66397,66398],{"class":218},"'woshiu1'",[103,66400,120],{"class":113},[103,66402,66403,66405,66407],{"class":105,"line":2588},[103,66404,54525],{"class":113},[103,66406,1351],{"class":162},[103,66408,120],{"class":113},[103,66410,66411,66414,66416,66418,66420,66422,66424],{"class":105,"line":2593},[103,66412,66413],{"class":113},"    fa.",[103,66415,57803],{"class":1952},[103,66417,114],{"class":113},[103,66419,57808],{"class":218},[103,66421,12425],{"class":113},[103,66423,54439],{"class":109},[103,66425,54442],{"class":113},[103,66427,66428,66430,66432,66435],{"class":105,"line":2599},[103,66429,58915],{"class":1952},[103,66431,114],{"class":113},[103,66433,66434],{"class":218},"'1'",[103,66436,120],{"class":113},[103,66438,66439,66441,66443],{"class":105,"line":2605},[103,66440,54525],{"class":113},[103,66442,1351],{"class":162},[103,66444,120],{"class":113},[103,66446,66447,66450,66452,66454,66456,66458,66460],{"class":105,"line":2610},[103,66448,66449],{"class":113},"    son.",[103,66451,57803],{"class":1952},[103,66453,114],{"class":113},[103,66455,57808],{"class":218},[103,66457,12425],{"class":113},[103,66459,54439],{"class":109},[103,66461,54442],{"class":113},[103,66463,66464,66466,66468,66471],{"class":105,"line":7938},[103,66465,58915],{"class":1952},[103,66467,114],{"class":113},[103,66469,66470],{"class":218},"'2'",[103,66472,120],{"class":113},[103,66474,66475,66477,66479],{"class":105,"line":7962},[103,66476,54525],{"class":113},[103,66478,1351],{"class":162},[103,66480,120],{"class":113},[103,66482,66483,66485,66487],{"class":105,"line":7967},[103,66484,52407],{"class":113},[103,66486,51803],{"class":51290},[103,66488,51297],{"class":113},[103,66490,66491,66493,66495],{"class":105,"line":7973},[103,66492,51775],{"class":113},[103,66494,51790],{"class":51290},[103,66496,51297],{"class":113},[103,66498,66499],{"class":105,"line":8000},[103,66500,2389],{"emptyLinePlaceholder":30},[103,66502,66503,66505,66507],{"class":105,"line":8005},[103,66504,51775],{"class":113},[103,66506,50625],{"class":51290},[103,66508,51297],{"class":113},[14,66510,66511],{},[1451,66512],{"alt":24,"src":66513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66515,66516],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21988,66518,66520],{"id":66519},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66522,66523],{},[1451,66524],{"alt":24,"src":66525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66527,66528],{},"反着来",[14,66530,66531],{},"注意是同名事件，比如都是‘click’",[21988,66533,66535],{"id":66534},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66537,66538],{},[1451,66539],{"alt":24,"src":66540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21988,66542,66544],{"id":66543},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66546,66547],{},[1451,66548],{"alt":24,"src":66549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66551,66552],{},[1451,66553],{"alt":24,"src":66554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21988,66556,66558],{"id":66557},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[57,66560,66561],{},[60,66562,66563],{},"事件类型的区别",[14,66565,66566],{},[1451,66567],{"alt":24,"src":66568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66570,66571],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[57,66573,66574],{"start":25},[60,66575,66576],{},"注册事件的区别",[14,66578,66579],{},[1451,66580],{"alt":24,"src":66581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21988,66583,66585],{"id":66584},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66587,66588],{},[1451,66589],{"alt":24,"src":66590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66592,66593],{},[1451,66594],{"alt":24,"src":66595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[94,66597,66599],{"className":53057,"code":66598,"language":53059,"meta":24,"style":24},"\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",[100,66600,66601,66609,66626,66649,66657,66662,66667,66672,66676,66684,66692],{"__ignoreMap":24},[103,66602,66603,66605,66607],{"class":105,"line":106},[103,66604,1023],{"class":113},[103,66606,51790],{"class":51290},[103,66608,51297],{"class":113},[103,66610,66611,66613,66616,66619,66621,66624],{"class":105,"line":25},[103,66612,52134],{"class":113},[103,66614,66615],{"class":51290},"form",[103,66617,66618],{"class":1952}," action",[103,66620,159],{"class":113},[103,66622,66623],{"class":218},"\"http:\u002F\u002Fwww.itcast.cn\"",[103,66625,51297],{"class":113},[103,66627,66628,66630,66632,66634,66636,66639,66642,66644,66647],{"class":105,"line":1168},[103,66629,51331],{"class":113},[103,66631,53811],{"class":51290},[103,66633,53814],{"class":1952},[103,66635,159],{"class":113},[103,66637,66638],{"class":218},"\"submit\"",[103,66640,66641],{"class":1952}," value",[103,66643,159],{"class":113},[103,66645,66646],{"class":218},"\"免费注册\"",[103,66648,51297],{"class":113},[103,66650,66651,66653,66655],{"class":105,"line":1183},[103,66652,51331],{"class":113},[103,66654,51803],{"class":51290},[103,66656,51297],{"class":113},[103,66658,66659],{"class":105,"line":1189},[103,66660,66661],{"class":113},"      const form = document.querySelector('form')\n",[103,66663,66664],{"class":105,"line":1203},[103,66665,66666],{"class":113},"      form.addEventListener('submit', function (e) {\n",[103,66668,66669],{"class":105,"line":1209},[103,66670,66671],{"class":113},"        e.preventDefault()\n",[103,66673,66674],{"class":105,"line":1300},[103,66675,64805],{"class":113},[103,66677,66678,66680,66682],{"class":105,"line":1306},[103,66679,51766],{"class":113},[103,66681,51803],{"class":51290},[103,66683,51297],{"class":113},[103,66685,66686,66688,66690],{"class":105,"line":1318},[103,66687,52407],{"class":113},[103,66689,66615],{"class":51290},[103,66691,51297],{"class":113},[103,66693,66694,66696,66698],{"class":105,"line":1601},[103,66695,51775],{"class":113},[103,66697,51790],{"class":51290},[103,66699,51297],{"class":113},[14,66701,66702],{},"点击不在跳转！！！",[74,66704,66706],{"id":66705},"_332-事件委托","3.3.2 事件委托",[14,66708,66709],{},[1451,66710],{"alt":24,"src":66711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[94,66713,66715],{"className":50623,"code":66714,"language":50625,"meta":24,"style":24},"\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",[100,66716,66717,66727,66741,66745,66753,66767,66787,66799,66807,66811,66819,66827,66839,66851,66863,66875,66887,66900,66908,66916,66921,66940,66961,66966,66971,66976,66981,66990,66994,67004,67008,67013,67018,67032,67042,67046,67050,67058,67066,67070],{"__ignoreMap":24},[103,66718,66719,66721,66723,66725],{"class":105,"line":106},[103,66720,51287],{"class":113},[103,66722,51291],{"class":51290},[103,66724,51294],{"class":1952},[103,66726,51297],{"class":113},[103,66728,66729,66731,66733,66735,66737,66739],{"class":105,"line":25},[103,66730,1023],{"class":113},[103,66732,50625],{"class":51290},[103,66734,51306],{"class":1952},[103,66736,159],{"class":113},[103,66738,51311],{"class":218},[103,66740,51297],{"class":113},[103,66742,66743],{"class":105,"line":1168},[103,66744,2389],{"emptyLinePlaceholder":30},[103,66746,66747,66749,66751],{"class":105,"line":1183},[103,66748,1023],{"class":113},[103,66750,51324],{"class":51290},[103,66752,51297],{"class":113},[103,66754,66755,66757,66759,66761,66763,66765],{"class":105,"line":1189},[103,66756,52134],{"class":113},[103,66758,51334],{"class":51290},[103,66760,51337],{"class":1952},[103,66762,159],{"class":113},[103,66764,51342],{"class":218},[103,66766,51297],{"class":113},[103,66768,66769,66771,66773,66775,66777,66779,66781,66783,66785],{"class":105,"line":1203},[103,66770,52134],{"class":113},[103,66772,51334],{"class":51290},[103,66774,14910],{"class":1952},[103,66776,159],{"class":113},[103,66778,51381],{"class":218},[103,66780,51361],{"class":1952},[103,66782,159],{"class":113},[103,66784,51388],{"class":218},[103,66786,51297],{"class":113},[103,66788,66789,66791,66793,66795,66797],{"class":105,"line":1209},[103,66790,52134],{"class":113},[103,66792,51397],{"class":51290},[103,66794,51400],{"class":113},[103,66796,51397],{"class":51290},[103,66798,51297],{"class":113},[103,66800,66801,66803,66805],{"class":105,"line":1300},[103,66802,51775],{"class":113},[103,66804,51324],{"class":51290},[103,66806,51297],{"class":113},[103,66808,66809],{"class":105,"line":1306},[103,66810,2389],{"emptyLinePlaceholder":30},[103,66812,66813,66815,66817],{"class":105,"line":1318},[103,66814,1023],{"class":113},[103,66816,51790],{"class":51290},[103,66818,51297],{"class":113},[103,66820,66821,66823,66825],{"class":105,"line":1601},[103,66822,52134],{"class":113},[103,66824,1120],{"class":51290},[103,66826,51297],{"class":113},[103,66828,66829,66831,66833,66835,66837],{"class":105,"line":1606},[103,66830,51331],{"class":113},[103,66832,60],{"class":51290},[103,66834,53956],{"class":113},[103,66836,60],{"class":51290},[103,66838,51297],{"class":113},[103,66840,66841,66843,66845,66847,66849],{"class":105,"line":1612},[103,66842,51331],{"class":113},[103,66844,60],{"class":51290},[103,66846,53975],{"class":113},[103,66848,60],{"class":51290},[103,66850,51297],{"class":113},[103,66852,66853,66855,66857,66859,66861],{"class":105,"line":1617},[103,66854,51331],{"class":113},[103,66856,60],{"class":51290},[103,66858,53994],{"class":113},[103,66860,60],{"class":51290},[103,66862,51297],{"class":113},[103,66864,66865,66867,66869,66871,66873],{"class":105,"line":1631},[103,66866,51331],{"class":113},[103,66868,60],{"class":51290},[103,66870,54013],{"class":113},[103,66872,60],{"class":51290},[103,66874,51297],{"class":113},[103,66876,66877,66879,66881,66883,66885],{"class":105,"line":1636},[103,66878,51331],{"class":113},[103,66880,60],{"class":51290},[103,66882,54032],{"class":113},[103,66884,60],{"class":51290},[103,66886,51297],{"class":113},[103,66888,66889,66891,66893,66896,66898],{"class":105,"line":1642},[103,66890,51331],{"class":113},[103,66892,14],{"class":51290},[103,66894,66895],{"class":113},">我不需要变色\u003C\u002F",[103,66897,14],{"class":51290},[103,66899,51297],{"class":113},[103,66901,66902,66904,66906],{"class":105,"line":1663},[103,66903,52407],{"class":113},[103,66905,1120],{"class":51290},[103,66907,51297],{"class":113},[103,66909,66910,66912,66914],{"class":105,"line":1668},[103,66911,52134],{"class":113},[103,66913,51803],{"class":51290},[103,66915,51297],{"class":113},[103,66917,66918],{"class":105,"line":1682},[103,66919,66920],{"class":172},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[103,66922,66923,66925,66927,66929,66931,66933,66935,66938],{"class":105,"line":1687},[103,66924,11211],{"class":109},[103,66926,61282],{"class":162},[103,66928,13554],{"class":109},[103,66930,54386],{"class":113},[103,66932,54389],{"class":1952},[103,66934,114],{"class":113},[103,66936,66937],{"class":218},"'ul'",[103,66939,120],{"class":113},[103,66941,66942,66945,66947,66949,66951,66953,66955,66957,66959],{"class":105,"line":1716},[103,66943,66944],{"class":113},"    ul.",[103,66946,57803],{"class":1952},[103,66948,114],{"class":113},[103,66950,57808],{"class":218},[103,66952,12425],{"class":113},[103,66954,54439],{"class":109},[103,66956,1647],{"class":113},[103,66958,188],{"class":5206},[103,66960,12432],{"class":113},[103,66962,66963],{"class":105,"line":1721},[103,66964,66965],{"class":172},"      \u002F\u002F alert(1)\n",[103,66967,66968],{"class":105,"line":1738},[103,66969,66970],{"class":172},"      \u002F\u002F e.target就是我们点击的对象\n",[103,66972,66973],{"class":105,"line":1743},[103,66974,66975],{"class":172},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[103,66977,66978],{"class":105,"line":1748},[103,66979,66980],{"class":172},"      \u002F\u002F e.target.style.color = 'red'\n",[103,66982,66983,66985,66987],{"class":105,"line":1753},[103,66984,58234],{"class":113},[103,66986,58237],{"class":1952},[103,66988,66989],{"class":113},"(e)\n",[103,66991,66992],{"class":105,"line":1767},[103,66993,2389],{"emptyLinePlaceholder":30},[103,66995,66996,66998,67001],{"class":105,"line":1772},[103,66997,58234],{"class":113},[103,66999,67000],{"class":1952},"dir",[103,67002,67003],{"class":113},"(e.target)\n",[103,67005,67006],{"class":105,"line":2566},[103,67007,2389],{"emptyLinePlaceholder":30},[103,67009,67010],{"class":105,"line":2580},[103,67011,67012],{"class":172},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[103,67014,67015],{"class":105,"line":2588},[103,67016,67017],{"class":172},"      \u002F\u002F 通过tagName来进行判断\n",[103,67019,67020,67022,67025,67027,67030],{"class":105,"line":2593},[103,67021,54470],{"class":109},[103,67023,67024],{"class":113}," (e.target.tagName ",[103,67026,54476],{"class":109},[103,67028,67029],{"class":218}," 'LI'",[103,67031,12432],{"class":113},[103,67033,67034,67037,67039],{"class":105,"line":2599},[103,67035,67036],{"class":113},"        e.target.style.color ",[103,67038,159],{"class":109},[103,67040,67041],{"class":218}," 'red'\n",[103,67043,67044],{"class":105,"line":2605},[103,67045,52388],{"class":113},[103,67047,67048],{"class":105,"line":2610},[103,67049,33451],{"class":113},[103,67051,67052,67054,67056],{"class":105,"line":7938},[103,67053,52407],{"class":113},[103,67055,51803],{"class":51290},[103,67057,51297],{"class":113},[103,67059,67060,67062,67064],{"class":105,"line":7962},[103,67061,51775],{"class":113},[103,67063,51790],{"class":51290},[103,67065,51297],{"class":113},[103,67067,67068],{"class":105,"line":7967},[103,67069,2389],{"emptyLinePlaceholder":30},[103,67071,67072,67074,67076],{"class":105,"line":7973},[103,67073,51775],{"class":113},[103,67075,50625],{"class":51290},[103,67077,51297],{"class":113},[14,67079,67080],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67082,67083],{},"if(e.target.ragName==='P') {}",[14,67085,67086],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67088,67089],{},"通过事件委托的方式实现tab栏切换改造：",[14,67091,67092],{},"一定要记住自定义属性！！！！！！",[14,67094,67095],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67097,67098],{},"id是自定义的属性名",[14,67100,67101],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[94,67103,67105],{"className":50623,"code":67104,"language":50625,"meta":24,"style":24},"\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",[100,67106,67107,67117,67131,67135,67143,67157,67177,67197,67209,67217,67223,67233,67243,67247,67251,67257,67269,67281,67293,67309,67313,67317,67323,67335,67347,67359,67369,67379,67383,67387,67395,67407,67417,67429,67433,67437,67445,67455,67465,67475,67479,67483,67493,67507,67519,67523,67527,67539,67549,67565,67575,67579,67583,67597,67607,67617,67621,67625,67631,67645,67649,67653,67661,67671,67675,67679,67688,67698,67702,67710,67718,67722,67730,67744,67758,67770,67778,67817,67849,67881,67913,67945,67953,67961,67975,68009,68043,68077,68111,68145,68153,68161,68169,68174,68179,68198,68203,68223,68231,68236,68249,68270,68283,68287,68292,68297,68310,68330,68358,68362,68366,68370,68378,68386,68390],{"__ignoreMap":24},[103,67108,67109,67111,67113,67115],{"class":105,"line":106},[103,67110,51287],{"class":113},[103,67112,51291],{"class":51290},[103,67114,51294],{"class":1952},[103,67116,51297],{"class":113},[103,67118,67119,67121,67123,67125,67127,67129],{"class":105,"line":25},[103,67120,1023],{"class":113},[103,67122,50625],{"class":51290},[103,67124,51306],{"class":1952},[103,67126,159],{"class":113},[103,67128,51311],{"class":218},[103,67130,51297],{"class":113},[103,67132,67133],{"class":105,"line":1168},[103,67134,2389],{"emptyLinePlaceholder":30},[103,67136,67137,67139,67141],{"class":105,"line":1183},[103,67138,1023],{"class":113},[103,67140,51324],{"class":51290},[103,67142,51297],{"class":113},[103,67144,67145,67147,67149,67151,67153,67155],{"class":105,"line":1189},[103,67146,52134],{"class":113},[103,67148,51334],{"class":51290},[103,67150,51337],{"class":1952},[103,67152,159],{"class":113},[103,67154,51342],{"class":218},[103,67156,59117],{"class":113},[103,67158,67159,67161,67163,67165,67167,67169,67171,67173,67175],{"class":105,"line":1203},[103,67160,52134],{"class":113},[103,67162,51334],{"class":51290},[103,67164,51353],{"class":1952},[103,67166,159],{"class":113},[103,67168,51358],{"class":218},[103,67170,51361],{"class":1952},[103,67172,159],{"class":113},[103,67174,51366],{"class":218},[103,67176,59117],{"class":113},[103,67178,67179,67181,67183,67185,67187,67189,67191,67193,67195],{"class":105,"line":1209},[103,67180,52134],{"class":113},[103,67182,51334],{"class":51290},[103,67184,14910],{"class":1952},[103,67186,159],{"class":113},[103,67188,51381],{"class":218},[103,67190,51361],{"class":1952},[103,67192,159],{"class":113},[103,67194,51388],{"class":218},[103,67196,59117],{"class":113},[103,67198,67199,67201,67203,67205,67207],{"class":105,"line":1300},[103,67200,52134],{"class":113},[103,67202,51397],{"class":51290},[103,67204,63615],{"class":113},[103,67206,51397],{"class":51290},[103,67208,51297],{"class":113},[103,67210,67211,67213,67215],{"class":105,"line":1306},[103,67212,52134],{"class":113},[103,67214,5116],{"class":51290},[103,67216,51297],{"class":113},[103,67218,67219,67221],{"class":105,"line":1318},[103,67220,6393],{"class":51290},[103,67222,15562],{"class":113},[103,67224,67225,67227,67229,67231],{"class":105,"line":1601},[103,67226,54696],{"class":162},[103,67228,51427],{"class":113},[103,67230,305],{"class":162},[103,67232,1279],{"class":113},[103,67234,67235,67237,67239,67241],{"class":105,"line":1606},[103,67236,54685],{"class":162},[103,67238,51427],{"class":113},[103,67240,305],{"class":162},[103,67242,1279],{"class":113},[103,67244,67245],{"class":105,"line":1612},[103,67246,2176],{"class":113},[103,67248,67249],{"class":105,"line":1617},[103,67250,2389],{"emptyLinePlaceholder":30},[103,67252,67253,67255],{"class":105,"line":1631},[103,67254,63666],{"class":1952},[103,67256,15562],{"class":113},[103,67258,67259,67261,67263,67265,67267],{"class":105,"line":1636},[103,67260,54761],{"class":162},[103,67262,51427],{"class":113},[103,67264,63677],{"class":162},[103,67266,51482],{"class":109},[103,67268,1279],{"class":113},[103,67270,67271,67273,67275,67277,67279],{"class":105,"line":1642},[103,67272,54775],{"class":162},[103,67274,51427],{"class":113},[103,67276,63690],{"class":162},[103,67278,51482],{"class":109},[103,67280,1279],{"class":113},[103,67282,67283,67285,67287,67289,67291],{"class":105,"line":1663},[103,67284,54696],{"class":162},[103,67286,51427],{"class":113},[103,67288,813],{"class":162},[103,67290,51482],{"class":109},[103,67292,1279],{"class":113},[103,67294,67295,67297,67299,67301,67303,67305,67307],{"class":105,"line":1668},[103,67296,61967],{"class":162},[103,67298,51427],{"class":113},[103,67300,331],{"class":162},[103,67302,51482],{"class":109},[103,67304,51511],{"class":162},[103,67306,62234],{"class":162},[103,67308,1279],{"class":113},[103,67310,67311],{"class":105,"line":1682},[103,67312,2176],{"class":113},[103,67314,67315],{"class":105,"line":1687},[103,67316,2389],{"emptyLinePlaceholder":30},[103,67318,67319,67321],{"class":105,"line":1716},[103,67320,63735],{"class":1952},[103,67322,15562],{"class":113},[103,67324,67325,67327,67329,67331,67333],{"class":105,"line":1721},[103,67326,54761],{"class":162},[103,67328,51427],{"class":113},[103,67330,424],{"class":162},[103,67332,441],{"class":109},[103,67334,1279],{"class":113},[103,67336,67337,67339,67341,67343,67345],{"class":105,"line":1738},[103,67338,54775],{"class":162},[103,67340,51427],{"class":113},[103,67342,1020],{"class":162},[103,67344,51482],{"class":109},[103,67346,1279],{"class":113},[103,67348,67349,67351,67353,67355,67357],{"class":105,"line":1743},[103,67350,57349],{"class":162},[103,67352,51427],{"class":113},[103,67354,1020],{"class":162},[103,67356,51482],{"class":109},[103,67358,1279],{"class":113},[103,67360,67361,67363,67365,67367],{"class":105,"line":1748},[103,67362,54999],{"class":162},[103,67364,51427],{"class":113},[103,67366,51467],{"class":162},[103,67368,1279],{"class":113},[103,67370,67371,67373,67375,67377],{"class":105,"line":1753},[103,67372,55010],{"class":162},[103,67374,51427],{"class":113},[103,67376,51658],{"class":162},[103,67378,1279],{"class":113},[103,67380,67381],{"class":105,"line":1767},[103,67382,2176],{"class":113},[103,67384,67385],{"class":105,"line":1772},[103,67386,2389],{"emptyLinePlaceholder":30},[103,67388,67389,67391,67393],{"class":105,"line":2566},[103,67390,63735],{"class":1952},[103,67392,63808],{"class":51290},[103,67394,15562],{"class":113},[103,67396,67397,67399,67401,67403,67405],{"class":105,"line":2580},[103,67398,54912],{"class":162},[103,67400,51427],{"class":113},[103,67402,913],{"class":162},[103,67404,51482],{"class":109},[103,67406,1279],{"class":113},[103,67408,67409,67411,67413,67415],{"class":105,"line":2588},[103,67410,62324],{"class":162},[103,67412,51427],{"class":113},[103,67414,63831],{"class":162},[103,67416,1279],{"class":113},[103,67418,67419,67421,67423,67425,67427],{"class":105,"line":2593},[103,67420,61990],{"class":162},[103,67422,51427],{"class":113},[103,67424,813],{"class":162},[103,67426,51482],{"class":109},[103,67428,1279],{"class":113},[103,67430,67431],{"class":105,"line":2599},[103,67432,2176],{"class":113},[103,67434,67435],{"class":105,"line":2605},[103,67436,2389],{"emptyLinePlaceholder":30},[103,67438,67439,67441,67443],{"class":105,"line":2610},[103,67440,63735],{"class":1952},[103,67442,61282],{"class":51290},[103,67444,15562],{"class":113},[103,67446,67447,67449,67451,67453],{"class":105,"line":7938},[103,67448,54722],{"class":162},[103,67450,51427],{"class":113},[103,67452,54727],{"class":162},[103,67454,1279],{"class":113},[103,67456,67457,67459,67461,67463],{"class":105,"line":7962},[103,67458,54999],{"class":162},[103,67460,51427],{"class":113},[103,67462,51467],{"class":162},[103,67464,1279],{"class":113},[103,67466,67467,67469,67471,67473],{"class":105,"line":7967},[103,67468,55010],{"class":162},[103,67470,51427],{"class":113},[103,67472,51570],{"class":162},[103,67474,1279],{"class":113},[103,67476,67477],{"class":105,"line":7973},[103,67478,2176],{"class":113},[103,67480,67481],{"class":105,"line":8000},[103,67482,2389],{"emptyLinePlaceholder":30},[103,67484,67485,67487,67489,67491],{"class":105,"line":8005},[103,67486,63735],{"class":1952},[103,67488,61282],{"class":51290},[103,67490,55065],{"class":51290},[103,67492,15562],{"class":113},[103,67494,67495,67497,67499,67501,67503,67505],{"class":105,"line":8011},[103,67496,54696],{"class":162},[103,67498,51427],{"class":113},[103,67500,305],{"class":162},[103,67502,8940],{"class":162},[103,67504,51482],{"class":109},[103,67506,1279],{"class":113},[103,67508,67509,67511,67513,67515,67517],{"class":105,"line":8023},[103,67510,54912],{"class":162},[103,67512,51427],{"class":113},[103,67514,662],{"class":162},[103,67516,51482],{"class":109},[103,67518,1279],{"class":113},[103,67520,67521],{"class":105,"line":8035},[103,67522,2176],{"class":113},[103,67524,67525],{"class":105,"line":8047},[103,67526,2389],{"emptyLinePlaceholder":30},[103,67528,67529,67531,67533,67535,67537],{"class":105,"line":9706},[103,67530,63735],{"class":1952},[103,67532,61282],{"class":51290},[103,67534,55065],{"class":51290},[103,67536,1387],{"class":51290},[103,67538,15562],{"class":113},[103,67540,67541,67543,67545,67547],{"class":105,"line":9731},[103,67542,63960],{"class":162},[103,67544,51427],{"class":113},[103,67546,54727],{"class":162},[103,67548,1279],{"class":113},[103,67550,67551,67553,67555,67557,67559,67561,67563],{"class":105,"line":9754},[103,67552,62222],{"class":162},[103,67554,51427],{"class":113},[103,67556,191],{"class":162},[103,67558,51482],{"class":109},[103,67560,51511],{"class":162},[103,67562,63981],{"class":162},[103,67564,1279],{"class":113},[103,67566,67567,67569,67571,67573],{"class":105,"line":9778},[103,67568,57406],{"class":162},[103,67570,51427],{"class":113},[103,67572,62359],{"class":162},[103,67574,1279],{"class":113},[103,67576,67577],{"class":105,"line":9783},[103,67578,2176],{"class":113},[103,67580,67581],{"class":105,"line":9788},[103,67582,2389],{"emptyLinePlaceholder":30},[103,67584,67585,67587,67589,67591,67593,67595],{"class":105,"line":9793},[103,67586,63735],{"class":1952},[103,67588,61282],{"class":51290},[103,67590,55065],{"class":51290},[103,67592,1387],{"class":51290},[103,67594,64014],{"class":1952},[103,67596,15562],{"class":113},[103,67598,67599,67601,67603,67605],{"class":105,"line":9802},[103,67600,61781],{"class":162},[103,67602,51427],{"class":113},[103,67604,64025],{"class":162},[103,67606,1279],{"class":113},[103,67608,67609,67611,67613,67615],{"class":105,"line":9807},[103,67610,57406],{"class":162},[103,67612,51427],{"class":113},[103,67614,64025],{"class":162},[103,67616,1279],{"class":113},[103,67618,67619],{"class":105,"line":9813},[103,67620,2176],{"class":113},[103,67622,67623],{"class":105,"line":9834},[103,67624,2389],{"emptyLinePlaceholder":30},[103,67626,67627,67629],{"class":105,"line":9840},[103,67628,64050],{"class":1952},[103,67630,15562],{"class":113},[103,67632,67633,67635,67637,67639,67641,67643],{"class":105,"line":9854},[103,67634,54685],{"class":162},[103,67636,51427],{"class":113},[103,67638,305],{"class":162},[103,67640,64063],{"class":162},[103,67642,51482],{"class":109},[103,67644,1279],{"class":113},[103,67646,67647],{"class":105,"line":9860},[103,67648,2176],{"class":113},[103,67650,67651],{"class":105,"line":9887},[103,67652,2389],{"emptyLinePlaceholder":30},[103,67654,67655,67657,67659],{"class":105,"line":9896},[103,67656,64050],{"class":1952},[103,67658,62164],{"class":1952},[103,67660,15562],{"class":113},[103,67662,67663,67665,67667,67669],{"class":105,"line":9902},[103,67664,54999],{"class":162},[103,67666,51427],{"class":113},[103,67668,54727],{"class":162},[103,67670,1279],{"class":113},[103,67672,67673],{"class":105,"line":9910},[103,67674,2176],{"class":113},[103,67676,67677],{"class":105,"line":9915},[103,67678,2389],{"emptyLinePlaceholder":30},[103,67680,67681,67683,67686],{"class":105,"line":16594},[103,67682,64050],{"class":1952},[103,67684,67685],{"class":1952}," .active",[103,67687,15562],{"class":113},[103,67689,67690,67692,67694,67696],{"class":105,"line":16600},[103,67691,54999],{"class":162},[103,67693,51427],{"class":113},[103,67695,60859],{"class":162},[103,67697,1279],{"class":113},[103,67699,67700],{"class":105,"line":16623},[103,67701,2176],{"class":113},[103,67703,67704,67706,67708],{"class":105,"line":16629},[103,67705,52407],{"class":113},[103,67707,5116],{"class":51290},[103,67709,51297],{"class":113},[103,67711,67712,67714,67716],{"class":105,"line":16652},[103,67713,51775],{"class":113},[103,67715,51324],{"class":51290},[103,67717,51297],{"class":113},[103,67719,67720],{"class":105,"line":16666},[103,67721,2389],{"emptyLinePlaceholder":30},[103,67723,67724,67726,67728],{"class":105,"line":16686},[103,67725,1023],{"class":113},[103,67727,51790],{"class":51290},[103,67729,51297],{"class":113},[103,67731,67732,67734,67736,67738,67740,67742],{"class":105,"line":16692},[103,67733,52134],{"class":113},[103,67735,51601],{"class":51290},[103,67737,53476],{"class":1952},[103,67739,159],{"class":113},[103,67741,64165],{"class":218},[103,67743,51297],{"class":113},[103,67745,67746,67748,67750,67752,67754,67756],{"class":105,"line":16703},[103,67747,51331],{"class":113},[103,67749,51601],{"class":51290},[103,67751,53476],{"class":1952},[103,67753,159],{"class":113},[103,67755,64180],{"class":218},[103,67757,51297],{"class":113},[103,67759,67760,67762,67764,67766,67768],{"class":105,"line":16726},[103,67761,55224],{"class":113},[103,67763,74],{"class":51290},[103,67765,64191],{"class":113},[103,67767,74],{"class":51290},[103,67769,51297],{"class":113},[103,67771,67772,67774,67776],{"class":105,"line":16748},[103,67773,55224],{"class":113},[103,67775,1120],{"class":51290},[103,67777,51297],{"class":113},[103,67779,67780,67782,67784,67786,67788,67790,67792,67794,67796,67798,67800,67802,67804,67807,67809,67811,67813,67815],{"class":105,"line":16753},[103,67781,55292],{"class":113},[103,67783,60],{"class":51290},[103,67785,61042],{"class":113},[103,67787,17],{"class":51290},[103,67789,53476],{"class":1952},[103,67791,159],{"class":113},[103,67793,59696],{"class":218},[103,67795,61047],{"class":1952},[103,67797,159],{"class":113},[103,67799,64226],{"class":218},[103,67801,53941],{"class":1952},[103,67803,159],{"class":113},[103,67805,67806],{"class":218},"\"0\"",[103,67808,64229],{"class":113},[103,67810,17],{"class":51290},[103,67812,55304],{"class":113},[103,67814,60],{"class":51290},[103,67816,51297],{"class":113},[103,67818,67819,67821,67823,67825,67827,67829,67831,67833,67835,67837,67839,67841,67843,67845,67847],{"class":105,"line":16759},[103,67820,55292],{"class":113},[103,67822,60],{"class":51290},[103,67824,61042],{"class":113},[103,67826,17],{"class":51290},[103,67828,61047],{"class":1952},[103,67830,159],{"class":113},[103,67832,64226],{"class":218},[103,67834,53941],{"class":1952},[103,67836,159],{"class":113},[103,67838,3667],{"class":218},[103,67840,64256],{"class":113},[103,67842,17],{"class":51290},[103,67844,55304],{"class":113},[103,67846,60],{"class":51290},[103,67848,51297],{"class":113},[103,67850,67851,67853,67855,67857,67859,67861,67863,67865,67867,67869,67871,67873,67875,67877,67879],{"class":105,"line":16773},[103,67852,55292],{"class":113},[103,67854,60],{"class":51290},[103,67856,61042],{"class":113},[103,67858,17],{"class":51290},[103,67860,61047],{"class":1952},[103,67862,159],{"class":113},[103,67864,64226],{"class":218},[103,67866,53941],{"class":1952},[103,67868,159],{"class":113},[103,67870,3690],{"class":218},[103,67872,64283],{"class":113},[103,67874,17],{"class":51290},[103,67876,55304],{"class":113},[103,67878,60],{"class":51290},[103,67880,51297],{"class":113},[103,67882,67883,67885,67887,67889,67891,67893,67895,67897,67899,67901,67903,67905,67907,67909,67911],{"class":105,"line":16786},[103,67884,55292],{"class":113},[103,67886,60],{"class":51290},[103,67888,61042],{"class":113},[103,67890,17],{"class":51290},[103,67892,61047],{"class":1952},[103,67894,159],{"class":113},[103,67896,64226],{"class":218},[103,67898,53941],{"class":1952},[103,67900,159],{"class":113},[103,67902,3703],{"class":218},[103,67904,64310],{"class":113},[103,67906,17],{"class":51290},[103,67908,55304],{"class":113},[103,67910,60],{"class":51290},[103,67912,51297],{"class":113},[103,67914,67915,67917,67919,67921,67923,67925,67927,67929,67931,67933,67935,67937,67939,67941,67943],{"class":105,"line":16791},[103,67916,55292],{"class":113},[103,67918,60],{"class":51290},[103,67920,61042],{"class":113},[103,67922,17],{"class":51290},[103,67924,61047],{"class":1952},[103,67926,159],{"class":113},[103,67928,64226],{"class":218},[103,67930,53941],{"class":1952},[103,67932,159],{"class":113},[103,67934,3716],{"class":218},[103,67936,64337],{"class":113},[103,67938,17],{"class":51290},[103,67940,55304],{"class":113},[103,67942,60],{"class":51290},[103,67944,51297],{"class":113},[103,67946,67947,67949,67951],{"class":105,"line":16805},[103,67948,55397],{"class":113},[103,67950,1120],{"class":51290},[103,67952,51297],{"class":113},[103,67954,67955,67957,67959],{"class":105,"line":16810},[103,67956,51766],{"class":113},[103,67958,51601],{"class":51290},[103,67960,51297],{"class":113},[103,67962,67963,67965,67967,67969,67971,67973],{"class":105,"line":16816},[103,67964,51331],{"class":113},[103,67966,51601],{"class":51290},[103,67968,53476],{"class":1952},[103,67970,159],{"class":113},[103,67972,64374],{"class":218},[103,67974,51297],{"class":113},[103,67976,67977,67979,67981,67983,67985,67987,67989,67991,67993,67995,67997,67999,68001,68003,68005,68007],{"class":105,"line":16821},[103,67978,55224],{"class":113},[103,67980,51601],{"class":51290},[103,67982,53476],{"class":1952},[103,67984,159],{"class":113},[103,67986,64389],{"class":218},[103,67988,61042],{"class":113},[103,67990,1451],{"class":51290},[103,67992,55229],{"class":1952},[103,67994,159],{"class":113},[103,67996,64400],{"class":218},[103,67998,55237],{"class":1952},[103,68000,159],{"class":113},[103,68002,7642],{"class":218},[103,68004,64409],{"class":113},[103,68006,51601],{"class":51290},[103,68008,51297],{"class":113},[103,68010,68011,68013,68015,68017,68019,68021,68023,68025,68027,68029,68031,68033,68035,68037,68039,68041],{"class":105,"line":16835},[103,68012,55224],{"class":113},[103,68014,51601],{"class":51290},[103,68016,53476],{"class":1952},[103,68018,159],{"class":113},[103,68020,62613],{"class":218},[103,68022,61042],{"class":113},[103,68024,1451],{"class":51290},[103,68026,55229],{"class":1952},[103,68028,159],{"class":113},[103,68030,64436],{"class":218},[103,68032,55237],{"class":1952},[103,68034,159],{"class":113},[103,68036,7642],{"class":218},[103,68038,64409],{"class":113},[103,68040,51601],{"class":51290},[103,68042,51297],{"class":113},[103,68044,68045,68047,68049,68051,68053,68055,68057,68059,68061,68063,68065,68067,68069,68071,68073,68075],{"class":105,"line":16840},[103,68046,55224],{"class":113},[103,68048,51601],{"class":51290},[103,68050,53476],{"class":1952},[103,68052,159],{"class":113},[103,68054,62613],{"class":218},[103,68056,61042],{"class":113},[103,68058,1451],{"class":51290},[103,68060,55229],{"class":1952},[103,68062,159],{"class":113},[103,68064,64471],{"class":218},[103,68066,55237],{"class":1952},[103,68068,159],{"class":113},[103,68070,7642],{"class":218},[103,68072,64409],{"class":113},[103,68074,51601],{"class":51290},[103,68076,51297],{"class":113},[103,68078,68079,68081,68083,68085,68087,68089,68091,68093,68095,68097,68099,68101,68103,68105,68107,68109],{"class":105,"line":16845},[103,68080,55224],{"class":113},[103,68082,51601],{"class":51290},[103,68084,53476],{"class":1952},[103,68086,159],{"class":113},[103,68088,62613],{"class":218},[103,68090,61042],{"class":113},[103,68092,1451],{"class":51290},[103,68094,55229],{"class":1952},[103,68096,159],{"class":113},[103,68098,64506],{"class":218},[103,68100,55237],{"class":1952},[103,68102,159],{"class":113},[103,68104,7642],{"class":218},[103,68106,64409],{"class":113},[103,68108,51601],{"class":51290},[103,68110,51297],{"class":113},[103,68112,68113,68115,68117,68119,68121,68123,68125,68127,68129,68131,68133,68135,68137,68139,68141,68143],{"class":105,"line":16859},[103,68114,55224],{"class":113},[103,68116,51601],{"class":51290},[103,68118,53476],{"class":1952},[103,68120,159],{"class":113},[103,68122,62613],{"class":218},[103,68124,61042],{"class":113},[103,68126,1451],{"class":51290},[103,68128,55229],{"class":1952},[103,68130,159],{"class":113},[103,68132,64541],{"class":218},[103,68134,55237],{"class":1952},[103,68136,159],{"class":113},[103,68138,7642],{"class":218},[103,68140,64409],{"class":113},[103,68142,51601],{"class":51290},[103,68144,51297],{"class":113},[103,68146,68147,68149,68151],{"class":105,"line":16871},[103,68148,51766],{"class":113},[103,68150,51601],{"class":51290},[103,68152,51297],{"class":113},[103,68154,68155,68157,68159],{"class":105,"line":16876},[103,68156,52407],{"class":113},[103,68158,51601],{"class":51290},[103,68160,51297],{"class":113},[103,68162,68163,68165,68167],{"class":105,"line":16889},[103,68164,52134],{"class":113},[103,68166,51803],{"class":51290},[103,68168,51297],{"class":113},[103,68170,68171],{"class":105,"line":16894},[103,68172,68173],{"class":172},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[103,68175,68176],{"class":105,"line":16899},[103,68177,68178],{"class":172},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[103,68180,68181,68183,68185,68187,68189,68191,68193,68196],{"class":105,"line":16904},[103,68182,11211],{"class":109},[103,68184,61282],{"class":162},[103,68186,13554],{"class":109},[103,68188,54386],{"class":113},[103,68190,54389],{"class":1952},[103,68192,114],{"class":113},[103,68194,68195],{"class":218},"'.tab-nav ul'",[103,68197,120],{"class":113},[103,68199,68200],{"class":105,"line":16917},[103,68201,68202],{"class":172},"    \u002F\u002F 2.添加事件\n",[103,68204,68205,68207,68209,68211,68213,68215,68217,68219,68221],{"class":105,"line":16922},[103,68206,66944],{"class":113},[103,68208,57803],{"class":1952},[103,68210,114],{"class":113},[103,68212,57808],{"class":218},[103,68214,12425],{"class":113},[103,68216,54439],{"class":109},[103,68218,1647],{"class":113},[103,68220,188],{"class":5206},[103,68222,12432],{"class":113},[103,68224,68225,68227,68229],{"class":105,"line":32623},[103,68226,58234],{"class":113},[103,68228,67000],{"class":1952},[103,68230,67003],{"class":113},[103,68232,68233],{"class":105,"line":32629},[103,68234,68235],{"class":172},"      \u002F\u002Fe.targer是我们点击的对象\n",[103,68237,68238,68240,68242,68244,68247],{"class":105,"line":32635},[103,68239,54470],{"class":109},[103,68241,67024],{"class":113},[103,68243,54476],{"class":109},[103,68245,68246],{"class":218}," 'A'",[103,68248,12432],{"class":113},[103,68250,68251,68253,68255,68257,68260,68262,68264,68266,68268],{"class":105,"line":32641},[103,68252,51915],{"class":113},[103,68254,54389],{"class":1952},[103,68256,114],{"class":113},[103,68258,68259],{"class":218},"'.active'",[103,68261,56993],{"class":113},[103,68263,56996],{"class":1952},[103,68265,114],{"class":113},[103,68267,64704],{"class":218},[103,68269,120],{"class":113},[103,68271,68272,68275,68277,68279,68281],{"class":105,"line":32647},[103,68273,68274],{"class":113},"        e.target.classList.",[103,68276,5324],{"class":1952},[103,68278,114],{"class":113},[103,68280,64704],{"class":218},[103,68282,120],{"class":113},[103,68284,68285],{"class":105,"line":32658},[103,68286,2389],{"emptyLinePlaceholder":30},[103,68288,68289],{"class":105,"line":32664},[103,68290,68291],{"class":172},"        \u002F\u002F 下面大盒子模块\n",[103,68293,68294],{"class":105,"line":32684},[103,68295,68296],{"class":172},"        \u002F\u002F console.log(e.target.dataset.id)\n",[103,68298,68299,68301,68303,68305,68307],{"class":105,"line":32690},[103,68300,61260],{"class":109},[103,68302,3021],{"class":162},[103,68304,13554],{"class":109},[103,68306,45556],{"class":109},[103,68308,68309],{"class":113},"e.target.dataset.id\n",[103,68311,68312,68314,68316,68318,68320,68322,68324,68326,68328],{"class":105,"line":32701},[103,68313,51915],{"class":113},[103,68315,54389],{"class":1952},[103,68317,114],{"class":113},[103,68319,64752],{"class":218},[103,68321,56993],{"class":113},[103,68323,56996],{"class":1952},[103,68325,114],{"class":113},[103,68327,64704],{"class":218},[103,68329,120],{"class":113},[103,68331,68332,68334,68336,68338,68340,68342,68344,68346,68348,68350,68352,68354,68356],{"class":105,"line":32707},[103,68333,51915],{"class":113},[103,68335,54389],{"class":1952},[103,68337,114],{"class":113},[103,68339,64778],{"class":218},[103,68341,554],{"class":113},[103,68343,45556],{"class":109},[103,68345,25108],{"class":162},[103,68347,57022],{"class":218},[103,68349,56993],{"class":113},[103,68351,5324],{"class":1952},[103,68353,114],{"class":113},[103,68355,64704],{"class":218},[103,68357,120],{"class":113},[103,68359,68360],{"class":105,"line":32713},[103,68361,2389],{"emptyLinePlaceholder":30},[103,68363,68364],{"class":105,"line":32719},[103,68365,52388],{"class":113},[103,68367,68368],{"class":105,"line":32725},[103,68369,33451],{"class":113},[103,68371,68372,68374,68376],{"class":105,"line":32731},[103,68373,52407],{"class":113},[103,68375,51803],{"class":51290},[103,68377,51297],{"class":113},[103,68379,68380,68382,68384],{"class":105,"line":32737},[103,68381,51775],{"class":113},[103,68383,51790],{"class":51290},[103,68385,51297],{"class":113},[103,68387,68388],{"class":105,"line":32743},[103,68389,2389],{"emptyLinePlaceholder":30},[103,68391,68392,68394,68396],{"class":105,"line":32763},[103,68393,51775],{"class":113},[103,68395,50625],{"class":51290},[103,68397,51297],{"class":113},[74,68399,68401],{"id":68400},"_333-页面加载事件","3.3.3 页面加载事件",[57,68403,68404],{},[60,68405,68406],{},"load",[14,68408,68409],{},[1451,68410],{"alt":24,"src":68411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68413,68414],{},"window代表整个窗口，比document还要大",[14,68416,68417],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68419,68420],{},"img.addEventListener('load', function () {",[14,68422,68423],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68425,52454],{},[57,68427,68428],{"start":25},[60,68429,68430],{},"DOMContentLoaded",[14,68432,68433],{},[1451,68434],{"alt":24,"src":68435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68437,68438],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[74,68440,68442],{"id":68441},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68444,68445],{},[1451,68446],{"alt":24,"src":68447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68449,68450],{},[1451,68451],{"alt":24,"src":68452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68454,68455],{},[1451,68456],{"alt":24,"src":68457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68459,68460],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68462,68463],{},"获得的是数字型数据，不带单位",[14,68465,68466],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68468,68469],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68471,68472],{},"它是通过document.documentElement来获取",[14,68474,68475],{},[1451,68476],{"alt":24,"src":68477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68479,68480],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[74,68482,68484],{"id":68483},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68486,68487],{},[1451,68488],{"alt":24,"src":68489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68491,68492],{},[1451,68493],{"alt":24,"src":68494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[74,68496,68498],{"id":68497},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68500,68501],{},[1451,68502],{"alt":24,"src":68503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68505,68506],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68508,68509],{},[1451,68510],{"alt":24,"src":68511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68513,68514],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68516,68517],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68519,68520],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68522,68523],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68525,68526],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68528,68529],{},[1451,68530],{"alt":24,"src":68531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68533,68534],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68536,68537],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68539,68540],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68542,68543],{},"e.pageX-box.getBoundingClientRect()",[74,68545,68547],{"id":68546},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68549,68550],{},[1451,68551],{"alt":24,"src":68552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68554,68555],{},"这个是相对于视口来说的，它是个方法，不是属性值",[74,68557,68559],{"id":68558},"_338-总结","3.3.8 总结",[14,68561,68562],{},[1451,68563],{"alt":24,"src":68564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68566,68567],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68569,68570],{},"修改盒子的宽高只能通过width和height来实现",[74,68572,68574],{"id":68573},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[94,68576,68578],{"className":50623,"code":68577,"language":50625,"meta":24,"style":24},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[100,68579,68580,68585,68590,68595,68600],{"__ignoreMap":24},[103,68581,68582],{"class":105,"line":106},[103,68583,68584],{"class":113},"\u002F* 页面滑动 *\u002F\n",[103,68586,68587],{"class":105,"line":25},[103,68588,68589],{"class":113},"html {\n",[103,68591,68592],{"class":105,"line":1168},[103,68593,68594],{"class":113},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[103,68596,68597],{"class":105,"line":1183},[103,68598,68599],{"class":113},"  scroll-behavior: smooth;\n",[103,68601,68602],{"class":105,"line":1189},[103,68603,1554],{"class":113},[14,68605,68606],{},"默认是auto",[74,68608,68610],{"id":68609},"_3310-日期对象","3.3.10 日期对象",[21988,68612,68614],{"id":68613},"_33101-实例化","3.3.10.1 实例化",[14,68616,68617],{},[1451,68618],{"alt":24,"src":68619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21988,68621,68623],{"id":68622},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68625,68626],{},[1451,68627],{"alt":24,"src":68628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68630,68631],{},"月份+1",[14,68633,68634],{},"老外认为第一天为0，星期天",[14,68636,68637],{},"方法使用的时候必须要跟括号",[14,68639,68640],{},"快速获得日期",[14,68642,68643],{},"\u002F\u002F 得到年月日",[14,68645,68646],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68648,68649],{},"\u002F\u002F 得到当地日期",[14,68651,68652],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68654,68655],{},"\u002F\u002F 得到当地时间",[14,68657,68658],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68660,68661],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68663,68664],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51803,68666,68667],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[14,68669,68670],{},"学会去封装函数！",[21988,68672,68674],{"id":68673},"_33103-时间戳","3.3.10.3 时间戳",[14,68676,68677],{},[1451,68678],{"alt":24,"src":68679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68681,68682],{},[1451,68683],{"alt":24,"src":68684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68686,68687],{},"三种方法记住一个就可以",[74,68689,68691],{"id":68690},"_3311-节点操作","3.3.11 节点操作",[21988,68693,68695],{"id":68694},"_33111-dom节点","3.3.11.1 DOM节点",[14,68697,68698],{},[1451,68699],{"alt":24,"src":68700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68702,68703],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21988,68705,68707],{"id":68706},"_33112-查找节点","3.3.11.2 查找节点",[14,68709,68710],{},"前边的document.querySelector()是获取的元素",[14,68712,68713],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68715,68716],{},[1451,68717],{"alt":24,"src":68718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[57,68720,68721],{},[60,68722,68723],{},"父节点",[14,68725,68726],{},[1451,68727],{"alt":24,"src":68728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[57,68730,68731],{"start":25},[60,68732,68733],{},"子节点",[14,68735,68736],{},[1451,68737],{"alt":24,"src":68738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68740,68741],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68743,68744],{},"children获得的是伪数组，是亲儿子",[57,68746,68747],{"start":1168},[60,68748,68749],{},"兄弟节点",[14,68751,68752],{},[1451,68753],{"alt":24,"src":68754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21988,68756,68758],{"id":68757},"_33113-增加节点","3.3.11.3 增加节点",[14,68760,68761],{},[1451,68762],{"alt":24,"src":68763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68765,68766],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68768,68769],{},[1451,68770],{"alt":24,"src":68771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68773,68774],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68776,68777],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68779,68780],{},"例：",[51803,68782,68783],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[14,68785,68786],{},[1451,68787],{"alt":24,"src":68788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68790,68791],{},"false只克隆标签，里边的内容不会克隆过来",[94,68793,68795],{"className":50623,"code":68794,"language":50625,"meta":24,"style":24},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[100,68796,68797],{"__ignoreMap":24},[103,68798,68799],{"class":105,"line":106},[103,68800,68794],{"class":113},[21988,68802,68804],{"id":68803},"_33114-删除节点","3.3.11.4 删除节点",[14,68806,68807],{},[1451,68808],{"alt":24,"src":68809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68811,68812],{},"父亲删儿子",[14,68814,68815],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[74,68817,68819],{"id":68818},"_3312-m端事件","3.3.12 M端事件",[14,68821,68822],{},"M端就是移动端",[14,68824,68825],{},[1451,68826],{"alt":24,"src":68827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[74,68829,68831],{"id":68830},"_3313-插件","3.3.13 插件",[14,68833,68834],{},"要熟悉官网！！！",[14,68836,68837],{},[17,68838,68839],{"href":68839,"rel":68840},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[21],[14,68842,68843],{},[17,68844,68845],{"href":68845,"rel":68846},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[21],[74,68848,68850],{"id":68849},"_3314-学生信息表","3.3.14 学生信息表",[57,68852,68853,68856,68859,68862,68865,68868,68871,68874],{},[60,68854,68855],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[60,68857,68858],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[60,68860,68861],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[60,68863,68864],{},"用好表单元素自带的属性，value,name等",[60,68866,68867],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[60,68869,68870],{},"不要忘记事件对象",[60,68872,68873],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[60,68875,68876],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68878,68879],{},"结构：",[94,68881,68883],{"className":50623,"code":68882,"language":50625,"meta":24,"style":24},"\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",[100,68884,68885,68895,68909,68913,68921,68935,68955,68976,68989,69013,69021,69025,69033,69046,69067,69095,69123,69128,69150,69170,69189,69197,69225,69247,69267,69287,69307,69327,69347,69355,69375,69383,69387,69400,69408,69416,69424,69437,69450,69463,69476,69489,69502,69515,69523,69531,69539,69544,69549,69554,69559,69564,69569,69574,69579,69584,69589,69594,69599,69604,69612,69620,69628,69632,69652,69671,69691,69711,69731,69751,69755,69760,69780,69785,69795,69800,69805,69825,69847,69852,69862,69866,69870,69875,69880,69909,69923,69938,69942,69946,69950,69955,69966,69979,69984,69989,69994,69999,70004,70008,70013,70018,70027,70032,70037,70049,70054,70061,70065,70070,70080,70085,70095,70100,70128,70149,70159,70179,70197,70214,70231,70248,70265,70269,70279,70284,70289,70294,70305,70309,70313,70317,70322,70327,70348,70360,70365,70370,70375,70389,70394,70401,70405,70409,70417,70421,70429,70433],{"__ignoreMap":24},[103,68886,68887,68889,68891,68893],{"class":105,"line":106},[103,68888,51287],{"class":113},[103,68890,51291],{"class":51290},[103,68892,51294],{"class":1952},[103,68894,51297],{"class":113},[103,68896,68897,68899,68901,68903,68905,68907],{"class":105,"line":25},[103,68898,1023],{"class":113},[103,68900,50625],{"class":51290},[103,68902,51306],{"class":1952},[103,68904,159],{"class":113},[103,68906,51311],{"class":218},[103,68908,51297],{"class":113},[103,68910,68911],{"class":105,"line":1168},[103,68912,2389],{"emptyLinePlaceholder":30},[103,68914,68915,68917,68919],{"class":105,"line":1183},[103,68916,1023],{"class":113},[103,68918,51324],{"class":51290},[103,68920,51297],{"class":113},[103,68922,68923,68925,68927,68929,68931,68933],{"class":105,"line":1189},[103,68924,52134],{"class":113},[103,68926,51334],{"class":51290},[103,68928,51337],{"class":1952},[103,68930,159],{"class":113},[103,68932,51342],{"class":218},[103,68934,59117],{"class":113},[103,68936,68937,68939,68941,68943,68945,68947,68949,68951,68953],{"class":105,"line":1203},[103,68938,52134],{"class":113},[103,68940,51334],{"class":51290},[103,68942,14910],{"class":1952},[103,68944,159],{"class":113},[103,68946,51381],{"class":218},[103,68948,51361],{"class":1952},[103,68950,159],{"class":113},[103,68952,51388],{"class":218},[103,68954,59117],{"class":113},[103,68956,68957,68959,68961,68963,68965,68967,68969,68971,68974],{"class":105,"line":1209},[103,68958,52134],{"class":113},[103,68960,51334],{"class":51290},[103,68962,51353],{"class":1952},[103,68964,159],{"class":113},[103,68966,51358],{"class":218},[103,68968,51361],{"class":1952},[103,68970,159],{"class":113},[103,68972,68973],{"class":218},"\"ie=edge\"",[103,68975,59117],{"class":113},[103,68977,68978,68980,68982,68985,68987],{"class":105,"line":1300},[103,68979,52134],{"class":113},[103,68981,51397],{"class":51290},[103,68983,68984],{"class":113},">学生信息管理\u003C\u002F",[103,68986,51397],{"class":51290},[103,68988,51297],{"class":113},[103,68990,68991,68993,68996,68999,69001,69004,69006,69008,69011],{"class":105,"line":1306},[103,68992,52134],{"class":113},[103,68994,68995],{"class":51290},"link",[103,68997,68998],{"class":1952}," rel",[103,69000,159],{"class":113},[103,69002,69003],{"class":218},"\"stylesheet\"",[103,69005,61047],{"class":1952},[103,69007,159],{"class":113},[103,69009,69010],{"class":218},"\"css\u002Findex.css\"",[103,69012,59117],{"class":113},[103,69014,69015,69017,69019],{"class":105,"line":1318},[103,69016,51775],{"class":113},[103,69018,51324],{"class":51290},[103,69020,51297],{"class":113},[103,69022,69023],{"class":105,"line":1601},[103,69024,2389],{"emptyLinePlaceholder":30},[103,69026,69027,69029,69031],{"class":105,"line":1606},[103,69028,1023],{"class":113},[103,69030,51790],{"class":51290},[103,69032,51297],{"class":113},[103,69034,69035,69037,69039,69042,69044],{"class":105,"line":1612},[103,69036,52134],{"class":113},[103,69038,10],{"class":51290},[103,69040,69041],{"class":113},">新增学员\u003C\u002F",[103,69043,10],{"class":51290},[103,69045,51297],{"class":113},[103,69047,69048,69050,69052,69054,69056,69058,69061,69063,69065],{"class":105,"line":1617},[103,69049,52134],{"class":113},[103,69051,66615],{"class":51290},[103,69053,53476],{"class":1952},[103,69055,159],{"class":113},[103,69057,62654],{"class":218},[103,69059,69060],{"class":1952}," autocomplete",[103,69062,159],{"class":113},[103,69064,31766],{"class":218},[103,69066,51297],{"class":113},[103,69068,69069,69072,69074,69076,69078,69080,69082,69084,69087,69089,69091,69093],{"class":105,"line":1631},[103,69070,69071],{"class":113},"    姓名：\u003C",[103,69073,53811],{"class":51290},[103,69075,53814],{"class":1952},[103,69077,159],{"class":113},[103,69079,62689],{"class":218},[103,69081,53476],{"class":1952},[103,69083,159],{"class":113},[103,69085,69086],{"class":218},"\"uname\"",[103,69088,14910],{"class":1952},[103,69090,159],{"class":113},[103,69092,69086],{"class":218},[103,69094,59117],{"class":113},[103,69096,69097,69100,69102,69104,69106,69108,69110,69112,69115,69117,69119,69121],{"class":105,"line":1636},[103,69098,69099],{"class":113},"    年龄：\u003C",[103,69101,53811],{"class":51290},[103,69103,53814],{"class":1952},[103,69105,159],{"class":113},[103,69107,62689],{"class":218},[103,69109,53476],{"class":1952},[103,69111,159],{"class":113},[103,69113,69114],{"class":218},"\"age\"",[103,69116,14910],{"class":1952},[103,69118,159],{"class":113},[103,69120,69114],{"class":218},[103,69122,59117],{"class":113},[103,69124,69125],{"class":105,"line":1642},[103,69126,69127],{"class":113},"    性别:\n",[103,69129,69130,69132,69135,69137,69139,69142,69144,69146,69148],{"class":105,"line":1663},[103,69131,51331],{"class":113},[103,69133,69134],{"class":51290},"select",[103,69136,14910],{"class":1952},[103,69138,159],{"class":113},[103,69140,69141],{"class":218},"\"gender\"",[103,69143,53476],{"class":1952},[103,69145,159],{"class":113},[103,69147,69141],{"class":218},[103,69149,51297],{"class":113},[103,69151,69152,69154,69157,69159,69161,69163,69166,69168],{"class":105,"line":1668},[103,69153,55224],{"class":113},[103,69155,69156],{"class":51290},"option",[103,69158,66641],{"class":1952},[103,69160,159],{"class":113},[103,69162,9951],{"class":218},[103,69164,69165],{"class":113},">男\u003C\u002F",[103,69167,69156],{"class":51290},[103,69169,51297],{"class":113},[103,69171,69172,69174,69176,69178,69180,69182,69185,69187],{"class":105,"line":1682},[103,69173,55224],{"class":113},[103,69175,69156],{"class":51290},[103,69177,66641],{"class":1952},[103,69179,159],{"class":113},[103,69181,10020],{"class":218},[103,69183,69184],{"class":113},">女\u003C\u002F",[103,69186,69156],{"class":51290},[103,69188,51297],{"class":113},[103,69190,69191,69193,69195],{"class":105,"line":1687},[103,69192,51766],{"class":113},[103,69194,69134],{"class":51290},[103,69196,51297],{"class":113},[103,69198,69199,69202,69204,69206,69208,69210,69212,69214,69217,69219,69221,69223],{"class":105,"line":1716},[103,69200,69201],{"class":113},"    薪资：\u003C",[103,69203,53811],{"class":51290},[103,69205,53814],{"class":1952},[103,69207,159],{"class":113},[103,69209,62689],{"class":218},[103,69211,53476],{"class":1952},[103,69213,159],{"class":113},[103,69215,69216],{"class":218},"\"salary\"",[103,69218,14910],{"class":1952},[103,69220,159],{"class":113},[103,69222,69216],{"class":218},[103,69224,59117],{"class":113},[103,69226,69227,69230,69232,69234,69236,69239,69241,69243,69245],{"class":105,"line":1721},[103,69228,69229],{"class":113},"    就业城市：\u003C",[103,69231,69134],{"class":51290},[103,69233,14910],{"class":1952},[103,69235,159],{"class":113},[103,69237,69238],{"class":218},"\"city\"",[103,69240,53476],{"class":1952},[103,69242,159],{"class":113},[103,69244,69238],{"class":218},[103,69246,51297],{"class":113},[103,69248,69249,69251,69253,69255,69257,69260,69263,69265],{"class":105,"line":1738},[103,69250,55224],{"class":113},[103,69252,69156],{"class":51290},[103,69254,66641],{"class":1952},[103,69256,159],{"class":113},[103,69258,69259],{"class":218},"\"北京\"",[103,69261,69262],{"class":113},">北京\u003C\u002F",[103,69264,69156],{"class":51290},[103,69266,51297],{"class":113},[103,69268,69269,69271,69273,69275,69277,69280,69283,69285],{"class":105,"line":1743},[103,69270,55224],{"class":113},[103,69272,69156],{"class":51290},[103,69274,66641],{"class":1952},[103,69276,159],{"class":113},[103,69278,69279],{"class":218},"\"上海\"",[103,69281,69282],{"class":113},">上海\u003C\u002F",[103,69284,69156],{"class":51290},[103,69286,51297],{"class":113},[103,69288,69289,69291,69293,69295,69297,69300,69303,69305],{"class":105,"line":1748},[103,69290,55224],{"class":113},[103,69292,69156],{"class":51290},[103,69294,66641],{"class":1952},[103,69296,159],{"class":113},[103,69298,69299],{"class":218},"\"广州\"",[103,69301,69302],{"class":113},">广州\u003C\u002F",[103,69304,69156],{"class":51290},[103,69306,51297],{"class":113},[103,69308,69309,69311,69313,69315,69317,69320,69323,69325],{"class":105,"line":1753},[103,69310,55224],{"class":113},[103,69312,69156],{"class":51290},[103,69314,66641],{"class":1952},[103,69316,159],{"class":113},[103,69318,69319],{"class":218},"\"深圳\"",[103,69321,69322],{"class":113},">深圳\u003C\u002F",[103,69324,69156],{"class":51290},[103,69326,51297],{"class":113},[103,69328,69329,69331,69333,69335,69337,69340,69343,69345],{"class":105,"line":1767},[103,69330,55224],{"class":113},[103,69332,69156],{"class":51290},[103,69334,66641],{"class":1952},[103,69336,159],{"class":113},[103,69338,69339],{"class":218},"\"曹县\"",[103,69341,69342],{"class":113},">曹县\u003C\u002F",[103,69344,69156],{"class":51290},[103,69346,51297],{"class":113},[103,69348,69349,69351,69353],{"class":105,"line":1772},[103,69350,51766],{"class":113},[103,69352,69134],{"class":51290},[103,69354,51297],{"class":113},[103,69356,69357,69359,69361,69363,69365,69368,69371,69373],{"class":105,"line":2566},[103,69358,51331],{"class":113},[103,69360,53877],{"class":51290},[103,69362,53476],{"class":1952},[103,69364,159],{"class":113},[103,69366,69367],{"class":218},"\"add\"",[103,69369,69370],{"class":113},">录入\u003C\u002F",[103,69372,53877],{"class":51290},[103,69374,51297],{"class":113},[103,69376,69377,69379,69381],{"class":105,"line":2580},[103,69378,52407],{"class":113},[103,69380,66615],{"class":51290},[103,69382,51297],{"class":113},[103,69384,69385],{"class":105,"line":2588},[103,69386,2389],{"emptyLinePlaceholder":30},[103,69388,69389,69391,69393,69396,69398],{"class":105,"line":2593},[103,69390,52134],{"class":113},[103,69392,10],{"class":51290},[103,69394,69395],{"class":113},">就业榜\u003C\u002F",[103,69397,10],{"class":51290},[103,69399,51297],{"class":113},[103,69401,69402,69404,69406],{"class":105,"line":2599},[103,69403,52134],{"class":113},[103,69405,251],{"class":51290},[103,69407,51297],{"class":113},[103,69409,69410,69412,69414],{"class":105,"line":2605},[103,69411,51331],{"class":113},[103,69413,254],{"class":51290},[103,69415,51297],{"class":113},[103,69417,69418,69420,69422],{"class":105,"line":2610},[103,69419,55224],{"class":113},[103,69421,257],{"class":51290},[103,69423,51297],{"class":113},[103,69425,69426,69428,69430,69433,69435],{"class":105,"line":7938},[103,69427,55292],{"class":113},[103,69429,260],{"class":51290},[103,69431,69432],{"class":113},">序号\u003C\u002F",[103,69434,260],{"class":51290},[103,69436,51297],{"class":113},[103,69438,69439,69441,69443,69446,69448],{"class":105,"line":7962},[103,69440,55292],{"class":113},[103,69442,260],{"class":51290},[103,69444,69445],{"class":113},">姓名\u003C\u002F",[103,69447,260],{"class":51290},[103,69449,51297],{"class":113},[103,69451,69452,69454,69456,69459,69461],{"class":105,"line":7967},[103,69453,55292],{"class":113},[103,69455,260],{"class":51290},[103,69457,69458],{"class":113},">年龄\u003C\u002F",[103,69460,260],{"class":51290},[103,69462,51297],{"class":113},[103,69464,69465,69467,69469,69472,69474],{"class":105,"line":7973},[103,69466,55292],{"class":113},[103,69468,260],{"class":51290},[103,69470,69471],{"class":113},">性别\u003C\u002F",[103,69473,260],{"class":51290},[103,69475,51297],{"class":113},[103,69477,69478,69480,69482,69485,69487],{"class":105,"line":8000},[103,69479,55292],{"class":113},[103,69481,260],{"class":51290},[103,69483,69484],{"class":113},">薪资\u003C\u002F",[103,69486,260],{"class":51290},[103,69488,51297],{"class":113},[103,69490,69491,69493,69495,69498,69500],{"class":105,"line":8005},[103,69492,55292],{"class":113},[103,69494,260],{"class":51290},[103,69496,69497],{"class":113},">就业城市\u003C\u002F",[103,69499,260],{"class":51290},[103,69501,51297],{"class":113},[103,69503,69504,69506,69508,69511,69513],{"class":105,"line":8011},[103,69505,55292],{"class":113},[103,69507,260],{"class":51290},[103,69509,69510],{"class":113},">操作\u003C\u002F",[103,69512,260],{"class":51290},[103,69514,51297],{"class":113},[103,69516,69517,69519,69521],{"class":105,"line":8023},[103,69518,55397],{"class":113},[103,69520,257],{"class":51290},[103,69522,51297],{"class":113},[103,69524,69525,69527,69529],{"class":105,"line":8035},[103,69526,51766],{"class":113},[103,69528,254],{"class":51290},[103,69530,51297],{"class":113},[103,69532,69533,69535,69537],{"class":105,"line":8047},[103,69534,51331],{"class":113},[103,69536,298],{"class":51290},[103,69538,51297],{"class":113},[103,69540,69541],{"class":105,"line":9706},[103,69542,69543],{"class":172},"      \u003C!-- \n",[103,69545,69546],{"class":105,"line":9731},[103,69547,69548],{"class":172},"        \u003Ctr>\n",[103,69550,69551],{"class":105,"line":9754},[103,69552,69553],{"class":172},"          \u003Ctd>1001\u003C\u002Ftd>\n",[103,69555,69556],{"class":105,"line":9778},[103,69557,69558],{"class":172},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[103,69560,69561],{"class":105,"line":9783},[103,69562,69563],{"class":172},"          \u003Ctd>19\u003C\u002Ftd>\n",[103,69565,69566],{"class":105,"line":9788},[103,69567,69568],{"class":172},"          \u003Ctd>男\u003C\u002Ftd>\n",[103,69570,69571],{"class":105,"line":9793},[103,69572,69573],{"class":172},"          \u003Ctd>15000\u003C\u002Ftd>\n",[103,69575,69576],{"class":105,"line":9802},[103,69577,69578],{"class":172},"          \u003Ctd>上海\u003C\u002Ftd>\n",[103,69580,69581],{"class":105,"line":9807},[103,69582,69583],{"class":172},"          \u003Ctd>\n",[103,69585,69586],{"class":105,"line":9813},[103,69587,69588],{"class":172},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[103,69590,69591],{"class":105,"line":9834},[103,69592,69593],{"class":172},"          \u003C\u002Ftd>\n",[103,69595,69596],{"class":105,"line":9840},[103,69597,69598],{"class":172},"        \u003C\u002Ftr> \n",[103,69600,69601],{"class":105,"line":9854},[103,69602,69603],{"class":172},"        -->\n",[103,69605,69606,69608,69610],{"class":105,"line":9860},[103,69607,51766],{"class":113},[103,69609,298],{"class":51290},[103,69611,51297],{"class":113},[103,69613,69614,69616,69618],{"class":105,"line":9887},[103,69615,52407],{"class":113},[103,69617,251],{"class":51290},[103,69619,51297],{"class":113},[103,69621,69622,69624,69626],{"class":105,"line":9896},[103,69623,52134],{"class":113},[103,69625,51803],{"class":51290},[103,69627,51297],{"class":113},[103,69629,69630],{"class":105,"line":9902},[103,69631,59948],{"class":172},[103,69633,69634,69636,69639,69641,69643,69645,69647,69650],{"class":105,"line":9910},[103,69635,11211],{"class":109},[103,69637,69638],{"class":162}," uname",[103,69640,13554],{"class":109},[103,69642,54386],{"class":113},[103,69644,54389],{"class":1952},[103,69646,114],{"class":113},[103,69648,69649],{"class":218},"'.uname'",[103,69651,120],{"class":113},[103,69653,69654,69656,69658,69660,69662,69664,69666,69669],{"class":105,"line":9915},[103,69655,11211],{"class":109},[103,69657,15679],{"class":162},[103,69659,13554],{"class":109},[103,69661,54386],{"class":113},[103,69663,54389],{"class":1952},[103,69665,114],{"class":113},[103,69667,69668],{"class":218},"'.age'",[103,69670,120],{"class":113},[103,69672,69673,69675,69678,69680,69682,69684,69686,69689],{"class":105,"line":16594},[103,69674,11211],{"class":109},[103,69676,69677],{"class":162}," gender",[103,69679,13554],{"class":109},[103,69681,54386],{"class":113},[103,69683,54389],{"class":1952},[103,69685,114],{"class":113},[103,69687,69688],{"class":218},"'.gender'",[103,69690,120],{"class":113},[103,69692,69693,69695,69698,69700,69702,69704,69706,69709],{"class":105,"line":16600},[103,69694,11211],{"class":109},[103,69696,69697],{"class":162}," salary",[103,69699,13554],{"class":109},[103,69701,54386],{"class":113},[103,69703,54389],{"class":1952},[103,69705,114],{"class":113},[103,69707,69708],{"class":218},"'.salary'",[103,69710,120],{"class":113},[103,69712,69713,69715,69718,69720,69722,69724,69726,69729],{"class":105,"line":16623},[103,69714,11211],{"class":109},[103,69716,69717],{"class":162}," city",[103,69719,13554],{"class":109},[103,69721,54386],{"class":113},[103,69723,54389],{"class":1952},[103,69725,114],{"class":113},[103,69727,69728],{"class":218},"'.city'",[103,69730,120],{"class":113},[103,69732,69733,69735,69738,69740,69742,69744,69746,69749],{"class":105,"line":16629},[103,69734,11211],{"class":109},[103,69736,69737],{"class":162}," tbody",[103,69739,13554],{"class":109},[103,69741,54386],{"class":113},[103,69743,54389],{"class":1952},[103,69745,114],{"class":113},[103,69747,69748],{"class":218},"'tbody'",[103,69750,120],{"class":113},[103,69752,69753],{"class":105,"line":16652},[103,69754,2389],{"emptyLinePlaceholder":30},[103,69756,69757],{"class":105,"line":16666},[103,69758,69759],{"class":172},"    \u002F\u002F 获取所有带有name属性的元素\n",[103,69761,69762,69764,69767,69769,69771,69773,69775,69778],{"class":105,"line":16686},[103,69763,11211],{"class":109},[103,69765,69766],{"class":162}," items",[103,69768,13554],{"class":109},[103,69770,54386],{"class":113},[103,69772,55671],{"class":1952},[103,69774,114],{"class":113},[103,69776,69777],{"class":218},"'[name]'",[103,69779,120],{"class":113},[103,69781,69782],{"class":105,"line":16692},[103,69783,69784],{"class":172},"    \u002F\u002F 声明一个空的数组\n",[103,69786,69787,69789,69791,69793],{"class":105,"line":16703},[103,69788,11211],{"class":109},[103,69790,57685],{"class":162},[103,69792,13554],{"class":109},[103,69794,51828],{"class":113},[103,69796,69797],{"class":105,"line":16726},[103,69798,69799],{"class":172},"    \u002F\u002F 1.录入模块\n",[103,69801,69802],{"class":105,"line":16748},[103,69803,69804],{"class":172},"    \u002F\u002F 1.1这是一个表单提交事件\n",[103,69806,69807,69809,69812,69814,69816,69818,69820,69823],{"class":105,"line":16753},[103,69808,11211],{"class":109},[103,69810,69811],{"class":162}," info",[103,69813,13554],{"class":109},[103,69815,54386],{"class":113},[103,69817,54389],{"class":1952},[103,69819,114],{"class":113},[103,69821,69822],{"class":218},"'.info'",[103,69824,120],{"class":113},[103,69826,69827,69830,69832,69834,69837,69839,69841,69843,69845],{"class":105,"line":16759},[103,69828,69829],{"class":113},"    info.",[103,69831,57803],{"class":1952},[103,69833,114],{"class":113},[103,69835,69836],{"class":218},"'submit'",[103,69838,12425],{"class":113},[103,69840,54439],{"class":109},[103,69842,1647],{"class":113},[103,69844,188],{"class":5206},[103,69846,12432],{"class":113},[103,69848,69849],{"class":105,"line":16773},[103,69850,69851],{"class":172},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[103,69853,69854,69857,69860],{"class":105,"line":16786},[103,69855,69856],{"class":113},"      e.",[103,69858,69859],{"class":1952},"preventDefault",[103,69861,1965],{"class":113},[103,69863,69864],{"class":105,"line":16791},[103,69865,60002],{"class":172},[103,69867,69868],{"class":105,"line":16805},[103,69869,2389],{"emptyLinePlaceholder":30},[103,69871,69872],{"class":105,"line":16810},[103,69873,69874],{"class":172},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[103,69876,69877],{"class":105,"line":16816},[103,69878,69879],{"class":172},"      \u002F\u002F 先遍历循环\n",[103,69881,69882,69884,69886,69888,69890,69892,69894,69896,69898,69901,69903,69905,69907],{"class":105,"line":16821},[103,69883,52274],{"class":109},[103,69885,1647],{"class":113},[103,69887,51837],{"class":109},[103,69889,9428],{"class":113},[103,69891,159],{"class":109},[103,69893,4082],{"class":162},[103,69895,9435],{"class":113},[103,69897,1023],{"class":109},[103,69899,69900],{"class":113}," items.",[103,69902,51958],{"class":162},[103,69904,3203],{"class":113},[103,69906,2281],{"class":109},[103,69908,12432],{"class":113},[103,69910,69911,69913,69916,69918,69921],{"class":105,"line":16835},[103,69912,2486],{"class":109},[103,69914,69915],{"class":113}," (items[i].value ",[103,69917,54476],{"class":109},[103,69919,69920],{"class":218}," ''",[103,69922,12432],{"class":113},[103,69924,69925,69928,69931,69933,69936],{"class":105,"line":16840},[103,69926,69927],{"class":109},"          return",[103,69929,69930],{"class":1952}," alert",[103,69932,114],{"class":113},[103,69934,69935],{"class":218},"'输入内容不能为空'",[103,69937,120],{"class":113},[103,69939,69940],{"class":105,"line":16845},[103,69941,2518],{"class":113},[103,69943,69944],{"class":105,"line":16859},[103,69945,52388],{"class":113},[103,69947,69948],{"class":105,"line":16871},[103,69949,2389],{"emptyLinePlaceholder":30},[103,69951,69952],{"class":105,"line":16876},[103,69953,69954],{"class":172},"      \u002F\u002F 创建新的对象\n",[103,69956,69957,69959,69962,69964],{"class":105,"line":16889},[103,69958,58218],{"class":109},[103,69960,69961],{"class":162}," obj",[103,69963,13554],{"class":109},[103,69965,15562],{"class":113},[103,69967,69968,69971,69973,69975,69977],{"class":105,"line":16894},[103,69969,69970],{"class":113},"        stuID: arr.",[103,69972,51958],{"class":162},[103,69974,45556],{"class":109},[103,69976,25108],{"class":162},[103,69978,31456],{"class":113},[103,69980,69981],{"class":105,"line":16899},[103,69982,69983],{"class":113},"        uname: uname.value,\n",[103,69985,69986],{"class":105,"line":16904},[103,69987,69988],{"class":113},"        age: age.value,\n",[103,69990,69991],{"class":105,"line":16917},[103,69992,69993],{"class":113},"        gender: gender.value,\n",[103,69995,69996],{"class":105,"line":16922},[103,69997,69998],{"class":113},"        salary: salary.value,\n",[103,70000,70001],{"class":105,"line":32623},[103,70002,70003],{"class":113},"        city: city.value\n",[103,70005,70006],{"class":105,"line":32629},[103,70007,52388],{"class":113},[103,70009,70010],{"class":105,"line":32635},[103,70011,70012],{"class":172},"      \u002F\u002F console.log(obj);\n",[103,70014,70015],{"class":105,"line":32641},[103,70016,70017],{"class":172},"      \u002F\u002F 追加到数组里面\n",[103,70019,70020,70022,70024],{"class":105,"line":32647},[103,70021,57997],{"class":113},[103,70023,51874],{"class":1952},[103,70025,70026],{"class":113},"(obj)\n",[103,70028,70029],{"class":105,"line":32658},[103,70030,70031],{"class":172},"      \u002F\u002F console.log(arr);\n",[103,70033,70034],{"class":105,"line":32664},[103,70035,70036],{"class":172},"      \u002F\u002F 清空表单  reset重置表单\n",[103,70038,70039,70042,70044,70047],{"class":105,"line":32684},[103,70040,70041],{"class":162},"      this",[103,70043,671],{"class":113},[103,70045,70046],{"class":1952},"reset",[103,70048,1965],{"class":113},[103,70050,70051],{"class":105,"line":32690},[103,70052,70053],{"class":172},"      \u002F\u002F 调用渲染函数\n",[103,70055,70056,70059],{"class":105,"line":32701},[103,70057,70058],{"class":1952},"      render",[103,70060,1965],{"class":113},[103,70062,70063],{"class":105,"line":32707},[103,70064,33451],{"class":113},[103,70066,70067],{"class":105,"line":32713},[103,70068,70069],{"class":172},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[103,70071,70072,70075,70078],{"class":105,"line":32719},[103,70073,70074],{"class":109},"    function",[103,70076,70077],{"class":1952}," render",[103,70079,10843],{"class":113},[103,70081,70082],{"class":105,"line":32725},[103,70083,70084],{"class":172},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[103,70086,70087,70090,70092],{"class":105,"line":32731},[103,70088,70089],{"class":113},"      tbody.innerHTML ",[103,70091,159],{"class":109},[103,70093,70094],{"class":218}," ''\n",[103,70096,70097],{"class":105,"line":32737},[103,70098,70099],{"class":172},"      \u002F\u002F 遍历数组\n",[103,70101,70102,70104,70106,70108,70110,70112,70114,70116,70118,70120,70122,70124,70126],{"class":105,"line":32743},[103,70103,52274],{"class":109},[103,70105,1647],{"class":113},[103,70107,51837],{"class":109},[103,70109,9428],{"class":113},[103,70111,159],{"class":109},[103,70113,4082],{"class":162},[103,70115,9435],{"class":113},[103,70117,1023],{"class":109},[103,70119,51955],{"class":113},[103,70121,51958],{"class":162},[103,70123,3203],{"class":113},[103,70125,2281],{"class":109},[103,70127,12432],{"class":113},[103,70129,70130,70132,70135,70137,70139,70142,70144,70147],{"class":105,"line":32763},[103,70131,61260],{"class":109},[103,70133,70134],{"class":162}," tr",[103,70136,13554],{"class":109},[103,70138,54386],{"class":113},[103,70140,70141],{"class":1952},"createElement",[103,70143,114],{"class":113},[103,70145,70146],{"class":218},"'tr'",[103,70148,120],{"class":113},[103,70150,70151,70154,70156],{"class":105,"line":32769},[103,70152,70153],{"class":113},"        tr.innerHTML ",[103,70155,159],{"class":109},[103,70157,70158],{"class":218}," `\n",[103,70160,70161,70164,70166,70168,70170,70173,70176],{"class":105,"line":32785},[103,70162,70163],{"class":218},"        \u003Ctd>${",[103,70165,3869],{"class":113},[103,70167,1003],{"class":218},[103,70169,554],{"class":113},[103,70171,70172],{"class":218},"].",[103,70174,70175],{"class":113},"stuID",[103,70177,70178],{"class":218},"}\u003C\u002Ftd>\n",[103,70180,70181,70184,70186,70188,70190,70192,70195],{"class":105,"line":32791},[103,70182,70183],{"class":218},"          \u003Ctd>${",[103,70185,3869],{"class":113},[103,70187,1003],{"class":218},[103,70189,554],{"class":113},[103,70191,70172],{"class":218},[103,70193,70194],{"class":113},"uname",[103,70196,70178],{"class":218},[103,70198,70199,70201,70203,70205,70207,70209,70212],{"class":105,"line":32805},[103,70200,70183],{"class":218},[103,70202,3869],{"class":113},[103,70204,1003],{"class":218},[103,70206,554],{"class":113},[103,70208,70172],{"class":218},[103,70210,70211],{"class":113},"age",[103,70213,70178],{"class":218},[103,70215,70216,70218,70220,70222,70224,70226,70229],{"class":105,"line":32811},[103,70217,70183],{"class":218},[103,70219,3869],{"class":113},[103,70221,1003],{"class":218},[103,70223,554],{"class":113},[103,70225,70172],{"class":218},[103,70227,70228],{"class":113},"gender",[103,70230,70178],{"class":218},[103,70232,70233,70235,70237,70239,70241,70243,70246],{"class":105,"line":32826},[103,70234,70183],{"class":218},[103,70236,3869],{"class":113},[103,70238,1003],{"class":218},[103,70240,554],{"class":113},[103,70242,70172],{"class":218},[103,70244,70245],{"class":113},"salary",[103,70247,70178],{"class":218},[103,70249,70250,70252,70254,70256,70258,70260,70263],{"class":105,"line":32832},[103,70251,70183],{"class":218},[103,70253,3869],{"class":113},[103,70255,1003],{"class":218},[103,70257,554],{"class":113},[103,70259,70172],{"class":218},[103,70261,70262],{"class":113},"city",[103,70264,70178],{"class":218},[103,70266,70267],{"class":105,"line":32841},[103,70268,69583],{"class":218},[103,70270,70271,70274,70276],{"class":105,"line":32847},[103,70272,70273],{"class":218},"            \u003Ca href=\"javascript:\" data-id=${",[103,70275,554],{"class":113},[103,70277,70278],{"class":218},"}>删除\u003C\u002Fa>\n",[103,70280,70281],{"class":105,"line":32856},[103,70282,70283],{"class":218},"          \u003C\u002Ftd> \n",[103,70285,70286],{"class":105,"line":32862},[103,70287,70288],{"class":218},"          `\n",[103,70290,70291],{"class":105,"line":32868},[103,70292,70293],{"class":172},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[103,70295,70296,70299,70302],{"class":105,"line":32877},[103,70297,70298],{"class":113},"        tbody.",[103,70300,70301],{"class":1952},"appendChild",[103,70303,70304],{"class":113},"(tr)\n",[103,70306,70307],{"class":105,"line":32883},[103,70308,52388],{"class":113},[103,70310,70311],{"class":105,"line":32894},[103,70312,2176],{"class":113},[103,70314,70315],{"class":105,"line":32900},[103,70316,2389],{"emptyLinePlaceholder":30},[103,70318,70319],{"class":105,"line":32919},[103,70320,70321],{"class":172},"    \u002F\u002F 3.删除委托\n",[103,70323,70324],{"class":105,"line":32925},[103,70325,70326],{"class":172},"    \u002F\u002F 3.1 事件委托 tbody\n",[103,70328,70329,70332,70334,70336,70338,70340,70342,70344,70346],{"class":105,"line":32936},[103,70330,70331],{"class":113},"    tbody.",[103,70333,57803],{"class":1952},[103,70335,114],{"class":113},[103,70337,57808],{"class":218},[103,70339,12425],{"class":113},[103,70341,54439],{"class":109},[103,70343,1647],{"class":113},[103,70345,188],{"class":5206},[103,70347,12432],{"class":113},[103,70349,70350,70352,70354,70356,70358],{"class":105,"line":32942},[103,70351,54470],{"class":109},[103,70353,67024],{"class":113},[103,70355,54476],{"class":109},[103,70357,68246],{"class":218},[103,70359,12432],{"class":113},[103,70361,70362],{"class":105,"line":32962},[103,70363,70364],{"class":172},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[103,70366,70367],{"class":105,"line":32978},[103,70368,70369],{"class":172},"        \u002F\u002F console.log(e.target.dataset.id);\n",[103,70371,70372],{"class":105,"line":32984},[103,70373,70374],{"class":172},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[103,70376,70377,70380,70382,70385,70387],{"class":105,"line":32998},[103,70378,70379],{"class":113},"        arr.",[103,70381,58000],{"class":1952},[103,70383,70384],{"class":113},"(e.target.dataset.id, ",[103,70386,331],{"class":162},[103,70388,120],{"class":113},[103,70390,70391],{"class":105,"line":33004},[103,70392,70393],{"class":172},"        \u002F\u002F 重新渲染一次\n",[103,70395,70396,70399],{"class":105,"line":33010},[103,70397,70398],{"class":1952},"        render",[103,70400,1965],{"class":113},[103,70402,70403],{"class":105,"line":33021},[103,70404,52388],{"class":113},[103,70406,70407],{"class":105,"line":33027},[103,70408,33451],{"class":113},[103,70410,70411,70413,70415],{"class":105,"line":33033},[103,70412,52407],{"class":113},[103,70414,51803],{"class":51290},[103,70416,51297],{"class":113},[103,70418,70419],{"class":105,"line":33043},[103,70420,2389],{"emptyLinePlaceholder":30},[103,70422,70423,70425,70427],{"class":105,"line":33049},[103,70424,51775],{"class":113},[103,70426,51790],{"class":51290},[103,70428,51297],{"class":113},[103,70430,70431],{"class":105,"line":33060},[103,70432,2389],{"emptyLinePlaceholder":30},[103,70434,70435,70437,70439],{"class":105,"line":33066},[103,70436,51775],{"class":113},[103,70438,50625],{"class":51290},[103,70440,51297],{"class":113},[14,70442,70443],{},"样式：",[94,70445,70449],{"className":70446,"code":70447,"language":70448,"meta":24,"style":24},"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",[100,70450,70451,70456,70466,70475,70479,70483,70488,70498,70503,70507,70512,70522,70527,70536,70540,70544,70549,70554,70564,70574,70579,70583,70588,70597,70607,70612,70622,70632,70636,70641,70649,70653,70658,70663,70668,70676,70685,70689,70694,70703,70707,70712,70721,70725,70730,70739,70748,70756,70760,70765,70774,70784,70793,70803,70809,70818,70828,70838,70842,70847,70856,70864,70874,70882,70891,70900,70910,70918,70922,70927,70936],{"__ignoreMap":24},[103,70452,70453],{"class":105,"line":106},[103,70454,70455],{"class":113},"* {\n",[103,70457,70458,70461,70463],{"class":105,"line":25},[103,70459,70460],{"class":51290},"  margin",[103,70462,51427],{"class":113},[103,70464,70465],{"class":218},"0;\n",[103,70467,70468,70471,70473],{"class":105,"line":1168},[103,70469,70470],{"class":218},"  padding",[103,70472,51427],{"class":113},[103,70474,70465],{"class":218},[103,70476,70477],{"class":105,"line":1183},[103,70478,1554],{"class":113},[103,70480,70481],{"class":105,"line":1189},[103,70482,2389],{"emptyLinePlaceholder":30},[103,70484,70485],{"class":105,"line":1203},[103,70486,70487],{"class":218},"a {\n",[103,70489,70490,70493,70495],{"class":105,"line":1209},[103,70491,70492],{"class":51290},"  text-decoration",[103,70494,51427],{"class":113},[103,70496,70497],{"class":218},"none;\n",[103,70499,70500],{"class":105,"line":1300},[103,70501,70502],{"class":218},"  color:#721c24;\n",[103,70504,70505],{"class":105,"line":1306},[103,70506,1554],{"class":113},[103,70508,70509],{"class":105,"line":1318},[103,70510,70511],{"class":218},"h1 {\n",[103,70513,70514,70517,70519],{"class":105,"line":1601},[103,70515,70516],{"class":51290},"  text-align",[103,70518,51427],{"class":113},[103,70520,70521],{"class":218},"center;\n",[103,70523,70524],{"class":105,"line":1606},[103,70525,70526],{"class":218},"  color:#333;\n",[103,70528,70529,70531,70533],{"class":105,"line":1612},[103,70530,70460],{"class":51290},[103,70532,51427],{"class":113},[103,70534,70535],{"class":218},"20px 0;\n",[103,70537,70538],{"class":105,"line":1617},[103,70539,2663],{"class":113},[103,70541,70542],{"class":105,"line":1631},[103,70543,1554],{"class":113},[103,70545,70546],{"class":105,"line":1636},[103,70547,70548],{"class":218},"table {\n",[103,70550,70551],{"class":105,"line":1642},[103,70552,70553],{"class":218},"  margin:0 auto;\n",[103,70555,70556,70559,70561],{"class":105,"line":1663},[103,70557,70558],{"class":51290},"  width",[103,70560,51427],{"class":113},[103,70562,70563],{"class":218},"800px;\n",[103,70565,70566,70569,70571],{"class":105,"line":1668},[103,70567,70568],{"class":51290},"  border-collapse",[103,70570,51427],{"class":113},[103,70572,70573],{"class":218},"collapse;\n",[103,70575,70576],{"class":105,"line":1682},[103,70577,70578],{"class":218},"  color:#004085;\n",[103,70580,70581],{"class":105,"line":1687},[103,70582,1554],{"class":113},[103,70584,70585],{"class":105,"line":1716},[103,70586,70587],{"class":218},"th {\n",[103,70589,70590,70592,70594],{"class":105,"line":1721},[103,70591,70470],{"class":51290},[103,70593,51427],{"class":113},[103,70595,70596],{"class":218},"10px;\n",[103,70598,70599,70602,70604],{"class":105,"line":1738},[103,70600,70601],{"class":51290},"  background",[103,70603,51427],{"class":113},[103,70605,70606],{"class":172},"#cfe5ff;\n",[103,70608,70609],{"class":105,"line":1743},[103,70610,70611],{"class":113},"  \n",[103,70613,70614,70617,70619],{"class":105,"line":1748},[103,70615,70616],{"class":51290},"  font-size",[103,70618,51427],{"class":113},[103,70620,70621],{"class":218},"20px;\n",[103,70623,70624,70627,70629],{"class":105,"line":1753},[103,70625,70626],{"class":51290},"  font-weight",[103,70628,51427],{"class":113},[103,70630,70631],{"class":218},"400;\n",[103,70633,70634],{"class":105,"line":1767},[103,70635,1554],{"class":113},[103,70637,70638],{"class":105,"line":1772},[103,70639,70640],{"class":218},"td,th {\n",[103,70642,70643,70646],{"class":105,"line":2566},[103,70644,70645],{"class":218},"  border:1px solid",[103,70647,70648],{"class":172}," #b8daff;\n",[103,70650,70651],{"class":105,"line":2580},[103,70652,1554],{"class":113},[103,70654,70655],{"class":105,"line":2588},[103,70656,70657],{"class":218},"td {\n",[103,70659,70660],{"class":105,"line":2593},[103,70661,70662],{"class":218},"  padding:10px;\n",[103,70664,70665],{"class":105,"line":2599},[103,70666,70667],{"class":218},"  color:#666;\n",[103,70669,70670,70672,70674],{"class":105,"line":2605},[103,70671,70516],{"class":51290},[103,70673,51427],{"class":113},[103,70675,70521],{"class":218},[103,70677,70678,70680,70682],{"class":105,"line":2610},[103,70679,70616],{"class":51290},[103,70681,51427],{"class":113},[103,70683,70684],{"class":218},"16px;\n",[103,70686,70687],{"class":105,"line":7938},[103,70688,1554],{"class":113},[103,70690,70691],{"class":105,"line":7962},[103,70692,70693],{"class":218},"tbody tr {\n",[103,70695,70696,70698,70700],{"class":105,"line":7967},[103,70697,70601],{"class":51290},[103,70699,51427],{"class":113},[103,70701,70702],{"class":172},"#fff;\n",[103,70704,70705],{"class":105,"line":7973},[103,70706,1554],{"class":113},[103,70708,70709],{"class":105,"line":8000},[103,70710,70711],{"class":218},"tbody tr:hover {\n",[103,70713,70714,70716,70718],{"class":105,"line":8005},[103,70715,70601],{"class":51290},[103,70717,51427],{"class":113},[103,70719,70720],{"class":172},"#e1ecf8;\n",[103,70722,70723],{"class":105,"line":8011},[103,70724,1554],{"class":113},[103,70726,70727],{"class":105,"line":8023},[103,70728,70729],{"class":218},".info {\n",[103,70731,70732,70734,70736],{"class":105,"line":8035},[103,70733,70558],{"class":51290},[103,70735,51427],{"class":113},[103,70737,70738],{"class":218},"900px;\n",[103,70740,70741,70743,70745],{"class":105,"line":8047},[103,70742,70460],{"class":51290},[103,70744,51427],{"class":113},[103,70746,70747],{"class":218},"50px auto;\n",[103,70749,70750,70752,70754],{"class":105,"line":9706},[103,70751,70516],{"class":51290},[103,70753,51427],{"class":113},[103,70755,70521],{"class":218},[103,70757,70758],{"class":105,"line":9731},[103,70759,1554],{"class":113},[103,70761,70762],{"class":105,"line":9754},[103,70763,70764],{"class":218},".info  input, .info select {\n",[103,70766,70767,70769,70771],{"class":105,"line":9778},[103,70768,70558],{"class":51290},[103,70770,51427],{"class":113},[103,70772,70773],{"class":218},"80px;\n",[103,70775,70776,70779,70781],{"class":105,"line":9783},[103,70777,70778],{"class":51290},"  height",[103,70780,51427],{"class":113},[103,70782,70783],{"class":218},"27px;\n",[103,70785,70786,70789,70791],{"class":105,"line":9788},[103,70787,70788],{"class":51290},"  outline",[103,70790,51427],{"class":113},[103,70792,70497],{"class":218},[103,70794,70795,70798,70800],{"class":105,"line":9793},[103,70796,70797],{"class":51290},"  border-radius",[103,70799,51427],{"class":113},[103,70801,70802],{"class":218},"5px;\n",[103,70804,70805,70807],{"class":105,"line":9802},[103,70806,70645],{"class":218},[103,70808,70648],{"class":172},[103,70810,70811,70814,70816],{"class":105,"line":9807},[103,70812,70813],{"class":51290},"  padding-left",[103,70815,51427],{"class":113},[103,70817,70802],{"class":218},[103,70819,70820,70823,70825],{"class":105,"line":9813},[103,70821,70822],{"class":51290},"  box-sizing",[103,70824,51427],{"class":113},[103,70826,70827],{"class":218},"border-box;\n",[103,70829,70830,70833,70835],{"class":105,"line":9834},[103,70831,70832],{"class":51290},"  margin-right",[103,70834,51427],{"class":113},[103,70836,70837],{"class":218},"15px;\n",[103,70839,70840],{"class":105,"line":9840},[103,70841,1554],{"class":113},[103,70843,70844],{"class":105,"line":9854},[103,70845,70846],{"class":218},".info button {\n",[103,70848,70849,70851,70853],{"class":105,"line":9860},[103,70850,70558],{"class":51290},[103,70852,51427],{"class":113},[103,70854,70855],{"class":218},"60px;\n",[103,70857,70858,70860,70862],{"class":105,"line":9887},[103,70859,70778],{"class":51290},[103,70861,51427],{"class":113},[103,70863,70783],{"class":218},[103,70865,70866,70869,70871],{"class":105,"line":9896},[103,70867,70868],{"class":51290},"  background-color",[103,70870,51427],{"class":113},[103,70872,70873],{"class":172},"#004085;\n",[103,70875,70876,70878,70880],{"class":105,"line":9902},[103,70877,70788],{"class":51290},[103,70879,51427],{"class":113},[103,70881,70497],{"class":218},[103,70883,70884,70887,70889],{"class":105,"line":9910},[103,70885,70886],{"class":51290},"  border",[103,70888,51427],{"class":113},[103,70890,70465],{"class":218},[103,70892,70893,70896,70898],{"class":105,"line":9915},[103,70894,70895],{"class":51290},"  color",[103,70897,51427],{"class":113},[103,70899,70702],{"class":172},[103,70901,70902,70905,70907],{"class":105,"line":16594},[103,70903,70904],{"class":51290},"  cursor",[103,70906,51427],{"class":113},[103,70908,70909],{"class":218},"pointer;\n",[103,70911,70912,70914,70916],{"class":105,"line":16600},[103,70913,70797],{"class":51290},[103,70915,51427],{"class":113},[103,70917,70802],{"class":218},[103,70919,70920],{"class":105,"line":16623},[103,70921,1554],{"class":113},[103,70923,70924],{"class":105,"line":16629},[103,70925,70926],{"class":218},".info .age {\n",[103,70928,70929,70931,70933],{"class":105,"line":16652},[103,70930,70558],{"class":51290},[103,70932,51427],{"class":113},[103,70934,70935],{"class":218},"50px;\n",[103,70937,70938],{"class":105,"line":16666},[103,70939,1554],{"class":113},[14,70941,70942],{},"思路：",[14,70944,70945],{},[1451,70946],{"alt":24,"src":70947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,70949,70950],{},[1451,70951],{"alt":24,"src":70952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,70954,70955],{},[1451,70956],{"alt":24,"src":70957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[74,70959,70961],{"id":70960},"_3315-重绘回流","3.3.15 重绘回流",[14,70963,70964],{},[1451,70965],{"alt":24,"src":70966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,70968,70969],{},[1451,70970],{"alt":24,"src":70971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,70973,70974],{},[1451,70975],{"alt":24,"src":70976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[45,70978,70980],{"id":70979},"_34-bom","3.4 BOM",[14,70982,70983],{},[1451,70984],{"alt":24,"src":70985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,70987,70988],{},"平时写的document省略了window而已，实际上是window.document",[14,70990,70991],{},"函数也是这样，调用的时候实际为window.fn()",[14,70993,70994],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,70996,70997],{},"window大部分情况下可以省略",[74,70999,71001],{"id":71000},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71003,71004],{},"只执行一次",[14,71006,71007],{},[1451,71008],{"alt":24,"src":71009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71011,71012],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71014,71015],{},[1451,71016],{"alt":24,"src":71017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[74,71019,71021],{"id":71020},"_342-js执行机制","3.4.2 JS执行机制",[14,71023,71024],{},[1451,71025],{"alt":24,"src":71026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71028,71029],{},"两个的结果都是1111 3333 2222",[14,71031,71032],{},[1451,71033],{"alt":24,"src":71034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71036,71037],{},[1451,71038],{"alt":24,"src":71039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71041,71042],{},[1451,71043],{"alt":24,"src":71044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71046,71047],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71049,71050],{},"工作流程：",[14,71052,71053],{},[1451,71054],{"alt":24,"src":71055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71057,71058],{},[1451,71059],{"alt":24,"src":71060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71062,71063],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71065,71066],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[74,71068,71070],{"id":71069},"_343-location对象","3.4.3 location对象",[14,71072,71073],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71075,71076],{},[1451,71077],{"alt":24,"src":71078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71080,71081],{},"href可以跳转页面",[57,71083,71084],{},[60,71085,71086],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71088,71089],{},"search得到提交信息之后网站后边的地址",[14,71091,71092],{},[1451,71093],{"alt":24,"src":71094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71096,71097],{},[1451,71098],{"alt":24,"src":71099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[57,71101,71102],{"start":25},[60,71103,71104],{},"hash:这个获取单页面应用#后边的地址",[14,71106,71107],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71109,71110],{},[1451,71111],{"alt":24,"src":71112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[94,71114,71116],{"className":53057,"code":71115,"language":53059,"meta":24,"style":24},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[100,71117,71118,71138,71158],{"__ignoreMap":24},[103,71119,71120,71122,71124,71126,71128,71131,71134,71136],{"class":105,"line":106},[103,71121,52134],{"class":113},[103,71123,17],{"class":51290},[103,71125,61047],{"class":1952},[103,71127,159],{"class":113},[103,71129,71130],{"class":218},"\"#\u002Fmy\"",[103,71132,71133],{"class":113},">我的\u003C\u002F",[103,71135,17],{"class":51290},[103,71137,51297],{"class":113},[103,71139,71140,71142,71144,71146,71148,71151,71154,71156],{"class":105,"line":25},[103,71141,52134],{"class":113},[103,71143,17],{"class":51290},[103,71145,61047],{"class":1952},[103,71147,159],{"class":113},[103,71149,71150],{"class":218},"\"#\u002Ffriend\"",[103,71152,71153],{"class":113},">关注\u003C\u002F",[103,71155,17],{"class":51290},[103,71157,51297],{"class":113},[103,71159,71160,71162,71164,71166,71168,71171,71174,71176],{"class":105,"line":1168},[103,71161,52134],{"class":113},[103,71163,17],{"class":51290},[103,71165,61047],{"class":1952},[103,71167,159],{"class":113},[103,71169,71170],{"class":218},"\"#\u002Fdownload\"",[103,71172,71173],{"class":113},">下载\u003C\u002F",[103,71175,17],{"class":51290},[103,71177,51297],{"class":113},[14,71179,71180],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[57,71182,71183],{"start":1168},[60,71184,71185,71186,71188,71189,71191],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53706,71187],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53706,71190],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[74,71193,71195],{"id":71194},"_345-navigator对象","3.4.5 navigator对象",[14,71197,71198],{},[1451,71199],{"alt":24,"src":71200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[94,71202,71206],{"className":71203,"code":71204,"language":71205,"meta":24,"style":24},"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",[100,71207,71208,71213,71224,71236,71241,71292,71333,71338,71351,71363,71368],{"__ignoreMap":24},[103,71209,71210],{"class":105,"line":106},[103,71211,71212],{"class":172},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[103,71214,71215,71217,71219,71221],{"class":105,"line":25},[103,71216,340],{"class":109},[103,71218,114],{"class":113},[103,71220,54439],{"class":109},[103,71222,71223],{"class":113}," () { \n",[103,71225,71226,71228,71231,71233],{"class":105,"line":1168},[103,71227,6782],{"class":109},[103,71229,71230],{"class":162}," userAgent",[103,71232,13554],{"class":109},[103,71234,71235],{"class":113}," navigator.userAgent \n",[103,71237,71238],{"class":105,"line":1183},[103,71239,71240],{"class":172},"\u002F\u002F 验证是否为Android或iPhone \n",[103,71242,71243,71245,71248,71250,71253,71256,71258,71260,71263,71265,71268,71272,71274,71276,71278,71281,71283,71285,71287,71289],{"class":105,"line":1189},[103,71244,6782],{"class":109},[103,71246,71247],{"class":162}," android",[103,71249,13554],{"class":109},[103,71251,71252],{"class":113}," userAgent.",[103,71254,71255],{"class":1952},"match",[103,71257,114],{"class":113},[103,71259,697],{"class":218},[103,71261,71262],{"class":47967},"(Android);",[103,71264,1099],{"class":109},[103,71266,71267],{"class":162},"[\\s",[103,71269,71271],{"class":71270},"snhLl","\\\u002F",[103,71273,1053],{"class":162},[103,71275,594],{"class":109},[103,71277,114],{"class":47967},[103,71279,71280],{"class":162},"[\\d.]",[103,71282,594],{"class":109},[103,71284,542],{"class":47967},[103,71286,1099],{"class":109},[103,71288,697],{"class":218},[103,71290,71291],{"class":113},") \n",[103,71293,71294,71296,71299,71301,71303,71305,71307,71309,71312,71315,71318,71320,71322,71325,71327,71329,71331],{"class":105,"line":1203},[103,71295,6782],{"class":109},[103,71297,71298],{"class":162}," iphone",[103,71300,13554],{"class":109},[103,71302,71252],{"class":113},[103,71304,71255],{"class":1952},[103,71306,114],{"class":113},[103,71308,697],{"class":218},[103,71310,71311],{"class":47967},"(iPhone",[103,71313,71314],{"class":162},"\\s",[103,71316,71317],{"class":47967},"OS)",[103,71319,71314],{"class":162},[103,71321,114],{"class":47967},[103,71323,71324],{"class":162},"[\\d_]",[103,71326,594],{"class":109},[103,71328,542],{"class":47967},[103,71330,697],{"class":218},[103,71332,71291],{"class":113},[103,71334,71335],{"class":105,"line":1209},[103,71336,71337],{"class":172},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[103,71339,71340,71342,71345,71348],{"class":105,"line":1300},[103,71341,1520],{"class":109},[103,71343,71344],{"class":113}," (android ",[103,71346,71347],{"class":109},"||",[103,71349,71350],{"class":113}," iphone) { \n",[103,71352,71353,71356,71358,71361],{"class":105,"line":1306},[103,71354,71355],{"class":113},"location.href ",[103,71357,159],{"class":109},[103,71359,71360],{"class":218}," 'http:\u002F\u002Fm.itcast.cn'",[103,71362,2663],{"class":113},[103,71364,71365],{"class":105,"line":1318},[103,71366,71367],{"class":113},"} \n",[103,71369,71370],{"class":105,"line":1601},[103,71371,71372],{"class":113},"})()\n",[74,71374,71376],{"id":71375},"_346-histroy对象","3.4.6 histroy对象",[14,71378,71379],{},[1451,71380],{"alt":24,"src":71381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71383,71384],{},"浏览器地址的前进与后退!!!",[14,71386,71387],{},"history.back() 等效于 history.go(-1)",[14,71389,71390],{},"history.forward() 等效于 history.go(1)",[45,71392,71394],{"id":71393},"_35-本地存储","3.5 本地存储",[57,71396,71397,71400,71403],{},[60,71398,71399],{},"数据存储在用户浏览器中",[60,71401,71402],{},"设置、读取方便、甚至页面刷新不丢失数据",[60,71404,71405],{},"容量较大，sessionStorage和localStorage约 5M 左右",[74,71407,71409],{"id":71408},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71411,71412],{},"只能存储字符串",[14,71414,71415],{},[1451,71416],{"alt":24,"src":71417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71419,71420],{},[1451,71421],{"alt":24,"src":71422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71424,71425],{},"键值对要加引号,不然就会当变量来看了",[14,71427,71428],{},"localStorage.setItem('uname', 'pink')",[14,71430,71431],{},"刷新之后信息不再丢失",[14,71433,71434],{},"操作key,value会跟着变",[14,71436,71437],{},"删除只删除键就可以,即名字",[14,71439,71428],{},[14,71441,71442],{},"改:",[14,71444,71445],{},"localStorage.setItem('uname','red')",[14,71447,71448],{},"有这个键就是改,没有这个键就是改",[14,71450,71451],{},[1451,71452],{"alt":24,"src":71453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71455,71456],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71458,71459],{},[1451,71460],{"alt":24,"src":71461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71463,71464],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[74,71466,71468],{"id":71467},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71470,71471],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71473,71474],{},"特性:",[57,71476,71477,71480,71483,71486],{},[60,71478,71479],{},"生命周期为关闭浏览器窗口",[60,71481,71482],{},"在同一个窗口(页面)下数据可以共享",[60,71484,71485],{},"以键值对的形式存储使用",[60,71487,71488],{},"用法跟localStorage 基本相同",[74,71490,71492],{"id":71491},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71494,71495],{},"本地只能存储字符串,无法直接存储复杂数据类型",[94,71497,71499],{"className":53057,"code":71498,"language":53059,"meta":24,"style":24},"\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",[100,71500,71501,71509,71514,71519,71524,71529,71533,71538,71543],{"__ignoreMap":24},[103,71502,71503,71505,71507],{"class":105,"line":106},[103,71504,1023],{"class":113},[103,71506,51803],{"class":51290},[103,71508,51297],{"class":113},[103,71510,71511],{"class":105,"line":25},[103,71512,71513],{"class":113},"    const obj = {\n",[103,71515,71516],{"class":105,"line":1168},[103,71517,71518],{"class":113},"      uname: 'pink老师',\n",[103,71520,71521],{"class":105,"line":1183},[103,71522,71523],{"class":113},"      age: 18,\n",[103,71525,71526],{"class":105,"line":1189},[103,71527,71528],{"class":113},"      gender: '女'\n",[103,71530,71531],{"class":105,"line":1203},[103,71532,2176],{"class":113},[103,71534,71535],{"class":105,"line":1209},[103,71536,71537],{"class":113},"    \u002F\u002F 存储复杂数据类型\n",[103,71539,71540],{"class":105,"line":1300},[103,71541,71542],{"class":113},"    localStorage.setItem('obj', obj)\n",[103,71544,71545,71547,71549],{"class":105,"line":1306},[103,71546,52407],{"class":113},[103,71548,51803],{"class":51290},[103,71550,51297],{"class":113},[14,71552,71553],{},[1451,71554],{"alt":24,"src":71555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71557,71558],{},"如果获取一下数据:",[14,71560,71561],{},"log(localStorage.getItem('obj'))",[14,71563,71564],{},[1451,71565],{"alt":24,"src":71566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71568,71569],{},"发现直接存对象是使用不了的!!!",[21988,71571,71573],{"id":71572},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71575,71576],{},[1451,71577],{"alt":24,"src":71578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[94,71580,71582],{"className":50623,"code":71581,"language":50625,"meta":24,"style":24},"\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",[100,71583,71584,71592,71602,71612,71621,71629,71633,71637,71663,71682,71690,71694,71699,71704],{"__ignoreMap":24},[103,71585,71586,71588,71590],{"class":105,"line":106},[103,71587,1023],{"class":113},[103,71589,51803],{"class":51290},[103,71591,51297],{"class":113},[103,71593,71594,71596,71598,71600],{"class":105,"line":25},[103,71595,11211],{"class":109},[103,71597,69961],{"class":162},[103,71599,13554],{"class":109},[103,71601,15562],{"class":113},[103,71603,71604,71607,71610],{"class":105,"line":1168},[103,71605,71606],{"class":113},"      uname: ",[103,71608,71609],{"class":218},"'pink老师'",[103,71611,31456],{"class":113},[103,71613,71614,71617,71619],{"class":105,"line":1183},[103,71615,71616],{"class":113},"      age: ",[103,71618,763],{"class":162},[103,71620,31456],{"class":113},[103,71622,71623,71626],{"class":105,"line":1189},[103,71624,71625],{"class":113},"      gender: ",[103,71627,71628],{"class":218},"'女'\n",[103,71630,71631],{"class":105,"line":1203},[103,71632,2176],{"class":113},[103,71634,71635],{"class":105,"line":1209},[103,71636,71537],{"class":172},[103,71638,71639,71642,71645,71647,71650,71652,71655,71657,71660],{"class":105,"line":1300},[103,71640,71641],{"class":113},"  localStorage.",[103,71643,71644],{"class":1952},"setItem",[103,71646,114],{"class":113},[103,71648,71649],{"class":218},"'obj'",[103,71651,12425],{"class":113},[103,71653,71654],{"class":162},"JSON",[103,71656,671],{"class":113},[103,71658,71659],{"class":1952},"stringify",[103,71661,71662],{"class":113},"(obj))\n",[103,71664,71665,71668,71670,71673,71676,71678,71680],{"class":105,"line":1306},[103,71666,71667],{"class":113},"  console.",[103,71669,58237],{"class":1952},[103,71671,71672],{"class":113},"(localStorage.",[103,71674,71675],{"class":1952},"getItem",[103,71677,114],{"class":113},[103,71679,71649],{"class":218},[103,71681,30487],{"class":113},[103,71683,71684,71686,71688],{"class":105,"line":1318},[103,71685,52407],{"class":113},[103,71687,51803],{"class":51290},[103,71689,51297],{"class":113},[103,71691,71692],{"class":105,"line":1601},[103,71693,70611],{"class":113},[103,71695,71696],{"class":105,"line":1606},[103,71697,71698],{"class":113},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[103,71700,71701],{"class":105,"line":1612},[103,71702,71703],{"class":113},"  类型是字符串的\n",[103,71705,71706],{"class":105,"line":1617},[103,71707,71708],{"class":113},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21988,71710,71712],{"id":71711},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71714,71715],{},[1451,71716],{"alt":24,"src":71717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71719,71720],{},[1451,71721],{"alt":24,"src":71722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[94,71724,71726],{"className":53057,"code":71725,"language":53059,"meta":24,"style":24},"  \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",[100,71727,71728,71736,71740,71744,71748,71752,71756,71761,71766,71771,71776,71781,71786,71791,71796],{"__ignoreMap":24},[103,71729,71730,71732,71734],{"class":105,"line":106},[103,71731,52134],{"class":113},[103,71733,51803],{"class":51290},[103,71735,51297],{"class":113},[103,71737,71738],{"class":105,"line":25},[103,71739,71513],{"class":113},[103,71741,71742],{"class":105,"line":1168},[103,71743,71518],{"class":113},[103,71745,71746],{"class":105,"line":1183},[103,71747,71523],{"class":113},[103,71749,71750],{"class":105,"line":1189},[103,71751,71528],{"class":113},[103,71753,71754],{"class":105,"line":1203},[103,71755,2176],{"class":113},[103,71757,71758],{"class":105,"line":1209},[103,71759,71760],{"class":113},"    \u002F\u002F 1.存储复杂数据类型\n",[103,71762,71763],{"class":105,"line":1300},[103,71764,71765],{"class":113},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[103,71767,71768],{"class":105,"line":1306},[103,71769,71770],{"class":113},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[103,71772,71773],{"class":105,"line":1318},[103,71774,71775],{"class":113},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[103,71777,71778],{"class":105,"line":1601},[103,71779,71780],{"class":113},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[103,71782,71783],{"class":105,"line":1606},[103,71784,71785],{"class":113},"    \u002F\u002F 取\n",[103,71787,71788],{"class":105,"line":1612},[103,71789,71790],{"class":113},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[103,71792,71793],{"class":105,"line":1617},[103,71794,71795],{"class":113},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[103,71797,71798,71800,71802],{"class":105,"line":1631},[103,71799,52407],{"class":113},[103,71801,51803],{"class":51290},[103,71803,51297],{"class":113},[14,71805,71806],{},[1451,71807],{"alt":24,"src":71808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[74,71810,71812],{"id":71811},"_356-数组map方法","3.5.6 数组map方法",[14,71814,71815],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71817,71818],{},[1451,71819],{"alt":24,"src":71820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71822,71823],{},[1451,71824],{"alt":24,"src":71825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71827,71828,71831],{},[263,71829,71830],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71833,71834],{},"map有返回值，但是forEach没有返回值",[14,71836,71837],{},"map是个方法。用的时候要加 ()",[14,71839,71840],{},"map返回的是一个数组",[74,71842,71844],{"id":71843},"_357-数组中join方法","3.5.7 数组中join方法",[14,71846,71847],{},[1451,71848],{"alt":24,"src":71849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71851,71852],{},"类似于python中拼接字符串一样！",[57,71854,71855,71858,71861],{},[60,71856,71857],{},"小括号为空则逗号分开",[60,71859,71860],{},"小括号为空字符串 ''，则元素之间没有分隔符",[60,71862,71863],{},"小括号用啥符号就用进行分割",[74,71865,71867],{"id":71866},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[57,71869,71870,71873,71876,71879,71882],{},[60,71871,71872],{},"记住本地时间获取快速方式：new Date().toDateString()",[60,71874,71875],{},"尽量减少DOM操作，用好map+join的渲染方式",[60,71877,71878],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[60,71880,71881],{},"return可以实现函数的结束",[60,71883,71884],{},"禁止跳转是 preventDefault() 不要忘记",[94,71886,71888],{"className":50623,"code":71887,"language":50625,"meta":24,"style":24},"\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",[100,71889,71890,71900,71914,71918,71926,71940,71960,71972,71980,71986,71996,72006,72010,72014,72020,72030,72042,72046,72050,72057,72069,72083,72093,72097,72101,72108,72115,72122,72134,72146,72156,72168,72172,72176,72183,72190,72202,72214,72224,72236,72266,72270,72274,72281,72293,72305,72329,72339,72349,72353,72357,72365,72376,72388,72400,72412,72429,72441,72453,72457,72461,72468,72480,72492,72504,72515,72533,72546,72558,72582,72593,72597,72601,72609,72619,72623,72627,72633,72645,72656,72666,72670,72674,72680,72702,72706,72710,72716,72722,72734,72744,72756,72786,72799,72816,72820,72824,72835,72857,72867,72871,72875,72888,72898,72910,72922,72934,72946,72956,72966,72976,72987,73000,73004,73012,73020,73024,73032,73045,73065,73098,73131,73164,73190,73208,73226,73234,73260,73278,73296,73314,73332,73350,73358,73366,73384,73392,73421,73429,73437,73445,73458,73470,73482,73494,73506,73518,73531,73543,73551,73559,73567,73572,73577,73581,73585,73589,73593,73597,73601,73606,73611,73616,73621,73629,73637,73645,73650,73655,73660,73665,73670,73675,73680,73685,73690,73695,73700,73705,73710,73715,73719,73724,73729,73739,73748,73752,73757,73766,73782,73824,73864,73903,73968,73976,73980,73985,74003,74011,74016,74021,74051,74057,74062,74075,74087,74099,74111,74123,74135,74147,74151,74161,74165,74170,74175,74179,74188,74192,74197,74202,74221,74226,74246,74250,74255,74259,74264,74282,74300,74318,74337,74356,74375,74380,74386,74407,74413,74422,74428,74434,74440,74467,74480,74485,74495,74501,74507,74513,74519,74524,74530,74536,74542,74548,74581,74586,74591,74596,74601,74607,74613,74619,74630,74635,74641,74648,74662,74668,74692,74697,74702,74708,74714,74735,74741,74754,74760,74766,74772,74778,74783,74789,74795,74801,74819,74833,74839,74847,74853,74875,74880,74885,74890,74895,74900,74909,74918,74923],{"__ignoreMap":24},[103,71891,71892,71894,71896,71898],{"class":105,"line":106},[103,71893,51287],{"class":113},[103,71895,51291],{"class":51290},[103,71897,51294],{"class":1952},[103,71899,51297],{"class":113},[103,71901,71902,71904,71906,71908,71910,71912],{"class":105,"line":25},[103,71903,1023],{"class":113},[103,71905,50625],{"class":51290},[103,71907,51306],{"class":1952},[103,71909,159],{"class":113},[103,71911,51311],{"class":218},[103,71913,51297],{"class":113},[103,71915,71916],{"class":105,"line":1168},[103,71917,2389],{"emptyLinePlaceholder":30},[103,71919,71920,71922,71924],{"class":105,"line":1183},[103,71921,1023],{"class":113},[103,71923,51324],{"class":51290},[103,71925,51297],{"class":113},[103,71927,71928,71930,71932,71934,71936,71938],{"class":105,"line":1189},[103,71929,52134],{"class":113},[103,71931,51334],{"class":51290},[103,71933,51337],{"class":1952},[103,71935,159],{"class":113},[103,71937,51342],{"class":218},[103,71939,51297],{"class":113},[103,71941,71942,71944,71946,71948,71950,71952,71954,71956,71958],{"class":105,"line":1203},[103,71943,52134],{"class":113},[103,71945,51334],{"class":51290},[103,71947,14910],{"class":1952},[103,71949,159],{"class":113},[103,71951,51381],{"class":218},[103,71953,51361],{"class":1952},[103,71955,159],{"class":113},[103,71957,51388],{"class":218},[103,71959,51297],{"class":113},[103,71961,71962,71964,71966,71968,71970],{"class":105,"line":1209},[103,71963,52134],{"class":113},[103,71965,51397],{"class":51290},[103,71967,51400],{"class":113},[103,71969,51397],{"class":51290},[103,71971,51297],{"class":113},[103,71973,71974,71976,71978],{"class":105,"line":1300},[103,71975,52134],{"class":113},[103,71977,5116],{"class":51290},[103,71979,51297],{"class":113},[103,71981,71982,71984],{"class":105,"line":1306},[103,71983,6393],{"class":51290},[103,71985,15562],{"class":113},[103,71987,71988,71990,71992,71994],{"class":105,"line":1318},[103,71989,54685],{"class":162},[103,71991,51427],{"class":113},[103,71993,305],{"class":162},[103,71995,1279],{"class":113},[103,71997,71998,72000,72002,72004],{"class":105,"line":1601},[103,71999,54696],{"class":162},[103,72001,51427],{"class":113},[103,72003,305],{"class":162},[103,72005,1279],{"class":113},[103,72007,72008],{"class":105,"line":1606},[103,72009,2176],{"class":113},[103,72011,72012],{"class":105,"line":1612},[103,72013,2389],{"emptyLinePlaceholder":30},[103,72015,72016,72018],{"class":105,"line":1617},[103,72017,57269],{"class":51290},[103,72019,15562],{"class":113},[103,72021,72022,72024,72026,72028],{"class":105,"line":1631},[103,72023,57276],{"class":162},[103,72025,51427],{"class":113},[103,72027,51582],{"class":162},[103,72029,1279],{"class":113},[103,72031,72032,72034,72036,72038,72040],{"class":105,"line":1636},[103,72033,62067],{"class":162},[103,72035,51427],{"class":113},[103,72037,813],{"class":162},[103,72039,51482],{"class":109},[103,72041,1279],{"class":113},[103,72043,72044],{"class":105,"line":1642},[103,72045,2176],{"class":113},[103,72047,72048],{"class":105,"line":1663},[103,72049,2389],{"emptyLinePlaceholder":30},[103,72051,72052,72055],{"class":105,"line":1668},[103,72053,72054],{"class":1952},"    .info",[103,72056,15562],{"class":113},[103,72058,72059,72061,72063,72065,72067],{"class":105,"line":1682},[103,72060,54761],{"class":162},[103,72062,51427],{"class":113},[103,72064,51479],{"class":162},[103,72066,51482],{"class":109},[103,72068,1279],{"class":113},[103,72070,72071,72073,72075,72077,72079,72081],{"class":105,"line":1687},[103,72072,54696],{"class":162},[103,72074,51427],{"class":113},[103,72076,559],{"class":162},[103,72078,51482],{"class":109},[103,72080,51546],{"class":162},[103,72082,1279],{"class":113},[103,72084,72085,72087,72089,72091],{"class":105,"line":1716},[103,72086,57276],{"class":162},[103,72088,51427],{"class":113},[103,72090,51582],{"class":162},[103,72092,1279],{"class":113},[103,72094,72095],{"class":105,"line":1721},[103,72096,2176],{"class":113},[103,72098,72099],{"class":105,"line":1738},[103,72100,2389],{"emptyLinePlaceholder":30},[103,72102,72103,72106],{"class":105,"line":1743},[103,72104,72105],{"class":1952},"    .uname",[103,72107,31456],{"class":113},[103,72109,72110,72113],{"class":105,"line":1748},[103,72111,72112],{"class":1952},"    .age",[103,72114,31456],{"class":113},[103,72116,72117,72120],{"class":105,"line":1753},[103,72118,72119],{"class":1952},"    .salary",[103,72121,15562],{"class":113},[103,72123,72124,72126,72128,72130,72132],{"class":105,"line":1767},[103,72125,54761],{"class":162},[103,72127,51427],{"class":113},[103,72129,424],{"class":162},[103,72131,51482],{"class":109},[103,72133,1279],{"class":113},[103,72135,72136,72138,72140,72142,72144],{"class":105,"line":1772},[103,72137,54775],{"class":162},[103,72139,51427],{"class":113},[103,72141,813],{"class":162},[103,72143,51482],{"class":109},[103,72145,1279],{"class":113},[103,72147,72148,72150,72152,72154],{"class":105,"line":2566},[103,72149,61770],{"class":162},[103,72151,51427],{"class":113},[103,72153,54727],{"class":162},[103,72155,1279],{"class":113},[103,72157,72158,72160,72162,72164,72166],{"class":105,"line":2580},[103,72159,61740],{"class":162},[103,72161,51427],{"class":113},[103,72163,688],{"class":162},[103,72165,51482],{"class":109},[103,72167,1279],{"class":113},[103,72169,72170],{"class":105,"line":2588},[103,72171,2176],{"class":113},[103,72173,72174],{"class":105,"line":2593},[103,72175,2389],{"emptyLinePlaceholder":30},[103,72177,72178,72181],{"class":105,"line":2599},[103,72179,72180],{"class":1952},"    .gender",[103,72182,31456],{"class":113},[103,72184,72185,72188],{"class":105,"line":2605},[103,72186,72187],{"class":1952},"    .city",[103,72189,15562],{"class":113},[103,72191,72192,72194,72196,72198,72200],{"class":105,"line":2610},[103,72193,54761],{"class":162},[103,72195,51427],{"class":113},[103,72197,424],{"class":162},[103,72199,51482],{"class":109},[103,72201,1279],{"class":113},[103,72203,72204,72206,72208,72210,72212],{"class":105,"line":7938},[103,72205,54775],{"class":162},[103,72207,51427],{"class":113},[103,72209,938],{"class":162},[103,72211,51482],{"class":109},[103,72213,1279],{"class":113},[103,72215,72216,72218,72220,72222],{"class":105,"line":7962},[103,72217,61770],{"class":162},[103,72219,51427],{"class":113},[103,72221,54727],{"class":162},[103,72223,1279],{"class":113},[103,72225,72226,72228,72230,72232,72234],{"class":105,"line":7967},[103,72227,61740],{"class":162},[103,72229,51427],{"class":113},[103,72231,688],{"class":162},[103,72233,51482],{"class":109},[103,72235,1279],{"class":113},[103,72237,72238,72240,72242,72244,72246,72248,72251,72253,72255,72257,72260,72262,72264],{"class":105,"line":7973},[103,72239,61967],{"class":162},[103,72241,51427],{"class":113},[103,72243,331],{"class":162},[103,72245,51482],{"class":109},[103,72247,51511],{"class":162},[103,72249,72250],{"class":162}," rgb",[103,72252,114],{"class":113},[103,72254,1711],{"class":162},[103,72256,12425],{"class":113},[103,72258,72259],{"class":162},"197",[103,72261,12425],{"class":113},[103,72263,72259],{"class":162},[103,72265,2708],{"class":113},[103,72267,72268],{"class":105,"line":8000},[103,72269,2176],{"class":113},[103,72271,72272],{"class":105,"line":8005},[103,72273,2389],{"emptyLinePlaceholder":30},[103,72275,72276,72279],{"class":105,"line":8011},[103,72277,72278],{"class":51290},"    button",[103,72280,15562],{"class":113},[103,72282,72283,72285,72287,72289,72291],{"class":105,"line":8023},[103,72284,54775],{"class":162},[103,72286,51427],{"class":113},[103,72288,938],{"class":162},[103,72290,51482],{"class":109},[103,72292,1279],{"class":113},[103,72294,72295,72297,72299,72301,72303],{"class":105,"line":8035},[103,72296,54761],{"class":162},[103,72298,51427],{"class":113},[103,72300,597],{"class":162},[103,72302,51482],{"class":109},[103,72304,1279],{"class":113},[103,72306,72307,72309,72311,72314,72316,72318,72320,72323,72325,72327],{"class":105,"line":8047},[103,72308,54874],{"class":162},[103,72310,51427],{"class":113},[103,72312,72313],{"class":162},"rgb",[103,72315,114],{"class":113},[103,72317,1082],{"class":162},[103,72319,12425],{"class":113},[103,72321,72322],{"class":162},"187",[103,72324,12425],{"class":113},[103,72326,412],{"class":162},[103,72328,2708],{"class":113},[103,72330,72331,72333,72335,72337],{"class":105,"line":9706},[103,72332,57406],{"class":162},[103,72334,51427],{"class":113},[103,72336,60832],{"class":162},[103,72338,1279],{"class":113},[103,72340,72341,72343,72345,72347],{"class":105,"line":9731},[103,72342,61967],{"class":162},[103,72344,51427],{"class":113},[103,72346,305],{"class":162},[103,72348,1279],{"class":113},[103,72350,72351],{"class":105,"line":9754},[103,72352,2176],{"class":113},[103,72354,72355],{"class":105,"line":9778},[103,72356,2389],{"emptyLinePlaceholder":30},[103,72358,72359,72361,72363],{"class":105,"line":9783},[103,72360,72278],{"class":51290},[103,72362,51678],{"class":51290},[103,72364,15562],{"class":113},[103,72366,72367,72369,72371,72374],{"class":105,"line":9788},[103,72368,54999],{"class":162},[103,72370,51427],{"class":113},[103,72372,72373],{"class":162},"inline-block",[103,72375,1279],{"class":113},[103,72377,72378,72380,72382,72384,72386],{"class":105,"line":9793},[103,72379,54761],{"class":162},[103,72381,51427],{"class":113},[103,72383,559],{"class":162},[103,72385,51482],{"class":109},[103,72387,1279],{"class":113},[103,72389,72390,72392,72394,72396,72398],{"class":105,"line":9802},[103,72391,54775],{"class":162},[103,72393,51427],{"class":113},[103,72395,559],{"class":162},[103,72397,51482],{"class":109},[103,72399,1279],{"class":113},[103,72401,72402,72404,72406,72408,72410],{"class":105,"line":9807},[103,72403,57349],{"class":162},[103,72405,51427],{"class":113},[103,72407,585],{"class":162},[103,72409,51482],{"class":109},[103,72411,1279],{"class":113},[103,72413,72414,72416,72418,72420,72422,72424,72427],{"class":105,"line":9813},[103,72415,61967],{"class":162},[103,72417,51427],{"class":113},[103,72419,331],{"class":162},[103,72421,51482],{"class":109},[103,72423,51511],{"class":162},[103,72425,72426],{"class":162}," #fff",[103,72428,1279],{"class":113},[103,72430,72431,72433,72435,72437,72439],{"class":105,"line":9834},[103,72432,55124],{"class":162},[103,72434,51427],{"class":113},[103,72436,432],{"class":162},[103,72438,51482],{"class":109},[103,72440,1279],{"class":113},[103,72442,72443,72445,72447,72449,72451],{"class":105,"line":9840},[103,72444,61740],{"class":162},[103,72446,51427],{"class":113},[103,72448,331],{"class":162},[103,72450,51482],{"class":109},[103,72452,1279],{"class":113},[103,72454,72455],{"class":105,"line":9854},[103,72456,2176],{"class":113},[103,72458,72459],{"class":105,"line":9860},[103,72460,2389],{"emptyLinePlaceholder":30},[103,72462,72463,72466],{"class":105,"line":9887},[103,72464,72465],{"class":1952},"    .total",[103,72467,15562],{"class":113},[103,72469,72470,72472,72474,72476,72478],{"class":105,"line":9896},[103,72471,54761],{"class":162},[103,72473,51427],{"class":113},[103,72475,61619],{"class":162},[103,72477,51482],{"class":109},[103,72479,1279],{"class":113},[103,72481,72482,72484,72486,72488,72490],{"class":105,"line":9902},[103,72483,54775],{"class":162},[103,72485,51427],{"class":113},[103,72487,514],{"class":162},[103,72489,51482],{"class":109},[103,72491,1279],{"class":113},[103,72493,72494,72496,72498,72500,72502],{"class":105,"line":9910},[103,72495,57349],{"class":162},[103,72497,51427],{"class":113},[103,72499,514],{"class":162},[103,72501,51482],{"class":109},[103,72503,1279],{"class":113},[103,72505,72506,72508,72510,72513],{"class":105,"line":9915},[103,72507,57276],{"class":162},[103,72509,51427],{"class":113},[103,72511,72512],{"class":162},"right",[103,72514,1279],{"class":113},[103,72516,72517,72519,72521,72523,72525,72527,72529,72531],{"class":105,"line":16594},[103,72518,54696],{"class":162},[103,72520,51427],{"class":113},[103,72522,514],{"class":162},[103,72524,51482],{"class":109},[103,72526,51546],{"class":162},[103,72528,2027],{"class":162},[103,72530,51482],{"class":109},[103,72532,1279],{"class":113},[103,72534,72535,72538,72540,72542,72544],{"class":105,"line":16600},[103,72536,72537],{"class":162},"      padding-right",[103,72539,51427],{"class":113},[103,72541,559],{"class":162},[103,72543,51482],{"class":109},[103,72545,1279],{"class":113},[103,72547,72548,72550,72552,72554,72556],{"class":105,"line":16623},[103,72549,54912],{"class":162},[103,72551,51427],{"class":113},[103,72553,636],{"class":162},[103,72555,51482],{"class":109},[103,72557,1279],{"class":113},[103,72559,72560,72562,72564,72566,72568,72571,72573,72576,72578,72580],{"class":105,"line":16629},[103,72561,54874],{"class":162},[103,72563,51427],{"class":113},[103,72565,72313],{"class":162},[103,72567,114],{"class":113},[103,72569,72570],{"class":162},"237",[103,72572,12425],{"class":113},[103,72574,72575],{"class":162},"235",[103,72577,12425],{"class":113},[103,72579,72575],{"class":162},[103,72581,2708],{"class":113},[103,72583,72584,72587,72589,72591],{"class":105,"line":16652},[103,72585,72586],{"class":162},"      box-sizing",[103,72588,51427],{"class":113},[103,72590,60495],{"class":162},[103,72592,1279],{"class":113},[103,72594,72595],{"class":105,"line":16666},[103,72596,2176],{"class":113},[103,72598,72599],{"class":105,"line":16686},[103,72600,2389],{"emptyLinePlaceholder":30},[103,72602,72603,72605,72607],{"class":105,"line":16692},[103,72604,72465],{"class":1952},[103,72606,51678],{"class":51290},[103,72608,15562],{"class":113},[103,72610,72611,72613,72615,72617],{"class":105,"line":16703},[103,72612,57406],{"class":162},[103,72614,51427],{"class":113},[103,72616,57411],{"class":162},[103,72618,1279],{"class":113},[103,72620,72621],{"class":105,"line":16726},[103,72622,2176],{"class":113},[103,72624,72625],{"class":105,"line":16748},[103,72626,2389],{"emptyLinePlaceholder":30},[103,72628,72629,72631],{"class":105,"line":16753},[103,72630,65013],{"class":51290},[103,72632,15562],{"class":113},[103,72634,72635,72637,72639,72641,72643],{"class":105,"line":16759},[103,72636,54761],{"class":162},[103,72638,51427],{"class":113},[103,72640,61619],{"class":162},[103,72642,51482],{"class":109},[103,72644,1279],{"class":113},[103,72646,72647,72649,72651,72654],{"class":105,"line":16773},[103,72648,54696],{"class":162},[103,72650,51427],{"class":113},[103,72652,72653],{"class":162},"auto",[103,72655,1279],{"class":113},[103,72657,72658,72660,72662,72664],{"class":105,"line":16786},[103,72659,65020],{"class":162},[103,72661,51427],{"class":113},[103,72663,65025],{"class":162},[103,72665,1279],{"class":113},[103,72667,72668],{"class":105,"line":16791},[103,72669,2176],{"class":113},[103,72671,72672],{"class":105,"line":16805},[103,72673,2389],{"emptyLinePlaceholder":30},[103,72675,72676,72678],{"class":105,"line":16810},[103,72677,65105],{"class":51290},[103,72679,15562],{"class":113},[103,72681,72682,72684,72686,72688,72690,72692,72694,72696,72698,72700],{"class":105,"line":16816},[103,72683,54874],{"class":162},[103,72685,51427],{"class":113},[103,72687,72313],{"class":162},[103,72689,114],{"class":113},[103,72691,72570],{"class":162},[103,72693,12425],{"class":113},[103,72695,72575],{"class":162},[103,72697,12425],{"class":113},[103,72699,72575],{"class":162},[103,72701,2708],{"class":113},[103,72703,72704],{"class":105,"line":16821},[103,72705,2176],{"class":113},[103,72707,72708],{"class":105,"line":16835},[103,72709,2389],{"emptyLinePlaceholder":30},[103,72711,72712,72714],{"class":105,"line":16840},[103,72713,65105],{"class":51290},[103,72715,31456],{"class":113},[103,72717,72718,72720],{"class":105,"line":16845},[103,72719,65171],{"class":51290},[103,72721,15562],{"class":113},[103,72723,72724,72726,72728,72730,72732],{"class":105,"line":16859},[103,72725,54775],{"class":162},[103,72727,51427],{"class":113},[103,72729,386],{"class":162},[103,72731,51482],{"class":109},[103,72733,1279],{"class":113},[103,72735,72736,72738,72740,72742],{"class":105,"line":16871},[103,72737,57276],{"class":162},[103,72739,51427],{"class":113},[103,72741,23726],{"class":162},[103,72743,1279],{"class":113},[103,72745,72746,72748,72750,72752,72754],{"class":105,"line":16876},[103,72747,54912],{"class":162},[103,72749,51427],{"class":113},[103,72751,662],{"class":162},[103,72753,51482],{"class":109},[103,72755,1279],{"class":113},[103,72757,72758,72760,72762,72764,72766,72768,72770,72772,72775,72777,72780,72782,72784],{"class":105,"line":16889},[103,72759,61967],{"class":162},[103,72761,51427],{"class":113},[103,72763,331],{"class":162},[103,72765,51482],{"class":109},[103,72767,51511],{"class":162},[103,72769,72250],{"class":162},[103,72771,114],{"class":113},[103,72773,72774],{"class":162},"228",[103,72776,12425],{"class":113},[103,72778,72779],{"class":162},"225",[103,72781,12425],{"class":113},[103,72783,72779],{"class":162},[103,72785,2708],{"class":113},[103,72787,72788,72791,72793,72795,72797],{"class":105,"line":16894},[103,72789,72790],{"class":162},"      padding-left",[103,72792,51427],{"class":113},[103,72794,432],{"class":162},[103,72796,51482],{"class":109},[103,72798,1279],{"class":113},[103,72800,72801,72803,72805,72807,72810,72812,72814],{"class":105,"line":16899},[103,72802,61850],{"class":162},[103,72804,51427],{"class":113},[103,72806,28111],{"class":162},[103,72808,72809],{"class":162}," linear",[103,72811,61857],{"class":162},[103,72813,808],{"class":109},[103,72815,1279],{"class":113},[103,72817,72818],{"class":105,"line":16904},[103,72819,2176],{"class":113},[103,72821,72822],{"class":105,"line":16917},[103,72823,2389],{"emptyLinePlaceholder":30},[103,72825,72826,72829,72831,72833],{"class":105,"line":16922},[103,72827,72828],{"class":51290},"    tbody",[103,72830,70134],{"class":51290},[103,72832,60930],{"class":1952},[103,72834,15562],{"class":113},[103,72836,72837,72839,72841,72843,72845,72847,72849,72851,72853,72855],{"class":105,"line":32623},[103,72838,54874],{"class":162},[103,72840,51427],{"class":113},[103,72842,72313],{"class":162},[103,72844,114],{"class":113},[103,72846,72570],{"class":162},[103,72848,12425],{"class":113},[103,72850,72575],{"class":162},[103,72852,12425],{"class":113},[103,72854,72575],{"class":162},[103,72856,2708],{"class":113},[103,72858,72859,72861,72863,72865],{"class":105,"line":32629},[103,72860,62015],{"class":162},[103,72862,51427],{"class":113},[103,72864,62020],{"class":162},[103,72866,1279],{"class":113},[103,72868,72869],{"class":105,"line":32635},[103,72870,2176],{"class":113},[103,72872,72873],{"class":105,"line":32641},[103,72874,2389],{"emptyLinePlaceholder":30},[103,72876,72877,72879,72881,72884,72886],{"class":105,"line":32647},[103,72878,72828],{"class":51290},[103,72880,70134],{"class":51290},[103,72882,72883],{"class":51290}," td",[103,72885,1387],{"class":51290},[103,72887,15562],{"class":113},[103,72889,72890,72892,72894,72896],{"class":105,"line":32658},[103,72891,54999],{"class":162},[103,72893,51427],{"class":113},[103,72895,60859],{"class":162},[103,72897,1279],{"class":113},[103,72899,72900,72902,72904,72906,72908],{"class":105,"line":32664},[103,72901,54761],{"class":162},[103,72903,51427],{"class":113},[103,72905,1020],{"class":162},[103,72907,51482],{"class":109},[103,72909,1279],{"class":113},[103,72911,72912,72914,72916,72918,72920],{"class":105,"line":32684},[103,72913,54775],{"class":162},[103,72915,51427],{"class":113},[103,72917,938],{"class":162},[103,72919,51482],{"class":109},[103,72921,1279],{"class":113},[103,72923,72924,72926,72928,72930,72932],{"class":105,"line":32690},[103,72925,57349],{"class":162},[103,72927,51427],{"class":113},[103,72929,938],{"class":162},[103,72931,51482],{"class":109},[103,72933,1279],{"class":113},[103,72935,72936,72938,72940,72942,72944],{"class":105,"line":32701},[103,72937,62067],{"class":162},[103,72939,51427],{"class":113},[103,72941,191],{"class":162},[103,72943,51482],{"class":109},[103,72945,1279],{"class":113},[103,72947,72948,72950,72952,72954],{"class":105,"line":32707},[103,72949,57406],{"class":162},[103,72951,51427],{"class":113},[103,72953,60832],{"class":162},[103,72955,1279],{"class":113},[103,72957,72958,72960,72962,72964],{"class":105,"line":32713},[103,72959,57276],{"class":162},[103,72961,51427],{"class":113},[103,72963,51582],{"class":162},[103,72965,1279],{"class":113},[103,72967,72968,72970,72972,72974],{"class":105,"line":32719},[103,72969,63960],{"class":162},[103,72971,51427],{"class":113},[103,72973,54727],{"class":162},[103,72975,1279],{"class":113},[103,72977,72978,72980,72982,72985],{"class":105,"line":32725},[103,72979,54874],{"class":162},[103,72981,51427],{"class":113},[103,72983,72984],{"class":162},"orange",[103,72986,1279],{"class":113},[103,72988,72989,72991,72993,72996,72998],{"class":105,"line":32731},[103,72990,55124],{"class":162},[103,72992,51427],{"class":113},[103,72994,72995],{"class":162},"12.5",[103,72997,51482],{"class":109},[103,72999,1279],{"class":113},[103,73001,73002],{"class":105,"line":32737},[103,73003,2176],{"class":113},[103,73005,73006,73008,73010],{"class":105,"line":32743},[103,73007,52407],{"class":113},[103,73009,5116],{"class":51290},[103,73011,51297],{"class":113},[103,73013,73014,73016,73018],{"class":105,"line":32763},[103,73015,51775],{"class":113},[103,73017,51324],{"class":51290},[103,73019,51297],{"class":113},[103,73021,73022],{"class":105,"line":32769},[103,73023,2389],{"emptyLinePlaceholder":30},[103,73025,73026,73028,73030],{"class":105,"line":32785},[103,73027,1023],{"class":113},[103,73029,51790],{"class":51290},[103,73031,51297],{"class":113},[103,73033,73034,73036,73038,73041,73043],{"class":105,"line":32791},[103,73035,52134],{"class":113},[103,73037,45],{"class":51290},[103,73039,73040],{"class":113},">学生就业统计表\u003C\u002F",[103,73042,45],{"class":51290},[103,73044,51297],{"class":113},[103,73046,73047,73049,73051,73053,73055,73057,73059,73061,73063],{"class":105,"line":32805},[103,73048,52134],{"class":113},[103,73050,66615],{"class":51290},[103,73052,53476],{"class":1952},[103,73054,159],{"class":113},[103,73056,62654],{"class":218},[103,73058,69060],{"class":1952},[103,73060,159],{"class":113},[103,73062,31766],{"class":218},[103,73064,51297],{"class":113},[103,73066,73067,73069,73071,73073,73075,73077,73079,73081,73083,73085,73087,73090,73092,73094,73096],{"class":105,"line":32811},[103,73068,51331],{"class":113},[103,73070,53811],{"class":51290},[103,73072,53814],{"class":1952},[103,73074,159],{"class":113},[103,73076,62689],{"class":218},[103,73078,14910],{"class":1952},[103,73080,159],{"class":113},[103,73082,69086],{"class":218},[103,73084,61010],{"class":1952},[103,73086,159],{"class":113},[103,73088,73089],{"class":218},"\"姓名\"",[103,73091,53476],{"class":1952},[103,73093,159],{"class":113},[103,73095,69086],{"class":218},[103,73097,51297],{"class":113},[103,73099,73100,73102,73104,73106,73108,73110,73112,73114,73116,73118,73120,73123,73125,73127,73129],{"class":105,"line":32826},[103,73101,51331],{"class":113},[103,73103,53811],{"class":51290},[103,73105,53814],{"class":1952},[103,73107,159],{"class":113},[103,73109,62689],{"class":218},[103,73111,14910],{"class":1952},[103,73113,159],{"class":113},[103,73115,69114],{"class":218},[103,73117,61010],{"class":1952},[103,73119,159],{"class":113},[103,73121,73122],{"class":218},"\"年龄\"",[103,73124,53476],{"class":1952},[103,73126,159],{"class":113},[103,73128,69114],{"class":218},[103,73130,51297],{"class":113},[103,73132,73133,73135,73137,73139,73141,73143,73145,73147,73149,73151,73153,73156,73158,73160,73162],{"class":105,"line":32832},[103,73134,51331],{"class":113},[103,73136,53811],{"class":51290},[103,73138,53814],{"class":1952},[103,73140,159],{"class":113},[103,73142,62689],{"class":218},[103,73144,14910],{"class":1952},[103,73146,159],{"class":113},[103,73148,69216],{"class":218},[103,73150,61010],{"class":1952},[103,73152,159],{"class":113},[103,73154,73155],{"class":218},"\"薪资\"",[103,73157,53476],{"class":1952},[103,73159,159],{"class":113},[103,73161,69216],{"class":218},[103,73163,51297],{"class":113},[103,73165,73166,73168,73170,73172,73174,73176,73178,73180,73182,73184,73186,73188],{"class":105,"line":32841},[103,73167,51331],{"class":113},[103,73169,69134],{"class":51290},[103,73171,14910],{"class":1952},[103,73173,159],{"class":113},[103,73175,69141],{"class":218},[103,73177,14949],{"class":1952},[103,73179,159],{"class":113},[103,73181,7642],{"class":218},[103,73183,53476],{"class":1952},[103,73185,159],{"class":113},[103,73187,69141],{"class":218},[103,73189,51297],{"class":113},[103,73191,73192,73194,73196,73198,73200,73202,73204,73206],{"class":105,"line":32847},[103,73193,55224],{"class":113},[103,73195,69156],{"class":51290},[103,73197,66641],{"class":1952},[103,73199,159],{"class":113},[103,73201,9951],{"class":218},[103,73203,69165],{"class":113},[103,73205,69156],{"class":51290},[103,73207,51297],{"class":113},[103,73209,73210,73212,73214,73216,73218,73220,73222,73224],{"class":105,"line":32856},[103,73211,55224],{"class":113},[103,73213,69156],{"class":51290},[103,73215,66641],{"class":1952},[103,73217,159],{"class":113},[103,73219,10020],{"class":218},[103,73221,69184],{"class":113},[103,73223,69156],{"class":51290},[103,73225,51297],{"class":113},[103,73227,73228,73230,73232],{"class":105,"line":32862},[103,73229,51766],{"class":113},[103,73231,69134],{"class":51290},[103,73233,51297],{"class":113},[103,73235,73236,73238,73240,73242,73244,73246,73248,73250,73252,73254,73256,73258],{"class":105,"line":32868},[103,73237,51331],{"class":113},[103,73239,69134],{"class":51290},[103,73241,14910],{"class":1952},[103,73243,159],{"class":113},[103,73245,69238],{"class":218},[103,73247,14949],{"class":1952},[103,73249,159],{"class":113},[103,73251,7642],{"class":218},[103,73253,53476],{"class":1952},[103,73255,159],{"class":113},[103,73257,69238],{"class":218},[103,73259,51297],{"class":113},[103,73261,73262,73264,73266,73268,73270,73272,73274,73276],{"class":105,"line":32877},[103,73263,55224],{"class":113},[103,73265,69156],{"class":51290},[103,73267,66641],{"class":1952},[103,73269,159],{"class":113},[103,73271,69259],{"class":218},[103,73273,69262],{"class":113},[103,73275,69156],{"class":51290},[103,73277,51297],{"class":113},[103,73279,73280,73282,73284,73286,73288,73290,73292,73294],{"class":105,"line":32883},[103,73281,55224],{"class":113},[103,73283,69156],{"class":51290},[103,73285,66641],{"class":1952},[103,73287,159],{"class":113},[103,73289,69279],{"class":218},[103,73291,69282],{"class":113},[103,73293,69156],{"class":51290},[103,73295,51297],{"class":113},[103,73297,73298,73300,73302,73304,73306,73308,73310,73312],{"class":105,"line":32894},[103,73299,55224],{"class":113},[103,73301,69156],{"class":51290},[103,73303,66641],{"class":1952},[103,73305,159],{"class":113},[103,73307,69299],{"class":218},[103,73309,69302],{"class":113},[103,73311,69156],{"class":51290},[103,73313,51297],{"class":113},[103,73315,73316,73318,73320,73322,73324,73326,73328,73330],{"class":105,"line":32900},[103,73317,55224],{"class":113},[103,73319,69156],{"class":51290},[103,73321,66641],{"class":1952},[103,73323,159],{"class":113},[103,73325,69319],{"class":218},[103,73327,69322],{"class":113},[103,73329,69156],{"class":51290},[103,73331,51297],{"class":113},[103,73333,73334,73336,73338,73340,73342,73344,73346,73348],{"class":105,"line":32919},[103,73335,55224],{"class":113},[103,73337,69156],{"class":51290},[103,73339,66641],{"class":1952},[103,73341,159],{"class":113},[103,73343,69339],{"class":218},[103,73345,69342],{"class":113},[103,73347,69156],{"class":51290},[103,73349,51297],{"class":113},[103,73351,73352,73354,73356],{"class":105,"line":32925},[103,73353,51766],{"class":113},[103,73355,69134],{"class":51290},[103,73357,51297],{"class":113},[103,73359,73360,73362,73364],{"class":105,"line":32936},[103,73361,51331],{"class":113},[103,73363,53877],{"class":51290},[103,73365,51297],{"class":113},[103,73367,73368,73370,73372,73375,73377,73380,73382],{"class":105,"line":32942},[103,73369,55224],{"class":113},[103,73371,103],{"class":51290},[103,73373,73374],{"class":113},">+\u003C\u002F",[103,73376,103],{"class":51290},[103,73378,73379],{"class":113},">添加\u003C\u002F",[103,73381,53877],{"class":51290},[103,73383,51297],{"class":113},[103,73385,73386,73388,73390],{"class":105,"line":32962},[103,73387,52407],{"class":113},[103,73389,66615],{"class":51290},[103,73391,51297],{"class":113},[103,73393,73394,73396,73398,73400,73402,73404,73407,73409,73412,73414,73417,73419],{"class":105,"line":32978},[103,73395,52134],{"class":113},[103,73397,51601],{"class":51290},[103,73399,53476],{"class":1952},[103,73401,159],{"class":113},[103,73403,62570],{"class":218},[103,73405,73406],{"class":113},">共有数据 \u003C",[103,73408,103],{"class":51290},[103,73410,73411],{"class":113},">0\u003C\u002F",[103,73413,103],{"class":51290},[103,73415,73416],{"class":113},"> 条\u003C\u002F",[103,73418,51601],{"class":51290},[103,73420,51297],{"class":113},[103,73422,73423,73425,73427],{"class":105,"line":32984},[103,73424,52134],{"class":113},[103,73426,251],{"class":51290},[103,73428,51297],{"class":113},[103,73430,73431,73433,73435],{"class":105,"line":32998},[103,73432,51331],{"class":113},[103,73434,254],{"class":51290},[103,73436,51297],{"class":113},[103,73438,73439,73441,73443],{"class":105,"line":33004},[103,73440,55224],{"class":113},[103,73442,257],{"class":51290},[103,73444,51297],{"class":113},[103,73446,73447,73449,73451,73454,73456],{"class":105,"line":33010},[103,73448,55292],{"class":113},[103,73450,260],{"class":51290},[103,73452,73453],{"class":113},">ID\u003C\u002F",[103,73455,260],{"class":51290},[103,73457,51297],{"class":113},[103,73459,73460,73462,73464,73466,73468],{"class":105,"line":33021},[103,73461,55292],{"class":113},[103,73463,260],{"class":51290},[103,73465,69445],{"class":113},[103,73467,260],{"class":51290},[103,73469,51297],{"class":113},[103,73471,73472,73474,73476,73478,73480],{"class":105,"line":33027},[103,73473,55292],{"class":113},[103,73475,260],{"class":51290},[103,73477,69458],{"class":113},[103,73479,260],{"class":51290},[103,73481,51297],{"class":113},[103,73483,73484,73486,73488,73490,73492],{"class":105,"line":33033},[103,73485,55292],{"class":113},[103,73487,260],{"class":51290},[103,73489,69471],{"class":113},[103,73491,260],{"class":51290},[103,73493,51297],{"class":113},[103,73495,73496,73498,73500,73502,73504],{"class":105,"line":33043},[103,73497,55292],{"class":113},[103,73499,260],{"class":51290},[103,73501,69484],{"class":113},[103,73503,260],{"class":51290},[103,73505,51297],{"class":113},[103,73507,73508,73510,73512,73514,73516],{"class":105,"line":33049},[103,73509,55292],{"class":113},[103,73511,260],{"class":51290},[103,73513,69497],{"class":113},[103,73515,260],{"class":51290},[103,73517,51297],{"class":113},[103,73519,73520,73522,73524,73527,73529],{"class":105,"line":33060},[103,73521,55292],{"class":113},[103,73523,260],{"class":51290},[103,73525,73526],{"class":113},">录入时间\u003C\u002F",[103,73528,260],{"class":51290},[103,73530,51297],{"class":113},[103,73532,73533,73535,73537,73539,73541],{"class":105,"line":33066},[103,73534,55292],{"class":113},[103,73536,260],{"class":51290},[103,73538,69510],{"class":113},[103,73540,260],{"class":51290},[103,73542,51297],{"class":113},[103,73544,73545,73547,73549],{"class":105,"line":33076},[103,73546,55397],{"class":113},[103,73548,257],{"class":51290},[103,73550,51297],{"class":113},[103,73552,73553,73555,73557],{"class":105,"line":33081},[103,73554,51766],{"class":113},[103,73556,254],{"class":51290},[103,73558,51297],{"class":113},[103,73560,73561,73563,73565],{"class":105,"line":33087},[103,73562,51331],{"class":113},[103,73564,298],{"class":51290},[103,73566,51297],{"class":113},[103,73568,73569],{"class":105,"line":33136},[103,73570,73571],{"class":172},"      \u003C!-- \u003Ctr>\n",[103,73573,73574],{"class":105,"line":33183},[103,73575,73576],{"class":172},"        \u003Ctd>1\u003C\u002Ftd>\n",[103,73578,73579],{"class":105,"line":33188},[103,73580,73576],{"class":172},[103,73582,73583],{"class":105,"line":33194},[103,73584,73576],{"class":172},[103,73586,73587],{"class":105,"line":33213},[103,73588,73576],{"class":172},[103,73590,73591],{"class":105,"line":33219},[103,73592,73576],{"class":172},[103,73594,73595],{"class":105,"line":33239},[103,73596,73576],{"class":172},[103,73598,73599],{"class":105,"line":33245},[103,73600,73576],{"class":172},[103,73602,73603],{"class":105,"line":33251},[103,73604,73605],{"class":172},"        \u003Ctd>\n",[103,73607,73608],{"class":105,"line":33261},[103,73609,73610],{"class":172},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[103,73612,73613],{"class":105,"line":33266},[103,73614,73615],{"class":172},"        \u003C\u002Ftd>\n",[103,73617,73618],{"class":105,"line":33272},[103,73619,73620],{"class":172},"      \u003C\u002Ftr> -->\n",[103,73622,73623,73625,73627],{"class":105,"line":33288},[103,73624,51766],{"class":113},[103,73626,298],{"class":51290},[103,73628,51297],{"class":113},[103,73630,73631,73633,73635],{"class":105,"line":33333},[103,73632,52407],{"class":113},[103,73634,251],{"class":51290},[103,73636,51297],{"class":113},[103,73638,73639,73641,73643],{"class":105,"line":33339},[103,73640,52134],{"class":113},[103,73642,51803],{"class":51290},[103,73644,51297],{"class":113},[103,73646,73647],{"class":105,"line":33345},[103,73648,73649],{"class":172},"    \u002F\u002F const initData = [{\n",[103,73651,73652],{"class":105,"line":33351},[103,73653,73654],{"class":172},"    \u002F\u002F   unameId: 1,\n",[103,73656,73657],{"class":105,"line":33362},[103,73658,73659],{"class":172},"    \u002F\u002F   uname: '华晨宇',\n",[103,73661,73662],{"class":105,"line":33368},[103,73663,73664],{"class":172},"    \u002F\u002F   age: 22,\n",[103,73666,73667],{"class":105,"line":33374},[103,73668,73669],{"class":172},"    \u002F\u002F   salary: 12000,\n",[103,73671,73672],{"class":105,"line":33380},[103,73673,73674],{"class":172},"    \u002F\u002F   gender: '男',\n",[103,73676,73677],{"class":105,"line":33398},[103,73678,73679],{"class":172},"    \u002F\u002F   city: '北京',\n",[103,73681,73682],{"class":105,"line":33412},[103,73683,73684],{"class":172},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[103,73686,73687],{"class":105,"line":33421},[103,73688,73689],{"class":172},"    \u002F\u002F }]\n",[103,73691,73692],{"class":105,"line":33430},[103,73693,73694],{"class":172},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[103,73696,73697],{"class":105,"line":33439},[103,73698,73699],{"class":172},"    \u002F\u002F 1.渲染业务\n",[103,73701,73702],{"class":105,"line":33448},[103,73703,73704],{"class":172},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[103,73706,73707],{"class":105,"line":33454},[103,73708,73709],{"class":172},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[103,73711,73712],{"class":105,"line":33460},[103,73713,73714],{"class":172},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[103,73716,73717],{"class":105,"line":33468},[103,73718,2389],{"emptyLinePlaceholder":30},[103,73720,73721],{"class":105,"line":33473},[103,73722,73723],{"class":172},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[103,73725,73726],{"class":105,"line":33479},[103,73727,73728],{"class":172},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[103,73730,73731,73733,73735,73737],{"class":105,"line":33490},[103,73732,11211],{"class":109},[103,73734,57685],{"class":162},[103,73736,13554],{"class":109},[103,73738,51828],{"class":113},[103,73740,73741,73744,73746],{"class":105,"line":33496},[103,73742,73743],{"class":113},"    console.",[103,73745,58237],{"class":1952},[103,73747,52402],{"class":113},[103,73749,73750],{"class":105,"line":33516},[103,73751,2389],{"emptyLinePlaceholder":30},[103,73753,73754],{"class":105,"line":33522},[103,73755,73756],{"class":172},"    \u002F\u002F 时间函数\n",[103,73758,73759,73761,73764],{"class":105,"line":33528},[103,73760,70074],{"class":109},[103,73762,73763],{"class":1952}," getTime",[103,73765,10843],{"class":113},[103,73767,73768,73770,73773,73775,73777,73780],{"class":105,"line":33534},[103,73769,58218],{"class":109},[103,73771,73772],{"class":162}," date",[103,73774,13554],{"class":109},[103,73776,11568],{"class":109},[103,73778,73779],{"class":1952}," Date",[103,73781,1965],{"class":113},[103,73783,73784,73786,73788,73790,73793,73796,73798,73800,73802,73805,73808,73810,73812,73814,73816,73818,73820,73822],{"class":105,"line":33551},[103,73785,58218],{"class":109},[103,73787,16081],{"class":162},[103,73789,13554],{"class":109},[103,73791,73792],{"class":113}," date.",[103,73794,73795],{"class":1952},"getHours",[103,73797,13040],{"class":113},[103,73799,1023],{"class":109},[103,73801,2027],{"class":162},[103,73803,73804],{"class":109}," ?",[103,73806,73807],{"class":218}," '0'",[103,73809,45556],{"class":109},[103,73811,73792],{"class":113},[103,73813,73795],{"class":1952},[103,73815,13040],{"class":113},[103,73817,972],{"class":109},[103,73819,73792],{"class":113},[103,73821,73795],{"class":1952},[103,73823,1965],{"class":113},[103,73825,73826,73828,73831,73833,73835,73838,73840,73842,73844,73846,73848,73850,73852,73854,73856,73858,73860,73862],{"class":105,"line":33557},[103,73827,58218],{"class":109},[103,73829,73830],{"class":162}," m",[103,73832,13554],{"class":109},[103,73834,73792],{"class":113},[103,73836,73837],{"class":1952},"getMinutes",[103,73839,13040],{"class":113},[103,73841,1023],{"class":109},[103,73843,2027],{"class":162},[103,73845,73804],{"class":109},[103,73847,73807],{"class":218},[103,73849,45556],{"class":109},[103,73851,73792],{"class":113},[103,73853,73837],{"class":1952},[103,73855,13040],{"class":113},[103,73857,972],{"class":109},[103,73859,73792],{"class":113},[103,73861,73837],{"class":1952},[103,73863,1965],{"class":113},[103,73865,73866,73868,73870,73872,73874,73877,73879,73881,73883,73885,73887,73889,73891,73893,73895,73897,73899,73901],{"class":105,"line":33563},[103,73867,58218],{"class":109},[103,73869,8418],{"class":162},[103,73871,13554],{"class":109},[103,73873,73792],{"class":113},[103,73875,73876],{"class":1952},"getSeconds",[103,73878,13040],{"class":113},[103,73880,1023],{"class":109},[103,73882,2027],{"class":162},[103,73884,73804],{"class":109},[103,73886,73807],{"class":218},[103,73888,45556],{"class":109},[103,73890,73792],{"class":113},[103,73892,73876],{"class":1952},[103,73894,13040],{"class":113},[103,73896,972],{"class":109},[103,73898,73792],{"class":113},[103,73900,73876],{"class":1952},[103,73902,1965],{"class":113},[103,73904,73905,73907,73910,73912,73914,73917,73919,73922,73924,73927,73929,73931,73934,73936,73938,73940,73942,73944,73946,73949,73951,73954,73956,73959,73961,73963,73965],{"class":105,"line":33569},[103,73906,58218],{"class":109},[103,73908,73909],{"class":162}," str",[103,73911,13554],{"class":109},[103,73913,62893],{"class":218},[103,73915,73916],{"class":113},"date",[103,73918,671],{"class":218},[103,73920,73921],{"class":1952},"getFullYear",[103,73923,2416],{"class":218},[103,73925,73926],{"class":218},"}\u002F${",[103,73928,73916],{"class":113},[103,73930,671],{"class":218},[103,73932,73933],{"class":1952},"getMonth",[103,73935,13040],{"class":218},[103,73937,594],{"class":109},[103,73939,25108],{"class":162},[103,73941,73926],{"class":218},[103,73943,73916],{"class":113},[103,73945,671],{"class":218},[103,73947,73948],{"class":1952},"getDate",[103,73950,2416],{"class":218},[103,73952,73953],{"class":218},"} ${",[103,73955,528],{"class":113},[103,73957,73958],{"class":218},"}:${",[103,73960,657],{"class":113},[103,73962,73958],{"class":218},[103,73964,808],{"class":113},[103,73966,73967],{"class":218},"}`\n",[103,73969,73970,73973],{"class":105,"line":33575},[103,73971,73972],{"class":109},"      return",[103,73974,73975],{"class":113}," str\n",[103,73977,73978],{"class":105,"line":33581},[103,73979,2176],{"class":113},[103,73981,73982],{"class":105,"line":33608},[103,73983,73984],{"class":172},"    \u002F\u002F 渲染函数\n",[103,73986,73987,73989,73991,73993,73995,73997,73999,74001],{"class":105,"line":33632},[103,73988,11211],{"class":109},[103,73990,69737],{"class":162},[103,73992,13554],{"class":109},[103,73994,54386],{"class":113},[103,73996,54389],{"class":1952},[103,73998,114],{"class":113},[103,74000,69748],{"class":218},[103,74002,120],{"class":113},[103,74004,74005,74007,74009],{"class":105,"line":33638},[103,74006,70074],{"class":109},[103,74008,70077],{"class":1952},[103,74010,10843],{"class":113},[103,74012,74013],{"class":105,"line":33644},[103,74014,74015],{"class":172},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[103,74017,74018],{"class":105,"line":33650},[103,74019,74020],{"class":172},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[103,74022,74023,74025,74028,74030,74032,74035,74037,74039,74041,74044,74046,74049],{"class":105,"line":33661},[103,74024,58218],{"class":109},[103,74026,74027],{"class":162}," trArr",[103,74029,13554],{"class":109},[103,74031,51955],{"class":113},[103,74033,74034],{"class":1952},"map",[103,74036,114],{"class":113},[103,74038,54439],{"class":109},[103,74040,1647],{"class":113},[103,74042,74043],{"class":5206},"ele",[103,74045,12425],{"class":113},[103,74047,74048],{"class":5206},"index",[103,74050,12432],{"class":113},[103,74052,74053,74055],{"class":105,"line":33672},[103,74054,14742],{"class":109},[103,74056,70158],{"class":218},[103,74058,74059],{"class":105,"line":33678},[103,74060,74061],{"class":218},"      \u003Ctr>\n",[103,74063,74064,74066,74068,74070,74073],{"class":105,"line":33695},[103,74065,70163],{"class":218},[103,74067,74043],{"class":113},[103,74069,671],{"class":218},[103,74071,74072],{"class":113},"unameId",[103,74074,70178],{"class":218},[103,74076,74077,74079,74081,74083,74085],{"class":105,"line":33718},[103,74078,70163],{"class":218},[103,74080,74043],{"class":113},[103,74082,671],{"class":218},[103,74084,70194],{"class":113},[103,74086,70178],{"class":218},[103,74088,74089,74091,74093,74095,74097],{"class":105,"line":33741},[103,74090,70163],{"class":218},[103,74092,74043],{"class":113},[103,74094,671],{"class":218},[103,74096,70211],{"class":113},[103,74098,70178],{"class":218},[103,74100,74101,74103,74105,74107,74109],{"class":105,"line":33747},[103,74102,70163],{"class":218},[103,74104,74043],{"class":113},[103,74106,671],{"class":218},[103,74108,70228],{"class":113},[103,74110,70178],{"class":218},[103,74112,74113,74115,74117,74119,74121],{"class":105,"line":33752},[103,74114,70163],{"class":218},[103,74116,74043],{"class":113},[103,74118,671],{"class":218},[103,74120,70245],{"class":113},[103,74122,70178],{"class":218},[103,74124,74125,74127,74129,74131,74133],{"class":105,"line":33761},[103,74126,70163],{"class":218},[103,74128,74043],{"class":113},[103,74130,671],{"class":218},[103,74132,70262],{"class":113},[103,74134,70178],{"class":218},[103,74136,74137,74139,74141,74143,74145],{"class":105,"line":33771},[103,74138,70163],{"class":218},[103,74140,74043],{"class":113},[103,74142,671],{"class":218},[103,74144,2376],{"class":113},[103,74146,70178],{"class":218},[103,74148,74149],{"class":105,"line":33777},[103,74150,73605],{"class":218},[103,74152,74153,74156,74158],{"class":105,"line":33782},[103,74154,74155],{"class":218},"          \u003Ca href=\"#\" data-id=\"${",[103,74157,74048],{"class":113},[103,74159,74160],{"class":218},"}\">删除\u003C\u002Fa>\n",[103,74162,74163],{"class":105,"line":33788},[103,74164,73615],{"class":218},[103,74166,74167],{"class":105,"line":33801},[103,74168,74169],{"class":218},"      \u003C\u002Ftr>\n",[103,74171,74172],{"class":105,"line":33807},[103,74173,74174],{"class":218},"  `\n",[103,74176,74177],{"class":105,"line":33818},[103,74178,64805],{"class":113},[103,74180,74181,74183,74185],{"class":105,"line":33829},[103,74182,58234],{"class":113},[103,74184,58237],{"class":1952},[103,74186,74187],{"class":113},"(trArr)\n",[103,74189,74190],{"class":105,"line":33848},[103,74191,2389],{"emptyLinePlaceholder":30},[103,74193,74194],{"class":105,"line":49508},[103,74195,74196],{"class":172},"      \u002F\u002F (2) 把数组转换为字符串join\n",[103,74198,74199],{"class":105,"line":49513},[103,74200,74201],{"class":172},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[103,74203,74204,74206,74208,74211,74214,74216,74219],{"class":105,"line":49522},[103,74205,70089],{"class":113},[103,74207,159],{"class":109},[103,74209,74210],{"class":113}," trArr.",[103,74212,74213],{"class":1952},"join",[103,74215,114],{"class":113},[103,74217,74218],{"class":218},"''",[103,74220,120],{"class":113},[103,74222,74223],{"class":105,"line":49531},[103,74224,74225],{"class":172},"      \u002F\u002F 显示共有几条\n",[103,74227,74228,74230,74232,74234,74237,74240,74242,74244],{"class":105,"line":49536},[103,74229,55761],{"class":113},[103,74231,54389],{"class":1952},[103,74233,114],{"class":113},[103,74235,74236],{"class":218},"'.total span'",[103,74238,74239],{"class":113},").innerHTML ",[103,74241,159],{"class":109},[103,74243,51955],{"class":113},[103,74245,55821],{"class":162},[103,74247,74248],{"class":105,"line":49541},[103,74249,2176],{"class":113},[103,74251,74252],{"class":105,"line":49546},[103,74253,74254],{"class":172},"    \u002F\u002F render()\n",[103,74256,74257],{"class":105,"line":49559},[103,74258,2389],{"emptyLinePlaceholder":30},[103,74260,74261],{"class":105,"line":49564},[103,74262,74263],{"class":172},"    \u002F\u002F 获取DOM对象\n",[103,74265,74266,74268,74270,74272,74274,74276,74278,74280],{"class":105,"line":49573},[103,74267,11211],{"class":109},[103,74269,69811],{"class":162},[103,74271,13554],{"class":109},[103,74273,54386],{"class":113},[103,74275,54389],{"class":1952},[103,74277,114],{"class":113},[103,74279,69822],{"class":218},[103,74281,120],{"class":113},[103,74283,74284,74286,74288,74290,74292,74294,74296,74298],{"class":105,"line":49582},[103,74285,11211],{"class":109},[103,74287,69638],{"class":162},[103,74289,13554],{"class":109},[103,74291,54386],{"class":113},[103,74293,54389],{"class":1952},[103,74295,114],{"class":113},[103,74297,69649],{"class":218},[103,74299,120],{"class":113},[103,74301,74302,74304,74306,74308,74310,74312,74314,74316],{"class":105,"line":49599},[103,74303,11211],{"class":109},[103,74305,15679],{"class":162},[103,74307,13554],{"class":109},[103,74309,54386],{"class":113},[103,74311,54389],{"class":1952},[103,74313,114],{"class":113},[103,74315,69668],{"class":218},[103,74317,120],{"class":113},[103,74319,74321,74323,74325,74327,74329,74331,74333,74335],{"class":105,"line":74320},231,[103,74322,11211],{"class":109},[103,74324,69697],{"class":162},[103,74326,13554],{"class":109},[103,74328,54386],{"class":113},[103,74330,54389],{"class":1952},[103,74332,114],{"class":113},[103,74334,69708],{"class":218},[103,74336,120],{"class":113},[103,74338,74340,74342,74344,74346,74348,74350,74352,74354],{"class":105,"line":74339},232,[103,74341,11211],{"class":109},[103,74343,69677],{"class":162},[103,74345,13554],{"class":109},[103,74347,54386],{"class":113},[103,74349,54389],{"class":1952},[103,74351,114],{"class":113},[103,74353,69688],{"class":218},[103,74355,120],{"class":113},[103,74357,74359,74361,74363,74365,74367,74369,74371,74373],{"class":105,"line":74358},233,[103,74360,11211],{"class":109},[103,74362,69717],{"class":162},[103,74364,13554],{"class":109},[103,74366,54386],{"class":113},[103,74368,54389],{"class":1952},[103,74370,114],{"class":113},[103,74372,69728],{"class":218},[103,74374,120],{"class":113},[103,74376,74378],{"class":105,"line":74377},234,[103,74379,2389],{"emptyLinePlaceholder":30},[103,74381,74383],{"class":105,"line":74382},235,[103,74384,74385],{"class":172},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[103,74387,74389,74391,74393,74395,74397,74399,74401,74403,74405],{"class":105,"line":74388},236,[103,74390,69829],{"class":113},[103,74392,57803],{"class":1952},[103,74394,114],{"class":113},[103,74396,69836],{"class":218},[103,74398,12425],{"class":113},[103,74400,54439],{"class":109},[103,74402,1647],{"class":113},[103,74404,188],{"class":5206},[103,74406,12432],{"class":113},[103,74408,74410],{"class":105,"line":74409},237,[103,74411,74412],{"class":172},"      \u002F\u002F 禁止浏览器跳转\n",[103,74414,74416,74418,74420],{"class":105,"line":74415},238,[103,74417,69856],{"class":113},[103,74419,69859],{"class":1952},[103,74421,1965],{"class":113},[103,74423,74425],{"class":105,"line":74424},239,[103,74426,74427],{"class":172},"      \u002F\u002F 非空判断\n",[103,74429,74431],{"class":105,"line":74430},240,[103,74432,74433],{"class":172},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[103,74435,74437],{"class":105,"line":74436},241,[103,74438,74439],{"class":172},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[103,74441,74443,74445,74447,74449,74452,74454,74457,74460,74462,74464],{"class":105,"line":74442},242,[103,74444,54470],{"class":109},[103,74446,1647],{"class":113},[103,74448,340],{"class":109},[103,74450,74451],{"class":113},"uname.value ",[103,74453,71347],{"class":109},[103,74455,74456],{"class":109}," !",[103,74458,74459],{"class":113},"age.value ",[103,74461,71347],{"class":109},[103,74463,74456],{"class":109},[103,74465,74466],{"class":113},"salary.value) {\n",[103,74468,74470,74472,74474,74476,74478],{"class":105,"line":74469},243,[103,74471,14742],{"class":109},[103,74473,69930],{"class":1952},[103,74475,114],{"class":113},[103,74477,69935],{"class":218},[103,74479,120],{"class":113},[103,74481,74483],{"class":105,"line":74482},244,[103,74484,52388],{"class":113},[103,74486,74488,74490,74492],{"class":105,"line":74487},245,[103,74489,57997],{"class":113},[103,74491,51874],{"class":1952},[103,74493,74494],{"class":113},"({\n",[103,74496,74498],{"class":105,"line":74497},246,[103,74499,74500],{"class":172},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[103,74502,74504],{"class":105,"line":74503},247,[103,74505,74506],{"class":172},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[103,74508,74510],{"class":105,"line":74509},248,[103,74511,74512],{"class":172},"        \u002F\u002F 对象的序号应为数组长度+1\n",[103,74514,74516],{"class":105,"line":74515},249,[103,74517,74518],{"class":172},"        \u002F\u002F unameId: arr.length + 1,\n",[103,74520,74522],{"class":105,"line":74521},250,[103,74523,2389],{"emptyLinePlaceholder":30},[103,74525,74527],{"class":105,"line":74526},251,[103,74528,74529],{"class":172},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[103,74531,74533],{"class":105,"line":74532},252,[103,74534,74535],{"class":172},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[103,74537,74539],{"class":105,"line":74538},253,[103,74540,74541],{"class":172},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[103,74543,74545],{"class":105,"line":74544},254,[103,74546,74547],{"class":172},"        \u002F\u002F 0当假看\n",[103,74549,74551,74554,74556,74558,74561,74563,74565,74567,74570,74572,74574,74577,74579],{"class":105,"line":74550},255,[103,74552,74553],{"class":113},"        unameId: arr.",[103,74555,51958],{"class":162},[103,74557,73804],{"class":109},[103,74559,74560],{"class":113}," arr[arr.",[103,74562,51958],{"class":162},[103,74564,52261],{"class":109},[103,74566,25108],{"class":162},[103,74568,74569],{"class":113},"].unameId ",[103,74571,594],{"class":109},[103,74573,25108],{"class":162},[103,74575,74576],{"class":109}," :",[103,74578,25108],{"class":162},[103,74580,31456],{"class":113},[103,74582,74584],{"class":105,"line":74583},256,[103,74585,69983],{"class":113},[103,74587,74589],{"class":105,"line":74588},257,[103,74590,69988],{"class":113},[103,74592,74594],{"class":105,"line":74593},258,[103,74595,69998],{"class":113},[103,74597,74599],{"class":105,"line":74598},259,[103,74600,69993],{"class":113},[103,74602,74604],{"class":105,"line":74603},260,[103,74605,74606],{"class":113},"        city: city.value,\n",[103,74608,74610],{"class":105,"line":74609},261,[103,74611,74612],{"class":172},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[103,74614,74616],{"class":105,"line":74615},262,[103,74617,74618],{"class":172},"        \u002F\u002F time: new Date().toDateString()\n",[103,74620,74622,74625,74628],{"class":105,"line":74621},263,[103,74623,74624],{"class":113},"        time: ",[103,74626,74627],{"class":1952},"getTime",[103,74629,1965],{"class":113},[103,74631,74633],{"class":105,"line":74632},264,[103,74634,64805],{"class":113},[103,74636,74638],{"class":105,"line":74637},265,[103,74639,74640],{"class":172},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[103,74642,74644,74646],{"class":105,"line":74643},266,[103,74645,70058],{"class":1952},[103,74647,1965],{"class":113},[103,74649,74651,74653,74655,74657,74659],{"class":105,"line":74650},267,[103,74652,70041],{"class":162},[103,74654,671],{"class":113},[103,74656,70046],{"class":1952},[103,74658,13040],{"class":113},[103,74660,74661],{"class":172},"\u002F\u002F重置表单\n",[103,74663,74665],{"class":105,"line":74664},268,[103,74666,74667],{"class":172},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[103,74669,74671,74674,74676,74678,74681,74683,74685,74687,74689],{"class":105,"line":74670},269,[103,74672,74673],{"class":113},"      localStorage.",[103,74675,71644],{"class":1952},[103,74677,114],{"class":113},[103,74679,74680],{"class":218},"'data'",[103,74682,12425],{"class":113},[103,74684,71654],{"class":162},[103,74686,671],{"class":113},[103,74688,71659],{"class":1952},[103,74690,74691],{"class":113},"(arr))\n",[103,74693,74695],{"class":105,"line":74694},270,[103,74696,33451],{"class":113},[103,74698,74700],{"class":105,"line":74699},271,[103,74701,2389],{"emptyLinePlaceholder":30},[103,74703,74705],{"class":105,"line":74704},272,[103,74706,74707],{"class":172},"    \u002F\u002F 3.删除业务\n",[103,74709,74711],{"class":105,"line":74710},273,[103,74712,74713],{"class":172},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[103,74715,74717,74719,74721,74723,74725,74727,74729,74731,74733],{"class":105,"line":74716},274,[103,74718,70331],{"class":113},[103,74720,57803],{"class":1952},[103,74722,114],{"class":113},[103,74724,57808],{"class":218},[103,74726,12425],{"class":113},[103,74728,54439],{"class":109},[103,74730,1647],{"class":113},[103,74732,188],{"class":5206},[103,74734,12432],{"class":113},[103,74736,74738],{"class":105,"line":74737},275,[103,74739,74740],{"class":172},"      \u002F\u002F 判断是否点击的是删除按钮\n",[103,74742,74744,74746,74748,74750,74752],{"class":105,"line":74743},276,[103,74745,54470],{"class":109},[103,74747,67024],{"class":113},[103,74749,54476],{"class":109},[103,74751,68246],{"class":218},[103,74753,12432],{"class":113},[103,74755,74757],{"class":105,"line":74756},277,[103,74758,74759],{"class":172},"        \u002F\u002F alert(1)\n",[103,74761,74763],{"class":105,"line":74762},278,[103,74764,74765],{"class":172},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[103,74767,74769],{"class":105,"line":74768},279,[103,74770,74771],{"class":172},"        \u002F\u002F console.log(e.target)\n",[103,74773,74775],{"class":105,"line":74774},280,[103,74776,74777],{"class":172},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[103,74779,74781],{"class":105,"line":74780},281,[103,74782,2389],{"emptyLinePlaceholder":30},[103,74784,74786],{"class":105,"line":74785},282,[103,74787,74788],{"class":172},"        \u002F\u002F 确认框，确然是否真的要删除\n",[103,74790,74792],{"class":105,"line":74791},283,[103,74793,74794],{"class":172},"        \u002F\u002F confirm()为确认框\n",[103,74796,74798],{"class":105,"line":74797},284,[103,74799,74800],{"class":172},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[103,74802,74804,74806,74808,74811,74813,74816],{"class":105,"line":74803},285,[103,74805,2486],{"class":109},[103,74807,1647],{"class":113},[103,74809,74810],{"class":1952},"confirm",[103,74812,114],{"class":113},[103,74814,74815],{"class":218},"'您确定要删除这条数据吗？'",[103,74817,74818],{"class":113},")) {\n",[103,74820,74822,74825,74827,74829,74831],{"class":105,"line":74821},286,[103,74823,74824],{"class":113},"          arr.",[103,74826,58000],{"class":1952},[103,74828,70384],{"class":113},[103,74830,331],{"class":162},[103,74832,120],{"class":113},[103,74834,74836],{"class":105,"line":74835},287,[103,74837,74838],{"class":172},"          \u002F\u002F 3.4 重新渲染页面\n",[103,74840,74842,74845],{"class":105,"line":74841},288,[103,74843,74844],{"class":1952},"          render",[103,74846,1965],{"class":113},[103,74848,74850],{"class":105,"line":74849},289,[103,74851,74852],{"class":172},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[103,74854,74856,74859,74861,74863,74865,74867,74869,74871,74873],{"class":105,"line":74855},290,[103,74857,74858],{"class":113},"          localStorage.",[103,74860,71644],{"class":1952},[103,74862,114],{"class":113},[103,74864,74680],{"class":218},[103,74866,12425],{"class":113},[103,74868,71654],{"class":162},[103,74870,671],{"class":113},[103,74872,71659],{"class":1952},[103,74874,74691],{"class":113},[103,74876,74878],{"class":105,"line":74877},291,[103,74879,2518],{"class":113},[103,74881,74883],{"class":105,"line":74882},292,[103,74884,52388],{"class":113},[103,74886,74888],{"class":105,"line":74887},293,[103,74889,2389],{"emptyLinePlaceholder":30},[103,74891,74893],{"class":105,"line":74892},294,[103,74894,33451],{"class":113},[103,74896,74898],{"class":105,"line":74897},295,[103,74899,2389],{"emptyLinePlaceholder":30},[103,74901,74903,74905,74907],{"class":105,"line":74902},296,[103,74904,52407],{"class":113},[103,74906,51803],{"class":51290},[103,74908,51297],{"class":113},[103,74910,74912,74914,74916],{"class":105,"line":74911},297,[103,74913,51775],{"class":113},[103,74915,51790],{"class":51290},[103,74917,51297],{"class":113},[103,74919,74921],{"class":105,"line":74920},298,[103,74922,2389],{"emptyLinePlaceholder":30},[103,74924,74926,74928,74930],{"class":105,"line":74925},299,[103,74927,51775],{"class":113},[103,74929,50625],{"class":51290},[103,74931,51297],{"class":113},[45,74933,74935],{"id":74934},"_36-正则表达式","3.6 正则表达式",[14,74937,74938],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,74940,74941],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,74943,74944],{},"正则表达式的作用：",[1120,74946,74947,74954,74960],{},[60,74948,74949,74950,74953],{},"表单验证（ ",[263,74951,74952],{},"匹配"," ）",[60,74955,74956,74957,74953],{},"过滤敏感词（ ",[263,74958,74959],{},"替换",[60,74961,74962,74963,74953],{},"字符串中提取我们想要的部分（ ",[263,74964,74965],{},"提取",[74,74967,74969],{"id":74968},"_361-语法","3.6.1 语法",[14,74971,74972],{},"正则表达式使用步骤：",[57,74974,74975,74978],{},[60,74976,74977],{},"定义规则",[60,74979,74980],{},"查找是否匹配",[14,74982,74983],{},"正则表达式里边不需要写引号",[14,74985,74986],{},[1451,74987],{"alt":24,"src":74988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,74990,74991],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,74993,74994],{},"reg.test(str)",[14,74996,74997],{},[1451,74998],{"alt":24,"src":74999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75001,75002],{},[1451,75003],{"alt":24,"src":75004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[74,75006,75008],{"id":75007},"_362-元字符","3.6.2 元字符",[57,75010,75011,75014,75017,75020,75027],{},[60,75012,75013],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[60,75015,75016],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[60,75018,75019],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[60,75021,75022,75023],{},"正则验证工具：",[17,75024,75025],{"href":75025,"rel":75026},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[21],[60,75028,75029],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21988,75031,75033],{"id":75032},"_3621-边界符","3.6.2.1 边界符",[14,75035,75036],{},[1451,75037],{"alt":24,"src":75038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75040,75041],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75043,75044],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75046,75047],{},"只匹配一次",[14,75049,75050],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21988,75052,75054],{"id":75053},"_3622-量词","3.6.2.2 量词",[14,75056,75057],{},[1451,75058],{"alt":24,"src":75059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75061,75062],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21988,75064,75066],{"id":75065},"_3623-元字符","3.6.2.3 元字符",[14,75068,75069],{},[1451,75070],{"alt":24,"src":75071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75073,75074],{},"匹配的是a或b或c []只选一个",[14,75076,75077],{},[1451,75078],{"alt":24,"src":75079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75081,75082],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75084,75085],{},[1451,75086],{"alt":24,"src":75087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75089,75090],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75092,75093],{},[1451,75094],{"alt":24,"src":75095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[94,75097,75099],{"className":50623,"code":75098,"language":50625,"meta":24,"style":24},"\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",[100,75100,75101,75111,75125,75129,75137,75151,75171,75183,75191,75195,75203,75211,75216,75247,75274,75302,75306,75311,75339,75370,75375,75380,75411,75443,75475,75479,75484,75515,75545,75575,75579,75584,75615,75646,75676,75706,75710,75715,75748,75752,75757,75788,75819,75823,75828,75859,75889,75920,75924,75929,75961,75992,76023,76050,76081,76113,76146,76177,76208,76240,76271,76279,76287,76291],{"__ignoreMap":24},[103,75102,75103,75105,75107,75109],{"class":105,"line":106},[103,75104,51287],{"class":113},[103,75106,51291],{"class":51290},[103,75108,51294],{"class":1952},[103,75110,51297],{"class":113},[103,75112,75113,75115,75117,75119,75121,75123],{"class":105,"line":25},[103,75114,1023],{"class":113},[103,75116,50625],{"class":51290},[103,75118,51306],{"class":1952},[103,75120,159],{"class":113},[103,75122,51311],{"class":218},[103,75124,51297],{"class":113},[103,75126,75127],{"class":105,"line":1168},[103,75128,2389],{"emptyLinePlaceholder":30},[103,75130,75131,75133,75135],{"class":105,"line":1183},[103,75132,1023],{"class":113},[103,75134,51324],{"class":51290},[103,75136,51297],{"class":113},[103,75138,75139,75141,75143,75145,75147,75149],{"class":105,"line":1189},[103,75140,52134],{"class":113},[103,75142,51334],{"class":51290},[103,75144,51337],{"class":1952},[103,75146,159],{"class":113},[103,75148,51342],{"class":218},[103,75150,51297],{"class":113},[103,75152,75153,75155,75157,75159,75161,75163,75165,75167,75169],{"class":105,"line":1203},[103,75154,52134],{"class":113},[103,75156,51334],{"class":51290},[103,75158,14910],{"class":1952},[103,75160,159],{"class":113},[103,75162,51381],{"class":218},[103,75164,51361],{"class":1952},[103,75166,159],{"class":113},[103,75168,51388],{"class":218},[103,75170,51297],{"class":113},[103,75172,75173,75175,75177,75179,75181],{"class":105,"line":1209},[103,75174,52134],{"class":113},[103,75176,51397],{"class":51290},[103,75178,51400],{"class":113},[103,75180,51397],{"class":51290},[103,75182,51297],{"class":113},[103,75184,75185,75187,75189],{"class":105,"line":1300},[103,75186,51775],{"class":113},[103,75188,51324],{"class":51290},[103,75190,51297],{"class":113},[103,75192,75193],{"class":105,"line":1306},[103,75194,2389],{"emptyLinePlaceholder":30},[103,75196,75197,75199,75201],{"class":105,"line":1318},[103,75198,1023],{"class":113},[103,75200,51790],{"class":51290},[103,75202,51297],{"class":113},[103,75204,75205,75207,75209],{"class":105,"line":1601},[103,75206,52134],{"class":113},[103,75208,51803],{"class":51290},[103,75210,51297],{"class":113},[103,75212,75213],{"class":105,"line":1606},[103,75214,75215],{"class":172},"    \u002F\u002F 元字符中\n",[103,75217,75218,75220,75222,75224,75226,75229,75231,75233,75236,75238,75241,75244],{"class":105,"line":1612},[103,75219,73743],{"class":113},[103,75221,58237],{"class":1952},[103,75223,114],{"class":113},[103,75225,697],{"class":218},[103,75227,75228],{"class":47967},"哈",[103,75230,697],{"class":218},[103,75232,671],{"class":113},[103,75234,75235],{"class":1952},"test",[103,75237,114],{"class":113},[103,75239,75240],{"class":218},"'哈'",[103,75242,75243],{"class":113},"))  ",[103,75245,75246],{"class":172},"\u002F\u002Ftrue\n",[103,75248,75249,75251,75253,75255,75257,75259,75261,75263,75265,75267,75270,75272],{"class":105,"line":1617},[103,75250,73743],{"class":113},[103,75252,58237],{"class":1952},[103,75254,114],{"class":113},[103,75256,697],{"class":218},[103,75258,75228],{"class":47967},[103,75260,697],{"class":218},[103,75262,671],{"class":113},[103,75264,75235],{"class":1952},[103,75266,114],{"class":113},[103,75268,75269],{"class":218},"'哈哈'",[103,75271,75243],{"class":113},[103,75273,75246],{"class":172},[103,75275,75276,75278,75280,75282,75284,75286,75288,75290,75292,75294,75297,75300],{"class":105,"line":1631},[103,75277,73743],{"class":113},[103,75279,58237],{"class":1952},[103,75281,114],{"class":113},[103,75283,697],{"class":218},[103,75285,75228],{"class":47967},[103,75287,697],{"class":218},[103,75289,671],{"class":113},[103,75291,75235],{"class":1952},[103,75293,114],{"class":113},[103,75295,75296],{"class":218},"'二哈'",[103,75298,75299],{"class":113},"))   ",[103,75301,75246],{"class":172},[103,75303,75304],{"class":105,"line":1636},[103,75305,2389],{"emptyLinePlaceholder":30},[103,75307,75308],{"class":105,"line":1642},[103,75309,75310],{"class":172},"    \u002F\u002F 1.边界符\n",[103,75312,75313,75315,75317,75319,75321,75323,75325,75327,75329,75331,75333,75335,75337],{"class":105,"line":1663},[103,75314,73743],{"class":113},[103,75316,58237],{"class":1952},[103,75318,114],{"class":113},[103,75320,697],{"class":218},[103,75322,1079],{"class":109},[103,75324,75228],{"class":47967},[103,75326,697],{"class":218},[103,75328,671],{"class":113},[103,75330,75235],{"class":1952},[103,75332,114],{"class":113},[103,75334,75240],{"class":218},[103,75336,75243],{"class":113},[103,75338,75246],{"class":172},[103,75340,75341,75343,75345,75347,75349,75351,75353,75355,75357,75359,75361,75363,75365,75367],{"class":105,"line":1668},[103,75342,73743],{"class":113},[103,75344,58237],{"class":1952},[103,75346,114],{"class":113},[103,75348,697],{"class":218},[103,75350,1079],{"class":109},[103,75352,75228],{"class":47967},[103,75354,415],{"class":109},[103,75356,697],{"class":218},[103,75358,671],{"class":113},[103,75360,75235],{"class":1952},[103,75362,114],{"class":113},[103,75364,75269],{"class":218},[103,75366,75243],{"class":113},[103,75368,75369],{"class":172},"\u002F\u002Ffalse\n",[103,75371,75372],{"class":105,"line":1682},[103,75373,75374],{"class":172},"    \u002F\u002F 2.量词\n",[103,75376,75377],{"class":105,"line":1687},[103,75378,75379],{"class":172},"    \u002F\u002F 量词 * 类似于 >= 0\n",[103,75381,75382,75384,75386,75388,75390,75392,75394,75397,75399,75401,75403,75405,75407,75409],{"class":105,"line":1716},[103,75383,73743],{"class":113},[103,75385,58237],{"class":1952},[103,75387,114],{"class":113},[103,75389,697],{"class":218},[103,75391,1079],{"class":109},[103,75393,75228],{"class":47967},[103,75395,75396],{"class":109},"*$",[103,75398,697],{"class":218},[103,75400,671],{"class":113},[103,75402,75235],{"class":1952},[103,75404,114],{"class":113},[103,75406,75269],{"class":218},[103,75408,75243],{"class":113},[103,75410,75246],{"class":172},[103,75412,75413,75415,75417,75419,75421,75423,75425,75427,75429,75431,75433,75435,75438,75440],{"class":105,"line":1721},[103,75414,73743],{"class":113},[103,75416,58237],{"class":1952},[103,75418,114],{"class":113},[103,75420,697],{"class":218},[103,75422,1079],{"class":109},[103,75424,75228],{"class":47967},[103,75426,75396],{"class":109},[103,75428,697],{"class":218},[103,75430,671],{"class":113},[103,75432,75235],{"class":1952},[103,75434,114],{"class":113},[103,75436,75437],{"class":218},"'二哈好傻'",[103,75439,75243],{"class":113},[103,75441,75442],{"class":172},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[103,75444,75445,75447,75449,75451,75453,75455,75457,75459,75461,75463,75465,75467,75470,75472],{"class":105,"line":1738},[103,75446,73743],{"class":113},[103,75448,58237],{"class":1952},[103,75450,114],{"class":113},[103,75452,697],{"class":218},[103,75454,1079],{"class":109},[103,75456,75228],{"class":47967},[103,75458,75396],{"class":109},[103,75460,697],{"class":218},[103,75462,671],{"class":113},[103,75464,75235],{"class":1952},[103,75466,114],{"class":113},[103,75468,75469],{"class":218},"'哈好哈'",[103,75471,75299],{"class":113},[103,75473,75474],{"class":172},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[103,75476,75477],{"class":105,"line":1743},[103,75478,2389],{"emptyLinePlaceholder":30},[103,75480,75481],{"class":105,"line":1748},[103,75482,75483],{"class":172},"    \u002F\u002F +类似于>=1\n",[103,75485,75486,75488,75490,75492,75494,75496,75498,75501,75503,75505,75507,75509,75511,75513],{"class":105,"line":1753},[103,75487,73743],{"class":113},[103,75489,58237],{"class":1952},[103,75491,114],{"class":113},[103,75493,697],{"class":218},[103,75495,1079],{"class":109},[103,75497,75228],{"class":47967},[103,75499,75500],{"class":109},"+$",[103,75502,697],{"class":218},[103,75504,671],{"class":113},[103,75506,75235],{"class":1952},[103,75508,114],{"class":113},[103,75510,75269],{"class":218},[103,75512,75243],{"class":113},[103,75514,75246],{"class":172},[103,75516,75517,75519,75521,75523,75525,75527,75529,75531,75533,75535,75537,75539,75541,75543],{"class":105,"line":1767},[103,75518,73743],{"class":113},[103,75520,58237],{"class":1952},[103,75522,114],{"class":113},[103,75524,697],{"class":218},[103,75526,1079],{"class":109},[103,75528,75228],{"class":47967},[103,75530,75500],{"class":109},[103,75532,697],{"class":218},[103,75534,671],{"class":113},[103,75536,75235],{"class":1952},[103,75538,114],{"class":113},[103,75540,75437],{"class":218},[103,75542,75243],{"class":113},[103,75544,75442],{"class":172},[103,75546,75547,75549,75551,75553,75555,75557,75559,75561,75563,75565,75567,75569,75571,75573],{"class":105,"line":1772},[103,75548,73743],{"class":113},[103,75550,58237],{"class":1952},[103,75552,114],{"class":113},[103,75554,697],{"class":218},[103,75556,1079],{"class":109},[103,75558,75228],{"class":47967},[103,75560,75500],{"class":109},[103,75562,697],{"class":218},[103,75564,671],{"class":113},[103,75566,75235],{"class":1952},[103,75568,114],{"class":113},[103,75570,75469],{"class":218},[103,75572,75299],{"class":113},[103,75574,75369],{"class":172},[103,75576,75577],{"class":105,"line":2566},[103,75578,2389],{"emptyLinePlaceholder":30},[103,75580,75581],{"class":105,"line":2580},[103,75582,75583],{"class":172},"    \u002F\u002F ?类似于0次或一次\n",[103,75585,75586,75588,75590,75592,75594,75596,75599,75601,75603,75605,75607,75609,75611,75613],{"class":105,"line":2588},[103,75587,73743],{"class":113},[103,75589,58237],{"class":1952},[103,75591,114],{"class":113},[103,75593,697],{"class":218},[103,75595,1079],{"class":109},[103,75597,75598],{"class":47967},"哈？",[103,75600,415],{"class":109},[103,75602,697],{"class":218},[103,75604,671],{"class":113},[103,75606,75235],{"class":1952},[103,75608,114],{"class":113},[103,75610,74218],{"class":218},[103,75612,75299],{"class":113},[103,75614,75246],{"class":172},[103,75616,75617,75619,75621,75623,75625,75627,75629,75632,75634,75636,75638,75640,75642,75644],{"class":105,"line":2593},[103,75618,73743],{"class":113},[103,75620,58237],{"class":1952},[103,75622,114],{"class":113},[103,75624,697],{"class":218},[103,75626,1079],{"class":109},[103,75628,75228],{"class":47967},[103,75630,75631],{"class":109},"?$",[103,75633,697],{"class":218},[103,75635,671],{"class":113},[103,75637,75235],{"class":1952},[103,75639,114],{"class":113},[103,75641,75269],{"class":218},[103,75643,75243],{"class":113},[103,75645,75369],{"class":172},[103,75647,75648,75650,75652,75654,75656,75658,75660,75662,75664,75666,75668,75670,75672,75674],{"class":105,"line":2599},[103,75649,73743],{"class":113},[103,75651,58237],{"class":1952},[103,75653,114],{"class":113},[103,75655,697],{"class":218},[103,75657,1079],{"class":109},[103,75659,75228],{"class":47967},[103,75661,75631],{"class":109},[103,75663,697],{"class":218},[103,75665,671],{"class":113},[103,75667,75235],{"class":1952},[103,75669,114],{"class":113},[103,75671,75437],{"class":218},[103,75673,75243],{"class":113},[103,75675,75442],{"class":172},[103,75677,75678,75680,75682,75684,75686,75688,75690,75692,75694,75696,75698,75700,75702,75704],{"class":105,"line":2605},[103,75679,73743],{"class":113},[103,75681,58237],{"class":1952},[103,75683,114],{"class":113},[103,75685,697],{"class":218},[103,75687,1079],{"class":109},[103,75689,75228],{"class":47967},[103,75691,75631],{"class":109},[103,75693,697],{"class":218},[103,75695,671],{"class":113},[103,75697,75235],{"class":1952},[103,75699,114],{"class":113},[103,75701,75469],{"class":218},[103,75703,75243],{"class":113},[103,75705,75369],{"class":172},[103,75707,75708],{"class":105,"line":2610},[103,75709,2389],{"emptyLinePlaceholder":30},[103,75711,75712],{"class":105,"line":7938},[103,75713,75714],{"class":172},"    \u002F\u002F {n}写几，就必须出现几次\n",[103,75716,75717,75719,75721,75723,75725,75727,75729,75732,75734,75736,75738,75740,75743,75746],{"class":105,"line":7962},[103,75718,73743],{"class":113},[103,75720,58237],{"class":1952},[103,75722,114],{"class":113},[103,75724,697],{"class":218},[103,75726,1079],{"class":109},[103,75728,75228],{"class":47967},[103,75730,75731],{"class":109},"{4}$",[103,75733,697],{"class":218},[103,75735,671],{"class":113},[103,75737,75235],{"class":1952},[103,75739,114],{"class":113},[103,75741,75742],{"class":218},"'哈哈哈哈'",[103,75744,75745],{"class":113},")) ",[103,75747,75246],{"class":172},[103,75749,75750],{"class":105,"line":7967},[103,75751,2389],{"emptyLinePlaceholder":30},[103,75753,75754],{"class":105,"line":7973},[103,75755,75756],{"class":172},"    \u002F\u002F {n,}大于等于n次\n",[103,75758,75759,75761,75763,75765,75767,75769,75771,75774,75776,75778,75780,75782,75784,75786],{"class":105,"line":8000},[103,75760,73743],{"class":113},[103,75762,58237],{"class":1952},[103,75764,114],{"class":113},[103,75766,697],{"class":218},[103,75768,1079],{"class":109},[103,75770,75228],{"class":47967},[103,75772,75773],{"class":109},"{4,}$",[103,75775,697],{"class":218},[103,75777,671],{"class":113},[103,75779,75235],{"class":1952},[103,75781,114],{"class":113},[103,75783,75742],{"class":218},[103,75785,75745],{"class":113},[103,75787,75246],{"class":172},[103,75789,75790,75792,75794,75796,75798,75800,75802,75804,75806,75808,75810,75812,75815,75817],{"class":105,"line":8005},[103,75791,73743],{"class":113},[103,75793,58237],{"class":1952},[103,75795,114],{"class":113},[103,75797,697],{"class":218},[103,75799,1079],{"class":109},[103,75801,75228],{"class":47967},[103,75803,75773],{"class":109},[103,75805,697],{"class":218},[103,75807,671],{"class":113},[103,75809,75235],{"class":1952},[103,75811,114],{"class":113},[103,75813,75814],{"class":218},"'哈哈哈哈哈'",[103,75816,75745],{"class":113},[103,75818,75246],{"class":172},[103,75820,75821],{"class":105,"line":8011},[103,75822,2389],{"emptyLinePlaceholder":30},[103,75824,75825],{"class":105,"line":8023},[103,75826,75827],{"class":172},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[103,75829,75830,75832,75834,75836,75838,75840,75842,75845,75847,75849,75851,75853,75855,75857],{"class":105,"line":8035},[103,75831,73743],{"class":113},[103,75833,58237],{"class":1952},[103,75835,114],{"class":113},[103,75837,697],{"class":218},[103,75839,1079],{"class":109},[103,75841,75228],{"class":47967},[103,75843,75844],{"class":109},"{4,6}$",[103,75846,697],{"class":218},[103,75848,671],{"class":113},[103,75850,75235],{"class":1952},[103,75852,114],{"class":113},[103,75854,75742],{"class":218},[103,75856,75745],{"class":113},[103,75858,75246],{"class":172},[103,75860,75861,75863,75865,75867,75869,75871,75873,75875,75877,75879,75881,75883,75885,75887],{"class":105,"line":8047},[103,75862,73743],{"class":113},[103,75864,58237],{"class":1952},[103,75866,114],{"class":113},[103,75868,697],{"class":218},[103,75870,1079],{"class":109},[103,75872,75228],{"class":47967},[103,75874,75844],{"class":109},[103,75876,697],{"class":218},[103,75878,671],{"class":113},[103,75880,75235],{"class":1952},[103,75882,114],{"class":113},[103,75884,75814],{"class":218},[103,75886,75745],{"class":113},[103,75888,75246],{"class":172},[103,75890,75891,75893,75895,75897,75899,75901,75903,75905,75907,75909,75911,75913,75916,75918],{"class":105,"line":9706},[103,75892,73743],{"class":113},[103,75894,58237],{"class":1952},[103,75896,114],{"class":113},[103,75898,697],{"class":218},[103,75900,1079],{"class":109},[103,75902,75228],{"class":47967},[103,75904,75844],{"class":109},[103,75906,697],{"class":218},[103,75908,671],{"class":113},[103,75910,75235],{"class":1952},[103,75912,114],{"class":113},[103,75914,75915],{"class":218},"'哈哈哈哈哈哈哈'",[103,75917,75745],{"class":113},[103,75919,75369],{"class":172},[103,75921,75922],{"class":105,"line":9731},[103,75923,2389],{"emptyLinePlaceholder":30},[103,75925,75926],{"class":105,"line":9754},[103,75927,75928],{"class":172},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[103,75930,75931,75933,75935,75937,75939,75941,75944,75946,75948,75950,75952,75954,75957,75959],{"class":105,"line":9778},[103,75932,73743],{"class":113},[103,75934,58237],{"class":1952},[103,75936,114],{"class":113},[103,75938,697],{"class":218},[103,75940,1079],{"class":109},[103,75942,75943],{"class":162},"[abc]",[103,75945,415],{"class":109},[103,75947,697],{"class":218},[103,75949,671],{"class":113},[103,75951,75235],{"class":1952},[103,75953,114],{"class":113},[103,75955,75956],{"class":218},"'a'",[103,75958,75243],{"class":113},[103,75960,75246],{"class":172},[103,75962,75963,75965,75967,75969,75971,75973,75975,75977,75979,75981,75983,75985,75988,75990],{"class":105,"line":9783},[103,75964,73743],{"class":113},[103,75966,58237],{"class":1952},[103,75968,114],{"class":113},[103,75970,697],{"class":218},[103,75972,1079],{"class":109},[103,75974,75943],{"class":162},[103,75976,415],{"class":109},[103,75978,697],{"class":218},[103,75980,671],{"class":113},[103,75982,75235],{"class":1952},[103,75984,114],{"class":113},[103,75986,75987],{"class":218},"'b'",[103,75989,75243],{"class":113},[103,75991,75246],{"class":172},[103,75993,75994,75996,75998,76000,76002,76004,76006,76008,76010,76012,76014,76016,76019,76021],{"class":105,"line":9788},[103,75995,73743],{"class":113},[103,75997,58237],{"class":1952},[103,75999,114],{"class":113},[103,76001,697],{"class":218},[103,76003,1079],{"class":109},[103,76005,75943],{"class":162},[103,76007,415],{"class":109},[103,76009,697],{"class":218},[103,76011,671],{"class":113},[103,76013,75235],{"class":1952},[103,76015,114],{"class":113},[103,76017,76018],{"class":218},"'c'",[103,76020,75243],{"class":113},[103,76022,75246],{"class":172},[103,76024,76025,76027,76029,76031,76033,76035,76037,76039,76041,76043,76046,76048],{"class":105,"line":9793},[103,76026,73743],{"class":113},[103,76028,58237],{"class":1952},[103,76030,114],{"class":113},[103,76032,697],{"class":218},[103,76034,75943],{"class":162},[103,76036,697],{"class":218},[103,76038,671],{"class":113},[103,76040,75235],{"class":1952},[103,76042,114],{"class":113},[103,76044,76045],{"class":218},"'ab'",[103,76047,75243],{"class":113},[103,76049,75246],{"class":172},[103,76051,76052,76054,76056,76058,76060,76062,76064,76066,76068,76070,76072,76074,76076,76078],{"class":105,"line":9802},[103,76053,73743],{"class":113},[103,76055,58237],{"class":1952},[103,76057,114],{"class":113},[103,76059,697],{"class":218},[103,76061,1079],{"class":109},[103,76063,75943],{"class":162},[103,76065,415],{"class":109},[103,76067,697],{"class":218},[103,76069,671],{"class":113},[103,76071,75235],{"class":1952},[103,76073,114],{"class":113},[103,76075,76045],{"class":218},[103,76077,75243],{"class":113},[103,76079,76080],{"class":172},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[103,76082,76083,76085,76087,76089,76091,76093,76095,76098,76100,76102,76104,76106,76108,76110],{"class":105,"line":9807},[103,76084,73743],{"class":113},[103,76086,58237],{"class":1952},[103,76088,114],{"class":113},[103,76090,697],{"class":218},[103,76092,1079],{"class":109},[103,76094,75943],{"class":162},[103,76096,76097],{"class":109},"{2}$",[103,76099,697],{"class":218},[103,76101,671],{"class":113},[103,76103,75235],{"class":1952},[103,76105,114],{"class":113},[103,76107,76045],{"class":218},[103,76109,75243],{"class":113},[103,76111,76112],{"class":172},"\u002F\u002Ftrue   可以选两个\n",[103,76114,76115,76117,76119,76121,76123,76125,76128,76130,76132,76134,76136,76138,76141,76143],{"class":105,"line":9813},[103,76116,73743],{"class":113},[103,76118,58237],{"class":1952},[103,76120,114],{"class":113},[103,76122,697],{"class":218},[103,76124,1079],{"class":109},[103,76126,76127],{"class":162},"[a-z]",[103,76129,415],{"class":109},[103,76131,697],{"class":218},[103,76133,671],{"class":113},[103,76135,75235],{"class":1952},[103,76137,114],{"class":113},[103,76139,76140],{"class":218},"'p'",[103,76142,75299],{"class":113},[103,76144,76145],{"class":172},"\u002F\u002Ftrue   依然只能选一个\n",[103,76147,76148,76150,76152,76154,76156,76158,76161,76163,76165,76167,76169,76171,76173,76175],{"class":105,"line":9834},[103,76149,73743],{"class":113},[103,76151,58237],{"class":1952},[103,76153,114],{"class":113},[103,76155,697],{"class":218},[103,76157,1079],{"class":109},[103,76159,76160],{"class":162},"[A-Z]",[103,76162,415],{"class":109},[103,76164,697],{"class":218},[103,76166,671],{"class":113},[103,76168,75235],{"class":1952},[103,76170,114],{"class":113},[103,76172,76140],{"class":218},[103,76174,75299],{"class":113},[103,76176,75369],{"class":172},[103,76178,76179,76181,76183,76185,76187,76189,76191,76193,76195,76197,76199,76201,76204,76206],{"class":105,"line":9840},[103,76180,73743],{"class":113},[103,76182,58237],{"class":1952},[103,76184,114],{"class":113},[103,76186,697],{"class":218},[103,76188,1079],{"class":109},[103,76190,76160],{"class":162},[103,76192,415],{"class":109},[103,76194,697],{"class":218},[103,76196,671],{"class":113},[103,76198,75235],{"class":1952},[103,76200,114],{"class":113},[103,76202,76203],{"class":218},"'P'",[103,76205,75299],{"class":113},[103,76207,75246],{"class":172},[103,76209,76210,76212,76214,76216,76218,76220,76223,76225,76227,76229,76231,76233,76236,76238],{"class":105,"line":9854},[103,76211,73743],{"class":113},[103,76213,58237],{"class":1952},[103,76215,114],{"class":113},[103,76217,697],{"class":218},[103,76219,1079],{"class":109},[103,76221,76222],{"class":162},"[0-9]",[103,76224,415],{"class":109},[103,76226,697],{"class":218},[103,76228,671],{"class":113},[103,76230,75235],{"class":1952},[103,76232,114],{"class":113},[103,76234,76235],{"class":218},"'0'",[103,76237,75299],{"class":113},[103,76239,75246],{"class":172},[103,76241,76242,76244,76246,76248,76250,76252,76255,76257,76259,76261,76263,76265,76267,76269],{"class":105,"line":9860},[103,76243,73743],{"class":113},[103,76245,58237],{"class":1952},[103,76247,114],{"class":113},[103,76249,697],{"class":218},[103,76251,1079],{"class":109},[103,76253,76254],{"class":162},"[a-zA-Z0-9]",[103,76256,415],{"class":109},[103,76258,697],{"class":218},[103,76260,671],{"class":113},[103,76262,75235],{"class":1952},[103,76264,114],{"class":113},[103,76266,76140],{"class":218},[103,76268,75243],{"class":113},[103,76270,75246],{"class":172},[103,76272,76273,76275,76277],{"class":105,"line":9887},[103,76274,52407],{"class":113},[103,76276,51803],{"class":51290},[103,76278,51297],{"class":113},[103,76280,76281,76283,76285],{"class":105,"line":9896},[103,76282,51775],{"class":113},[103,76284,51790],{"class":51290},[103,76286,51297],{"class":113},[103,76288,76289],{"class":105,"line":9902},[103,76290,2389],{"emptyLinePlaceholder":30},[103,76292,76293,76295,76297],{"class":105,"line":9910},[103,76294,51775],{"class":113},[103,76296,50625],{"class":51290},[103,76298,51297],{"class":113},[21988,76300,76302],{"id":76301},"_3624-修饰符","3.6.2.4 修饰符",[14,76304,76305],{},[1451,76306],{"alt":24,"src":76307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76309,76310],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76312,76313],{},[1451,76314],{"alt":24,"src":76315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[94,76317,76319],{"className":50623,"code":76318,"language":50625,"meta":24,"style":24},"\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",[100,76320,76321,76331,76345,76353,76367,76387,76399,76407,76415,76423,76455,76486,76491,76523,76534,76567,76576,76584,76592],{"__ignoreMap":24},[103,76322,76323,76325,76327,76329],{"class":105,"line":106},[103,76324,51287],{"class":113},[103,76326,51291],{"class":51290},[103,76328,51294],{"class":1952},[103,76330,51297],{"class":113},[103,76332,76333,76335,76337,76339,76341,76343],{"class":105,"line":25},[103,76334,1023],{"class":113},[103,76336,50625],{"class":51290},[103,76338,51306],{"class":1952},[103,76340,159],{"class":113},[103,76342,51311],{"class":218},[103,76344,51297],{"class":113},[103,76346,76347,76349,76351],{"class":105,"line":1168},[103,76348,1023],{"class":113},[103,76350,51324],{"class":51290},[103,76352,51297],{"class":113},[103,76354,76355,76357,76359,76361,76363,76365],{"class":105,"line":1183},[103,76356,52134],{"class":113},[103,76358,51334],{"class":51290},[103,76360,51337],{"class":1952},[103,76362,159],{"class":113},[103,76364,51342],{"class":218},[103,76366,51297],{"class":113},[103,76368,76369,76371,76373,76375,76377,76379,76381,76383,76385],{"class":105,"line":1189},[103,76370,52134],{"class":113},[103,76372,51334],{"class":51290},[103,76374,14910],{"class":1952},[103,76376,159],{"class":113},[103,76378,51381],{"class":218},[103,76380,51361],{"class":1952},[103,76382,159],{"class":113},[103,76384,51388],{"class":218},[103,76386,51297],{"class":113},[103,76388,76389,76391,76393,76395,76397],{"class":105,"line":1203},[103,76390,52134],{"class":113},[103,76392,51397],{"class":51290},[103,76394,51400],{"class":113},[103,76396,51397],{"class":51290},[103,76398,51297],{"class":113},[103,76400,76401,76403,76405],{"class":105,"line":1209},[103,76402,51775],{"class":113},[103,76404,51324],{"class":51290},[103,76406,51297],{"class":113},[103,76408,76409,76411,76413],{"class":105,"line":1300},[103,76410,1023],{"class":113},[103,76412,51790],{"class":51290},[103,76414,51297],{"class":113},[103,76416,76417,76419,76421],{"class":105,"line":1306},[103,76418,52134],{"class":113},[103,76420,51803],{"class":51290},[103,76422,51297],{"class":113},[103,76424,76425,76427,76429,76431,76433,76435,76438,76440,76442,76444,76446,76448,76451,76453],{"class":105,"line":1318},[103,76426,73743],{"class":113},[103,76428,58237],{"class":1952},[103,76430,114],{"class":113},[103,76432,697],{"class":218},[103,76434,1079],{"class":109},[103,76436,76437],{"class":47967},"java",[103,76439,415],{"class":109},[103,76441,697],{"class":218},[103,76443,671],{"class":113},[103,76445,75235],{"class":1952},[103,76447,114],{"class":113},[103,76449,76450],{"class":218},"'java'",[103,76452,75745],{"class":113},[103,76454,75246],{"class":172},[103,76456,76457,76459,76461,76463,76465,76467,76469,76471,76473,76475,76477,76479,76482,76484],{"class":105,"line":1601},[103,76458,73743],{"class":113},[103,76460,58237],{"class":1952},[103,76462,114],{"class":113},[103,76464,697],{"class":218},[103,76466,1079],{"class":109},[103,76468,76437],{"class":47967},[103,76470,415],{"class":109},[103,76472,697],{"class":218},[103,76474,671],{"class":113},[103,76476,75235],{"class":1952},[103,76478,114],{"class":113},[103,76480,76481],{"class":218},"'Java'",[103,76483,75745],{"class":113},[103,76485,75369],{"class":172},[103,76487,76488],{"class":105,"line":1606},[103,76489,76490],{"class":172},"    \u002F\u002F 不区分大小写、\n",[103,76492,76493,76495,76497,76499,76501,76503,76505,76507,76509,76511,76513,76515,76517,76519,76521],{"class":105,"line":1612},[103,76494,73743],{"class":113},[103,76496,58237],{"class":1952},[103,76498,114],{"class":113},[103,76500,697],{"class":218},[103,76502,1079],{"class":109},[103,76504,76437],{"class":47967},[103,76506,415],{"class":109},[103,76508,697],{"class":218},[103,76510,554],{"class":109},[103,76512,671],{"class":113},[103,76514,75235],{"class":1952},[103,76516,114],{"class":113},[103,76518,76481],{"class":218},[103,76520,75745],{"class":113},[103,76522,75246],{"class":172},[103,76524,76525,76527,76529,76531],{"class":105,"line":1617},[103,76526,11211],{"class":109},[103,76528,73909],{"class":162},[103,76530,13554],{"class":109},[103,76532,76533],{"class":218}," 'java是一门编程语言，学完java工资很高'\n",[103,76535,76536,76538,76541,76543,76546,76549,76551,76553,76555,76557,76560,76562,76565],{"class":105,"line":1631},[103,76537,11211],{"class":109},[103,76539,76540],{"class":162}," result",[103,76542,13554],{"class":109},[103,76544,76545],{"class":113}," str.",[103,76547,76548],{"class":1952},"replace",[103,76550,114],{"class":113},[103,76552,697],{"class":218},[103,76554,76437],{"class":47967},[103,76556,697],{"class":218},[103,76558,76559],{"class":109},"ig",[103,76561,12425],{"class":113},[103,76563,76564],{"class":218},"'前端'",[103,76566,120],{"class":113},[103,76568,76569,76571,76573],{"class":105,"line":1636},[103,76570,73743],{"class":113},[103,76572,58237],{"class":1952},[103,76574,76575],{"class":113},"(result)\n",[103,76577,76578,76580,76582],{"class":105,"line":1642},[103,76579,52407],{"class":113},[103,76581,51803],{"class":51290},[103,76583,51297],{"class":113},[103,76585,76586,76588,76590],{"class":105,"line":1663},[103,76587,51775],{"class":113},[103,76589,51790],{"class":51290},[103,76591,51297],{"class":113},[103,76593,76594,76596,76598],{"class":105,"line":1668},[103,76595,51775],{"class":113},[103,76597,50625],{"class":51290},[103,76599,51297],{"class":113},[5116,76601,76602],{},"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":24,"searchDepth":25,"depth":25,"links":76604},[76605,76615,76627,76644,76651,76659],{"id":53350,"depth":25,"text":53351,"children":76606},[76607,76608,76609,76610,76611,76612,76613,76614],{"id":53354,"depth":1168,"text":53355},{"id":53387,"depth":1168,"text":53388},{"id":53426,"depth":1168,"text":53427},{"id":53584,"depth":1168,"text":53585},{"id":53632,"depth":1168,"text":53633},{"id":53769,"depth":1168,"text":53770},{"id":54091,"depth":1168,"text":54092},{"id":57079,"depth":1168,"text":57080},{"id":57107,"depth":25,"text":57108,"children":76616},[76617,76618,76619,76620,76621,76622,76623,76624,76625,76626],{"id":57111,"depth":1168,"text":57112},{"id":57134,"depth":1168,"text":57135},{"id":58049,"depth":1168,"text":58050},{"id":58739,"depth":1168,"text":58740},{"id":59021,"depth":1168,"text":59022},{"id":63182,"depth":1168,"text":63183},{"id":63352,"depth":1168,"text":63353},{"id":63480,"depth":1168,"text":63481},{"id":63505,"depth":1168,"text":63506},{"id":64894,"depth":1168,"text":64895},{"id":66047,"depth":25,"text":66048,"children":76628},[76629,76630,76631,76632,76633,76634,76635,76636,76637,76638,76639,76640,76641,76642,76643],{"id":66051,"depth":1168,"text":66052},{"id":66705,"depth":1168,"text":66706},{"id":68400,"depth":1168,"text":68401},{"id":68441,"depth":1168,"text":68442},{"id":68483,"depth":1168,"text":68484},{"id":68497,"depth":1168,"text":68498},{"id":68546,"depth":1168,"text":68547},{"id":68558,"depth":1168,"text":68559},{"id":68573,"depth":1168,"text":68574},{"id":68609,"depth":1168,"text":68610},{"id":68690,"depth":1168,"text":68691},{"id":68818,"depth":1168,"text":68819},{"id":68830,"depth":1168,"text":68831},{"id":68849,"depth":1168,"text":68850},{"id":70960,"depth":1168,"text":70961},{"id":70979,"depth":25,"text":70980,"children":76645},[76646,76647,76648,76649,76650],{"id":71000,"depth":1168,"text":71001},{"id":71020,"depth":1168,"text":71021},{"id":71069,"depth":1168,"text":71070},{"id":71194,"depth":1168,"text":71195},{"id":71375,"depth":1168,"text":71376},{"id":71393,"depth":25,"text":71394,"children":76652},[76653,76654,76655,76656,76657,76658],{"id":71408,"depth":1168,"text":71409},{"id":71467,"depth":1168,"text":71468},{"id":71491,"depth":1168,"text":71492},{"id":71811,"depth":1168,"text":71812},{"id":71843,"depth":1168,"text":71844},{"id":71866,"depth":1168,"text":71867},{"id":74934,"depth":25,"text":74935,"children":76660},[76661,76662],{"id":74968,"depth":1168,"text":74969},{"id":75007,"depth":1168,"text":75008},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53322,"description":27},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76669,"title":76670,"body":76671,"description":27,"extension":28,"meta":92808,"navigation":30,"path":92809,"seo":92810,"stem":92811,"__hash__":92812},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76672,"toc":92744},[76673,76676,76679,76683,76687,76692,76697,76708,76712,76717,76720,76724,76727,76732,76736,76740,76743,76748,76751,76755,76758,76766,76769,76773,76778,76783,76786,76790,76795,76800,76803,76807,76812,76815,76820,76823,76828,76831,76836,76841,76844,76847,76851,76856,76861,76864,76868,76872,76875,76878,76881,76885,76889,76894,76899,76902,76906,76911,76916,76919,76922,76925,76928,76931,76934,76937,76940,76943,76948,76952,76957,76962,76965,76968,76971,76974,76977,76980,76983,76986,76990,76994,76997,77000,77003,77008,77010,77013,77016,77019,77022,77025,77028,77031,77034,77037,77040,77043,77046,77049,77054,77059,77064,77067,77071,77074,77079,77083,77085,77096,77101,77202,77205,77208,77211,77214,77217,77220,77223,77226,77228,77231,77234,77237,77240,77243,77245,77248,77251,77254,77257,77260,77263,77265,77268,77270,77272,77275,77279,77283,77286,77289,77292,77295,77298,77301,77304,77307,77310,77315,77435,77438,77441,77446,77449,77452,77455,77458,77463,77466,77469,77472,77475,77480,77483,77583,77648,77722,77726,77729,77732,77736,77739,77753,77782,77785,77788,77791,77794,77797,77800,77803,77805,77808,77811,77814,77817,77821,77826,77830,77835,77910,77913,78096,78099,78102,78105,78108,78111,78113,78116,78119,78122,78125,78128,78131,78133,78137,78140,78145,78148,78151,78154,78157,78159,78164,78167,78170,78173,78176,78178,78183,78186,78189,78191,78193,78196,78200,78203,78206,78211,78214,78217,78220,78270,78275,78279,78284,78287,78356,78359,78368,78372,78377,78380,78383,78391,78394,78411,80213,80217,80221,80226,80229,80233,80239,80245,80397,80402,80407,80410,80413,80416,80419,80422,80425,80428,80431,80434,80437,80440,80443,80448,80452,80455,80466,80470,80475,80478,80481,80484,80487,80490,80492,80495,80498,80501,80504,80506,80523,80526,80530,80533,80538,80543,80546,80549,80553,80556,80559,80568,80571,80575,80578,80583,80588,80655,80659,80662,80665,80670,80675,80761,80766,80770,80773,80776,80791,80794,80799,80803,80808,80917,80920,80931,81081,81085,81090,81199,81203,81208,81213,81218,81221,81228,81248,81284,81448,81453,81456,81461,81468,81471,81474,81477,81536,81592,81648,81652,81657,81972,81975,81979,81982,81987,82096,82101,82105,82110,82114,82185,82189,82191,82194,82197,82235,82511,82515,82532,82598,82632,82636,82639,82644,82673,82680,82689,82694,82709,82714,82723,82726,82863,82867,82929,82933,82938,83183,83187,83192,83195,83198,83201,83204,83208,83213,84794,84798,84802,84808,84811,84816,84820,84823,84828,84831,84842,84846,84851,84855,84860,84865,84868,84873,84877,84881,84884,84889,84894,84897,84900,84903,85025,85030,85132,85135,85138,85142,85147,85319,85324,85328,85331,85336,85402,85407,85410,85541,85544,85549,85552,85555,85646,85651,85654,85657,85660,85663,85668,85673,85676,85681,85686,85691,85695,85698,85701,85706,85711,85716,85721,85775,85778,85781,85786,85789,85792,85797,85802,85807,85811,85816,85830,85835,85838,85843,85847,85852,85857,85862,85867,85872,85877,85882,85887,85890,85894,85899,85902,85905,85908,85913,85918,85921,85924,85928,85931,85934,85939,85944,85949,85954,85957,85962,85967,86028,86033,86036,86041,87282,87287,87291,87295,87300,87303,87308,87313,87316,87321,87323,87328,87332,87335,87338,87349,87353,87358,87363,87418,87423,87428,87433,87644,87649,87653,87658,87661,87663,87666,87669,88116,88121,88128,88134,88137,88140,88404,88409,88413,88678,88683,88687,88692,88697,88702,88707,89038,89041,89046,89051,89054,89058,89062,89067,89072,89077,89082,89087,89092,89096,89099,89104,89109,89112,89186,89191,89196,89201,89203,89206,89576,89581,89586,89591,89594,89597,89699,89704,89709,89812,89816,89821,89825,89829,89834,89839,89842,89847,89850,89853,90246,90251,90254,90257,90260,90263,90783,90787,90792,90797,90802,90805,90810,90813,90816,91198,91203,91205,91207,91210,91213,91725,91729,91790,91793,91796,91799,91803,91806,91811,91816,92741],[10,76674,76670],{"id":76675},"_4js进阶",[14,76677,76678],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[45,76680,76682],{"id":76681},"_41-作用域","4.1 作用域",[74,76684,76686],{"id":76685},"_411-局部作用域","4.1.1 局部作用域",[14,76688,76689],{},[1451,76690],{"alt":24,"src":76691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76693,76694],{},[1451,76695],{"alt":24,"src":76696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1120,76698,76699,76702,76705],{},[60,76700,76701],{},"函数作用域在函数内部",[60,76703,76704],{},"块级作用域在{}",[60,76706,76707],{},"对象的那个{}不是作用域，不是块作用域",[74,76709,76711],{"id":76710},"_412-全局作用域","4.1.2 全局作用域",[14,76713,76714],{},[1451,76715],{"alt":24,"src":76716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76718,76719],{},"window.a=10不要这样写",[74,76721,76723],{"id":76722},"_413-作用域链","4.1.3 作用域链",[14,76725,76726],{},"变量查找机制",[14,76728,76729],{},[1451,76730],{"alt":24,"src":76731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[45,76733,76735],{"id":76734},"_42-垃圾回收机制","4.2 垃圾回收机制",[74,76737,76739],{"id":76738},"_421-大体介绍","4.2.1 大体介绍",[14,76741,76742],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76744,76745],{},[1451,76746],{"alt":24,"src":76747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76749,76750],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[74,76752,76754],{"id":76753},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76756,76757],{},"堆栈空间分配区别：",[57,76759,76760,76763],{},[60,76761,76762],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[60,76764,76765],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76767,76768],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21988,76770,76772],{"id":76771},"_4221-引用计数","4.2.2.1 引用计数",[14,76774,76775],{},[1451,76776],{"alt":24,"src":76777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76779,76780],{},[1451,76781],{"alt":24,"src":76782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76784,76785],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21988,76787,76789],{"id":76788},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76791,76792],{},[1451,76793],{"alt":24,"src":76794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76796,76797],{},[1451,76798],{"alt":24,"src":76799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76801,76802],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[45,76804,76806],{"id":76805},"_43-闭包","4.3 闭包",[14,76808,76809],{},[1451,76810],{"alt":24,"src":76811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76813,76814],{},"闭包：内层函数+外层函数的变量",[14,76816,76817],{},[1451,76818],{"alt":24,"src":76819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76821,76822],{},"closure就是闭包",[14,76824,76825],{},[1451,76826],{"alt":24,"src":76827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76829,76830],{},"内层函数必须包含外层函数的变量才是闭包",[14,76832,76833],{},[1451,76834],{"alt":24,"src":76835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76837,76838],{},[1451,76839],{"alt":24,"src":76840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76842,76843],{},"闭包可能会引起内存泄漏",[14,76845,76846],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[45,76848,76850],{"id":76849},"_44-变量提升","4.4 变量提升",[14,76852,76853],{},[1451,76854],{"alt":24,"src":76855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76857,76858],{},[1451,76859],{"alt":24,"src":76860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76862,76863],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[45,76865,76867],{"id":76866},"_45-函数进阶","4.5 函数进阶",[74,76869,76871],{"id":76870},"_451-函数提升","4.5.1 函数提升",[14,76873,76874],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76876,76877],{},"只提升函数声明，不提升函数调用",[51803,76879,76880],{},"\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",[74,76882,76884],{"id":76883},"_452-函数参数","4.5.2 函数参数",[21988,76886,76888],{"id":76887},"_4521-动态参数","4.5.2.1 动态参数",[14,76890,76891],{},[1451,76892],{"alt":24,"src":76893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76895,76896],{},[1451,76897],{"alt":24,"src":76898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76900,76901],{},"箭头函数里边没有arguments",[21988,76903,76905],{"id":76904},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76907,76908],{},[1451,76909],{"alt":24,"src":76910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76912,76913],{},[1451,76914],{"alt":24,"src":76915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76917,76918],{},"剩余参数使用的时候不需要写...",[14,76920,76921],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,76923,76924],{},"  function getSum(a,b,...arr) {",[14,76926,76927],{},"  console.log(11)",[14,76929,76930],{},"  }",[14,76932,76933],{},"  getSum(1,2,3,4)",[14,76935,76936],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,76938,76939],{},"  getSum(1,2)",[14,76941,76942],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,76944,76945],{},[1451,76946],{"alt":24,"src":76947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21988,76949,76951],{"id":76950},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,76953,76954],{},[1451,76955],{"alt":24,"src":76956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,76958,76959],{},[1451,76960],{"alt":24,"src":76961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,76963,76964],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,76966,76967],{},"展开运算符可以用于数组之间的合并：",[14,76969,76970],{},"const arr1 = [1, 2, 3]",[14,76972,76973],{},"const arr2 = [3, 4, 5]",[14,76975,76976],{},"const arr = [...arr1, ...arr2]",[14,76978,76979],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,76981,76982],{},"剩余参数：函数参数使用，得到真数组",[14,76984,76985],{},"展开运算符：数组中使用，数组展开",[74,76987,76989],{"id":76988},"_453-箭头函数","4.5.3 箭头函数",[21988,76991,76993],{"id":76992},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,76995,76996],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,76998,76999],{},"它不是万能的！！！",[14,77001,77002],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77004,77005],{},[1451,77006],{"alt":24,"src":77007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77009,143],{},[14,77011,77012],{},"① 只有一个形参的时候，可以省略小括号：",[14,77014,77015],{},"const fn=x=>{console.log(x)}",[14,77017,77018],{},"② 只有一行代码时可以省略大括号：",[14,77020,77021],{},"const fn=x=>console.log(11)",[14,77023,77024],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77026,77027],{},"const fn=x=>x+x",[14,77029,77030],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77032,77033],{},"⑤ 阻止表单默认提交：",[14,77035,77036],{},"const form = document.querySelector('form')",[14,77038,77039],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77041,77042],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77044,77045],{},"const fn=uname=>({uname:uname})",[14,77047,77048],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77050,77051],{},[1451,77052],{"alt":24,"src":77053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77055,77056],{},[1451,77057],{"alt":24,"src":77058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77060,77061],{},[1451,77062],{"alt":24,"src":77063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77065,77066],{},"一定不要忘记用()，有()就理解为自带return",[21988,77068,77070],{"id":77069},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77072,77073],{},"箭头函数是没有动态参数的arguments",[14,77075,77076],{},[1451,77077],{"alt":24,"src":77078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21988,77080,77082],{"id":77081},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77084,11322],{},[57,77086,77087,77090,77093],{},[60,77088,77089],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[60,77091,77092],{},"事件回调函数使用箭头函数时，this 为全局的 window",[60,77094,77095],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77097,77098],{},[1451,77099],{"alt":24,"src":77100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[94,77102,77104],{"className":53057,"code":77103,"language":53059,"meta":24,"style":24},"  \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",[100,77105,77106,77114,77119,77124,77129,77134,77139,77143,77148,77152,77156,77161,77166,77171,77175,77179,77184,77189,77194],{"__ignoreMap":24},[103,77107,77108,77110,77112],{"class":105,"line":106},[103,77109,52134],{"class":113},[103,77111,51803],{"class":51290},[103,77113,51297],{"class":113},[103,77115,77116],{"class":105,"line":25},[103,77117,77118],{"class":113},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[103,77120,77121],{"class":105,"line":1168},[103,77122,77123],{"class":113},"    console.log(this) \u002F\u002F指向window\n",[103,77125,77126],{"class":105,"line":1183},[103,77127,77128],{"class":113},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[103,77130,77131],{"class":105,"line":1189},[103,77132,77133],{"class":113},"    function fn() {\n",[103,77135,77136],{"class":105,"line":1203},[103,77137,77138],{"class":113},"      console.log(this)  \u002F\u002F指向window\n",[103,77140,77141],{"class":105,"line":1209},[103,77142,2176],{"class":113},[103,77144,77145],{"class":105,"line":1300},[103,77146,77147],{"class":113},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[103,77149,77150],{"class":105,"line":1306},[103,77151,2389],{"emptyLinePlaceholder":30},[103,77153,77154],{"class":105,"line":1318},[103,77155,71513],{"class":113},[103,77157,77158],{"class":105,"line":1601},[103,77159,77160],{"class":113},"      name: 'andy',\n",[103,77162,77163],{"class":105,"line":1606},[103,77164,77165],{"class":113},"      sayHai: function () {\n",[103,77167,77168],{"class":105,"line":1612},[103,77169,77170],{"class":113},"        console.log(this)\n",[103,77172,77173],{"class":105,"line":1617},[103,77174,52388],{"class":113},[103,77176,77177],{"class":105,"line":1631},[103,77178,2176],{"class":113},[103,77180,77181],{"class":105,"line":1636},[103,77182,77183],{"class":113},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[103,77185,77186],{"class":105,"line":1642},[103,77187,77188],{"class":113},"    \u002F\u002F 2.箭头函数的this\n",[103,77190,77191],{"class":105,"line":1663},[103,77192,77193],{"class":113},"    const fn = () => console.log(this)\n",[103,77195,77196,77198,77200],{"class":105,"line":1668},[103,77197,52407],{"class":113},[103,77199,51803],{"class":51290},[103,77201,51297],{"class":113},[14,77203,77204],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77206,77207],{},"const fn = () => console.log(this)",[14,77209,77210],{},"fn() \u002F\u002F指向window",[14,77212,77213],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77215,77216],{},"①",[14,77218,77219],{},"const obj = {",[14,77221,77222],{},"uname: 'pink老师',",[14,77224,77225],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77227,1059],{},[14,77229,77230],{},"调用对象里边的函数",[14,77232,77233],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77235,77236],{},"obj.sayHai()",[14,77238,77239],{},"②",[14,77241,77242],{},"const obj1 = {",[14,77244,77222],{},[14,77246,77247],{},"sayHai: function () {",[14,77249,77250],{},"let i = 10",[14,77252,77253],{},"const count = () => {",[14,77255,77256],{},"console.log(this)",[14,77258,77259],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77261,77262],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77264,1059],{},[14,77266,77267],{},"count()",[14,77269,1059],{},[14,77271,1059],{},[14,77273,77274],{},"obj1.sayHai()",[45,77276,77278],{"id":77277},"_46-解构赋值","4.6 解构赋值",[74,77280,77282],{"id":77281},"_461-数组解构","4.6.1 数组解构",[14,77284,77285],{},"以前要是使用数组中的值的话：",[14,77287,77288],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77290,77291],{},"const arr=[100,60,80]",[14,77293,77294],{},"const max=arr[0]",[14,77296,77297],{},"const min=arr[1]",[14,77299,77300],{},"const avg=arr[2]",[14,77302,77303],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77305,77306],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77308,77309],{},"这个写法就类似于上边的那种用很多const的方法",[14,77311,77312],{},[1451,77313],{"alt":24,"src":77314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[94,77316,77318],{"className":50623,"code":77317,"language":50625,"meta":24,"style":24},"①变量之间交换值:\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",[100,77319,77320,77325,77330,77335,77340,77345,77349,77353,77358,77362,77367,77372,77376,77381,77386,77397,77407,77412,77417,77422,77426,77430],{"__ignoreMap":24},[103,77321,77322],{"class":105,"line":106},[103,77323,77324],{"class":113},"①变量之间交换值:\n",[103,77326,77327],{"class":105,"line":25},[103,77328,77329],{"class":113},"let a=1\n",[103,77331,77332],{"class":105,"line":1168},[103,77333,77334],{"class":113},"let b=2;\n",[103,77336,77337],{"class":105,"line":1183},[103,77338,77339],{"class":113},"必须加这行代码，不然就会报错\n",[103,77341,77342],{"class":105,"line":1189},[103,77343,77344],{"class":113},"[b,a]=[a,b]\n",[103,77346,77347],{"class":105,"line":1203},[103,77348,2389],{"emptyLinePlaceholder":30},[103,77350,77351],{"class":105,"line":1209},[103,77352,2389],{"emptyLinePlaceholder":30},[103,77354,77355],{"class":105,"line":1300},[103,77356,77357],{"class":113},"可以写成下面的方式：\n",[103,77359,77360],{"class":105,"line":1306},[103,77361,77329],{"class":113},[103,77363,77364],{"class":105,"line":1318},[103,77365,77366],{"class":113},"let b=2\n",[103,77368,77369],{"class":105,"line":1601},[103,77370,77371],{"class":113},";[b,a]=[a,b]\n",[103,77373,77374],{"class":105,"line":1606},[103,77375,2389],{"emptyLinePlaceholder":30},[103,77377,77378],{"class":105,"line":1612},[103,77379,77380],{"class":113},"②排序\n",[103,77382,77383],{"class":105,"line":1617},[103,77384,77385],{"class":113},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[103,77387,77388,77391,77394],{"class":105,"line":1631},[103,77389,77390],{"class":113},"for (let i = 0; i ",[103,77392,1023],{"class":77393},"s7hpK",[103,77395,77396],{"class":113}," arr1.length; i++) {\n",[103,77398,77399,77402,77404],{"class":105,"line":1636},[103,77400,77401],{"class":113},"   for (let j = 0; j ",[103,77403,1023],{"class":77393},[103,77405,77406],{"class":113}," arr1.length - 1; j++) {\n",[103,77408,77409],{"class":105,"line":1642},[103,77410,77411],{"class":113},"      if (arr1[j] > arr1[j + 1]) {\n",[103,77413,77414],{"class":105,"line":1663},[103,77415,77416],{"class":113},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[103,77418,77419],{"class":105,"line":1668},[103,77420,77421],{"class":113},"       }\n",[103,77423,77424],{"class":105,"line":1682},[103,77425,4298],{"class":113},[103,77427,77428],{"class":105,"line":1687},[103,77429,1554],{"class":113},[103,77431,77432],{"class":105,"line":1716},[103,77433,77434],{"class":113},"console.log(arr1)\n",[14,77436,77437],{},"数组解构的细节：",[14,77439,77440],{},"①变量多，单元值少",[14,77442,77443],{},[1451,77444],{"alt":24,"src":77445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77447,77448],{},"防止出现undefined的方法：",[14,77450,77451],{},"const [a=0,b=0] =[1]",[14,77453,77454],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77456,77457],{},"②变量少，单元值多",[14,77459,77460],{},[1451,77461],{"alt":24,"src":77462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77464,77465],{},"此时可以使用剩余参数来接收多余的值",[14,77467,77468],{},"const [a,b,...c]=[1,2,3,4]",[14,77470,77471],{},"console.log(c) 输出[3,4]",[14,77473,77474],{},"③可以按需导入，忽略某些返回值",[14,77476,77477],{},[1451,77478],{"alt":24,"src":77479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77481,77482],{},"④支持多维数组的结构",[94,77484,77488],{"className":77485,"code":77486,"language":77487,"meta":24,"style":24},"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",[100,77489,77490,77518,77534,77549,77564],{"__ignoreMap":24},[103,77491,77492,77494,77496,77498,77500,77502,77504,77506,77509,77511,77513,77515],{"class":105,"line":106},[103,77493,6782],{"class":109},[103,77495,51823],{"class":113},[103,77497,159],{"class":109},[103,77499,52216],{"class":113},[103,77501,331],{"class":162},[103,77503,12425],{"class":113},[103,77505,191],{"class":162},[103,77507,77508],{"class":113},", [",[103,77510,185],{"class":162},[103,77512,12425],{"class":113},[103,77514,406],{"class":162},[103,77516,77517],{"class":113},"]]\n",[103,77519,77520,77523,77525,77527,77529,77531],{"class":105,"line":25},[103,77521,77522],{"class":113},"console.",[103,77524,58237],{"class":1952},[103,77526,3840],{"class":113},[103,77528,305],{"class":162},[103,77530,4205],{"class":113},[103,77532,77533],{"class":172},"  \u002F\u002F1\n",[103,77535,77536,77538,77540,77542,77544,77546],{"class":105,"line":1168},[103,77537,77522],{"class":113},[103,77539,58237],{"class":1952},[103,77541,3840],{"class":113},[103,77543,331],{"class":162},[103,77545,4205],{"class":113},[103,77547,77548],{"class":172},"  \u002F\u002F2\n",[103,77550,77551,77553,77555,77557,77559,77561],{"class":105,"line":1183},[103,77552,77522],{"class":113},[103,77554,58237],{"class":1952},[103,77556,3840],{"class":113},[103,77558,191],{"class":162},[103,77560,4205],{"class":113},[103,77562,77563],{"class":172},"  \u002F\u002F[3,4]\n",[103,77565,77566,77568,77570,77572,77574,77576,77578,77580],{"class":105,"line":1189},[103,77567,77522],{"class":113},[103,77569,58237],{"class":1952},[103,77571,3840],{"class":113},[103,77573,191],{"class":162},[103,77575,4890],{"class":113},[103,77577,305],{"class":162},[103,77579,4205],{"class":113},[103,77581,77582],{"class":172},"  \u002F\u002F3\n",[94,77584,77586],{"className":77485,"code":77585,"language":77487,"meta":24,"style":24},"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",[100,77587,77588,77615,77626,77637],{"__ignoreMap":24},[103,77589,77590,77592,77595,77597,77599,77601,77603,77605,77607,77609,77611,77613],{"class":105,"line":106},[103,77591,6782],{"class":109},[103,77593,77594],{"class":113}," [a, b, c] ",[103,77596,159],{"class":109},[103,77598,52216],{"class":113},[103,77600,331],{"class":162},[103,77602,12425],{"class":113},[103,77604,191],{"class":162},[103,77606,77508],{"class":113},[103,77608,185],{"class":162},[103,77610,12425],{"class":113},[103,77612,406],{"class":162},[103,77614,77517],{"class":113},[103,77616,77617,77619,77621,77624],{"class":105,"line":25},[103,77618,77522],{"class":113},[103,77620,58237],{"class":1952},[103,77622,77623],{"class":113},"(a)",[103,77625,77533],{"class":172},[103,77627,77628,77630,77632,77635],{"class":105,"line":1168},[103,77629,77522],{"class":113},[103,77631,58237],{"class":1952},[103,77633,77634],{"class":113},"(b)",[103,77636,77548],{"class":172},[103,77638,77639,77641,77643,77646],{"class":105,"line":1183},[103,77640,77522],{"class":113},[103,77642,58237],{"class":1952},[103,77644,77645],{"class":113},"(c)",[103,77647,77563],{"class":172},[94,77649,77651],{"className":77485,"code":77650,"language":77487,"meta":24,"style":24},"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",[100,77652,77653,77680,77690,77700,77710],{"__ignoreMap":24},[103,77654,77655,77657,77660,77662,77664,77666,77668,77670,77672,77674,77676,77678],{"class":105,"line":106},[103,77656,6782],{"class":109},[103,77658,77659],{"class":113}," [a, b, [c, d]] ",[103,77661,159],{"class":109},[103,77663,52216],{"class":113},[103,77665,331],{"class":162},[103,77667,12425],{"class":113},[103,77669,191],{"class":162},[103,77671,77508],{"class":113},[103,77673,185],{"class":162},[103,77675,12425],{"class":113},[103,77677,406],{"class":162},[103,77679,77517],{"class":113},[103,77681,77682,77684,77686,77688],{"class":105,"line":25},[103,77683,77522],{"class":113},[103,77685,58237],{"class":1952},[103,77687,77623],{"class":113},[103,77689,77533],{"class":172},[103,77691,77692,77694,77696,77698],{"class":105,"line":1168},[103,77693,77522],{"class":113},[103,77695,58237],{"class":1952},[103,77697,77634],{"class":113},[103,77699,77548],{"class":172},[103,77701,77702,77704,77706,77708],{"class":105,"line":1183},[103,77703,77522],{"class":113},[103,77705,58237],{"class":1952},[103,77707,77645],{"class":113},[103,77709,77582],{"class":172},[103,77711,77712,77714,77716,77719],{"class":105,"line":1189},[103,77713,77522],{"class":113},[103,77715,58237],{"class":1952},[103,77717,77718],{"class":113},"(d)",[103,77720,77721],{"class":172},"  \u002F\u002F4\n",[74,77723,77725],{"id":77724},"_462-对象解构","4.6.2 对象解构",[14,77727,77728],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77730,77731],{},"用的非常非常多！！！！！！",[21988,77733,77735],{"id":77734},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77737,77738],{},"基本语法：",[57,77740,77741,77744,77747,77750],{},[60,77742,77743],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[60,77745,77746],{},"对象属性的值将被赋值给与属性名相同的变量",[60,77748,77749],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[60,77751,77752],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[94,77754,77756],{"className":50623,"code":77755,"language":50625,"meta":24,"style":24},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[100,77757,77758,77763,77768,77773,77777],{"__ignoreMap":24},[103,77759,77760],{"class":105,"line":106},[103,77761,77762],{"class":113},"const obj = {\n",[103,77764,77765],{"class":105,"line":25},[103,77766,77767],{"class":113},"   uname: 'pink老师',\n",[103,77769,77770],{"class":105,"line":1168},[103,77771,77772],{"class":113},"   age: 18,\n",[103,77774,77775],{"class":105,"line":1183},[103,77776,1554],{"class":113},[103,77778,77779],{"class":105,"line":1189},[103,77780,77781],{"class":113},"const { uname, age } = obj\n",[14,77783,77784],{},"上方代码这样写等价于：",[14,77786,77787],{},"const uname等价于obj.uname",[14,77789,77790],{},"变量名可以重新改名：",[14,77792,77793],{},"const uname='red老师'",[14,77795,77796],{},"const user={",[14,77798,77799],{},"  uname:'pink老师',",[14,77801,77802],{},"  age:18",[14,77804,1059],{},[14,77806,77807],{},"const {uname,age}=user",[14,77809,77810],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77812,77813],{},"const {旧变量名：新变量名}=对象",[14,77815,77816],{},"const {uname:username,age}=user",[21988,77818,77820],{"id":77819},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77822,77823],{},[1451,77824],{"alt":24,"src":77825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21988,77827,77829],{"id":77828},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77831,77832],{},[1451,77833],{"alt":24,"src":77834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[94,77836,77838],{"className":53057,"code":77837,"language":53059,"meta":24,"style":24},"  \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",[100,77839,77840,77848,77853,77858,77863,77868,77873,77878,77883,77888,77892,77897,77902],{"__ignoreMap":24},[103,77841,77842,77844,77846],{"class":105,"line":106},[103,77843,52134],{"class":113},[103,77845,51803],{"class":51290},[103,77847,51297],{"class":113},[103,77849,77850],{"class":105,"line":25},[103,77851,77852],{"class":113},"    const pig = {\n",[103,77854,77855],{"class":105,"line":1168},[103,77856,77857],{"class":113},"      name: '佩奇',\n",[103,77859,77860],{"class":105,"line":1183},[103,77861,77862],{"class":113},"      family: {\n",[103,77864,77865],{"class":105,"line":1189},[103,77866,77867],{"class":113},"        mother: '猪妈妈',\n",[103,77869,77870],{"class":105,"line":1203},[103,77871,77872],{"class":113},"        father: '猪爸爸',\n",[103,77874,77875],{"class":105,"line":1209},[103,77876,77877],{"class":113},"        sister: '乔治'\n",[103,77879,77880],{"class":105,"line":1300},[103,77881,77882],{"class":113},"      },\n",[103,77884,77885],{"class":105,"line":1306},[103,77886,77887],{"class":113},"      age: 6\n",[103,77889,77890],{"class":105,"line":1318},[103,77891,2176],{"class":113},[103,77893,77894],{"class":105,"line":1601},[103,77895,77896],{"class":113},"    \u002F\u002F 多级对象解构\n",[103,77898,77899],{"class":105,"line":1606},[103,77900,77901],{"class":113},"    const { name, family: { mother, father, sister }, age } = pig\n",[103,77903,77904,77906,77908],{"class":105,"line":1612},[103,77905,52407],{"class":113},[103,77907,51803],{"class":51290},[103,77909,51297],{"class":113},[14,77911,77912],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[94,77914,77917],{"className":77915,"code":77916,"language":76437,"meta":24,"style":24},"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",[100,77918,77919,77924,77935,77947,77959,77968,77972,77983,77995,78005,78010,78014,78024,78035,78044,78048,78052,78063,78074,78083,78087,78092],{"__ignoreMap":24},[103,77920,77921],{"class":105,"line":106},[103,77922,77923],{"class":172},"    \u002F\u002F 这是后台传递过来的数据\n",[103,77925,77926,77928,77931,77933],{"class":105,"line":25},[103,77927,11211],{"class":109},[103,77929,77930],{"class":113}," msg ",[103,77932,159],{"class":109},[103,77934,15562],{"class":113},[103,77936,77937,77940,77942,77945],{"class":105,"line":1168},[103,77938,77939],{"class":218},"      \"code\"",[103,77941,972],{"class":109},[103,77943,77944],{"class":162}," 200",[103,77946,31456],{"class":113},[103,77948,77949,77952,77954,77957],{"class":105,"line":1183},[103,77950,77951],{"class":218},"      \"msg\"",[103,77953,972],{"class":109},[103,77955,77956],{"class":218}," \"获取新闻列表成功\"",[103,77958,31456],{"class":113},[103,77960,77961,77964,77966],{"class":105,"line":1189},[103,77962,77963],{"class":218},"      \"data\"",[103,77965,972],{"class":109},[103,77967,55437],{"class":113},[103,77969,77970],{"class":105,"line":1203},[103,77971,2499],{"class":113},[103,77973,77974,77977,77979,77981],{"class":105,"line":1209},[103,77975,77976],{"class":218},"          \"id\"",[103,77978,972],{"class":109},[103,77980,25108],{"class":162},[103,77982,31456],{"class":113},[103,77984,77985,77988,77990,77993],{"class":105,"line":1300},[103,77986,77987],{"class":218},"          \"title\"",[103,77989,972],{"class":109},[103,77991,77992],{"class":218}," \"5G商用自己，三大运用商收入下降\"",[103,77994,31456],{"class":113},[103,77996,77997,78000,78002],{"class":105,"line":1306},[103,77998,77999],{"class":218},"          \"count\"",[103,78001,972],{"class":109},[103,78003,78004],{"class":162}," 58\n",[103,78006,78007],{"class":105,"line":1318},[103,78008,78009],{"class":113},"        },\n",[103,78011,78012],{"class":105,"line":1601},[103,78013,2499],{"class":113},[103,78015,78016,78018,78020,78022],{"class":105,"line":1606},[103,78017,77976],{"class":218},[103,78019,972],{"class":109},[103,78021,14745],{"class":162},[103,78023,31456],{"class":113},[103,78025,78026,78028,78030,78033],{"class":105,"line":1612},[103,78027,77987],{"class":218},[103,78029,972],{"class":109},[103,78031,78032],{"class":218}," \"国际媒体头条速览\"",[103,78034,31456],{"class":113},[103,78036,78037,78039,78041],{"class":105,"line":1617},[103,78038,77999],{"class":218},[103,78040,972],{"class":109},[103,78042,78043],{"class":162}," 56\n",[103,78045,78046],{"class":105,"line":1631},[103,78047,78009],{"class":113},[103,78049,78050],{"class":105,"line":1636},[103,78051,2499],{"class":113},[103,78053,78054,78056,78058,78061],{"class":105,"line":1642},[103,78055,77976],{"class":218},[103,78057,972],{"class":109},[103,78059,78060],{"class":162}," 3",[103,78062,31456],{"class":113},[103,78064,78065,78067,78069,78072],{"class":105,"line":1663},[103,78066,77987],{"class":218},[103,78068,972],{"class":109},[103,78070,78071],{"class":218}," \"乌克兰和俄罗斯持续冲突\"",[103,78073,31456],{"class":113},[103,78075,78076,78078,78080],{"class":105,"line":1668},[103,78077,77999],{"class":218},[103,78079,972],{"class":109},[103,78081,78082],{"class":162}," 1669\n",[103,78084,78085],{"class":105,"line":1682},[103,78086,78009],{"class":113},[103,78088,78089],{"class":105,"line":1687},[103,78090,78091],{"class":113},"      ]\n",[103,78093,78094],{"class":105,"line":1716},[103,78095,2176],{"class":113},[14,78097,78098],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78100,78101],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78103,78104],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78106,78107],{},"function({data}) {",[14,78109,78110],{},"console.log(data)",[14,78112,1059],{},[14,78114,78115],{},"render(msg)",[14,78117,78118],{},"实参传递给形参的时候解构了",[14,78120,78121],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78123,78124],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78126,78127],{},"function render({data:mydata}) {",[14,78129,78130],{},"  console.log(data)",[14,78132,1059],{},[74,78134,78136],{"id":78135},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78138,78139],{},"有两种情况：一个是数组结构，一个是立即执行函数",[57,78141,78142],{},[60,78143,78144],{},"如果对一个数组进行遍历，有两种方式：",[14,78146,78147],{},"①法1",[14,78149,78150],{},"const arr=[1,2,3]",[14,78152,78153],{},"arr.map(function(item,index) {",[14,78155,78156],{},"  console.log(item)",[14,78158,52454],{},[14,78160,78161],{},[1451,78162],{"alt":24,"src":78163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78165,78166],{},"②法2",[14,78168,78169],{},"const str='pink'",[14,78171,78172],{},"[1,2,3].map(function(item,index) {",[14,78174,78175],{},"console.log(item)",[14,78177,52454],{},[14,78179,78180],{},[1451,78181],{"alt":24,"src":78182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78184,78185],{},"此时会报错",[14,78187,78188],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78190,78175],{},[14,78192,52454],{},[14,78194,78195],{},"内部会当成这样处理，所以我们用分号进行隔开",[45,78197,78199],{"id":78198},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78201,78202],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78204,78205],{},"可以理解为加强版的for循环",[14,78207,78208],{},[1451,78209],{"alt":24,"src":78210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78212,78213],{},"里边不写return，不返回数组，只遍历不返回",[14,78215,78216],{},"map是返回数组",[14,78218,78219],{},"forEach主要用于遍历数组对象",[94,78221,78223],{"className":53057,"code":78222,"language":53059,"meta":24,"style":24},"  \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",[100,78224,78225,78233,78238,78243,78248,78253,78257,78262],{"__ignoreMap":24},[103,78226,78227,78229,78231],{"class":105,"line":106},[103,78228,52134],{"class":113},[103,78230,51803],{"class":51290},[103,78232,51297],{"class":113},[103,78234,78235],{"class":105,"line":25},[103,78236,78237],{"class":113},"    const arr = ['red', 'green', 'pink']\n",[103,78239,78240],{"class":105,"line":1168},[103,78241,78242],{"class":113},"    const result = arr.forEach(function (item, index) {\n",[103,78244,78245],{"class":105,"line":1183},[103,78246,78247],{"class":113},"      console.log(item)\n",[103,78249,78250],{"class":105,"line":1189},[103,78251,78252],{"class":113},"      console.log(index)\n",[103,78254,78255],{"class":105,"line":1203},[103,78256,33451],{"class":113},[103,78258,78259],{"class":105,"line":1209},[103,78260,78261],{"class":113},"    console.log(result)\n",[103,78263,78264,78266,78268],{"class":105,"line":1300},[103,78265,52407],{"class":113},[103,78267,51803],{"class":51290},[103,78269,51297],{"class":113},[14,78271,78272],{},[1451,78273],{"alt":24,"src":78274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[45,78276,78278],{"id":78277},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78280,78281],{},[1451,78282],{"alt":24,"src":78283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78285,78286],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[94,78288,78290],{"className":53057,"code":78289,"language":53059,"meta":24,"style":24},"\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",[100,78291,78292,78300,78308,78313,78318,78322,78326,78331,78335,78340,78348],{"__ignoreMap":24},[103,78293,78294,78296,78298],{"class":105,"line":106},[103,78295,1023],{"class":113},[103,78297,51790],{"class":51290},[103,78299,51297],{"class":113},[103,78301,78302,78304,78306],{"class":105,"line":25},[103,78303,52134],{"class":113},[103,78305,51803],{"class":51290},[103,78307,51297],{"class":113},[103,78309,78310],{"class":105,"line":1168},[103,78311,78312],{"class":113},"    const arr = [10, 20, 30]\n",[103,78314,78315],{"class":105,"line":1183},[103,78316,78317],{"class":113},"    const newArr = arr.filter(function (item, index) {\n",[103,78319,78320],{"class":105,"line":1189},[103,78321,78247],{"class":113},[103,78323,78324],{"class":105,"line":1203},[103,78325,78252],{"class":113},[103,78327,78328],{"class":105,"line":1209},[103,78329,78330],{"class":113},"      return item >= 20\n",[103,78332,78333],{"class":105,"line":1300},[103,78334,33451],{"class":113},[103,78336,78337],{"class":105,"line":1306},[103,78338,78339],{"class":113},"    console.log(newArr)\n",[103,78341,78342,78344,78346],{"class":105,"line":1318},[103,78343,52407],{"class":113},[103,78345,51803],{"class":51290},[103,78347,51297],{"class":113},[103,78349,78350,78352,78354],{"class":105,"line":1601},[103,78351,51775],{"class":113},[103,78353,51790],{"class":51290},[103,78355,51297],{"class":113},[14,78357,78358],{},"这个也可以写成箭头函数：",[94,78360,78362],{"className":50623,"code":78361,"language":50625,"meta":24,"style":24},"const newArr = arr.filter(item => item >= 20)\n",[100,78363,78364],{"__ignoreMap":24},[103,78365,78366],{"class":105,"line":106},[103,78367,78361],{"class":113},[45,78369,78371],{"id":78370},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78373,78374],{},[1451,78375],{"alt":24,"src":78376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78378,78379],{},"步骤：",[14,78381,78382],{},"①：渲染页面模块",[1120,78384,78385,78388],{},[60,78386,78387],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[60,78389,78390],{},"用forEach+字符串的形式",[14,78392,78393],{},"②：点击不同需求，显示不同页面内容",[1120,78395,78396,78399,78402,78405,78408],{},[60,78397,78398],{},"点击采取事件委托方式 .filter",[60,78400,78401],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[60,78403,78404],{},"筛选条件是根据点击的 data-index 来判断",[60,78406,78407],{},"可以使用对象解构，把事件对象解构",[60,78409,78410],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[94,78412,78414],{"className":50623,"code":78413,"language":50625,"meta":24,"style":24},"\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",[100,78415,78416,78426,78440,78444,78452,78466,78486,78498,78506,78512,78522,78532,78542,78546,78550,78556,78569,78581,78591,78603,78607,78611,78618,78631,78643,78660,78678,78691,78695,78699,78711,78721,78725,78729,78736,78777,78804,78814,78818,78822,78830,78842,78846,78850,78858,78870,78882,78893,78897,78901,78910,78922,78933,78937,78941,78950,78962,78974,78978,78982,78989,78999,79011,79023,79038,79042,79046,79054,79070,79080,79090,79100,79112,79116,79120,79130,79141,79151,79155,79163,79171,79175,79183,79198,79224,79249,79274,79293,79301,79315,79320,79325,79330,79335,79340,79348,79356,79361,79372,79377,79387,79397,79407,79417,79421,79425,79434,79443,79452,79461,79465,79469,79478,79487,79496,79505,79509,79513,79522,79531,79540,79549,79553,79557,79566,79575,79584,79593,79597,79601,79610,79619,79628,79637,79641,79645,79654,79663,79672,79681,79685,79689,79698,79707,79715,79724,79728,79732,79736,79741,79753,79758,79770,79774,79791,79819,79828,79833,79843,79853,79862,79867,79872,79876,79881,79898,79902,79907,79915,79920,79947,79952,79972,79977,79989,79994,79999,80004,80015,80029,80066,80084,80117,80134,80158,80162,80167,80173,80177,80181,80185,80193,80201,80205],{"__ignoreMap":24},[103,78417,78418,78420,78422,78424],{"class":105,"line":106},[103,78419,51287],{"class":113},[103,78421,51291],{"class":51290},[103,78423,51294],{"class":1952},[103,78425,51297],{"class":113},[103,78427,78428,78430,78432,78434,78436,78438],{"class":105,"line":25},[103,78429,1023],{"class":113},[103,78431,50625],{"class":51290},[103,78433,51306],{"class":1952},[103,78435,159],{"class":113},[103,78437,51311],{"class":218},[103,78439,51297],{"class":113},[103,78441,78442],{"class":105,"line":1168},[103,78443,2389],{"emptyLinePlaceholder":30},[103,78445,78446,78448,78450],{"class":105,"line":1183},[103,78447,1023],{"class":113},[103,78449,51324],{"class":51290},[103,78451,51297],{"class":113},[103,78453,78454,78456,78458,78460,78462,78464],{"class":105,"line":1189},[103,78455,52134],{"class":113},[103,78457,51334],{"class":51290},[103,78459,51337],{"class":1952},[103,78461,159],{"class":113},[103,78463,51342],{"class":218},[103,78465,51297],{"class":113},[103,78467,78468,78470,78472,78474,78476,78478,78480,78482,78484],{"class":105,"line":1203},[103,78469,52134],{"class":113},[103,78471,51334],{"class":51290},[103,78473,14910],{"class":1952},[103,78475,159],{"class":113},[103,78477,51381],{"class":218},[103,78479,51361],{"class":1952},[103,78481,159],{"class":113},[103,78483,51388],{"class":218},[103,78485,51297],{"class":113},[103,78487,78488,78490,78492,78494,78496],{"class":105,"line":1209},[103,78489,52134],{"class":113},[103,78491,51397],{"class":51290},[103,78493,51400],{"class":113},[103,78495,51397],{"class":51290},[103,78497,51297],{"class":113},[103,78499,78500,78502,78504],{"class":105,"line":1300},[103,78501,52134],{"class":113},[103,78503,5116],{"class":51290},[103,78505,51297],{"class":113},[103,78507,78508,78510],{"class":105,"line":1306},[103,78509,6393],{"class":51290},[103,78511,15562],{"class":113},[103,78513,78514,78516,78518,78520],{"class":105,"line":1318},[103,78515,54685],{"class":162},[103,78517,51427],{"class":113},[103,78519,305],{"class":162},[103,78521,1279],{"class":113},[103,78523,78524,78526,78528,78530],{"class":105,"line":1601},[103,78525,54696],{"class":162},[103,78527,51427],{"class":113},[103,78529,305],{"class":162},[103,78531,1279],{"class":113},[103,78533,78534,78536,78538,78540],{"class":105,"line":1606},[103,78535,72586],{"class":162},[103,78537,51427],{"class":113},[103,78539,60495],{"class":162},[103,78541,1279],{"class":113},[103,78543,78544],{"class":105,"line":1612},[103,78545,2176],{"class":113},[103,78547,78548],{"class":105,"line":1617},[103,78549,2389],{"emptyLinePlaceholder":30},[103,78551,78552,78554],{"class":105,"line":1631},[103,78553,62113],{"class":1952},[103,78555,15562],{"class":113},[103,78557,78558,78560,78562,78565,78567],{"class":105,"line":1636},[103,78559,54761],{"class":162},[103,78561,51427],{"class":113},[103,78563,78564],{"class":162},"990",[103,78566,51482],{"class":109},[103,78568,1279],{"class":113},[103,78570,78571,78573,78575,78577,78579],{"class":105,"line":1642},[103,78572,54696],{"class":162},[103,78574,51427],{"class":113},[103,78576,305],{"class":162},[103,78578,51546],{"class":162},[103,78580,1279],{"class":113},[103,78582,78583,78585,78587,78589],{"class":105,"line":1663},[103,78584,54999],{"class":162},[103,78586,51427],{"class":113},[103,78588,51467],{"class":162},[103,78590,1279],{"class":113},[103,78592,78593,78596,78598,78601],{"class":105,"line":1668},[103,78594,78595],{"class":162},"      flex-wrap",[103,78597,51427],{"class":113},[103,78599,78600],{"class":162},"wrap",[103,78602,1279],{"class":113},[103,78604,78605],{"class":105,"line":1682},[103,78606,2176],{"class":113},[103,78608,78609],{"class":105,"line":1687},[103,78610,2389],{"emptyLinePlaceholder":30},[103,78612,78613,78616],{"class":105,"line":1716},[103,78614,78615],{"class":1952},"    .item",[103,78617,15562],{"class":113},[103,78619,78620,78622,78624,78627,78629],{"class":105,"line":1721},[103,78621,54761],{"class":162},[103,78623,51427],{"class":113},[103,78625,78626],{"class":162},"240",[103,78628,51482],{"class":109},[103,78630,1279],{"class":113},[103,78632,78633,78635,78637,78639,78641],{"class":105,"line":1738},[103,78634,61990],{"class":162},[103,78636,51427],{"class":113},[103,78638,559],{"class":162},[103,78640,51482],{"class":109},[103,78642,1279],{"class":113},[103,78644,78645,78647,78649,78651,78653,78656,78658],{"class":105,"line":1743},[103,78646,54685],{"class":162},[103,78648,51427],{"class":113},[103,78650,813],{"class":162},[103,78652,51482],{"class":109},[103,78654,78655],{"class":162}," 30",[103,78657,51482],{"class":109},[103,78659,1279],{"class":113},[103,78661,78662,78664,78666,78668,78671,78674,78676],{"class":105,"line":1748},[103,78663,61850],{"class":162},[103,78665,51427],{"class":113},[103,78667,28111],{"class":162},[103,78669,78670],{"class":162}," ease",[103,78672,78673],{"class":162}," .5",[103,78675,808],{"class":109},[103,78677,1279],{"class":113},[103,78679,78680,78683,78685,78687,78689],{"class":105,"line":1753},[103,78681,78682],{"class":162},"      margin-bottom",[103,78684,51427],{"class":113},[103,78686,813],{"class":162},[103,78688,51482],{"class":109},[103,78690,1279],{"class":113},[103,78692,78693],{"class":105,"line":1767},[103,78694,2176],{"class":113},[103,78696,78697],{"class":105,"line":1772},[103,78698,2389],{"emptyLinePlaceholder":30},[103,78700,78701,78704,78706,78709],{"class":105,"line":2566},[103,78702,78703],{"class":1952},"    .item:nth-child",[103,78705,114],{"class":113},[103,78707,78708],{"class":162},"4n",[103,78710,12432],{"class":113},[103,78712,78713,78715,78717,78719],{"class":105,"line":2580},[103,78714,61990],{"class":162},[103,78716,51427],{"class":113},[103,78718,305],{"class":162},[103,78720,1279],{"class":113},[103,78722,78723],{"class":105,"line":2588},[103,78724,2176],{"class":113},[103,78726,78727],{"class":105,"line":2593},[103,78728,2389],{"emptyLinePlaceholder":30},[103,78730,78731,78734],{"class":105,"line":2599},[103,78732,78733],{"class":1952},"    .item:hover",[103,78735,15562],{"class":113},[103,78737,78738,78741,78743,78745,78747,78749,78751,78753,78755,78758,78760,78762,78764,78766,78768,78770,78772,78775],{"class":105,"line":2605},[103,78739,78740],{"class":162},"      box-shadow",[103,78742,51427],{"class":113},[103,78744,305],{"class":162},[103,78746,51482],{"class":109},[103,78748,4082],{"class":162},[103,78750,51482],{"class":109},[103,78752,2137],{"class":162},[103,78754,51482],{"class":109},[103,78756,78757],{"class":162}," rgba",[103,78759,114],{"class":113},[103,78761,305],{"class":162},[103,78763,12425],{"class":113},[103,78765,305],{"class":162},[103,78767,12425],{"class":113},[103,78769,305],{"class":162},[103,78771,12425],{"class":113},[103,78773,78774],{"class":162},".2",[103,78776,2708],{"class":113},[103,78778,78779,78782,78784,78787,78789,78791,78793,78796,78798,78800,78802],{"class":105,"line":2610},[103,78780,78781],{"class":162},"      transform",[103,78783,51427],{"class":113},[103,78785,78786],{"class":162},"translate3d",[103,78788,114],{"class":113},[103,78790,305],{"class":162},[103,78792,12425],{"class":113},[103,78794,78795],{"class":162},"-4",[103,78797,51482],{"class":109},[103,78799,12425],{"class":113},[103,78801,305],{"class":162},[103,78803,2708],{"class":113},[103,78805,78806,78808,78810,78812],{"class":105,"line":7938},[103,78807,62015],{"class":162},[103,78809,51427],{"class":113},[103,78811,62020],{"class":162},[103,78813,1279],{"class":113},[103,78815,78816],{"class":105,"line":7962},[103,78817,2176],{"class":113},[103,78819,78820],{"class":105,"line":7967},[103,78821,2389],{"emptyLinePlaceholder":30},[103,78823,78824,78826,78828],{"class":105,"line":7973},[103,78825,78615],{"class":1952},[103,78827,55605],{"class":51290},[103,78829,15562],{"class":113},[103,78831,78832,78834,78836,78838,78840],{"class":105,"line":8000},[103,78833,54761],{"class":162},[103,78835,51427],{"class":113},[103,78837,424],{"class":162},[103,78839,441],{"class":109},[103,78841,1279],{"class":113},[103,78843,78844],{"class":105,"line":8005},[103,78845,2176],{"class":113},[103,78847,78848],{"class":105,"line":8011},[103,78849,2389],{"emptyLinePlaceholder":30},[103,78851,78852,78854,78856],{"class":105,"line":8023},[103,78853,78615],{"class":1952},[103,78855,62294],{"class":1952},[103,78857,15562],{"class":113},[103,78859,78860,78862,78864,78866,78868],{"class":105,"line":8035},[103,78861,54912],{"class":162},[103,78863,51427],{"class":113},[103,78865,763],{"class":162},[103,78867,51482],{"class":109},[103,78869,1279],{"class":113},[103,78871,78872,78874,78876,78878,78880],{"class":105,"line":8047},[103,78873,78682],{"class":162},[103,78875,51427],{"class":113},[103,78877,559],{"class":162},[103,78879,51482],{"class":109},[103,78881,1279],{"class":113},[103,78883,78884,78886,78888,78891],{"class":105,"line":9706},[103,78885,57406],{"class":162},[103,78887,51427],{"class":113},[103,78889,78890],{"class":162},"#666",[103,78892,1279],{"class":113},[103,78894,78895],{"class":105,"line":9731},[103,78896,2176],{"class":113},[103,78898,78899],{"class":105,"line":9754},[103,78900,2389],{"emptyLinePlaceholder":30},[103,78902,78903,78905,78908],{"class":105,"line":9778},[103,78904,78615],{"class":1952},[103,78906,78907],{"class":1952}," .price",[103,78909,15562],{"class":113},[103,78911,78912,78914,78916,78918,78920],{"class":105,"line":9783},[103,78913,54912],{"class":162},[103,78915,51427],{"class":113},[103,78917,863],{"class":162},[103,78919,51482],{"class":109},[103,78921,1279],{"class":113},[103,78923,78924,78926,78928,78931],{"class":105,"line":9788},[103,78925,57406],{"class":162},[103,78927,51427],{"class":113},[103,78929,78930],{"class":162},"firebrick",[103,78932,1279],{"class":113},[103,78934,78935],{"class":105,"line":9793},[103,78936,2176],{"class":113},[103,78938,78939],{"class":105,"line":9802},[103,78940,2389],{"emptyLinePlaceholder":30},[103,78942,78943,78945,78948],{"class":105,"line":9807},[103,78944,78615],{"class":1952},[103,78946,78947],{"class":1952}," .price::before",[103,78949,15562],{"class":113},[103,78951,78952,78955,78957,78960],{"class":105,"line":9813},[103,78953,78954],{"class":162},"      content",[103,78956,51427],{"class":113},[103,78958,78959],{"class":218},"'￥'",[103,78961,1279],{"class":113},[103,78963,78964,78966,78968,78970,78972],{"class":105,"line":9834},[103,78965,54912],{"class":162},[103,78967,51427],{"class":113},[103,78969,662],{"class":162},[103,78971,51482],{"class":109},[103,78973,1279],{"class":113},[103,78975,78976],{"class":105,"line":9840},[103,78977,2176],{"class":113},[103,78979,78980],{"class":105,"line":9854},[103,78981,2389],{"emptyLinePlaceholder":30},[103,78983,78984,78987],{"class":105,"line":9860},[103,78985,78986],{"class":1952},"    .filter",[103,78988,15562],{"class":113},[103,78990,78991,78993,78995,78997],{"class":105,"line":9887},[103,78992,54999],{"class":162},[103,78994,51427],{"class":113},[103,78996,51467],{"class":162},[103,78998,1279],{"class":113},[103,79000,79001,79003,79005,79007,79009],{"class":105,"line":9896},[103,79002,54761],{"class":162},[103,79004,51427],{"class":113},[103,79006,78564],{"class":162},[103,79008,51482],{"class":109},[103,79010,1279],{"class":113},[103,79012,79013,79015,79017,79019,79021],{"class":105,"line":9902},[103,79014,54696],{"class":162},[103,79016,51427],{"class":113},[103,79018,305],{"class":162},[103,79020,51546],{"class":162},[103,79022,1279],{"class":113},[103,79024,79025,79027,79029,79031,79033,79035],{"class":105,"line":9910},[103,79026,54685],{"class":162},[103,79028,51427],{"class":113},[103,79030,769],{"class":162},[103,79032,51482],{"class":109},[103,79034,78655],{"class":162},[103,79036,79037],{"class":109},"px\n",[103,79039,79040],{"class":105,"line":9915},[103,79041,2176],{"class":113},[103,79043,79044],{"class":105,"line":16594},[103,79045,2389],{"emptyLinePlaceholder":30},[103,79047,79048,79050,79052],{"class":105,"line":16600},[103,79049,78986],{"class":1952},[103,79051,1387],{"class":51290},[103,79053,15562],{"class":113},[103,79055,79056,79058,79060,79062,79064,79066,79068],{"class":105,"line":16623},[103,79057,54685],{"class":162},[103,79059,51427],{"class":113},[103,79061,559],{"class":162},[103,79063,51482],{"class":109},[103,79065,8940],{"class":162},[103,79067,51482],{"class":109},[103,79069,1279],{"class":113},[103,79071,79072,79074,79076,79078],{"class":105,"line":16629},[103,79073,61711],{"class":162},[103,79075,51427],{"class":113},[103,79077,61808],{"class":162},[103,79079,1279],{"class":113},[103,79081,79082,79084,79086,79088],{"class":105,"line":16652},[103,79083,57406],{"class":162},[103,79085,51427],{"class":113},[103,79087,78890],{"class":162},[103,79089,1279],{"class":113},[103,79091,79092,79094,79096,79098],{"class":105,"line":16666},[103,79093,63960],{"class":162},[103,79095,51427],{"class":113},[103,79097,54727],{"class":162},[103,79099,1279],{"class":113},[103,79101,79102,79104,79106,79108,79110],{"class":105,"line":16686},[103,79103,61740],{"class":162},[103,79105,51427],{"class":113},[103,79107,813],{"class":162},[103,79109,51482],{"class":109},[103,79111,1279],{"class":113},[103,79113,79114],{"class":105,"line":16692},[103,79115,2176],{"class":113},[103,79117,79118],{"class":105,"line":16703},[103,79119,2389],{"emptyLinePlaceholder":30},[103,79121,79122,79124,79126,79128],{"class":105,"line":16726},[103,79123,78986],{"class":1952},[103,79125,1387],{"class":51290},[103,79127,61890],{"class":1952},[103,79129,15562],{"class":113},[103,79131,79132,79134,79136,79139],{"class":105,"line":16748},[103,79133,54874],{"class":162},[103,79135,51427],{"class":113},[103,79137,79138],{"class":162},"#05943c",[103,79140,1279],{"class":113},[103,79142,79143,79145,79147,79149],{"class":105,"line":16753},[103,79144,57406],{"class":162},[103,79146,51427],{"class":113},[103,79148,60832],{"class":162},[103,79150,1279],{"class":113},[103,79152,79153],{"class":105,"line":16759},[103,79154,2176],{"class":113},[103,79156,79157,79159,79161],{"class":105,"line":16773},[103,79158,52407],{"class":113},[103,79160,5116],{"class":51290},[103,79162,51297],{"class":113},[103,79164,79165,79167,79169],{"class":105,"line":16786},[103,79166,51775],{"class":113},[103,79168,51324],{"class":51290},[103,79170,51297],{"class":113},[103,79172,79173],{"class":105,"line":16791},[103,79174,2389],{"emptyLinePlaceholder":30},[103,79176,79177,79179,79181],{"class":105,"line":16805},[103,79178,1023],{"class":113},[103,79180,51790],{"class":51290},[103,79182,51297],{"class":113},[103,79184,79185,79187,79189,79191,79193,79196],{"class":105,"line":16810},[103,79186,52134],{"class":113},[103,79188,51601],{"class":51290},[103,79190,53476],{"class":1952},[103,79192,159],{"class":113},[103,79194,79195],{"class":218},"\"filter\"",[103,79197,51297],{"class":113},[103,79199,79200,79202,79204,79206,79208,79210,79213,79215,79217,79220,79222],{"class":105,"line":16816},[103,79201,51331],{"class":113},[103,79203,17],{"class":51290},[103,79205,61047],{"class":1952},[103,79207,159],{"class":113},[103,79209,61052],{"class":218},[103,79211,79212],{"class":1952}," data-index",[103,79214,159],{"class":113},[103,79216,3667],{"class":218},[103,79218,79219],{"class":113},">0-100元\u003C\u002F",[103,79221,17],{"class":51290},[103,79223,51297],{"class":113},[103,79225,79226,79228,79230,79232,79234,79236,79238,79240,79242,79245,79247],{"class":105,"line":16821},[103,79227,51331],{"class":113},[103,79229,17],{"class":51290},[103,79231,61047],{"class":1952},[103,79233,159],{"class":113},[103,79235,61052],{"class":218},[103,79237,79212],{"class":1952},[103,79239,159],{"class":113},[103,79241,3690],{"class":218},[103,79243,79244],{"class":113},">100-300元\u003C\u002F",[103,79246,17],{"class":51290},[103,79248,51297],{"class":113},[103,79250,79251,79253,79255,79257,79259,79261,79263,79265,79267,79270,79272],{"class":105,"line":16835},[103,79252,51331],{"class":113},[103,79254,17],{"class":51290},[103,79256,61047],{"class":1952},[103,79258,159],{"class":113},[103,79260,61052],{"class":218},[103,79262,79212],{"class":1952},[103,79264,159],{"class":113},[103,79266,3703],{"class":218},[103,79268,79269],{"class":113},">300元以上\u003C\u002F",[103,79271,17],{"class":51290},[103,79273,51297],{"class":113},[103,79275,79276,79278,79280,79282,79284,79286,79289,79291],{"class":105,"line":16840},[103,79277,51331],{"class":113},[103,79279,17],{"class":51290},[103,79281,61047],{"class":1952},[103,79283,159],{"class":113},[103,79285,61052],{"class":218},[103,79287,79288],{"class":113},">全部区间\u003C\u002F",[103,79290,17],{"class":51290},[103,79292,51297],{"class":113},[103,79294,79295,79297,79299],{"class":105,"line":16845},[103,79296,52407],{"class":113},[103,79298,51601],{"class":51290},[103,79300,51297],{"class":113},[103,79302,79303,79305,79307,79309,79311,79313],{"class":105,"line":16859},[103,79304,52134],{"class":113},[103,79306,51601],{"class":51290},[103,79308,53476],{"class":1952},[103,79310,159],{"class":113},[103,79312,62598],{"class":218},[103,79314,51297],{"class":113},[103,79316,79317],{"class":105,"line":16871},[103,79318,79319],{"class":172},"    \u003C!-- \u003Cdiv class=\"item\">\n",[103,79321,79322],{"class":105,"line":16876},[103,79323,79324],{"class":172},"      \u003Cimg src=\"\" alt=\"\">\n",[103,79326,79327],{"class":105,"line":16889},[103,79328,79329],{"class":172},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[103,79331,79332],{"class":105,"line":16894},[103,79333,79334],{"class":172},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[103,79336,79337],{"class":105,"line":16899},[103,79338,79339],{"class":172},"    \u003C\u002Fdiv> -->\n",[103,79341,79342,79344,79346],{"class":105,"line":16904},[103,79343,52407],{"class":113},[103,79345,51601],{"class":51290},[103,79347,51297],{"class":113},[103,79349,79350,79352,79354],{"class":105,"line":16917},[103,79351,52134],{"class":113},[103,79353,51803],{"class":51290},[103,79355,51297],{"class":113},[103,79357,79358],{"class":105,"line":16922},[103,79359,79360],{"class":172},"    \u002F\u002F 2. 初始化数据\n",[103,79362,79363,79365,79368,79370],{"class":105,"line":32623},[103,79364,11211],{"class":109},[103,79366,79367],{"class":162}," goodsList",[103,79369,13554],{"class":109},[103,79371,55437],{"class":113},[103,79373,79374],{"class":105,"line":32629},[103,79375,79376],{"class":113},"      {\n",[103,79378,79379,79382,79385],{"class":105,"line":32635},[103,79380,79381],{"class":113},"        id: ",[103,79383,79384],{"class":218},"'4001172'",[103,79386,31456],{"class":113},[103,79388,79389,79392,79395],{"class":105,"line":32641},[103,79390,79391],{"class":113},"        name: ",[103,79393,79394],{"class":218},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[103,79396,31456],{"class":113},[103,79398,79399,79402,79405],{"class":105,"line":32647},[103,79400,79401],{"class":113},"        price: ",[103,79403,79404],{"class":218},"'289.00'",[103,79406,31456],{"class":113},[103,79408,79409,79412,79415],{"class":105,"line":32658},[103,79410,79411],{"class":113},"        picture: ",[103,79413,79414],{"class":218},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[103,79416,31456],{"class":113},[103,79418,79419],{"class":105,"line":32664},[103,79420,77882],{"class":113},[103,79422,79423],{"class":105,"line":32684},[103,79424,79376],{"class":113},[103,79426,79427,79429,79432],{"class":105,"line":32690},[103,79428,79381],{"class":113},[103,79430,79431],{"class":218},"'4001594'",[103,79433,31456],{"class":113},[103,79435,79436,79438,79441],{"class":105,"line":32701},[103,79437,79391],{"class":113},[103,79439,79440],{"class":218},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[103,79442,31456],{"class":113},[103,79444,79445,79447,79450],{"class":105,"line":32707},[103,79446,79401],{"class":113},[103,79448,79449],{"class":218},"'288.00'",[103,79451,31456],{"class":113},[103,79453,79454,79456,79459],{"class":105,"line":32713},[103,79455,79411],{"class":113},[103,79457,79458],{"class":218},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[103,79460,31456],{"class":113},[103,79462,79463],{"class":105,"line":32719},[103,79464,77882],{"class":113},[103,79466,79467],{"class":105,"line":32725},[103,79468,79376],{"class":113},[103,79470,79471,79473,79476],{"class":105,"line":32731},[103,79472,79381],{"class":113},[103,79474,79475],{"class":218},"'4001009'",[103,79477,31456],{"class":113},[103,79479,79480,79482,79485],{"class":105,"line":32737},[103,79481,79391],{"class":113},[103,79483,79484],{"class":218},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[103,79486,31456],{"class":113},[103,79488,79489,79491,79494],{"class":105,"line":32743},[103,79490,79401],{"class":113},[103,79492,79493],{"class":218},"'109.00'",[103,79495,31456],{"class":113},[103,79497,79498,79500,79503],{"class":105,"line":32763},[103,79499,79411],{"class":113},[103,79501,79502],{"class":218},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[103,79504,31456],{"class":113},[103,79506,79507],{"class":105,"line":32769},[103,79508,77882],{"class":113},[103,79510,79511],{"class":105,"line":32785},[103,79512,79376],{"class":113},[103,79514,79515,79517,79520],{"class":105,"line":32791},[103,79516,79381],{"class":113},[103,79518,79519],{"class":218},"'4001874'",[103,79521,31456],{"class":113},[103,79523,79524,79526,79529],{"class":105,"line":32805},[103,79525,79391],{"class":113},[103,79527,79528],{"class":218},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[103,79530,31456],{"class":113},[103,79532,79533,79535,79538],{"class":105,"line":32811},[103,79534,79401],{"class":113},[103,79536,79537],{"class":218},"'488.00'",[103,79539,31456],{"class":113},[103,79541,79542,79544,79547],{"class":105,"line":32826},[103,79543,79411],{"class":113},[103,79545,79546],{"class":218},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[103,79548,31456],{"class":113},[103,79550,79551],{"class":105,"line":32832},[103,79552,77882],{"class":113},[103,79554,79555],{"class":105,"line":32841},[103,79556,79376],{"class":113},[103,79558,79559,79561,79564],{"class":105,"line":32847},[103,79560,79381],{"class":113},[103,79562,79563],{"class":218},"'4001649'",[103,79565,31456],{"class":113},[103,79567,79568,79570,79573],{"class":105,"line":32856},[103,79569,79391],{"class":113},[103,79571,79572],{"class":218},"'大师监制龙泉青瓷茶叶罐'",[103,79574,31456],{"class":113},[103,79576,79577,79579,79582],{"class":105,"line":32862},[103,79578,79401],{"class":113},[103,79580,79581],{"class":218},"'139.00'",[103,79583,31456],{"class":113},[103,79585,79586,79588,79591],{"class":105,"line":32868},[103,79587,79411],{"class":113},[103,79589,79590],{"class":218},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[103,79592,31456],{"class":113},[103,79594,79595],{"class":105,"line":32877},[103,79596,77882],{"class":113},[103,79598,79599],{"class":105,"line":32883},[103,79600,79376],{"class":113},[103,79602,79603,79605,79608],{"class":105,"line":32894},[103,79604,79381],{"class":113},[103,79606,79607],{"class":218},"'3997185'",[103,79609,31456],{"class":113},[103,79611,79612,79614,79617],{"class":105,"line":32900},[103,79613,79391],{"class":113},[103,79615,79616],{"class":218},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[103,79618,31456],{"class":113},[103,79620,79621,79623,79626],{"class":105,"line":32919},[103,79622,79401],{"class":113},[103,79624,79625],{"class":218},"'108.00'",[103,79627,31456],{"class":113},[103,79629,79630,79632,79635],{"class":105,"line":32925},[103,79631,79411],{"class":113},[103,79633,79634],{"class":218},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[103,79636,31456],{"class":113},[103,79638,79639],{"class":105,"line":32936},[103,79640,77882],{"class":113},[103,79642,79643],{"class":105,"line":32942},[103,79644,79376],{"class":113},[103,79646,79647,79649,79652],{"class":105,"line":32962},[103,79648,79381],{"class":113},[103,79650,79651],{"class":218},"'3997403'",[103,79653,31456],{"class":113},[103,79655,79656,79658,79661],{"class":105,"line":32978},[103,79657,79391],{"class":113},[103,79659,79660],{"class":218},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[103,79662,31456],{"class":113},[103,79664,79665,79667,79670],{"class":105,"line":32984},[103,79666,79401],{"class":113},[103,79668,79669],{"class":218},"'100.00'",[103,79671,31456],{"class":113},[103,79673,79674,79676,79679],{"class":105,"line":32998},[103,79675,79411],{"class":113},[103,79677,79678],{"class":218},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[103,79680,31456],{"class":113},[103,79682,79683],{"class":105,"line":33004},[103,79684,77882],{"class":113},[103,79686,79687],{"class":105,"line":33010},[103,79688,79376],{"class":113},[103,79690,79691,79693,79696],{"class":105,"line":33021},[103,79692,79381],{"class":113},[103,79694,79695],{"class":218},"'3998274'",[103,79697,31456],{"class":113},[103,79699,79700,79702,79705],{"class":105,"line":33027},[103,79701,79391],{"class":113},[103,79703,79704],{"class":218},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[103,79706,31456],{"class":113},[103,79708,79709,79711,79713],{"class":105,"line":33033},[103,79710,79401],{"class":113},[103,79712,79581],{"class":218},[103,79714,31456],{"class":113},[103,79716,79717,79719,79722],{"class":105,"line":33043},[103,79718,79411],{"class":113},[103,79720,79721],{"class":218},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[103,79723,31456],{"class":113},[103,79725,79726],{"class":105,"line":33049},[103,79727,77882],{"class":113},[103,79729,79730],{"class":105,"line":33060},[103,79731,53099],{"class":113},[103,79733,79734],{"class":105,"line":33066},[103,79735,2389],{"emptyLinePlaceholder":30},[103,79737,79738],{"class":105,"line":33076},[103,79739,79740],{"class":172},"    \u002F\u002F 1.渲染函数\n",[103,79742,79743,79745,79747,79749,79751],{"class":105,"line":33081},[103,79744,70074],{"class":109},[103,79746,70077],{"class":1952},[103,79748,114],{"class":113},[103,79750,3869],{"class":5206},[103,79752,12432],{"class":113},[103,79754,79755],{"class":105,"line":33087},[103,79756,79757],{"class":172},"      \u002F\u002F 声明空字符串\n",[103,79759,79760,79763,79766,79768],{"class":105,"line":33136},[103,79761,79762],{"class":109},"      let",[103,79764,79765],{"class":113}," str ",[103,79767,159],{"class":109},[103,79769,70094],{"class":218},[103,79771,79772],{"class":105,"line":33183},[103,79773,70099],{"class":172},[103,79775,79776,79778,79781,79783,79786,79789],{"class":105,"line":33188},[103,79777,57997],{"class":113},[103,79779,79780],{"class":1952},"forEach",[103,79782,114],{"class":113},[103,79784,79785],{"class":5206},"item",[103,79787,79788],{"class":109}," =>",[103,79790,15562],{"class":113},[103,79792,79793,79795,79798,79801,79803,79806,79808,79811,79814,79816],{"class":105,"line":33194},[103,79794,61260],{"class":109},[103,79796,79797],{"class":113}," { ",[103,79799,79800],{"class":162},"name",[103,79802,12425],{"class":113},[103,79804,79805],{"class":162},"price",[103,79807,12425],{"class":113},[103,79809,79810],{"class":162},"picture",[103,79812,79813],{"class":113}," } ",[103,79815,159],{"class":109},[103,79817,79818],{"class":113}," item\n",[103,79820,79821,79824,79826],{"class":105,"line":33213},[103,79822,79823],{"class":113},"        str ",[103,79825,9467],{"class":109},[103,79827,70158],{"class":218},[103,79829,79830],{"class":105,"line":33219},[103,79831,79832],{"class":218},"          \u003Cdiv class=\"item\">\n",[103,79834,79835,79838,79840],{"class":105,"line":33239},[103,79836,79837],{"class":218},"            \u003Cimg src=\"${",[103,79839,79810],{"class":113},[103,79841,79842],{"class":218},"}\" alt=\"\">\n",[103,79844,79845,79848,79850],{"class":105,"line":33245},[103,79846,79847],{"class":218},"            \u003Cp class=\"name\">${",[103,79849,79800],{"class":113},[103,79851,79852],{"class":218},"}\u003C\u002Fp>\n",[103,79854,79855,79858,79860],{"class":105,"line":33251},[103,79856,79857],{"class":218},"            \u003Cp class=\"price\">${",[103,79859,79805],{"class":113},[103,79861,79852],{"class":218},[103,79863,79864],{"class":105,"line":33261},[103,79865,79866],{"class":218},"          \u003C\u002Fdiv>\n",[103,79868,79869],{"class":105,"line":33266},[103,79870,79871],{"class":218},"        `\n",[103,79873,79874],{"class":105,"line":33272},[103,79875,64805],{"class":113},[103,79877,79878],{"class":105,"line":33288},[103,79879,79880],{"class":172},"      \u002F\u002F 追加给List\n",[103,79882,79883,79885,79887,79889,79892,79894,79896],{"class":105,"line":33333},[103,79884,55761],{"class":113},[103,79886,54389],{"class":1952},[103,79888,114],{"class":113},[103,79890,79891],{"class":218},"'.list'",[103,79893,74239],{"class":113},[103,79895,159],{"class":109},[103,79897,73975],{"class":113},[103,79899,79900],{"class":105,"line":33339},[103,79901,2176],{"class":113},[103,79903,79904],{"class":105,"line":33345},[103,79905,79906],{"class":172},"    \u002F\u002F 页面一打开就需要渲染\n",[103,79908,79909,79912],{"class":105,"line":33351},[103,79910,79911],{"class":1952},"    render",[103,79913,79914],{"class":113},"(goodsList)\n",[103,79916,79917],{"class":105,"line":33362},[103,79918,79919],{"class":172},"    \u002F\u002F 2.过滤筛选\n",[103,79921,79922,79924,79926,79928,79931,79933,79935,79937,79939,79941,79943,79945],{"class":105,"line":33368},[103,79923,52397],{"class":113},[103,79925,54389],{"class":1952},[103,79927,114],{"class":113},[103,79929,79930],{"class":218},"'.filter'",[103,79932,30816],{"class":113},[103,79934,57803],{"class":1952},[103,79936,114],{"class":113},[103,79938,57808],{"class":218},[103,79940,12425],{"class":113},[103,79942,188],{"class":5206},[103,79944,79788],{"class":109},[103,79946,15562],{"class":113},[103,79948,79949],{"class":105,"line":33374},[103,79950,79951],{"class":172},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[103,79953,79954,79956,79958,79961,79963,79965,79967,79969],{"class":105,"line":33380},[103,79955,58218],{"class":109},[103,79957,79797],{"class":113},[103,79959,79960],{"class":162},"tagName",[103,79962,12425],{"class":113},[103,79964,31527],{"class":162},[103,79966,79813],{"class":113},[103,79968,159],{"class":109},[103,79970,79971],{"class":113}," e.target\n",[103,79973,79974],{"class":105,"line":33398},[103,79975,79976],{"class":172},"      \u002F\u002F 判断\n",[103,79978,79979,79981,79983,79985,79987],{"class":105,"line":33412},[103,79980,54470],{"class":109},[103,79982,67024],{"class":113},[103,79984,54476],{"class":109},[103,79986,68246],{"class":218},[103,79988,12432],{"class":113},[103,79990,79991],{"class":105,"line":33421},[103,79992,79993],{"class":172},"        \u002F\u002F console.log(11)\n",[103,79995,79996],{"class":105,"line":33430},[103,79997,79998],{"class":172},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[103,80000,80001],{"class":105,"line":33439},[103,80002,80003],{"class":172},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[103,80005,80006,80008,80010,80012],{"class":105,"line":33448},[103,80007,51820],{"class":109},[103,80009,51823],{"class":113},[103,80011,159],{"class":109},[103,80013,80014],{"class":113}," goodsList\n",[103,80016,80017,80019,80022,80024,80027],{"class":105,"line":33454},[103,80018,2486],{"class":109},[103,80020,80021],{"class":113}," (dataset.index ",[103,80023,54476],{"class":109},[103,80025,80026],{"class":218}," '1'",[103,80028,12432],{"class":113},[103,80030,80031,80034,80036,80039,80042,80044,80046,80048,80051,80053,80055,80058,80060,80062,80064],{"class":105,"line":33460},[103,80032,80033],{"class":113},"          arr ",[103,80035,159],{"class":109},[103,80037,80038],{"class":113}," goodsList.",[103,80040,80041],{"class":1952},"filter",[103,80043,114],{"class":113},[103,80045,79785],{"class":5206},[103,80047,79788],{"class":109},[103,80049,80050],{"class":113}," item.price ",[103,80052,1699],{"class":109},[103,80054,4082],{"class":162},[103,80056,80057],{"class":109}," &&",[103,80059,80050],{"class":113},[103,80061,1577],{"class":109},[103,80063,5744],{"class":162},[103,80065,120],{"class":113},[103,80067,80068,80071,80073,80075,80077,80079,80082],{"class":105,"line":33468},[103,80069,80070],{"class":113},"        } ",[103,80072,1690],{"class":109},[103,80074,1693],{"class":109},[103,80076,80021],{"class":113},[103,80078,54476],{"class":109},[103,80080,80081],{"class":218}," '2'",[103,80083,12432],{"class":113},[103,80085,80086,80088,80090,80092,80094,80096,80098,80100,80102,80104,80106,80108,80110,80112,80115],{"class":105,"line":33473},[103,80087,80033],{"class":113},[103,80089,159],{"class":109},[103,80091,80038],{"class":113},[103,80093,80041],{"class":1952},[103,80095,114],{"class":113},[103,80097,79785],{"class":5206},[103,80099,79788],{"class":109},[103,80101,80050],{"class":113},[103,80103,1699],{"class":109},[103,80105,5744],{"class":162},[103,80107,80057],{"class":109},[103,80109,80050],{"class":113},[103,80111,1577],{"class":109},[103,80113,80114],{"class":162}," 300",[103,80116,120],{"class":113},[103,80118,80119,80121,80123,80125,80127,80129,80132],{"class":105,"line":33479},[103,80120,80070],{"class":113},[103,80122,1690],{"class":109},[103,80124,1693],{"class":109},[103,80126,80021],{"class":113},[103,80128,54476],{"class":109},[103,80130,80131],{"class":218}," '3'",[103,80133,12432],{"class":113},[103,80135,80136,80138,80140,80142,80144,80146,80148,80150,80152,80154,80156],{"class":105,"line":33490},[103,80137,80033],{"class":113},[103,80139,159],{"class":109},[103,80141,80038],{"class":113},[103,80143,80041],{"class":1952},[103,80145,114],{"class":113},[103,80147,79785],{"class":5206},[103,80149,79788],{"class":109},[103,80151,80050],{"class":113},[103,80153,1699],{"class":109},[103,80155,80114],{"class":162},[103,80157,120],{"class":113},[103,80159,80160],{"class":105,"line":33496},[103,80161,2518],{"class":113},[103,80163,80164],{"class":105,"line":33516},[103,80165,80166],{"class":172},"        \u002F\u002F 渲染函数\n",[103,80168,80169,80171],{"class":105,"line":33522},[103,80170,70398],{"class":1952},[103,80172,52402],{"class":113},[103,80174,80175],{"class":105,"line":33528},[103,80176,52388],{"class":113},[103,80178,80179],{"class":105,"line":33534},[103,80180,2389],{"emptyLinePlaceholder":30},[103,80182,80183],{"class":105,"line":33551},[103,80184,33451],{"class":113},[103,80186,80187,80189,80191],{"class":105,"line":33557},[103,80188,52407],{"class":113},[103,80190,51803],{"class":51290},[103,80192,51297],{"class":113},[103,80194,80195,80197,80199],{"class":105,"line":33563},[103,80196,51775],{"class":113},[103,80198,51790],{"class":51290},[103,80200,51297],{"class":113},[103,80202,80203],{"class":105,"line":33569},[103,80204,2389],{"emptyLinePlaceholder":30},[103,80206,80207,80209,80211],{"class":105,"line":33575},[103,80208,51775],{"class":113},[103,80210,50625],{"class":51290},[103,80212,51297],{"class":113},[45,80214,80216],{"id":80215},"_410-深入了解对象","4.10 深入了解对象",[74,80218,80220],{"id":80219},"_4101-创建对象","4.10.1 创建对象",[14,80222,80223],{},[1451,80224],{"alt":24,"src":80225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80227,80228],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[74,80230,80232],{"id":80231},"_4102-构造函数","4.10.2 构造函数",[14,80234,80235,80238],{},[263,80236,80237],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80240,80241,80244],{},[263,80242,80243],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[94,80246,80248],{"className":50623,"code":80247,"language":50625,"meta":24,"style":24},"\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",[100,80249,80250,80258,80263,80284,80297,80309,80321,80325,80330,80357,80362,80389],{"__ignoreMap":24},[103,80251,80252,80254,80256],{"class":105,"line":106},[103,80253,1023],{"class":113},[103,80255,51803],{"class":51290},[103,80257,51297],{"class":113},[103,80259,80260],{"class":105,"line":25},[103,80261,80262],{"class":172},"\u002F\u002F例：\n",[103,80264,80265,80267,80270,80272,80274,80276,80278,80280,80282],{"class":105,"line":1168},[103,80266,54439],{"class":109},[103,80268,80269],{"class":1952}," Pig",[103,80271,114],{"class":113},[103,80273,79800],{"class":5206},[103,80275,491],{"class":113},[103,80277,70211],{"class":5206},[103,80279,491],{"class":113},[103,80281,70228],{"class":5206},[103,80283,12432],{"class":113},[103,80285,80286,80289,80292,80294],{"class":105,"line":1183},[103,80287,80288],{"class":162},"    this",[103,80290,80291],{"class":113},".name",[103,80293,159],{"class":109},[103,80295,80296],{"class":113},"name\n",[103,80298,80299,80301,80304,80306],{"class":105,"line":1189},[103,80300,80288],{"class":162},[103,80302,80303],{"class":113},".age",[103,80305,159],{"class":109},[103,80307,80308],{"class":113},"age\n",[103,80310,80311,80313,80316,80318],{"class":105,"line":1203},[103,80312,80288],{"class":162},[103,80314,80315],{"class":113},".gender",[103,80317,159],{"class":109},[103,80319,80320],{"class":113},"gender    \n",[103,80322,80323],{"class":105,"line":1209},[103,80324,1554],{"class":113},[103,80326,80327],{"class":105,"line":1300},[103,80328,80329],{"class":172},"\u002F\u002F创建佩奇对象\n",[103,80331,80332,80334,80337,80339,80341,80343,80346,80348,80350,80352,80355],{"class":105,"line":1306},[103,80333,6782],{"class":109},[103,80335,80336],{"class":162}," Peppa",[103,80338,11707],{"class":109},[103,80340,80269],{"class":1952},[103,80342,114],{"class":113},[103,80344,80345],{"class":218},"'佩奇'",[103,80347,491],{"class":113},[103,80349,457],{"class":162},[103,80351,491],{"class":113},[103,80353,80354],{"class":218},"'女'",[103,80356,120],{"class":113},[103,80358,80359],{"class":105,"line":1318},[103,80360,80361],{"class":172},"\u002F\u002F创建乔治对象\n",[103,80363,80364,80366,80369,80371,80373,80375,80378,80380,80382,80384,80387],{"class":105,"line":1601},[103,80365,6782],{"class":109},[103,80367,80368],{"class":162}," George",[103,80370,11707],{"class":109},[103,80372,80269],{"class":1952},[103,80374,114],{"class":113},[103,80376,80377],{"class":218},"'乔治'",[103,80379,491],{"class":113},[103,80381,185],{"class":162},[103,80383,491],{"class":113},[103,80385,80386],{"class":218},"'男'",[103,80388,120],{"class":113},[103,80390,80391,80393,80395],{"class":105,"line":1606},[103,80392,51775],{"class":113},[103,80394,51803],{"class":51290},[103,80396,51297],{"class":113},[14,80398,80399],{},[1451,80400],{"alt":24,"src":80401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80403,80404],{},[1451,80405],{"alt":24,"src":80406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80408,80409],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80411,80412],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80414,80415],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80417,80418],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80420,80421],{},"这里用等号是因为：对象.属性=值",[14,80423,80424],{},"①利用对象字面量创建对象",[14,80426,80427],{},"const o={",[14,80429,80430],{},"name:'pink'",[14,80432,80433],{},"} ②利用new Object创建对象",[14,80435,80436],{},"const o=new Object({name:'pink'})",[14,80438,80439],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80441,80442],{},"构造函数创建对象的执行过程：",[14,80444,80445],{},[1451,80446],{"alt":24,"src":80447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[74,80449,80451],{"id":80450},"_4103-实例成员","4.10.3 实例成员",[14,80453,80454],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[57,80456,80457,80460,80463],{},[60,80458,80459],{},"实例对象的属性和方法即为实例成员",[60,80461,80462],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[60,80464,80465],{},"构造函数创建的实例对象彼此独立互不影响",[74,80467,80469],{"id":80468},"_4104-静态成员","4.10.4 静态成员",[14,80471,80472],{},[1451,80473],{"alt":24,"src":80474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80476,80477],{},"静态成员有Date.now() Math.PI Math.random()",[14,80479,80480],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80482,80483],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80485,80486],{},"function Pig(name) n {",[14,80488,80489],{},"this.name=name",[14,80491,1059],{},[14,80493,80494],{},"Pig.eyes=2",[14,80496,80497],{},"Pig.sayHai=function () { console.log(this) }",[14,80499,80500],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80502,80503],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80505,11322],{},[57,80507,80508,80511,80514,80517,80520],{},[60,80509,80510],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[60,80512,80513],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[60,80515,80516],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[60,80518,80519],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[60,80521,80522],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80524,80525],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[74,80527,80529],{"id":80528},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80531,80532],{},"内置构造函数包含：",[14,80534,80535],{},[1451,80536],{"alt":24,"src":80537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80539,80540],{},[1451,80541],{"alt":24,"src":80542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80544,80545],{},"这些基本数据类型，js对他们进行了包装",[51803,80547,80548],{},"\n\n\u002F\u002F const str = 'pink'\n\nconsole.log(str.length)\n\nconst num = 12\n\n\u002F\u002F toFixed()是保留几位小数\n\nconsole.log(num.toFixed(2))\n\n\u002F\u002F 虽然写了const str='pink'\n\n\u002F\u002F 但是内部是按照下面的形式进行执行的：\n\n\u002F\u002Fjs底层完成的，把简单数据类型包装为了复杂数据类型，就是把他转化为了对象，就可以直接使用它的属性和方法了，下面这行代码是不需要自己写的\n\nconst str = String('pink')\n\n",[21988,80550,80552],{"id":80551},"_41051-object","4.10.5.1 Object",[14,80554,80555],{},"Object 是内置的构造函数，用于创建普通对象",[14,80557,80558],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[94,80560,80562],{"className":50623,"code":80561,"language":50625,"meta":24,"style":24},"const user=new Object({name:'小明',age:15})\n",[100,80563,80564],{"__ignoreMap":24},[103,80565,80566],{"class":105,"line":106},[103,80567,80561],{"class":113},[14,80569,80570],{},"三个常用的静态方法：",[22900,80572,80574],{"id":80573},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80576,80577],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80579,80580],{},[1451,80581],{"alt":24,"src":80582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80584,80585],{},[1451,80586],{"alt":24,"src":80587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[94,80589,80591],{"className":53057,"code":80590,"language":53059,"meta":24,"style":24},"\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",[100,80592,80593,80601,80609,80614,80619,80624,80629,80634,80639,80647],{"__ignoreMap":24},[103,80594,80595,80597,80599],{"class":105,"line":106},[103,80596,1023],{"class":113},[103,80598,51790],{"class":51290},[103,80600,51297],{"class":113},[103,80602,80603,80605,80607],{"class":105,"line":25},[103,80604,52134],{"class":113},[103,80606,51803],{"class":51290},[103,80608,51297],{"class":113},[103,80610,80611],{"class":105,"line":1168},[103,80612,80613],{"class":113},"    const o = { name: 'pink', age: 6 }\n",[103,80615,80616],{"class":105,"line":1183},[103,80617,80618],{"class":113},"    \u002F\u002F 获得所有属性名\n",[103,80620,80621],{"class":105,"line":1189},[103,80622,80623],{"class":113},"    const arr = Object.keys(o)\n",[103,80625,80626],{"class":105,"line":1203},[103,80627,80628],{"class":113},"    console.log(arr)\n",[103,80630,80631],{"class":105,"line":1209},[103,80632,80633],{"class":113},"    \u002F\u002F 获得所有属性值\n",[103,80635,80636],{"class":105,"line":1300},[103,80637,80638],{"class":113},"    console.log(Object.values(o))\n",[103,80640,80641,80643,80645],{"class":105,"line":1306},[103,80642,52407],{"class":113},[103,80644,51803],{"class":51290},[103,80646,51297],{"class":113},[103,80648,80649,80651,80653],{"class":105,"line":1318},[103,80650,51775],{"class":113},[103,80652,51790],{"class":51290},[103,80654,51297],{"class":113},[22900,80656,80658],{"id":80657},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80660,80661],{},"Object.assign(oo,o)",[14,80663,80664],{},"后的东西添加给前 是追加",[14,80666,80667],{},[1451,80668],{"alt":24,"src":80669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80671,80672],{},[1451,80673],{"alt":24,"src":80674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[94,80676,80678],{"className":53057,"code":80677,"language":53059,"meta":24,"style":24},"\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",[100,80679,80680,80688,80696,80700,80704,80708,80712,80716,80720,80725,80730,80735,80740,80745,80753],{"__ignoreMap":24},[103,80681,80682,80684,80686],{"class":105,"line":106},[103,80683,1023],{"class":113},[103,80685,51790],{"class":51290},[103,80687,51297],{"class":113},[103,80689,80690,80692,80694],{"class":105,"line":25},[103,80691,52134],{"class":113},[103,80693,51803],{"class":51290},[103,80695,51297],{"class":113},[103,80697,80698],{"class":105,"line":1168},[103,80699,80613],{"class":113},[103,80701,80702],{"class":105,"line":1183},[103,80703,80618],{"class":113},[103,80705,80706],{"class":105,"line":1189},[103,80707,80623],{"class":113},[103,80709,80710],{"class":105,"line":1203},[103,80711,80628],{"class":113},[103,80713,80714],{"class":105,"line":1209},[103,80715,80633],{"class":113},[103,80717,80718],{"class":105,"line":1300},[103,80719,80638],{"class":113},[103,80721,80722],{"class":105,"line":1306},[103,80723,80724],{"class":113},"    const oo = {}\n",[103,80726,80727],{"class":105,"line":1318},[103,80728,80729],{"class":113},"    Object.assign(oo, o)\n",[103,80731,80732],{"class":105,"line":1601},[103,80733,80734],{"class":113},"    console.log(oo)\n",[103,80736,80737],{"class":105,"line":1606},[103,80738,80739],{"class":113},"    Object.assign(o, { gender: '女' })\n",[103,80741,80742],{"class":105,"line":1612},[103,80743,80744],{"class":113},"    console.log(o)\n",[103,80746,80747,80749,80751],{"class":105,"line":1617},[103,80748,52407],{"class":113},[103,80750,51803],{"class":51290},[103,80752,51297],{"class":113},[103,80754,80755,80757,80759],{"class":105,"line":1631},[103,80756,51775],{"class":113},[103,80758,51790],{"class":51290},[103,80760,51297],{"class":113},[14,80762,80763],{},[1451,80764],{"alt":24,"src":80765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21988,80767,80769],{"id":80768},"_41052-array","4.10.5.2 Array",[14,80771,80772],{},"Array 是内置的构造函数，用于创建数组",[14,80774,80775],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[94,80777,80779],{"className":50623,"code":80778,"language":50625,"meta":24,"style":24},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[100,80780,80781,80786],{"__ignoreMap":24},[103,80782,80783],{"class":105,"line":106},[103,80784,80785],{"class":113},"const arr=new Array(3,5)\n",[103,80787,80788],{"class":105,"line":25},[103,80789,80790],{"class":113},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80792,80793],{},"Array的实例方法，这个方法是实例成员",[14,80795,80796],{},[1451,80797],{"alt":24,"src":80798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22900,80800,80802],{"id":80801},"_410521-reduce","4.10.5.2.1 reduce",[14,80804,80805],{},[1451,80806],{"alt":24,"src":80807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[94,80809,80811],{"className":53057,"code":80810,"language":53059,"meta":24,"style":24},"\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",[100,80812,80813,80821,80829,80834,80839,80844,80849,80853,80858,80863,80868,80872,80877,80882,80886,80891,80896,80901,80909],{"__ignoreMap":24},[103,80814,80815,80817,80819],{"class":105,"line":106},[103,80816,1023],{"class":113},[103,80818,51790],{"class":51290},[103,80820,51297],{"class":113},[103,80822,80823,80825,80827],{"class":105,"line":25},[103,80824,52134],{"class":113},[103,80826,51803],{"class":51290},[103,80828,51297],{"class":113},[103,80830,80831],{"class":105,"line":1168},[103,80832,80833],{"class":113},"    const arr = [1, 5, 8]\n",[103,80835,80836],{"class":105,"line":1183},[103,80837,80838],{"class":113},"    \u002F\u002F 1.没有初始值\n",[103,80840,80841],{"class":105,"line":1189},[103,80842,80843],{"class":113},"    const total = arr.reduce(function (prev, current) {\n",[103,80845,80846],{"class":105,"line":1203},[103,80847,80848],{"class":113},"      return prev + current\n",[103,80850,80851],{"class":105,"line":1209},[103,80852,33451],{"class":113},[103,80854,80855],{"class":105,"line":1300},[103,80856,80857],{"class":113},"    console.log(total)   \u002F\u002F14\n",[103,80859,80860],{"class":105,"line":1306},[103,80861,80862],{"class":113},"    \u002F\u002F 2.有初始值\n",[103,80864,80865],{"class":105,"line":1318},[103,80866,80867],{"class":113},"    const total1 = arr.reduce(function (prev, current) {\n",[103,80869,80870],{"class":105,"line":1601},[103,80871,80848],{"class":113},[103,80873,80874],{"class":105,"line":1606},[103,80875,80876],{"class":113},"    }, 10)\n",[103,80878,80879],{"class":105,"line":1612},[103,80880,80881],{"class":113},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[103,80883,80884],{"class":105,"line":1617},[103,80885,2389],{"emptyLinePlaceholder":30},[103,80887,80888],{"class":105,"line":1631},[103,80889,80890],{"class":113},"    \u002F\u002F 3.箭头函数写法\n",[103,80892,80893],{"class":105,"line":1636},[103,80894,80895],{"class":113},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[103,80897,80898],{"class":105,"line":1642},[103,80899,80900],{"class":113},"    console.log(total2)   \u002F\u002F24\n",[103,80902,80903,80905,80907],{"class":105,"line":1663},[103,80904,52407],{"class":113},[103,80906,51803],{"class":51290},[103,80908,51297],{"class":113},[103,80910,80911,80913,80915],{"class":105,"line":1668},[103,80912,51775],{"class":113},[103,80914,51790],{"class":51290},[103,80916,51297],{"class":113},[14,80918,80919],{},"执行过程：",[57,80921,80922,80925,80928],{},[60,80923,80924],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[60,80926,80927],{},"每一次循环，把返回值给作为下一次循环的上一次值",[60,80929,80930],{},"如果有起始值，则起始值作为上一次值",[94,80932,80934],{"className":53057,"code":80933,"language":53059,"meta":24,"style":24},"\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",[100,80935,80936,80944,80952,80956,80960,80964,80968,80972,80976,80981,80986,80991,80996,81001,81005,81009,81013,81017,81021,81025,81030,81034,81039,81043,81048,81053,81057,81061,81065,81073],{"__ignoreMap":24},[103,80937,80938,80940,80942],{"class":105,"line":106},[103,80939,1023],{"class":113},[103,80941,51790],{"class":51290},[103,80943,51297],{"class":113},[103,80945,80946,80948,80950],{"class":105,"line":25},[103,80947,52134],{"class":113},[103,80949,51803],{"class":51290},[103,80951,51297],{"class":113},[103,80953,80954],{"class":105,"line":1168},[103,80955,80833],{"class":113},[103,80957,80958],{"class":105,"line":1183},[103,80959,80838],{"class":113},[103,80961,80962],{"class":105,"line":1189},[103,80963,80843],{"class":113},[103,80965,80966],{"class":105,"line":1203},[103,80967,80848],{"class":113},[103,80969,80970],{"class":105,"line":1209},[103,80971,33451],{"class":113},[103,80973,80974],{"class":105,"line":1300},[103,80975,80857],{"class":113},[103,80977,80978],{"class":105,"line":1306},[103,80979,80980],{"class":113},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[103,80982,80983],{"class":105,"line":1318},[103,80984,80985],{"class":113},"    \u002F\u002F     1              5                    6\n",[103,80987,80988],{"class":105,"line":1601},[103,80989,80990],{"class":113},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[103,80992,80993],{"class":105,"line":1606},[103,80994,80995],{"class":113},"    \u002F\u002F     6              8                    14\n",[103,80997,80998],{"class":105,"line":1612},[103,80999,81000],{"class":113},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[103,81002,81003],{"class":105,"line":1617},[103,81004,80862],{"class":113},[103,81006,81007],{"class":105,"line":1631},[103,81008,80867],{"class":113},[103,81010,81011],{"class":105,"line":1636},[103,81012,80848],{"class":113},[103,81014,81015],{"class":105,"line":1642},[103,81016,80876],{"class":113},[103,81018,81019],{"class":105,"line":1663},[103,81020,80881],{"class":113},[103,81022,81023],{"class":105,"line":1668},[103,81024,80980],{"class":113},[103,81026,81027],{"class":105,"line":1682},[103,81028,81029],{"class":113},"    \u002F\u002F     10             1                     11\n",[103,81031,81032],{"class":105,"line":1687},[103,81033,80990],{"class":113},[103,81035,81036],{"class":105,"line":1716},[103,81037,81038],{"class":113},"    \u002F\u002F     11             5                    16\n",[103,81040,81041],{"class":105,"line":1721},[103,81042,80990],{"class":113},[103,81044,81045],{"class":105,"line":1738},[103,81046,81047],{"class":113},"    \u002F\u002F     16             8                    24\n",[103,81049,81050],{"class":105,"line":1743},[103,81051,81052],{"class":113},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[103,81054,81055],{"class":105,"line":1748},[103,81056,80890],{"class":113},[103,81058,81059],{"class":105,"line":1753},[103,81060,80895],{"class":113},[103,81062,81063],{"class":105,"line":1767},[103,81064,80900],{"class":113},[103,81066,81067,81069,81071],{"class":105,"line":1772},[103,81068,52407],{"class":113},[103,81070,51803],{"class":51290},[103,81072,51297],{"class":113},[103,81074,81075,81077,81079],{"class":105,"line":2566},[103,81076,51775],{"class":113},[103,81078,51790],{"class":51290},[103,81080,51297],{"class":113},[22900,81082,81084],{"id":81083},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81086,81087],{},[1451,81088],{"alt":24,"src":81089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[94,81091,81093],{"className":53057,"code":81092,"language":53059,"meta":24,"style":24},"\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",[100,81094,81095,81103,81111,81116,81121,81126,81131,81135,81140,81145,81150,81155,81160,81165,81169,81174,81178,81183,81191],{"__ignoreMap":24},[103,81096,81097,81099,81101],{"class":105,"line":106},[103,81098,1023],{"class":113},[103,81100,51790],{"class":51290},[103,81102,51297],{"class":113},[103,81104,81105,81107,81109],{"class":105,"line":25},[103,81106,52134],{"class":113},[103,81108,51803],{"class":51290},[103,81110,51297],{"class":113},[103,81112,81113],{"class":105,"line":1168},[103,81114,81115],{"class":113},"    const arr = [\n",[103,81117,81118],{"class":105,"line":1183},[103,81119,81120],{"class":113},"      { name: '张三', salary: 10000 },\n",[103,81122,81123],{"class":105,"line":1189},[103,81124,81125],{"class":113},"      { name: '李四', salary: 10000 },\n",[103,81127,81128],{"class":105,"line":1203},[103,81129,81130],{"class":113},"      { name: '王五', salary: 10000 }\n",[103,81132,81133],{"class":105,"line":1209},[103,81134,53099],{"class":113},[103,81136,81137],{"class":105,"line":1300},[103,81138,81139],{"class":113},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[103,81141,81142],{"class":105,"line":1306},[103,81143,81144],{"class":113},"    \u002F\u002F prev是累计值\n",[103,81146,81147],{"class":105,"line":1318},[103,81148,81149],{"class":113},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[103,81151,81152],{"class":105,"line":1601},[103,81153,81154],{"class":113},"    console.log(total)\n",[103,81156,81157],{"class":105,"line":1606},[103,81158,81159],{"class":113},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[103,81161,81162],{"class":105,"line":1612},[103,81163,81164],{"class":113},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[103,81166,81167],{"class":105,"line":1617},[103,81168,81159],{"class":113},[103,81170,81171],{"class":105,"line":1631},[103,81172,81173],{"class":113},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[103,81175,81176],{"class":105,"line":1636},[103,81177,81159],{"class":113},[103,81179,81180],{"class":105,"line":1642},[103,81181,81182],{"class":113},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[103,81184,81185,81187,81189],{"class":105,"line":1663},[103,81186,52407],{"class":113},[103,81188,51803],{"class":51290},[103,81190,51297],{"class":113},[103,81192,81193,81195,81197],{"class":105,"line":1668},[103,81194,51775],{"class":113},[103,81196,51790],{"class":51290},[103,81198,51297],{"class":113},[22900,81200,81202],{"id":81201},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81204,81205],{},[1451,81206],{"alt":24,"src":81207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81209,81210],{},[1451,81211],{"alt":24,"src":81212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[57,81214,81215],{},[60,81216,81217],{},"find()",[14,81219,81220],{},"循环查找，找到第一个就ok",[14,81222,81223],{},[17,81224,81227],{"href":81225,"rel":81226},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[21],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[94,81229,81231],{"className":50623,"code":81230,"language":50625,"meta":24,"style":24},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[100,81232,81233,81238,81243],{"__ignoreMap":24},[103,81234,81235],{"class":105,"line":106},[103,81236,81237],{"class":113},"const array1 = [5, 12, 8, 130, 44]\n",[103,81239,81240],{"class":105,"line":25},[103,81241,81242],{"class":113},"const found = array1.find((element) => element > 10)\n",[103,81244,81245],{"class":105,"line":1168},[103,81246,81247],{"class":113},"console.log(found)  \u002F\u002F12\n",[14,81249,81250,81252,81253,81258,81259,81262,81263,81265,81266,81271,81272,81274,81275,81277,81278,81280,81281],{},[100,81251,81217],{}," 方法是一个",[17,81254,81257],{"href":81255,"rel":81256},"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",[21],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[100,81260,81261],{},"callbackFn"," 函数，直到 ",[100,81264,81261],{}," 返回一个",[17,81267,81270],{"href":81268,"rel":81269},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[21],"真值","。然后 ",[100,81273,81217],{}," 返回该元素并停止迭代数组。如果 ",[100,81276,81261],{}," 从未返回真值，则 ",[100,81279,81217],{}," 返回 ",[100,81282,81283],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[94,81285,81287],{"className":53057,"code":81286,"language":53059,"meta":24,"style":24},"\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",[100,81288,81289,81297,81305,81310,81315,81320,81324,81329,81334,81338,81343,81348,81352,81356,81361,81366,81370,81374,81379,81384,81389,81394,81399,81403,81408,81413,81418,81423,81427,81432,81440],{"__ignoreMap":24},[103,81290,81291,81293,81295],{"class":105,"line":106},[103,81292,1023],{"class":113},[103,81294,51790],{"class":51290},[103,81296,51297],{"class":113},[103,81298,81299,81301,81303],{"class":105,"line":25},[103,81300,52134],{"class":113},[103,81302,51803],{"class":51290},[103,81304,51297],{"class":113},[103,81306,81307],{"class":105,"line":1168},[103,81308,81309],{"class":113},"    const arr = ['red', 'blue', 'green']\n",[103,81311,81312],{"class":105,"line":1183},[103,81313,81314],{"class":113},"    const found = arr.find(item => item === 'pink')\n",[103,81316,81317],{"class":105,"line":1189},[103,81318,81319],{"class":113},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[103,81321,81322],{"class":105,"line":1203},[103,81323,2389],{"emptyLinePlaceholder":30},[103,81325,81326],{"class":105,"line":1209},[103,81327,81328],{"class":113},"    \u002F\u002F 使用场景，用于查找数据\n",[103,81330,81331],{"class":105,"line":1300},[103,81332,81333],{"class":113},"    const arr1 = [\n",[103,81335,81336],{"class":105,"line":1306},[103,81337,79376],{"class":113},[103,81339,81340],{"class":105,"line":1318},[103,81341,81342],{"class":113},"        name: '小米',\n",[103,81344,81345],{"class":105,"line":1601},[103,81346,81347],{"class":113},"        price: 1999\n",[103,81349,81350],{"class":105,"line":1606},[103,81351,77882],{"class":113},[103,81353,81354],{"class":105,"line":1612},[103,81355,79376],{"class":113},[103,81357,81358],{"class":105,"line":1617},[103,81359,81360],{"class":113},"        name: '华为',\n",[103,81362,81363],{"class":105,"line":1631},[103,81364,81365],{"class":113},"        price: 3999\n",[103,81367,81368],{"class":105,"line":1636},[103,81369,52388],{"class":113},[103,81371,81372],{"class":105,"line":1642},[103,81373,53099],{"class":113},[103,81375,81376],{"class":105,"line":1663},[103,81377,81378],{"class":113},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[103,81380,81381],{"class":105,"line":1668},[103,81382,81383],{"class":113},"    \u002F\u002F const found1 = arr1.find(item => {\n",[103,81385,81386],{"class":105,"line":1682},[103,81387,81388],{"class":113},"    \u002F\u002F   if (item.name === '小米') {\n",[103,81390,81391],{"class":105,"line":1687},[103,81392,81393],{"class":113},"    \u002F\u002F     return item\n",[103,81395,81396],{"class":105,"line":1716},[103,81397,81398],{"class":113},"    \u002F\u002F   }\n",[103,81400,81401],{"class":105,"line":1721},[103,81402,63280],{"class":113},[103,81404,81405],{"class":105,"line":1738},[103,81406,81407],{"class":113},"    \u002F\u002F 另一种写法\n",[103,81409,81410],{"class":105,"line":1743},[103,81411,81412],{"class":113},"    const found1 = arr1.find(item => {\n",[103,81414,81415],{"class":105,"line":1748},[103,81416,81417],{"class":113},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[103,81419,81420],{"class":105,"line":1753},[103,81421,81422],{"class":113},"      return item.name = '小米'\n",[103,81424,81425],{"class":105,"line":1767},[103,81426,33451],{"class":113},[103,81428,81429],{"class":105,"line":1772},[103,81430,81431],{"class":113},"    console.log(found1)\n",[103,81433,81434,81436,81438],{"class":105,"line":2566},[103,81435,52407],{"class":113},[103,81437,51803],{"class":51290},[103,81439,51297],{"class":113},[103,81441,81442,81444,81446],{"class":105,"line":2580},[103,81443,51775],{"class":113},[103,81445,51790],{"class":51290},[103,81447,51297],{"class":113},[14,81449,81450],{},[1451,81451],{"alt":24,"src":81452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81454,81455],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[57,81457,81458],{"start":25},[60,81459,81460],{},"every()返回的是布尔值",[14,81462,81463],{},[17,81464,81467],{"href":81465,"rel":81466},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[21],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81469,81470],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81472,81473],{},"some是只有有一个就没问题",[14,81475,81476],{},"every是必须全是才行",[94,81478,81482],{"className":81479,"code":81480,"language":81481,"meta":24,"style":24},"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",[100,81483,81484,81500,81514,81518,81527],{"__ignoreMap":24},[103,81485,81486,81488,81491,81493,81495,81498],{"class":105,"line":106},[103,81487,54439],{"class":109},[103,81489,81490],{"class":113}," isBigEnough(element, ",[103,81492,74048],{"class":109},[103,81494,12425],{"class":113},[103,81496,81497],{"class":109},"array",[103,81499,12432],{"class":113},[103,81501,81502,81505,81508,81510,81512],{"class":105,"line":25},[103,81503,81504],{"class":109},"  return",[103,81506,81507],{"class":113}," element ",[103,81509,1699],{"class":109},[103,81511,2027],{"class":162},[103,81513,1279],{"class":113},[103,81515,81516],{"class":105,"line":1168},[103,81517,1554],{"class":113},[103,81519,81520,81523,81525],{"class":105,"line":1183},[103,81521,81522],{"class":113},"[12, 5, 8, 130, 44].every(isBigEnough); ",[103,81524,33319],{"class":109},[103,81526,54506],{"class":113},[103,81528,81529,81532,81534],{"class":105,"line":1189},[103,81530,81531],{"class":113},"[12, 54, 18, 130, 44].every(isBigEnough); ",[103,81533,33319],{"class":109},[103,81535,57930],{"class":113},[94,81537,81539],{"className":53057,"code":81538,"language":53059,"meta":24,"style":24},"\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",[100,81540,81541,81549,81557,81562,81566,81571,81576,81584],{"__ignoreMap":24},[103,81542,81543,81545,81547],{"class":105,"line":106},[103,81544,1023],{"class":113},[103,81546,51790],{"class":51290},[103,81548,51297],{"class":113},[103,81550,81551,81553,81555],{"class":105,"line":25},[103,81552,52134],{"class":113},[103,81554,51803],{"class":51290},[103,81556,51297],{"class":113},[103,81558,81559],{"class":105,"line":1168},[103,81560,81561],{"class":113},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[103,81563,81564],{"class":105,"line":1183},[103,81565,78312],{"class":113},[103,81567,81568],{"class":105,"line":1189},[103,81569,81570],{"class":113},"    const flag = arr.every(item => item >= 10)\n",[103,81572,81573],{"class":105,"line":1203},[103,81574,81575],{"class":113},"    console.log(flag)    \u002F\u002Ftrue\n",[103,81577,81578,81580,81582],{"class":105,"line":1209},[103,81579,52407],{"class":113},[103,81581,51803],{"class":51290},[103,81583,51297],{"class":113},[103,81585,81586,81588,81590],{"class":105,"line":1300},[103,81587,51775],{"class":113},[103,81589,51790],{"class":51290},[103,81591,51297],{"class":113},[94,81593,81595],{"className":53057,"code":81594,"language":53059,"meta":24,"style":24},"\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",[100,81596,81597,81605,81613,81617,81622,81627,81632,81640],{"__ignoreMap":24},[103,81598,81599,81601,81603],{"class":105,"line":106},[103,81600,1023],{"class":113},[103,81602,51790],{"class":51290},[103,81604,51297],{"class":113},[103,81606,81607,81609,81611],{"class":105,"line":25},[103,81608,52134],{"class":113},[103,81610,51803],{"class":51290},[103,81612,51297],{"class":113},[103,81614,81615],{"class":105,"line":1168},[103,81616,81561],{"class":113},[103,81618,81619],{"class":105,"line":1183},[103,81620,81621],{"class":113},"    const arr = [10, 0, 5]\n",[103,81623,81624],{"class":105,"line":1189},[103,81625,81626],{"class":113},"    const flag = arr.some(item => item >= 10)\n",[103,81628,81629],{"class":105,"line":1203},[103,81630,81631],{"class":113},"    console.log(flag)   \u002F\u002Ftrue\n",[103,81633,81634,81636,81638],{"class":105,"line":1209},[103,81635,52407],{"class":113},[103,81637,51803],{"class":51290},[103,81639,51297],{"class":113},[103,81641,81642,81644,81646],{"class":105,"line":1300},[103,81643,51775],{"class":113},[103,81645,51790],{"class":51290},[103,81647,51297],{"class":113},[22900,81649,81651],{"id":81650},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81653,81654],{},[1451,81655],{"alt":24,"src":81656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[94,81658,81660],{"className":50623,"code":81659,"language":50625,"meta":24,"style":24},"\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",[100,81661,81662,81672,81686,81690,81698,81712,81732,81744,81752,81759,81771,81783,81795,81807,81817,81827,81831,81839,81847,81851,81859,81871,81879,81901,81906,81911,81944,81952,81960,81964],{"__ignoreMap":24},[103,81663,81664,81666,81668,81670],{"class":105,"line":106},[103,81665,51287],{"class":113},[103,81667,51291],{"class":51290},[103,81669,51294],{"class":1952},[103,81671,51297],{"class":113},[103,81673,81674,81676,81678,81680,81682,81684],{"class":105,"line":25},[103,81675,1023],{"class":113},[103,81677,50625],{"class":51290},[103,81679,51306],{"class":1952},[103,81681,159],{"class":113},[103,81683,51311],{"class":218},[103,81685,51297],{"class":113},[103,81687,81688],{"class":105,"line":1168},[103,81689,2389],{"emptyLinePlaceholder":30},[103,81691,81692,81694,81696],{"class":105,"line":1183},[103,81693,1023],{"class":113},[103,81695,51324],{"class":51290},[103,81697,51297],{"class":113},[103,81699,81700,81702,81704,81706,81708,81710],{"class":105,"line":1189},[103,81701,52134],{"class":113},[103,81703,51334],{"class":51290},[103,81705,51337],{"class":1952},[103,81707,159],{"class":113},[103,81709,51342],{"class":218},[103,81711,51297],{"class":113},[103,81713,81714,81716,81718,81720,81722,81724,81726,81728,81730],{"class":105,"line":1203},[103,81715,52134],{"class":113},[103,81717,51334],{"class":51290},[103,81719,14910],{"class":1952},[103,81721,159],{"class":113},[103,81723,51381],{"class":218},[103,81725,51361],{"class":1952},[103,81727,159],{"class":113},[103,81729,51388],{"class":218},[103,81731,51297],{"class":113},[103,81733,81734,81736,81738,81740,81742],{"class":105,"line":1209},[103,81735,52134],{"class":113},[103,81737,51397],{"class":51290},[103,81739,51400],{"class":113},[103,81741,51397],{"class":51290},[103,81743,51297],{"class":113},[103,81745,81746,81748,81750],{"class":105,"line":1300},[103,81747,52134],{"class":113},[103,81749,5116],{"class":51290},[103,81751,51297],{"class":113},[103,81753,81754,81757],{"class":105,"line":1306},[103,81755,81756],{"class":51290},"    div",[103,81758,15562],{"class":113},[103,81760,81761,81763,81765,81767,81769],{"class":105,"line":1318},[103,81762,54761],{"class":162},[103,81764,51427],{"class":113},[103,81766,1711],{"class":162},[103,81768,51482],{"class":109},[103,81770,1279],{"class":113},[103,81772,81773,81775,81777,81779,81781],{"class":105,"line":1601},[103,81774,54775],{"class":162},[103,81776,51427],{"class":113},[103,81778,514],{"class":162},[103,81780,51482],{"class":109},[103,81782,1279],{"class":113},[103,81784,81785,81787,81789,81791,81793],{"class":105,"line":1606},[103,81786,57349],{"class":162},[103,81788,51427],{"class":113},[103,81790,514],{"class":162},[103,81792,51482],{"class":109},[103,81794,1279],{"class":113},[103,81796,81797,81799,81801,81803,81805],{"class":105,"line":1612},[103,81798,65123],{"class":162},[103,81800,51427],{"class":113},[103,81802,611],{"class":162},[103,81804,51482],{"class":109},[103,81806,1279],{"class":113},[103,81808,81809,81811,81813,81815],{"class":105,"line":1617},[103,81810,57276],{"class":162},[103,81812,51427],{"class":113},[103,81814,51582],{"class":162},[103,81816,1279],{"class":113},[103,81818,81819,81821,81823,81825],{"class":105,"line":1631},[103,81820,54874],{"class":162},[103,81822,51427],{"class":113},[103,81824,51635],{"class":162},[103,81826,1279],{"class":113},[103,81828,81829],{"class":105,"line":1636},[103,81830,2176],{"class":113},[103,81832,81833,81835,81837],{"class":105,"line":1642},[103,81834,52407],{"class":113},[103,81836,5116],{"class":51290},[103,81838,51297],{"class":113},[103,81840,81841,81843,81845],{"class":105,"line":1663},[103,81842,51775],{"class":113},[103,81844,51324],{"class":51290},[103,81846,51297],{"class":113},[103,81848,81849],{"class":105,"line":1668},[103,81850,2389],{"emptyLinePlaceholder":30},[103,81852,81853,81855,81857],{"class":105,"line":1682},[103,81854,1023],{"class":113},[103,81856,51790],{"class":51290},[103,81858,51297],{"class":113},[103,81860,81861,81863,81865,81867,81869],{"class":105,"line":1687},[103,81862,52134],{"class":113},[103,81864,51601],{"class":51290},[103,81866,55304],{"class":113},[103,81868,51601],{"class":51290},[103,81870,51297],{"class":113},[103,81872,81873,81875,81877],{"class":105,"line":1716},[103,81874,52134],{"class":113},[103,81876,51803],{"class":51290},[103,81878,51297],{"class":113},[103,81880,81881,81883,81886,81888,81891,81894,81896,81899],{"class":105,"line":1721},[103,81882,11211],{"class":109},[103,81884,81885],{"class":162}," spec",[103,81887,13554],{"class":109},[103,81889,81890],{"class":113}," { size: ",[103,81892,81893],{"class":218},"'40cm*40cm'",[103,81895,55454],{"class":113},[103,81897,81898],{"class":218},"'黑色'",[103,81900,55594],{"class":113},[103,81902,81903],{"class":105,"line":1738},[103,81904,81905],{"class":172},"    \u002F\u002F const arr = Object.values(spec)\n",[103,81907,81908],{"class":105,"line":1743},[103,81909,81910],{"class":172},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[103,81912,81913,81915,81917,81919,81922,81924,81926,81929,81932,81935,81937,81939,81942],{"class":105,"line":1748},[103,81914,52397],{"class":113},[103,81916,54389],{"class":1952},[103,81918,114],{"class":113},[103,81920,81921],{"class":218},"'div'",[103,81923,74239],{"class":113},[103,81925,159],{"class":109},[103,81927,81928],{"class":113}," Object.",[103,81930,81931],{"class":1952},"values",[103,81933,81934],{"class":113},"(spec).",[103,81936,74213],{"class":1952},[103,81938,114],{"class":113},[103,81940,81941],{"class":218},"'\u002F'",[103,81943,120],{"class":113},[103,81945,81946,81948,81950],{"class":105,"line":1753},[103,81947,52407],{"class":113},[103,81949,51803],{"class":51290},[103,81951,51297],{"class":113},[103,81953,81954,81956,81958],{"class":105,"line":1767},[103,81955,51775],{"class":113},[103,81957,51790],{"class":51290},[103,81959,51297],{"class":113},[103,81961,81962],{"class":105,"line":1772},[103,81963,2389],{"emptyLinePlaceholder":30},[103,81965,81966,81968,81970],{"class":105,"line":2566},[103,81967,51775],{"class":113},[103,81969,50625],{"class":51290},[103,81971,51297],{"class":113},[14,81973,81974],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22900,81976,81978],{"id":81977},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,81980,81981],{},"静态方法，将伪数组转换为真数组",[14,81983,81984],{},[1451,81985],{"alt":24,"src":81986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[94,81988,81990],{"className":53057,"code":81989,"language":53059,"meta":24,"style":24},"\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",[100,81991,81992,82000,82008,82020,82032,82044,82052,82060,82065,82070,82075,82080,82088],{"__ignoreMap":24},[103,81993,81994,81996,81998],{"class":105,"line":106},[103,81995,1023],{"class":113},[103,81997,51790],{"class":51290},[103,81999,51297],{"class":113},[103,82001,82002,82004,82006],{"class":105,"line":25},[103,82003,52134],{"class":113},[103,82005,1120],{"class":51290},[103,82007,51297],{"class":113},[103,82009,82010,82012,82014,82016,82018],{"class":105,"line":1168},[103,82011,51331],{"class":113},[103,82013,60],{"class":51290},[103,82015,55304],{"class":113},[103,82017,60],{"class":51290},[103,82019,51297],{"class":113},[103,82021,82022,82024,82026,82028,82030],{"class":105,"line":1183},[103,82023,51331],{"class":113},[103,82025,60],{"class":51290},[103,82027,55304],{"class":113},[103,82029,60],{"class":51290},[103,82031,51297],{"class":113},[103,82033,82034,82036,82038,82040,82042],{"class":105,"line":1189},[103,82035,51331],{"class":113},[103,82037,60],{"class":51290},[103,82039,55304],{"class":113},[103,82041,60],{"class":51290},[103,82043,51297],{"class":113},[103,82045,82046,82048,82050],{"class":105,"line":1203},[103,82047,52407],{"class":113},[103,82049,1120],{"class":51290},[103,82051,51297],{"class":113},[103,82053,82054,82056,82058],{"class":105,"line":1209},[103,82055,52134],{"class":113},[103,82057,51803],{"class":51290},[103,82059,51297],{"class":113},[103,82061,82062],{"class":105,"line":1300},[103,82063,82064],{"class":113},"    const lis = document.querySelectorAll('li')\n",[103,82066,82067],{"class":105,"line":1306},[103,82068,82069],{"class":113},"    const liss = Array.from(lis)\n",[103,82071,82072],{"class":105,"line":1318},[103,82073,82074],{"class":113},"    liss.pop()\n",[103,82076,82077],{"class":105,"line":1601},[103,82078,82079],{"class":113},"    console.log(liss)\n",[103,82081,82082,82084,82086],{"class":105,"line":1606},[103,82083,52407],{"class":113},[103,82085,51803],{"class":51290},[103,82087,51297],{"class":113},[103,82089,82090,82092,82094],{"class":105,"line":1612},[103,82091,51775],{"class":113},[103,82093,51790],{"class":51290},[103,82095,51297],{"class":113},[14,82097,82098],{},[1451,82099],{"alt":24,"src":82100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21988,82102,82104],{"id":82103},"_41053-string","4.10.5.3 String",[14,82106,82107],{},[1451,82108],{"alt":24,"src":82109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22900,82111,82113],{"id":82112},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[94,82115,82117],{"className":53057,"code":82116,"language":53059,"meta":24,"style":24},"\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",[100,82118,82119,82127,82135,82140,82145,82150,82154,82159,82164,82169,82177],{"__ignoreMap":24},[103,82120,82121,82123,82125],{"class":105,"line":106},[103,82122,1023],{"class":113},[103,82124,51790],{"class":51290},[103,82126,51297],{"class":113},[103,82128,82129,82131,82133],{"class":105,"line":25},[103,82130,52134],{"class":113},[103,82132,51803],{"class":51290},[103,82134,51297],{"class":113},[103,82136,82137],{"class":105,"line":1168},[103,82138,82139],{"class":113},"    \u002F\u002F 把字符串转化为数组\n",[103,82141,82142],{"class":105,"line":1183},[103,82143,82144],{"class":113},"    const str = 'pink,red'\n",[103,82146,82147],{"class":105,"line":1189},[103,82148,82149],{"class":113},"    const arr = str.split(',')\n",[103,82151,82152],{"class":105,"line":1203},[103,82153,80628],{"class":113},[103,82155,82156],{"class":105,"line":1209},[103,82157,82158],{"class":113},"    const str1 = '2025-8-25'\n",[103,82160,82161],{"class":105,"line":1300},[103,82162,82163],{"class":113},"    const arr1 = str1.split('-')\n",[103,82165,82166],{"class":105,"line":1306},[103,82167,82168],{"class":113},"    console.log(arr1)\n",[103,82170,82171,82173,82175],{"class":105,"line":1318},[103,82172,52407],{"class":113},[103,82174,51803],{"class":51290},[103,82176,51297],{"class":113},[103,82178,82179,82181,82183],{"class":105,"line":1601},[103,82180,51775],{"class":113},[103,82182,51790],{"class":51290},[103,82184,51297],{"class":113},[22900,82186,82188],{"id":82187},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82190,5171],{},[14,82192,82193],{},"substring(indexStart)",[14,82195,82196],{},"substring(indexStart, indexEnd)",[1120,82198,82199,82210,82222,82232],{},[60,82200,82201,82202,82205,82206,82209],{},"如果省略了 ",[100,82203,82204],{},"indexEnd","，则 ",[100,82207,82208],{},"substring()"," 提取字符直到字符串的末尾",[60,82211,82212,82213,82216,82217,82205,82219,82221],{},"如果 ",[100,82214,82215],{},"indexStart"," 等于 ",[100,82218,82204],{},[100,82220,82208],{}," 返回一个空字符串",[60,82223,82212,82224,82226,82227,82205,82229,82231],{},[100,82225,82215],{}," 大于 ",[100,82228,82204],{},[100,82230,82208],{}," 的效果就像交换了这两个参数一样",[60,82233,82234],{},"结束的索引号不包含想要截取的部分",[94,82236,82238],{"className":81479,"code":82237,"language":81481,"meta":24,"style":24},"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",[100,82239,82240,82252,82256,82290,82320,82324,82355,82359,82386,82416,82446,82450,82481],{"__ignoreMap":24},[103,82241,82242,82245,82247,82250],{"class":105,"line":106},[103,82243,82244],{"class":113},"const anyString ",[103,82246,159],{"class":109},[103,82248,82249],{"class":218}," \"Mozilla\"",[103,82251,1279],{"class":113},[103,82253,82254],{"class":105,"line":25},[103,82255,2389],{"emptyLinePlaceholder":30},[103,82257,82258,82261,82263,82265,82267,82270,82272,82275,82277,82279,82281,82283,82285,82287],{"class":105,"line":1168},[103,82259,82260],{"class":162},"console",[103,82262,671],{"class":113},[103,82264,58237],{"class":162},[103,82266,114],{"class":113},[103,82268,82269],{"class":162},"anyString",[103,82271,671],{"class":113},[103,82273,82274],{"class":162},"substring",[103,82276,114],{"class":113},[103,82278,305],{"class":162},[103,82280,12425],{"class":113},[103,82282,331],{"class":162},[103,82284,75243],{"class":113},[103,82286,33319],{"class":109},[103,82288,82289],{"class":218}," 'M'\n",[103,82291,82292,82294,82296,82298,82300,82302,82304,82306,82308,82310,82312,82314,82316,82318],{"class":105,"line":1183},[103,82293,82260],{"class":162},[103,82295,671],{"class":113},[103,82297,58237],{"class":162},[103,82299,114],{"class":113},[103,82301,82269],{"class":162},[103,82303,671],{"class":113},[103,82305,82274],{"class":162},[103,82307,114],{"class":113},[103,82309,331],{"class":162},[103,82311,12425],{"class":113},[103,82313,305],{"class":162},[103,82315,75243],{"class":113},[103,82317,33319],{"class":109},[103,82319,82289],{"class":218},[103,82321,82322],{"class":105,"line":1189},[103,82323,2389],{"emptyLinePlaceholder":30},[103,82325,82326,82328,82330,82332,82334,82336,82338,82340,82342,82344,82346,82348,82350,82352],{"class":105,"line":1203},[103,82327,82260],{"class":162},[103,82329,671],{"class":113},[103,82331,58237],{"class":162},[103,82333,114],{"class":113},[103,82335,82269],{"class":162},[103,82337,671],{"class":113},[103,82339,82274],{"class":162},[103,82341,114],{"class":113},[103,82343,305],{"class":162},[103,82345,12425],{"class":113},[103,82347,457],{"class":162},[103,82349,75243],{"class":113},[103,82351,33319],{"class":109},[103,82353,82354],{"class":218}," 'Mozill'\n",[103,82356,82357],{"class":105,"line":1209},[103,82358,2389],{"emptyLinePlaceholder":30},[103,82360,82361,82363,82365,82367,82369,82371,82373,82375,82377,82379,82381,82383],{"class":105,"line":1300},[103,82362,82260],{"class":162},[103,82364,671],{"class":113},[103,82366,58237],{"class":162},[103,82368,114],{"class":113},[103,82370,82269],{"class":162},[103,82372,671],{"class":113},[103,82374,82274],{"class":162},[103,82376,114],{"class":113},[103,82378,406],{"class":162},[103,82380,75243],{"class":113},[103,82382,33319],{"class":109},[103,82384,82385],{"class":218}," 'lla'\n",[103,82387,82388,82390,82392,82394,82396,82398,82400,82402,82404,82406,82408,82410,82412,82414],{"class":105,"line":1306},[103,82389,82260],{"class":162},[103,82391,671],{"class":113},[103,82393,58237],{"class":162},[103,82395,114],{"class":113},[103,82397,82269],{"class":162},[103,82399,671],{"class":113},[103,82401,82274],{"class":162},[103,82403,114],{"class":113},[103,82405,406],{"class":162},[103,82407,12425],{"class":113},[103,82409,482],{"class":162},[103,82411,75299],{"class":113},[103,82413,33319],{"class":109},[103,82415,82385],{"class":218},[103,82417,82418,82420,82422,82424,82426,82428,82430,82432,82434,82436,82438,82440,82442,82444],{"class":105,"line":1318},[103,82419,82260],{"class":162},[103,82421,671],{"class":113},[103,82423,58237],{"class":162},[103,82425,114],{"class":113},[103,82427,82269],{"class":162},[103,82429,671],{"class":113},[103,82431,82274],{"class":162},[103,82433,114],{"class":113},[103,82435,482],{"class":162},[103,82437,12425],{"class":113},[103,82439,406],{"class":162},[103,82441,75243],{"class":113},[103,82443,33319],{"class":109},[103,82445,82385],{"class":218},[103,82447,82448],{"class":105,"line":1601},[103,82449,2389],{"emptyLinePlaceholder":30},[103,82451,82452,82454,82456,82458,82460,82462,82464,82466,82468,82470,82472,82474,82476,82478],{"class":105,"line":1606},[103,82453,82260],{"class":162},[103,82455,671],{"class":113},[103,82457,58237],{"class":162},[103,82459,114],{"class":113},[103,82461,82269],{"class":162},[103,82463,671],{"class":113},[103,82465,82274],{"class":162},[103,82467,114],{"class":113},[103,82469,305],{"class":162},[103,82471,12425],{"class":113},[103,82473,482],{"class":162},[103,82475,75243],{"class":113},[103,82477,33319],{"class":109},[103,82479,82480],{"class":218}," 'Mozilla'\n",[103,82482,82483,82485,82487,82489,82491,82493,82495,82497,82499,82501,82503,82505,82507,82509],{"class":105,"line":1612},[103,82484,82260],{"class":162},[103,82486,671],{"class":113},[103,82488,58237],{"class":162},[103,82490,114],{"class":113},[103,82492,82269],{"class":162},[103,82494,671],{"class":113},[103,82496,82274],{"class":162},[103,82498,114],{"class":113},[103,82500,305],{"class":162},[103,82502,12425],{"class":113},[103,82504,559],{"class":162},[103,82506,75243],{"class":113},[103,82508,33319],{"class":109},[103,82510,82480],{"class":218},[22900,82512,82514],{"id":82513},"_410533-startswith","4.10.5.3.3 startsWith",[14,82516,82517,82520,82521,82526,82527,82529,82530],{},[100,82518,82519],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[263,82522,82523],{},[100,82524,82525],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[100,82528,1351],{}," 或 ",[100,82531,66010],{},[94,82533,82535],{"className":77485,"code":82534,"language":77487,"meta":24,"style":24},"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",[100,82536,82537,82549,82568,82573,82593],{"__ignoreMap":24},[103,82538,82539,82541,82544,82546],{"class":105,"line":106},[103,82540,6782],{"class":109},[103,82542,82543],{"class":113}," str1 ",[103,82545,159],{"class":109},[103,82547,82548],{"class":218}," \"Saturday night plans\"\n",[103,82550,82551,82553,82555,82558,82561,82563,82566],{"class":105,"line":25},[103,82552,77522],{"class":113},[103,82554,58237],{"class":1952},[103,82556,82557],{"class":113},"(str1.",[103,82559,82560],{"class":1952},"startsWith",[103,82562,114],{"class":113},[103,82564,82565],{"class":218},"\"Sat\"",[103,82567,30487],{"class":113},[103,82569,82570],{"class":105,"line":1168},[103,82571,82572],{"class":172},"\u002F\u002F Expected output: true\n",[103,82574,82575,82577,82579,82581,82583,82585,82587,82589,82591],{"class":105,"line":1183},[103,82576,77522],{"class":113},[103,82578,58237],{"class":1952},[103,82580,82557],{"class":113},[103,82582,82560],{"class":1952},[103,82584,114],{"class":113},[103,82586,82565],{"class":218},[103,82588,12425],{"class":113},[103,82590,185],{"class":162},[103,82592,30487],{"class":113},[103,82594,82595],{"class":105,"line":1189},[103,82596,82597],{"class":172},"\u002F\u002F Expected output: false\n",[94,82599,82601],{"className":50623,"code":82600,"language":50625,"meta":24,"style":24},"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",[100,82602,82603,82608,82613,82617,82622,82627],{"__ignoreMap":24},[103,82604,82605],{"class":105,"line":106},[103,82606,82607],{"class":113},"startsWith(searchString)\n",[103,82609,82610],{"class":105,"line":25},[103,82611,82612],{"class":113},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[103,82614,82615],{"class":105,"line":1168},[103,82616,2389],{"emptyLinePlaceholder":30},[103,82618,82619],{"class":105,"line":1183},[103,82620,82621],{"class":113},"const str3 = 'pink老师上课中'\n",[103,82623,82624],{"class":105,"line":1189},[103,82625,82626],{"class":113},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[103,82628,82629],{"class":105,"line":1203},[103,82630,82631],{"class":113},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22900,82633,82635],{"id":82634},"_410534-includes","4.10.5.3.4 includes",[14,82637,82638],{},"includes(searchString) includes(searchString, position)",[57,82640,82641],{},[60,82642,82643],{},"searchString:",[14,82645,82646,82647,82649,82650,82655,82656,82661,82662,21490,82665,82668,82669,82672],{},"一个要在 ",[100,82648,1288],{}," 中查找的字符串。",[17,82651,82654],{"href":82652,"rel":82653},"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",[21],"不能是正则表达式","。所有非正则表达式的值都会被",[17,82657,82660],{"href":82658,"rel":82659},"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",[21],"强制转换为字符串","，因此如果该参数被省略或传入 ",[100,82663,82664],{},"undefined",[100,82666,82667],{},"includes()"," 方法会在字符串中搜索 ",[100,82670,82671],{},"\"undefined\"","，这通常不是你想要的",[57,82674,82675],{"start":25},[60,82676,82677,972],{},[100,82678,82679],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82681,82682,82683,82686,82687],{},"在字符串中开始搜索 ",[100,82684,82685],{},"searchString"," 的位置。默认值为 ",[100,82688,305],{},[57,82690,82691],{"start":1168},[60,82692,82693],{},"返回值：",[14,82695,82696,82697,82699,82700,82704,82705],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[100,82698,82685],{}," 为空字符串的情况），则返回 ",[263,82701,82702],{},[100,82703,1351],{}," ，否则返回 ",[263,82706,82707],{},[100,82708,66010],{},[57,82710,82711],{"start":1183},[60,82712,82713],{},"异常：",[14,82715,82212,82716,13785,82718,82722],{},[100,82717,82685],{},[17,82719,82721],{"href":82652,"rel":82720},[21],"是一个正则表达式","，则会抛出",[14,82724,82725],{},"只要是有就是true，不需要非得以谁开头结尾",[94,82727,82729],{"className":77485,"code":82728,"language":77487,"meta":24,"style":24},"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",[100,82730,82731,82742,82765,82784,82804,82826,82845],{"__ignoreMap":24},[103,82732,82733,82735,82737,82739],{"class":105,"line":106},[103,82734,6782],{"class":109},[103,82736,79765],{"class":113},[103,82738,159],{"class":109},[103,82740,82741],{"class":218}," \"To be, or not to be, that is the question.\"\n",[103,82743,82744,82746,82748,82751,82754,82756,82759,82762],{"class":105,"line":25},[103,82745,77522],{"class":113},[103,82747,58237],{"class":1952},[103,82749,82750],{"class":113},"(str.",[103,82752,82753],{"class":1952},"includes",[103,82755,114],{"class":113},[103,82757,82758],{"class":218},"\"To be\"",[103,82760,82761],{"class":113},"))",[103,82763,82764],{"class":172},"  \u002F\u002F true\n",[103,82766,82767,82769,82771,82773,82775,82777,82780,82782],{"class":105,"line":1168},[103,82768,77522],{"class":113},[103,82770,58237],{"class":1952},[103,82772,82750],{"class":113},[103,82774,82753],{"class":1952},[103,82776,114],{"class":113},[103,82778,82779],{"class":218},"\"question\"",[103,82781,82761],{"class":113},[103,82783,82764],{"class":172},[103,82785,82786,82788,82790,82792,82794,82796,82799,82801],{"class":105,"line":1183},[103,82787,77522],{"class":113},[103,82789,58237],{"class":1952},[103,82791,82750],{"class":113},[103,82793,82753],{"class":1952},[103,82795,114],{"class":113},[103,82797,82798],{"class":218},"\"nonexistent\"",[103,82800,82761],{"class":113},[103,82802,82803],{"class":172},"  \u002F\u002F false\n",[103,82805,82806,82808,82810,82812,82814,82816,82818,82820,82822,82824],{"class":105,"line":1189},[103,82807,77522],{"class":113},[103,82809,58237],{"class":1952},[103,82811,82750],{"class":113},[103,82813,82753],{"class":1952},[103,82815,114],{"class":113},[103,82817,82758],{"class":218},[103,82819,12425],{"class":113},[103,82821,331],{"class":162},[103,82823,82761],{"class":113},[103,82825,82803],{"class":172},[103,82827,82828,82830,82832,82834,82836,82838,82841,82843],{"class":105,"line":1203},[103,82829,77522],{"class":113},[103,82831,58237],{"class":1952},[103,82833,82750],{"class":113},[103,82835,82753],{"class":1952},[103,82837,114],{"class":113},[103,82839,82840],{"class":218},"\"TO BE\"",[103,82842,82761],{"class":113},[103,82844,82803],{"class":172},[103,82846,82847,82849,82851,82853,82855,82857,82859,82861],{"class":105,"line":1209},[103,82848,77522],{"class":113},[103,82850,58237],{"class":1952},[103,82852,82750],{"class":113},[103,82854,82753],{"class":1952},[103,82856,114],{"class":113},[103,82858,7642],{"class":218},[103,82860,82761],{"class":113},[103,82862,82764],{"class":172},[22900,82864,82866],{"id":82865},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[94,82868,82870],{"className":53057,"code":82869,"language":53059,"meta":24,"style":24},"\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",[100,82871,82872,82880,82888,82893,82898,82903,82908,82913,82921],{"__ignoreMap":24},[103,82873,82874,82876,82878],{"class":105,"line":106},[103,82875,1023],{"class":113},[103,82877,51790],{"class":51290},[103,82879,51297],{"class":113},[103,82881,82882,82884,82886],{"class":105,"line":25},[103,82883,52134],{"class":113},[103,82885,51803],{"class":51290},[103,82887,51297],{"class":113},[103,82889,82890],{"class":105,"line":1168},[103,82891,82892],{"class":113},"    const num = 10\n",[103,82894,82895],{"class":105,"line":1183},[103,82896,82897],{"class":113},"    \u002F\u002F 强制转换\n",[103,82899,82900],{"class":105,"line":1189},[103,82901,82902],{"class":113},"    console.log(String(num))\n",[103,82904,82905],{"class":105,"line":1203},[103,82906,82907],{"class":113},"    \u002F\u002F toString()方法转换\n",[103,82909,82910],{"class":105,"line":1209},[103,82911,82912],{"class":113},"    console.log(num.toString())\n",[103,82914,82915,82917,82919],{"class":105,"line":1300},[103,82916,52407],{"class":113},[103,82918,51803],{"class":51290},[103,82920,51297],{"class":113},[103,82922,82923,82925,82927],{"class":105,"line":1306},[103,82924,51775],{"class":113},[103,82926,51790],{"class":51290},[103,82928,51297],{"class":113},[22900,82930,82932],{"id":82931},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,82934,82935],{},[1451,82936],{"alt":24,"src":82937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[94,82939,82941],{"className":50623,"code":82940,"language":50625,"meta":24,"style":24},"\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",[100,82942,82943,82953,82967,82971,82979,82993,83013,83025,83033,83037,83045,83057,83065,83077,83082,83087,83092,83139,83155,83163,83171,83175],{"__ignoreMap":24},[103,82944,82945,82947,82949,82951],{"class":105,"line":106},[103,82946,51287],{"class":113},[103,82948,51291],{"class":51290},[103,82950,51294],{"class":1952},[103,82952,51297],{"class":113},[103,82954,82955,82957,82959,82961,82963,82965],{"class":105,"line":25},[103,82956,1023],{"class":113},[103,82958,50625],{"class":51290},[103,82960,51306],{"class":1952},[103,82962,159],{"class":113},[103,82964,51311],{"class":218},[103,82966,51297],{"class":113},[103,82968,82969],{"class":105,"line":1168},[103,82970,2389],{"emptyLinePlaceholder":30},[103,82972,82973,82975,82977],{"class":105,"line":1183},[103,82974,1023],{"class":113},[103,82976,51324],{"class":51290},[103,82978,51297],{"class":113},[103,82980,82981,82983,82985,82987,82989,82991],{"class":105,"line":1189},[103,82982,52134],{"class":113},[103,82984,51334],{"class":51290},[103,82986,51337],{"class":1952},[103,82988,159],{"class":113},[103,82990,51342],{"class":218},[103,82992,51297],{"class":113},[103,82994,82995,82997,82999,83001,83003,83005,83007,83009,83011],{"class":105,"line":1203},[103,82996,52134],{"class":113},[103,82998,51334],{"class":51290},[103,83000,14910],{"class":1952},[103,83002,159],{"class":113},[103,83004,51381],{"class":218},[103,83006,51361],{"class":1952},[103,83008,159],{"class":113},[103,83010,51388],{"class":218},[103,83012,51297],{"class":113},[103,83014,83015,83017,83019,83021,83023],{"class":105,"line":1209},[103,83016,52134],{"class":113},[103,83018,51397],{"class":51290},[103,83020,51400],{"class":113},[103,83022,51397],{"class":51290},[103,83024,51297],{"class":113},[103,83026,83027,83029,83031],{"class":105,"line":1300},[103,83028,51775],{"class":113},[103,83030,51324],{"class":51290},[103,83032,51297],{"class":113},[103,83034,83035],{"class":105,"line":1306},[103,83036,2389],{"emptyLinePlaceholder":30},[103,83038,83039,83041,83043],{"class":105,"line":1318},[103,83040,1023],{"class":113},[103,83042,51790],{"class":51290},[103,83044,51297],{"class":113},[103,83046,83047,83049,83051,83053,83055],{"class":105,"line":1601},[103,83048,52134],{"class":113},[103,83050,51601],{"class":51290},[103,83052,55304],{"class":113},[103,83054,51601],{"class":51290},[103,83056,51297],{"class":113},[103,83058,83059,83061,83063],{"class":105,"line":1606},[103,83060,52134],{"class":113},[103,83062,51803],{"class":51290},[103,83064,51297],{"class":113},[103,83066,83067,83069,83072,83074],{"class":105,"line":1612},[103,83068,11211],{"class":109},[103,83070,83071],{"class":162}," gift",[103,83073,13554],{"class":109},[103,83075,83076],{"class":218}," '50g的茶叶，清洗球'\n",[103,83078,83079],{"class":105,"line":1617},[103,83080,83081],{"class":172},"    \u002F\u002F 1.把字符串拆分为数组\n",[103,83083,83084],{"class":105,"line":1631},[103,83085,83086],{"class":172},"    \u002F\u002F console.log(gift.split(','))\n",[103,83088,83089],{"class":105,"line":1636},[103,83090,83091],{"class":172},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[103,83093,83094,83096,83098,83100,83103,83106,83108,83111,83113,83115,83117,83119,83121,83124,83126,83129,83131,83133,83135,83137],{"class":105,"line":1642},[103,83095,11211],{"class":109},[103,83097,73909],{"class":162},[103,83099,13554],{"class":109},[103,83101,83102],{"class":113}," gift.",[103,83104,83105],{"class":1952},"split",[103,83107,114],{"class":113},[103,83109,83110],{"class":218},"'，'",[103,83112,30816],{"class":113},[103,83114,74034],{"class":1952},[103,83116,114],{"class":113},[103,83118,79785],{"class":5206},[103,83120,79788],{"class":109},[103,83122,83123],{"class":218}," `\u003Cspan>【赠品】${",[103,83125,79785],{"class":113},[103,83127,83128],{"class":218},"}\u003C\u002Fspan>\u003Cbr>`",[103,83130,30816],{"class":113},[103,83132,74213],{"class":1952},[103,83134,114],{"class":113},[103,83136,74218],{"class":218},[103,83138,120],{"class":113},[103,83140,83141,83143,83145,83147,83149,83151,83153],{"class":105,"line":1663},[103,83142,52397],{"class":113},[103,83144,54389],{"class":1952},[103,83146,114],{"class":113},[103,83148,81921],{"class":218},[103,83150,74239],{"class":113},[103,83152,159],{"class":109},[103,83154,73975],{"class":113},[103,83156,83157,83159,83161],{"class":105,"line":1668},[103,83158,52407],{"class":113},[103,83160,51803],{"class":51290},[103,83162,51297],{"class":113},[103,83164,83165,83167,83169],{"class":105,"line":1682},[103,83166,51775],{"class":113},[103,83168,51790],{"class":51290},[103,83170,51297],{"class":113},[103,83172,83173],{"class":105,"line":1687},[103,83174,2389],{"emptyLinePlaceholder":30},[103,83176,83177,83179,83181],{"class":105,"line":1716},[103,83178,51775],{"class":113},[103,83180,50625],{"class":51290},[103,83182,51297],{"class":113},[21988,83184,83186],{"id":83185},"_41054-number","4.10.5.4 Number",[14,83188,83189],{},[1451,83190],{"alt":24,"src":83191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83193,83194],{},"整数也可以进行toFixed来保留小数",[14,83196,83197],{},"比如：",[14,83199,83200],{},"const price=10",[14,83202,83203],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21988,83205,83207],{"id":83206},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83209,83210],{},[1451,83211],{"alt":24,"src":83212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[94,83214,83216],{"className":50623,"code":83215,"language":50625,"meta":24,"style":24},"\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",[100,83217,83218,83228,83242,83246,83254,83268,83288,83300,83308,83314,83324,83334,83344,83348,83352,83358,83370,83384,83388,83392,83398,83410,83426,83436,83452,83456,83460,83466,83476,83486,83490,83494,83502,83514,83526,83538,83542,83546,83554,83566,83570,83574,83585,83595,83607,83619,83629,83633,83637,83645,83654,83666,83676,83686,83690,83694,83702,83711,83718,83728,83740,83744,83748,83757,83767,83778,83790,83802,83806,83810,83819,83829,83840,83844,83848,83854,83866,83878,83888,83898,83916,83928,83932,83936,83945,83957,83967,83977,83989,83993,84001,84009,84013,84021,84035,84043,84057,84085,84093,84101,84111,84115,84123,84131,84140,84148,84157,84167,84171,84175,84183,84191,84200,84208,84216,84229,84233,84237,84245,84253,84262,84270,84278,84293,84297,84301,84309,84317,84326,84334,84342,84356,84364,84368,84372,84377,84403,84408,84445,84450,84473,84478,84532,84537,84573,84577,84583,84588,84597,84611,84620,84639,84648,84658,84663,84668,84681,84686,84740,84766,84774,84782,84786],{"__ignoreMap":24},[103,83219,83220,83222,83224,83226],{"class":105,"line":106},[103,83221,51287],{"class":113},[103,83223,51291],{"class":51290},[103,83225,51294],{"class":1952},[103,83227,51297],{"class":113},[103,83229,83230,83232,83234,83236,83238,83240],{"class":105,"line":25},[103,83231,1023],{"class":113},[103,83233,50625],{"class":51290},[103,83235,51306],{"class":1952},[103,83237,159],{"class":113},[103,83239,51311],{"class":218},[103,83241,51297],{"class":113},[103,83243,83244],{"class":105,"line":1168},[103,83245,2389],{"emptyLinePlaceholder":30},[103,83247,83248,83250,83252],{"class":105,"line":1183},[103,83249,1023],{"class":113},[103,83251,51324],{"class":51290},[103,83253,51297],{"class":113},[103,83255,83256,83258,83260,83262,83264,83266],{"class":105,"line":1189},[103,83257,52134],{"class":113},[103,83259,51334],{"class":51290},[103,83261,51337],{"class":1952},[103,83263,159],{"class":113},[103,83265,51342],{"class":218},[103,83267,51297],{"class":113},[103,83269,83270,83272,83274,83276,83278,83280,83282,83284,83286],{"class":105,"line":1203},[103,83271,52134],{"class":113},[103,83273,51334],{"class":51290},[103,83275,14910],{"class":1952},[103,83277,159],{"class":113},[103,83279,51381],{"class":218},[103,83281,51361],{"class":1952},[103,83283,159],{"class":113},[103,83285,51388],{"class":218},[103,83287,51297],{"class":113},[103,83289,83290,83292,83294,83296,83298],{"class":105,"line":1209},[103,83291,52134],{"class":113},[103,83293,51397],{"class":51290},[103,83295,51400],{"class":113},[103,83297,51397],{"class":51290},[103,83299,51297],{"class":113},[103,83301,83302,83304,83306],{"class":105,"line":1300},[103,83303,52134],{"class":113},[103,83305,5116],{"class":51290},[103,83307,51297],{"class":113},[103,83309,83310,83312],{"class":105,"line":1306},[103,83311,6393],{"class":51290},[103,83313,15562],{"class":113},[103,83315,83316,83318,83320,83322],{"class":105,"line":1318},[103,83317,54685],{"class":162},[103,83319,51427],{"class":113},[103,83321,305],{"class":162},[103,83323,1279],{"class":113},[103,83325,83326,83328,83330,83332],{"class":105,"line":1601},[103,83327,54696],{"class":162},[103,83329,51427],{"class":113},[103,83331,305],{"class":162},[103,83333,1279],{"class":113},[103,83335,83336,83338,83340,83342],{"class":105,"line":1606},[103,83337,72586],{"class":162},[103,83339,51427],{"class":113},[103,83341,60495],{"class":162},[103,83343,1279],{"class":113},[103,83345,83346],{"class":105,"line":1612},[103,83347,2176],{"class":113},[103,83349,83350],{"class":105,"line":1617},[103,83351,2389],{"emptyLinePlaceholder":30},[103,83353,83354,83356],{"class":105,"line":1631},[103,83355,62113],{"class":1952},[103,83357,15562],{"class":113},[103,83359,83360,83362,83364,83366,83368],{"class":105,"line":1636},[103,83361,54761],{"class":162},[103,83363,51427],{"class":113},[103,83365,78564],{"class":162},[103,83367,51482],{"class":109},[103,83369,1279],{"class":113},[103,83371,83372,83374,83376,83378,83380,83382],{"class":105,"line":1642},[103,83373,54696],{"class":162},[103,83375,51427],{"class":113},[103,83377,424],{"class":162},[103,83379,51482],{"class":109},[103,83381,51546],{"class":162},[103,83383,1279],{"class":113},[103,83385,83386],{"class":105,"line":1663},[103,83387,2176],{"class":113},[103,83389,83390],{"class":105,"line":1668},[103,83391,2389],{"emptyLinePlaceholder":30},[103,83393,83394,83396],{"class":105,"line":1682},[103,83395,78615],{"class":1952},[103,83397,15562],{"class":113},[103,83399,83400,83402,83404,83406,83408],{"class":105,"line":1687},[103,83401,54685],{"class":162},[103,83403,51427],{"class":113},[103,83405,688],{"class":162},[103,83407,51482],{"class":109},[103,83409,1279],{"class":113},[103,83411,83412,83414,83416,83418,83420,83422,83424],{"class":105,"line":1716},[103,83413,61850],{"class":162},[103,83415,51427],{"class":113},[103,83417,28111],{"class":162},[103,83419,78670],{"class":162},[103,83421,78673],{"class":162},[103,83423,808],{"class":109},[103,83425,1279],{"class":113},[103,83427,83428,83430,83432,83434],{"class":105,"line":1721},[103,83429,54999],{"class":162},[103,83431,51427],{"class":113},[103,83433,51467],{"class":162},[103,83435,1279],{"class":113},[103,83437,83438,83440,83442,83444,83446,83448,83450],{"class":105,"line":1738},[103,83439,61967],{"class":162},[103,83441,51427],{"class":113},[103,83443,331],{"class":162},[103,83445,51482],{"class":109},[103,83447,51511],{"class":162},[103,83449,62234],{"class":162},[103,83451,1279],{"class":113},[103,83453,83454],{"class":105,"line":1743},[103,83455,2176],{"class":113},[103,83457,83458],{"class":105,"line":1748},[103,83459,2389],{"emptyLinePlaceholder":30},[103,83461,83462,83464],{"class":105,"line":1753},[103,83463,78733],{"class":1952},[103,83465,15562],{"class":113},[103,83467,83468,83470,83472,83474],{"class":105,"line":1767},[103,83469,62015],{"class":162},[103,83471,51427],{"class":113},[103,83473,62020],{"class":162},[103,83475,1279],{"class":113},[103,83477,83478,83480,83482,83484],{"class":105,"line":1772},[103,83479,54874],{"class":162},[103,83481,51427],{"class":113},[103,83483,61808],{"class":162},[103,83485,1279],{"class":113},[103,83487,83488],{"class":105,"line":2566},[103,83489,2176],{"class":113},[103,83491,83492],{"class":105,"line":2580},[103,83493,2389],{"emptyLinePlaceholder":30},[103,83495,83496,83498,83500],{"class":105,"line":2588},[103,83497,78615],{"class":1952},[103,83499,55605],{"class":51290},[103,83501,15562],{"class":113},[103,83503,83504,83506,83508,83510,83512],{"class":105,"line":2593},[103,83505,54761],{"class":162},[103,83507,51427],{"class":113},[103,83509,725],{"class":162},[103,83511,51482],{"class":109},[103,83513,1279],{"class":113},[103,83515,83516,83518,83520,83522,83524],{"class":105,"line":2599},[103,83517,54775],{"class":162},[103,83519,51427],{"class":113},[103,83521,725],{"class":162},[103,83523,51482],{"class":109},[103,83525,1279],{"class":113},[103,83527,83528,83530,83532,83534,83536],{"class":105,"line":2605},[103,83529,61740],{"class":162},[103,83531,51427],{"class":113},[103,83533,432],{"class":162},[103,83535,51482],{"class":109},[103,83537,1279],{"class":113},[103,83539,83540],{"class":105,"line":2610},[103,83541,2176],{"class":113},[103,83543,83544],{"class":105,"line":7938},[103,83545,2389],{"emptyLinePlaceholder":30},[103,83547,83548,83550,83552],{"class":105,"line":7962},[103,83549,78615],{"class":1952},[103,83551,62294],{"class":1952},[103,83553,15562],{"class":113},[103,83555,83556,83558,83560,83562,83564],{"class":105,"line":7967},[103,83557,54761],{"class":162},[103,83559,51427],{"class":113},[103,83561,1711],{"class":162},[103,83563,51482],{"class":109},[103,83565,1279],{"class":113},[103,83567,83568],{"class":105,"line":7973},[103,83569,2176],{"class":113},[103,83571,83572],{"class":105,"line":8000},[103,83573,2389],{"emptyLinePlaceholder":30},[103,83575,83576,83578,83580,83583],{"class":105,"line":8005},[103,83577,78615],{"class":1952},[103,83579,62294],{"class":1952},[103,83581,83582],{"class":1952}," .tag",[103,83584,15562],{"class":113},[103,83586,83587,83589,83591,83593],{"class":105,"line":8011},[103,83588,54999],{"class":162},[103,83590,51427],{"class":113},[103,83592,60859],{"class":162},[103,83594,1279],{"class":113},[103,83596,83597,83599,83601,83603,83605],{"class":105,"line":8023},[103,83598,54685],{"class":162},[103,83600,51427],{"class":113},[103,83602,191],{"class":162},[103,83604,51482],{"class":109},[103,83606,1279],{"class":113},[103,83608,83609,83611,83613,83615,83617],{"class":105,"line":8035},[103,83610,54912],{"class":162},[103,83612,51427],{"class":113},[103,83614,611],{"class":162},[103,83616,51482],{"class":109},[103,83618,1279],{"class":113},[103,83620,83621,83623,83625,83627],{"class":105,"line":8047},[103,83622,57406],{"class":162},[103,83624,51427],{"class":113},[103,83626,62060],{"class":162},[103,83628,1279],{"class":113},[103,83630,83631],{"class":105,"line":9706},[103,83632,2176],{"class":113},[103,83634,83635],{"class":105,"line":9731},[103,83636,2389],{"emptyLinePlaceholder":30},[103,83638,83639,83641,83643],{"class":105,"line":9754},[103,83640,78615],{"class":1952},[103,83642,78907],{"class":1952},[103,83644,31456],{"class":113},[103,83646,83647,83649,83652],{"class":105,"line":9778},[103,83648,78615],{"class":1952},[103,83650,83651],{"class":1952}," .sub-total",[103,83653,15562],{"class":113},[103,83655,83656,83658,83660,83662,83664],{"class":105,"line":9783},[103,83657,54912],{"class":162},[103,83659,51427],{"class":113},[103,83661,763],{"class":162},[103,83663,51482],{"class":109},[103,83665,1279],{"class":113},[103,83667,83668,83670,83672,83674],{"class":105,"line":9788},[103,83669,57406],{"class":162},[103,83671,51427],{"class":113},[103,83673,78930],{"class":162},[103,83675,1279],{"class":113},[103,83677,83678,83680,83682,83684],{"class":105,"line":9793},[103,83679,61827],{"class":162},[103,83681,51427],{"class":113},[103,83683,331],{"class":162},[103,83685,1279],{"class":113},[103,83687,83688],{"class":105,"line":9802},[103,83689,2176],{"class":113},[103,83691,83692],{"class":105,"line":9807},[103,83693,2389],{"emptyLinePlaceholder":30},[103,83695,83696,83698,83700],{"class":105,"line":9813},[103,83697,78615],{"class":1952},[103,83699,78947],{"class":1952},[103,83701,31456],{"class":113},[103,83703,83704,83706,83709],{"class":105,"line":9834},[103,83705,78615],{"class":1952},[103,83707,83708],{"class":1952}," .sub-total::before",[103,83710,31456],{"class":113},[103,83712,83713,83716],{"class":105,"line":9840},[103,83714,83715],{"class":1952},"    .amount::before",[103,83717,15562],{"class":113},[103,83719,83720,83722,83724,83726],{"class":105,"line":9854},[103,83721,78954],{"class":162},[103,83723,51427],{"class":113},[103,83725,78959],{"class":218},[103,83727,1279],{"class":113},[103,83729,83730,83732,83734,83736,83738],{"class":105,"line":9860},[103,83731,54912],{"class":162},[103,83733,51427],{"class":113},[103,83735,611],{"class":162},[103,83737,51482],{"class":109},[103,83739,1279],{"class":113},[103,83741,83742],{"class":105,"line":9887},[103,83743,2176],{"class":113},[103,83745,83746],{"class":105,"line":9896},[103,83747,2389],{"emptyLinePlaceholder":30},[103,83749,83750,83752,83755],{"class":105,"line":9902},[103,83751,78615],{"class":1952},[103,83753,83754],{"class":1952}," .spec",[103,83756,15562],{"class":113},[103,83758,83759,83761,83763,83765],{"class":105,"line":9910},[103,83760,61827],{"class":162},[103,83762,51427],{"class":113},[103,83764,191],{"class":162},[103,83766,1279],{"class":113},[103,83768,83769,83771,83773,83776],{"class":105,"line":9915},[103,83770,57406],{"class":162},[103,83772,51427],{"class":113},[103,83774,83775],{"class":162},"#888",[103,83777,1279],{"class":113},[103,83779,83780,83782,83784,83786,83788],{"class":105,"line":16594},[103,83781,54912],{"class":162},[103,83783,51427],{"class":113},[103,83785,662],{"class":162},[103,83787,51482],{"class":109},[103,83789,1279],{"class":113},[103,83791,83792,83794,83796,83798,83800],{"class":105,"line":16600},[103,83793,61990],{"class":162},[103,83795,51427],{"class":113},[103,83797,813],{"class":162},[103,83799,51482],{"class":109},[103,83801,1279],{"class":113},[103,83803,83804],{"class":105,"line":16623},[103,83805,2176],{"class":113},[103,83807,83808],{"class":105,"line":16629},[103,83809,2389],{"emptyLinePlaceholder":30},[103,83811,83812,83814,83817],{"class":105,"line":16652},[103,83813,78615],{"class":1952},[103,83815,83816],{"class":1952}," .count",[103,83818,15562],{"class":113},[103,83820,83821,83823,83825,83827],{"class":105,"line":16666},[103,83822,61827],{"class":162},[103,83824,51427],{"class":113},[103,83826,331],{"class":162},[103,83828,1279],{"class":113},[103,83830,83831,83833,83835,83838],{"class":105,"line":16686},[103,83832,57406],{"class":162},[103,83834,51427],{"class":113},[103,83836,83837],{"class":162},"#aaa",[103,83839,1279],{"class":113},[103,83841,83842],{"class":105,"line":16692},[103,83843,2176],{"class":113},[103,83845,83846],{"class":105,"line":16703},[103,83847,2389],{"emptyLinePlaceholder":30},[103,83849,83850,83852],{"class":105,"line":16726},[103,83851,72465],{"class":1952},[103,83853,15562],{"class":113},[103,83855,83856,83858,83860,83862,83864],{"class":105,"line":16748},[103,83857,54761],{"class":162},[103,83859,51427],{"class":113},[103,83861,78564],{"class":162},[103,83863,51482],{"class":109},[103,83865,1279],{"class":113},[103,83867,83868,83870,83872,83874,83876],{"class":105,"line":16753},[103,83869,54696],{"class":162},[103,83871,51427],{"class":113},[103,83873,305],{"class":162},[103,83875,51546],{"class":162},[103,83877,1279],{"class":113},[103,83879,83880,83882,83884,83886],{"class":105,"line":16759},[103,83881,54999],{"class":162},[103,83883,51427],{"class":113},[103,83885,51467],{"class":162},[103,83887,1279],{"class":113},[103,83889,83890,83892,83894,83896],{"class":105,"line":16773},[103,83891,55010],{"class":162},[103,83893,51427],{"class":113},[103,83895,51570],{"class":162},[103,83897,1279],{"class":113},[103,83899,83900,83903,83905,83907,83909,83911,83914],{"class":105,"line":16786},[103,83901,83902],{"class":162},"      border-top",[103,83904,51427],{"class":113},[103,83906,331],{"class":162},[103,83908,51482],{"class":109},[103,83910,51511],{"class":162},[103,83912,83913],{"class":162}," #4e4e4e",[103,83915,1279],{"class":113},[103,83917,83918,83920,83922,83924,83926],{"class":105,"line":16791},[103,83919,54685],{"class":162},[103,83921,51427],{"class":113},[103,83923,813],{"class":162},[103,83925,51482],{"class":109},[103,83927,1279],{"class":113},[103,83929,83930],{"class":105,"line":16805},[103,83931,2176],{"class":113},[103,83933,83934],{"class":105,"line":16810},[103,83935,2389],{"emptyLinePlaceholder":30},[103,83937,83938,83940,83943],{"class":105,"line":16816},[103,83939,72465],{"class":1952},[103,83941,83942],{"class":1952}," .amount",[103,83944,15562],{"class":113},[103,83946,83947,83949,83951,83953,83955],{"class":105,"line":16821},[103,83948,54912],{"class":162},[103,83950,51427],{"class":113},[103,83952,763],{"class":162},[103,83954,51482],{"class":109},[103,83956,1279],{"class":113},[103,83958,83959,83961,83963,83965],{"class":105,"line":16835},[103,83960,57406],{"class":162},[103,83962,51427],{"class":113},[103,83964,78930],{"class":162},[103,83966,1279],{"class":113},[103,83968,83969,83971,83973,83975],{"class":105,"line":16840},[103,83970,62324],{"class":162},[103,83972,51427],{"class":113},[103,83974,51479],{"class":162},[103,83976,1279],{"class":113},[103,83978,83979,83981,83983,83985,83987],{"class":105,"line":16845},[103,83980,61740],{"class":162},[103,83982,51427],{"class":113},[103,83984,769],{"class":162},[103,83986,51482],{"class":109},[103,83988,1279],{"class":113},[103,83990,83991],{"class":105,"line":16859},[103,83992,2176],{"class":113},[103,83994,83995,83997,83999],{"class":105,"line":16871},[103,83996,52407],{"class":113},[103,83998,5116],{"class":51290},[103,84000,51297],{"class":113},[103,84002,84003,84005,84007],{"class":105,"line":16876},[103,84004,51775],{"class":113},[103,84006,51324],{"class":51290},[103,84008,51297],{"class":113},[103,84010,84011],{"class":105,"line":16889},[103,84012,2389],{"emptyLinePlaceholder":30},[103,84014,84015,84017,84019],{"class":105,"line":16894},[103,84016,1023],{"class":113},[103,84018,51790],{"class":51290},[103,84020,51297],{"class":113},[103,84022,84023,84025,84027,84029,84031,84033],{"class":105,"line":16899},[103,84024,52134],{"class":113},[103,84026,51601],{"class":51290},[103,84028,53476],{"class":1952},[103,84030,159],{"class":113},[103,84032,62598],{"class":218},[103,84034,51297],{"class":113},[103,84036,84037,84039,84041],{"class":105,"line":16904},[103,84038,52407],{"class":113},[103,84040,51601],{"class":51290},[103,84042,51297],{"class":113},[103,84044,84045,84047,84049,84051,84053,84055],{"class":105,"line":16917},[103,84046,52134],{"class":113},[103,84048,51601],{"class":51290},[103,84050,53476],{"class":1952},[103,84052,159],{"class":113},[103,84054,62570],{"class":218},[103,84056,51297],{"class":113},[103,84058,84059,84061,84063,84066,84068,84070,84072,84075,84077,84079,84081,84083],{"class":105,"line":16922},[103,84060,51331],{"class":113},[103,84062,51601],{"class":51290},[103,84064,84065],{"class":113},">合计：\u003C",[103,84067,103],{"class":51290},[103,84069,53476],{"class":1952},[103,84071,159],{"class":113},[103,84073,84074],{"class":218},"\"amount\"",[103,84076,55304],{"class":113},[103,84078,103],{"class":51290},[103,84080,55304],{"class":113},[103,84082,51601],{"class":51290},[103,84084,51297],{"class":113},[103,84086,84087,84089,84091],{"class":105,"line":32623},[103,84088,52407],{"class":113},[103,84090,51601],{"class":51290},[103,84092,51297],{"class":113},[103,84094,84095,84097,84099],{"class":105,"line":32629},[103,84096,52134],{"class":113},[103,84098,51803],{"class":51290},[103,84100,51297],{"class":113},[103,84102,84103,84105,84107,84109],{"class":105,"line":32635},[103,84104,11211],{"class":109},[103,84106,79367],{"class":162},[103,84108,13554],{"class":109},[103,84110,55437],{"class":113},[103,84112,84113],{"class":105,"line":32641},[103,84114,79376],{"class":113},[103,84116,84117,84119,84121],{"class":105,"line":32647},[103,84118,79381],{"class":113},[103,84120,79384],{"class":218},[103,84122,31456],{"class":113},[103,84124,84125,84127,84129],{"class":105,"line":32658},[103,84126,79391],{"class":113},[103,84128,79394],{"class":218},[103,84130,31456],{"class":113},[103,84132,84133,84135,84138],{"class":105,"line":32664},[103,84134,79401],{"class":113},[103,84136,84137],{"class":162},"289.9",[103,84139,31456],{"class":113},[103,84141,84142,84144,84146],{"class":105,"line":32684},[103,84143,79411],{"class":113},[103,84145,79414],{"class":218},[103,84147,31456],{"class":113},[103,84149,84150,84153,84155],{"class":105,"line":32690},[103,84151,84152],{"class":113},"        count: ",[103,84154,191],{"class":162},[103,84156,31456],{"class":113},[103,84158,84159,84162,84165],{"class":105,"line":32701},[103,84160,84161],{"class":113},"        spec: { color: ",[103,84163,84164],{"class":218},"'白色'",[103,84166,55594],{"class":113},[103,84168,84169],{"class":105,"line":32707},[103,84170,77882],{"class":113},[103,84172,84173],{"class":105,"line":32713},[103,84174,79376],{"class":113},[103,84176,84177,84179,84181],{"class":105,"line":32719},[103,84178,79381],{"class":113},[103,84180,79475],{"class":218},[103,84182,31456],{"class":113},[103,84184,84185,84187,84189],{"class":105,"line":32725},[103,84186,79391],{"class":113},[103,84188,79484],{"class":218},[103,84190,31456],{"class":113},[103,84192,84193,84195,84198],{"class":105,"line":32731},[103,84194,79401],{"class":113},[103,84196,84197],{"class":162},"109.8",[103,84199,31456],{"class":113},[103,84201,84202,84204,84206],{"class":105,"line":32737},[103,84203,79411],{"class":113},[103,84205,79502],{"class":218},[103,84207,31456],{"class":113},[103,84209,84210,84212,84214],{"class":105,"line":32743},[103,84211,84152],{"class":113},[103,84213,185],{"class":162},[103,84215,31456],{"class":113},[103,84217,84218,84221,84223,84225,84227],{"class":105,"line":32763},[103,84219,84220],{"class":113},"        spec: { size: ",[103,84222,81893],{"class":218},[103,84224,55454],{"class":113},[103,84226,81898],{"class":218},[103,84228,55594],{"class":113},[103,84230,84231],{"class":105,"line":32769},[103,84232,77882],{"class":113},[103,84234,84235],{"class":105,"line":32785},[103,84236,79376],{"class":113},[103,84238,84239,84241,84243],{"class":105,"line":32791},[103,84240,79381],{"class":113},[103,84242,79519],{"class":218},[103,84244,31456],{"class":113},[103,84246,84247,84249,84251],{"class":105,"line":32805},[103,84248,79391],{"class":113},[103,84250,79528],{"class":218},[103,84252,31456],{"class":113},[103,84254,84255,84257,84260],{"class":105,"line":32811},[103,84256,79401],{"class":113},[103,84258,84259],{"class":162},"488",[103,84261,31456],{"class":113},[103,84263,84264,84266,84268],{"class":105,"line":32826},[103,84265,79411],{"class":113},[103,84267,79546],{"class":218},[103,84269,31456],{"class":113},[103,84271,84272,84274,84276],{"class":105,"line":32832},[103,84273,84152],{"class":113},[103,84275,331],{"class":162},[103,84277,31456],{"class":113},[103,84279,84280,84282,84285,84288,84291],{"class":105,"line":32841},[103,84281,84161],{"class":113},[103,84283,84284],{"class":218},"'青色'",[103,84286,84287],{"class":113},", sum: ",[103,84289,84290],{"class":218},"'一大四小'",[103,84292,55594],{"class":113},[103,84294,84295],{"class":105,"line":32847},[103,84296,77882],{"class":113},[103,84298,84299],{"class":105,"line":32856},[103,84300,79376],{"class":113},[103,84302,84303,84305,84307],{"class":105,"line":32862},[103,84304,79381],{"class":113},[103,84306,79563],{"class":218},[103,84308,31456],{"class":113},[103,84310,84311,84313,84315],{"class":105,"line":32868},[103,84312,79391],{"class":113},[103,84314,79572],{"class":218},[103,84316,31456],{"class":113},[103,84318,84319,84321,84324],{"class":105,"line":32877},[103,84320,79401],{"class":113},[103,84322,84323],{"class":162},"139",[103,84325,31456],{"class":113},[103,84327,84328,84330,84332],{"class":105,"line":32883},[103,84329,79411],{"class":113},[103,84331,79590],{"class":218},[103,84333,31456],{"class":113},[103,84335,84336,84338,84340],{"class":105,"line":32894},[103,84337,84152],{"class":113},[103,84339,331],{"class":162},[103,84341,31456],{"class":113},[103,84343,84344,84346,84349,84351,84354],{"class":105,"line":32900},[103,84345,84220],{"class":113},[103,84347,84348],{"class":218},"'小号'",[103,84350,55454],{"class":113},[103,84352,84353],{"class":218},"'紫色'",[103,84355,55460],{"class":113},[103,84357,84358,84361],{"class":105,"line":32919},[103,84359,84360],{"class":113},"        gift: ",[103,84362,84363],{"class":218},"'50g茶叶,清洗球'\n",[103,84365,84366],{"class":105,"line":32925},[103,84367,52388],{"class":113},[103,84369,84370],{"class":105,"line":32936},[103,84371,53099],{"class":113},[103,84373,84374],{"class":105,"line":32942},[103,84375,84376],{"class":172},"    \u002F\u002F  1.根据数据渲染页面\n",[103,84378,84379,84381,84383,84385,84387,84389,84391,84393,84395,84397,84399,84401],{"class":105,"line":32962},[103,84380,52397],{"class":113},[103,84382,54389],{"class":1952},[103,84384,114],{"class":113},[103,84386,79891],{"class":218},[103,84388,74239],{"class":113},[103,84390,159],{"class":109},[103,84392,80038],{"class":113},[103,84394,74034],{"class":1952},[103,84396,114],{"class":113},[103,84398,79785],{"class":5206},[103,84400,79788],{"class":109},[103,84402,15562],{"class":113},[103,84404,84405],{"class":105,"line":32978},[103,84406,84407],{"class":172},"      \u002F\u002F 对象解构\n",[103,84409,84410,84412,84414,84416,84418,84420,84422,84425,84427,84429,84431,84434,84436,84439,84441,84443],{"class":105,"line":32984},[103,84411,58218],{"class":109},[103,84413,79797],{"class":113},[103,84415,79810],{"class":162},[103,84417,12425],{"class":113},[103,84419,79800],{"class":162},[103,84421,12425],{"class":113},[103,84423,84424],{"class":162},"count",[103,84426,12425],{"class":113},[103,84428,79805],{"class":162},[103,84430,12425],{"class":113},[103,84432,84433],{"class":162},"spec",[103,84435,12425],{"class":113},[103,84437,84438],{"class":162},"gift",[103,84440,79813],{"class":113},[103,84442,159],{"class":109},[103,84444,79818],{"class":113},[103,84446,84447],{"class":105,"line":32998},[103,84448,84449],{"class":172},"      \u002F\u002F 规格文字模块处理\n",[103,84451,84452,84454,84457,84459,84461,84463,84465,84467,84469,84471],{"class":105,"line":33004},[103,84453,58218],{"class":109},[103,84455,84456],{"class":162}," text",[103,84458,13554],{"class":109},[103,84460,81928],{"class":113},[103,84462,81931],{"class":1952},[103,84464,81934],{"class":113},[103,84466,74213],{"class":1952},[103,84468,114],{"class":113},[103,84470,81941],{"class":218},[103,84472,120],{"class":113},[103,84474,84475],{"class":105,"line":33010},[103,84476,84477],{"class":172},"      \u002F\u002F 处理赠品模块\n",[103,84479,84480,84482,84484,84486,84489,84491,84493,84495,84497,84500,84502,84504,84506,84508,84510,84513,84515,84518,84520,84522,84524,84526,84528,84530],{"class":105,"line":33021},[103,84481,58218],{"class":109},[103,84483,73909],{"class":162},[103,84485,13554],{"class":109},[103,84487,84488],{"class":113}," gift ",[103,84490,1099],{"class":109},[103,84492,83102],{"class":113},[103,84494,83105],{"class":1952},[103,84496,114],{"class":113},[103,84498,84499],{"class":218},"','",[103,84501,30816],{"class":113},[103,84503,74034],{"class":1952},[103,84505,114],{"class":113},[103,84507,79785],{"class":5206},[103,84509,79788],{"class":109},[103,84511,84512],{"class":218}," `\u003Cspan class=\"tag\">【赠品】${",[103,84514,79785],{"class":113},[103,84516,84517],{"class":218},"}\u003C\u002Fspan>`",[103,84519,30816],{"class":113},[103,84521,74213],{"class":1952},[103,84523,114],{"class":113},[103,84525,74218],{"class":218},[103,84527,13704],{"class":113},[103,84529,972],{"class":109},[103,84531,70094],{"class":218},[103,84533,84534],{"class":105,"line":33027},[103,84535,84536],{"class":172},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[103,84538,84539,84541,84544,84546,84549,84551,84553,84555,84558,84560,84562,84564,84567,84569,84571],{"class":105,"line":33033},[103,84540,58218],{"class":109},[103,84542,84543],{"class":162}," subtotal",[103,84545,13554],{"class":109},[103,84547,84548],{"class":113}," ((price ",[103,84550,568],{"class":109},[103,84552,5744],{"class":162},[103,84554,6508],{"class":109},[103,84556,84557],{"class":113}," count) ",[103,84559,697],{"class":109},[103,84561,5744],{"class":162},[103,84563,30816],{"class":113},[103,84565,84566],{"class":1952},"toFixed",[103,84568,114],{"class":113},[103,84570,191],{"class":162},[103,84572,120],{"class":113},[103,84574,84575],{"class":105,"line":33043},[103,84576,2389],{"emptyLinePlaceholder":30},[103,84578,84579,84581],{"class":105,"line":33049},[103,84580,73972],{"class":109},[103,84582,70158],{"class":218},[103,84584,84585],{"class":105,"line":33060},[103,84586,84587],{"class":218},"        \u003Cdiv class=\"item\">\n",[103,84589,84590,84593,84595],{"class":105,"line":33066},[103,84591,84592],{"class":218},"          \u003Cimg src=\"${",[103,84594,79810],{"class":113},[103,84596,79842],{"class":218},[103,84598,84599,84602,84604,84607,84609],{"class":105,"line":33076},[103,84600,84601],{"class":218},"          \u003Cp class=\"name\">${",[103,84603,79800],{"class":113},[103,84605,84606],{"class":218},"}${",[103,84608,1288],{"class":113},[103,84610,79852],{"class":218},[103,84612,84613,84616,84618],{"class":105,"line":33081},[103,84614,84615],{"class":218},"          \u003Cp class=\"spec\">${",[103,84617,5177],{"class":113},[103,84619,79852],{"class":218},[103,84621,84622,84625,84627,84629,84631,84633,84635,84637],{"class":105,"line":33087},[103,84623,84624],{"class":218},"          \u003Cp class=\"price\">${",[103,84626,79805],{"class":113},[103,84628,671],{"class":218},[103,84630,84566],{"class":1952},[103,84632,114],{"class":218},[103,84634,191],{"class":162},[103,84636,542],{"class":218},[103,84638,79852],{"class":218},[103,84640,84641,84644,84646],{"class":105,"line":33136},[103,84642,84643],{"class":218},"          \u003Cp class=\"count\">x${",[103,84645,84424],{"class":113},[103,84647,79852],{"class":218},[103,84649,84650,84653,84656],{"class":105,"line":33183},[103,84651,84652],{"class":218},"          \u003Cp class=\"sub-total\">${",[103,84654,84655],{"class":113},"subtotal",[103,84657,79852],{"class":218},[103,84659,84660],{"class":105,"line":33188},[103,84661,84662],{"class":218},"        \u003C\u002Fdiv> \n",[103,84664,84665],{"class":105,"line":33194},[103,84666,84667],{"class":218},"             `\n",[103,84669,84670,84673,84675,84677,84679],{"class":105,"line":33213},[103,84671,84672],{"class":113},"    }).",[103,84674,74213],{"class":1952},[103,84676,114],{"class":113},[103,84678,74218],{"class":218},[103,84680,120],{"class":113},[103,84682,84683],{"class":105,"line":33219},[103,84684,84685],{"class":172},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[103,84687,84688,84690,84692,84694,84696,84699,84701,84704,84706,84708,84710,84713,84716,84718,84721,84723,84725,84727,84730,84732,84734,84736,84738],{"class":105,"line":33239},[103,84689,11211],{"class":109},[103,84691,62775],{"class":162},[103,84693,13554],{"class":109},[103,84695,80038],{"class":113},[103,84697,84698],{"class":1952},"reduce",[103,84700,2365],{"class":113},[103,84702,84703],{"class":5206},"prev",[103,84705,12425],{"class":113},[103,84707,79785],{"class":5206},[103,84709,13704],{"class":113},[103,84711,84712],{"class":109},"=>",[103,84714,84715],{"class":113}," prev ",[103,84717,594],{"class":109},[103,84719,84720],{"class":113}," (item.price ",[103,84722,568],{"class":109},[103,84724,5744],{"class":162},[103,84726,6508],{"class":109},[103,84728,84729],{"class":113}," item.count) ",[103,84731,697],{"class":109},[103,84733,5744],{"class":162},[103,84735,12425],{"class":113},[103,84737,305],{"class":162},[103,84739,120],{"class":113},[103,84741,84742,84744,84746,84748,84751,84753,84755,84758,84760,84762,84764],{"class":105,"line":33245},[103,84743,52397],{"class":113},[103,84745,54389],{"class":1952},[103,84747,114],{"class":113},[103,84749,84750],{"class":218},"'.amount'",[103,84752,74239],{"class":113},[103,84754,159],{"class":109},[103,84756,84757],{"class":113}," total.",[103,84759,84566],{"class":1952},[103,84761,114],{"class":113},[103,84763,191],{"class":162},[103,84765,120],{"class":113},[103,84767,84768,84770,84772],{"class":105,"line":33251},[103,84769,52407],{"class":113},[103,84771,51803],{"class":51290},[103,84773,51297],{"class":113},[103,84775,84776,84778,84780],{"class":105,"line":33261},[103,84777,51775],{"class":113},[103,84779,51790],{"class":51290},[103,84781,51297],{"class":113},[103,84783,84784],{"class":105,"line":33266},[103,84785,2389],{"emptyLinePlaceholder":30},[103,84787,84788,84790,84792],{"class":105,"line":33272},[103,84789,51775],{"class":113},[103,84791,50625],{"class":51290},[103,84793,51297],{"class":113},[45,84795,84797],{"id":84796},"_411-编程思想","4.11 编程思想",[74,84799,84801],{"id":84800},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84803,84804,84807],{},[263,84805,84806],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84809,84810],{},"调用就可以了",[14,84812,84813],{},[1451,84814],{"alt":24,"src":84815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[74,84817,84819],{"id":84818},"_4112-面向对象","4.11.2 面向对象",[14,84821,84822],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84824,84825],{},[1451,84826],{"alt":24,"src":84827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84829,84830],{},"面向对象的特性：",[1120,84832,84833,84836,84839],{},[60,84834,84835],{},"封装性",[60,84837,84838],{},"继承性",[60,84840,84841],{},"多态性",[74,84843,84845],{"id":84844},"_4113-两者比较","4.11.3 两者比较",[14,84847,84848],{},[1451,84849],{"alt":24,"src":84850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[45,84852,84854],{"id":84853},"_412-构造函数回顾","4.12 构造函数回顾",[14,84856,84857],{},[1451,84858],{"alt":24,"src":84859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84861,84862],{},[1451,84863],{"alt":24,"src":84864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84866,84867],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84869,84870],{},[1451,84871],{"alt":24,"src":84872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[45,84874,84876],{"id":84875},"_413-原型","4.13 原型",[74,84878,84880],{"id":84879},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84882,84883],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84885,84886],{},[1451,84887],{"alt":24,"src":84888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84890,84891],{},[1451,84892],{"alt":24,"src":84893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84895,84896],{},"原型是构造函数的属性，它也是一个对象",[14,84898,84899],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84901,84902],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[94,84904,84906],{"className":53057,"code":84905,"language":53059,"meta":24,"style":24},"\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",[100,84907,84908,84916,84921,84929,84934,84939,84944,84949,84954,84958,84962,84966,84971,84976,84980,84985,84990,84995,85000,85005,85009,85017],{"__ignoreMap":24},[103,84909,84910,84912,84914],{"class":105,"line":106},[103,84911,1023],{"class":113},[103,84913,51790],{"class":51290},[103,84915,51297],{"class":113},[103,84917,84918],{"class":105,"line":25},[103,84919,84920],{"class":172},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[103,84922,84923,84925,84927],{"class":105,"line":1168},[103,84924,52134],{"class":113},[103,84926,51803],{"class":51290},[103,84928,51297],{"class":113},[103,84930,84931],{"class":105,"line":1183},[103,84932,84933],{"class":113},"    function Star(uname, age) {\n",[103,84935,84936],{"class":105,"line":1189},[103,84937,84938],{"class":113},"      this.uname = uname,\n",[103,84940,84941],{"class":105,"line":1203},[103,84942,84943],{"class":113},"        this.age = age\n",[103,84945,84946],{"class":105,"line":1209},[103,84947,84948],{"class":113},"      \u002F\u002F this.sing = function () {\n",[103,84950,84951],{"class":105,"line":1300},[103,84952,84953],{"class":113},"      \u002F\u002F   console.log('唱歌')\n",[103,84955,84956],{"class":105,"line":1306},[103,84957,2389],{"emptyLinePlaceholder":30},[103,84959,84960],{"class":105,"line":1318},[103,84961,60027],{"class":113},[103,84963,84964],{"class":105,"line":1601},[103,84965,2176],{"class":113},[103,84967,84968],{"class":105,"line":1606},[103,84969,84970],{"class":113},"    Star.prototype.sing = function () {\n",[103,84972,84973],{"class":105,"line":1612},[103,84974,84975],{"class":113},"      console.log('唱歌')\n",[103,84977,84978],{"class":105,"line":1617},[103,84979,2176],{"class":113},[103,84981,84982],{"class":105,"line":1631},[103,84983,84984],{"class":113},"    \u002F\u002F console.dir(Star.prototype)\n",[103,84986,84987],{"class":105,"line":1636},[103,84988,84989],{"class":113},"    const pink = new Star('pink', 18)\n",[103,84991,84992],{"class":105,"line":1642},[103,84993,84994],{"class":113},"    const red = new Star('red', 20)\n",[103,84996,84997],{"class":105,"line":1663},[103,84998,84999],{"class":113},"    pink.sing()\n",[103,85001,85002],{"class":105,"line":1668},[103,85003,85004],{"class":113},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[103,85006,85007],{"class":105,"line":1682},[103,85008,2389],{"emptyLinePlaceholder":30},[103,85010,85011,85013,85015],{"class":105,"line":1687},[103,85012,52407],{"class":113},[103,85014,51803],{"class":51290},[103,85016,51297],{"class":113},[103,85018,85019,85021,85023],{"class":105,"line":1716},[103,85020,51775],{"class":113},[103,85022,51790],{"class":51290},[103,85024,51297],{"class":113},[14,85026,85027],{},[1451,85028],{"alt":24,"src":85029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[94,85031,85033],{"className":53057,"code":85032,"language":53059,"meta":24,"style":24},"\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",[100,85034,85035,85043,85051,85056,85061,85066,85071,85075,85080,85085,85090,85094,85099,85103,85107,85112,85116,85124],{"__ignoreMap":24},[103,85036,85037,85039,85041],{"class":105,"line":106},[103,85038,1023],{"class":113},[103,85040,51790],{"class":51290},[103,85042,51297],{"class":113},[103,85044,85045,85047,85049],{"class":105,"line":25},[103,85046,52134],{"class":113},[103,85048,51803],{"class":51290},[103,85050,51297],{"class":113},[103,85052,85053],{"class":105,"line":1168},[103,85054,85055],{"class":113},"    let that\n",[103,85057,85058],{"class":105,"line":1183},[103,85059,85060],{"class":113},"    function Star(uname) {\n",[103,85062,85063],{"class":105,"line":1189},[103,85064,85065],{"class":113},"      this.uname = uname\n",[103,85067,85068],{"class":105,"line":1203},[103,85069,85070],{"class":113},"      that = this\n",[103,85072,85073],{"class":105,"line":1209},[103,85074,2176],{"class":113},[103,85076,85077],{"class":105,"line":1300},[103,85078,85079],{"class":113},"    \u002F\u002F 实例对象是 ldh\n",[103,85081,85082],{"class":105,"line":1306},[103,85083,85084],{"class":113},"    const ldh = new Star('刘德华')\n",[103,85086,85087],{"class":105,"line":1318},[103,85088,85089],{"class":113},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[103,85091,85092],{"class":105,"line":1601},[103,85093,2389],{"emptyLinePlaceholder":30},[103,85095,85096],{"class":105,"line":1606},[103,85097,85098],{"class":113},"    Star.sing = function () {\n",[103,85100,85101],{"class":105,"line":1612},[103,85102,84975],{"class":113},[103,85104,85105],{"class":105,"line":1617},[103,85106,2176],{"class":113},[103,85108,85109],{"class":105,"line":1631},[103,85110,85111],{"class":113},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[103,85113,85114],{"class":105,"line":1636},[103,85115,2389],{"emptyLinePlaceholder":30},[103,85117,85118,85120,85122],{"class":105,"line":1642},[103,85119,52407],{"class":113},[103,85121,51803],{"class":51290},[103,85123,51297],{"class":113},[103,85125,85126,85128,85130],{"class":105,"line":1663},[103,85127,51775],{"class":113},[103,85129,51790],{"class":51290},[103,85131,51297],{"class":113},[14,85133,85134],{},"构造函数的this指向的是实例对象；",[14,85136,85137],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[74,85139,85141],{"id":85140},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85143,85144],{},[1451,85145],{"alt":24,"src":85146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[94,85148,85150],{"className":53057,"code":85149,"language":53059,"meta":24,"style":24},"\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",[100,85151,85152,85160,85168,85173,85178,85183,85188,85193,85198,85203,85208,85213,85218,85222,85227,85232,85237,85242,85246,85251,85256,85261,85266,85270,85275,85280,85285,85290,85294,85299,85303,85311],{"__ignoreMap":24},[103,85153,85154,85156,85158],{"class":105,"line":106},[103,85155,1023],{"class":113},[103,85157,51790],{"class":51290},[103,85159,51297],{"class":113},[103,85161,85162,85164,85166],{"class":105,"line":25},[103,85163,52134],{"class":113},[103,85165,51803],{"class":51290},[103,85167,51297],{"class":113},[103,85169,85170],{"class":105,"line":1168},[103,85171,85172],{"class":113},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[103,85174,85175],{"class":105,"line":1183},[103,85176,85177],{"class":113},"    const arr = [1, 2, 3]\n",[103,85179,85180],{"class":105,"line":1189},[103,85181,85182],{"class":113},"    \u002F\u002F 自己定义数组的扩展方法\n",[103,85184,85185],{"class":105,"line":1203},[103,85186,85187],{"class":113},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[103,85189,85190],{"class":105,"line":1209},[103,85191,85192],{"class":113},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[103,85194,85195],{"class":105,"line":1300},[103,85196,85197],{"class":113},"    \u002F\u002F ①.最大值\n",[103,85199,85200],{"class":105,"line":1306},[103,85201,85202],{"class":113},"    Array.prototype.max = function () {\n",[103,85204,85205],{"class":105,"line":1318},[103,85206,85207],{"class":113},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[103,85209,85210],{"class":105,"line":1601},[103,85211,85212],{"class":113},"      return Math.max(...this)\n",[103,85214,85215],{"class":105,"line":1606},[103,85216,85217],{"class":113},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[103,85219,85220],{"class":105,"line":1612},[103,85221,2176],{"class":113},[103,85223,85224],{"class":105,"line":1617},[103,85225,85226],{"class":113},"    console.log(arr.max())\n",[103,85228,85229],{"class":105,"line":1631},[103,85230,85231],{"class":113},"    \u002F\u002F ②最小值\n",[103,85233,85234],{"class":105,"line":1636},[103,85235,85236],{"class":113},"    Array.prototype.min = function () {\n",[103,85238,85239],{"class":105,"line":1642},[103,85240,85241],{"class":113},"      return Math.min(...this)\n",[103,85243,85244],{"class":105,"line":1663},[103,85245,2176],{"class":113},[103,85247,85248],{"class":105,"line":1668},[103,85249,85250],{"class":113},"    console.log(arr.min())\n",[103,85252,85253],{"class":105,"line":1682},[103,85254,85255],{"class":113},"    \u002F\u002F③求和\n",[103,85257,85258],{"class":105,"line":1687},[103,85259,85260],{"class":113},"    Array.prototype.sum = function () {\n",[103,85262,85263],{"class":105,"line":1716},[103,85264,85265],{"class":113},"      return this.reduce((prev, current) => prev + current, 0)\n",[103,85267,85268],{"class":105,"line":1721},[103,85269,2176],{"class":113},[103,85271,85272],{"class":105,"line":1738},[103,85273,85274],{"class":113},"    console.log(arr.sum())\n",[103,85276,85277],{"class":105,"line":1743},[103,85278,85279],{"class":113},"    \u002F\u002F ③排序\n",[103,85281,85282],{"class":105,"line":1748},[103,85283,85284],{"class":113},"    Array.prototype.rever = function () {\n",[103,85286,85287],{"class":105,"line":1753},[103,85288,85289],{"class":113},"      return this.reverse()\n",[103,85291,85292],{"class":105,"line":1767},[103,85293,2176],{"class":113},[103,85295,85296],{"class":105,"line":1772},[103,85297,85298],{"class":113},"    console.log(arr.rever())\n",[103,85300,85301],{"class":105,"line":2566},[103,85302,2389],{"emptyLinePlaceholder":30},[103,85304,85305,85307,85309],{"class":105,"line":2580},[103,85306,52407],{"class":113},[103,85308,51803],{"class":51290},[103,85310,51297],{"class":113},[103,85312,85313,85315,85317],{"class":105,"line":2588},[103,85314,51775],{"class":113},[103,85316,51790],{"class":51290},[103,85318,51297],{"class":113},[14,85320,85321],{},[1451,85322],{"alt":24,"src":85323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[74,85325,85327],{"id":85326},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85329,85330],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85332,85333],{},[1451,85334],{"alt":24,"src":85335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[94,85337,85339],{"className":53057,"code":85338,"language":53059,"meta":24,"style":24},"\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",[100,85340,85341,85349,85357,85362,85367,85371,85376,85381,85386,85394],{"__ignoreMap":24},[103,85342,85343,85345,85347],{"class":105,"line":106},[103,85344,1023],{"class":113},[103,85346,51790],{"class":51290},[103,85348,51297],{"class":113},[103,85350,85351,85353,85355],{"class":105,"line":25},[103,85352,52134],{"class":113},[103,85354,51803],{"class":51290},[103,85356,51297],{"class":113},[103,85358,85359],{"class":105,"line":1168},[103,85360,85361],{"class":113},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[103,85363,85364],{"class":105,"line":1183},[103,85365,85366],{"class":113},"    function Star() {\n",[103,85368,85369],{"class":105,"line":1189},[103,85370,2176],{"class":113},[103,85372,85373],{"class":105,"line":1203},[103,85374,85375],{"class":113},"    const ldh = new Star()\n",[103,85377,85378],{"class":105,"line":1209},[103,85379,85380],{"class":113},"    console.log(Star.prototype)\n",[103,85382,85383],{"class":105,"line":1300},[103,85384,85385],{"class":113},"    console.log(Star.prototype.constructor === Star)\n",[103,85387,85388,85390,85392],{"class":105,"line":1306},[103,85389,52407],{"class":113},[103,85391,51803],{"class":51290},[103,85393,51297],{"class":113},[103,85395,85396,85398,85400],{"class":105,"line":1318},[103,85397,51775],{"class":113},[103,85399,51790],{"class":51290},[103,85401,51297],{"class":113},[14,85403,85404],{},[1451,85405],{"alt":24,"src":85406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85408,85409],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[94,85411,85413],{"className":53057,"code":85412,"language":53059,"meta":24,"style":24},"  \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",[100,85414,85415,85423,85427,85431,85435,85440,85445,85450,85454,85459,85464,85469,85474,85479,85484,85488,85492,85497,85502,85507,85511,85516,85521,85525,85529,85533],{"__ignoreMap":24},[103,85416,85417,85419,85421],{"class":105,"line":106},[103,85418,52134],{"class":113},[103,85420,51803],{"class":51290},[103,85422,51297],{"class":113},[103,85424,85425],{"class":105,"line":25},[103,85426,85361],{"class":113},[103,85428,85429],{"class":105,"line":1168},[103,85430,85366],{"class":113},[103,85432,85433],{"class":105,"line":1183},[103,85434,2176],{"class":113},[103,85436,85437],{"class":105,"line":1189},[103,85438,85439],{"class":113},"    \u002F\u002F const ldh = new Star()\n",[103,85441,85442],{"class":105,"line":1203},[103,85443,85444],{"class":113},"    \u002F\u002F console.log(Star.prototype)\n",[103,85446,85447],{"class":105,"line":1209},[103,85448,85449],{"class":113},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[103,85451,85452],{"class":105,"line":1300},[103,85453,2389],{"emptyLinePlaceholder":30},[103,85455,85456],{"class":105,"line":1306},[103,85457,85458],{"class":113},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[103,85460,85461],{"class":105,"line":1318},[103,85462,85463],{"class":113},"    \u002F\u002F Star.prototype.sing = function () {\n",[103,85465,85466],{"class":105,"line":1601},[103,85467,85468],{"class":113},"    \u002F\u002F   console.log('唱歌')\n",[103,85470,85471],{"class":105,"line":1606},[103,85472,85473],{"class":113},"    \u002F\u002F }\n",[103,85475,85476],{"class":105,"line":1612},[103,85477,85478],{"class":113},"    \u002F\u002F Star.prototype.dance = function () {\n",[103,85480,85481],{"class":105,"line":1617},[103,85482,85483],{"class":113},"    \u002F\u002F   console.log('跳舞')\n",[103,85485,85486],{"class":105,"line":1631},[103,85487,85473],{"class":113},[103,85489,85490],{"class":105,"line":1636},[103,85491,85380],{"class":113},[103,85493,85494],{"class":105,"line":1642},[103,85495,85496],{"class":113},"    Star.prototype = {\n",[103,85498,85499],{"class":105,"line":1663},[103,85500,85501],{"class":113},"      sing: function () {\n",[103,85503,85504],{"class":105,"line":1668},[103,85505,85506],{"class":113},"        console.log('唱歌')\n",[103,85508,85509],{"class":105,"line":1682},[103,85510,77882],{"class":113},[103,85512,85513],{"class":105,"line":1687},[103,85514,85515],{"class":113},"      dance: function () {\n",[103,85517,85518],{"class":105,"line":1716},[103,85519,85520],{"class":113},"        console.log('跳舞')\n",[103,85522,85523],{"class":105,"line":1721},[103,85524,52388],{"class":113},[103,85526,85527],{"class":105,"line":1738},[103,85528,2176],{"class":113},[103,85530,85531],{"class":105,"line":1743},[103,85532,85380],{"class":113},[103,85534,85535,85537,85539],{"class":105,"line":1748},[103,85536,52407],{"class":113},[103,85538,51803],{"class":51290},[103,85540,51297],{"class":113},[14,85542,85543],{},"进行输出结果后会发现：",[14,85545,85546],{},[1451,85547],{"alt":24,"src":85548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85550,85551],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85553,85554],{},"所以，要重新指回创造这个原型对象的构造函数",[94,85556,85558],{"className":71203,"code":85557,"language":71205,"meta":24,"style":24},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[100,85559,85560,85574,85579,85584,85595,85608,85613,85624,85638,85642],{"__ignoreMap":24},[103,85561,85562,85565,85567,85570,85572],{"class":105,"line":106},[103,85563,85564],{"class":162},"Star",[103,85566,671],{"class":113},[103,85568,85569],{"class":162},"prototype",[103,85571,13554],{"class":109},[103,85573,15562],{"class":113},[103,85575,85576],{"class":105,"line":25},[103,85577,85578],{"class":172},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[103,85580,85581],{"class":105,"line":1168},[103,85582,85583],{"class":113},"  constructor: Star,\n",[103,85585,85586,85589,85591,85593],{"class":105,"line":1183},[103,85587,85588],{"class":1952},"  sing",[103,85590,51427],{"class":113},[103,85592,54439],{"class":109},[103,85594,54442],{"class":113},[103,85596,85597,85599,85601,85603,85606],{"class":105,"line":1189},[103,85598,73743],{"class":113},[103,85600,58237],{"class":1952},[103,85602,114],{"class":113},[103,85604,85605],{"class":218},"'唱歌'",[103,85607,120],{"class":113},[103,85609,85610],{"class":105,"line":1203},[103,85611,85612],{"class":113},"   },\n",[103,85614,85615,85618,85620,85622],{"class":105,"line":1209},[103,85616,85617],{"class":1952},"   dance",[103,85619,51427],{"class":113},[103,85621,54439],{"class":109},[103,85623,54442],{"class":113},[103,85625,85626,85629,85631,85633,85636],{"class":105,"line":1300},[103,85627,85628],{"class":113},"     console.",[103,85630,58237],{"class":1952},[103,85632,114],{"class":113},[103,85634,85635],{"class":218},"'跳舞'",[103,85637,120],{"class":113},[103,85639,85640],{"class":105,"line":1306},[103,85641,4298],{"class":113},[103,85643,85644],{"class":105,"line":1318},[103,85645,1554],{"class":113},[14,85647,85648],{},[1451,85649],{"alt":24,"src":85650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85652,85653],{},"总结1：",[14,85655,85656],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85658,85659],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85661,85662],{},"constructor指的是他的来源",[14,85664,85665],{},[1451,85666],{"alt":24,"src":85667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85669,85670],{},[1451,85671],{"alt":24,"src":85672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85674,85675],{},"总结2：",[14,85677,85678],{},[1451,85679],{"alt":24,"src":85680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85682,85683],{},[1451,85684],{"alt":24,"src":85685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85687,85688],{},[1451,85689],{"alt":24,"src":85690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[74,85692,85694],{"id":85693},"_4134-对象原型","4.13.4 对象原型",[14,85696,85697],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85699,85700],{},"对象原型就是__proto__这个属性",[14,85702,85703],{},[1451,85704],{"alt":24,"src":85705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85707,85708],{},[1451,85709],{"alt":24,"src":85710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85712,85713],{},[1451,85714],{"alt":24,"src":85715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85717,85718],{},[1451,85719],{"alt":24,"src":85720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[94,85722,85724],{"className":53057,"code":85723,"language":53059,"meta":24,"style":24},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[100,85725,85726,85734,85742,85746,85750,85754,85759,85767],{"__ignoreMap":24},[103,85727,85728,85730,85732],{"class":105,"line":106},[103,85729,1023],{"class":113},[103,85731,51790],{"class":51290},[103,85733,51297],{"class":113},[103,85735,85736,85738,85740],{"class":105,"line":25},[103,85737,52134],{"class":113},[103,85739,51803],{"class":51290},[103,85741,51297],{"class":113},[103,85743,85744],{"class":105,"line":1168},[103,85745,85366],{"class":113},[103,85747,85748],{"class":105,"line":1183},[103,85749,2176],{"class":113},[103,85751,85752],{"class":105,"line":1189},[103,85753,85375],{"class":113},[103,85755,85756],{"class":105,"line":1203},[103,85757,85758],{"class":113},"    console.log(ldh)\n",[103,85760,85761,85763,85765],{"class":105,"line":1209},[103,85762,52407],{"class":113},[103,85764,51803],{"class":51290},[103,85766,51297],{"class":113},[103,85768,85769,85771,85773],{"class":105,"line":1300},[103,85770,51775],{"class":113},[103,85772,51790],{"class":51290},[103,85774,51297],{"class":113},[14,85776,85777],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85779,85780],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85782,85783],{},[1451,85784],{"alt":24,"src":85785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85787,85788],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85790,85791],{},"对象原型指向原型对象",[14,85793,85794],{},[1451,85795],{"alt":24,"src":85796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85798,85799],{},[1451,85800],{"alt":24,"src":85801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85803,85804],{},[1451,85805],{"alt":24,"src":85806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[74,85808,85810],{"id":85809},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85812,85813],{},[1451,85814],{"alt":24,"src":85815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[57,85817,85818,85821,85824,85827],{},[60,85819,85820],{},"构造函数通过new的形式实例化得到实例对象",[60,85822,85823],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[60,85825,85826],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[60,85828,85829],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85831,85832],{},[1451,85833],{"alt":24,"src":85834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85836,85837],{},"题目梳理：",[14,85839,85840],{},[1451,85841],{"alt":24,"src":85842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[74,85844,85846],{"id":85845},"_4136-原型继承","4.13.6 原型继承",[14,85848,85849],{},[1451,85850],{"alt":24,"src":85851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85853,85854],{},[1451,85855],{"alt":24,"src":85856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85858,85859],{},[1451,85860],{"alt":24,"src":85861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85863,85864],{},[1451,85865],{"alt":24,"src":85866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85868,85869],{},[1451,85870],{"alt":24,"src":85871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85873,85874],{},[1451,85875],{"alt":24,"src":85876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85878,85879],{},[1451,85880],{"alt":24,"src":85881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85883,85884],{},[1451,85885],{"alt":24,"src":85886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85888,85889],{},"回顾：构造函数每次new得到对象都是不同的",[74,85891,85893],{"id":85892},"_4137-原型链","4.13.7 原型链",[14,85895,85896],{},[1451,85897],{"alt":24,"src":85898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85900,85901],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85903,85904],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85906,85907],{},"大哥是Object",[14,85909,85910],{},[1451,85911],{"alt":24,"src":85912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85914,85915],{},[1451,85916],{"alt":24,"src":85917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85919,85920],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,85922,85923],{},"万物皆对象",[74,85925,85927],{"id":85926},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,85929,85930],{},"模态框",[14,85932,85933],{},"以后遇见这个效果直接使用这个就行",[14,85935,85936],{},[1451,85937],{"alt":24,"src":85938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,85940,85941],{},[1451,85942],{"alt":24,"src":85943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,85945,85946],{},[1451,85947],{"alt":24,"src":85948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,85950,85951],{},[1451,85952],{"alt":24,"src":85953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,85955,85956],{},"补充知识点：",[57,85958,85959],{},[60,85960,85961],{},"append()",[14,85963,85964],{},[1451,85965],{"alt":24,"src":85966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[94,85968,85970],{"className":50623,"code":85969,"language":50625,"meta":24,"style":24},"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",[100,85971,85972,85977,85982,85987,85991,85995,85999,86004,86009,86014,86018],{"__ignoreMap":24},[103,85973,85974],{"class":105,"line":106},[103,85975,85976],{"class":113},"append(param1)\n",[103,85978,85979],{"class":105,"line":25},[103,85980,85981],{"class":113},"append(param1, param2)\n",[103,85983,85984],{"class":105,"line":1168},[103,85985,85986],{"class":113},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[103,85988,85989],{"class":105,"line":1183},[103,85990,2389],{"emptyLinePlaceholder":30},[103,85992,85993],{"class":105,"line":1189},[103,85994,2389],{"emptyLinePlaceholder":30},[103,85996,85997],{"class":105,"line":1203},[103,85998,2389],{"emptyLinePlaceholder":30},[103,86000,86001],{"class":105,"line":1209},[103,86002,86003],{"class":113},"let div = document.createElement(\"div\");\n",[103,86005,86006],{"class":105,"line":1300},[103,86007,86008],{"class":113},"let p = document.createElement(\"p\");\n",[103,86010,86011],{"class":105,"line":1306},[103,86012,86013],{"class":113},"div.append(p);\n",[103,86015,86016],{"class":105,"line":1318},[103,86017,2389],{"emptyLinePlaceholder":30},[103,86019,86020,86023,86025],{"class":105,"line":1601},[103,86021,86022],{"class":113},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[103,86024,14],{"class":51290},[103,86026,86027],{"class":113},"> ]\n",[57,86029,86030],{"start":25},[60,86031,86032],{},"remove()",[14,86034,86035],{},"自己删自己",[14,86037,86038],{},[1451,86039],{"alt":24,"src":86040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[94,86042,86044],{"className":50623,"code":86043,"language":50625,"meta":24,"style":24},"\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",[100,86045,86046,86056,86070,86074,86082,86096,86116,86128,86136,86143,86155,86168,86203,86215,86226,86238,86250,86262,86289,86299,86303,86307,86316,86328,86342,86352,86364,86368,86372,86382,86393,86403,86413,86426,86439,86449,86453,86457,86466,86476,86488,86492,86496,86505,86515,86525,86537,86541,86545,86555,86571,86582,86592,86602,86614,86626,86638,86642,86646,86659,86670,86674,86682,86690,86694,86702,86722,86742,86750,86755,86781,86786,86791,86810,86815,86827,86832,86843,86853,86863,86868,86873,86877,86882,86887,86892,86912,86917,86937,86942,86956,86961,86966,86971,86987,86991,86996,87025,87030,87035,87040,87051,87055,87059,87063,87068,87093,87098,87123,87128,87137,87141,87146,87171,87175,87200,87204,87213,87217,87222,87240,87250,87254,87262,87270,87274],{"__ignoreMap":24},[103,86047,86048,86050,86052,86054],{"class":105,"line":106},[103,86049,51287],{"class":113},[103,86051,51291],{"class":51290},[103,86053,51294],{"class":1952},[103,86055,51297],{"class":113},[103,86057,86058,86060,86062,86064,86066,86068],{"class":105,"line":25},[103,86059,1023],{"class":113},[103,86061,50625],{"class":51290},[103,86063,51306],{"class":1952},[103,86065,159],{"class":113},[103,86067,51311],{"class":218},[103,86069,51297],{"class":113},[103,86071,86072],{"class":105,"line":1168},[103,86073,2389],{"emptyLinePlaceholder":30},[103,86075,86076,86078,86080],{"class":105,"line":1183},[103,86077,1023],{"class":113},[103,86079,51324],{"class":51290},[103,86081,51297],{"class":113},[103,86083,86084,86086,86088,86090,86092,86094],{"class":105,"line":1189},[103,86085,52134],{"class":113},[103,86087,51334],{"class":51290},[103,86089,51337],{"class":1952},[103,86091,159],{"class":113},[103,86093,51342],{"class":218},[103,86095,51297],{"class":113},[103,86097,86098,86100,86102,86104,86106,86108,86110,86112,86114],{"class":105,"line":1203},[103,86099,52134],{"class":113},[103,86101,51334],{"class":51290},[103,86103,14910],{"class":1952},[103,86105,159],{"class":113},[103,86107,51381],{"class":218},[103,86109,51361],{"class":1952},[103,86111,159],{"class":113},[103,86113,51388],{"class":218},[103,86115,51297],{"class":113},[103,86117,86118,86120,86122,86124,86126],{"class":105,"line":1209},[103,86119,52134],{"class":113},[103,86121,51397],{"class":51290},[103,86123,51400],{"class":113},[103,86125,51397],{"class":51290},[103,86127,51297],{"class":113},[103,86129,86130,86132,86134],{"class":105,"line":1300},[103,86131,52134],{"class":113},[103,86133,5116],{"class":51290},[103,86135,51297],{"class":113},[103,86137,86138,86141],{"class":105,"line":1306},[103,86139,86140],{"class":1952},"    .modal",[103,86142,15562],{"class":113},[103,86144,86145,86147,86149,86151,86153],{"class":105,"line":1318},[103,86146,54761],{"class":162},[103,86148,51427],{"class":113},[103,86150,3962],{"class":162},[103,86152,51482],{"class":109},[103,86154,1279],{"class":113},[103,86156,86157,86160,86162,86164,86166],{"class":105,"line":1601},[103,86158,86159],{"class":162},"      min-height",[103,86161,51427],{"class":113},[103,86163,424],{"class":162},[103,86165,51482],{"class":109},[103,86167,1279],{"class":113},[103,86169,86170,86172,86174,86176,86178,86180,86182,86184,86186,86188,86190,86192,86194,86196,86198,86201],{"class":105,"line":1606},[103,86171,78740],{"class":162},[103,86173,51427],{"class":113},[103,86175,305],{"class":162},[103,86177,4082],{"class":162},[103,86179,2027],{"class":162},[103,86181,51482],{"class":109},[103,86183,78757],{"class":162},[103,86185,114],{"class":113},[103,86187,305],{"class":162},[103,86189,12425],{"class":113},[103,86191,305],{"class":162},[103,86193,12425],{"class":113},[103,86195,305],{"class":162},[103,86197,12425],{"class":113},[103,86199,86200],{"class":162},"0.1",[103,86202,2708],{"class":113},[103,86204,86205,86207,86209,86211,86213],{"class":105,"line":1612},[103,86206,55124],{"class":162},[103,86208,51427],{"class":113},[103,86210,406],{"class":162},[103,86212,51482],{"class":109},[103,86214,1279],{"class":113},[103,86216,86217,86219,86221,86224],{"class":105,"line":1617},[103,86218,54749],{"class":162},[103,86220,51427],{"class":113},[103,86222,86223],{"class":162},"fixed",[103,86225,1279],{"class":113},[103,86227,86228,86231,86233,86236],{"class":105,"line":1631},[103,86229,86230],{"class":162},"      z-index",[103,86232,51427],{"class":113},[103,86234,86235],{"class":162},"999",[103,86237,1279],{"class":113},[103,86239,86240,86242,86244,86246,86248],{"class":105,"line":1636},[103,86241,54828],{"class":162},[103,86243,51427],{"class":113},[103,86245,769],{"class":162},[103,86247,441],{"class":109},[103,86249,1279],{"class":113},[103,86251,86252,86254,86256,86258,86260],{"class":105,"line":1642},[103,86253,54937],{"class":162},[103,86255,51427],{"class":113},[103,86257,769],{"class":162},[103,86259,441],{"class":109},[103,86261,1279],{"class":113},[103,86263,86264,86266,86268,86270,86272,86275,86277,86279,86281,86283,86285,86287],{"class":105,"line":1663},[103,86265,78781],{"class":162},[103,86267,51427],{"class":113},[103,86269,78786],{"class":162},[103,86271,114],{"class":113},[103,86273,86274],{"class":162},"-50",[103,86276,441],{"class":109},[103,86278,12425],{"class":113},[103,86280,86274],{"class":162},[103,86282,441],{"class":109},[103,86284,12425],{"class":113},[103,86286,305],{"class":162},[103,86288,2708],{"class":113},[103,86290,86291,86293,86295,86297],{"class":105,"line":1668},[103,86292,54874],{"class":162},[103,86294,51427],{"class":113},[103,86296,60832],{"class":162},[103,86298,1279],{"class":113},[103,86300,86301],{"class":105,"line":1682},[103,86302,2176],{"class":113},[103,86304,86305],{"class":105,"line":1687},[103,86306,2389],{"emptyLinePlaceholder":30},[103,86308,86309,86311,86314],{"class":105,"line":1716},[103,86310,86140],{"class":1952},[103,86312,86313],{"class":1952}," .header",[103,86315,15562],{"class":113},[103,86317,86318,86320,86322,86324,86326],{"class":105,"line":1721},[103,86319,57349],{"class":162},[103,86321,51427],{"class":113},[103,86323,514],{"class":162},[103,86325,51482],{"class":109},[103,86327,1279],{"class":113},[103,86329,86330,86332,86334,86336,86338,86340],{"class":105,"line":1738},[103,86331,54685],{"class":162},[103,86333,51427],{"class":113},[103,86335,305],{"class":162},[103,86337,2027],{"class":162},[103,86339,51482],{"class":109},[103,86341,1279],{"class":113},[103,86343,86344,86346,86348,86350],{"class":105,"line":1743},[103,86345,54749],{"class":162},[103,86347,51427],{"class":113},[103,86349,54754],{"class":162},[103,86351,1279],{"class":113},[103,86353,86354,86356,86358,86360,86362],{"class":105,"line":1748},[103,86355,54912],{"class":162},[103,86357,51427],{"class":113},[103,86359,813],{"class":162},[103,86361,51482],{"class":109},[103,86363,1279],{"class":113},[103,86365,86366],{"class":105,"line":1753},[103,86367,2176],{"class":113},[103,86369,86370],{"class":105,"line":1767},[103,86371,2389],{"emptyLinePlaceholder":30},[103,86373,86374,86376,86378,86380],{"class":105,"line":1772},[103,86375,86140],{"class":1952},[103,86377,86313],{"class":1952},[103,86379,3021],{"class":51290},[103,86381,15562],{"class":113},[103,86383,86384,86387,86389,86391],{"class":105,"line":2566},[103,86385,86386],{"class":162},"      font-style",[103,86388,51427],{"class":113},[103,86390,63831],{"class":162},[103,86392,1279],{"class":113},[103,86394,86395,86397,86399,86401],{"class":105,"line":2580},[103,86396,57406],{"class":162},[103,86398,51427],{"class":113},[103,86400,62060],{"class":162},[103,86402,1279],{"class":113},[103,86404,86405,86407,86409,86411],{"class":105,"line":2588},[103,86406,54749],{"class":162},[103,86408,51427],{"class":113},[103,86410,54821],{"class":162},[103,86412,1279],{"class":113},[103,86414,86415,86418,86420,86422,86424],{"class":105,"line":2593},[103,86416,86417],{"class":162},"      right",[103,86419,51427],{"class":113},[103,86421,688],{"class":162},[103,86423,51482],{"class":109},[103,86425,1279],{"class":113},[103,86427,86428,86430,86432,86435,86437],{"class":105,"line":2599},[103,86429,54937],{"class":162},[103,86431,51427],{"class":113},[103,86433,86434],{"class":162},"-2",[103,86436,51482],{"class":109},[103,86438,1279],{"class":113},[103,86440,86441,86443,86445,86447],{"class":105,"line":2605},[103,86442,62015],{"class":162},[103,86444,51427],{"class":113},[103,86446,62020],{"class":162},[103,86448,1279],{"class":113},[103,86450,86451],{"class":105,"line":2610},[103,86452,2176],{"class":113},[103,86454,86455],{"class":105,"line":7938},[103,86456,2389],{"emptyLinePlaceholder":30},[103,86458,86459,86461,86464],{"class":105,"line":7962},[103,86460,86140],{"class":1952},[103,86462,86463],{"class":1952}," .body",[103,86465,15562],{"class":113},[103,86467,86468,86470,86472,86474],{"class":105,"line":7967},[103,86469,57276],{"class":162},[103,86471,51427],{"class":113},[103,86473,51582],{"class":162},[103,86475,1279],{"class":113},[103,86477,86478,86480,86482,86484,86486],{"class":105,"line":7973},[103,86479,54685],{"class":162},[103,86481,51427],{"class":113},[103,86483,559],{"class":162},[103,86485,51482],{"class":109},[103,86487,1279],{"class":113},[103,86489,86490],{"class":105,"line":8000},[103,86491,2176],{"class":113},[103,86493,86494],{"class":105,"line":8005},[103,86495,2389],{"emptyLinePlaceholder":30},[103,86497,86498,86500,86503],{"class":105,"line":8011},[103,86499,86140],{"class":1952},[103,86501,86502],{"class":1952}," .footer",[103,86504,15562],{"class":113},[103,86506,86507,86509,86511,86513],{"class":105,"line":8023},[103,86508,54999],{"class":162},[103,86510,51427],{"class":113},[103,86512,51467],{"class":162},[103,86514,1279],{"class":113},[103,86516,86517,86519,86521,86523],{"class":105,"line":8035},[103,86518,55010],{"class":162},[103,86520,51427],{"class":113},[103,86522,51570],{"class":162},[103,86524,1279],{"class":113},[103,86526,86527,86529,86531,86533,86535],{"class":105,"line":8047},[103,86528,54685],{"class":162},[103,86530,51427],{"class":113},[103,86532,559],{"class":162},[103,86534,51482],{"class":109},[103,86536,1279],{"class":113},[103,86538,86539],{"class":105,"line":9706},[103,86540,2176],{"class":113},[103,86542,86543],{"class":105,"line":9731},[103,86544,2389],{"emptyLinePlaceholder":30},[103,86546,86547,86549,86551,86553],{"class":105,"line":9754},[103,86548,86140],{"class":1952},[103,86550,86502],{"class":1952},[103,86552,1387],{"class":51290},[103,86554,15562],{"class":113},[103,86556,86557,86559,86561,86563,86565,86567,86569],{"class":105,"line":9778},[103,86558,54685],{"class":162},[103,86560,51427],{"class":113},[103,86562,185],{"class":162},[103,86564,51482],{"class":109},[103,86566,2072],{"class":162},[103,86568,51482],{"class":109},[103,86570,1279],{"class":113},[103,86572,86573,86575,86577,86580],{"class":105,"line":9783},[103,86574,61711],{"class":162},[103,86576,51427],{"class":113},[103,86578,86579],{"class":162},"#ccc",[103,86581,1279],{"class":113},[103,86583,86584,86586,86588,86590],{"class":105,"line":9788},[103,86585,63960],{"class":162},[103,86587,51427],{"class":113},[103,86589,54727],{"class":162},[103,86591,1279],{"class":113},[103,86593,86594,86596,86598,86600],{"class":105,"line":9793},[103,86595,57406],{"class":162},[103,86597,51427],{"class":113},[103,86599,60832],{"class":162},[103,86601,1279],{"class":113},[103,86603,86604,86606,86608,86610,86612],{"class":105,"line":9802},[103,86605,55124],{"class":162},[103,86607,51427],{"class":113},[103,86609,191],{"class":162},[103,86611,51482],{"class":109},[103,86613,1279],{"class":113},[103,86615,86616,86618,86620,86622,86624],{"class":105,"line":9807},[103,86617,61740],{"class":162},[103,86619,51427],{"class":113},[103,86621,559],{"class":162},[103,86623,51482],{"class":109},[103,86625,1279],{"class":113},[103,86627,86628,86630,86632,86634,86636],{"class":105,"line":9813},[103,86629,54912],{"class":162},[103,86631,51427],{"class":113},[103,86633,662],{"class":162},[103,86635,51482],{"class":109},[103,86637,1279],{"class":113},[103,86639,86640],{"class":105,"line":9834},[103,86641,2176],{"class":113},[103,86643,86644],{"class":105,"line":9840},[103,86645,2389],{"emptyLinePlaceholder":30},[103,86647,86648,86650,86652,86654,86657],{"class":105,"line":9854},[103,86649,86140],{"class":1952},[103,86651,86502],{"class":1952},[103,86653,1387],{"class":51290},[103,86655,86656],{"class":1952},".submit",[103,86658,15562],{"class":113},[103,86660,86661,86663,86665,86668],{"class":105,"line":9860},[103,86662,54874],{"class":162},[103,86664,51427],{"class":113},[103,86666,86667],{"class":162},"#369",[103,86669,1279],{"class":113},[103,86671,86672],{"class":105,"line":9887},[103,86673,2176],{"class":113},[103,86675,86676,86678,86680],{"class":105,"line":9896},[103,86677,52407],{"class":113},[103,86679,5116],{"class":51290},[103,86681,51297],{"class":113},[103,86683,86684,86686,86688],{"class":105,"line":9902},[103,86685,51775],{"class":113},[103,86687,51324],{"class":51290},[103,86689,51297],{"class":113},[103,86691,86692],{"class":105,"line":9910},[103,86693,2389],{"emptyLinePlaceholder":30},[103,86695,86696,86698,86700],{"class":105,"line":9915},[103,86697,1023],{"class":113},[103,86699,51790],{"class":51290},[103,86701,51297],{"class":113},[103,86703,86704,86706,86708,86710,86712,86715,86718,86720],{"class":105,"line":16594},[103,86705,52134],{"class":113},[103,86707,53877],{"class":51290},[103,86709,14949],{"class":1952},[103,86711,159],{"class":113},[103,86713,86714],{"class":218},"\"delete\"",[103,86716,86717],{"class":113},">删除\u003C\u002F",[103,86719,53877],{"class":51290},[103,86721,51297],{"class":113},[103,86723,86724,86726,86728,86730,86732,86735,86738,86740],{"class":105,"line":16600},[103,86725,52134],{"class":113},[103,86727,53877],{"class":51290},[103,86729,14949],{"class":1952},[103,86731,159],{"class":113},[103,86733,86734],{"class":218},"\"login\"",[103,86736,86737],{"class":113},">登录\u003C\u002F",[103,86739,53877],{"class":51290},[103,86741,51297],{"class":113},[103,86743,86744,86746,86748],{"class":105,"line":16623},[103,86745,52134],{"class":113},[103,86747,51803],{"class":51290},[103,86749,51297],{"class":113},[103,86751,86752],{"class":105,"line":16629},[103,86753,86754],{"class":172},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[103,86756,86757,86759,86762,86764,86766,86768,86770,86772,86775,86777,86779],{"class":105,"line":16652},[103,86758,70074],{"class":109},[103,86760,86761],{"class":1952}," Modal",[103,86763,114],{"class":113},[103,86765,51397],{"class":5206},[103,86767,13554],{"class":109},[103,86769,69920],{"class":218},[103,86771,12425],{"class":113},[103,86773,86774],{"class":5206},"message",[103,86776,13554],{"class":109},[103,86778,69920],{"class":218},[103,86780,12432],{"class":113},[103,86782,86783],{"class":105,"line":16666},[103,86784,86785],{"class":172},"      \u002F\u002F 创建Model 模态框盒子\n",[103,86787,86788],{"class":105,"line":16686},[103,86789,86790],{"class":172},"      \u002F\u002F 1.1 创建div标签\n",[103,86792,86793,86795,86798,86800,86802,86804,86806,86808],{"class":105,"line":16692},[103,86794,70041],{"class":162},[103,86796,86797],{"class":113},".modalBox ",[103,86799,159],{"class":109},[103,86801,54386],{"class":113},[103,86803,70141],{"class":1952},[103,86805,114],{"class":113},[103,86807,81921],{"class":218},[103,86809,120],{"class":113},[103,86811,86812],{"class":105,"line":16703},[103,86813,86814],{"class":172},"      \u002F\u002F 1.2 给div 添加类名为model\n",[103,86816,86817,86819,86822,86824],{"class":105,"line":16726},[103,86818,70041],{"class":162},[103,86820,86821],{"class":113},".modalBox.className ",[103,86823,159],{"class":109},[103,86825,86826],{"class":218}," 'modal'\n",[103,86828,86829],{"class":105,"line":16748},[103,86830,86831],{"class":172},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[103,86833,86834,86836,86839,86841],{"class":105,"line":16753},[103,86835,70041],{"class":162},[103,86837,86838],{"class":113},".modalBox.innerHTML ",[103,86840,159],{"class":109},[103,86842,70158],{"class":218},[103,86844,86845,86848,86850],{"class":105,"line":16759},[103,86846,86847],{"class":218},"        \u003Cdiv class=\"header\">${",[103,86849,51397],{"class":113},[103,86851,86852],{"class":218},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[103,86854,86855,86858,86860],{"class":105,"line":16773},[103,86856,86857],{"class":218},"        \u003Cdiv class=\"body\">${",[103,86859,86774],{"class":113},[103,86861,86862],{"class":218},"}\u003C\u002Fdiv>\n",[103,86864,86865],{"class":105,"line":16786},[103,86866,86867],{"class":218},"      `\n",[103,86869,86870],{"class":105,"line":16791},[103,86871,86872],{"class":172},"      \u002F\u002F console.log(this.modalBox)\n",[103,86874,86875],{"class":105,"line":16805},[103,86876,2176],{"class":113},[103,86878,86879],{"class":105,"line":16810},[103,86880,86881],{"class":172},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[103,86883,86884],{"class":105,"line":16816},[103,86885,86886],{"class":172},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[103,86888,86889],{"class":105,"line":16821},[103,86890,86891],{"class":172},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[103,86893,86894,86897,86899,86901,86903,86906,86908,86910],{"class":105,"line":16835},[103,86895,86896],{"class":162},"    Modal",[103,86898,671],{"class":113},[103,86900,85569],{"class":162},[103,86902,671],{"class":113},[103,86904,86905],{"class":1952},"open",[103,86907,13554],{"class":109},[103,86909,58908],{"class":109},[103,86911,54442],{"class":113},[103,86913,86914],{"class":105,"line":16840},[103,86915,86916],{"class":172},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[103,86918,86919,86921,86924,86926,86928,86930,86932,86935],{"class":105,"line":16845},[103,86920,58218],{"class":109},[103,86922,86923],{"class":162}," box",[103,86925,13554],{"class":109},[103,86927,54386],{"class":113},[103,86929,54389],{"class":1952},[103,86931,114],{"class":113},[103,86933,86934],{"class":218},"'.modal'",[103,86936,120],{"class":113},[103,86938,86939],{"class":105,"line":16859},[103,86940,86941],{"class":172},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[103,86943,86944,86947,86949,86952,86954],{"class":105,"line":16871},[103,86945,86946],{"class":113},"      box ",[103,86948,1704],{"class":109},[103,86950,86951],{"class":113}," box.",[103,86953,56996],{"class":1952},[103,86955,1965],{"class":113},[103,86957,86958],{"class":105,"line":16876},[103,86959,86960],{"class":172},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[103,86962,86963],{"class":105,"line":16889},[103,86964,86965],{"class":172},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[103,86967,86968],{"class":105,"line":16894},[103,86969,86970],{"class":172},"      \u002F\u002F append可以增加对象\n",[103,86972,86973,86976,86979,86981,86984],{"class":105,"line":16899},[103,86974,86975],{"class":113},"      document.body.",[103,86977,86978],{"class":1952},"append",[103,86980,114],{"class":113},[103,86982,86983],{"class":162},"this",[103,86985,86986],{"class":113},".modalBox)\n",[103,86988,86989],{"class":105,"line":16904},[103,86990,2389],{"emptyLinePlaceholder":30},[103,86992,86993],{"class":105,"line":16917},[103,86994,86995],{"class":172},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[103,86997,86998,87000,87003,87005,87007,87010,87012,87014,87016,87018,87021,87023],{"class":105,"line":16922},[103,86999,70041],{"class":162},[103,87001,87002],{"class":113},".modalBox.",[103,87004,54389],{"class":1952},[103,87006,114],{"class":113},[103,87008,87009],{"class":218},"'i'",[103,87011,30816],{"class":113},[103,87013,57803],{"class":1952},[103,87015,114],{"class":113},[103,87017,57808],{"class":218},[103,87019,87020],{"class":113},", () ",[103,87022,84712],{"class":109},[103,87024,15562],{"class":113},[103,87026,87027],{"class":105,"line":32623},[103,87028,87029],{"class":172},"        \u002F\u002F 这个地方需要用到箭头函数\n",[103,87031,87032],{"class":105,"line":32629},[103,87033,87034],{"class":172},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[103,87036,87037],{"class":105,"line":32635},[103,87038,87039],{"class":172},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[103,87041,87042,87044,87046,87049],{"class":105,"line":32641},[103,87043,64716],{"class":162},[103,87045,671],{"class":113},[103,87047,87048],{"class":1952},"close",[103,87050,1965],{"class":113},[103,87052,87053],{"class":105,"line":32647},[103,87054,64805],{"class":113},[103,87056,87057],{"class":105,"line":32658},[103,87058,2176],{"class":113},[103,87060,87061],{"class":105,"line":32664},[103,87062,2389],{"emptyLinePlaceholder":30},[103,87064,87065],{"class":105,"line":32684},[103,87066,87067],{"class":172},"    \u002F\u002F 测试一下 点击 删除按钮\n",[103,87069,87070,87072,87074,87076,87079,87081,87083,87085,87087,87089,87091],{"class":105,"line":32690},[103,87071,52397],{"class":113},[103,87073,54389],{"class":1952},[103,87075,114],{"class":113},[103,87077,87078],{"class":218},"'#delete'",[103,87080,30816],{"class":113},[103,87082,57803],{"class":1952},[103,87084,114],{"class":113},[103,87086,57808],{"class":218},[103,87088,87020],{"class":113},[103,87090,84712],{"class":109},[103,87092,15562],{"class":113},[103,87094,87095],{"class":105,"line":32701},[103,87096,87097],{"class":172},"      \u002F\u002F 先调用Model构造函数\n",[103,87099,87100,87102,87105,87107,87109,87111,87113,87116,87118,87121],{"class":105,"line":32707},[103,87101,58218],{"class":109},[103,87103,87104],{"class":162}," del",[103,87106,13554],{"class":109},[103,87108,11568],{"class":109},[103,87110,86761],{"class":1952},[103,87112,114],{"class":113},[103,87114,87115],{"class":218},"'温馨的提示'",[103,87117,12425],{"class":113},[103,87119,87120],{"class":218},"'您没有删除权限操作'",[103,87122,120],{"class":113},[103,87124,87125],{"class":105,"line":32713},[103,87126,87127],{"class":172},"      \u002F\u002F 实例对象调用open方法\n",[103,87129,87130,87133,87135],{"class":105,"line":32719},[103,87131,87132],{"class":113},"      del.",[103,87134,86905],{"class":1952},[103,87136,1965],{"class":113},[103,87138,87139],{"class":105,"line":32725},[103,87140,33451],{"class":113},[103,87142,87143],{"class":105,"line":32731},[103,87144,87145],{"class":172},"    \u002F\u002F 测试一下 点击 登录按钮\n",[103,87147,87148,87150,87152,87154,87157,87159,87161,87163,87165,87167,87169],{"class":105,"line":32737},[103,87149,52397],{"class":113},[103,87151,54389],{"class":1952},[103,87153,114],{"class":113},[103,87155,87156],{"class":218},"'#login'",[103,87158,30816],{"class":113},[103,87160,57803],{"class":1952},[103,87162,114],{"class":113},[103,87164,57808],{"class":218},[103,87166,87020],{"class":113},[103,87168,84712],{"class":109},[103,87170,15562],{"class":113},[103,87172,87173],{"class":105,"line":32743},[103,87174,87097],{"class":172},[103,87176,87177,87179,87182,87184,87186,87188,87190,87193,87195,87198],{"class":105,"line":32763},[103,87178,58218],{"class":109},[103,87180,87181],{"class":162}," log",[103,87183,13554],{"class":109},[103,87185,11568],{"class":109},[103,87187,86761],{"class":1952},[103,87189,114],{"class":113},[103,87191,87192],{"class":218},"'友情提示'",[103,87194,12425],{"class":113},[103,87196,87197],{"class":218},"'您还没有登录呢'",[103,87199,120],{"class":113},[103,87201,87202],{"class":105,"line":32769},[103,87203,87127],{"class":172},[103,87205,87206,87209,87211],{"class":105,"line":32785},[103,87207,87208],{"class":113},"      log.",[103,87210,86905],{"class":1952},[103,87212,1965],{"class":113},[103,87214,87215],{"class":105,"line":32791},[103,87216,33451],{"class":113},[103,87218,87219],{"class":105,"line":32805},[103,87220,87221],{"class":172},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[103,87223,87224,87226,87228,87230,87232,87234,87236,87238],{"class":105,"line":32811},[103,87225,86896],{"class":162},[103,87227,671],{"class":113},[103,87229,85569],{"class":162},[103,87231,671],{"class":113},[103,87233,87048],{"class":1952},[103,87235,13554],{"class":109},[103,87237,58908],{"class":109},[103,87239,54442],{"class":113},[103,87241,87242,87244,87246,87248],{"class":105,"line":32826},[103,87243,70041],{"class":162},[103,87245,87002],{"class":113},[103,87247,56996],{"class":1952},[103,87249,1965],{"class":113},[103,87251,87252],{"class":105,"line":32832},[103,87253,2176],{"class":113},[103,87255,87256,87258,87260],{"class":105,"line":32841},[103,87257,52407],{"class":113},[103,87259,51803],{"class":51290},[103,87261,51297],{"class":113},[103,87263,87264,87266,87268],{"class":105,"line":32847},[103,87265,51775],{"class":113},[103,87267,51790],{"class":51290},[103,87269,51297],{"class":113},[103,87271,87272],{"class":105,"line":32856},[103,87273,2389],{"emptyLinePlaceholder":30},[103,87275,87276,87278,87280],{"class":105,"line":32862},[103,87277,51775],{"class":113},[103,87279,50625],{"class":51290},[103,87281,51297],{"class":113},[14,87283,87284],{},[1451,87285],{"alt":24,"src":87286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[45,87288,87290],{"id":87289},"_414-深浅拷贝","4.14 深浅拷贝",[74,87292,87294],{"id":87293},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87296,87297],{},[1451,87298],{"alt":24,"src":87299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87301,87302],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87304,87305],{},[1451,87306],{"alt":24,"src":87307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87309,87310],{},[1451,87311],{"alt":24,"src":87312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87314,87315],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87317,87318],{},[1451,87319],{"alt":24,"src":87320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87322,11322],{},[14,87324,87325],{},[1451,87326],{"alt":24,"src":87327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[74,87329,87331],{"id":87330},"_4142-深拷贝","4.14.2 深拷贝",[14,87333,87334],{},"深拷贝：拷贝的是对象，不是地址",[14,87336,87337],{},"常用的三种方法：",[57,87339,87340,87343,87346],{},[60,87341,87342],{},"通过递归实现深拷贝",[60,87344,87345],{},"lodash\u002FcloneDeep",[60,87347,87348],{},"通过JSON.stringify()实现",[21988,87350,87352],{"id":87351},"_41421-递归函数","4.14.2.1 递归函数",[14,87354,87355],{},[1451,87356],{"alt":24,"src":87357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[57,87359,87360],{},[60,87361,87362],{},"死递归占溢出：",[94,87364,87366],{"className":53057,"code":87365,"language":53059,"meta":24,"style":24},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[100,87367,87368,87376,87384,87388,87393,87397,87402,87410],{"__ignoreMap":24},[103,87369,87370,87372,87374],{"class":105,"line":106},[103,87371,1023],{"class":113},[103,87373,51790],{"class":51290},[103,87375,51297],{"class":113},[103,87377,87378,87380,87382],{"class":105,"line":25},[103,87379,52134],{"class":113},[103,87381,51803],{"class":51290},[103,87383,51297],{"class":113},[103,87385,87386],{"class":105,"line":1168},[103,87387,77133],{"class":113},[103,87389,87390],{"class":105,"line":1183},[103,87391,87392],{"class":113},"      fn()\n",[103,87394,87395],{"class":105,"line":1189},[103,87396,2176],{"class":113},[103,87398,87399],{"class":105,"line":1203},[103,87400,87401],{"class":113},"    fn()\n",[103,87403,87404,87406,87408],{"class":105,"line":1209},[103,87405,52407],{"class":113},[103,87407,51803],{"class":51290},[103,87409,51297],{"class":113},[103,87411,87412,87414,87416],{"class":105,"line":1300},[103,87413,51775],{"class":113},[103,87415,51790],{"class":51290},[103,87417,51297],{"class":113},[57,87419,87420],{"start":25},[60,87421,87422],{},"递归函数要加判断条件：",[14,87424,87425],{},[1451,87426],{"alt":24,"src":87427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[57,87429,87430],{"start":1168},[60,87431,87432],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[94,87434,87436],{"className":50623,"code":87435,"language":50625,"meta":24,"style":24},"\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",[100,87437,87438,87448,87462,87466,87474,87488,87508,87520,87528,87532,87540,87552,87560,87568,87593,87605,87609,87616,87624,87632,87636],{"__ignoreMap":24},[103,87439,87440,87442,87444,87446],{"class":105,"line":106},[103,87441,51287],{"class":113},[103,87443,51291],{"class":51290},[103,87445,51294],{"class":1952},[103,87447,51297],{"class":113},[103,87449,87450,87452,87454,87456,87458,87460],{"class":105,"line":25},[103,87451,1023],{"class":113},[103,87453,50625],{"class":51290},[103,87455,51306],{"class":1952},[103,87457,159],{"class":113},[103,87459,51311],{"class":218},[103,87461,51297],{"class":113},[103,87463,87464],{"class":105,"line":1168},[103,87465,2389],{"emptyLinePlaceholder":30},[103,87467,87468,87470,87472],{"class":105,"line":1183},[103,87469,1023],{"class":113},[103,87471,51324],{"class":51290},[103,87473,51297],{"class":113},[103,87475,87476,87478,87480,87482,87484,87486],{"class":105,"line":1189},[103,87477,52134],{"class":113},[103,87479,51334],{"class":51290},[103,87481,51337],{"class":1952},[103,87483,159],{"class":113},[103,87485,51342],{"class":218},[103,87487,51297],{"class":113},[103,87489,87490,87492,87494,87496,87498,87500,87502,87504,87506],{"class":105,"line":1203},[103,87491,52134],{"class":113},[103,87493,51334],{"class":51290},[103,87495,14910],{"class":1952},[103,87497,159],{"class":113},[103,87499,51381],{"class":218},[103,87501,51361],{"class":1952},[103,87503,159],{"class":113},[103,87505,51388],{"class":218},[103,87507,51297],{"class":113},[103,87509,87510,87512,87514,87516,87518],{"class":105,"line":1209},[103,87511,52134],{"class":113},[103,87513,51397],{"class":51290},[103,87515,51400],{"class":113},[103,87517,51397],{"class":51290},[103,87519,51297],{"class":113},[103,87521,87522,87524,87526],{"class":105,"line":1300},[103,87523,51775],{"class":113},[103,87525,51324],{"class":51290},[103,87527,51297],{"class":113},[103,87529,87530],{"class":105,"line":1306},[103,87531,2389],{"emptyLinePlaceholder":30},[103,87533,87534,87536,87538],{"class":105,"line":1318},[103,87535,1023],{"class":113},[103,87537,51790],{"class":51290},[103,87539,51297],{"class":113},[103,87541,87542,87544,87546,87548,87550],{"class":105,"line":1601},[103,87543,52134],{"class":113},[103,87545,51601],{"class":51290},[103,87547,55304],{"class":113},[103,87549,51601],{"class":51290},[103,87551,51297],{"class":113},[103,87553,87554,87556,87558],{"class":105,"line":1606},[103,87555,52134],{"class":113},[103,87557,51803],{"class":51290},[103,87559,51297],{"class":113},[103,87561,87562,87564,87566],{"class":105,"line":1612},[103,87563,70074],{"class":109},[103,87565,73763],{"class":1952},[103,87567,10843],{"class":113},[103,87569,87570,87572,87574,87576,87578,87580,87582,87584,87586,87588,87591],{"class":105,"line":1617},[103,87571,55761],{"class":113},[103,87573,54389],{"class":1952},[103,87575,114],{"class":113},[103,87577,81921],{"class":218},[103,87579,74239],{"class":113},[103,87581,159],{"class":109},[103,87583,11568],{"class":109},[103,87585,73779],{"class":1952},[103,87587,17251],{"class":113},[103,87589,87590],{"class":1952},"toLocaleString",[103,87592,1965],{"class":113},[103,87594,87595,87598,87601,87603],{"class":105,"line":1631},[103,87596,87597],{"class":1952},"      setTimeout",[103,87599,87600],{"class":113},"(getTime, ",[103,87602,6400],{"class":162},[103,87604,120],{"class":113},[103,87606,87607],{"class":105,"line":1636},[103,87608,2176],{"class":113},[103,87610,87611,87614],{"class":105,"line":1642},[103,87612,87613],{"class":1952},"    getTime",[103,87615,1965],{"class":113},[103,87617,87618,87620,87622],{"class":105,"line":1663},[103,87619,52407],{"class":113},[103,87621,51803],{"class":51290},[103,87623,51297],{"class":113},[103,87625,87626,87628,87630],{"class":105,"line":1668},[103,87627,51775],{"class":113},[103,87629,51790],{"class":51290},[103,87631,51297],{"class":113},[103,87633,87634],{"class":105,"line":1682},[103,87635,2389],{"emptyLinePlaceholder":30},[103,87637,87638,87640,87642],{"class":105,"line":1687},[103,87639,51775],{"class":113},[103,87641,50625],{"class":51290},[103,87643,51297],{"class":113},[14,87645,87646],{},[1451,87647],{"alt":24,"src":87648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[57,87650,87651],{"start":1183},[60,87652,87342],{},[14,87654,87655],{},[1451,87656],{"alt":24,"src":87657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87659,87660],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87662,39179],{},[14,87664,87665],{},"这个是简易版的递归函数深拷贝",[14,87667,87668],{},"一定要注意先数组再对象，因为万物皆可对象",[94,87670,87672],{"className":50623,"code":87671,"language":50625,"meta":24,"style":24},"\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",[100,87673,87674,87684,87698,87702,87710,87724,87744,87756,87764,87768,87776,87784,87794,87803,87811,87827,87831,87839,87843,87847,87859,87864,87883,87899,87904,87909,87914,87929,87934,87939,87948,87956,87973,87981,87987,87995,88000,88005,88014,88018,88022,88026,88037,88046,88056,88070,88080,88088,88096,88104,88108],{"__ignoreMap":24},[103,87675,87676,87678,87680,87682],{"class":105,"line":106},[103,87677,51287],{"class":113},[103,87679,51291],{"class":51290},[103,87681,51294],{"class":1952},[103,87683,51297],{"class":113},[103,87685,87686,87688,87690,87692,87694,87696],{"class":105,"line":25},[103,87687,1023],{"class":113},[103,87689,50625],{"class":51290},[103,87691,51306],{"class":1952},[103,87693,159],{"class":113},[103,87695,51311],{"class":218},[103,87697,51297],{"class":113},[103,87699,87700],{"class":105,"line":1168},[103,87701,2389],{"emptyLinePlaceholder":30},[103,87703,87704,87706,87708],{"class":105,"line":1183},[103,87705,1023],{"class":113},[103,87707,51324],{"class":51290},[103,87709,51297],{"class":113},[103,87711,87712,87714,87716,87718,87720,87722],{"class":105,"line":1189},[103,87713,52134],{"class":113},[103,87715,51334],{"class":51290},[103,87717,51337],{"class":1952},[103,87719,159],{"class":113},[103,87721,51342],{"class":218},[103,87723,51297],{"class":113},[103,87725,87726,87728,87730,87732,87734,87736,87738,87740,87742],{"class":105,"line":1203},[103,87727,52134],{"class":113},[103,87729,51334],{"class":51290},[103,87731,14910],{"class":1952},[103,87733,159],{"class":113},[103,87735,51381],{"class":218},[103,87737,51361],{"class":1952},[103,87739,159],{"class":113},[103,87741,51388],{"class":218},[103,87743,51297],{"class":113},[103,87745,87746,87748,87750,87752,87754],{"class":105,"line":1209},[103,87747,52134],{"class":113},[103,87749,51397],{"class":51290},[103,87751,51400],{"class":113},[103,87753,51397],{"class":51290},[103,87755,51297],{"class":113},[103,87757,87758,87760,87762],{"class":105,"line":1300},[103,87759,51775],{"class":113},[103,87761,51324],{"class":51290},[103,87763,51297],{"class":113},[103,87765,87766],{"class":105,"line":1306},[103,87767,2389],{"emptyLinePlaceholder":30},[103,87769,87770,87772,87774],{"class":105,"line":1318},[103,87771,1023],{"class":113},[103,87773,51790],{"class":51290},[103,87775,51297],{"class":113},[103,87777,87778,87780,87782],{"class":105,"line":1601},[103,87779,52134],{"class":113},[103,87781,51803],{"class":51290},[103,87783,51297],{"class":113},[103,87785,87786,87788,87790,87792],{"class":105,"line":1606},[103,87787,11211],{"class":109},[103,87789,69961],{"class":162},[103,87791,13554],{"class":109},[103,87793,15562],{"class":113},[103,87795,87796,87798,87801],{"class":105,"line":1612},[103,87797,71606],{"class":113},[103,87799,87800],{"class":218},"'pink'",[103,87802,31456],{"class":113},[103,87804,87805,87807,87809],{"class":105,"line":1617},[103,87806,71616],{"class":113},[103,87808,763],{"class":162},[103,87810,31456],{"class":113},[103,87812,87813,87816,87819,87821,87824],{"class":105,"line":1631},[103,87814,87815],{"class":113},"      hobby: [",[103,87817,87818],{"class":218},"'乒乓球'",[103,87820,12425],{"class":113},[103,87822,87823],{"class":218},"'足球'",[103,87825,87826],{"class":113},"],\n",[103,87828,87829],{"class":105,"line":1636},[103,87830,77862],{"class":113},[103,87832,87833,87836],{"class":105,"line":1642},[103,87834,87835],{"class":113},"        baby: ",[103,87837,87838],{"class":218},"'小pink'\n",[103,87840,87841],{"class":105,"line":1663},[103,87842,52388],{"class":113},[103,87844,87845],{"class":105,"line":1668},[103,87846,2176],{"class":113},[103,87848,87849,87851,87854,87856],{"class":105,"line":1682},[103,87850,11211],{"class":109},[103,87852,87853],{"class":162}," o",[103,87855,13554],{"class":109},[103,87857,87858],{"class":113}," {}\n",[103,87860,87861],{"class":105,"line":1687},[103,87862,87863],{"class":172},"    \u002F\u002F 拷贝函数\n",[103,87865,87866,87868,87871,87873,87876,87878,87881],{"class":105,"line":1716},[103,87867,70074],{"class":109},[103,87869,87870],{"class":1952}," deepCopy",[103,87872,114],{"class":113},[103,87874,87875],{"class":5206},"newObj",[103,87877,12425],{"class":113},[103,87879,87880],{"class":5206},"oldObj",[103,87882,12432],{"class":113},[103,87884,87885,87887,87889,87891,87894,87896],{"class":105,"line":1721},[103,87886,52274],{"class":109},[103,87888,1647],{"class":113},[103,87890,51837],{"class":109},[103,87892,87893],{"class":113}," k ",[103,87895,26033],{"class":109},[103,87897,87898],{"class":113}," oldObj) {\n",[103,87900,87901],{"class":105,"line":1738},[103,87902,87903],{"class":172},"        \u002F\u002F 处理数组的问题\n",[103,87905,87906],{"class":105,"line":1743},[103,87907,87908],{"class":172},"        \u002F\u002F 判断是否属于数组\n",[103,87910,87911],{"class":105,"line":1748},[103,87912,87913],{"class":172},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[103,87915,87916,87918,87921,87924,87927],{"class":105,"line":1753},[103,87917,2486],{"class":109},[103,87919,87920],{"class":113}," (oldObj[k] ",[103,87922,87923],{"class":109},"instanceof",[103,87925,87926],{"class":1952}," Array",[103,87928,12432],{"class":113},[103,87930,87931],{"class":105,"line":1767},[103,87932,87933],{"class":172},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[103,87935,87936],{"class":105,"line":1772},[103,87937,87938],{"class":172},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[103,87940,87941,87944,87946],{"class":105,"line":2566},[103,87942,87943],{"class":113},"          newObj[k] ",[103,87945,159],{"class":109},[103,87947,51828],{"class":113},[103,87949,87950,87953],{"class":105,"line":2580},[103,87951,87952],{"class":1952},"          deepCopy",[103,87954,87955],{"class":113},"(newObj[k], oldObj[k])\n",[103,87957,87958,87960,87962,87964,87966,87968,87971],{"class":105,"line":2588},[103,87959,80070],{"class":113},[103,87961,1690],{"class":109},[103,87963,1693],{"class":109},[103,87965,87920],{"class":113},[103,87967,87923],{"class":109},[103,87969,87970],{"class":1952}," Object",[103,87972,12432],{"class":113},[103,87974,87975,87977,87979],{"class":105,"line":2593},[103,87976,87943],{"class":113},[103,87978,159],{"class":109},[103,87980,87858],{"class":113},[103,87982,87983,87985],{"class":105,"line":2599},[103,87984,87952],{"class":1952},[103,87986,87955],{"class":113},[103,87988,87989,87991,87993],{"class":105,"line":2605},[103,87990,80070],{"class":113},[103,87992,1690],{"class":109},[103,87994,15562],{"class":113},[103,87996,87997],{"class":105,"line":2610},[103,87998,87999],{"class":172},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[103,88001,88002],{"class":105,"line":7938},[103,88003,88004],{"class":172},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[103,88006,88007,88009,88011],{"class":105,"line":7962},[103,88008,87943],{"class":113},[103,88010,159],{"class":109},[103,88012,88013],{"class":113}," oldObj[k]\n",[103,88015,88016],{"class":105,"line":7967},[103,88017,2518],{"class":113},[103,88019,88020],{"class":105,"line":7973},[103,88021,52388],{"class":113},[103,88023,88024],{"class":105,"line":8000},[103,88025,2176],{"class":113},[103,88027,88028,88031,88034],{"class":105,"line":8005},[103,88029,88030],{"class":1952},"    deepCopy",[103,88032,88033],{"class":113},"(o, obj) ",[103,88035,88036],{"class":172},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[103,88038,88039,88041,88043],{"class":105,"line":8011},[103,88040,73743],{"class":113},[103,88042,58237],{"class":1952},[103,88044,88045],{"class":113},"(o)\n",[103,88047,88048,88051,88053],{"class":105,"line":8023},[103,88049,88050],{"class":113},"    o.age ",[103,88052,159],{"class":109},[103,88054,88055],{"class":162}," 20\n",[103,88057,88058,88061,88063,88065,88067],{"class":105,"line":8035},[103,88059,88060],{"class":113},"    o.hobby[",[103,88062,305],{"class":162},[103,88064,4432],{"class":113},[103,88066,159],{"class":109},[103,88068,88069],{"class":218}," '篮球'\n",[103,88071,88072,88075,88077],{"class":105,"line":8047},[103,88073,88074],{"class":113},"    o.family ",[103,88076,159],{"class":109},[103,88078,88079],{"class":218}," '老pink'\n",[103,88081,88082,88084,88086],{"class":105,"line":9706},[103,88083,73743],{"class":113},[103,88085,58237],{"class":1952},[103,88087,70026],{"class":113},[103,88089,88090,88092,88094],{"class":105,"line":9731},[103,88091,52407],{"class":113},[103,88093,51803],{"class":51290},[103,88095,51297],{"class":113},[103,88097,88098,88100,88102],{"class":105,"line":9754},[103,88099,51775],{"class":113},[103,88101,51790],{"class":51290},[103,88103,51297],{"class":113},[103,88105,88106],{"class":105,"line":9778},[103,88107,2389],{"emptyLinePlaceholder":30},[103,88109,88110,88112,88114],{"class":105,"line":9783},[103,88111,51775],{"class":113},[103,88113,50625],{"class":51290},[103,88115,51297],{"class":113},[14,88117,88118],{},[1451,88119],{"alt":24,"src":88120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21988,88122,88124,88125],{"id":88123},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[263,88126,88127],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88129,88130],{},[17,88131,88132],{"href":88132,"rel":88133},"https:\u002F\u002Fwww.lodashjs.com\u002F",[21],[14,88135,88136],{},"lodash里边的方法都要加上一个下划线_",[14,88138,88139],{},"_.cloneDeep()",[94,88141,88143],{"className":50623,"code":88142,"language":50625,"meta":24,"style":24},"\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",[100,88144,88145,88155,88169,88173,88181,88195,88215,88227,88235,88239,88247,88252,88271,88279,88289,88297,88305,88317,88321,88327,88331,88335,88351,88359,88368,88376,88384,88392,88396],{"__ignoreMap":24},[103,88146,88147,88149,88151,88153],{"class":105,"line":106},[103,88148,51287],{"class":113},[103,88150,51291],{"class":51290},[103,88152,51294],{"class":1952},[103,88154,51297],{"class":113},[103,88156,88157,88159,88161,88163,88165,88167],{"class":105,"line":25},[103,88158,1023],{"class":113},[103,88160,50625],{"class":51290},[103,88162,51306],{"class":1952},[103,88164,159],{"class":113},[103,88166,51311],{"class":218},[103,88168,51297],{"class":113},[103,88170,88171],{"class":105,"line":1168},[103,88172,2389],{"emptyLinePlaceholder":30},[103,88174,88175,88177,88179],{"class":105,"line":1183},[103,88176,1023],{"class":113},[103,88178,51324],{"class":51290},[103,88180,51297],{"class":113},[103,88182,88183,88185,88187,88189,88191,88193],{"class":105,"line":1189},[103,88184,52134],{"class":113},[103,88186,51334],{"class":51290},[103,88188,51337],{"class":1952},[103,88190,159],{"class":113},[103,88192,51342],{"class":218},[103,88194,51297],{"class":113},[103,88196,88197,88199,88201,88203,88205,88207,88209,88211,88213],{"class":105,"line":1203},[103,88198,52134],{"class":113},[103,88200,51334],{"class":51290},[103,88202,14910],{"class":1952},[103,88204,159],{"class":113},[103,88206,51381],{"class":218},[103,88208,51361],{"class":1952},[103,88210,159],{"class":113},[103,88212,51388],{"class":218},[103,88214,51297],{"class":113},[103,88216,88217,88219,88221,88223,88225],{"class":105,"line":1209},[103,88218,52134],{"class":113},[103,88220,51397],{"class":51290},[103,88222,51400],{"class":113},[103,88224,51397],{"class":51290},[103,88226,51297],{"class":113},[103,88228,88229,88231,88233],{"class":105,"line":1300},[103,88230,51775],{"class":113},[103,88232,51324],{"class":51290},[103,88234,51297],{"class":113},[103,88236,88237],{"class":105,"line":1306},[103,88238,2389],{"emptyLinePlaceholder":30},[103,88240,88241,88243,88245],{"class":105,"line":1318},[103,88242,1023],{"class":113},[103,88244,51790],{"class":51290},[103,88246,51297],{"class":113},[103,88248,88249],{"class":105,"line":1601},[103,88250,88251],{"class":172},"  \u003C!-- 先引用这个库 -->\n",[103,88253,88254,88256,88258,88260,88262,88265,88267,88269],{"class":105,"line":1606},[103,88255,52134],{"class":113},[103,88257,51803],{"class":51290},[103,88259,55229],{"class":1952},[103,88261,159],{"class":113},[103,88263,88264],{"class":218},"\"lodash.min.js\"",[103,88266,55304],{"class":113},[103,88268,51803],{"class":51290},[103,88270,51297],{"class":113},[103,88272,88273,88275,88277],{"class":105,"line":1612},[103,88274,52134],{"class":113},[103,88276,51803],{"class":51290},[103,88278,51297],{"class":113},[103,88280,88281,88283,88285,88287],{"class":105,"line":1617},[103,88282,11211],{"class":109},[103,88284,69961],{"class":162},[103,88286,13554],{"class":109},[103,88288,15562],{"class":113},[103,88290,88291,88293,88295],{"class":105,"line":1631},[103,88292,71606],{"class":113},[103,88294,87800],{"class":218},[103,88296,31456],{"class":113},[103,88298,88299,88301,88303],{"class":105,"line":1636},[103,88300,71616],{"class":113},[103,88302,763],{"class":162},[103,88304,31456],{"class":113},[103,88306,88307,88309,88311,88313,88315],{"class":105,"line":1642},[103,88308,87815],{"class":113},[103,88310,87818],{"class":218},[103,88312,12425],{"class":113},[103,88314,87823],{"class":218},[103,88316,87826],{"class":113},[103,88318,88319],{"class":105,"line":1663},[103,88320,77862],{"class":113},[103,88322,88323,88325],{"class":105,"line":1668},[103,88324,87835],{"class":113},[103,88326,87838],{"class":218},[103,88328,88329],{"class":105,"line":1682},[103,88330,52388],{"class":113},[103,88332,88333],{"class":105,"line":1687},[103,88334,2176],{"class":113},[103,88336,88337,88339,88341,88343,88346,88349],{"class":105,"line":1716},[103,88338,11211],{"class":109},[103,88340,87853],{"class":162},[103,88342,13554],{"class":109},[103,88344,88345],{"class":113}," _.",[103,88347,88348],{"class":1952},"cloneDeep",[103,88350,70026],{"class":113},[103,88352,88353,88355,88357],{"class":105,"line":1721},[103,88354,73743],{"class":113},[103,88356,58237],{"class":1952},[103,88358,88045],{"class":113},[103,88360,88361,88364,88366],{"class":105,"line":1738},[103,88362,88363],{"class":113},"    o.family.baby ",[103,88365,159],{"class":109},[103,88367,88079],{"class":218},[103,88369,88370,88372,88374],{"class":105,"line":1743},[103,88371,73743],{"class":113},[103,88373,58237],{"class":1952},[103,88375,70026],{"class":113},[103,88377,88378,88380,88382],{"class":105,"line":1748},[103,88379,52407],{"class":113},[103,88381,51803],{"class":51290},[103,88383,51297],{"class":113},[103,88385,88386,88388,88390],{"class":105,"line":1753},[103,88387,51775],{"class":113},[103,88389,51790],{"class":51290},[103,88391,51297],{"class":113},[103,88393,88394],{"class":105,"line":1767},[103,88395,2389],{"emptyLinePlaceholder":30},[103,88397,88398,88400,88402],{"class":105,"line":1772},[103,88399,51775],{"class":113},[103,88401,50625],{"class":51290},[103,88403,51297],{"class":113},[14,88405,88406],{},[1451,88407],{"alt":24,"src":88408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21988,88410,88412],{"id":88411},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[94,88414,88416],{"className":50623,"code":88415,"language":50625,"meta":24,"style":24},"\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",[100,88417,88418,88428,88442,88446,88454,88468,88488,88500,88508,88512,88520,88528,88538,88546,88554,88566,88570,88576,88580,88584,88589,88594,88599,88625,88633,88642,88650,88658,88666,88670],{"__ignoreMap":24},[103,88419,88420,88422,88424,88426],{"class":105,"line":106},[103,88421,51287],{"class":113},[103,88423,51291],{"class":51290},[103,88425,51294],{"class":1952},[103,88427,51297],{"class":113},[103,88429,88430,88432,88434,88436,88438,88440],{"class":105,"line":25},[103,88431,1023],{"class":113},[103,88433,50625],{"class":51290},[103,88435,51306],{"class":1952},[103,88437,159],{"class":113},[103,88439,51311],{"class":218},[103,88441,51297],{"class":113},[103,88443,88444],{"class":105,"line":1168},[103,88445,2389],{"emptyLinePlaceholder":30},[103,88447,88448,88450,88452],{"class":105,"line":1183},[103,88449,1023],{"class":113},[103,88451,51324],{"class":51290},[103,88453,51297],{"class":113},[103,88455,88456,88458,88460,88462,88464,88466],{"class":105,"line":1189},[103,88457,52134],{"class":113},[103,88459,51334],{"class":51290},[103,88461,51337],{"class":1952},[103,88463,159],{"class":113},[103,88465,51342],{"class":218},[103,88467,51297],{"class":113},[103,88469,88470,88472,88474,88476,88478,88480,88482,88484,88486],{"class":105,"line":1203},[103,88471,52134],{"class":113},[103,88473,51334],{"class":51290},[103,88475,14910],{"class":1952},[103,88477,159],{"class":113},[103,88479,51381],{"class":218},[103,88481,51361],{"class":1952},[103,88483,159],{"class":113},[103,88485,51388],{"class":218},[103,88487,51297],{"class":113},[103,88489,88490,88492,88494,88496,88498],{"class":105,"line":1209},[103,88491,52134],{"class":113},[103,88493,51397],{"class":51290},[103,88495,51400],{"class":113},[103,88497,51397],{"class":51290},[103,88499,51297],{"class":113},[103,88501,88502,88504,88506],{"class":105,"line":1300},[103,88503,51775],{"class":113},[103,88505,51324],{"class":51290},[103,88507,51297],{"class":113},[103,88509,88510],{"class":105,"line":1306},[103,88511,2389],{"emptyLinePlaceholder":30},[103,88513,88514,88516,88518],{"class":105,"line":1318},[103,88515,1023],{"class":113},[103,88517,51790],{"class":51290},[103,88519,51297],{"class":113},[103,88521,88522,88524,88526],{"class":105,"line":1601},[103,88523,52134],{"class":113},[103,88525,51803],{"class":51290},[103,88527,51297],{"class":113},[103,88529,88530,88532,88534,88536],{"class":105,"line":1606},[103,88531,11211],{"class":109},[103,88533,69961],{"class":162},[103,88535,13554],{"class":109},[103,88537,15562],{"class":113},[103,88539,88540,88542,88544],{"class":105,"line":1612},[103,88541,71606],{"class":113},[103,88543,87800],{"class":218},[103,88545,31456],{"class":113},[103,88547,88548,88550,88552],{"class":105,"line":1617},[103,88549,71616],{"class":113},[103,88551,763],{"class":162},[103,88553,31456],{"class":113},[103,88555,88556,88558,88560,88562,88564],{"class":105,"line":1631},[103,88557,87815],{"class":113},[103,88559,87818],{"class":218},[103,88561,12425],{"class":113},[103,88563,87823],{"class":218},[103,88565,87826],{"class":113},[103,88567,88568],{"class":105,"line":1636},[103,88569,77862],{"class":113},[103,88571,88572,88574],{"class":105,"line":1642},[103,88573,87835],{"class":113},[103,88575,87838],{"class":218},[103,88577,88578],{"class":105,"line":1663},[103,88579,52388],{"class":113},[103,88581,88582],{"class":105,"line":1668},[103,88583,2176],{"class":113},[103,88585,88586],{"class":105,"line":1682},[103,88587,88588],{"class":172},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[103,88590,88591],{"class":105,"line":1687},[103,88592,88593],{"class":172},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[103,88595,88596],{"class":105,"line":1716},[103,88597,88598],{"class":172},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[103,88600,88601,88603,88605,88607,88610,88612,88615,88617,88619,88621,88623],{"class":105,"line":1721},[103,88602,11211],{"class":109},[103,88604,87853],{"class":162},[103,88606,13554],{"class":109},[103,88608,88609],{"class":162}," JSON",[103,88611,671],{"class":113},[103,88613,88614],{"class":1952},"parse",[103,88616,114],{"class":113},[103,88618,71654],{"class":162},[103,88620,671],{"class":113},[103,88622,71659],{"class":1952},[103,88624,71662],{"class":113},[103,88626,88627,88629,88631],{"class":105,"line":1738},[103,88628,73743],{"class":113},[103,88630,58237],{"class":1952},[103,88632,88045],{"class":113},[103,88634,88635,88637,88639],{"class":105,"line":1743},[103,88636,88363],{"class":113},[103,88638,159],{"class":109},[103,88640,88641],{"class":218}," '123'\n",[103,88643,88644,88646,88648],{"class":105,"line":1748},[103,88645,73743],{"class":113},[103,88647,58237],{"class":1952},[103,88649,70026],{"class":113},[103,88651,88652,88654,88656],{"class":105,"line":1753},[103,88653,52407],{"class":113},[103,88655,51803],{"class":51290},[103,88657,51297],{"class":113},[103,88659,88660,88662,88664],{"class":105,"line":1767},[103,88661,51775],{"class":113},[103,88663,51790],{"class":51290},[103,88665,51297],{"class":113},[103,88667,88668],{"class":105,"line":1772},[103,88669,2389],{"emptyLinePlaceholder":30},[103,88671,88672,88674,88676],{"class":105,"line":2566},[103,88673,51775],{"class":113},[103,88675,50625],{"class":51290},[103,88677,51297],{"class":113},[14,88679,88680],{},[1451,88681],{"alt":24,"src":88682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[45,88684,88686],{"id":88685},"_415-异常处理","4.15 异常处理",[57,88688,88689],{},[60,88690,88691],{},"throw抛异常",[14,88693,88694],{},[1451,88695],{"alt":24,"src":88696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[57,88698,88699],{"start":25},[60,88700,88701],{},"try\u002Fcatch 捕获错误信息",[14,88703,88704],{},[1451,88705],{"alt":24,"src":88706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[94,88708,88710],{"className":50623,"code":88709,"language":50625,"meta":24,"style":24},"\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",[100,88711,88712,88722,88736,88740,88748,88762,88782,88794,88802,88806,88814,88826,88834,88843,88850,88855,88874,88883,88894,88899,88909,88914,88919,88924,88941,88945,88950,88957,88969,88973,88985,88989,88993,88998,89003,89010,89018,89026,89030],{"__ignoreMap":24},[103,88713,88714,88716,88718,88720],{"class":105,"line":106},[103,88715,51287],{"class":113},[103,88717,51291],{"class":51290},[103,88719,51294],{"class":1952},[103,88721,51297],{"class":113},[103,88723,88724,88726,88728,88730,88732,88734],{"class":105,"line":25},[103,88725,1023],{"class":113},[103,88727,50625],{"class":51290},[103,88729,51306],{"class":1952},[103,88731,159],{"class":113},[103,88733,51311],{"class":218},[103,88735,51297],{"class":113},[103,88737,88738],{"class":105,"line":1168},[103,88739,2389],{"emptyLinePlaceholder":30},[103,88741,88742,88744,88746],{"class":105,"line":1183},[103,88743,1023],{"class":113},[103,88745,51324],{"class":51290},[103,88747,51297],{"class":113},[103,88749,88750,88752,88754,88756,88758,88760],{"class":105,"line":1189},[103,88751,52134],{"class":113},[103,88753,51334],{"class":51290},[103,88755,51337],{"class":1952},[103,88757,159],{"class":113},[103,88759,51342],{"class":218},[103,88761,51297],{"class":113},[103,88763,88764,88766,88768,88770,88772,88774,88776,88778,88780],{"class":105,"line":1203},[103,88765,52134],{"class":113},[103,88767,51334],{"class":51290},[103,88769,14910],{"class":1952},[103,88771,159],{"class":113},[103,88773,51381],{"class":218},[103,88775,51361],{"class":1952},[103,88777,159],{"class":113},[103,88779,51388],{"class":218},[103,88781,51297],{"class":113},[103,88783,88784,88786,88788,88790,88792],{"class":105,"line":1209},[103,88785,52134],{"class":113},[103,88787,51397],{"class":51290},[103,88789,51400],{"class":113},[103,88791,51397],{"class":51290},[103,88793,51297],{"class":113},[103,88795,88796,88798,88800],{"class":105,"line":1300},[103,88797,51775],{"class":113},[103,88799,51324],{"class":51290},[103,88801,51297],{"class":113},[103,88803,88804],{"class":105,"line":1306},[103,88805,2389],{"emptyLinePlaceholder":30},[103,88807,88808,88810,88812],{"class":105,"line":1318},[103,88809,1023],{"class":113},[103,88811,51790],{"class":51290},[103,88813,51297],{"class":113},[103,88815,88816,88818,88820,88822,88824],{"class":105,"line":1601},[103,88817,52134],{"class":113},[103,88819,14],{"class":51290},[103,88821,53484],{"class":113},[103,88823,14],{"class":51290},[103,88825,51297],{"class":113},[103,88827,88828,88830,88832],{"class":105,"line":1606},[103,88829,52134],{"class":113},[103,88831,51803],{"class":51290},[103,88833,51297],{"class":113},[103,88835,88836,88838,88841],{"class":105,"line":1612},[103,88837,70074],{"class":109},[103,88839,88840],{"class":1952}," fn",[103,88842,10843],{"class":113},[103,88844,88845,88848],{"class":105,"line":1617},[103,88846,88847],{"class":109},"      try",[103,88849,15562],{"class":113},[103,88851,88852],{"class":105,"line":1631},[103,88853,88854],{"class":172},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[103,88856,88857,88859,88861,88863,88865,88867,88869,88872],{"class":105,"line":1636},[103,88858,61260],{"class":109},[103,88860,6815],{"class":162},[103,88862,13554],{"class":109},[103,88864,54386],{"class":113},[103,88866,54389],{"class":1952},[103,88868,114],{"class":113},[103,88870,88871],{"class":218},"'.p'",[103,88873,120],{"class":113},[103,88875,88876,88879,88881],{"class":105,"line":1642},[103,88877,88878],{"class":113},"        p.style.color ",[103,88880,159],{"class":109},[103,88882,67041],{"class":218},[103,88884,88885,88888,88891],{"class":105,"line":1663},[103,88886,88887],{"class":113},"      } ",[103,88889,88890],{"class":109},"catch",[103,88892,88893],{"class":113}," (err) {\n",[103,88895,88896],{"class":105,"line":1668},[103,88897,88898],{"class":172},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[103,88900,88901,88904,88906],{"class":105,"line":1682},[103,88902,88903],{"class":113},"        console.",[103,88905,58237],{"class":1952},[103,88907,88908],{"class":113},"(err.message)\n",[103,88910,88911],{"class":105,"line":1687},[103,88912,88913],{"class":172},"        \u002F\u002F 想要中断程序，需要加return\n",[103,88915,88916],{"class":105,"line":1716},[103,88917,88918],{"class":172},"        \u002F\u002F return\n",[103,88920,88921],{"class":105,"line":1721},[103,88922,88923],{"class":172},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[103,88925,88926,88929,88931,88934,88936,88939],{"class":105,"line":1738},[103,88927,88928],{"class":109},"        throw",[103,88930,11568],{"class":109},[103,88932,88933],{"class":1952}," Error",[103,88935,114],{"class":113},[103,88937,88938],{"class":218},"'你看看，选择器错误了吧'",[103,88940,120],{"class":113},[103,88942,88943],{"class":105,"line":1743},[103,88944,52388],{"class":113},[103,88946,88947],{"class":105,"line":1748},[103,88948,88949],{"class":172},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[103,88951,88952,88955],{"class":105,"line":1753},[103,88953,88954],{"class":109},"      finally",[103,88956,15562],{"class":113},[103,88958,88959,88962,88964,88967],{"class":105,"line":1767},[103,88960,88961],{"class":1952},"        alert",[103,88963,114],{"class":113},[103,88965,88966],{"class":218},"'弹出对话框'",[103,88968,120],{"class":113},[103,88970,88971],{"class":105,"line":1772},[103,88972,52388],{"class":113},[103,88974,88975,88977,88979,88981,88983],{"class":105,"line":2566},[103,88976,58234],{"class":113},[103,88978,58237],{"class":1952},[103,88980,114],{"class":113},[103,88982,585],{"class":162},[103,88984,120],{"class":113},[103,88986,88987],{"class":105,"line":2580},[103,88988,2389],{"emptyLinePlaceholder":30},[103,88990,88991],{"class":105,"line":2588},[103,88992,2176],{"class":113},[103,88994,88995],{"class":105,"line":2593},[103,88996,88997],{"class":172},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[103,88999,89000],{"class":105,"line":2599},[103,89001,89002],{"class":172},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[103,89004,89005,89008],{"class":105,"line":2605},[103,89006,89007],{"class":1952},"    fn",[103,89009,1965],{"class":113},[103,89011,89012,89014,89016],{"class":105,"line":2610},[103,89013,52407],{"class":113},[103,89015,51803],{"class":51290},[103,89017,51297],{"class":113},[103,89019,89020,89022,89024],{"class":105,"line":7938},[103,89021,51775],{"class":113},[103,89023,51790],{"class":51290},[103,89025,51297],{"class":113},[103,89027,89028],{"class":105,"line":7962},[103,89029,2389],{"emptyLinePlaceholder":30},[103,89031,89032,89034,89036],{"class":105,"line":7967},[103,89033,51775],{"class":113},[103,89035,50625],{"class":51290},[103,89037,51297],{"class":113},[14,89039,89040],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[57,89042,89043],{"start":1168},[60,89044,89045],{},"debugger",[14,89047,89048],{},[1451,89049],{"alt":24,"src":89050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89052,89053],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[45,89055,89057],{"id":89056},"_416-处理this","4.16 处理this",[74,89059,89061],{"id":89060},"_4161-this的指向","4.16.1 this的指向",[57,89063,89064],{},[60,89065,89066],{},"普通函数的this",[14,89068,89069],{},[1451,89070],{"alt":24,"src":89071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[57,89073,89074],{"start":25},[60,89075,89076],{},"箭头函数的this",[14,89078,89079],{},[1451,89080],{"alt":24,"src":89081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89083,89084],{},[1451,89085],{"alt":24,"src":89086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89088,89089],{},[1451,89090],{"alt":24,"src":89091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[74,89093,89095],{"id":89094},"_4162-this的改变","4.16.2 this的改变",[14,89097,89098],{},"call() apply() bind()",[57,89100,89101],{},[60,89102,89103],{},"call()",[14,89105,89106],{},[1451,89107],{"alt":24,"src":89108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89110,89111],{},"两个作用：①调用函数；②改变this指向",[94,89113,89115],{"className":53057,"code":89114,"language":53059,"meta":24,"style":24},"\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",[100,89116,89117,89125,89133,89137,89142,89146,89151,89156,89161,89165,89170,89178],{"__ignoreMap":24},[103,89118,89119,89121,89123],{"class":105,"line":106},[103,89120,1023],{"class":113},[103,89122,51790],{"class":51290},[103,89124,51297],{"class":113},[103,89126,89127,89129,89131],{"class":105,"line":25},[103,89128,52134],{"class":113},[103,89130,51803],{"class":51290},[103,89132,51297],{"class":113},[103,89134,89135],{"class":105,"line":1168},[103,89136,71513],{"class":113},[103,89138,89139],{"class":105,"line":1183},[103,89140,89141],{"class":113},"      uname: 'pink'\n",[103,89143,89144],{"class":105,"line":1189},[103,89145,2176],{"class":113},[103,89147,89148],{"class":105,"line":1203},[103,89149,89150],{"class":113},"    function fn(x, y) {\n",[103,89152,89153],{"class":105,"line":1209},[103,89154,89155],{"class":113},"      console.log(this)  \u002F\u002Fwindow\n",[103,89157,89158],{"class":105,"line":1300},[103,89159,89160],{"class":113},"      console.log(x + y)\n",[103,89162,89163],{"class":105,"line":1306},[103,89164,2176],{"class":113},[103,89166,89167],{"class":105,"line":1318},[103,89168,89169],{"class":113},"    fn.call(obj, 1, 2)\n",[103,89171,89172,89174,89176],{"class":105,"line":1601},[103,89173,52407],{"class":113},[103,89175,51803],{"class":51290},[103,89177,51297],{"class":113},[103,89179,89180,89182,89184],{"class":105,"line":1606},[103,89181,51775],{"class":113},[103,89183,51790],{"class":51290},[103,89185,51297],{"class":113},[14,89187,89188],{},[1451,89189],{"alt":24,"src":89190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[57,89192,89193],{"start":25},[60,89194,89195],{},"apply()",[14,89197,89198],{},[1451,89199],{"alt":24,"src":89200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89202,89111],{},[14,89204,89205],{},"call传递的是普通参数，而apply必须传递的是数组",[94,89207,89209],{"className":50623,"code":89208,"language":50625,"meta":24,"style":24},"\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",[100,89210,89211,89221,89235,89239,89247,89261,89281,89293,89301,89305,89313,89321,89331,89338,89342,89347,89363,89375,89389,89393,89398,89417,89422,89426,89431,89436,89444,89449,89471,89476,89492,89508,89520,89524,89529,89548,89556,89564,89568],{"__ignoreMap":24},[103,89212,89213,89215,89217,89219],{"class":105,"line":106},[103,89214,51287],{"class":113},[103,89216,51291],{"class":51290},[103,89218,51294],{"class":1952},[103,89220,51297],{"class":113},[103,89222,89223,89225,89227,89229,89231,89233],{"class":105,"line":25},[103,89224,1023],{"class":113},[103,89226,50625],{"class":51290},[103,89228,51306],{"class":1952},[103,89230,159],{"class":113},[103,89232,51311],{"class":218},[103,89234,51297],{"class":113},[103,89236,89237],{"class":105,"line":1168},[103,89238,2389],{"emptyLinePlaceholder":30},[103,89240,89241,89243,89245],{"class":105,"line":1183},[103,89242,1023],{"class":113},[103,89244,51324],{"class":51290},[103,89246,51297],{"class":113},[103,89248,89249,89251,89253,89255,89257,89259],{"class":105,"line":1189},[103,89250,52134],{"class":113},[103,89252,51334],{"class":51290},[103,89254,51337],{"class":1952},[103,89256,159],{"class":113},[103,89258,51342],{"class":218},[103,89260,51297],{"class":113},[103,89262,89263,89265,89267,89269,89271,89273,89275,89277,89279],{"class":105,"line":1203},[103,89264,52134],{"class":113},[103,89266,51334],{"class":51290},[103,89268,14910],{"class":1952},[103,89270,159],{"class":113},[103,89272,51381],{"class":218},[103,89274,51361],{"class":1952},[103,89276,159],{"class":113},[103,89278,51388],{"class":218},[103,89280,51297],{"class":113},[103,89282,89283,89285,89287,89289,89291],{"class":105,"line":1209},[103,89284,52134],{"class":113},[103,89286,51397],{"class":51290},[103,89288,51400],{"class":113},[103,89290,51397],{"class":51290},[103,89292,51297],{"class":113},[103,89294,89295,89297,89299],{"class":105,"line":1300},[103,89296,51775],{"class":113},[103,89298,51324],{"class":51290},[103,89300,51297],{"class":113},[103,89302,89303],{"class":105,"line":1306},[103,89304,2389],{"emptyLinePlaceholder":30},[103,89306,89307,89309,89311],{"class":105,"line":1318},[103,89308,1023],{"class":113},[103,89310,51790],{"class":51290},[103,89312,51297],{"class":113},[103,89314,89315,89317,89319],{"class":105,"line":1601},[103,89316,52134],{"class":113},[103,89318,51803],{"class":51290},[103,89320,51297],{"class":113},[103,89322,89323,89325,89327,89329],{"class":105,"line":1606},[103,89324,11211],{"class":109},[103,89326,69961],{"class":162},[103,89328,13554],{"class":109},[103,89330,15562],{"class":113},[103,89332,89333,89335],{"class":105,"line":1612},[103,89334,71616],{"class":113},[103,89336,89337],{"class":162},"18\n",[103,89339,89340],{"class":105,"line":1617},[103,89341,2176],{"class":113},[103,89343,89344],{"class":105,"line":1631},[103,89345,89346],{"class":172},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[103,89348,89349,89351,89353,89355,89357,89359,89361],{"class":105,"line":1636},[103,89350,70074],{"class":109},[103,89352,88840],{"class":1952},[103,89354,114],{"class":113},[103,89356,933],{"class":5206},[103,89358,12425],{"class":113},[103,89360,958],{"class":5206},[103,89362,12432],{"class":113},[103,89364,89365,89367,89369,89371,89373],{"class":105,"line":1642},[103,89366,58234],{"class":113},[103,89368,58237],{"class":1952},[103,89370,114],{"class":113},[103,89372,86983],{"class":162},[103,89374,120],{"class":113},[103,89376,89377,89379,89381,89384,89386],{"class":105,"line":1663},[103,89378,58234],{"class":113},[103,89380,58237],{"class":1952},[103,89382,89383],{"class":113},"(x ",[103,89385,594],{"class":109},[103,89387,89388],{"class":113}," y)\n",[103,89390,89391],{"class":105,"line":1668},[103,89392,2176],{"class":113},[103,89394,89395],{"class":105,"line":1682},[103,89396,89397],{"class":172},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[103,89399,89400,89403,89406,89409,89411,89413,89415],{"class":105,"line":1687},[103,89401,89402],{"class":113},"    fn.",[103,89404,89405],{"class":1952},"apply",[103,89407,89408],{"class":113},"(obj, [",[103,89410,331],{"class":162},[103,89412,12425],{"class":113},[103,89414,191],{"class":162},[103,89416,4646],{"class":113},[103,89418,89419],{"class":105,"line":1716},[103,89420,89421],{"class":172},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[103,89423,89424],{"class":105,"line":1721},[103,89425,2389],{"emptyLinePlaceholder":30},[103,89427,89428],{"class":105,"line":1738},[103,89429,89430],{"class":172},"    \u002F\u002F 使用场景：求数组最大值\n",[103,89432,89433],{"class":105,"line":1743},[103,89434,89435],{"class":172},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[103,89437,89438,89441],{"class":105,"line":1748},[103,89439,89440],{"class":172},"    \u002F\u002F console.log(max)",[103,89442,89443],{"class":172},"   \u002F\u002F3\n",[103,89445,89446],{"class":105,"line":1753},[103,89447,89448],{"class":172},"    \u002F\u002F 指向空或者Math都是可以的\n",[103,89450,89451,89453,89455,89457,89459,89461,89463,89465,89467,89469],{"class":105,"line":1767},[103,89452,11211],{"class":109},[103,89454,57685],{"class":162},[103,89456,13554],{"class":109},[103,89458,52216],{"class":113},[103,89460,424],{"class":162},[103,89462,12425],{"class":113},[103,89464,617],{"class":162},[103,89466,12425],{"class":113},[103,89468,648],{"class":162},[103,89470,33236],{"class":113},[103,89472,89473],{"class":105,"line":1772},[103,89474,89475],{"class":172},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[103,89477,89478,89480,89482,89484,89487,89489],{"class":105,"line":2566},[103,89479,11211],{"class":109},[103,89481,5941],{"class":162},[103,89483,13554],{"class":109},[103,89485,89486],{"class":113}," Math.max.",[103,89488,89405],{"class":1952},[103,89490,89491],{"class":113},"(Math, arr)\n",[103,89493,89494,89496,89499,89501,89504,89506],{"class":105,"line":2580},[103,89495,11211],{"class":109},[103,89497,89498],{"class":162}," min",[103,89500,13554],{"class":109},[103,89502,89503],{"class":113}," Math.min.",[103,89505,89405],{"class":1952},[103,89507,89491],{"class":113},[103,89509,89510,89512,89514,89517],{"class":105,"line":2588},[103,89511,73743],{"class":113},[103,89513,58237],{"class":1952},[103,89515,89516],{"class":113},"(max, min)     ",[103,89518,89519],{"class":172},"\u002F\u002F100,4\n",[103,89521,89522],{"class":105,"line":2593},[103,89523,2389],{"emptyLinePlaceholder":30},[103,89525,89526],{"class":105,"line":2599},[103,89527,89528],{"class":172},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[103,89530,89531,89533,89535,89538,89540,89542,89545],{"class":105,"line":2605},[103,89532,73743],{"class":113},[103,89534,58237],{"class":1952},[103,89536,89537],{"class":113},"(Max.",[103,89539,6005],{"class":1952},[103,89541,114],{"class":113},[103,89543,89544],{"class":109},"...",[103,89546,89547],{"class":113},"arr))\n",[103,89549,89550,89552,89554],{"class":105,"line":2610},[103,89551,52407],{"class":113},[103,89553,51803],{"class":51290},[103,89555,51297],{"class":113},[103,89557,89558,89560,89562],{"class":105,"line":7938},[103,89559,51775],{"class":113},[103,89561,51790],{"class":51290},[103,89563,51297],{"class":113},[103,89565,89566],{"class":105,"line":7962},[103,89567,2389],{"emptyLinePlaceholder":30},[103,89569,89570,89572,89574],{"class":105,"line":7967},[103,89571,51775],{"class":113},[103,89573,50625],{"class":51290},[103,89575,51297],{"class":113},[14,89577,89578],{},[1451,89579],{"alt":24,"src":89580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[57,89582,89583],{"start":1168},[60,89584,89585],{},"bind()",[14,89587,89588],{},[1451,89589],{"alt":24,"src":89590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89592,89593],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89595,89596],{},"bind的语法跟call很相似",[94,89598,89600],{"className":53057,"code":89599,"language":53059,"meta":24,"style":24},"\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",[100,89601,89602,89610,89618,89622,89627,89631,89635,89640,89644,89649,89654,89659,89664,89669,89674,89679,89683,89691],{"__ignoreMap":24},[103,89603,89604,89606,89608],{"class":105,"line":106},[103,89605,1023],{"class":113},[103,89607,51790],{"class":51290},[103,89609,51297],{"class":113},[103,89611,89612,89614,89616],{"class":105,"line":25},[103,89613,52134],{"class":113},[103,89615,51803],{"class":51290},[103,89617,51297],{"class":113},[103,89619,89620],{"class":105,"line":1168},[103,89621,71513],{"class":113},[103,89623,89624],{"class":105,"line":1183},[103,89625,89626],{"class":113},"      age: 18\n",[103,89628,89629],{"class":105,"line":1189},[103,89630,2176],{"class":113},[103,89632,89633],{"class":105,"line":1203},[103,89634,77133],{"class":113},[103,89636,89637],{"class":105,"line":1209},[103,89638,89639],{"class":113},"      console.log(this)\n",[103,89641,89642],{"class":105,"line":1300},[103,89643,2176],{"class":113},[103,89645,89646],{"class":105,"line":1306},[103,89647,89648],{"class":113},"    \u002F\u002F 1.bind 不会调用函数\n",[103,89650,89651],{"class":105,"line":1318},[103,89652,89653],{"class":113},"    \u002F\u002F 2.bind能改变this的指向\n",[103,89655,89656],{"class":105,"line":1601},[103,89657,89658],{"class":113},"    fn.bind()\n",[103,89660,89661],{"class":105,"line":1606},[103,89662,89663],{"class":113},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[103,89665,89666],{"class":105,"line":1612},[103,89667,89668],{"class":113},"    const fun = fn.bind(obj)\n",[103,89670,89671],{"class":105,"line":1617},[103,89672,89673],{"class":113},"    \u002F\u002F console.log(fun)\n",[103,89675,89676],{"class":105,"line":1631},[103,89677,89678],{"class":113},"    \u002F\u002F 调用,查看this的指向\n",[103,89680,89681],{"class":105,"line":1636},[103,89682,52641],{"class":113},[103,89684,89685,89687,89689],{"class":105,"line":1642},[103,89686,52407],{"class":113},[103,89688,51803],{"class":51290},[103,89690,51297],{"class":113},[103,89692,89693,89695,89697],{"class":105,"line":1663},[103,89694,51775],{"class":113},[103,89696,51790],{"class":51290},[103,89698,51297],{"class":113},[14,89700,89701],{},[1451,89702],{"alt":24,"src":89703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[57,89705,89706],{"start":1183},[60,89707,89708],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[94,89710,89712],{"className":53057,"code":89711,"language":53059,"meta":24,"style":24},"\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",[100,89713,89714,89722,89735,89743,89748,89752,89757,89762,89767,89772,89777,89782,89787,89792,89796,89804],{"__ignoreMap":24},[103,89715,89716,89718,89720],{"class":105,"line":106},[103,89717,1023],{"class":113},[103,89719,51790],{"class":51290},[103,89721,51297],{"class":113},[103,89723,89724,89726,89728,89731,89733],{"class":105,"line":25},[103,89725,52134],{"class":113},[103,89727,53877],{"class":51290},[103,89729,89730],{"class":113},">禁用\u003C\u002F",[103,89732,53877],{"class":51290},[103,89734,51297],{"class":113},[103,89736,89737,89739,89741],{"class":105,"line":1168},[103,89738,52134],{"class":113},[103,89740,51803],{"class":51290},[103,89742,51297],{"class":113},[103,89744,89745],{"class":105,"line":1183},[103,89746,89747],{"class":113},"    const btn = document.querySelector('button')\n",[103,89749,89750],{"class":105,"line":1189},[103,89751,59006],{"class":113},[103,89753,89754],{"class":105,"line":1203},[103,89755,89756],{"class":113},"      this.disabled = true\n",[103,89758,89759],{"class":105,"line":1209},[103,89760,89761],{"class":113},"      \u002F\u002F 定时器是window进行调用的\n",[103,89763,89764],{"class":105,"line":1300},[103,89765,89766],{"class":113},"      setTimeout(function () {\n",[103,89768,89769],{"class":105,"line":1306},[103,89770,89771],{"class":113},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[103,89773,89774],{"class":105,"line":1318},[103,89775,89776],{"class":113},"        this.disabled = false\n",[103,89778,89779],{"class":105,"line":1601},[103,89780,89781],{"class":113},"      }.bind(this), 2000)\n",[103,89783,89784],{"class":105,"line":1606},[103,89785,89786],{"class":113},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[103,89788,89789],{"class":105,"line":1612},[103,89790,89791],{"class":113},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[103,89793,89794],{"class":105,"line":1617},[103,89795,33451],{"class":113},[103,89797,89798,89800,89802],{"class":105,"line":1631},[103,89799,52407],{"class":113},[103,89801,51803],{"class":51290},[103,89803,51297],{"class":113},[103,89805,89806,89808,89810],{"class":105,"line":1636},[103,89807,51775],{"class":113},[103,89809,51790],{"class":51290},[103,89811,51297],{"class":113},[57,89813,89814],{"start":1189},[60,89815,21943],{},[14,89817,89818],{},[1451,89819],{"alt":24,"src":89820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[45,89822,89824],{"id":89823},"_417-性能优化","4.17 性能优化",[74,89826,89828],{"id":89827},"_4171-防抖","4.17.1 防抖",[14,89830,89831],{},[1451,89832],{"alt":24,"src":89833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89835,89836],{},[263,89837,89838],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89840,89841],{},"防抖实现方式：",[1120,89843,89844],{},[60,89845,89846],{},"lodash 提供了防抖处理",[14,89848,89849],{},"_.debounce(func,[wait=0],[options={}])",[14,89851,89852],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[94,89854,89856],{"className":50623,"code":89855,"language":50625,"meta":24,"style":24},"\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",[100,89857,89858,89868,89882,89886,89894,89908,89928,89940,89948,89954,89964,89976,89988,89999,90011,90021,90031,90044,90048,90056,90064,90068,90076,90094,90112,90120,90139,90149,90158,90169,90174,90178,90183,90188,90193,90218,90226,90234,90238],{"__ignoreMap":24},[103,89859,89860,89862,89864,89866],{"class":105,"line":106},[103,89861,51287],{"class":113},[103,89863,51291],{"class":51290},[103,89865,51294],{"class":1952},[103,89867,51297],{"class":113},[103,89869,89870,89872,89874,89876,89878,89880],{"class":105,"line":25},[103,89871,1023],{"class":113},[103,89873,50625],{"class":51290},[103,89875,51306],{"class":1952},[103,89877,159],{"class":113},[103,89879,51311],{"class":218},[103,89881,51297],{"class":113},[103,89883,89884],{"class":105,"line":1168},[103,89885,2389],{"emptyLinePlaceholder":30},[103,89887,89888,89890,89892],{"class":105,"line":1183},[103,89889,1023],{"class":113},[103,89891,51324],{"class":51290},[103,89893,51297],{"class":113},[103,89895,89896,89898,89900,89902,89904,89906],{"class":105,"line":1189},[103,89897,52134],{"class":113},[103,89899,51334],{"class":51290},[103,89901,51337],{"class":1952},[103,89903,159],{"class":113},[103,89905,51342],{"class":218},[103,89907,51297],{"class":113},[103,89909,89910,89912,89914,89916,89918,89920,89922,89924,89926],{"class":105,"line":1203},[103,89911,52134],{"class":113},[103,89913,51334],{"class":51290},[103,89915,14910],{"class":1952},[103,89917,159],{"class":113},[103,89919,51381],{"class":218},[103,89921,51361],{"class":1952},[103,89923,159],{"class":113},[103,89925,51388],{"class":218},[103,89927,51297],{"class":113},[103,89929,89930,89932,89934,89936,89938],{"class":105,"line":1209},[103,89931,52134],{"class":113},[103,89933,51397],{"class":51290},[103,89935,51400],{"class":113},[103,89937,51397],{"class":51290},[103,89939,51297],{"class":113},[103,89941,89942,89944,89946],{"class":105,"line":1300},[103,89943,52134],{"class":113},[103,89945,5116],{"class":51290},[103,89947,51297],{"class":113},[103,89949,89950,89952],{"class":105,"line":1306},[103,89951,54742],{"class":1952},[103,89953,15562],{"class":113},[103,89955,89956,89958,89960,89962],{"class":105,"line":1318},[103,89957,72586],{"class":162},[103,89959,51427],{"class":113},[103,89961,60495],{"class":162},[103,89963,1279],{"class":113},[103,89965,89966,89968,89970,89972,89974],{"class":105,"line":1601},[103,89967,54761],{"class":162},[103,89969,51427],{"class":113},[103,89971,1711],{"class":162},[103,89973,51482],{"class":109},[103,89975,1279],{"class":113},[103,89977,89978,89980,89982,89984,89986],{"class":105,"line":1606},[103,89979,54775],{"class":162},[103,89981,51427],{"class":113},[103,89983,1711],{"class":162},[103,89985,51482],{"class":109},[103,89987,1279],{"class":113},[103,89989,89990,89992,89994,89997],{"class":105,"line":1612},[103,89991,54874],{"class":162},[103,89993,51427],{"class":113},[103,89995,89996],{"class":162},"gray",[103,89998,1279],{"class":113},[103,90000,90001,90003,90005,90007,90009],{"class":105,"line":1617},[103,90002,54912],{"class":162},[103,90004,51427],{"class":113},[103,90006,938],{"class":162},[103,90008,51482],{"class":109},[103,90010,1279],{"class":113},[103,90012,90013,90015,90017,90019],{"class":105,"line":1631},[103,90014,57406],{"class":162},[103,90016,51427],{"class":113},[103,90018,60832],{"class":162},[103,90020,1279],{"class":113},[103,90022,90023,90025,90027,90029],{"class":105,"line":1636},[103,90024,57276],{"class":162},[103,90026,51427],{"class":113},[103,90028,51582],{"class":162},[103,90030,1279],{"class":113},[103,90032,90033,90036,90038,90040,90042],{"class":105,"line":1642},[103,90034,90035],{"class":162},"      padding-top",[103,90037,51427],{"class":113},[103,90039,432],{"class":162},[103,90041,51482],{"class":109},[103,90043,1279],{"class":113},[103,90045,90046],{"class":105,"line":1663},[103,90047,2176],{"class":113},[103,90049,90050,90052,90054],{"class":105,"line":1668},[103,90051,52407],{"class":113},[103,90053,5116],{"class":51290},[103,90055,51297],{"class":113},[103,90057,90058,90060,90062],{"class":105,"line":1682},[103,90059,51775],{"class":113},[103,90061,51324],{"class":51290},[103,90063,51297],{"class":113},[103,90065,90066],{"class":105,"line":1687},[103,90067,2389],{"emptyLinePlaceholder":30},[103,90069,90070,90072,90074],{"class":105,"line":1716},[103,90071,1023],{"class":113},[103,90073,51790],{"class":51290},[103,90075,51297],{"class":113},[103,90077,90078,90080,90082,90084,90086,90088,90090,90092],{"class":105,"line":1721},[103,90079,52134],{"class":113},[103,90081,51601],{"class":51290},[103,90083,53476],{"class":1952},[103,90085,159],{"class":113},[103,90087,53481],{"class":218},[103,90089,55304],{"class":113},[103,90091,51601],{"class":51290},[103,90093,51297],{"class":113},[103,90095,90096,90098,90100,90102,90104,90106,90108,90110],{"class":105,"line":1738},[103,90097,52134],{"class":113},[103,90099,51803],{"class":51290},[103,90101,55229],{"class":1952},[103,90103,159],{"class":113},[103,90105,88264],{"class":218},[103,90107,55304],{"class":113},[103,90109,51803],{"class":51290},[103,90111,51297],{"class":113},[103,90113,90114,90116,90118],{"class":105,"line":1743},[103,90115,52134],{"class":113},[103,90117,51803],{"class":51290},[103,90119,51297],{"class":113},[103,90121,90122,90124,90126,90128,90130,90132,90134,90137],{"class":105,"line":1748},[103,90123,11211],{"class":109},[103,90125,86923],{"class":162},[103,90127,13554],{"class":109},[103,90129,54386],{"class":113},[103,90131,54389],{"class":1952},[103,90133,114],{"class":113},[103,90135,90136],{"class":218},"'.box'",[103,90138,120],{"class":113},[103,90140,90141,90143,90145,90147],{"class":105,"line":1753},[103,90142,52209],{"class":109},[103,90144,9428],{"class":113},[103,90146,159],{"class":109},[103,90148,47323],{"class":162},[103,90150,90151,90153,90156],{"class":105,"line":1767},[103,90152,70074],{"class":109},[103,90154,90155],{"class":1952}," mouseMove",[103,90157,10843],{"class":113},[103,90159,90160,90163,90165,90167],{"class":105,"line":1772},[103,90161,90162],{"class":113},"      box.innerHTML ",[103,90164,159],{"class":109},[103,90166,3021],{"class":113},[103,90168,2691],{"class":109},[103,90170,90171],{"class":105,"line":2566},[103,90172,90173],{"class":172},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[103,90175,90176],{"class":105,"line":2580},[103,90177,2176],{"class":113},[103,90179,90180],{"class":105,"line":2588},[103,90181,90182],{"class":172},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[103,90184,90185],{"class":105,"line":2593},[103,90186,90187],{"class":172},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[103,90189,90190],{"class":105,"line":2599},[103,90191,90192],{"class":172},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[103,90194,90195,90198,90200,90202,90205,90208,90211,90214,90216],{"class":105,"line":2605},[103,90196,90197],{"class":113},"    box.",[103,90199,57803],{"class":1952},[103,90201,114],{"class":113},[103,90203,90204],{"class":218},"'mousemove'",[103,90206,90207],{"class":113},", _.",[103,90209,90210],{"class":1952},"debounce",[103,90212,90213],{"class":113},"(mouseMove, ",[103,90215,65064],{"class":162},[103,90217,30487],{"class":113},[103,90219,90220,90222,90224],{"class":105,"line":2610},[103,90221,52407],{"class":113},[103,90223,51803],{"class":51290},[103,90225,51297],{"class":113},[103,90227,90228,90230,90232],{"class":105,"line":7938},[103,90229,51775],{"class":113},[103,90231,51790],{"class":51290},[103,90233,51297],{"class":113},[103,90235,90236],{"class":105,"line":7962},[103,90237,2389],{"emptyLinePlaceholder":30},[103,90239,90240,90242,90244],{"class":105,"line":7967},[103,90241,51775],{"class":113},[103,90243,50625],{"class":51290},[103,90245,51297],{"class":113},[1120,90247,90248],{},[60,90249,90250],{},"手写一个防抖函数来处理",[14,90252,90253],{},"防抖的核心就是利用定时器来实现的：",[14,90255,90256],{},"①声明一个定时器变量",[14,90258,90259],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90261,90262],{},"③如果没有定时器则开启定时器，记得存到变量里面",[94,90264,90266],{"className":50623,"code":90265,"language":50625,"meta":24,"style":24},"\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",[100,90267,90268,90278,90292,90296,90304,90318,90338,90350,90358,90364,90374,90386,90398,90408,90420,90430,90440,90452,90456,90464,90472,90476,90484,90502,90520,90528,90546,90556,90564,90574,90578,90582,90586,90591,90596,90601,90606,90611,90616,90634,90641,90646,90654,90659,90672,90688,90698,90703,90707,90711,90731,90735,90740,90745,90750,90755,90763,90771,90775],{"__ignoreMap":24},[103,90269,90270,90272,90274,90276],{"class":105,"line":106},[103,90271,51287],{"class":113},[103,90273,51291],{"class":51290},[103,90275,51294],{"class":1952},[103,90277,51297],{"class":113},[103,90279,90280,90282,90284,90286,90288,90290],{"class":105,"line":25},[103,90281,1023],{"class":113},[103,90283,50625],{"class":51290},[103,90285,51306],{"class":1952},[103,90287,159],{"class":113},[103,90289,51311],{"class":218},[103,90291,51297],{"class":113},[103,90293,90294],{"class":105,"line":1168},[103,90295,2389],{"emptyLinePlaceholder":30},[103,90297,90298,90300,90302],{"class":105,"line":1183},[103,90299,1023],{"class":113},[103,90301,51324],{"class":51290},[103,90303,51297],{"class":113},[103,90305,90306,90308,90310,90312,90314,90316],{"class":105,"line":1189},[103,90307,52134],{"class":113},[103,90309,51334],{"class":51290},[103,90311,51337],{"class":1952},[103,90313,159],{"class":113},[103,90315,51342],{"class":218},[103,90317,51297],{"class":113},[103,90319,90320,90322,90324,90326,90328,90330,90332,90334,90336],{"class":105,"line":1203},[103,90321,52134],{"class":113},[103,90323,51334],{"class":51290},[103,90325,14910],{"class":1952},[103,90327,159],{"class":113},[103,90329,51381],{"class":218},[103,90331,51361],{"class":1952},[103,90333,159],{"class":113},[103,90335,51388],{"class":218},[103,90337,51297],{"class":113},[103,90339,90340,90342,90344,90346,90348],{"class":105,"line":1209},[103,90341,52134],{"class":113},[103,90343,51397],{"class":51290},[103,90345,51400],{"class":113},[103,90347,51397],{"class":51290},[103,90349,51297],{"class":113},[103,90351,90352,90354,90356],{"class":105,"line":1300},[103,90353,52134],{"class":113},[103,90355,5116],{"class":51290},[103,90357,51297],{"class":113},[103,90359,90360,90362],{"class":105,"line":1306},[103,90361,54742],{"class":1952},[103,90363,15562],{"class":113},[103,90365,90366,90368,90370,90372],{"class":105,"line":1318},[103,90367,72586],{"class":162},[103,90369,51427],{"class":113},[103,90371,60495],{"class":162},[103,90373,1279],{"class":113},[103,90375,90376,90378,90380,90382,90384],{"class":105,"line":1601},[103,90377,54761],{"class":162},[103,90379,51427],{"class":113},[103,90381,1711],{"class":162},[103,90383,51482],{"class":109},[103,90385,1279],{"class":113},[103,90387,90388,90390,90392,90394,90396],{"class":105,"line":1606},[103,90389,54775],{"class":162},[103,90391,51427],{"class":113},[103,90393,1711],{"class":162},[103,90395,51482],{"class":109},[103,90397,1279],{"class":113},[103,90399,90400,90402,90404,90406],{"class":105,"line":1612},[103,90401,54874],{"class":162},[103,90403,51427],{"class":113},[103,90405,89996],{"class":162},[103,90407,1279],{"class":113},[103,90409,90410,90412,90414,90416,90418],{"class":105,"line":1617},[103,90411,54912],{"class":162},[103,90413,51427],{"class":113},[103,90415,938],{"class":162},[103,90417,51482],{"class":109},[103,90419,1279],{"class":113},[103,90421,90422,90424,90426,90428],{"class":105,"line":1631},[103,90423,57406],{"class":162},[103,90425,51427],{"class":113},[103,90427,60832],{"class":162},[103,90429,1279],{"class":113},[103,90431,90432,90434,90436,90438],{"class":105,"line":1636},[103,90433,57276],{"class":162},[103,90435,51427],{"class":113},[103,90437,51582],{"class":162},[103,90439,1279],{"class":113},[103,90441,90442,90444,90446,90448,90450],{"class":105,"line":1642},[103,90443,90035],{"class":162},[103,90445,51427],{"class":113},[103,90447,432],{"class":162},[103,90449,51482],{"class":109},[103,90451,1279],{"class":113},[103,90453,90454],{"class":105,"line":1663},[103,90455,2176],{"class":113},[103,90457,90458,90460,90462],{"class":105,"line":1668},[103,90459,52407],{"class":113},[103,90461,5116],{"class":51290},[103,90463,51297],{"class":113},[103,90465,90466,90468,90470],{"class":105,"line":1682},[103,90467,51775],{"class":113},[103,90469,51324],{"class":51290},[103,90471,51297],{"class":113},[103,90473,90474],{"class":105,"line":1687},[103,90475,2389],{"emptyLinePlaceholder":30},[103,90477,90478,90480,90482],{"class":105,"line":1716},[103,90479,1023],{"class":113},[103,90481,51790],{"class":51290},[103,90483,51297],{"class":113},[103,90485,90486,90488,90490,90492,90494,90496,90498,90500],{"class":105,"line":1721},[103,90487,52134],{"class":113},[103,90489,51601],{"class":51290},[103,90491,53476],{"class":1952},[103,90493,159],{"class":113},[103,90495,53481],{"class":218},[103,90497,55304],{"class":113},[103,90499,51601],{"class":51290},[103,90501,51297],{"class":113},[103,90503,90504,90506,90508,90510,90512,90514,90516,90518],{"class":105,"line":1738},[103,90505,52134],{"class":113},[103,90507,51803],{"class":51290},[103,90509,55229],{"class":1952},[103,90511,159],{"class":113},[103,90513,88264],{"class":218},[103,90515,55304],{"class":113},[103,90517,51803],{"class":51290},[103,90519,51297],{"class":113},[103,90521,90522,90524,90526],{"class":105,"line":1743},[103,90523,52134],{"class":113},[103,90525,51803],{"class":51290},[103,90527,51297],{"class":113},[103,90529,90530,90532,90534,90536,90538,90540,90542,90544],{"class":105,"line":1748},[103,90531,11211],{"class":109},[103,90533,86923],{"class":162},[103,90535,13554],{"class":109},[103,90537,54386],{"class":113},[103,90539,54389],{"class":1952},[103,90541,114],{"class":113},[103,90543,90136],{"class":218},[103,90545,120],{"class":113},[103,90547,90548,90550,90552,90554],{"class":105,"line":1753},[103,90549,52209],{"class":109},[103,90551,9428],{"class":113},[103,90553,159],{"class":109},[103,90555,47323],{"class":162},[103,90557,90558,90560,90562],{"class":105,"line":1767},[103,90559,70074],{"class":109},[103,90561,90155],{"class":1952},[103,90563,10843],{"class":113},[103,90565,90566,90568,90570,90572],{"class":105,"line":1772},[103,90567,90162],{"class":113},[103,90569,159],{"class":109},[103,90571,3021],{"class":113},[103,90573,2691],{"class":109},[103,90575,90576],{"class":105,"line":2566},[103,90577,90173],{"class":172},[103,90579,90580],{"class":105,"line":2580},[103,90581,2176],{"class":113},[103,90583,90584],{"class":105,"line":2588},[103,90585,90182],{"class":172},[103,90587,90588],{"class":105,"line":2593},[103,90589,90590],{"class":172},"    \u002F\u002F 手写防抖函数\n",[103,90592,90593],{"class":105,"line":2599},[103,90594,90595],{"class":172},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[103,90597,90598],{"class":105,"line":2605},[103,90599,90600],{"class":172},"    \u002F\u002F 1.声明定时器变量\n",[103,90602,90603],{"class":105,"line":2610},[103,90604,90605],{"class":172},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[103,90607,90608],{"class":105,"line":7938},[103,90609,90610],{"class":172},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[103,90612,90613],{"class":105,"line":7962},[103,90614,90615],{"class":172},"    \u002F\u002F 4.定时器里面写函数调用\n",[103,90617,90618,90620,90623,90625,90628,90630,90632],{"class":105,"line":7967},[103,90619,70074],{"class":109},[103,90621,90622],{"class":1952}," debounce",[103,90624,114],{"class":113},[103,90626,90627],{"class":5206},"fn",[103,90629,12425],{"class":113},[103,90631,833],{"class":5206},[103,90633,12432],{"class":113},[103,90635,90636,90638],{"class":105,"line":7973},[103,90637,79762],{"class":109},[103,90639,90640],{"class":113}," timer\n",[103,90642,90643],{"class":105,"line":8000},[103,90644,90645],{"class":172},"      \u002F\u002F return 返回一个匿名函数\n",[103,90647,90648,90650,90652],{"class":105,"line":8005},[103,90649,73972],{"class":109},[103,90651,58908],{"class":109},[103,90653,54442],{"class":113},[103,90655,90656],{"class":105,"line":8011},[103,90657,90658],{"class":172},"        \u002F\u002F 这里边写第二三四步\n",[103,90660,90661,90663,90666,90669],{"class":105,"line":8023},[103,90662,2486],{"class":109},[103,90664,90665],{"class":113}," (timer) ",[103,90667,90668],{"class":1952},"clearTimeout",[103,90670,90671],{"class":113},"(timer)\n",[103,90673,90674,90677,90679,90682,90684,90686],{"class":105,"line":8035},[103,90675,90676],{"class":113},"        timer ",[103,90678,159],{"class":109},[103,90680,90681],{"class":1952}," setTimeout",[103,90683,114],{"class":113},[103,90685,54439],{"class":109},[103,90687,54442],{"class":113},[103,90689,90690,90693,90695],{"class":105,"line":8047},[103,90691,90692],{"class":1952},"          fn",[103,90694,13040],{"class":113},[103,90696,90697],{"class":172},"\u002F\u002F加小括号调用fn }, t)\n",[103,90699,90700],{"class":105,"line":9706},[103,90701,90702],{"class":113},"        }, t)\n",[103,90704,90705],{"class":105,"line":9731},[103,90706,52388],{"class":113},[103,90708,90709],{"class":105,"line":9754},[103,90710,2176],{"class":113},[103,90712,90713,90715,90717,90719,90721,90723,90725,90727,90729],{"class":105,"line":9778},[103,90714,90197],{"class":113},[103,90716,57803],{"class":1952},[103,90718,114],{"class":113},[103,90720,90204],{"class":218},[103,90722,12425],{"class":113},[103,90724,90210],{"class":1952},[103,90726,90213],{"class":113},[103,90728,65064],{"class":162},[103,90730,30487],{"class":113},[103,90732,90733],{"class":105,"line":9783},[103,90734,2389],{"emptyLinePlaceholder":30},[103,90736,90737],{"class":105,"line":9788},[103,90738,90739],{"class":172},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[103,90741,90742],{"class":105,"line":9793},[103,90743,90744],{"class":172},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[103,90746,90747],{"class":105,"line":9802},[103,90748,90749],{"class":172},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[103,90751,90752],{"class":105,"line":9807},[103,90753,90754],{"class":172},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[103,90756,90757,90759,90761],{"class":105,"line":9813},[103,90758,52407],{"class":113},[103,90760,51803],{"class":51290},[103,90762,51297],{"class":113},[103,90764,90765,90767,90769],{"class":105,"line":9834},[103,90766,51775],{"class":113},[103,90768,51790],{"class":51290},[103,90770,51297],{"class":113},[103,90772,90773],{"class":105,"line":9840},[103,90774,2389],{"emptyLinePlaceholder":30},[103,90776,90777,90779,90781],{"class":105,"line":9854},[103,90778,51775],{"class":113},[103,90780,50625],{"class":51290},[103,90782,51297],{"class":113},[74,90784,90786],{"id":90785},"_4172-节流","4.17.2 节流",[14,90788,90789],{},[1451,90790],{"alt":24,"src":90791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90793,90794],{},[1451,90795],{"alt":24,"src":90796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90798,90799],{},[263,90800,90801],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90803,90804],{},"实现方式：",[1120,90806,90807],{},[60,90808,90809],{},"lodash 提供的节流函数来处理",[14,90811,90812],{},"_.throttle(func,[wait=0],[options=])",[14,90814,90815],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[94,90817,90819],{"className":50623,"code":90818,"language":50625,"meta":24,"style":24},"\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",[100,90820,90821,90831,90845,90849,90857,90871,90891,90903,90911,90917,90927,90939,90951,90961,90973,90983,90993,91005,91009,91017,91025,91029,91037,91055,91073,91081,91099,91109,91117,91127,91131,91135,91139,91144,91149,91170,91178,91186,91190],{"__ignoreMap":24},[103,90822,90823,90825,90827,90829],{"class":105,"line":106},[103,90824,51287],{"class":113},[103,90826,51291],{"class":51290},[103,90828,51294],{"class":1952},[103,90830,51297],{"class":113},[103,90832,90833,90835,90837,90839,90841,90843],{"class":105,"line":25},[103,90834,1023],{"class":113},[103,90836,50625],{"class":51290},[103,90838,51306],{"class":1952},[103,90840,159],{"class":113},[103,90842,51311],{"class":218},[103,90844,51297],{"class":113},[103,90846,90847],{"class":105,"line":1168},[103,90848,2389],{"emptyLinePlaceholder":30},[103,90850,90851,90853,90855],{"class":105,"line":1183},[103,90852,1023],{"class":113},[103,90854,51324],{"class":51290},[103,90856,51297],{"class":113},[103,90858,90859,90861,90863,90865,90867,90869],{"class":105,"line":1189},[103,90860,52134],{"class":113},[103,90862,51334],{"class":51290},[103,90864,51337],{"class":1952},[103,90866,159],{"class":113},[103,90868,51342],{"class":218},[103,90870,51297],{"class":113},[103,90872,90873,90875,90877,90879,90881,90883,90885,90887,90889],{"class":105,"line":1203},[103,90874,52134],{"class":113},[103,90876,51334],{"class":51290},[103,90878,14910],{"class":1952},[103,90880,159],{"class":113},[103,90882,51381],{"class":218},[103,90884,51361],{"class":1952},[103,90886,159],{"class":113},[103,90888,51388],{"class":218},[103,90890,51297],{"class":113},[103,90892,90893,90895,90897,90899,90901],{"class":105,"line":1209},[103,90894,52134],{"class":113},[103,90896,51397],{"class":51290},[103,90898,51400],{"class":113},[103,90900,51397],{"class":51290},[103,90902,51297],{"class":113},[103,90904,90905,90907,90909],{"class":105,"line":1300},[103,90906,52134],{"class":113},[103,90908,5116],{"class":51290},[103,90910,51297],{"class":113},[103,90912,90913,90915],{"class":105,"line":1306},[103,90914,54742],{"class":1952},[103,90916,15562],{"class":113},[103,90918,90919,90921,90923,90925],{"class":105,"line":1318},[103,90920,72586],{"class":162},[103,90922,51427],{"class":113},[103,90924,60495],{"class":162},[103,90926,1279],{"class":113},[103,90928,90929,90931,90933,90935,90937],{"class":105,"line":1601},[103,90930,54761],{"class":162},[103,90932,51427],{"class":113},[103,90934,1711],{"class":162},[103,90936,51482],{"class":109},[103,90938,1279],{"class":113},[103,90940,90941,90943,90945,90947,90949],{"class":105,"line":1606},[103,90942,54775],{"class":162},[103,90944,51427],{"class":113},[103,90946,1711],{"class":162},[103,90948,51482],{"class":109},[103,90950,1279],{"class":113},[103,90952,90953,90955,90957,90959],{"class":105,"line":1612},[103,90954,54874],{"class":162},[103,90956,51427],{"class":113},[103,90958,89996],{"class":162},[103,90960,1279],{"class":113},[103,90962,90963,90965,90967,90969,90971],{"class":105,"line":1617},[103,90964,54912],{"class":162},[103,90966,51427],{"class":113},[103,90968,938],{"class":162},[103,90970,51482],{"class":109},[103,90972,1279],{"class":113},[103,90974,90975,90977,90979,90981],{"class":105,"line":1631},[103,90976,57406],{"class":162},[103,90978,51427],{"class":113},[103,90980,60832],{"class":162},[103,90982,1279],{"class":113},[103,90984,90985,90987,90989,90991],{"class":105,"line":1636},[103,90986,57276],{"class":162},[103,90988,51427],{"class":113},[103,90990,51582],{"class":162},[103,90992,1279],{"class":113},[103,90994,90995,90997,90999,91001,91003],{"class":105,"line":1642},[103,90996,90035],{"class":162},[103,90998,51427],{"class":113},[103,91000,432],{"class":162},[103,91002,51482],{"class":109},[103,91004,1279],{"class":113},[103,91006,91007],{"class":105,"line":1663},[103,91008,2176],{"class":113},[103,91010,91011,91013,91015],{"class":105,"line":1668},[103,91012,52407],{"class":113},[103,91014,5116],{"class":51290},[103,91016,51297],{"class":113},[103,91018,91019,91021,91023],{"class":105,"line":1682},[103,91020,51775],{"class":113},[103,91022,51324],{"class":51290},[103,91024,51297],{"class":113},[103,91026,91027],{"class":105,"line":1687},[103,91028,2389],{"emptyLinePlaceholder":30},[103,91030,91031,91033,91035],{"class":105,"line":1716},[103,91032,1023],{"class":113},[103,91034,51790],{"class":51290},[103,91036,51297],{"class":113},[103,91038,91039,91041,91043,91045,91047,91049,91051,91053],{"class":105,"line":1721},[103,91040,52134],{"class":113},[103,91042,51601],{"class":51290},[103,91044,53476],{"class":1952},[103,91046,159],{"class":113},[103,91048,53481],{"class":218},[103,91050,55304],{"class":113},[103,91052,51601],{"class":51290},[103,91054,51297],{"class":113},[103,91056,91057,91059,91061,91063,91065,91067,91069,91071],{"class":105,"line":1738},[103,91058,52134],{"class":113},[103,91060,51803],{"class":51290},[103,91062,55229],{"class":1952},[103,91064,159],{"class":113},[103,91066,88264],{"class":218},[103,91068,55304],{"class":113},[103,91070,51803],{"class":51290},[103,91072,51297],{"class":113},[103,91074,91075,91077,91079],{"class":105,"line":1743},[103,91076,52134],{"class":113},[103,91078,51803],{"class":51290},[103,91080,51297],{"class":113},[103,91082,91083,91085,91087,91089,91091,91093,91095,91097],{"class":105,"line":1748},[103,91084,11211],{"class":109},[103,91086,86923],{"class":162},[103,91088,13554],{"class":109},[103,91090,54386],{"class":113},[103,91092,54389],{"class":1952},[103,91094,114],{"class":113},[103,91096,90136],{"class":218},[103,91098,120],{"class":113},[103,91100,91101,91103,91105,91107],{"class":105,"line":1753},[103,91102,52209],{"class":109},[103,91104,9428],{"class":113},[103,91106,159],{"class":109},[103,91108,47323],{"class":162},[103,91110,91111,91113,91115],{"class":105,"line":1767},[103,91112,70074],{"class":109},[103,91114,90155],{"class":1952},[103,91116,10843],{"class":113},[103,91118,91119,91121,91123,91125],{"class":105,"line":1772},[103,91120,90162],{"class":113},[103,91122,159],{"class":109},[103,91124,3021],{"class":113},[103,91126,2691],{"class":109},[103,91128,91129],{"class":105,"line":2566},[103,91130,90173],{"class":172},[103,91132,91133],{"class":105,"line":2580},[103,91134,2176],{"class":113},[103,91136,91137],{"class":105,"line":2588},[103,91138,90182],{"class":172},[103,91140,91141],{"class":105,"line":2593},[103,91142,91143],{"class":172},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[103,91145,91146],{"class":105,"line":2599},[103,91147,91148],{"class":172},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[103,91150,91151,91153,91155,91157,91159,91161,91164,91166,91168],{"class":105,"line":2605},[103,91152,90197],{"class":113},[103,91154,57803],{"class":1952},[103,91156,114],{"class":113},[103,91158,90204],{"class":218},[103,91160,90207],{"class":113},[103,91162,91163],{"class":1952},"throttle",[103,91165,90213],{"class":113},[103,91167,65064],{"class":162},[103,91169,30487],{"class":113},[103,91171,91172,91174,91176],{"class":105,"line":2610},[103,91173,52407],{"class":113},[103,91175,51803],{"class":51290},[103,91177,51297],{"class":113},[103,91179,91180,91182,91184],{"class":105,"line":7938},[103,91181,51775],{"class":113},[103,91183,51790],{"class":51290},[103,91185,51297],{"class":113},[103,91187,91188],{"class":105,"line":7962},[103,91189,2389],{"emptyLinePlaceholder":30},[103,91191,91192,91194,91196],{"class":105,"line":7967},[103,91193,51775],{"class":113},[103,91195,50625],{"class":51290},[103,91197,51297],{"class":113},[1120,91199,91200],{},[60,91201,91202],{},"手写一个节流函数来处理",[14,91204,70942],{},[14,91206,90256],{},[14,91208,91209],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91211,91212],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[94,91214,91216],{"className":50623,"code":91215,"language":50625,"meta":24,"style":24},"\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",[100,91217,91218,91228,91242,91246,91254,91268,91288,91300,91308,91314,91324,91336,91348,91358,91370,91380,91390,91402,91406,91414,91422,91426,91434,91452,91470,91478,91496,91506,91514,91524,91528,91532,91536,91541,91546,91551,91556,91561,91566,91583,91589,91597,91608,91623,91630,91635,91640,91650,91655,91660,91665,91669,91673,91677,91697,91705,91713,91717],{"__ignoreMap":24},[103,91219,91220,91222,91224,91226],{"class":105,"line":106},[103,91221,51287],{"class":113},[103,91223,51291],{"class":51290},[103,91225,51294],{"class":1952},[103,91227,51297],{"class":113},[103,91229,91230,91232,91234,91236,91238,91240],{"class":105,"line":25},[103,91231,1023],{"class":113},[103,91233,50625],{"class":51290},[103,91235,51306],{"class":1952},[103,91237,159],{"class":113},[103,91239,51311],{"class":218},[103,91241,51297],{"class":113},[103,91243,91244],{"class":105,"line":1168},[103,91245,2389],{"emptyLinePlaceholder":30},[103,91247,91248,91250,91252],{"class":105,"line":1183},[103,91249,1023],{"class":113},[103,91251,51324],{"class":51290},[103,91253,51297],{"class":113},[103,91255,91256,91258,91260,91262,91264,91266],{"class":105,"line":1189},[103,91257,52134],{"class":113},[103,91259,51334],{"class":51290},[103,91261,51337],{"class":1952},[103,91263,159],{"class":113},[103,91265,51342],{"class":218},[103,91267,51297],{"class":113},[103,91269,91270,91272,91274,91276,91278,91280,91282,91284,91286],{"class":105,"line":1203},[103,91271,52134],{"class":113},[103,91273,51334],{"class":51290},[103,91275,14910],{"class":1952},[103,91277,159],{"class":113},[103,91279,51381],{"class":218},[103,91281,51361],{"class":1952},[103,91283,159],{"class":113},[103,91285,51388],{"class":218},[103,91287,51297],{"class":113},[103,91289,91290,91292,91294,91296,91298],{"class":105,"line":1209},[103,91291,52134],{"class":113},[103,91293,51397],{"class":51290},[103,91295,51400],{"class":113},[103,91297,51397],{"class":51290},[103,91299,51297],{"class":113},[103,91301,91302,91304,91306],{"class":105,"line":1300},[103,91303,52134],{"class":113},[103,91305,5116],{"class":51290},[103,91307,51297],{"class":113},[103,91309,91310,91312],{"class":105,"line":1306},[103,91311,54742],{"class":1952},[103,91313,15562],{"class":113},[103,91315,91316,91318,91320,91322],{"class":105,"line":1318},[103,91317,72586],{"class":162},[103,91319,51427],{"class":113},[103,91321,60495],{"class":162},[103,91323,1279],{"class":113},[103,91325,91326,91328,91330,91332,91334],{"class":105,"line":1601},[103,91327,54761],{"class":162},[103,91329,51427],{"class":113},[103,91331,1711],{"class":162},[103,91333,51482],{"class":109},[103,91335,1279],{"class":113},[103,91337,91338,91340,91342,91344,91346],{"class":105,"line":1606},[103,91339,54775],{"class":162},[103,91341,51427],{"class":113},[103,91343,1711],{"class":162},[103,91345,51482],{"class":109},[103,91347,1279],{"class":113},[103,91349,91350,91352,91354,91356],{"class":105,"line":1612},[103,91351,54874],{"class":162},[103,91353,51427],{"class":113},[103,91355,89996],{"class":162},[103,91357,1279],{"class":113},[103,91359,91360,91362,91364,91366,91368],{"class":105,"line":1617},[103,91361,54912],{"class":162},[103,91363,51427],{"class":113},[103,91365,938],{"class":162},[103,91367,51482],{"class":109},[103,91369,1279],{"class":113},[103,91371,91372,91374,91376,91378],{"class":105,"line":1631},[103,91373,57406],{"class":162},[103,91375,51427],{"class":113},[103,91377,60832],{"class":162},[103,91379,1279],{"class":113},[103,91381,91382,91384,91386,91388],{"class":105,"line":1636},[103,91383,57276],{"class":162},[103,91385,51427],{"class":113},[103,91387,51582],{"class":162},[103,91389,1279],{"class":113},[103,91391,91392,91394,91396,91398,91400],{"class":105,"line":1642},[103,91393,90035],{"class":162},[103,91395,51427],{"class":113},[103,91397,432],{"class":162},[103,91399,51482],{"class":109},[103,91401,1279],{"class":113},[103,91403,91404],{"class":105,"line":1663},[103,91405,2176],{"class":113},[103,91407,91408,91410,91412],{"class":105,"line":1668},[103,91409,52407],{"class":113},[103,91411,5116],{"class":51290},[103,91413,51297],{"class":113},[103,91415,91416,91418,91420],{"class":105,"line":1682},[103,91417,51775],{"class":113},[103,91419,51324],{"class":51290},[103,91421,51297],{"class":113},[103,91423,91424],{"class":105,"line":1687},[103,91425,2389],{"emptyLinePlaceholder":30},[103,91427,91428,91430,91432],{"class":105,"line":1716},[103,91429,1023],{"class":113},[103,91431,51790],{"class":51290},[103,91433,51297],{"class":113},[103,91435,91436,91438,91440,91442,91444,91446,91448,91450],{"class":105,"line":1721},[103,91437,52134],{"class":113},[103,91439,51601],{"class":51290},[103,91441,53476],{"class":1952},[103,91443,159],{"class":113},[103,91445,53481],{"class":218},[103,91447,55304],{"class":113},[103,91449,51601],{"class":51290},[103,91451,51297],{"class":113},[103,91453,91454,91456,91458,91460,91462,91464,91466,91468],{"class":105,"line":1738},[103,91455,52134],{"class":113},[103,91457,51803],{"class":51290},[103,91459,55229],{"class":1952},[103,91461,159],{"class":113},[103,91463,88264],{"class":218},[103,91465,55304],{"class":113},[103,91467,51803],{"class":51290},[103,91469,51297],{"class":113},[103,91471,91472,91474,91476],{"class":105,"line":1743},[103,91473,52134],{"class":113},[103,91475,51803],{"class":51290},[103,91477,51297],{"class":113},[103,91479,91480,91482,91484,91486,91488,91490,91492,91494],{"class":105,"line":1748},[103,91481,11211],{"class":109},[103,91483,86923],{"class":162},[103,91485,13554],{"class":109},[103,91487,54386],{"class":113},[103,91489,54389],{"class":1952},[103,91491,114],{"class":113},[103,91493,90136],{"class":218},[103,91495,120],{"class":113},[103,91497,91498,91500,91502,91504],{"class":105,"line":1753},[103,91499,52209],{"class":109},[103,91501,9428],{"class":113},[103,91503,159],{"class":109},[103,91505,47323],{"class":162},[103,91507,91508,91510,91512],{"class":105,"line":1767},[103,91509,70074],{"class":109},[103,91511,90155],{"class":1952},[103,91513,10843],{"class":113},[103,91515,91516,91518,91520,91522],{"class":105,"line":1772},[103,91517,90162],{"class":113},[103,91519,159],{"class":109},[103,91521,3021],{"class":113},[103,91523,2691],{"class":109},[103,91525,91526],{"class":105,"line":2566},[103,91527,90173],{"class":172},[103,91529,91530],{"class":105,"line":2580},[103,91531,2176],{"class":113},[103,91533,91534],{"class":105,"line":2588},[103,91535,90182],{"class":172},[103,91537,91538],{"class":105,"line":2593},[103,91539,91540],{"class":172},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[103,91542,91543],{"class":105,"line":2599},[103,91544,91545],{"class":172},"    \u002F\u002F 1.声明一个定时器变量\n",[103,91547,91548],{"class":105,"line":2605},[103,91549,91550],{"class":172},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[103,91552,91553],{"class":105,"line":2610},[103,91554,91555],{"class":172},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[103,91557,91558],{"class":105,"line":7938},[103,91559,91560],{"class":172},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[103,91562,91563],{"class":105,"line":7962},[103,91564,91565],{"class":172},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[103,91567,91568,91570,91573,91575,91577,91579,91581],{"class":105,"line":7967},[103,91569,70074],{"class":109},[103,91571,91572],{"class":1952}," throttle",[103,91574,114],{"class":113},[103,91576,90627],{"class":5206},[103,91578,12425],{"class":113},[103,91580,833],{"class":5206},[103,91582,12432],{"class":113},[103,91584,91585,91587],{"class":105,"line":7973},[103,91586,79762],{"class":109},[103,91588,90640],{"class":113},[103,91590,91591,91593,91595],{"class":105,"line":8000},[103,91592,73972],{"class":109},[103,91594,58908],{"class":109},[103,91596,54442],{"class":113},[103,91598,91599,91601,91603,91605],{"class":105,"line":8005},[103,91600,2486],{"class":109},[103,91602,1647],{"class":113},[103,91604,340],{"class":109},[103,91606,91607],{"class":113},"timer) {\n",[103,91609,91610,91613,91615,91617,91619,91621],{"class":105,"line":8011},[103,91611,91612],{"class":113},"          timer ",[103,91614,159],{"class":109},[103,91616,90681],{"class":1952},[103,91618,114],{"class":113},[103,91620,54439],{"class":109},[103,91622,54442],{"class":113},[103,91624,91625,91628],{"class":105,"line":8023},[103,91626,91627],{"class":1952},"            fn",[103,91629,1965],{"class":113},[103,91631,91632],{"class":105,"line":8035},[103,91633,91634],{"class":172},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[103,91636,91637],{"class":105,"line":8047},[103,91638,91639],{"class":172},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[103,91641,91642,91645,91647],{"class":105,"line":9706},[103,91643,91644],{"class":113},"            timer ",[103,91646,159],{"class":109},[103,91648,91649],{"class":162}," null\n",[103,91651,91652],{"class":105,"line":9731},[103,91653,91654],{"class":172},"            \u002F\u002F 不能用clearTimeout(timer)\n",[103,91656,91657],{"class":105,"line":9754},[103,91658,91659],{"class":172},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[103,91661,91662],{"class":105,"line":9778},[103,91663,91664],{"class":113},"          }, t)\n",[103,91666,91667],{"class":105,"line":9783},[103,91668,2518],{"class":113},[103,91670,91671],{"class":105,"line":9788},[103,91672,52388],{"class":113},[103,91674,91675],{"class":105,"line":9793},[103,91676,2176],{"class":113},[103,91678,91679,91681,91683,91685,91687,91689,91691,91693,91695],{"class":105,"line":9802},[103,91680,90197],{"class":113},[103,91682,57803],{"class":1952},[103,91684,114],{"class":113},[103,91686,90204],{"class":218},[103,91688,12425],{"class":113},[103,91690,91163],{"class":1952},[103,91692,90213],{"class":113},[103,91694,65064],{"class":162},[103,91696,30487],{"class":113},[103,91698,91699,91701,91703],{"class":105,"line":9807},[103,91700,52407],{"class":113},[103,91702,51803],{"class":51290},[103,91704,51297],{"class":113},[103,91706,91707,91709,91711],{"class":105,"line":9813},[103,91708,51775],{"class":113},[103,91710,51790],{"class":51290},[103,91712,51297],{"class":113},[103,91714,91715],{"class":105,"line":9834},[103,91716,2389],{"emptyLinePlaceholder":30},[103,91718,91719,91721,91723],{"class":105,"line":9840},[103,91720,51775],{"class":113},[103,91722,50625],{"class":51290},[103,91724,51297],{"class":113},[74,91726,91728],{"id":91727},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[94,91730,91732],{"className":53057,"code":91731,"language":53059,"meta":24,"style":24},"\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",[100,91733,91734,91742,91750,91755,91760,91765,91770,91774,91782],{"__ignoreMap":24},[103,91735,91736,91738,91740],{"class":105,"line":106},[103,91737,1023],{"class":113},[103,91739,51790],{"class":51290},[103,91741,51297],{"class":113},[103,91743,91744,91746,91748],{"class":105,"line":25},[103,91745,52134],{"class":113},[103,91747,51803],{"class":51290},[103,91749,51297],{"class":113},[103,91751,91752],{"class":105,"line":1168},[103,91753,91754],{"class":113},"    let timer = null\n",[103,91756,91757],{"class":105,"line":1183},[103,91758,91759],{"class":113},"    timer = setTimeout(() => {\n",[103,91761,91762],{"class":105,"line":1189},[103,91763,91764],{"class":113},"      clearTimeout(timer)\n",[103,91766,91767],{"class":105,"line":1203},[103,91768,91769],{"class":113},"      console.log(timer)\n",[103,91771,91772],{"class":105,"line":1209},[103,91773,60215],{"class":113},[103,91775,91776,91778,91780],{"class":105,"line":1300},[103,91777,52407],{"class":113},[103,91779,51803],{"class":51290},[103,91781,51297],{"class":113},[103,91783,91784,91786,91788],{"class":105,"line":1306},[103,91785,51775],{"class":113},[103,91787,51790],{"class":51290},[103,91789,51297],{"class":113},[14,91791,91792],{},"输出为1",[14,91794,91795],{},"在开启的定时器里边写清除定时器",[14,91797,91798],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[74,91800,91802],{"id":91801},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91804,91805],{},"页面打开，可以记录上一次的视频播放位置",[14,91807,91808],{},[1451,91809],{"alt":24,"src":91810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91812,91813],{},[1451,91814],{"alt":24,"src":91815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[94,91817,91819],{"className":50623,"code":91818,"language":50625,"meta":24,"style":24},"\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",[100,91820,91821,91831,91845,91849,91857,91871,91891,91911,91933,91946,91954,91960,91970,91980,91990,91994,91998,92005,92018,92030,92034,92038,92048,92060,92074,92078,92082,92089,92099,92112,92124,92134,92144,92160,92172,92176,92180,92188,92198,92210,92220,92230,92240,92244,92248,92258,92269,92273,92281,92289,92293,92301,92316,92331,92346,92367,92375,92383,92398,92420,92428,92443,92469,92495,92521,92529,92537,92556,92564,92569,92588,92593,92611,92616,92621,92629,92634,92648,92656,92661,92678,92682,92687,92709,92713,92721,92729,92733],{"__ignoreMap":24},[103,91822,91823,91825,91827,91829],{"class":105,"line":106},[103,91824,51287],{"class":113},[103,91826,51291],{"class":51290},[103,91828,51294],{"class":1952},[103,91830,51297],{"class":113},[103,91832,91833,91835,91837,91839,91841,91843],{"class":105,"line":25},[103,91834,1023],{"class":113},[103,91836,50625],{"class":51290},[103,91838,51306],{"class":1952},[103,91840,159],{"class":113},[103,91842,51311],{"class":218},[103,91844,51297],{"class":113},[103,91846,91847],{"class":105,"line":1168},[103,91848,2389],{"emptyLinePlaceholder":30},[103,91850,91851,91853,91855],{"class":105,"line":1183},[103,91852,1023],{"class":113},[103,91854,51324],{"class":51290},[103,91856,51297],{"class":113},[103,91858,91859,91861,91863,91865,91867,91869],{"class":105,"line":1189},[103,91860,52134],{"class":113},[103,91862,51334],{"class":51290},[103,91864,51337],{"class":1952},[103,91866,159],{"class":113},[103,91868,51342],{"class":218},[103,91870,59117],{"class":113},[103,91872,91873,91875,91877,91879,91881,91883,91885,91887,91889],{"class":105,"line":1203},[103,91874,52134],{"class":113},[103,91876,51334],{"class":51290},[103,91878,51353],{"class":1952},[103,91880,159],{"class":113},[103,91882,51358],{"class":218},[103,91884,51361],{"class":1952},[103,91886,159],{"class":113},[103,91888,51366],{"class":218},[103,91890,59117],{"class":113},[103,91892,91893,91895,91897,91899,91901,91903,91905,91907,91909],{"class":105,"line":1209},[103,91894,52134],{"class":113},[103,91896,51334],{"class":51290},[103,91898,14910],{"class":1952},[103,91900,159],{"class":113},[103,91902,51381],{"class":218},[103,91904,51361],{"class":1952},[103,91906,159],{"class":113},[103,91908,51388],{"class":218},[103,91910,59117],{"class":113},[103,91912,91913,91915,91917,91919,91921,91924,91926,91928,91931],{"class":105,"line":1300},[103,91914,52134],{"class":113},[103,91916,51334],{"class":51290},[103,91918,14910],{"class":1952},[103,91920,159],{"class":113},[103,91922,91923],{"class":218},"\"referrer\"",[103,91925,51361],{"class":1952},[103,91927,159],{"class":113},[103,91929,91930],{"class":218},"\"never\"",[103,91932,59117],{"class":113},[103,91934,91935,91937,91939,91942,91944],{"class":105,"line":1306},[103,91936,52134],{"class":113},[103,91938,51397],{"class":51290},[103,91940,91941],{"class":113},">综合案例\u003C\u002F",[103,91943,51397],{"class":51290},[103,91945,51297],{"class":113},[103,91947,91948,91950,91952],{"class":105,"line":1318},[103,91949,52134],{"class":113},[103,91951,5116],{"class":51290},[103,91953,51297],{"class":113},[103,91955,91956,91958],{"class":105,"line":1601},[103,91957,6393],{"class":51290},[103,91959,15562],{"class":113},[103,91961,91962,91964,91966,91968],{"class":105,"line":1606},[103,91963,54685],{"class":162},[103,91965,51427],{"class":113},[103,91967,305],{"class":162},[103,91969,1279],{"class":113},[103,91971,91972,91974,91976,91978],{"class":105,"line":1612},[103,91973,54696],{"class":162},[103,91975,51427],{"class":113},[103,91977,305],{"class":162},[103,91979,1279],{"class":113},[103,91981,91982,91984,91986,91988],{"class":105,"line":1617},[103,91983,72586],{"class":162},[103,91985,51427],{"class":113},[103,91987,60495],{"class":162},[103,91989,1279],{"class":113},[103,91991,91992],{"class":105,"line":1631},[103,91993,2176],{"class":113},[103,91995,91996],{"class":105,"line":1636},[103,91997,2389],{"emptyLinePlaceholder":30},[103,91999,92000,92003],{"class":105,"line":1642},[103,92001,92002],{"class":1952},"    .container",[103,92004,15562],{"class":113},[103,92006,92007,92009,92011,92014,92016],{"class":105,"line":1663},[103,92008,54761],{"class":162},[103,92010,51427],{"class":113},[103,92012,92013],{"class":162},"1200",[103,92015,51482],{"class":109},[103,92017,1279],{"class":113},[103,92019,92020,92022,92024,92026,92028],{"class":105,"line":1668},[103,92021,54696],{"class":162},[103,92023,51427],{"class":113},[103,92025,305],{"class":162},[103,92027,51546],{"class":162},[103,92029,1279],{"class":113},[103,92031,92032],{"class":105,"line":1682},[103,92033,2176],{"class":113},[103,92035,92036],{"class":105,"line":1687},[103,92037,2389],{"emptyLinePlaceholder":30},[103,92039,92040,92043,92046],{"class":105,"line":1716},[103,92041,92042],{"class":1952},"    .video",[103,92044,92045],{"class":51290}," video",[103,92047,15562],{"class":113},[103,92049,92050,92052,92054,92056,92058],{"class":105,"line":1721},[103,92051,54761],{"class":162},[103,92053,51427],{"class":113},[103,92055,424],{"class":162},[103,92057,441],{"class":109},[103,92059,1279],{"class":113},[103,92061,92062,92064,92066,92068,92070,92072],{"class":105,"line":1738},[103,92063,54685],{"class":162},[103,92065,51427],{"class":113},[103,92067,813],{"class":162},[103,92069,51482],{"class":109},[103,92071,4082],{"class":162},[103,92073,1279],{"class":113},[103,92075,92076],{"class":105,"line":1743},[103,92077,2176],{"class":113},[103,92079,92080],{"class":105,"line":1748},[103,92081,2389],{"emptyLinePlaceholder":30},[103,92083,92084,92087],{"class":105,"line":1753},[103,92085,92086],{"class":1952},"    .elevator",[103,92088,15562],{"class":113},[103,92090,92091,92093,92095,92097],{"class":105,"line":1767},[103,92092,54749],{"class":162},[103,92094,51427],{"class":113},[103,92096,86223],{"class":162},[103,92098,1279],{"class":113},[103,92100,92101,92103,92105,92108,92110],{"class":105,"line":1772},[103,92102,54937],{"class":162},[103,92104,51427],{"class":113},[103,92106,92107],{"class":162},"280",[103,92109,51482],{"class":109},[103,92111,1279],{"class":113},[103,92113,92114,92116,92118,92120,92122],{"class":105,"line":2566},[103,92115,86417],{"class":162},[103,92117,51427],{"class":113},[103,92119,813],{"class":162},[103,92121,51482],{"class":109},[103,92123,1279],{"class":113},[103,92125,92126,92128,92130,92132],{"class":105,"line":2580},[103,92127,86230],{"class":162},[103,92129,51427],{"class":113},[103,92131,86235],{"class":162},[103,92133,1279],{"class":113},[103,92135,92136,92138,92140,92142],{"class":105,"line":2588},[103,92137,61711],{"class":162},[103,92139,51427],{"class":113},[103,92141,60832],{"class":162},[103,92143,1279],{"class":113},[103,92145,92146,92148,92150,92152,92154,92156,92158],{"class":105,"line":2593},[103,92147,61967],{"class":162},[103,92149,51427],{"class":113},[103,92151,331],{"class":162},[103,92153,51482],{"class":109},[103,92155,51511],{"class":162},[103,92157,62234],{"class":162},[103,92159,1279],{"class":113},[103,92161,92162,92164,92166,92168,92170],{"class":105,"line":2599},[103,92163,54761],{"class":162},[103,92165,51427],{"class":113},[103,92167,1020],{"class":162},[103,92169,51482],{"class":109},[103,92171,1279],{"class":113},[103,92173,92174],{"class":105,"line":2605},[103,92175,2176],{"class":113},[103,92177,92178],{"class":105,"line":2610},[103,92179,2389],{"emptyLinePlaceholder":30},[103,92181,92182,92184,92186],{"class":105,"line":7938},[103,92183,92086],{"class":1952},[103,92185,1387],{"class":51290},[103,92187,15562],{"class":113},[103,92189,92190,92192,92194,92196],{"class":105,"line":7962},[103,92191,54999],{"class":162},[103,92193,51427],{"class":113},[103,92195,60859],{"class":162},[103,92197,1279],{"class":113},[103,92199,92200,92202,92204,92206,92208],{"class":105,"line":7967},[103,92201,54685],{"class":162},[103,92203,51427],{"class":113},[103,92205,559],{"class":162},[103,92207,51482],{"class":109},[103,92209,1279],{"class":113},[103,92211,92212,92214,92216,92218],{"class":105,"line":7973},[103,92213,63960],{"class":162},[103,92215,51427],{"class":113},[103,92217,54727],{"class":162},[103,92219,1279],{"class":113},[103,92221,92222,92224,92226,92228],{"class":105,"line":8000},[103,92223,57276],{"class":162},[103,92225,51427],{"class":113},[103,92227,51582],{"class":162},[103,92229,1279],{"class":113},[103,92231,92232,92234,92236,92238],{"class":105,"line":8005},[103,92233,57406],{"class":162},[103,92235,51427],{"class":113},[103,92237,62060],{"class":162},[103,92239,1279],{"class":113},[103,92241,92242],{"class":105,"line":8011},[103,92243,2176],{"class":113},[103,92245,92246],{"class":105,"line":8023},[103,92247,2389],{"emptyLinePlaceholder":30},[103,92249,92250,92252,92254,92256],{"class":105,"line":8035},[103,92251,92086],{"class":1952},[103,92253,1387],{"class":51290},[103,92255,64014],{"class":1952},[103,92257,15562],{"class":113},[103,92259,92260,92262,92264,92267],{"class":105,"line":8047},[103,92261,57406],{"class":162},[103,92263,51427],{"class":113},[103,92265,92266],{"class":162},"#1286ff",[103,92268,1279],{"class":113},[103,92270,92271],{"class":105,"line":9706},[103,92272,2176],{"class":113},[103,92274,92275,92277,92279],{"class":105,"line":9731},[103,92276,52407],{"class":113},[103,92278,5116],{"class":51290},[103,92280,51297],{"class":113},[103,92282,92283,92285,92287],{"class":105,"line":9754},[103,92284,51775],{"class":113},[103,92286,51324],{"class":51290},[103,92288,51297],{"class":113},[103,92290,92291],{"class":105,"line":9778},[103,92292,2389],{"emptyLinePlaceholder":30},[103,92294,92295,92297,92299],{"class":105,"line":9783},[103,92296,1023],{"class":113},[103,92298,51790],{"class":51290},[103,92300,51297],{"class":113},[103,92302,92303,92305,92307,92309,92311,92314],{"class":105,"line":9788},[103,92304,52134],{"class":113},[103,92306,51601],{"class":51290},[103,92308,53476],{"class":1952},[103,92310,159],{"class":113},[103,92312,92313],{"class":218},"\"container\"",[103,92315,51297],{"class":113},[103,92317,92318,92320,92322,92324,92326,92329],{"class":105,"line":9793},[103,92319,51331],{"class":113},[103,92321,51601],{"class":51290},[103,92323,53476],{"class":1952},[103,92325,159],{"class":113},[103,92327,92328],{"class":218},"\"header\"",[103,92330,51297],{"class":113},[103,92332,92333,92335,92337,92339,92341,92344],{"class":105,"line":9802},[103,92334,55224],{"class":113},[103,92336,17],{"class":51290},[103,92338,61047],{"class":1952},[103,92340,159],{"class":113},[103,92342,92343],{"class":218},"\"http:\u002F\u002Fpip.itcast.cn\"",[103,92345,51297],{"class":113},[103,92347,92348,92350,92352,92354,92356,92359,92361,92363,92365],{"class":105,"line":9807},[103,92349,55292],{"class":113},[103,92351,1451],{"class":51290},[103,92353,55229],{"class":1952},[103,92355,159],{"class":113},[103,92357,92358],{"class":218},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[103,92360,55237],{"class":1952},[103,92362,159],{"class":113},[103,92364,7642],{"class":218},[103,92366,59117],{"class":113},[103,92368,92369,92371,92373],{"class":105,"line":9813},[103,92370,55397],{"class":113},[103,92372,17],{"class":51290},[103,92374,51297],{"class":113},[103,92376,92377,92379,92381],{"class":105,"line":9834},[103,92378,51766],{"class":113},[103,92380,51601],{"class":51290},[103,92382,51297],{"class":113},[103,92384,92385,92387,92389,92391,92393,92396],{"class":105,"line":9840},[103,92386,51331],{"class":113},[103,92388,51601],{"class":51290},[103,92390,53476],{"class":1952},[103,92392,159],{"class":113},[103,92394,92395],{"class":218},"\"video\"",[103,92397,51297],{"class":113},[103,92399,92400,92402,92404,92406,92408,92411,92414,92416,92418],{"class":105,"line":9854},[103,92401,55224],{"class":113},[103,92403,28173],{"class":51290},[103,92405,55229],{"class":1952},[103,92407,159],{"class":113},[103,92409,92410],{"class":218},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[103,92412,92413],{"class":1952}," controls",[103,92415,55304],{"class":113},[103,92417,28173],{"class":51290},[103,92419,51297],{"class":113},[103,92421,92422,92424,92426],{"class":105,"line":9860},[103,92423,51766],{"class":113},[103,92425,51601],{"class":51290},[103,92427,51297],{"class":113},[103,92429,92430,92432,92434,92436,92438,92441],{"class":105,"line":9887},[103,92431,51331],{"class":113},[103,92433,51601],{"class":51290},[103,92435,53476],{"class":1952},[103,92437,159],{"class":113},[103,92439,92440],{"class":218},"\"elevator\"",[103,92442,51297],{"class":113},[103,92444,92445,92447,92449,92451,92453,92455,92458,92460,92462,92465,92467],{"class":105,"line":9896},[103,92446,55224],{"class":113},[103,92448,17],{"class":51290},[103,92450,61047],{"class":1952},[103,92452,159],{"class":113},[103,92454,64226],{"class":218},[103,92456,92457],{"class":1952}," data-ref",[103,92459,159],{"class":113},[103,92461,92395],{"class":218},[103,92463,92464],{"class":113},">视频介绍\u003C\u002F",[103,92466,17],{"class":51290},[103,92468,51297],{"class":113},[103,92470,92471,92473,92475,92477,92479,92481,92483,92485,92488,92491,92493],{"class":105,"line":9902},[103,92472,55224],{"class":113},[103,92474,17],{"class":51290},[103,92476,61047],{"class":1952},[103,92478,159],{"class":113},[103,92480,64226],{"class":218},[103,92482,92457],{"class":1952},[103,92484,159],{"class":113},[103,92486,92487],{"class":218},"\"intro\"",[103,92489,92490],{"class":113},">课程简介\u003C\u002F",[103,92492,17],{"class":51290},[103,92494,51297],{"class":113},[103,92496,92497,92499,92501,92503,92505,92507,92509,92511,92514,92517,92519],{"class":105,"line":9910},[103,92498,55224],{"class":113},[103,92500,17],{"class":51290},[103,92502,61047],{"class":1952},[103,92504,159],{"class":113},[103,92506,64226],{"class":218},[103,92508,92457],{"class":1952},[103,92510,159],{"class":113},[103,92512,92513],{"class":218},"\"outline\"",[103,92515,92516],{"class":113},">评论列表\u003C\u002F",[103,92518,17],{"class":51290},[103,92520,51297],{"class":113},[103,92522,92523,92525,92527],{"class":105,"line":9915},[103,92524,51766],{"class":113},[103,92526,51601],{"class":51290},[103,92528,51297],{"class":113},[103,92530,92531,92533,92535],{"class":105,"line":16594},[103,92532,52407],{"class":113},[103,92534,51601],{"class":51290},[103,92536,51297],{"class":113},[103,92538,92539,92541,92543,92545,92547,92550,92552,92554],{"class":105,"line":16600},[103,92540,52134],{"class":113},[103,92542,51803],{"class":51290},[103,92544,55229],{"class":1952},[103,92546,159],{"class":113},[103,92548,92549],{"class":218},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[103,92551,55304],{"class":113},[103,92553,51803],{"class":51290},[103,92555,51297],{"class":113},[103,92557,92558,92560,92562],{"class":105,"line":16623},[103,92559,52134],{"class":113},[103,92561,51803],{"class":51290},[103,92563,51297],{"class":113},[103,92565,92566],{"class":105,"line":16629},[103,92567,92568],{"class":172},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[103,92570,92571,92573,92575,92577,92579,92581,92583,92586],{"class":105,"line":16652},[103,92572,11211],{"class":109},[103,92574,92045],{"class":162},[103,92576,13554],{"class":109},[103,92578,54386],{"class":113},[103,92580,54389],{"class":1952},[103,92582,114],{"class":113},[103,92584,92585],{"class":218},"'video'",[103,92587,120],{"class":113},[103,92589,92590],{"class":105,"line":16666},[103,92591,92592],{"class":172},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[103,92594,92595,92598,92600,92602,92604,92607,92609],{"class":105,"line":16686},[103,92596,92597],{"class":113},"    video.ontimeupdate ",[103,92599,159],{"class":109},[103,92601,88345],{"class":113},[103,92603,91163],{"class":1952},[103,92605,92606],{"class":113},"(() ",[103,92608,84712],{"class":109},[103,92610,15562],{"class":113},[103,92612,92613],{"class":105,"line":16692},[103,92614,92615],{"class":172},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[103,92617,92618],{"class":105,"line":16703},[103,92619,92620],{"class":172},"      \u002F\u002F 控制台输出当前的时间\n",[103,92622,92623,92626],{"class":105,"line":16726},[103,92624,92625],{"class":172},"      \u002F\u002F console.log(video.currentTime)",[103,92627,92628],{"class":172},"  \u002F\u002F获得当前的视频时间\n",[103,92630,92631],{"class":105,"line":16748},[103,92632,92633],{"class":172},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[103,92635,92636,92638,92640,92642,92645],{"class":105,"line":16753},[103,92637,74673],{"class":113},[103,92639,71644],{"class":1952},[103,92641,114],{"class":113},[103,92643,92644],{"class":218},"'currentTime'",[103,92646,92647],{"class":113},", video.currentTime)\n",[103,92649,92650,92652,92654],{"class":105,"line":16759},[103,92651,54525],{"class":113},[103,92653,6400],{"class":162},[103,92655,120],{"class":113},[103,92657,92658],{"class":105,"line":16773},[103,92659,92660],{"class":172},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[103,92662,92663,92666,92669,92671,92674,92676],{"class":105,"line":16786},[103,92664,92665],{"class":113},"    video.",[103,92667,92668],{"class":1952},"onloadeddata",[103,92670,13554],{"class":109},[103,92672,92673],{"class":113}," () ",[103,92675,84712],{"class":109},[103,92677,15562],{"class":113},[103,92679,92680],{"class":105,"line":16791},[103,92681,60002],{"class":172},[103,92683,92684],{"class":105,"line":16805},[103,92685,92686],{"class":172},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[103,92688,92689,92692,92694,92697,92699,92701,92703,92705,92707],{"class":105,"line":16810},[103,92690,92691],{"class":113},"      video.currentTime ",[103,92693,159],{"class":109},[103,92695,92696],{"class":113}," localStorage.",[103,92698,71675],{"class":1952},[103,92700,114],{"class":113},[103,92702,92644],{"class":218},[103,92704,13704],{"class":113},[103,92706,71347],{"class":109},[103,92708,47323],{"class":162},[103,92710,92711],{"class":105,"line":16816},[103,92712,2176],{"class":113},[103,92714,92715,92717,92719],{"class":105,"line":16821},[103,92716,52407],{"class":113},[103,92718,51803],{"class":51290},[103,92720,51297],{"class":113},[103,92722,92723,92725,92727],{"class":105,"line":16835},[103,92724,51775],{"class":113},[103,92726,51790],{"class":51290},[103,92728,51297],{"class":113},[103,92730,92731],{"class":105,"line":16840},[103,92732,2389],{"emptyLinePlaceholder":30},[103,92734,92735,92737,92739],{"class":105,"line":16845},[103,92736,51775],{"class":113},[103,92738,50625],{"class":51290},[103,92740,51297],{"class":113},[5116,92742,92743],{},"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":24,"searchDepth":25,"depth":25,"links":92745},[92746,92751,92755,92756,92757,92762,92767,92768,92769,92770,92777,92782,92783,92793,92797,92798,92802],{"id":76681,"depth":25,"text":76682,"children":92747},[92748,92749,92750],{"id":76685,"depth":1168,"text":76686},{"id":76710,"depth":1168,"text":76711},{"id":76722,"depth":1168,"text":76723},{"id":76734,"depth":25,"text":76735,"children":92752},[92753,92754],{"id":76738,"depth":1168,"text":76739},{"id":76753,"depth":1168,"text":76754},{"id":76805,"depth":25,"text":76806},{"id":76849,"depth":25,"text":76850},{"id":76866,"depth":25,"text":76867,"children":92758},[92759,92760,92761],{"id":76870,"depth":1168,"text":76871},{"id":76883,"depth":1168,"text":76884},{"id":76988,"depth":1168,"text":76989},{"id":77277,"depth":25,"text":77278,"children":92763},[92764,92765,92766],{"id":77281,"depth":1168,"text":77282},{"id":77724,"depth":1168,"text":77725},{"id":78135,"depth":1168,"text":78136},{"id":78198,"depth":25,"text":78199},{"id":78277,"depth":25,"text":78278},{"id":78370,"depth":25,"text":78371},{"id":80215,"depth":25,"text":80216,"children":92771},[92772,92773,92774,92775,92776],{"id":80219,"depth":1168,"text":80220},{"id":80231,"depth":1168,"text":80232},{"id":80450,"depth":1168,"text":80451},{"id":80468,"depth":1168,"text":80469},{"id":80528,"depth":1168,"text":80529},{"id":84796,"depth":25,"text":84797,"children":92778},[92779,92780,92781],{"id":84800,"depth":1168,"text":84801},{"id":84818,"depth":1168,"text":84819},{"id":84844,"depth":1168,"text":84845},{"id":84853,"depth":25,"text":84854},{"id":84875,"depth":25,"text":84876,"children":92784},[92785,92786,92787,92788,92789,92790,92791,92792],{"id":84879,"depth":1168,"text":84880},{"id":85140,"depth":1168,"text":85141},{"id":85326,"depth":1168,"text":85327},{"id":85693,"depth":1168,"text":85694},{"id":85809,"depth":1168,"text":85810},{"id":85845,"depth":1168,"text":85846},{"id":85892,"depth":1168,"text":85893},{"id":85926,"depth":1168,"text":85927},{"id":87289,"depth":25,"text":87290,"children":92794},[92795,92796],{"id":87293,"depth":1168,"text":87294},{"id":87330,"depth":1168,"text":87331},{"id":88685,"depth":25,"text":88686},{"id":89056,"depth":25,"text":89057,"children":92799},[92800,92801],{"id":89060,"depth":1168,"text":89061},{"id":89094,"depth":1168,"text":89095},{"id":89823,"depth":25,"text":89824,"children":92803},[92804,92805,92806,92807],{"id":89827,"depth":1168,"text":89828},{"id":90785,"depth":1168,"text":90786},{"id":91727,"depth":1168,"text":91728},{"id":91801,"depth":1168,"text":91802},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76670,"description":27},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92814,"title":92815,"body":92816,"description":92827,"extension":28,"meta":92828,"navigation":30,"path":92830,"seo":92831,"stem":92832,"__hash__":92833},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92817,"toc":92825},[92818],[14,92819,92820,92821],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[17,92822,92823],{"href":92823,"rel":92824},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[21],{"title":24,"searchDepth":25,"depth":25,"links":92826},[],"三件套第三套学习",{"category":92829},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92815,"description":92827},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92835,"title":92836,"body":92837,"description":27,"extension":28,"meta":92942,"navigation":30,"path":92943,"seo":92944,"stem":92945,"__hash__":92946},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92838,"toc":92937},[92839,92846,92849,92852,92855,92859,92868,92871,92874,92878,92887,92890,92894,92897,92917,92920,92934],[14,92840,92841],{},[17,92842,92845],{"href":92843,"rel":92844},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[21],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92847,92836],{"id":92848},"_1安装",[14,92850,92851],{},"numpy是科学计算基础库,底层是C语言",[14,92853,92854],{},"三种方式：",[45,92856,92858],{"id":92857},"_11-通过pip安装","1.1 通过pip安装",[94,92860,92862],{"className":30368,"code":92861,"language":30370,"meta":24,"style":24},"pip install numpy\n",[100,92863,92864],{"__ignoreMap":24},[103,92865,92866],{"class":105,"line":106},[103,92867,92861],{"class":113},[14,92869,92870],{},"首选方式，自动处理依赖项",[14,92872,92873],{},"在提示系统命令符中使用cmd",[45,92875,92877],{"id":92876},"_12-通过anaconda安装","1.2 通过Anaconda安装",[94,92879,92881],{"className":30368,"code":92880,"language":30370,"meta":24,"style":24},"conda install numpy\n",[100,92882,92883],{"__ignoreMap":24},[103,92884,92885],{"class":105,"line":106},[103,92886,92880],{"class":113},[14,92888,92889],{},"自动解决环境依赖",[45,92891,92893],{"id":92892},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92895,92896],{},"对于Debian\u002FUbuntu",[94,92898,92900],{"className":30368,"code":92899,"language":30370,"meta":24,"style":24},"sudo apt-get install python3-numpy\n",[100,92901,92902],{"__ignoreMap":24},[103,92903,92904,92907,92909,92912,92914],{"class":105,"line":106},[103,92905,92906],{"class":113},"sudo apt",[103,92908,645],{"class":109},[103,92910,92911],{"class":113},"get install python3",[103,92913,645],{"class":109},[103,92915,92916],{"class":113},"numpy\n",[14,92918,92919],{},"对于Fedora:",[94,92921,92923],{"className":30368,"code":92922,"language":30370,"meta":24,"style":24},"sudo dnf install python3-numpy\n",[100,92924,92925],{"__ignoreMap":24},[103,92926,92927,92930,92932],{"class":105,"line":106},[103,92928,92929],{"class":113},"sudo dnf install python3",[103,92931,645],{"class":109},[103,92933,92916],{"class":113},[5116,92935,92936],{},"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":24,"searchDepth":25,"depth":25,"links":92938},[92939,92940,92941],{"id":92857,"depth":25,"text":92858},{"id":92876,"depth":25,"text":92877},{"id":92892,"depth":25,"text":92893},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92836,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92948,"title":92949,"body":92950,"description":27,"extension":28,"meta":93063,"navigation":30,"path":93064,"seo":93065,"stem":93066,"__hash__":93067},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92951,"toc":93061},[92952,92955,92958,92961,92964,92967,92970,92973,92976,92979,93055,93058],[10,92953,92949],{"id":92954},"_10算数函数",[14,92956,92957],{},"加减乘除运算跟python基础语法没区别",[14,92959,92960],{},"除了python那种方法外还可以使用函数",[14,92962,92963],{},"加：np.add(a,b)",[14,92965,92966],{},"减：np.subtract(a,b)",[14,92968,92969],{},"乘：np.multiply(a,b)",[14,92971,92972],{},"除：np.divide(a,b) == a\u002Fb",[14,92974,92975],{},"取余：np.mod(a,b) == a%b",[14,92977,92978],{},"必须会的用法：",[94,92980,92982],{"className":30368,"code":92981,"language":30370,"meta":24,"style":24},"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",[100,92983,92984,93006,93027,93037,93050],{"__ignoreMap":24},[103,92985,92986,92988,92990,92993,92995,92998,93000,93002,93004],{"class":105,"line":106},[103,92987,17],{"class":113},[103,92989,159],{"class":109},[103,92991,92992],{"class":113},"np.arange(",[103,92994,533],{"class":162},[103,92996,92997],{"class":113},").reshape(",[103,92999,185],{"class":162},[103,93001,491],{"class":113},[103,93003,185],{"class":162},[103,93005,120],{"class":113},[103,93007,93008,93010,93012,93015,93017,93019,93021,93023,93025],{"class":105,"line":25},[103,93009,376],{"class":113},[103,93011,159],{"class":109},[103,93013,93014],{"class":113},"np.array([",[103,93016,559],{"class":162},[103,93018,491],{"class":113},[103,93020,559],{"class":162},[103,93022,491],{"class":113},[103,93024,559],{"class":162},[103,93026,4646],{"class":113},[103,93028,93029,93032,93034],{"class":105,"line":1168},[103,93030,93031],{"class":113},"result",[103,93033,159],{"class":109},[103,93035,93036],{"class":113},"np.empty_like(a)\n",[103,93038,93039,93042,93045,93047],{"class":105,"line":1183},[103,93040,93041],{"class":113},"np.add(a,b,",[103,93043,93044],{"class":5206},"out",[103,93046,159],{"class":109},[103,93048,93049],{"class":113},"result)\n",[103,93051,93052],{"class":105,"line":1189},[103,93053,93054],{"class":113},"result\n",[14,93056,93057],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5116,93059,93060],{},"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":24,"searchDepth":25,"depth":25,"links":93062},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92949,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93069,"title":93070,"body":93071,"description":27,"extension":28,"meta":93833,"navigation":30,"path":93834,"seo":93835,"stem":93836,"__hash__":93837},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93072,"toc":93820},[93073,93076,93079,93082,93086,93125,93129,93173,93233,93237,93240,93279,93282,93327,93331,93367,93371,93440,93444,93508,93512,93515,93518,93521,93524,93560,93564,93604,93608,93680,93683,93687,93750,93754,93817],[10,93074,93070],{"id":93075},"_11统计函数",[14,93077,93078],{},"sum max min mean",[14,93080,93081],{},"这些有axis参数，可以指定方向",[45,93083,93085],{"id":93084},"_111-sum求和函数","11.1 sum()求和函数",[94,93087,93089],{"className":30368,"code":93088,"language":30370,"meta":24,"style":24},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[100,93090,93091,93096,93117],{"__ignoreMap":24},[103,93092,93093],{"class":105,"line":106},[103,93094,93095],{"class":172},"#创建一维数组\n",[103,93097,93098,93100,93102,93105,93107,93109,93111,93113,93115],{"class":105,"line":25},[103,93099,17],{"class":113},[103,93101,159],{"class":109},[103,93103,93104],{"class":113},"np.random.randint(",[103,93106,331],{"class":162},[103,93108,491],{"class":113},[103,93110,424],{"class":162},[103,93112,491],{"class":113},[103,93114,813],{"class":162},[103,93116,120],{"class":113},[103,93118,93119,93122],{"class":105,"line":1168},[103,93120,93121],{"class":113},"np.sum(a)",[103,93123,93124],{"class":172},"#求和\n",[45,93126,93128],{"id":93127},"_112-max求最大值函数","11.2 max()求最大值函数",[94,93130,93132],{"className":30368,"code":93131,"language":30370,"meta":24,"style":24},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[100,93133,93134,93138,93158,93163,93168],{"__ignoreMap":24},[103,93135,93136],{"class":105,"line":106},[103,93137,93095],{"class":172},[103,93139,93140,93142,93144,93146,93148,93150,93152,93154,93156],{"class":105,"line":25},[103,93141,17],{"class":113},[103,93143,159],{"class":109},[103,93145,93104],{"class":113},[103,93147,331],{"class":162},[103,93149,491],{"class":113},[103,93151,424],{"class":162},[103,93153,491],{"class":113},[103,93155,813],{"class":162},[103,93157,120],{"class":113},[103,93159,93160],{"class":105,"line":1168},[103,93161,93162],{"class":113},"np.max(a)\n",[103,93164,93165],{"class":105,"line":1183},[103,93166,93167],{"class":172},"#最大索引(求最大元素的索引)arg\n",[103,93169,93170],{"class":105,"line":1189},[103,93171,93172],{"class":113},"np.argmax(a)\n",[94,93174,93176],{"className":30368,"code":93175,"language":30370,"meta":24,"style":24},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[100,93177,93178,93199,93219,93223],{"__ignoreMap":24},[103,93179,93180,93182,93184,93187,93189,93191,93193,93195,93197],{"class":105,"line":106},[103,93181,10909],{"class":113},[103,93183,159],{"class":109},[103,93185,93186],{"class":113}," np.array([",[103,93188,331],{"class":162},[103,93190,12425],{"class":113},[103,93192,432],{"class":162},[103,93194,12425],{"class":113},[103,93196,185],{"class":162},[103,93198,4646],{"class":113},[103,93200,93201,93203,93205,93207,93209,93211,93213,93215,93217],{"class":105,"line":25},[103,93202,10935],{"class":113},[103,93204,159],{"class":109},[103,93206,93186],{"class":113},[103,93208,185],{"class":162},[103,93210,12425],{"class":113},[103,93212,191],{"class":162},[103,93214,12425],{"class":113},[103,93216,406],{"class":162},[103,93218,4646],{"class":113},[103,93220,93221],{"class":105,"line":1168},[103,93222,2389],{"emptyLinePlaceholder":30},[103,93224,93225,93227,93230],{"class":105,"line":1183},[103,93226,30405],{"class":162},[103,93228,93229],{"class":113},"(np.maximum(a, b))   ",[103,93231,93232],{"class":172},"# [3 5 4]，每个位置上取较大值\n",[45,93234,93236],{"id":93235},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93238,93239],{},"①一维数组：",[94,93241,93243],{"className":30368,"code":93242,"language":30370,"meta":24,"style":24},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[100,93244,93245,93249,93269,93274],{"__ignoreMap":24},[103,93246,93247],{"class":105,"line":106},[103,93248,93095],{"class":172},[103,93250,93251,93253,93255,93257,93259,93261,93263,93265,93267],{"class":105,"line":25},[103,93252,17],{"class":113},[103,93254,159],{"class":109},[103,93256,93104],{"class":113},[103,93258,331],{"class":162},[103,93260,491],{"class":113},[103,93262,424],{"class":162},[103,93264,491],{"class":113},[103,93266,813],{"class":162},[103,93268,120],{"class":113},[103,93270,93271],{"class":105,"line":1168},[103,93272,93273],{"class":172},"#求平均值\n",[103,93275,93276],{"class":105,"line":1183},[103,93277,93278],{"class":113},"np.mean(a)\n",[14,93280,93281],{},"②二维数组",[94,93283,93285],{"className":30368,"code":93284,"language":30370,"meta":24,"style":24},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[100,93286,93287,93292,93317,93322],{"__ignoreMap":24},[103,93288,93289],{"class":105,"line":106},[103,93290,93291],{"class":172},"#二维数组\n",[103,93293,93294,93297,93299,93301,93303,93305,93307,93309,93311,93313,93315],{"class":105,"line":25},[103,93295,93296],{"class":113},"aa",[103,93298,159],{"class":109},[103,93300,92992],{"class":113},[103,93302,331],{"class":162},[103,93304,491],{"class":113},[103,93306,636],{"class":162},[103,93308,92997],{"class":113},[103,93310,185],{"class":162},[103,93312,491],{"class":113},[103,93314,406],{"class":162},[103,93316,120],{"class":113},[103,93318,93319],{"class":105,"line":1168},[103,93320,93321],{"class":172},"#对数组中的所有数求平均\n",[103,93323,93324],{"class":105,"line":1183},[103,93325,93326],{"class":113},"np.mean(aa)\n",[45,93328,93330],{"id":93329},"_114-median求中位数函数","11.4 median()求中位数函数",[94,93332,93334],{"className":30368,"code":93333,"language":30370,"meta":24,"style":24},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[100,93335,93336,93341,93357,93362],{"__ignoreMap":24},[103,93337,93338],{"class":105,"line":106},[103,93339,93340],{"class":172},"#求中位数\n",[103,93342,93343,93345,93347,93349,93351,93353,93355],{"class":105,"line":25},[103,93344,376],{"class":113},[103,93346,159],{"class":109},[103,93348,92992],{"class":113},[103,93350,331],{"class":162},[103,93352,491],{"class":113},[103,93354,559],{"class":162},[103,93356,120],{"class":113},[103,93358,93359],{"class":105,"line":1168},[103,93360,93361],{"class":113},"np.median(b)\n",[103,93363,93364],{"class":105,"line":1183},[103,93365,93366],{"class":172},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[45,93368,93370],{"id":93369},"_115-power求幂运算函数","11.5 power()求幂运算函数",[94,93372,93374],{"className":30368,"code":93373,"language":30370,"meta":24,"style":24},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[100,93375,93376,93392,93397,93402,93411,93416,93425],{"__ignoreMap":24},[103,93377,93378,93380,93382,93384,93386,93388,93390],{"class":105,"line":106},[103,93379,376],{"class":113},[103,93381,159],{"class":109},[103,93383,92992],{"class":113},[103,93385,331],{"class":162},[103,93387,491],{"class":113},[103,93389,559],{"class":162},[103,93391,120],{"class":113},[103,93393,93394],{"class":105,"line":25},[103,93395,93396],{"class":172},"#幂运算\n",[103,93398,93399],{"class":105,"line":1168},[103,93400,93401],{"class":172},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[103,93403,93404,93407,93409],{"class":105,"line":1183},[103,93405,93406],{"class":113},"np.power(b,",[103,93408,191],{"class":162},[103,93410,120],{"class":113},[103,93412,93413],{"class":105,"line":1189},[103,93414,93415],{"class":172},"#或者以下代码，将数据存储起来\n",[103,93417,93418,93420,93422],{"class":105,"line":1203},[103,93419,958],{"class":113},[103,93421,159],{"class":109},[103,93423,93424],{"class":113},"np.empty_like(b)\n",[103,93426,93427,93429,93431,93433,93435,93437],{"class":105,"line":1209},[103,93428,93406],{"class":113},[103,93430,191],{"class":162},[103,93432,491],{"class":113},[103,93434,93044],{"class":5206},[103,93436,159],{"class":109},[103,93438,93439],{"class":113},"y)\n",[45,93441,93443],{"id":93442},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[94,93445,93447],{"className":30368,"code":93446,"language":30370,"meta":24,"style":24},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[100,93448,93449,93465,93470,93475,93479,93497],{"__ignoreMap":24},[103,93450,93451,93453,93455,93457,93459,93461,93463],{"class":105,"line":106},[103,93452,376],{"class":113},[103,93454,159],{"class":109},[103,93456,92992],{"class":113},[103,93458,331],{"class":162},[103,93460,491],{"class":113},[103,93462,559],{"class":162},[103,93464,120],{"class":113},[103,93466,93467],{"class":105,"line":25},[103,93468,93469],{"class":172},"#开方\n",[103,93471,93472],{"class":105,"line":1168},[103,93473,93474],{"class":113},"np.sqrt(b)\n",[103,93476,93477],{"class":105,"line":1183},[103,93478,93415],{"class":172},[103,93480,93481,93483,93485,93488,93491,93493,93495],{"class":105,"line":1189},[103,93482,958],{"class":113},[103,93484,159],{"class":109},[103,93486,93487],{"class":113},"np.empty_like(b,",[103,93489,93490],{"class":5206},"dtype",[103,93492,159],{"class":109},[103,93494,153],{"class":162},[103,93496,120],{"class":113},[103,93498,93499,93502,93504,93506],{"class":105,"line":1203},[103,93500,93501],{"class":113},"np.sqrt(b,",[103,93503,93044],{"class":5206},[103,93505,159],{"class":109},[103,93507,93439],{"class":113},[45,93509,93511],{"id":93510},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93513,93514],{},"对数组中的元素累计求和，可指定轴",[14,93516,93517],{},"#累计求和的意思是：",[14,93519,93520],{},"a = np.array([1, 2, 3, 4])",[14,93522,93523],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[94,93525,93527],{"className":30368,"code":93526,"language":30370,"meta":24,"style":24},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[100,93528,93529,93545,93550,93555],{"__ignoreMap":24},[103,93530,93531,93533,93535,93537,93539,93541,93543],{"class":105,"line":106},[103,93532,376],{"class":113},[103,93534,159],{"class":109},[103,93536,92992],{"class":113},[103,93538,331],{"class":162},[103,93540,491],{"class":113},[103,93542,559],{"class":162},[103,93544,120],{"class":113},[103,93546,93547],{"class":105,"line":25},[103,93548,93549],{"class":113},"np.cumsum(b)\n",[103,93551,93552],{"class":105,"line":1168},[103,93553,93554],{"class":172},"#结果：\n",[103,93556,93557],{"class":105,"line":1183},[103,93558,93559],{"class":172},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[45,93561,93563],{"id":93562},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[94,93565,93567],{"className":30368,"code":93566,"language":30370,"meta":24,"style":24},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[100,93568,93569,93585,93590,93595,93599],{"__ignoreMap":24},[103,93570,93571,93573,93575,93577,93579,93581,93583],{"class":105,"line":106},[103,93572,376],{"class":113},[103,93574,159],{"class":109},[103,93576,92992],{"class":113},[103,93578,331],{"class":162},[103,93580,491],{"class":113},[103,93582,559],{"class":162},[103,93584,120],{"class":113},[103,93586,93587],{"class":105,"line":25},[103,93588,93589],{"class":172},"#对数组中的元素累计求积，可指定轴\n",[103,93591,93592],{"class":105,"line":1168},[103,93593,93594],{"class":113},"np.cumprod(b)\n",[103,93596,93597],{"class":105,"line":1183},[103,93598,93554],{"class":172},[103,93600,93601],{"class":105,"line":1189},[103,93602,93603],{"class":172},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[45,93605,93607],{"id":93606},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[94,93609,93611],{"className":30368,"code":93610,"language":30370,"meta":24,"style":24},"#删除数组中的重复数据，并对数据进行排序\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",[100,93612,93613,93618,93666,93671,93675],{"__ignoreMap":24},[103,93614,93615],{"class":105,"line":106},[103,93616,93617],{"class":172},"#删除数组中的重复数据，并对数据进行排序\n",[103,93619,93620,93622,93624,93626,93628,93630,93632,93634,93636,93638,93640,93642,93644,93646,93648,93650,93652,93654,93656,93658,93660,93662,93664],{"class":105,"line":25},[103,93621,17],{"class":113},[103,93623,159],{"class":109},[103,93625,93014],{"class":113},[103,93627,331],{"class":162},[103,93629,491],{"class":113},[103,93631,191],{"class":162},[103,93633,491],{"class":113},[103,93635,185],{"class":162},[103,93637,491],{"class":113},[103,93639,611],{"class":162},[103,93641,491],{"class":113},[103,93643,185],{"class":162},[103,93645,491],{"class":113},[103,93647,559],{"class":162},[103,93649,491],{"class":113},[103,93651,311],{"class":162},[103,93653,491],{"class":113},[103,93655,305],{"class":162},[103,93657,491],{"class":113},[103,93659,888],{"class":162},[103,93661,491],{"class":113},[103,93663,406],{"class":162},[103,93665,4646],{"class":113},[103,93667,93668],{"class":105,"line":1168},[103,93669,93670],{"class":113},"np.unique(a)\n",[103,93672,93673],{"class":105,"line":1183},[103,93674,93554],{"class":172},[103,93676,93677],{"class":105,"line":1189},[103,93678,93679],{"class":172},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93681,93682],{},"升序形式排序",[45,93684,93686],{"id":93685},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[94,93688,93690],{"className":30368,"code":93689,"language":30370,"meta":24,"style":24},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[100,93691,93692,93740,93745],{"__ignoreMap":24},[103,93693,93694,93696,93698,93700,93702,93704,93706,93708,93710,93712,93714,93716,93718,93720,93722,93724,93726,93728,93730,93732,93734,93736,93738],{"class":105,"line":106},[103,93695,17],{"class":113},[103,93697,159],{"class":109},[103,93699,93014],{"class":113},[103,93701,331],{"class":162},[103,93703,491],{"class":113},[103,93705,191],{"class":162},[103,93707,491],{"class":113},[103,93709,185],{"class":162},[103,93711,491],{"class":113},[103,93713,611],{"class":162},[103,93715,491],{"class":113},[103,93717,185],{"class":162},[103,93719,491],{"class":113},[103,93721,559],{"class":162},[103,93723,491],{"class":113},[103,93725,311],{"class":162},[103,93727,491],{"class":113},[103,93729,305],{"class":162},[103,93731,491],{"class":113},[103,93733,888],{"class":162},[103,93735,491],{"class":113},[103,93737,406],{"class":162},[103,93739,4646],{"class":113},[103,93741,93742],{"class":105,"line":25},[103,93743,93744],{"class":172},"#返回数组中非零元素的索引\n",[103,93746,93747],{"class":105,"line":1168},[103,93748,93749],{"class":113},"np.nonzero(a)\n",[45,93751,93753],{"id":93752},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[94,93755,93757],{"className":30368,"code":93756,"language":30370,"meta":24,"style":24},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[100,93758,93759,93807,93812],{"__ignoreMap":24},[103,93760,93761,93763,93765,93767,93769,93771,93773,93775,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795,93797,93799,93801,93803,93805],{"class":105,"line":106},[103,93762,17],{"class":113},[103,93764,159],{"class":109},[103,93766,93014],{"class":113},[103,93768,331],{"class":162},[103,93770,491],{"class":113},[103,93772,191],{"class":162},[103,93774,491],{"class":113},[103,93776,185],{"class":162},[103,93778,491],{"class":113},[103,93780,611],{"class":162},[103,93782,491],{"class":113},[103,93784,185],{"class":162},[103,93786,491],{"class":113},[103,93788,559],{"class":162},[103,93790,491],{"class":113},[103,93792,311],{"class":162},[103,93794,491],{"class":113},[103,93796,305],{"class":162},[103,93798,491],{"class":113},[103,93800,888],{"class":162},[103,93802,491],{"class":113},[103,93804,406],{"class":162},[103,93806,4646],{"class":113},[103,93808,93809],{"class":105,"line":25},[103,93810,93811],{"class":172},"#计算一组数中最大值与最小值的差，可指定轴\n",[103,93813,93814],{"class":105,"line":1168},[103,93815,93816],{"class":113},"np.ptp(a)\n",[5116,93818,93819],{},"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":24,"searchDepth":25,"depth":25,"links":93821},[93822,93823,93824,93825,93826,93827,93828,93829,93830,93831,93832],{"id":93084,"depth":25,"text":93085},{"id":93127,"depth":25,"text":93128},{"id":93235,"depth":25,"text":93236},{"id":93329,"depth":25,"text":93330},{"id":93369,"depth":25,"text":93370},{"id":93442,"depth":25,"text":93443},{"id":93510,"depth":25,"text":93511},{"id":93562,"depth":25,"text":93563},{"id":93606,"depth":25,"text":93607},{"id":93685,"depth":25,"text":93686},{"id":93752,"depth":25,"text":93753},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93070,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93839,"title":93840,"body":93841,"description":27,"extension":28,"meta":94496,"navigation":30,"path":94497,"seo":94498,"stem":94499,"__hash__":94500},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93842,"toc":94484},[93843,93846,93850,93853,94069,94073,94076,94285,94289,94355,94360,94364,94367,94370,94408,94412,94415,94420,94424,94427,94430,94435,94439,94442,94446,94449,94452,94457,94461,94464,94467,94472,94476,94481],[10,93844,93840],{"id":93845},"_12其他常用函数",[45,93847,93849],{"id":93848},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93851,93852],{},"将数组的数据按照行列复制扩展",[94,93854,93856],{"className":30368,"code":93855,"language":30370,"meta":24,"style":24},"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",[100,93857,93858,93874,93883,93887,93892,93897,93910,93914,93919,93924,93929,93933,93938,93962,93974,93978,93982,93987,93992,93997,94002,94006,94019,94023,94027,94032,94037,94042,94047,94052,94056,94060,94065],{"__ignoreMap":24},[103,93859,93860,93862,93864,93866,93868,93870,93872],{"class":105,"line":106},[103,93861,17],{"class":113},[103,93863,159],{"class":109},[103,93865,92992],{"class":113},[103,93867,331],{"class":162},[103,93869,491],{"class":113},[103,93871,432],{"class":162},[103,93873,120],{"class":113},[103,93875,93876,93879,93881],{"class":105,"line":25},[103,93877,93878],{"class":113},"np.tile(a,",[103,93880,191],{"class":162},[103,93882,120],{"class":113},[103,93884,93885],{"class":105,"line":1168},[103,93886,93554],{"class":172},[103,93888,93889],{"class":105,"line":1183},[103,93890,93891],{"class":172},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[103,93893,93894],{"class":105,"line":1189},[103,93895,93896],{"class":172},"#行复制两次，列复制三次\n",[103,93898,93899,93902,93904,93906,93908],{"class":105,"line":1203},[103,93900,93901],{"class":113},"np.tile(a,(",[103,93903,191],{"class":162},[103,93905,491],{"class":113},[103,93907,185],{"class":162},[103,93909,30487],{"class":113},[103,93911,93912],{"class":105,"line":1209},[103,93913,93554],{"class":172},[103,93915,93916],{"class":105,"line":1300},[103,93917,93918],{"class":218},"'''\n",[103,93920,93921],{"class":105,"line":1306},[103,93922,93923],{"class":218},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[103,93925,93926],{"class":105,"line":1318},[103,93927,93928],{"class":218},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[103,93930,93931],{"class":105,"line":1601},[103,93932,93918],{"class":218},[103,93934,93935],{"class":105,"line":1606},[103,93936,93937],{"class":172},"#创建二维数组\n",[103,93939,93940,93942,93944,93946,93948,93950,93952,93954,93956,93958,93960],{"class":105,"line":1612},[103,93941,93296],{"class":113},[103,93943,159],{"class":109},[103,93945,92992],{"class":113},[103,93947,331],{"class":162},[103,93949,491],{"class":113},[103,93951,636],{"class":162},[103,93953,92997],{"class":113},[103,93955,406],{"class":162},[103,93957,491],{"class":113},[103,93959,185],{"class":162},[103,93961,120],{"class":113},[103,93963,93964,93967,93969,93971],{"class":105,"line":1617},[103,93965,93966],{"class":113},"np.tile(aa,",[103,93968,191],{"class":162},[103,93970,542],{"class":113},[103,93972,93973],{"class":172},"#一个数的时候就是行\n",[103,93975,93976],{"class":105,"line":1631},[103,93977,93554],{"class":172},[103,93979,93980],{"class":105,"line":1636},[103,93981,93918],{"class":218},[103,93983,93984],{"class":105,"line":1642},[103,93985,93986],{"class":218},"array([[ 1,  2,  3,  1,  2,  3],\n",[103,93988,93989],{"class":105,"line":1663},[103,93990,93991],{"class":218},"       [ 4,  5,  6,  4,  5,  6],\n",[103,93993,93994],{"class":105,"line":1668},[103,93995,93996],{"class":218},"       [ 7,  8,  9,  7,  8,  9],\n",[103,93998,93999],{"class":105,"line":1682},[103,94000,94001],{"class":218},"       [10, 11, 12, 10, 11, 12]])\n",[103,94003,94004],{"class":105,"line":1687},[103,94005,93918],{"class":218},[103,94007,94008,94011,94013,94015,94017],{"class":105,"line":1716},[103,94009,94010],{"class":113},"np.tile(aa,(",[103,94012,191],{"class":162},[103,94014,491],{"class":113},[103,94016,185],{"class":162},[103,94018,30487],{"class":113},[103,94020,94021],{"class":105,"line":1721},[103,94022,93554],{"class":172},[103,94024,94025],{"class":105,"line":1738},[103,94026,93918],{"class":218},[103,94028,94029],{"class":105,"line":1743},[103,94030,94031],{"class":218},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[103,94033,94034],{"class":105,"line":1748},[103,94035,94036],{"class":218},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[103,94038,94039],{"class":105,"line":1753},[103,94040,94041],{"class":218},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[103,94043,94044],{"class":105,"line":1767},[103,94045,94046],{"class":218},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[103,94048,94049],{"class":105,"line":1772},[103,94050,94051],{"class":218},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[103,94053,94054],{"class":105,"line":2566},[103,94055,94036],{"class":218},[103,94057,94058],{"class":105,"line":2580},[103,94059,94041],{"class":218},[103,94061,94062],{"class":105,"line":2588},[103,94063,94064],{"class":218},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[103,94066,94067],{"class":105,"line":2593},[103,94068,93918],{"class":218},[45,94070,94072],{"id":94071},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94074,94075],{},"repeat()将数组中的每个元素重复若干次",[94,94077,94079],{"className":30368,"code":94078,"language":30370,"meta":24,"style":24},"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",[100,94080,94081,94097,94106,94110,94115,94139,94144,94153,94157,94162,94166,94171,94187,94191,94195,94200,94205,94210,94214,94219,94223,94228,94233,94237,94253,94257,94261,94266,94271,94276,94281],{"__ignoreMap":24},[103,94082,94083,94085,94087,94089,94091,94093,94095],{"class":105,"line":106},[103,94084,17],{"class":113},[103,94086,159],{"class":109},[103,94088,92992],{"class":113},[103,94090,331],{"class":162},[103,94092,491],{"class":113},[103,94094,432],{"class":162},[103,94096,120],{"class":113},[103,94098,94099,94102,94104],{"class":105,"line":25},[103,94100,94101],{"class":113},"np.repeat(a,",[103,94103,185],{"class":162},[103,94105,120],{"class":113},[103,94107,94108],{"class":105,"line":1168},[103,94109,93554],{"class":172},[103,94111,94112],{"class":105,"line":1183},[103,94113,94114],{"class":172},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[103,94116,94117,94119,94121,94123,94125,94127,94129,94131,94133,94135,94137],{"class":105,"line":1189},[103,94118,93296],{"class":113},[103,94120,159],{"class":109},[103,94122,92992],{"class":113},[103,94124,331],{"class":162},[103,94126,491],{"class":113},[103,94128,636],{"class":162},[103,94130,92997],{"class":113},[103,94132,406],{"class":162},[103,94134,491],{"class":113},[103,94136,185],{"class":162},[103,94138,120],{"class":113},[103,94140,94141],{"class":105,"line":1203},[103,94142,94143],{"class":172},"#这个重复之后二维变成一维\n",[103,94145,94146,94149,94151],{"class":105,"line":1209},[103,94147,94148],{"class":113},"np.repeat(aa,",[103,94150,191],{"class":162},[103,94152,120],{"class":113},[103,94154,94155],{"class":105,"line":1300},[103,94156,93918],{"class":218},[103,94158,94159],{"class":105,"line":1306},[103,94160,94161],{"class":218},"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",[103,94163,94164],{"class":105,"line":1318},[103,94165,93918],{"class":218},[103,94167,94168],{"class":105,"line":1601},[103,94169,94170],{"class":172},"#指定axis\n",[103,94172,94173,94175,94177,94179,94181,94183,94185],{"class":105,"line":1606},[103,94174,94148],{"class":113},[103,94176,191],{"class":162},[103,94178,491],{"class":113},[103,94180,47504],{"class":5206},[103,94182,159],{"class":109},[103,94184,305],{"class":162},[103,94186,120],{"class":113},[103,94188,94189],{"class":105,"line":1612},[103,94190,93554],{"class":172},[103,94192,94193],{"class":105,"line":1617},[103,94194,93918],{"class":218},[103,94196,94197],{"class":105,"line":1631},[103,94198,94199],{"class":218},"array([[ 1,  2,  3],\n",[103,94201,94202],{"class":105,"line":1636},[103,94203,94204],{"class":218},"       [ 1,  2,  3],\n",[103,94206,94207],{"class":105,"line":1642},[103,94208,94209],{"class":218},"       [ 4,  5,  6],\n",[103,94211,94212],{"class":105,"line":1663},[103,94213,94209],{"class":218},[103,94215,94216],{"class":105,"line":1668},[103,94217,94218],{"class":218},"       [ 7,  8,  9],\n",[103,94220,94221],{"class":105,"line":1682},[103,94222,94218],{"class":218},[103,94224,94225],{"class":105,"line":1687},[103,94226,94227],{"class":218},"       [10, 11, 12],\n",[103,94229,94230],{"class":105,"line":1716},[103,94231,94232],{"class":218},"       [10, 11, 12]])\n",[103,94234,94235],{"class":105,"line":1721},[103,94236,93918],{"class":218},[103,94238,94239,94241,94243,94245,94247,94249,94251],{"class":105,"line":1738},[103,94240,94148],{"class":113},[103,94242,191],{"class":162},[103,94244,491],{"class":113},[103,94246,47504],{"class":5206},[103,94248,159],{"class":109},[103,94250,331],{"class":162},[103,94252,120],{"class":113},[103,94254,94255],{"class":105,"line":1743},[103,94256,93554],{"class":172},[103,94258,94259],{"class":105,"line":1748},[103,94260,93918],{"class":218},[103,94262,94263],{"class":105,"line":1753},[103,94264,94265],{"class":218},"array([[ 1,  1,  2,  2,  3,  3],\n",[103,94267,94268],{"class":105,"line":1767},[103,94269,94270],{"class":218},"       [ 4,  4,  5,  5,  6,  6],\n",[103,94272,94273],{"class":105,"line":1772},[103,94274,94275],{"class":218},"       [ 7,  7,  8,  8,  9,  9],\n",[103,94277,94278],{"class":105,"line":2566},[103,94279,94280],{"class":218},"       [10, 10, 11, 11, 12, 12]])\n",[103,94282,94283],{"class":105,"line":2580},[103,94284,93918],{"class":218},[45,94286,94288],{"id":94287},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[94,94290,94292],{"className":30368,"code":94291,"language":30370,"meta":24,"style":24},"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",[100,94293,94294,94310,94315,94327,94331,94336,94346,94350],{"__ignoreMap":24},[103,94295,94296,94298,94300,94302,94304,94306,94308],{"class":105,"line":106},[103,94297,17],{"class":113},[103,94299,159],{"class":109},[103,94301,92992],{"class":113},[103,94303,331],{"class":162},[103,94305,491],{"class":113},[103,94307,432],{"class":162},[103,94309,120],{"class":113},[103,94311,94312],{"class":105,"line":25},[103,94313,94314],{"class":172},"#array([，2，3，4])\n",[103,94316,94317,94320,94322,94324],{"class":105,"line":1168},[103,94318,94319],{"class":113},"np.roll(a,",[103,94321,191],{"class":162},[103,94323,542],{"class":113},[103,94325,94326],{"class":172},"#传正数向后调多少位，传负数向前调多少位\n",[103,94328,94329],{"class":105,"line":1183},[103,94330,93554],{"class":172},[103,94332,94333],{"class":105,"line":1189},[103,94334,94335],{"class":172},"#array([3, 4, 1, 2])\n",[103,94337,94338,94340,94342,94344],{"class":105,"line":1203},[103,94339,94319],{"class":113},[103,94341,645],{"class":109},[103,94343,331],{"class":162},[103,94345,120],{"class":113},[103,94347,94348],{"class":105,"line":1209},[103,94349,93554],{"class":172},[103,94351,94352],{"class":105,"line":1300},[103,94353,94354],{"class":172},"#array([2, 3, 4, 1])\n",[14,94356,94357],{},[1451,94358],{"alt":24,"src":94359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[45,94361,94363],{"id":94362},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94365,94366],{},"resize()重新调整数组的大小",[14,94368,94369],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[94,94371,94373],{"className":30368,"code":94372,"language":30370,"meta":24,"style":24},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[100,94374,94375,94380,94393],{"__ignoreMap":24},[103,94376,94377],{"class":105,"line":106},[103,94378,94379],{"class":172},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[103,94381,94382,94385,94387,94389,94391],{"class":105,"line":25},[103,94383,94384],{"class":113},"np.resize(aa,(",[103,94386,191],{"class":162},[103,94388,491],{"class":113},[103,94390,457],{"class":162},[103,94392,30487],{"class":113},[103,94394,94395,94397,94399,94401,94403,94405],{"class":105,"line":1168},[103,94396,94384],{"class":113},[103,94398,191],{"class":162},[103,94400,491],{"class":113},[103,94402,533],{"class":162},[103,94404,82761],{"class":113},[103,94406,94407],{"class":172},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[45,94409,94411],{"id":94410},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94413,94414],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94416,94417],{},[1451,94418],{"alt":24,"src":94419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[45,94421,94423],{"id":94422},"_126-保存加载文件","12.6 保存加载文件",[14,94425,94426],{},"savetxt():将数据保存到txt文件中",[14,94428,94429],{},"loadtxt():从文件加载数据",[14,94431,94432],{},[1451,94433],{"alt":24,"src":94434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[45,94436,94438],{"id":94437},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94440,94441],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[45,94443,94445],{"id":94444},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94447,94448],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94450,94451],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94453,94454],{},[1451,94455],{"alt":24,"src":94456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[45,94458,94460],{"id":94459},"_129-where语句","12.9 where语句",[14,94462,94463],{},"np.where(条件,x,y)",[14,94465,94466],{},"如果条件为True,对应值为x,否则对应值为y",[14,94468,94469],{},[1451,94470],{"alt":24,"src":94471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[45,94473,94475],{"id":94474},"_1210-dot矩阵","12.10 dot()矩阵",[14,94477,94478],{},[1451,94479],{"alt":24,"src":94480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5116,94482,94483],{},"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":24,"searchDepth":25,"depth":25,"links":94485},[94486,94487,94488,94489,94490,94491,94492,94493,94494,94495],{"id":93848,"depth":25,"text":93849},{"id":94071,"depth":25,"text":94072},{"id":94287,"depth":25,"text":94288},{"id":94362,"depth":25,"text":94363},{"id":94410,"depth":25,"text":94411},{"id":94422,"depth":25,"text":94423},{"id":94437,"depth":25,"text":94438},{"id":94444,"depth":25,"text":94445},{"id":94459,"depth":25,"text":94460},{"id":94474,"depth":25,"text":94475},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93840,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94502,"title":94503,"body":94504,"description":27,"extension":28,"meta":94857,"navigation":30,"path":94858,"seo":94859,"stem":94860,"__hash__":94861},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94505,"toc":94855},[94506,94509,94512,94515,94518,94521,94586,94588,94852],[10,94507,94503],{"id":94508},"_13数组排序",[14,94510,94511],{},"排序主要用到的方法是np.sort和np.argsort",[14,94513,94514],{},"其中np.sort()对数组直接排序",[14,94516,94517],{},"而np.argsort()是返回排序后的原始索引",[14,94519,94520],{},"①一维数组",[94,94522,94524],{"className":30368,"code":94523,"language":30370,"meta":24,"style":24},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[100,94525,94526,94530,94570,94578],{"__ignoreMap":24},[103,94527,94528],{"class":105,"line":106},[103,94529,93095],{"class":172},[103,94531,94532,94534,94536,94538,94540,94542,94544,94546,94548,94550,94552,94554,94556,94558,94560,94562,94564,94566,94568],{"class":105,"line":25},[103,94533,17],{"class":113},[103,94535,159],{"class":109},[103,94537,93014],{"class":113},[103,94539,185],{"class":162},[103,94541,491],{"class":113},[103,94543,611],{"class":162},[103,94545,491],{"class":113},[103,94547,508],{"class":162},[103,94549,491],{"class":113},[103,94551,888],{"class":162},[103,94553,491],{"class":113},[103,94555,392],{"class":162},[103,94557,491],{"class":113},[103,94559,1006],{"class":162},[103,94561,491],{"class":113},[103,94563,457],{"class":162},[103,94565,491],{"class":113},[103,94567,559],{"class":162},[103,94569,4646],{"class":113},[103,94571,94572,94575],{"class":105,"line":1168},[103,94573,94574],{"class":113},"np.sort(a)",[103,94576,94577],{"class":172},"#升序排序\n",[103,94579,94580,94583],{"class":105,"line":1183},[103,94581,94582],{"class":113},"np.argsort(a)",[103,94584,94585],{"class":172},"#按照元素大小来索引排序\n",[14,94587,93281],{},[94,94589,94591],{"className":30368,"code":94590,"language":30370,"meta":24,"style":24},"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",[100,94592,94593,94605,94631,94636,94640,94645,94650,94655,94660,94664,94672,94676,94681,94686,94691,94696,94700,94705,94718,94722,94727,94732,94737,94742,94746,94751,94763,94767,94771,94775,94779,94783,94787,94792,94807,94812,94821,94826,94830,94834,94839,94843,94848],{"__ignoreMap":24},[103,94594,94595,94598,94600,94602],{"class":105,"line":106},[103,94596,94597],{"class":113},"np.random.seed(",[103,94599,305],{"class":162},[103,94601,542],{"class":113},[103,94603,94604],{"class":172},"#保证每次值一样\n",[103,94606,94607,94609,94611,94613,94615,94617,94619,94621,94623,94625,94627,94629],{"class":105,"line":25},[103,94608,93296],{"class":113},[103,94610,159],{"class":109},[103,94612,93104],{"class":113},[103,94614,424],{"class":162},[103,94616,491],{"class":113},[103,94618,31486],{"class":5206},[103,94620,159],{"class":109},[103,94622,114],{"class":113},[103,94624,406],{"class":162},[103,94626,491],{"class":113},[103,94628,457],{"class":162},[103,94630,30487],{"class":113},[103,94632,94633],{"class":105,"line":1168},[103,94634,94635],{"class":172},"#原数组：\n",[103,94637,94638],{"class":105,"line":1183},[103,94639,93918],{"class":218},[103,94641,94642],{"class":105,"line":1189},[103,94643,94644],{"class":218},"array([[44, 47, 64, 67, 67,  9],\n",[103,94646,94647],{"class":105,"line":1203},[103,94648,94649],{"class":218},"       [83, 21, 36, 87, 70, 88],\n",[103,94651,94652],{"class":105,"line":1209},[103,94653,94654],{"class":218},"       [88, 12, 58, 65, 39, 87],\n",[103,94656,94657],{"class":105,"line":1300},[103,94658,94659],{"class":218},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[103,94661,94662],{"class":105,"line":1306},[103,94663,93918],{"class":218},[103,94665,94666,94669],{"class":105,"line":1318},[103,94667,94668],{"class":113},"np.sort(aa)",[103,94670,94671],{"class":172},"#每行进行了排序\n",[103,94673,94674],{"class":105,"line":1601},[103,94675,93918],{"class":218},[103,94677,94678],{"class":105,"line":1606},[103,94679,94680],{"class":218},"array([[ 9, 44, 47, 64, 67, 67],\n",[103,94682,94683],{"class":105,"line":1612},[103,94684,94685],{"class":218},"       [21, 36, 70, 83, 87, 88],\n",[103,94687,94688],{"class":105,"line":1617},[103,94689,94690],{"class":218},"       [12, 39, 58, 65, 87, 88],\n",[103,94692,94693],{"class":105,"line":1631},[103,94694,94695],{"class":218},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[103,94697,94698],{"class":105,"line":1636},[103,94699,93918],{"class":218},[103,94701,94702],{"class":105,"line":1642},[103,94703,94704],{"class":172},"#axis=0时\n",[103,94706,94707,94710,94712,94714,94716],{"class":105,"line":1663},[103,94708,94709],{"class":113},"np.sort(aa,",[103,94711,47504],{"class":5206},[103,94713,159],{"class":109},[103,94715,305],{"class":162},[103,94717,120],{"class":113},[103,94719,94720],{"class":105,"line":1668},[103,94721,93918],{"class":218},[103,94723,94724],{"class":105,"line":1682},[103,94725,94726],{"class":218},"array([[44, 12, 36, 37, 25,  9],\n",[103,94728,94729],{"class":105,"line":1687},[103,94730,94731],{"class":218},"       [46, 21, 58, 65, 39, 77],\n",[103,94733,94734],{"class":105,"line":1716},[103,94735,94736],{"class":218},"       [83, 47, 64, 67, 67, 87],\n",[103,94738,94739],{"class":105,"line":1721},[103,94740,94741],{"class":218},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[103,94743,94744],{"class":105,"line":1738},[103,94745,93918],{"class":218},[103,94747,94748],{"class":105,"line":1743},[103,94749,94750],{"class":172},"#axis=1时,为默认值\n",[103,94752,94753,94755,94757,94759,94761],{"class":105,"line":1748},[103,94754,94709],{"class":113},[103,94756,47504],{"class":5206},[103,94758,159],{"class":109},[103,94760,331],{"class":162},[103,94762,120],{"class":113},[103,94764,94765],{"class":105,"line":1753},[103,94766,93918],{"class":218},[103,94768,94769],{"class":105,"line":1767},[103,94770,94680],{"class":218},[103,94772,94773],{"class":105,"line":1772},[103,94774,94685],{"class":218},[103,94776,94777],{"class":105,"line":2566},[103,94778,94690],{"class":218},[103,94780,94781],{"class":105,"line":2580},[103,94782,94695],{"class":218},[103,94784,94785],{"class":105,"line":2588},[103,94786,93918],{"class":218},[103,94788,94789],{"class":105,"line":2593},[103,94790,94791],{"class":172},"#按最后一列排序\n",[103,94793,94794,94796,94798,94801,94803,94805],{"class":105,"line":2599},[103,94795,376],{"class":113},[103,94797,159],{"class":109},[103,94799,94800],{"class":113},"aa[:,",[103,94802,645],{"class":109},[103,94804,331],{"class":162},[103,94806,33236],{"class":113},[103,94808,94809],{"class":105,"line":2605},[103,94810,94811],{"class":172},"#获取最后一列排好序的索引\n",[103,94813,94814,94816,94818],{"class":105,"line":2610},[103,94815,74048],{"class":113},[103,94817,159],{"class":109},[103,94819,94820],{"class":113},"np.argsort(b)\n",[103,94822,94823],{"class":105,"line":7938},[103,94824,94825],{"class":113},"aa[index]\n",[103,94827,94828],{"class":105,"line":7962},[103,94829,93918],{"class":218},[103,94831,94832],{"class":105,"line":7967},[103,94833,94644],{"class":218},[103,94835,94836],{"class":105,"line":7973},[103,94837,94838],{"class":218},"       [46, 88, 81, 37, 25, 77],\n",[103,94840,94841],{"class":105,"line":8000},[103,94842,94654],{"class":218},[103,94844,94845],{"class":105,"line":8005},[103,94846,94847],{"class":218},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[103,94849,94850],{"class":105,"line":8011},[103,94851,93918],{"class":218},[5116,94853,94854],{},"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":24,"searchDepth":25,"depth":25,"links":94856},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94503,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94863,"title":94864,"body":94865,"description":27,"extension":28,"meta":94895,"navigation":30,"path":94896,"seo":94897,"stem":94898,"__hash__":94899},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94866,"toc":94893},[94867,94870,94873,94876,94879,94882,94885,94888],[10,94868,94864],{"id":94869},"_14广播机制",[14,94871,94872],{},"广播的规则：",[14,94874,94875],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94877,94878],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94880,94881],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94883,94884],{},"3.如果没有维度形状为1，则会引发异常",[14,94886,94887],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94889,94890],{},[1451,94891],{"alt":24,"src":94892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":24,"searchDepth":25,"depth":25,"links":94894},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94864,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94901,"title":94902,"body":94903,"description":27,"extension":28,"meta":95001,"navigation":30,"path":95002,"seo":95003,"stem":95004,"__hash__":95005},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94904,"toc":94999},[94905,94908,94911,94996],[10,94906,94902],{"id":94907},"_15比较掩码",[14,94909,94910],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[94,94912,94914],{"className":30368,"code":94913,"language":30370,"meta":24,"style":24},"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",[100,94915,94916,94962,94973,94987,94991],{"__ignoreMap":24},[103,94917,94918,94920,94922,94925,94927,94929,94931,94933,94935,94937,94939,94941,94943,94945,94947,94949,94951,94953,94955,94957,94959],{"class":105,"line":106},[103,94919,17],{"class":113},[103,94921,159],{"class":109},[103,94923,94924],{"class":113},"np.array([[",[103,94926,331],{"class":162},[103,94928,491],{"class":113},[103,94930,191],{"class":162},[103,94932,491],{"class":113},[103,94934,185],{"class":162},[103,94936,48020],{"class":113},[103,94938,585],{"class":162},[103,94940,491],{"class":113},[103,94942,611],{"class":162},[103,94944,491],{"class":113},[103,94946,636],{"class":162},[103,94948,48020],{"class":113},[103,94950,838],{"class":162},[103,94952,491],{"class":113},[103,94954,863],{"class":162},[103,94956,491],{"class":113},[103,94958,888],{"class":162},[103,94960,94961],{"class":113},"]])\n",[103,94963,94964,94966,94968,94970],{"class":105,"line":25},[103,94965,17],{"class":113},[103,94967,1023],{"class":109},[103,94969,813],{"class":162},[103,94971,94972],{"class":172},"#结果是一个由True,False组成的数组\n",[103,94974,94975,94978,94980,94982,94984],{"class":105,"line":1168},[103,94976,94977],{"class":113},"a[a",[103,94979,1023],{"class":109},[103,94981,813],{"class":162},[103,94983,1053],{"class":113},[103,94985,94986],{"class":172},"#小于20的元素会存到这个数组中\n",[103,94988,94989],{"class":105,"line":1183},[103,94990,93554],{"class":172},[103,94992,94993],{"class":105,"line":1189},[103,94994,94995],{"class":172},"#array([ 1,  2,  3, 11, 12, 13])\n",[5116,94997,94998],{},"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":24,"searchDepth":25,"depth":25,"links":95000},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94902,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95007,"title":95008,"body":95009,"description":27,"extension":28,"meta":95101,"navigation":30,"path":95102,"seo":95103,"stem":95104,"__hash__":95105},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95010,"toc":95099},[95011,95014,95017,95020,95023,95026,95091,95096],[10,95012,95008],{"id":95013},"_16魔法命令time",[14,95015,95016],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95018,95019],{},"%:行模式",[14,95021,95022],{},"%%:单元格模式",[14,95024,95025],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[94,95027,95029],{"className":30368,"code":95028,"language":30370,"meta":24,"style":24},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[100,95030,95031,95036,95043,95048,95057,95070,95074,95082],{"__ignoreMap":24},[103,95032,95033],{"class":105,"line":106},[103,95034,95035],{"class":172},"#程序执行时间\n",[103,95037,95038,95040],{"class":105,"line":25},[103,95039,30382],{"class":109},[103,95041,95042],{"class":113}," time \n",[103,95044,95045],{"class":105,"line":1168},[103,95046,95047],{"class":172},"#获取时间\n",[103,95049,95050,95053,95055],{"class":105,"line":1183},[103,95051,95052],{"class":113},"start",[103,95054,159],{"class":109},[103,95056,32408],{"class":113},[103,95058,95059,95062,95065,95067],{"class":105,"line":1189},[103,95060,95061],{"class":113},"time.sleep(",[103,95063,95064],{"class":162},"0.4",[103,95066,542],{"class":113},[103,95068,95069],{"class":172},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[103,95071,95072],{"class":105,"line":1203},[103,95073,95047],{"class":172},[103,95075,95076,95078,95080],{"class":105,"line":1209},[103,95077,45791],{"class":113},[103,95079,159],{"class":109},[103,95081,32408],{"class":113},[103,95083,95084,95086,95088],{"class":105,"line":1300},[103,95085,45791],{"class":113},[103,95087,645],{"class":109},[103,95089,95090],{"class":113},"start\n",[14,95092,95093],{},[1451,95094],{"alt":24,"src":95095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5116,95097,95098],{},"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":24,"searchDepth":25,"depth":25,"links":95100},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95008,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95107,"title":95108,"body":95109,"description":27,"extension":28,"meta":95144,"navigation":30,"path":95145,"seo":95146,"stem":95147,"__hash__":95148},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95110,"toc":95142},[95111,95114,95117,95120,95123,95126,95129,95132,95137],[10,95112,95108],{"id":95113},"_17魔法命令timeit",[14,95115,95116],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95118,95119],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95121,95122],{},"单元格模式：",[14,95124,95125],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95127,95128],{},"初始化语句执行次数由轮数来决定",[14,95130,95131],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95133,95134],{},[1451,95135],{"alt":24,"src":95136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95138,95139],{},[1451,95140],{"alt":24,"src":95141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":24,"searchDepth":25,"depth":25,"links":95143},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95108,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95150,"title":95151,"body":95152,"description":27,"extension":28,"meta":95170,"navigation":30,"path":95171,"seo":95172,"stem":95173,"__hash__":95174},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95153,"toc":95168},[95154,95157,95160,95163],[10,95155,95151],{"id":95156},"_18魔法命令writefile和run",[14,95158,95159],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95161,95162],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95164,95165],{},[1451,95166],{"alt":24,"src":95167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":24,"searchDepth":25,"depth":25,"links":95169},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95151,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95176,"title":95177,"body":95178,"description":27,"extension":28,"meta":95231,"navigation":30,"path":95232,"seo":95233,"stem":95234,"__hash__":95235},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95179,"toc":95229},[95180,95183,95186,95188,95191,95194,95199,95202,95205,95208,95211,95214,95217,95220,95223,95226],[10,95181,95177],{"id":95182},"_19魔法命令memit",[14,95184,95185],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95187,24589],{},[14,95189,95190],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95192,95193],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95195,95196],{},[1451,95197],{"alt":24,"src":95198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95200,95201],{},"补充：",[14,95203,95204],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95206,95207],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95209,95210],{},"解决方法：",[14,95212,95213],{},"1.cmd",[14,95215,95216],{},"2.依次输入以下代码：",[14,95218,95219],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95221,95222],{},"pip install --upgrade ipython",[14,95224,95225],{},"#升级 memory_profiler 和 setuptools",[14,95227,95228],{},"pip install --upgrade memory_profiler setuptools",{"title":24,"searchDepth":25,"depth":25,"links":95230},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95177,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95237,"title":95238,"body":95239,"description":27,"extension":28,"meta":96885,"navigation":30,"path":96886,"seo":96887,"stem":96888,"__hash__":96889},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95240,"toc":96855},[95241,95244,95248,95252,95313,95316,95321,95325,95330,95335,95340,95345,95348,95353,95357,95361,95394,95397,95400,95403,95455,95458,95494,95497,95539,95543,95564,95566,95603,95605,95610,95612,95617,95621,95624,95652,95656,95660,95713,95717,95809,95813,95817,95820,95825,95829,95854,95859,95863,95866,95869,95872,95875,95878,95881,95884,95896,95900,95904,95907,95939,95942,95965,95968,95994,95997,96023,96026,96060,96063,96125,96129,96132,96136,96139,96165,96168,96171,96176,96179,96248,96250,96255,96316,96319,96330,96336,96341,96345,96348,96361,96365,96380,96382,96405,96407,96433,96436,96439,96442,96490,96492,96497,96501,96505,96532,96536,96563,96566,96571,96576,96666,96670,96728,96733,96736,96739,96781,96785,96841,96846,96849,96852],[10,95242,95238],{"id":95243},"_2创建数组",[45,95245,95247],{"id":95246},"_21-array函数创建数组","2.1 array()函数创建数组",[74,95249,95251],{"id":95250},"_221-函数语句","2.2.1 函数语句",[94,95253,95255],{"className":30368,"code":95254,"language":30370,"meta":24,"style":24},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[100,95256,95257],{"__ignoreMap":24},[103,95258,95259,95262,95265,95267,95269,95271,95273,95275,95278,95280,95283,95285,95288,95290,95292,95294,95297,95299,95302,95304,95307,95309,95311],{"class":105,"line":106},[103,95260,95261],{"class":113},"numpy.array(",[103,95263,95264],{"class":162},"object",[103,95266,12425],{"class":113},[103,95268,93490],{"class":5206},[103,95270,13554],{"class":109},[103,95272,38923],{"class":162},[103,95274,12425],{"class":113},[103,95276,95277],{"class":5206},"copy",[103,95279,13554],{"class":109},[103,95281,95282],{"class":162}," True",[103,95284,12425],{"class":113},[103,95286,95287],{"class":5206},"order",[103,95289,13554],{"class":109},[103,95291,38923],{"class":162},[103,95293,12425],{"class":113},[103,95295,95296],{"class":5206},"subok",[103,95298,13554],{"class":109},[103,95300,95301],{"class":162}," False",[103,95303,12425],{"class":113},[103,95305,95306],{"class":5206},"ndmin",[103,95308,13554],{"class":109},[103,95310,4082],{"class":162},[103,95312,120],{"class":113},[14,95314,95315],{},"参数：",[14,95317,95318],{},[1451,95319],{"alt":24,"src":95320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[74,95322,95324],{"id":95323},"_222-实例","2.2.2 实例",[14,95326,95327],{},[1451,95328],{"alt":24,"src":95329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95331,95332],{},[1451,95333],{"alt":24,"src":95334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95336,95337],{},[1451,95338],{"alt":24,"src":95339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95341,95342],{},[1451,95343],{"alt":24,"src":95344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95346,95347],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95349,95350],{},[1451,95351],{"alt":24,"src":95352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[45,95354,95356],{"id":95355},"_22-随机数创建数组","2.2 随机数创建数组",[74,95358,95360],{"id":95359},"_221-random语句","2.2.1 random语句",[94,95362,95364],{"className":30368,"code":95363,"language":30370,"meta":24,"style":24},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[100,95365,95366,95371,95376,95384,95389],{"__ignoreMap":24},[103,95367,95368],{"class":105,"line":106},[103,95369,95370],{"class":172},"#random.random()\n",[103,95372,95373],{"class":105,"line":25},[103,95374,95375],{"class":172},"#确定随机种子,就是每次运行结果是相同的\n",[103,95377,95378,95380,95382],{"class":105,"line":1168},[103,95379,94597],{"class":113},[103,95381,305],{"class":162},[103,95383,120],{"class":113},[103,95385,95386],{"class":105,"line":1183},[103,95387,95388],{"class":113},"np.random.random()\n",[103,95390,95391],{"class":105,"line":1189},[103,95392,95393],{"class":172},"#生成一个随机的数目\n",[14,95395,95396],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95398,95399],{},"可以指定数组形状 size",[14,95401,95402],{},"①生成一维数组",[94,95404,95406],{"className":30368,"code":95405,"language":30370,"meta":24,"style":24},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[100,95407,95408,95413,95426,95431,95447],{"__ignoreMap":24},[103,95409,95410],{"class":105,"line":106},[103,95411,95412],{"class":172},"#random.random(size())\n",[103,95414,95415,95418,95420,95422,95424],{"class":105,"line":25},[103,95416,95417],{"class":113},"np.random.random(",[103,95419,31486],{"class":5206},[103,95421,159],{"class":109},[103,95423,432],{"class":162},[103,95425,120],{"class":113},[103,95427,95428],{"class":105,"line":1168},[103,95429,95430],{"class":172},"#生成一位的五个元素\n",[103,95432,95433,95435,95437,95439,95441,95443,95445],{"class":105,"line":1183},[103,95434,17],{"class":113},[103,95436,159],{"class":109},[103,95438,95417],{"class":113},[103,95440,31486],{"class":5206},[103,95442,159],{"class":109},[103,95444,406],{"class":162},[103,95446,120],{"class":113},[103,95448,95449,95452],{"class":105,"line":1189},[103,95450,95451],{"class":113},"a.shape ",[103,95453,95454],{"class":172},"#输出数组形状\n",[14,95456,95457],{},"②生成二维数组",[94,95459,95461],{"className":30368,"code":95460,"language":30370,"meta":24,"style":24},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[100,95462,95463,95467,95489],{"__ignoreMap":24},[103,95464,95465],{"class":105,"line":106},[103,95466,93291],{"class":172},[103,95468,95469,95471,95473,95475,95477,95479,95481,95483,95485,95487],{"class":105,"line":25},[103,95470,93296],{"class":113},[103,95472,159],{"class":109},[103,95474,95417],{"class":113},[103,95476,31486],{"class":5206},[103,95478,159],{"class":109},[103,95480,114],{"class":113},[103,95482,406],{"class":162},[103,95484,491],{"class":113},[103,95486,432],{"class":162},[103,95488,30487],{"class":113},[103,95490,95491],{"class":105,"line":1168},[103,95492,95493],{"class":172},"#生成四行五列的数组\n",[14,95495,95496],{},"③生成三维数组",[94,95498,95500],{"className":30368,"code":95499,"language":30370,"meta":24,"style":24},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[100,95501,95502,95507,95534],{"__ignoreMap":24},[103,95503,95504],{"class":105,"line":106},[103,95505,95506],{"class":172},"#三维数组\n",[103,95508,95509,95512,95514,95516,95518,95520,95522,95524,95526,95528,95530,95532],{"class":105,"line":25},[103,95510,95511],{"class":113},"aaa",[103,95513,159],{"class":109},[103,95515,95417],{"class":113},[103,95517,31486],{"class":5206},[103,95519,159],{"class":109},[103,95521,114],{"class":113},[103,95523,191],{"class":162},[103,95525,491],{"class":113},[103,95527,185],{"class":162},[103,95529,491],{"class":113},[103,95531,406],{"class":162},[103,95533,30487],{"class":113},[103,95535,95536],{"class":105,"line":1168},[103,95537,95538],{"class":113},"aaa.shape\n",[74,95540,95542],{"id":95541},"_222-randint语句","2.2.2 randint语句",[94,95544,95546],{"className":30368,"code":95545,"language":30370,"meta":24,"style":24},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[100,95547,95548,95553],{"__ignoreMap":24},[103,95549,95550],{"class":105,"line":106},[103,95551,95552],{"class":172},"#生成随机的整数 random.randint(low,high,size)\n",[103,95554,95555,95557,95559,95561],{"class":105,"line":25},[103,95556,93104],{"class":113},[103,95558,432],{"class":162},[103,95560,13704],{"class":113},[103,95562,95563],{"class":172},"#0~5中的随机一个数\n",[14,95565,95402],{},[94,95567,95569],{"className":30368,"code":95568,"language":30370,"meta":24,"style":24},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[100,95570,95571,95576,95598],{"__ignoreMap":24},[103,95572,95573],{"class":105,"line":106},[103,95574,95575],{"class":172},"#一维\n",[103,95577,95578,95580,95582,95584,95586,95588,95590,95592,95594,95596],{"class":105,"line":25},[103,95579,93104],{"class":113},[103,95581,331],{"class":162},[103,95583,491],{"class":113},[103,95585,585],{"class":162},[103,95587,491],{"class":113},[103,95589,31486],{"class":5206},[103,95591,159],{"class":109},[103,95593,114],{"class":113},[103,95595,559],{"class":162},[103,95597,30487],{"class":113},[103,95599,95600],{"class":105,"line":1168},[103,95601,95602],{"class":172},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95604,95457],{},[14,95606,95607],{},[1451,95608],{"alt":24,"src":95609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95611,95496],{},[14,95613,95614],{},[1451,95615],{"alt":24,"src":95616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[74,95618,95620],{"id":95619},"_222-rand语句","2.2.2 rand语句",[14,95622,95623],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[94,95625,95627],{"className":30368,"code":95626,"language":30370,"meta":24,"style":24},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[100,95628,95629,95642,95647],{"__ignoreMap":24},[103,95630,95631,95634,95636,95638,95640],{"class":105,"line":106},[103,95632,95633],{"class":113},"np.random.rand(",[103,95635,424],{"class":162},[103,95637,491],{"class":113},[103,95639,559],{"class":162},[103,95641,120],{"class":113},[103,95643,95644],{"class":105,"line":25},[103,95645,95646],{"class":172},"#第一个参数100：行数，表示有100个样本\n",[103,95648,95649],{"class":105,"line":1168},[103,95650,95651],{"class":172},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[45,95653,95655],{"id":95654},"_23-arange创建数组","2.3 arange()创建数组",[74,95657,95659],{"id":95658},"_231-函数语句","2.3.1 函数语句",[94,95661,95663],{"className":30368,"code":95662,"language":30370,"meta":24,"style":24},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[100,95664,95665,95679,95684,95689,95694,95699,95704,95709],{"__ignoreMap":24},[103,95666,95667,95670,95672,95674,95677],{"class":105,"line":106},[103,95668,95669],{"class":113},"numpy.arange([start,] stop[, step], ",[103,95671,93490],{"class":5206},[103,95673,159],{"class":109},[103,95675,95676],{"class":162},"None",[103,95678,120],{"class":113},[103,95680,95681],{"class":105,"line":25},[103,95682,95683],{"class":172},"#参数\n",[103,95685,95686],{"class":105,"line":1168},[103,95687,95688],{"class":218},"\"\"\"\n",[103,95690,95691],{"class":105,"line":1183},[103,95692,95693],{"class":218},"start:起始值，可选，默认从 0 开始。\n",[103,95695,95696],{"class":105,"line":1189},[103,95697,95698],{"class":218},"stop:结束值（不包含该值）。\n",[103,95700,95701],{"class":105,"line":1203},[103,95702,95703],{"class":218},"step:步长，可选，默认是 1。可以为浮点数。\n",[103,95705,95706],{"class":105,"line":1209},[103,95707,95708],{"class":218},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[103,95710,95711],{"class":105,"line":1300},[103,95712,95688],{"class":218},[74,95714,95716],{"id":95715},"_232-实例","2.3.2 实例",[94,95718,95720],{"className":30368,"code":95719,"language":30370,"meta":24,"style":24},"#创建一维数组\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",[100,95721,95722,95726,95750,95755,95760,95764,95787,95791,95795,95800,95805],{"__ignoreMap":24},[103,95723,95724],{"class":105,"line":106},[103,95725,93095],{"class":172},[103,95727,95728,95730,95732,95734,95736,95738,95740,95742,95744,95746,95748],{"class":105,"line":25},[103,95729,92992],{"class":113},[103,95731,331],{"class":162},[103,95733,491],{"class":113},[103,95735,838],{"class":162},[103,95737,491],{"class":113},[103,95739,331],{"class":162},[103,95741,491],{"class":113},[103,95743,93490],{"class":5206},[103,95745,159],{"class":109},[103,95747,117],{"class":162},[103,95749,120],{"class":113},[103,95751,95752],{"class":105,"line":1168},[103,95753,95754],{"class":172},"#输出结果：\n",[103,95756,95757],{"class":105,"line":1183},[103,95758,95759],{"class":172},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[103,95761,95762],{"class":105,"line":1189},[103,95763,93937],{"class":172},[103,95765,95766,95769,95771,95773,95775,95778,95780,95782,95784],{"class":105,"line":1203},[103,95767,95768],{"class":113},"np.array([np.arange(",[103,95770,331],{"class":162},[103,95772,491],{"class":113},[103,95774,406],{"class":162},[103,95776,95777],{"class":113},"),np.arange(",[103,95779,406],{"class":162},[103,95781,491],{"class":113},[103,95783,482],{"class":162},[103,95785,95786],{"class":113},")])\n",[103,95788,95789],{"class":105,"line":1209},[103,95790,93554],{"class":172},[103,95792,95793],{"class":105,"line":1300},[103,95794,95688],{"class":218},[103,95796,95797],{"class":105,"line":1306},[103,95798,95799],{"class":218},"array([[1, 2, 3],\n",[103,95801,95802],{"class":105,"line":1318},[103,95803,95804],{"class":218},"       [4, 5, 6]])\n",[103,95806,95807],{"class":105,"line":1601},[103,95808,95688],{"class":218},[45,95810,95812],{"id":95811},"_24-生态分布","2.4 生态分布",[74,95814,95816],{"id":95815},"_241-标准正态分布","2.4.1 标准正态分布",[14,95818,95819],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95821,95822],{},[1451,95823],{"alt":24,"src":95824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[74,95826,95828],{"id":95827},"_242-常规正态分布","2.4.2 常规正态分布",[94,95830,95832],{"className":30368,"code":95831,"language":30370,"meta":24,"style":24},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[100,95833,95834,95839,95844,95849],{"__ignoreMap":24},[103,95835,95836],{"class":105,"line":106},[103,95837,95838],{"class":113},"random.normal(loc,scale,size)也可以生成正态分布\n",[103,95840,95841],{"class":105,"line":25},[103,95842,95843],{"class":172},"#loc:期望\n",[103,95845,95846],{"class":105,"line":1168},[103,95847,95848],{"class":172},"#scale:方差\n",[103,95850,95851],{"class":105,"line":1183},[103,95852,95853],{"class":172},"#size:用于确定是几维的数列\n",[14,95855,95856],{},[1451,95857],{"alt":24,"src":95858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[45,95860,95862],{"id":95861},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95864,95865],{},"ndim:秩，维度个数",[14,95867,95868],{},"size:数组元素的个数",[14,95870,95871],{},"shape:数组的形状",[14,95873,95874],{},"dtype:数组元素的类型",[14,95876,95877],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95879,95880],{},"他们都是属性，通过数组.属性的形式来确定",[14,95882,95883],{},"如果需要输出多个可以通过以下方式：",[94,95885,95887],{"className":30368,"code":95886,"language":30370,"meta":24,"style":24},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[100,95888,95889],{"__ignoreMap":24},[103,95890,95891,95893],{"class":105,"line":106},[103,95892,30405],{"class":162},[103,95894,95895],{"class":113},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[45,95897,95899],{"id":95898},"_26-其他方式创建数组","2.6 其他方式创建数组",[74,95901,95903],{"id":95902},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95905,95906],{},"①创建一维数组",[94,95908,95910],{"className":30368,"code":95909,"language":30370,"meta":24,"style":24},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[100,95911,95912,95921,95925,95930,95935],{"__ignoreMap":24},[103,95913,95914,95917,95919],{"class":105,"line":106},[103,95915,95916],{"class":113},"np.zeros(",[103,95918,559],{"class":162},[103,95920,120],{"class":113},[103,95922,95923],{"class":105,"line":25},[103,95924,95688],{"class":218},[103,95926,95927],{"class":105,"line":1168},[103,95928,95929],{"class":218},"输出结果：\n",[103,95931,95932],{"class":105,"line":1183},[103,95933,95934],{"class":218},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[103,95936,95937],{"class":105,"line":1189},[103,95938,95688],{"class":218},[14,95940,95941],{},"上方代码等价于：",[94,95943,95945],{"className":30368,"code":95944,"language":30370,"meta":24,"style":24},"np.zeros(shape=(10))#创建10个元素的0数组\n",[100,95946,95947],{"__ignoreMap":24},[103,95948,95949,95951,95954,95956,95958,95960,95962],{"class":105,"line":106},[103,95950,95916],{"class":113},[103,95952,95953],{"class":5206},"shape",[103,95955,159],{"class":109},[103,95957,114],{"class":113},[103,95959,559],{"class":162},[103,95961,82761],{"class":113},[103,95963,95964],{"class":172},"#创建10个元素的0数组\n",[14,95966,95967],{},"也可以指定类型",[94,95969,95971],{"className":30368,"code":95970,"language":30370,"meta":24,"style":24},"#指定类型\nnp.zeros(5,dtype=int)\n",[100,95972,95973,95978],{"__ignoreMap":24},[103,95974,95975],{"class":105,"line":106},[103,95976,95977],{"class":172},"#指定类型\n",[103,95979,95980,95982,95984,95986,95988,95990,95992],{"class":105,"line":25},[103,95981,95916],{"class":113},[103,95983,432],{"class":162},[103,95985,491],{"class":113},[103,95987,93490],{"class":5206},[103,95989,159],{"class":109},[103,95991,117],{"class":162},[103,95993,120],{"class":113},[14,95995,95996],{},"②创建二维数组",[94,95998,96000],{"className":30368,"code":95999,"language":30370,"meta":24,"style":24},"np.zeros((3,4),dtype=int)\n",[100,96001,96002],{"__ignoreMap":24},[103,96003,96004,96007,96009,96011,96013,96015,96017,96019,96021],{"class":105,"line":106},[103,96005,96006],{"class":113},"np.zeros((",[103,96008,185],{"class":162},[103,96010,491],{"class":113},[103,96012,406],{"class":162},[103,96014,42246],{"class":113},[103,96016,93490],{"class":5206},[103,96018,159],{"class":109},[103,96020,117],{"class":162},[103,96022,120],{"class":113},[14,96024,96025],{},"③创建三维数组",[94,96027,96029],{"className":30368,"code":96028,"language":30370,"meta":24,"style":24},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[100,96030,96031,96036],{"__ignoreMap":24},[103,96032,96033],{"class":105,"line":106},[103,96034,96035],{"class":172},"#创建三维数组\n",[103,96037,96038,96040,96042,96044,96046,96048,96050,96052,96054,96056,96058],{"class":105,"line":25},[103,96039,96006],{"class":113},[103,96041,185],{"class":162},[103,96043,491],{"class":113},[103,96045,406],{"class":162},[103,96047,491],{"class":113},[103,96049,432],{"class":162},[103,96051,42246],{"class":113},[103,96053,93490],{"class":5206},[103,96055,159],{"class":109},[103,96057,117],{"class":162},[103,96059,120],{"class":113},[14,96061,96062],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[94,96064,96066],{"className":30368,"code":96065,"language":30370,"meta":24,"style":24},"#使用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",[100,96067,96068,96073,96088,96093,96098,96120],{"__ignoreMap":24},[103,96069,96070],{"class":105,"line":106},[103,96071,96072],{"class":172},"#使用zeros_like将创建的一维数组变成全0的数组\n",[103,96074,96075,96077,96079,96081,96083,96085],{"class":105,"line":25},[103,96076,17],{"class":113},[103,96078,159],{"class":109},[103,96080,92992],{"class":113},[103,96082,406],{"class":162},[103,96084,542],{"class":113},[103,96086,96087],{"class":172},"#这个得到的结果：一维数组0，1，2，3\n",[103,96089,96090],{"class":105,"line":1168},[103,96091,96092],{"class":113},"np.zeros_like(a)\n",[103,96094,96095],{"class":105,"line":1183},[103,96096,96097],{"class":172},"#使用zeros_like将创建的二维数组变成全0的数组\n",[103,96099,96100,96102,96104,96106,96108,96110,96112,96114,96116,96118],{"class":105,"line":1189},[103,96101,93296],{"class":113},[103,96103,159],{"class":109},[103,96105,95417],{"class":113},[103,96107,31486],{"class":5206},[103,96109,159],{"class":109},[103,96111,114],{"class":113},[103,96113,406],{"class":162},[103,96115,491],{"class":113},[103,96117,432],{"class":162},[103,96119,30487],{"class":113},[103,96121,96122],{"class":105,"line":1203},[103,96123,96124],{"class":113},"np.zeros_like(aa)\n",[74,96126,96128],{"id":96127},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96130,96131],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[74,96133,96135],{"id":96134},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96137,96138],{},"①empty()用法",[94,96140,96142],{"className":30368,"code":96141,"language":30370,"meta":24,"style":24},"numpy.empty(shape,dtype=float,order='c')\n",[100,96143,96144],{"__ignoreMap":24},[103,96145,96146,96149,96151,96153,96155,96157,96159,96161,96163],{"class":105,"line":106},[103,96147,96148],{"class":113},"numpy.empty(shape,",[103,96150,93490],{"class":5206},[103,96152,159],{"class":109},[103,96154,153],{"class":162},[103,96156,491],{"class":113},[103,96158,95287],{"class":5206},[103,96160,159],{"class":109},[103,96162,76018],{"class":218},[103,96164,120],{"class":113},[14,96166,96167],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96169,96170],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96172,96173],{},[1451,96174],{"alt":24,"src":96175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96177,96178],{},"②empty()用法",[94,96180,96182],{"className":30368,"code":96181,"language":30370,"meta":24,"style":24},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[100,96183,96184,96205,96217,96238,96243],{"__ignoreMap":24},[103,96185,96186,96188,96190,96193,96195,96197,96199,96201,96203],{"class":105,"line":106},[103,96187,958],{"class":113},[103,96189,159],{"class":109},[103,96191,96192],{"class":113},"np.empty(",[103,96194,559],{"class":162},[103,96196,491],{"class":113},[103,96198,93490],{"class":5206},[103,96200,159],{"class":109},[103,96202,117],{"class":162},[103,96204,120],{"class":113},[103,96206,96207,96209,96211,96213,96215],{"class":105,"line":25},[103,96208,933],{"class":113},[103,96210,159],{"class":109},[103,96212,92992],{"class":113},[103,96214,432],{"class":162},[103,96216,120],{"class":113},[103,96218,96219,96222,96224,96227,96229,96231,96234,96236],{"class":105,"line":1168},[103,96220,96221],{"class":113},"np.add(",[103,96223,191],{"class":162},[103,96225,96226],{"class":113},",x,",[103,96228,93044],{"class":5206},[103,96230,159],{"class":109},[103,96232,96233],{"class":113},"y[:",[103,96235,432],{"class":162},[103,96237,4646],{"class":113},[103,96239,96240],{"class":105,"line":1183},[103,96241,96242],{"class":172},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[103,96244,96245],{"class":105,"line":1189},[103,96246,96247],{"class":113},"y\n",[14,96249,11504],{},[14,96251,96252],{},[1451,96253],{"alt":24,"src":96254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[94,96256,96258],{"className":30368,"code":96257,"language":30370,"meta":24,"style":24},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[100,96259,96260,96276,96296,96311],{"__ignoreMap":24},[103,96261,96262,96264,96266,96268,96270,96272,96274],{"class":105,"line":106},[103,96263,933],{"class":113},[103,96265,159],{"class":109},[103,96267,92992],{"class":113},[103,96269,331],{"class":162},[103,96271,491],{"class":113},[103,96273,457],{"class":162},[103,96275,120],{"class":113},[103,96277,96278,96280,96282,96284,96286,96288,96290,96292,96294],{"class":105,"line":25},[103,96279,958],{"class":113},[103,96281,159],{"class":109},[103,96283,96192],{"class":113},[103,96285,432],{"class":162},[103,96287,491],{"class":113},[103,96289,93490],{"class":5206},[103,96291,159],{"class":109},[103,96293,117],{"class":162},[103,96295,120],{"class":113},[103,96297,96298,96301,96303,96305,96307,96309],{"class":105,"line":1168},[103,96299,96300],{"class":113},"np.add(x,",[103,96302,191],{"class":162},[103,96304,491],{"class":113},[103,96306,93044],{"class":5206},[103,96308,159],{"class":109},[103,96310,93439],{"class":113},[103,96312,96313],{"class":105,"line":1183},[103,96314,96315],{"class":172},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96317,96318],{},"③empty_like()",[14,96320,96321],{},[263,96322,96323,96324,96329],{},"创建一个",[263,96325,96326],{},[263,96327,96328],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96331,96332,96335],{},[100,96333,96334],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96337,96338],{},[1451,96339],{"alt":24,"src":96340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[74,96342,96344],{"id":96343},"_264-用法","2.6.4 ？？用法",[14,96346,96347],{},"当想查看一个函数的参数时，可以通过？？来实现",[94,96349,96351],{"className":30368,"code":96350,"language":30370,"meta":24,"style":24},"np.full??\n",[100,96352,96353],{"__ignoreMap":24},[103,96354,96355,96358],{"class":105,"line":106},[103,96356,96357],{"class":113},"np.full",[103,96359,96360],{"class":77393},"??\n",[74,96362,96364],{"id":96363},"_265-full创建数组","2.6.5 full()创建数组",[94,96366,96368],{"className":30368,"code":96367,"language":30370,"meta":24,"style":24},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[100,96369,96370,96375],{"__ignoreMap":24},[103,96371,96372],{"class":105,"line":106},[103,96373,96374],{"class":113},"full(shape,fill_value)\n",[103,96376,96377],{"class":105,"line":25},[103,96378,96379],{"class":113},"创建全为某个指定值的数组\n",[14,96381,94520],{},[94,96383,96385],{"className":30368,"code":96384,"language":30370,"meta":24,"style":24},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[100,96386,96387,96392],{"__ignoreMap":24},[103,96388,96389],{"class":105,"line":106},[103,96390,96391],{"class":172},"#创建一个一维数组,以20进行填充\n",[103,96393,96394,96397,96399,96401,96403],{"class":105,"line":25},[103,96395,96396],{"class":113},"np.full(",[103,96398,559],{"class":162},[103,96400,491],{"class":113},[103,96402,813],{"class":162},[103,96404,120],{"class":113},[14,96406,93281],{},[94,96408,96410],{"className":30368,"code":96409,"language":30370,"meta":24,"style":24},"#创建二维数组\nnp.full((3,5),11)\n",[100,96411,96412,96416],{"__ignoreMap":24},[103,96413,96414],{"class":105,"line":106},[103,96415,93937],{"class":172},[103,96417,96418,96421,96423,96425,96427,96429,96431],{"class":105,"line":25},[103,96419,96420],{"class":113},"np.full((",[103,96422,185],{"class":162},[103,96424,491],{"class":113},[103,96426,432],{"class":162},[103,96428,42246],{"class":113},[103,96430,585],{"class":162},[103,96432,120],{"class":113},[14,96434,96435],{},"③full_like用法",[14,96437,96438],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96440,96441],{},"这里是指定填充而已",[94,96443,96445],{"className":30368,"code":96444,"language":30370,"meta":24,"style":24},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[100,96446,96447,96452,96476,96481],{"__ignoreMap":24},[103,96448,96449],{"class":105,"line":106},[103,96450,96451],{"class":172},"#创建一个指定形状数组\n",[103,96453,96454,96456,96458,96460,96462,96464,96466,96468,96470,96472,96474],{"class":105,"line":25},[103,96455,17],{"class":113},[103,96457,159],{"class":109},[103,96459,92992],{"class":113},[103,96461,331],{"class":162},[103,96463,491],{"class":113},[103,96465,438],{"class":162},[103,96467,92997],{"class":113},[103,96469,406],{"class":162},[103,96471,491],{"class":113},[103,96473,533],{"class":162},[103,96475,120],{"class":113},[103,96477,96478],{"class":105,"line":1168},[103,96479,96480],{"class":172},"#进行指定填充\n",[103,96482,96483,96486,96488],{"class":105,"line":1183},[103,96484,96485],{"class":113},"np.full_like(a,",[103,96487,559],{"class":162},[103,96489,120],{"class":113},[14,96491,11504],{},[14,96493,96494],{},[1451,96495],{"alt":24,"src":96496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[74,96498,96500],{"id":96499},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21988,96502,96504],{"id":96503},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[94,96506,96508],{"className":30368,"code":96507,"language":30370,"meta":24,"style":24},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[100,96509,96510,96527],{"__ignoreMap":24},[103,96511,96512,96515,96517,96519,96521,96523,96525],{"class":105,"line":106},[103,96513,96514],{"class":113},"np.eye(",[103,96516,406],{"class":162},[103,96518,491],{"class":113},[103,96520,93490],{"class":5206},[103,96522,159],{"class":109},[103,96524,117],{"class":162},[103,96526,120],{"class":113},[103,96528,96529],{"class":105,"line":25},[103,96530,96531],{"class":172},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21988,96533,96535],{"id":96534},"_2662-法2identity","2.6.6.2 法2：identity()",[94,96537,96539],{"className":30368,"code":96538,"language":30370,"meta":24,"style":24},"#identity()\nnp.identity(5,dtype=int)\n",[100,96540,96541,96546],{"__ignoreMap":24},[103,96542,96543],{"class":105,"line":106},[103,96544,96545],{"class":172},"#identity()\n",[103,96547,96548,96551,96553,96555,96557,96559,96561],{"class":105,"line":25},[103,96549,96550],{"class":113},"np.identity(",[103,96552,432],{"class":162},[103,96554,491],{"class":113},[103,96556,93490],{"class":5206},[103,96558,159],{"class":109},[103,96560,117],{"class":162},[103,96562,120],{"class":113},[14,96564,96565],{},"两个函数是有区别的",[14,96567,96568],{},[1451,96569],{"alt":24,"src":96570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96572,96573],{},[1451,96574],{"alt":24,"src":96575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[94,96577,96579],{"className":30368,"code":96578,"language":30370,"meta":24,"style":24},"# 创建一个 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",[100,96580,96581,96586,96598,96603,96608,96613,96618,96622,96627,96647,96651,96656,96661],{"__ignoreMap":24},[103,96582,96583],{"class":105,"line":106},[103,96584,96585],{"class":172},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[103,96587,96588,96590,96592,96594,96596],{"class":105,"line":25},[103,96589,96514],{"class":113},[103,96591,185],{"class":162},[103,96593,12425],{"class":113},[103,96595,406],{"class":162},[103,96597,120],{"class":113},[103,96599,96600],{"class":105,"line":1168},[103,96601,96602],{"class":172},"# 输出:\n",[103,96604,96605],{"class":105,"line":1183},[103,96606,96607],{"class":172},"# [[1. 0. 0. 0.]\n",[103,96609,96610],{"class":105,"line":1189},[103,96611,96612],{"class":172},"#  [0. 1. 0. 0.]\n",[103,96614,96615],{"class":105,"line":1203},[103,96616,96617],{"class":172},"#  [0. 0. 1. 0.]]\n",[103,96619,96620],{"class":105,"line":1209},[103,96621,2389],{"emptyLinePlaceholder":30},[103,96623,96624],{"class":105,"line":1300},[103,96625,96626],{"class":172},"# 对角线向上偏移1\n",[103,96628,96629,96631,96633,96635,96637,96639,96641,96643,96645],{"class":105,"line":1306},[103,96630,96514],{"class":113},[103,96632,185],{"class":162},[103,96634,12425],{"class":113},[103,96636,406],{"class":162},[103,96638,12425],{"class":113},[103,96640,606],{"class":5206},[103,96642,159],{"class":109},[103,96644,331],{"class":162},[103,96646,120],{"class":113},[103,96648,96649],{"class":105,"line":1318},[103,96650,96602],{"class":172},[103,96652,96653],{"class":105,"line":1601},[103,96654,96655],{"class":172},"# [[0. 1. 0. 0.]\n",[103,96657,96658],{"class":105,"line":1606},[103,96659,96660],{"class":172},"#  [0. 0. 1. 0.]\n",[103,96662,96663],{"class":105,"line":1612},[103,96664,96665],{"class":172},"#  [0. 0. 0. 1.]]\n",[74,96667,96669],{"id":96668},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[94,96671,96673],{"className":30368,"code":96672,"language":30370,"meta":24,"style":24},"#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",[100,96674,96675,96680,96684,96689,96694,96699,96704,96709,96714,96719,96724],{"__ignoreMap":24},[103,96676,96677],{"class":105,"line":106},[103,96678,96679],{"class":172},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[103,96681,96682],{"class":105,"line":25},[103,96683,95688],{"class":218},[103,96685,96686],{"class":105,"line":1168},[103,96687,96688],{"class":218},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[103,96690,96691],{"class":105,"line":1183},[103,96692,96693],{"class":218},"参数介绍：\n",[103,96695,96696],{"class":105,"line":1189},[103,96697,96698],{"class":218},"start：序列的起始值\n",[103,96700,96701],{"class":105,"line":1203},[103,96702,96703],{"class":218},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[103,96705,96706],{"class":105,"line":1209},[103,96707,96708],{"class":218},"num：要生长的等步长的样本数量，默认为50\n",[103,96710,96711],{"class":105,"line":1300},[103,96712,96713],{"class":218},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[103,96715,96716],{"class":105,"line":1306},[103,96717,96718],{"class":218},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[103,96720,96721],{"class":105,"line":1318},[103,96722,96723],{"class":218},"dtype：ndarry的数据类型\n",[103,96725,96726],{"class":105,"line":1601},[103,96727,95688],{"class":218},[14,96729,96730],{},[1451,96731],{"alt":24,"src":96732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96734,96735],{},"这里num=是可以省略的",[14,96737,96738],{},"也就是下方两行代码结果是一模一样的",[94,96740,96742],{"className":30368,"code":96741,"language":30370,"meta":24,"style":24},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[100,96743,96744,96761],{"__ignoreMap":24},[103,96745,96746,96749,96751,96753,96755,96757,96759],{"class":105,"line":106},[103,96747,96748],{"class":113},"np.linspace(",[103,96750,331],{"class":162},[103,96752,491],{"class":113},[103,96754,432],{"class":162},[103,96756,491],{"class":113},[103,96758,432],{"class":162},[103,96760,120],{"class":113},[103,96762,96763,96765,96767,96769,96771,96773,96775,96777,96779],{"class":105,"line":25},[103,96764,96748],{"class":113},[103,96766,331],{"class":162},[103,96768,491],{"class":113},[103,96770,432],{"class":162},[103,96772,491],{"class":113},[103,96774,1654],{"class":5206},[103,96776,159],{"class":109},[103,96778,432],{"class":162},[103,96780,120],{"class":113},[74,96782,96784],{"id":96783},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[94,96786,96788],{"className":30368,"code":96787,"language":30370,"meta":24,"style":24},"#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",[100,96789,96790,96795,96799,96804,96809,96814,96819,96823,96828,96833,96837],{"__ignoreMap":24},[103,96791,96792],{"class":105,"line":106},[103,96793,96794],{"class":172},"#logspace函数用于创建一个等比数列，格式如下：\n",[103,96796,96797],{"class":105,"line":25},[103,96798,95688],{"class":218},[103,96800,96801],{"class":105,"line":1168},[103,96802,96803],{"class":218},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[103,96805,96806],{"class":105,"line":1183},[103,96807,96808],{"class":218},"参数为：\n",[103,96810,96811],{"class":105,"line":1189},[103,96812,96813],{"class":218},"start:序列的起始位置为：base**start\n",[103,96815,96816],{"class":105,"line":1203},[103,96817,96818],{"class":218},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[103,96820,96821],{"class":105,"line":1209},[103,96822,96708],{"class":218},[103,96824,96825],{"class":105,"line":1300},[103,96826,96827],{"class":218},"endpoint：是否包含 stop 这个值，默认是 True\n",[103,96829,96830],{"class":105,"line":1306},[103,96831,96832],{"class":218},"base：对数的底数，默认是 10（常见对数）\n",[103,96834,96835],{"class":105,"line":1318},[103,96836,96723],{"class":218},[103,96838,96839],{"class":105,"line":1601},[103,96840,95688],{"class":218},[14,96842,96843],{},[1451,96844],{"alt":24,"src":96845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96847,96848],{},"logspace()函数中的num参数也是可以不写num=的",[14,96850,96851],{},"endpoint是不可以省略的",[5116,96853,96854],{},"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":24,"searchDepth":25,"depth":25,"links":96856},[96857,96861,96866,96870,96874,96875],{"id":95246,"depth":25,"text":95247,"children":96858},[96859,96860],{"id":95250,"depth":1168,"text":95251},{"id":95323,"depth":1168,"text":95324},{"id":95355,"depth":25,"text":95356,"children":96862},[96863,96864,96865],{"id":95359,"depth":1168,"text":95360},{"id":95541,"depth":1168,"text":95542},{"id":95619,"depth":1168,"text":95620},{"id":95654,"depth":25,"text":95655,"children":96867},[96868,96869],{"id":95658,"depth":1168,"text":95659},{"id":95715,"depth":1168,"text":95716},{"id":95811,"depth":25,"text":95812,"children":96871},[96872,96873],{"id":95815,"depth":1168,"text":95816},{"id":95827,"depth":1168,"text":95828},{"id":95861,"depth":25,"text":95862},{"id":95898,"depth":25,"text":95899,"children":96876},[96877,96878,96879,96880,96881,96882,96883,96884],{"id":95902,"depth":1168,"text":95903},{"id":96127,"depth":1168,"text":96128},{"id":96134,"depth":1168,"text":96135},{"id":96343,"depth":1168,"text":96344},{"id":96363,"depth":1168,"text":96364},{"id":96499,"depth":1168,"text":96500},{"id":96668,"depth":1168,"text":96669},{"id":96783,"depth":1168,"text":96784},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95238,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96891,"title":96892,"body":96893,"description":27,"extension":28,"meta":96986,"navigation":30,"path":96987,"seo":96988,"stem":96989,"__hash__":96990},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96894,"toc":96984},[96895,96898,96901,96904,96907,96910,96913,96916,96919,96922,96925,96928,96930,96933,96936,96941,96944,96947,96981],[10,96896,96892],{"id":96897},"_20魔法命令mprun",[14,96899,96900],{},"逐行分析数据内存的使用情况",[14,96902,96903],{},"语法格式：",[14,96905,96906],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96908,96909],{},"分析结果列如下：",[14,96911,96912],{},"Line行号",[14,96914,96915],{},"Mem usage内存使用大小",[14,96917,96918],{},"increment内存增量",[14,96920,96921],{},"Line content代码内容",[14,96923,96924],{},"补充说明：",[14,96926,96927],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96929,95193],{},[14,96931,96932],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,96934,96935],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,96937,96938],{},[1451,96939],{"alt":24,"src":96940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,96942,96943],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,96945,96946],{},"这时候需要重新加载模块",[94,96948,96950],{"className":30368,"code":96949,"language":30370,"meta":24,"style":24},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[100,96951,96952,96957,96964,96969],{"__ignoreMap":24},[103,96953,96954],{"class":105,"line":106},[103,96955,96956],{"class":172},"#重新加载模块\n",[103,96958,96959,96961],{"class":105,"line":25},[103,96960,30382],{"class":109},[103,96962,96963],{"class":113}," importlib\n",[103,96965,96966],{"class":105,"line":1168},[103,96967,96968],{"class":113},"importlib.reload(mprun_test)\n",[103,96970,96971,96973,96976,96978],{"class":105,"line":1183},[103,96972,441],{"class":109},[103,96974,96975],{"class":113},"mprun ",[103,96977,645],{"class":109},[103,96979,96980],{"class":113},"f mprun_test.fun_test mprun_test.fun_test()\n",[5116,96982,96983],{},"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":24,"searchDepth":25,"depth":25,"links":96985},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96892,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96992,"title":96993,"body":96994,"description":27,"extension":28,"meta":97011,"navigation":30,"path":97012,"seo":97013,"stem":97014,"__hash__":97015},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96995,"toc":97009},[96996,96999,97004],[10,96997,96993],{"id":96998},"_3一维数组的索引和切片",[14,97000,97001],{},[1451,97002],{"alt":24,"src":97003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97005,97006],{},[1451,97007],{"alt":24,"src":97008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":24,"searchDepth":25,"depth":25,"links":97010},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96993,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97017,"title":97018,"body":97019,"description":27,"extension":28,"meta":97502,"navigation":30,"path":97503,"seo":97504,"stem":97505,"__hash__":97506},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97020,"toc":97500},[97021,97024,97027,97032,97065,97068,97106,97109,97143,97146,97251,97254,97291,97294,97395,97398,97449,97452,97494,97497],[10,97022,97018],{"id":97023},"_4二维数组的索引与切片",[14,97025,97026],{},"①获取指定单个元素",[14,97028,97029],{},[1451,97030],{"alt":24,"src":97031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[94,97033,97035],{"className":30368,"code":97034,"language":30370,"meta":24,"style":24},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[100,97036,97037,97042,97047,97052],{"__ignoreMap":24},[103,97038,97039],{"class":105,"line":106},[103,97040,97041],{"class":172},"#获取元素9\n",[103,97043,97044],{"class":105,"line":25},[103,97045,97046],{"class":172},"#先获取所在行，再获取所在列\n",[103,97048,97049],{"class":105,"line":1168},[103,97050,97051],{"class":172},"#数组[行索引号，列索引号]\n",[103,97053,97054,97057,97059,97061,97063],{"class":105,"line":1183},[103,97055,97056],{"class":113},"a[",[103,97058,331],{"class":162},[103,97060,491],{"class":113},[103,97062,191],{"class":162},[103,97064,33236],{"class":113},[14,97066,97067],{},"②获取整行元素",[94,97069,97071],{"className":30368,"code":97070,"language":30370,"meta":24,"style":24},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[100,97072,97073,97078,97083,97091,97096],{"__ignoreMap":24},[103,97074,97075],{"class":105,"line":106},[103,97076,97077],{"class":172},"#获取整行 数组[行索引号]\n",[103,97079,97080],{"class":105,"line":25},[103,97081,97082],{"class":172},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[103,97084,97085,97087,97089],{"class":105,"line":1168},[103,97086,97056],{"class":113},[103,97088,191],{"class":162},[103,97090,33236],{"class":113},[103,97092,97093],{"class":105,"line":1183},[103,97094,97095],{"class":172},"#也可以负索引获取一行\n",[103,97097,97098,97100,97102,97104],{"class":105,"line":1189},[103,97099,97056],{"class":113},[103,97101,645],{"class":109},[103,97103,331],{"class":162},[103,97105,33236],{"class":113},[14,97107,97108],{},"③获取整列元素",[94,97110,97112],{"className":30368,"code":97111,"language":30370,"meta":24,"style":24},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[100,97113,97114,97119,97128,97133],{"__ignoreMap":24},[103,97115,97116],{"class":105,"line":106},[103,97117,97118],{"class":172},"#获取整列 数组名[:,列索引]\n",[103,97120,97121,97124,97126],{"class":105,"line":25},[103,97122,97123],{"class":113},"a[:,",[103,97125,191],{"class":162},[103,97127,33236],{"class":113},[103,97129,97130],{"class":105,"line":1168},[103,97131,97132],{"class":172},"#也可以负索引获取一列\n",[103,97134,97135,97137,97139,97141],{"class":105,"line":1183},[103,97136,97123],{"class":113},[103,97138,645],{"class":109},[103,97140,331],{"class":162},[103,97142,33236],{"class":113},[14,97144,97145],{},"④部分行部分列的元素",[94,97147,97149],{"className":30368,"code":97148,"language":30370,"meta":24,"style":24},"#部分行部分列 数组名[行切片，列切片]\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",[100,97150,97151,97156,97166,97170,97174,97179,97184,97188,97200,97204,97208,97213,97218,97223,97228,97232,97237],{"__ignoreMap":24},[103,97152,97153],{"class":105,"line":106},[103,97154,97155],{"class":172},"#部分行部分列 数组名[行切片，列切片]\n",[103,97157,97158,97161,97163],{"class":105,"line":25},[103,97159,97160],{"class":113},"a[:",[103,97162,191],{"class":162},[103,97164,97165],{"class":113},",:]\n",[103,97167,97168],{"class":105,"line":1168},[103,97169,93554],{"class":172},[103,97171,97172],{"class":105,"line":1183},[103,97173,93918],{"class":218},[103,97175,97176],{"class":105,"line":1189},[103,97177,97178],{"class":218},"array([[ 1,  2,  3,  4,  5,  6],\n",[103,97180,97181],{"class":105,"line":1203},[103,97182,97183],{"class":218},"       [ 7,  8,  9, 10, 11, 12]])\n",[103,97185,97186],{"class":105,"line":1209},[103,97187,93918],{"class":218},[103,97189,97190,97192,97194,97196,97198],{"class":105,"line":1300},[103,97191,97123],{"class":113},[103,97193,331],{"class":162},[103,97195,972],{"class":113},[103,97197,406],{"class":162},[103,97199,33236],{"class":113},[103,97201,97202],{"class":105,"line":1306},[103,97203,93554],{"class":172},[103,97205,97206],{"class":105,"line":1318},[103,97207,93918],{"class":218},[103,97209,97210],{"class":105,"line":1601},[103,97211,97212],{"class":218},"array([[ 2,  3,  4],\n",[103,97214,97215],{"class":105,"line":1606},[103,97216,97217],{"class":218},"       [ 8,  9, 10],\n",[103,97219,97220],{"class":105,"line":1612},[103,97221,97222],{"class":218},"       [14, 15, 16],\n",[103,97224,97225],{"class":105,"line":1617},[103,97226,97227],{"class":218},"       [20, 21, 22]])\n",[103,97229,97230],{"class":105,"line":1631},[103,97231,93918],{"class":218},[103,97233,97234],{"class":105,"line":1636},[103,97235,97236],{"class":172},"#对列行同时进行切片，使用了step参数\n",[103,97238,97239,97242,97244,97247,97249],{"class":105,"line":1642},[103,97240,97241],{"class":113},"a[::",[103,97243,191],{"class":162},[103,97245,97246],{"class":113},",::",[103,97248,191],{"class":162},[103,97250,33236],{"class":113},[14,97252,97253],{},"⑤同时获取两个元素",[94,97255,97257],{"className":30368,"code":97256,"language":30370,"meta":24,"style":24},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[100,97258,97259,97264,97269],{"__ignoreMap":24},[103,97260,97261],{"class":105,"line":106},[103,97262,97263],{"class":172},"#同时获取第三行第二列，第四行第一列\n",[103,97265,97266],{"class":105,"line":25},[103,97267,97268],{"class":172},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[103,97270,97271,97274,97276,97278,97280,97282,97284,97286,97288],{"class":105,"line":1168},[103,97272,97273],{"class":113},"a[(",[103,97275,191],{"class":162},[103,97277,491],{"class":113},[103,97279,185],{"class":162},[103,97281,42237],{"class":113},[103,97283,331],{"class":162},[103,97285,491],{"class":113},[103,97287,305],{"class":162},[103,97289,97290],{"class":113},")]\n",[14,97292,97293],{},"⑥切片，对行进行反向获取",[94,97295,97297],{"className":30368,"code":97296,"language":30370,"meta":24,"style":24},"#切片 对所有行进行反向获取\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",[100,97298,97299,97304,97314,97318,97322,97327,97332,97337,97342,97346,97351,97367,97371,97376,97381,97386,97391],{"__ignoreMap":24},[103,97300,97301],{"class":105,"line":106},[103,97302,97303],{"class":172},"#切片 对所有行进行反向获取\n",[103,97305,97306,97308,97310,97312],{"class":105,"line":25},[103,97307,97241],{"class":113},[103,97309,645],{"class":109},[103,97311,331],{"class":162},[103,97313,33236],{"class":113},[103,97315,97316],{"class":105,"line":1168},[103,97317,93554],{"class":172},[103,97319,97320],{"class":105,"line":1183},[103,97321,93918],{"class":218},[103,97323,97324],{"class":105,"line":1189},[103,97325,97326],{"class":218},"array([[19, 20, 21, 22, 23, 24],\n",[103,97328,97329],{"class":105,"line":1203},[103,97330,97331],{"class":218},"       [13, 14, 15, 16, 17, 18],\n",[103,97333,97334],{"class":105,"line":1209},[103,97335,97336],{"class":218},"       [ 7,  8,  9, 10, 11, 12],\n",[103,97338,97339],{"class":105,"line":1300},[103,97340,97341],{"class":218},"       [ 1,  2,  3,  4,  5,  6]])\n",[103,97343,97344],{"class":105,"line":1306},[103,97345,93918],{"class":218},[103,97347,97348],{"class":105,"line":1318},[103,97349,97350],{"class":172},"#对行列都进行反向切片获取\n",[103,97352,97353,97355,97357,97359,97361,97363,97365],{"class":105,"line":1601},[103,97354,97241],{"class":113},[103,97356,645],{"class":109},[103,97358,331],{"class":162},[103,97360,97246],{"class":113},[103,97362,645],{"class":109},[103,97364,331],{"class":162},[103,97366,33236],{"class":113},[103,97368,97369],{"class":105,"line":1606},[103,97370,93918],{"class":218},[103,97372,97373],{"class":105,"line":1612},[103,97374,97375],{"class":218},"array([[24, 23, 22, 21, 20, 19],\n",[103,97377,97378],{"class":105,"line":1617},[103,97379,97380],{"class":218},"       [18, 17, 16, 15, 14, 13],\n",[103,97382,97383],{"class":105,"line":1631},[103,97384,97385],{"class":218},"       [12, 11, 10,  9,  8,  7],\n",[103,97387,97388],{"class":105,"line":1636},[103,97389,97390],{"class":218},"       [ 6,  5,  4,  3,  2,  1]])\n",[103,97392,97393],{"class":105,"line":1642},[103,97394,93918],{"class":218},[14,97396,97397],{},"⑦修改元素",[94,97399,97401],{"className":30368,"code":97400,"language":30370,"meta":24,"style":24},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[100,97402,97403,97408,97426,97431],{"__ignoreMap":24},[103,97404,97405],{"class":105,"line":106},[103,97406,97407],{"class":172},"#获取前两行和前两列\n",[103,97409,97410,97413,97415,97417,97419,97422,97424],{"class":105,"line":25},[103,97411,97412],{"class":113},"sub_a",[103,97414,159],{"class":109},[103,97416,97160],{"class":113},[103,97418,191],{"class":162},[103,97420,97421],{"class":113},",:",[103,97423,191],{"class":162},[103,97425,33236],{"class":113},[103,97427,97428],{"class":105,"line":1168},[103,97429,97430],{"class":172},"#修改sub_a第一个元素的值\n",[103,97432,97433,97436,97438,97440,97442,97444,97446],{"class":105,"line":1183},[103,97434,97435],{"class":113},"sub_a[",[103,97437,305],{"class":162},[103,97439,491],{"class":113},[103,97441,305],{"class":162},[103,97443,1053],{"class":113},[103,97445,159],{"class":109},[103,97447,97448],{"class":162},"100\n",[14,97450,97451],{},"⑧数组复制copy()",[94,97453,97455],{"className":30368,"code":97454,"language":30370,"meta":24,"style":24},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[100,97456,97457,97462,97472,97477],{"__ignoreMap":24},[103,97458,97459],{"class":105,"line":106},[103,97460,97461],{"class":172},"#数组复制\n",[103,97463,97464,97467,97469],{"class":105,"line":25},[103,97465,97466],{"class":113},"copy_a",[103,97468,159],{"class":109},[103,97470,97471],{"class":113},"np.copy(sub_a)\n",[103,97473,97474],{"class":105,"line":1168},[103,97475,97476],{"class":172},"#修改copy_a后不影响原数组\n",[103,97478,97479,97482,97484,97486,97488,97490,97492],{"class":105,"line":1183},[103,97480,97481],{"class":113},"copy_a[",[103,97483,305],{"class":162},[103,97485,491],{"class":113},[103,97487,305],{"class":162},[103,97489,1053],{"class":113},[103,97491,159],{"class":109},[103,97493,97448],{"class":162},[14,97495,97496],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5116,97498,97499],{},"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":24,"searchDepth":25,"depth":25,"links":97501},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97018,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97508,"title":97509,"body":97510,"description":27,"extension":28,"meta":98002,"navigation":30,"path":98003,"seo":98004,"stem":98005,"__hash__":98006},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97511,"toc":97994},[97512,97515,97519,97522,97525,97578,97581,97606,97609,97628,97648,97651,97667,97671,97717,97721,97763,97767,97770,97773,97776,97779,97782,97844,97904,97908,97911,97968,97972,97977,97986,97991],[10,97513,97509],{"id":97514},"_5改变数组的维度",[45,97516,97518],{"id":97517},"_51-使用reshape","5.1 使用reshape()",[14,97520,97521],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97523,97524],{},"①一维数组转换为二维数组",[94,97526,97528],{"className":30368,"code":97527,"language":30370,"meta":24,"style":24},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[100,97529,97530,97546,97551,97556,97561],{"__ignoreMap":24},[103,97531,97532,97534,97536,97538,97540,97542,97544],{"class":105,"line":106},[103,97533,17],{"class":113},[103,97535,159],{"class":109},[103,97537,92992],{"class":113},[103,97539,331],{"class":162},[103,97541,491],{"class":113},[103,97543,636],{"class":162},[103,97545,120],{"class":113},[103,97547,97548],{"class":105,"line":25},[103,97549,97550],{"class":172},"#将一维数组进行转换\n",[103,97552,97553],{"class":105,"line":1168},[103,97554,97555],{"class":172},"#注意点：元素个数不可以变\n",[103,97557,97558],{"class":105,"line":1183},[103,97559,97560],{"class":172},"#转换维度要保持一致，不一致就异常！！！\n",[103,97562,97563,97565,97567,97570,97572,97574,97576],{"class":105,"line":1189},[103,97564,93296],{"class":113},[103,97566,159],{"class":109},[103,97568,97569],{"class":113},"a.reshape(",[103,97571,191],{"class":162},[103,97573,491],{"class":113},[103,97575,457],{"class":162},[103,97577,120],{"class":113},[14,97579,97580],{},"②一维数组转换为三维数组",[94,97582,97584],{"className":30368,"code":97583,"language":30370,"meta":24,"style":24},"aaa=a.reshape(2,3,2)\n",[100,97585,97586],{"__ignoreMap":24},[103,97587,97588,97590,97592,97594,97596,97598,97600,97602,97604],{"class":105,"line":106},[103,97589,95511],{"class":113},[103,97591,159],{"class":109},[103,97593,97569],{"class":113},[103,97595,191],{"class":162},[103,97597,491],{"class":113},[103,97599,185],{"class":162},[103,97601,491],{"class":113},[103,97603,191],{"class":162},[103,97605,120],{"class":113},[14,97607,97608],{},"③二维数组转化为一维数组",[94,97610,97612],{"className":30368,"code":97611,"language":30370,"meta":24,"style":24},"#知道元素个数：\naa.reshape(12)\n",[100,97613,97614,97619],{"__ignoreMap":24},[103,97615,97616],{"class":105,"line":106},[103,97617,97618],{"class":172},"#知道元素个数：\n",[103,97620,97621,97624,97626],{"class":105,"line":25},[103,97622,97623],{"class":113},"aa.reshape(",[103,97625,611],{"class":162},[103,97627,120],{"class":113},[94,97629,97631],{"className":30368,"code":97630,"language":30370,"meta":24,"style":24},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[100,97632,97633,97638],{"__ignoreMap":24},[103,97634,97635],{"class":105,"line":106},[103,97636,97637],{"class":172},"#不知道元素个数，参数传递-1\n",[103,97639,97640,97642,97644,97646],{"class":105,"line":25},[103,97641,97623],{"class":113},[103,97643,645],{"class":109},[103,97645,331],{"class":162},[103,97647,120],{"class":113},[14,97649,97650],{},"④三维数组转换为一维数组",[94,97652,97654],{"className":30368,"code":97653,"language":30370,"meta":24,"style":24},"aaa.reshape(-1)\n",[100,97655,97656],{"__ignoreMap":24},[103,97657,97658,97661,97663,97665],{"class":105,"line":106},[103,97659,97660],{"class":113},"aaa.reshape(",[103,97662,645],{"class":109},[103,97664,331],{"class":162},[103,97666,120],{"class":113},[45,97668,97670],{"id":97669},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[94,97672,97674],{"className":30368,"code":97673,"language":30370,"meta":24,"style":24},"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",[100,97675,97676,97703,97708,97712],{"__ignoreMap":24},[103,97677,97678,97680,97682,97684,97686,97688,97690,97692,97694,97696,97698,97700],{"class":105,"line":106},[103,97679,93296],{"class":113},[103,97681,159],{"class":109},[103,97683,92992],{"class":113},[103,97685,331],{"class":162},[103,97687,491],{"class":113},[103,97689,636],{"class":162},[103,97691,92997],{"class":113},[103,97693,191],{"class":162},[103,97695,491],{"class":113},[103,97697,457],{"class":162},[103,97699,542],{"class":113},[103,97701,97702],{"class":172},"#转换为2行6列的数组\n",[103,97704,97705],{"class":105,"line":25},[103,97706,97707],{"class":113},"aa.revel()\n",[103,97709,97710],{"class":105,"line":1168},[103,97711,93554],{"class":172},[103,97713,97714],{"class":105,"line":1183},[103,97715,97716],{"class":172},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[45,97718,97720],{"id":97719},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[94,97722,97724],{"className":30368,"code":97723,"language":30370,"meta":24,"style":24},"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",[100,97725,97726,97750,97755,97759],{"__ignoreMap":24},[103,97727,97728,97730,97732,97734,97736,97738,97740,97742,97744,97746,97748],{"class":105,"line":106},[103,97729,93296],{"class":113},[103,97731,159],{"class":109},[103,97733,92992],{"class":113},[103,97735,331],{"class":162},[103,97737,491],{"class":113},[103,97739,636],{"class":162},[103,97741,92997],{"class":113},[103,97743,191],{"class":162},[103,97745,491],{"class":113},[103,97747,457],{"class":162},[103,97749,120],{"class":113},[103,97751,97752],{"class":105,"line":25},[103,97753,97754],{"class":113},"aa.flatten()\n",[103,97756,97757],{"class":105,"line":1168},[103,97758,93554],{"class":172},[103,97760,97761],{"class":105,"line":1183},[103,97762,97716],{"class":172},[45,97764,97766],{"id":97765},"_54-使用resize","5.4 使用resize()",[14,97768,97769],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97771,97772],{},"通过resize方法可以改变数组的维度",[14,97774,97775],{},"#resize修改数组维度",[14,97777,97778],{},"#以元组的形式指定形状",[14,97780,97781],{},"#改变的是原数组",[94,97783,97785],{"className":30368,"code":97784,"language":30370,"meta":24,"style":24},"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",[100,97786,97787,97803,97823,97836,97840],{"__ignoreMap":24},[103,97788,97789,97791,97793,97795,97797,97799,97801],{"class":105,"line":106},[103,97790,17],{"class":113},[103,97792,159],{"class":109},[103,97794,92992],{"class":113},[103,97796,331],{"class":162},[103,97798,491],{"class":113},[103,97800,636],{"class":162},[103,97802,120],{"class":113},[103,97804,97805,97808,97810,97812,97814,97816,97818,97820],{"class":105,"line":25},[103,97806,97807],{"class":113},"a.shape",[103,97809,159],{"class":109},[103,97811,114],{"class":113},[103,97813,191],{"class":162},[103,97815,491],{"class":113},[103,97817,457],{"class":162},[103,97819,542],{"class":113},[103,97821,97822],{"class":172},"#改变了原数组\n",[103,97824,97825,97827,97829,97832,97834],{"class":105,"line":1168},[103,97826,17],{"class":113},[103,97828,159],{"class":109},[103,97830,97831],{"class":113},"resize((",[103,97833,611],{"class":162},[103,97835,30487],{"class":113},[103,97837,97838],{"class":105,"line":1183},[103,97839,93554],{"class":172},[103,97841,97842],{"class":105,"line":1189},[103,97843,97716],{"class":172},[94,97845,97847],{"className":30368,"code":97846,"language":30370,"meta":24,"style":24},"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",[100,97848,97849,97862,97866,97870,97875,97880,97885,97890,97895,97900],{"__ignoreMap":24},[103,97850,97851,97854,97856,97858,97860],{"class":105,"line":106},[103,97852,97853],{"class":113},"a.resize((",[103,97855,457],{"class":162},[103,97857,491],{"class":113},[103,97859,191],{"class":162},[103,97861,30487],{"class":113},[103,97863,97864],{"class":105,"line":25},[103,97865,93554],{"class":172},[103,97867,97868],{"class":105,"line":1168},[103,97869,93918],{"class":218},[103,97871,97872],{"class":105,"line":1183},[103,97873,97874],{"class":218},"array([[ 1,  2],\n",[103,97876,97877],{"class":105,"line":1189},[103,97878,97879],{"class":218},"       [ 3,  4],\n",[103,97881,97882],{"class":105,"line":1203},[103,97883,97884],{"class":218},"       [ 5,  6],\n",[103,97886,97887],{"class":105,"line":1209},[103,97888,97889],{"class":218},"       [ 7,  8],\n",[103,97891,97892],{"class":105,"line":1300},[103,97893,97894],{"class":218},"       [ 9, 10],\n",[103,97896,97897],{"class":105,"line":1306},[103,97898,97899],{"class":218},"       [11, 12]])\n",[103,97901,97902],{"class":105,"line":1318},[103,97903,93918],{"class":218},[45,97905,97907],{"id":97906},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97909,97910],{},"改变了原数组",[94,97912,97914],{"className":30368,"code":97913,"language":30370,"meta":24,"style":24},"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",[100,97915,97916,97932,97948,97952,97956,97960,97964],{"__ignoreMap":24},[103,97917,97918,97920,97922,97924,97926,97928,97930],{"class":105,"line":106},[103,97919,17],{"class":113},[103,97921,159],{"class":109},[103,97923,92992],{"class":113},[103,97925,331],{"class":162},[103,97927,491],{"class":113},[103,97929,636],{"class":162},[103,97931,120],{"class":113},[103,97933,97934,97936,97938,97940,97942,97944,97946],{"class":105,"line":25},[103,97935,97807],{"class":113},[103,97937,159],{"class":109},[103,97939,114],{"class":113},[103,97941,191],{"class":162},[103,97943,491],{"class":113},[103,97945,457],{"class":162},[103,97947,120],{"class":113},[103,97949,97950],{"class":105,"line":1168},[103,97951,93554],{"class":172},[103,97953,97954],{"class":105,"line":1183},[103,97955,93918],{"class":218},[103,97957,97958],{"class":105,"line":1189},[103,97959,97178],{"class":218},[103,97961,97962],{"class":105,"line":1203},[103,97963,97183],{"class":218},[103,97965,97966],{"class":105,"line":1209},[103,97967,93918],{"class":218},[45,97969,97971],{"id":97970},"_56-重要比较","5.6 重要比较：",[14,97973,97974],{},[1451,97975],{"alt":24,"src":97976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,97978,97979,97980,97982,97983,97985],{},"口诀：NumPy 函数要么用 ",[100,97981,95953],{},"，要么用 ",[100,97984,31486],{},"，创建结构用 shape，造数据用 size",[14,97987,97988],{},[1451,97989],{"alt":24,"src":97990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5116,97992,97993],{},"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":24,"searchDepth":25,"depth":25,"links":97995},[97996,97997,97998,97999,98000,98001],{"id":97517,"depth":25,"text":97518},{"id":97669,"depth":25,"text":97670},{"id":97719,"depth":25,"text":97720},{"id":97765,"depth":25,"text":97766},{"id":97906,"depth":25,"text":97907},{"id":97970,"depth":25,"text":97971},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97509,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98008,"title":98009,"body":98010,"description":27,"extension":28,"meta":99082,"navigation":30,"path":99083,"seo":99084,"stem":99085,"__hash__":99086},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98011,"toc":99076},[98012,98015,98019,98022,98025,98028,98093,98096,98136,98139,98221,98224,98229,98251,98253,98258,98263,98266,98269,98424,98427,98629,98633,98636,98639,98707,98709,98714,98717,98720,98800,98804,98807,98809,98882,98884,98889,98891,98971,98975,98978,98981,98984,98987,98990,98993,99073],[10,98013,98009],{"id":98014},"_6数组的拼接",[45,98016,98018],{"id":98017},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98020,98021],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98023,98024],{},"函数内部传两个数列构成的数列或者元组",[14,98026,98027],{},"①一维数组的拼接",[94,98029,98031],{"className":30368,"code":98030,"language":30370,"meta":24,"style":24},"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",[100,98032,98033,98053,98073,98078,98083,98088],{"__ignoreMap":24},[103,98034,98035,98037,98039,98041,98043,98045,98047,98049,98051],{"class":105,"line":106},[103,98036,17],{"class":113},[103,98038,159],{"class":109},[103,98040,93014],{"class":113},[103,98042,331],{"class":162},[103,98044,491],{"class":113},[103,98046,191],{"class":162},[103,98048,491],{"class":113},[103,98050,185],{"class":162},[103,98052,4646],{"class":113},[103,98054,98055,98057,98059,98061,98063,98065,98067,98069,98071],{"class":105,"line":25},[103,98056,376],{"class":113},[103,98058,159],{"class":109},[103,98060,93014],{"class":113},[103,98062,406],{"class":162},[103,98064,491],{"class":113},[103,98066,432],{"class":162},[103,98068,491],{"class":113},[103,98070,457],{"class":162},[103,98072,4646],{"class":113},[103,98074,98075],{"class":105,"line":1168},[103,98076,98077],{"class":172},"#调用concatenate进行数组拼接\n",[103,98079,98080],{"class":105,"line":1183},[103,98081,98082],{"class":113},"np.concatenate((a,b))\n",[103,98084,98085],{"class":105,"line":1189},[103,98086,98087],{"class":172},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[103,98089,98090],{"class":105,"line":1203},[103,98091,98092],{"class":172},"#np.concatenate([a,b])\n",[14,98094,98095],{},"②一维多个数组拼接",[94,98097,98099],{"className":30368,"code":98098,"language":30370,"meta":24,"style":24},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[100,98100,98101,98106,98126,98131],{"__ignoreMap":24},[103,98102,98103],{"class":105,"line":106},[103,98104,98105],{"class":172},"#也可以多个数组进行拼接\n",[103,98107,98108,98110,98112,98114,98116,98118,98120,98122,98124],{"class":105,"line":25},[103,98109,401],{"class":113},[103,98111,159],{"class":109},[103,98113,93014],{"class":113},[103,98115,559],{"class":162},[103,98117,491],{"class":113},[103,98119,585],{"class":162},[103,98121,491],{"class":113},[103,98123,636],{"class":162},[103,98125,4646],{"class":113},[103,98127,98128],{"class":105,"line":1168},[103,98129,98130],{"class":113},"c\n",[103,98132,98133],{"class":105,"line":1183},[103,98134,98135],{"class":113},"np.concatenate((a,b,c))\n",[14,98137,98138],{},"③二维数组拼接",[94,98140,98142],{"className":30368,"code":98141,"language":30370,"meta":24,"style":24},"#二维数组使用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",[100,98143,98144,98149,98173,98198,98203,98208],{"__ignoreMap":24},[103,98145,98146],{"class":105,"line":106},[103,98147,98148],{"class":172},"#二维数组使用concatenate进行拼接\n",[103,98150,98151,98153,98155,98157,98159,98161,98163,98165,98167,98169,98171],{"class":105,"line":25},[103,98152,93296],{"class":113},[103,98154,159],{"class":109},[103,98156,92992],{"class":113},[103,98158,331],{"class":162},[103,98160,491],{"class":113},[103,98162,636],{"class":162},[103,98164,92997],{"class":113},[103,98166,185],{"class":162},[103,98168,491],{"class":113},[103,98170,406],{"class":162},[103,98172,120],{"class":113},[103,98174,98175,98178,98180,98182,98184,98186,98188,98190,98192,98194,98196],{"class":105,"line":1168},[103,98176,98177],{"class":113},"bb",[103,98179,159],{"class":109},[103,98181,92992],{"class":113},[103,98183,450],{"class":162},[103,98185,491],{"class":113},[103,98187,755],{"class":162},[103,98189,92997],{"class":113},[103,98191,185],{"class":162},[103,98193,491],{"class":113},[103,98195,406],{"class":162},[103,98197,120],{"class":113},[103,98199,98200],{"class":105,"line":1183},[103,98201,98202],{"class":172},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[103,98204,98205],{"class":105,"line":1189},[103,98206,98207],{"class":172},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[103,98209,98210,98213,98215,98217,98219],{"class":105,"line":1203},[103,98211,98212],{"class":113},"np.concatenate((aa,bb),",[103,98214,47504],{"class":5206},[103,98216,159],{"class":109},[103,98218,305],{"class":162},[103,98220,120],{"class":113},[14,98222,98223],{},"结果：",[14,98225,98226],{},[1451,98227],{"alt":24,"src":98228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[94,98230,98232],{"className":30368,"code":98231,"language":30370,"meta":24,"style":24},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[100,98233,98234,98239],{"__ignoreMap":24},[103,98235,98236],{"class":105,"line":106},[103,98237,98238],{"class":172},"#指定axis为1进行拼接\n",[103,98240,98241,98243,98245,98247,98249],{"class":105,"line":25},[103,98242,98212],{"class":113},[103,98244,47504],{"class":5206},[103,98246,159],{"class":109},[103,98248,331],{"class":162},[103,98250,120],{"class":113},[14,98252,98223],{},[14,98254,98255],{},[1451,98256],{"alt":24,"src":98257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98259,98260],{},[263,98261,98262],{},"二维数组总结：0竖着方向，1横着方向",[14,98264,98265],{},"④三维数组拼接",[14,98267,98268],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[94,98270,98272],{"className":30368,"code":98271,"language":30370,"meta":24,"style":24},"#两个三行六列\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",[100,98273,98274,98279,98307,98337,98342,98359,98364,98369,98374,98391,98396,98401,98406,98419],{"__ignoreMap":24},[103,98275,98276],{"class":105,"line":106},[103,98277,98278],{"class":172},"#两个三行六列\n",[103,98280,98281,98283,98285,98287,98289,98291,98293,98295,98297,98299,98301,98303,98305],{"class":105,"line":25},[103,98282,95511],{"class":113},[103,98284,159],{"class":109},[103,98286,92992],{"class":113},[103,98288,331],{"class":162},[103,98290,491],{"class":113},[103,98292,438],{"class":162},[103,98294,92997],{"class":113},[103,98296,191],{"class":162},[103,98298,491],{"class":113},[103,98300,185],{"class":162},[103,98302,491],{"class":113},[103,98304,457],{"class":162},[103,98306,120],{"class":113},[103,98308,98309,98312,98314,98316,98318,98320,98323,98325,98327,98329,98331,98333,98335],{"class":105,"line":1168},[103,98310,98311],{"class":113},"bbb",[103,98313,159],{"class":109},[103,98315,92992],{"class":113},[103,98317,450],{"class":162},[103,98319,491],{"class":113},[103,98321,98322],{"class":162},"137",[103,98324,92997],{"class":113},[103,98326,191],{"class":162},[103,98328,491],{"class":113},[103,98330,185],{"class":162},[103,98332,491],{"class":113},[103,98334,457],{"class":162},[103,98336,120],{"class":113},[103,98338,98339],{"class":105,"line":1183},[103,98340,98341],{"class":172},"#axis=0\n",[103,98343,98344,98346,98348,98351,98353,98355,98357],{"class":105,"line":1189},[103,98345,808],{"class":113},[103,98347,159],{"class":109},[103,98349,98350],{"class":113},"np.concatenate((aaa,bbb),",[103,98352,47504],{"class":5206},[103,98354,159],{"class":109},[103,98356,305],{"class":162},[103,98358,120],{"class":113},[103,98360,98361],{"class":105,"line":1203},[103,98362,98363],{"class":113},"s.shape\n",[103,98365,98366],{"class":105,"line":1209},[103,98367,98368],{"class":172},"#输出：(4,3,6)\n",[103,98370,98371],{"class":105,"line":1300},[103,98372,98373],{"class":172},"#axis=1\n",[103,98375,98376,98379,98381,98383,98385,98387,98389],{"class":105,"line":1306},[103,98377,98378],{"class":113},"ss",[103,98380,159],{"class":109},[103,98382,98350],{"class":113},[103,98384,47504],{"class":5206},[103,98386,159],{"class":109},[103,98388,331],{"class":162},[103,98390,120],{"class":113},[103,98392,98393],{"class":105,"line":1318},[103,98394,98395],{"class":113},"ss.shape\n",[103,98397,98398],{"class":105,"line":1601},[103,98399,98400],{"class":172},"#输出：(2,6,6)\n",[103,98402,98403],{"class":105,"line":1606},[103,98404,98405],{"class":172},"#axis=2\n",[103,98407,98408,98410,98412,98414,98416],{"class":105,"line":1612},[103,98409,98350],{"class":113},[103,98411,47504],{"class":5206},[103,98413,159],{"class":109},[103,98415,191],{"class":162},[103,98417,98418],{"class":113},").shape\n",[103,98420,98421],{"class":105,"line":1617},[103,98422,98423],{"class":172},"#输出：（2，3，12）\n",[14,98425,98426],{},"⑤四维数组拼接",[94,98428,98430],{"className":30368,"code":98429,"language":30370,"meta":24,"style":24},"#两个三行六列\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",[100,98431,98432,98436,98464,98492,98517,98543,98547,98560,98565,98569,98581,98586,98590,98602,98607,98612,98624],{"__ignoreMap":24},[103,98433,98434],{"class":105,"line":106},[103,98435,98278],{"class":172},[103,98437,98438,98440,98442,98444,98446,98448,98450,98452,98454,98456,98458,98460,98462],{"class":105,"line":25},[103,98439,95511],{"class":113},[103,98441,159],{"class":109},[103,98443,92992],{"class":113},[103,98445,331],{"class":162},[103,98447,491],{"class":113},[103,98449,438],{"class":162},[103,98451,92997],{"class":113},[103,98453,191],{"class":162},[103,98455,491],{"class":113},[103,98457,185],{"class":162},[103,98459,491],{"class":113},[103,98461,457],{"class":162},[103,98463,120],{"class":113},[103,98465,98466,98468,98470,98472,98474,98476,98478,98480,98482,98484,98486,98488,98490],{"class":105,"line":1168},[103,98467,98311],{"class":113},[103,98469,159],{"class":109},[103,98471,92992],{"class":113},[103,98473,450],{"class":162},[103,98475,491],{"class":113},[103,98477,98322],{"class":162},[103,98479,92997],{"class":113},[103,98481,191],{"class":162},[103,98483,491],{"class":113},[103,98485,185],{"class":162},[103,98487,491],{"class":113},[103,98489,457],{"class":162},[103,98491,120],{"class":113},[103,98493,98494,98497,98499,98501,98503,98505,98507,98509,98511,98513,98515],{"class":105,"line":1183},[103,98495,98496],{"class":113},"aaaa",[103,98498,159],{"class":109},[103,98500,97660],{"class":113},[103,98502,191],{"class":162},[103,98504,491],{"class":113},[103,98506,185],{"class":162},[103,98508,491],{"class":113},[103,98510,185],{"class":162},[103,98512,491],{"class":113},[103,98514,191],{"class":162},[103,98516,120],{"class":113},[103,98518,98519,98522,98524,98527,98529,98531,98533,98535,98537,98539,98541],{"class":105,"line":1189},[103,98520,98521],{"class":113},"bbbb",[103,98523,159],{"class":109},[103,98525,98526],{"class":113},"bbb.reshape(",[103,98528,191],{"class":162},[103,98530,491],{"class":113},[103,98532,185],{"class":162},[103,98534,491],{"class":113},[103,98536,185],{"class":162},[103,98538,491],{"class":113},[103,98540,191],{"class":162},[103,98542,120],{"class":113},[103,98544,98545],{"class":105,"line":1203},[103,98546,98341],{"class":172},[103,98548,98549,98552,98554,98556,98558],{"class":105,"line":1209},[103,98550,98551],{"class":113},"np.concatenate((aaaa,bbbb),",[103,98553,47504],{"class":5206},[103,98555,159],{"class":109},[103,98557,305],{"class":162},[103,98559,98418],{"class":113},[103,98561,98562],{"class":105,"line":1300},[103,98563,98564],{"class":172},"#结果：（4，3，3，2）\n",[103,98566,98567],{"class":105,"line":1306},[103,98568,98373],{"class":172},[103,98570,98571,98573,98575,98577,98579],{"class":105,"line":1318},[103,98572,98551],{"class":113},[103,98574,47504],{"class":5206},[103,98576,159],{"class":109},[103,98578,331],{"class":162},[103,98580,98418],{"class":113},[103,98582,98583],{"class":105,"line":1601},[103,98584,98585],{"class":172},"#结果：（2，6，3，2）\n",[103,98587,98588],{"class":105,"line":1606},[103,98589,98405],{"class":172},[103,98591,98592,98594,98596,98598,98600],{"class":105,"line":1612},[103,98593,98551],{"class":113},[103,98595,47504],{"class":5206},[103,98597,159],{"class":109},[103,98599,191],{"class":162},[103,98601,98418],{"class":113},[103,98603,98604],{"class":105,"line":1617},[103,98605,98606],{"class":172},"#结果：（2，3，6，2）\n",[103,98608,98609],{"class":105,"line":1631},[103,98610,98611],{"class":172},"#axis=3\n",[103,98613,98614,98616,98618,98620,98622],{"class":105,"line":1636},[103,98615,98551],{"class":113},[103,98617,47504],{"class":5206},[103,98619,159],{"class":109},[103,98621,185],{"class":162},[103,98623,98418],{"class":113},[103,98625,98626],{"class":105,"line":1642},[103,98627,98628],{"class":172},"#结果：（2，3，3，4）\n",[45,98630,98632],{"id":98631},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98634,98635],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98637,98638],{},"①二维数组",[94,98640,98642],{"className":30368,"code":98641,"language":30370,"meta":24,"style":24},"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",[100,98643,98644,98668,98692,98697,98702],{"__ignoreMap":24},[103,98645,98646,98648,98650,98652,98654,98656,98658,98660,98662,98664,98666],{"class":105,"line":106},[103,98647,93296],{"class":113},[103,98649,159],{"class":109},[103,98651,92992],{"class":113},[103,98653,331],{"class":162},[103,98655,491],{"class":113},[103,98657,636],{"class":162},[103,98659,92997],{"class":113},[103,98661,185],{"class":162},[103,98663,491],{"class":113},[103,98665,406],{"class":162},[103,98667,120],{"class":113},[103,98669,98670,98672,98674,98676,98678,98680,98682,98684,98686,98688,98690],{"class":105,"line":25},[103,98671,98177],{"class":113},[103,98673,159],{"class":109},[103,98675,92992],{"class":113},[103,98677,450],{"class":162},[103,98679,491],{"class":113},[103,98681,755],{"class":162},[103,98683,92997],{"class":113},[103,98685,185],{"class":162},[103,98687,491],{"class":113},[103,98689,406],{"class":162},[103,98691,120],{"class":113},[103,98693,98694],{"class":105,"line":1168},[103,98695,98696],{"class":113},"np.hstack((aa,bb))\n",[103,98698,98699],{"class":105,"line":1183},[103,98700,98701],{"class":172},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[103,98703,98704],{"class":105,"line":1189},[103,98705,98706],{"class":172},"#np.hstack([aa,bb])\n",[14,98708,98223],{},[14,98710,98711],{},[1451,98712],{"alt":24,"src":98713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98715,98716],{},"等效于concatenate()函数中axis=1时的情况",[14,98718,98719],{},"②三维数组",[94,98721,98723],{"className":30368,"code":98722,"language":30370,"meta":24,"style":24},"#两个三行六列\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",[100,98724,98725,98729,98757,98785,98790,98795],{"__ignoreMap":24},[103,98726,98727],{"class":105,"line":106},[103,98728,98278],{"class":172},[103,98730,98731,98733,98735,98737,98739,98741,98743,98745,98747,98749,98751,98753,98755],{"class":105,"line":25},[103,98732,95511],{"class":113},[103,98734,159],{"class":109},[103,98736,92992],{"class":113},[103,98738,331],{"class":162},[103,98740,491],{"class":113},[103,98742,438],{"class":162},[103,98744,92997],{"class":113},[103,98746,191],{"class":162},[103,98748,491],{"class":113},[103,98750,185],{"class":162},[103,98752,491],{"class":113},[103,98754,457],{"class":162},[103,98756,120],{"class":113},[103,98758,98759,98761,98763,98765,98767,98769,98771,98773,98775,98777,98779,98781,98783],{"class":105,"line":1168},[103,98760,98311],{"class":113},[103,98762,159],{"class":109},[103,98764,92992],{"class":113},[103,98766,450],{"class":162},[103,98768,491],{"class":113},[103,98770,98322],{"class":162},[103,98772,92997],{"class":113},[103,98774,191],{"class":162},[103,98776,491],{"class":113},[103,98778,185],{"class":162},[103,98780,491],{"class":113},[103,98782,457],{"class":162},[103,98784,120],{"class":113},[103,98786,98787],{"class":105,"line":1183},[103,98788,98789],{"class":172},"#使用hstack\n",[103,98791,98792],{"class":105,"line":1189},[103,98793,98794],{"class":113},"np.hstack((aaa,bbb)).shape\n",[103,98796,98797],{"class":105,"line":1203},[103,98798,98799],{"class":172},"#输出：（2，6，6）\n",[45,98801,98803],{"id":98802},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98805,98806],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98808,98638],{},[94,98810,98812],{"className":30368,"code":98811,"language":30370,"meta":24,"style":24},"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",[100,98813,98814,98838,98862,98867,98872,98877],{"__ignoreMap":24},[103,98815,98816,98818,98820,98822,98824,98826,98828,98830,98832,98834,98836],{"class":105,"line":106},[103,98817,93296],{"class":113},[103,98819,159],{"class":109},[103,98821,92992],{"class":113},[103,98823,331],{"class":162},[103,98825,491],{"class":113},[103,98827,636],{"class":162},[103,98829,92997],{"class":113},[103,98831,185],{"class":162},[103,98833,491],{"class":113},[103,98835,406],{"class":162},[103,98837,120],{"class":113},[103,98839,98840,98842,98844,98846,98848,98850,98852,98854,98856,98858,98860],{"class":105,"line":25},[103,98841,98177],{"class":113},[103,98843,159],{"class":109},[103,98845,92992],{"class":113},[103,98847,450],{"class":162},[103,98849,491],{"class":113},[103,98851,755],{"class":162},[103,98853,92997],{"class":113},[103,98855,185],{"class":162},[103,98857,491],{"class":113},[103,98859,406],{"class":162},[103,98861,120],{"class":113},[103,98863,98864],{"class":105,"line":1168},[103,98865,98866],{"class":172},"#vstack 垂直方向进行堆叠\n",[103,98868,98869],{"class":105,"line":1183},[103,98870,98871],{"class":113},"np.vstack((aa,bb))\n",[103,98873,98874],{"class":105,"line":1189},[103,98875,98876],{"class":172},"#与hstack传的参数类似，等价于：\n",[103,98878,98879],{"class":105,"line":1203},[103,98880,98881],{"class":113},"np.vstack([aa,bb])\n",[14,98883,98223],{},[14,98885,98886],{},[1451,98887],{"alt":24,"src":98888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98890,98719],{},[94,98892,98894],{"className":30368,"code":98893,"language":30370,"meta":24,"style":24},"#两个三行六列\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",[100,98895,98896,98900,98928,98956,98961,98966],{"__ignoreMap":24},[103,98897,98898],{"class":105,"line":106},[103,98899,98278],{"class":172},[103,98901,98902,98904,98906,98908,98910,98912,98914,98916,98918,98920,98922,98924,98926],{"class":105,"line":25},[103,98903,95511],{"class":113},[103,98905,159],{"class":109},[103,98907,92992],{"class":113},[103,98909,331],{"class":162},[103,98911,491],{"class":113},[103,98913,438],{"class":162},[103,98915,92997],{"class":113},[103,98917,191],{"class":162},[103,98919,491],{"class":113},[103,98921,185],{"class":162},[103,98923,491],{"class":113},[103,98925,457],{"class":162},[103,98927,120],{"class":113},[103,98929,98930,98932,98934,98936,98938,98940,98942,98944,98946,98948,98950,98952,98954],{"class":105,"line":1168},[103,98931,98311],{"class":113},[103,98933,159],{"class":109},[103,98935,92992],{"class":113},[103,98937,450],{"class":162},[103,98939,491],{"class":113},[103,98941,98322],{"class":162},[103,98943,92997],{"class":113},[103,98945,191],{"class":162},[103,98947,491],{"class":113},[103,98949,185],{"class":162},[103,98951,491],{"class":113},[103,98953,457],{"class":162},[103,98955,120],{"class":113},[103,98957,98958],{"class":105,"line":1183},[103,98959,98960],{"class":172},"#使用vstack\n",[103,98962,98963],{"class":105,"line":1189},[103,98964,98965],{"class":113},"np.vstack((aaa,bbb)).shape\n",[103,98967,98968],{"class":105,"line":1203},[103,98969,98970],{"class":172},"#输出：（4，3，6）\n",[45,98972,98974],{"id":98973},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,98976,98977],{},"该方法是三维数组特有的方法",[14,98979,98980],{},"也就是说",[14,98982,98983],{},"一维数组拼接方法用：concatenate()",[14,98985,98986],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,98988,98989],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,98991,98992],{},"四维数组及多维数组只能用concatenate进行拼接",[94,98994,98996],{"className":30368,"code":98995,"language":30370,"meta":24,"style":24},"#两个三行六列\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",[100,98997,98998,99002,99030,99058,99063,99068],{"__ignoreMap":24},[103,98999,99000],{"class":105,"line":106},[103,99001,98278],{"class":172},[103,99003,99004,99006,99008,99010,99012,99014,99016,99018,99020,99022,99024,99026,99028],{"class":105,"line":25},[103,99005,95511],{"class":113},[103,99007,159],{"class":109},[103,99009,92992],{"class":113},[103,99011,331],{"class":162},[103,99013,491],{"class":113},[103,99015,438],{"class":162},[103,99017,92997],{"class":113},[103,99019,191],{"class":162},[103,99021,491],{"class":113},[103,99023,185],{"class":162},[103,99025,491],{"class":113},[103,99027,457],{"class":162},[103,99029,120],{"class":113},[103,99031,99032,99034,99036,99038,99040,99042,99044,99046,99048,99050,99052,99054,99056],{"class":105,"line":1168},[103,99033,98311],{"class":113},[103,99035,159],{"class":109},[103,99037,92992],{"class":113},[103,99039,450],{"class":162},[103,99041,491],{"class":113},[103,99043,98322],{"class":162},[103,99045,92997],{"class":113},[103,99047,191],{"class":162},[103,99049,491],{"class":113},[103,99051,185],{"class":162},[103,99053,491],{"class":113},[103,99055,457],{"class":162},[103,99057,120],{"class":113},[103,99059,99060],{"class":105,"line":1183},[103,99061,99062],{"class":172},"#使用dstack\n",[103,99064,99065],{"class":105,"line":1189},[103,99066,99067],{"class":113},"np.dstack((aaa,bbb)).shape\n",[103,99069,99070],{"class":105,"line":1203},[103,99071,99072],{"class":172},"#结果：（2，3，12）\n",[5116,99074,99075],{},"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":24,"searchDepth":25,"depth":25,"links":99077},[99078,99079,99080,99081],{"id":98017,"depth":25,"text":98018},{"id":98631,"depth":25,"text":98632},{"id":98802,"depth":25,"text":98803},{"id":98973,"depth":25,"text":98974},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98009,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99088,"title":99089,"body":99090,"description":27,"extension":28,"meta":99365,"navigation":30,"path":99366,"seo":99367,"stem":99368,"__hash__":99369},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99091,"toc":99363},[99092,99095,99098,99192,99195,99198,99201,99204,99207,99210,99213,99216,99360],[10,99093,99089],{"id":99094},"_7数组转置",[14,99096,99097],{},"使用transpose()函数",[94,99099,99101],{"className":30368,"code":99100,"language":30370,"meta":24,"style":24},"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",[100,99102,99103,99113,99137,99142,99147,99152,99157,99165,99169,99173,99178,99183,99188],{"__ignoreMap":24},[103,99104,99105,99107,99109,99111],{"class":105,"line":106},[103,99106,30382],{"class":109},[103,99108,31370],{"class":113},[103,99110,31373],{"class":109},[103,99112,31376],{"class":113},[103,99114,99115,99117,99119,99121,99123,99125,99127,99129,99131,99133,99135],{"class":105,"line":25},[103,99116,17],{"class":113},[103,99118,159],{"class":109},[103,99120,31707],{"class":113},[103,99122,331],{"class":162},[103,99124,491],{"class":113},[103,99126,636],{"class":162},[103,99128,92997],{"class":113},[103,99130,406],{"class":162},[103,99132,491],{"class":113},[103,99134,185],{"class":162},[103,99136,120],{"class":113},[103,99138,99139],{"class":105,"line":1168},[103,99140,99141],{"class":172},"#二维数组转置\n",[103,99143,99144],{"class":105,"line":1183},[103,99145,99146],{"class":172},"#调用transpose()函数\n",[103,99148,99149],{"class":105,"line":1189},[103,99150,99151],{"class":113},"a.transpose()\n",[103,99153,99154],{"class":105,"line":1203},[103,99155,99156],{"class":172},"#对于二维数组也可以采用.T来实现\n",[103,99158,99159,99162],{"class":105,"line":1209},[103,99160,99161],{"class":113},"a.T",[103,99163,99164],{"class":172},"#与上述代码一样\n",[103,99166,99167],{"class":105,"line":1300},[103,99168,93554],{"class":172},[103,99170,99171],{"class":105,"line":1306},[103,99172,93918],{"class":218},[103,99174,99175],{"class":105,"line":1318},[103,99176,99177],{"class":218},"array([[ 1,  4,  7, 10],\n",[103,99179,99180],{"class":105,"line":1601},[103,99181,99182],{"class":218},"       [ 2,  5,  8, 11],\n",[103,99184,99185],{"class":105,"line":1606},[103,99186,99187],{"class":218},"       [ 3,  6,  9, 12]])\n",[103,99189,99190],{"class":105,"line":1612},[103,99191,93918],{"class":218},[14,99193,99194],{},"也可以使用np.transpose()的形式",[14,99196,99197],{},"#多维数组进行转置 np.transpose()",[14,99199,99200],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99202,99203],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99205,99206],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99208,99209],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99211,99212],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99214,99215],{},"四维及以上的数组也是一样的道理",[94,99217,99219],{"className":30368,"code":99218,"language":30370,"meta":24,"style":24},"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",[100,99220,99221,99249,99254,99259,99264,99282,99287,99319,99324,99329,99334,99355],{"__ignoreMap":24},[103,99222,99223,99225,99227,99229,99231,99233,99235,99237,99239,99241,99243,99245,99247],{"class":105,"line":106},[103,99224,933],{"class":113},[103,99226,159],{"class":109},[103,99228,92992],{"class":113},[103,99230,331],{"class":162},[103,99232,491],{"class":113},[103,99234,438],{"class":162},[103,99236,92997],{"class":113},[103,99238,185],{"class":162},[103,99240,491],{"class":113},[103,99242,457],{"class":162},[103,99244,491],{"class":113},[103,99246,191],{"class":162},[103,99248,120],{"class":113},[103,99250,99251],{"class":105,"line":25},[103,99252,99253],{"class":113},"x.shape\n",[103,99255,99256],{"class":105,"line":1168},[103,99257,99258],{"class":172},"#结果：（3,6,2）\n",[103,99260,99261],{"class":105,"line":1183},[103,99262,99263],{"class":172},"#使用np.transpose()进行转置 变为(2,6,3)\n",[103,99265,99266,99269,99271,99273,99275,99277,99279],{"class":105,"line":1189},[103,99267,99268],{"class":113},"np.transpose(x,(",[103,99270,191],{"class":162},[103,99272,491],{"class":113},[103,99274,331],{"class":162},[103,99276,491],{"class":113},[103,99278,305],{"class":162},[103,99280,99281],{"class":113},")).shape\n",[103,99283,99284],{"class":105,"line":1203},[103,99285,99286],{"class":172},"#结果：(2,6,3)\n",[103,99288,99289,99291,99293,99295,99297,99299,99301,99303,99305,99307,99309,99311,99313,99315,99317],{"class":105,"line":1209},[103,99290,98496],{"class":113},[103,99292,159],{"class":109},[103,99294,92992],{"class":113},[103,99296,331],{"class":162},[103,99298,491],{"class":113},[103,99300,438],{"class":162},[103,99302,92997],{"class":113},[103,99304,185],{"class":162},[103,99306,491],{"class":113},[103,99308,191],{"class":162},[103,99310,491],{"class":113},[103,99312,331],{"class":162},[103,99314,491],{"class":113},[103,99316,457],{"class":162},[103,99318,120],{"class":113},[103,99320,99321],{"class":105,"line":1300},[103,99322,99323],{"class":113},"aaaa.shape\n",[103,99325,99326],{"class":105,"line":1306},[103,99327,99328],{"class":172},"#结果：（3，2，1，6）\n",[103,99330,99331],{"class":105,"line":1318},[103,99332,99333],{"class":172},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[103,99335,99336,99339,99341,99343,99345,99347,99349,99351,99353],{"class":105,"line":1601},[103,99337,99338],{"class":113},"np.transpose(aaaa,(",[103,99340,331],{"class":162},[103,99342,491],{"class":113},[103,99344,191],{"class":162},[103,99346,491],{"class":113},[103,99348,305],{"class":162},[103,99350,491],{"class":113},[103,99352,185],{"class":162},[103,99354,99281],{"class":113},[103,99356,99357],{"class":105,"line":1606},[103,99358,99359],{"class":172},"#结果：(2,1,3,6)\n",[5116,99361,99362],{},"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":24,"searchDepth":25,"depth":25,"links":99364},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99089,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99371,"title":99372,"body":99373,"description":27,"extension":28,"meta":100107,"navigation":30,"path":100108,"seo":100109,"stem":100110,"__hash__":100111},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99374,"toc":100105},[99375,99378,99381,99384,99387,99390,99393,99396,99399,99508,99511,99514,100102],[10,99376,99372],{"id":99377},"_8数组分割",[14,99379,99380],{},"split分割",[14,99382,99383],{},"numpy.split(ary,indics_or_sections,axis)",[14,99385,99386],{},"解释：",[14,99388,99389],{},"ary:被分割的数组",[14,99391,99392],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99394,99395],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99397,99398],{},"①一维数组的分割",[94,99400,99402],{"className":30368,"code":99401,"language":30370,"meta":24,"style":24},"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",[100,99403,99404,99420,99425,99434,99438,99443,99451,99455,99460,99465,99478,99482,99487,99499,99503],{"__ignoreMap":24},[103,99405,99406,99408,99410,99412,99414,99416,99418],{"class":105,"line":106},[103,99407,17],{"class":113},[103,99409,159],{"class":109},[103,99411,92992],{"class":113},[103,99413,331],{"class":162},[103,99415,491],{"class":113},[103,99417,533],{"class":162},[103,99419,120],{"class":113},[103,99421,99422],{"class":105,"line":25},[103,99423,99424],{"class":172},"#如果传入整数，必须能够平分，否则会报错\n",[103,99426,99427,99430,99432],{"class":105,"line":1168},[103,99428,99429],{"class":113},"np.split(a,",[103,99431,191],{"class":162},[103,99433,120],{"class":113},[103,99435,99436],{"class":105,"line":1183},[103,99437,93554],{"class":172},[103,99439,99440],{"class":105,"line":1189},[103,99441,99442],{"class":172},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[103,99444,99445,99447,99449],{"class":105,"line":1203},[103,99446,99429],{"class":113},[103,99448,406],{"class":162},[103,99450,120],{"class":113},[103,99452,99453],{"class":105,"line":1209},[103,99454,93554],{"class":172},[103,99456,99457],{"class":105,"line":1300},[103,99458,99459],{"class":172},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[103,99461,99462],{"class":105,"line":1306},[103,99463,99464],{"class":172},"#传入数组\n",[103,99466,99467,99470,99472,99474,99476],{"class":105,"line":1318},[103,99468,99469],{"class":113},"np.split(a,[",[103,99471,185],{"class":162},[103,99473,491],{"class":113},[103,99475,432],{"class":162},[103,99477,4646],{"class":113},[103,99479,99480],{"class":105,"line":1601},[103,99481,93554],{"class":172},[103,99483,99484],{"class":105,"line":1606},[103,99485,99486],{"class":172},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[103,99488,99489,99491,99493,99495,99497],{"class":105,"line":1612},[103,99490,99469],{"class":113},[103,99492,432],{"class":162},[103,99494,491],{"class":113},[103,99496,482],{"class":162},[103,99498,4646],{"class":113},[103,99500,99501],{"class":105,"line":1617},[103,99502,93554],{"class":172},[103,99504,99505],{"class":105,"line":1631},[103,99506,99507],{"class":172},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99509,99510],{},"②二维数组的分割",[14,99512,99513],{},"使用split()",[94,99515,99517],{"className":30368,"code":99516,"language":30370,"meta":24,"style":24},"#二维数组分割\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",[100,99518,99519,99524,99548,99553,99562,99566,99570,99575,99580,99585,99590,99595,99600,99605,99609,99622,99626,99630,99634,99638,99642,99647,99652,99657,99661,99666,99682,99686,99690,99695,99700,99705,99710,99715,99720,99725,99730,99735,99740,99745,99750,99755,99760,99765,99770,99775,99780,99784,99788,99808,99812,99816,99821,99826,99831,99836,99841,99846,99851,99856,99861,99866,99871,99876,99881,99886,99891,99896,99901,99906,99910,99915,99924,99928,99932,99936,99940,99944,99948,99952,99956,99960,99969,99973,99977,99981,99985,99989,99993,99997,100001,100005,100009,100013,100017,100021,100025,100029,100033,100037,100041,100045,100049,100053,100066,100070,100074,100078,100082,100086,100090,100094,100098],{"__ignoreMap":24},[103,99520,99521],{"class":105,"line":106},[103,99522,99523],{"class":172},"#二维数组分割\n",[103,99525,99526,99528,99530,99532,99534,99536,99538,99540,99542,99544,99546],{"class":105,"line":25},[103,99527,93296],{"class":113},[103,99529,159],{"class":109},[103,99531,92992],{"class":113},[103,99533,331],{"class":162},[103,99535,491],{"class":113},[103,99537,438],{"class":162},[103,99539,92997],{"class":113},[103,99541,457],{"class":162},[103,99543,491],{"class":113},[103,99545,457],{"class":162},[103,99547,120],{"class":113},[103,99549,99550],{"class":105,"line":1168},[103,99551,99552],{"class":172},"#默认axis=0  传入整数平均分,按行来的\n",[103,99554,99555,99558,99560],{"class":105,"line":1183},[103,99556,99557],{"class":113},"np.split(aa,",[103,99559,185],{"class":162},[103,99561,120],{"class":113},[103,99563,99564],{"class":105,"line":1189},[103,99565,95754],{"class":172},[103,99567,99568],{"class":105,"line":1203},[103,99569,93918],{"class":218},[103,99571,99572],{"class":105,"line":1209},[103,99573,99574],{"class":218},"[array([[ 1,  2,  3,  4,  5,  6],\n",[103,99576,99577],{"class":105,"line":1300},[103,99578,99579],{"class":218},"        [ 7,  8,  9, 10, 11, 12]]),\n",[103,99581,99582],{"class":105,"line":1306},[103,99583,99584],{"class":218}," array([[13, 14, 15, 16, 17, 18],\n",[103,99586,99587],{"class":105,"line":1318},[103,99588,99589],{"class":218},"        [19, 20, 21, 22, 23, 24]]),\n",[103,99591,99592],{"class":105,"line":1601},[103,99593,99594],{"class":218}," array([[25, 26, 27, 28, 29, 30],\n",[103,99596,99597],{"class":105,"line":1606},[103,99598,99599],{"class":218},"        [31, 32, 33, 34, 35, 36]])]\n",[103,99601,99602],{"class":105,"line":1612},[103,99603,99604],{"class":218}," '''\n",[103,99606,99607],{"class":105,"line":1617},[103,99608,99464],{"class":172},[103,99610,99611,99614,99616,99618,99620],{"class":105,"line":1631},[103,99612,99613],{"class":113},"np.split(aa,[",[103,99615,191],{"class":162},[103,99617,491],{"class":113},[103,99619,432],{"class":162},[103,99621,4646],{"class":113},[103,99623,99624],{"class":105,"line":1636},[103,99625,95754],{"class":172},[103,99627,99628],{"class":105,"line":1642},[103,99629,93918],{"class":218},[103,99631,99632],{"class":105,"line":1663},[103,99633,99574],{"class":218},[103,99635,99636],{"class":105,"line":1668},[103,99637,99579],{"class":218},[103,99639,99640],{"class":105,"line":1682},[103,99641,99584],{"class":218},[103,99643,99644],{"class":105,"line":1687},[103,99645,99646],{"class":218},"        [19, 20, 21, 22, 23, 24],\n",[103,99648,99649],{"class":105,"line":1716},[103,99650,99651],{"class":218},"        [25, 26, 27, 28, 29, 30]]),\n",[103,99653,99654],{"class":105,"line":1721},[103,99655,99656],{"class":218}," array([[31, 32, 33, 34, 35, 36]])]\n",[103,99658,99659],{"class":105,"line":1738},[103,99660,93918],{"class":218},[103,99662,99663],{"class":105,"line":1743},[103,99664,99665],{"class":172},"#axis=1 按照列来分\n",[103,99667,99668,99670,99672,99674,99676,99678,99680],{"class":105,"line":1748},[103,99669,99557],{"class":113},[103,99671,185],{"class":162},[103,99673,491],{"class":113},[103,99675,47504],{"class":5206},[103,99677,159],{"class":109},[103,99679,331],{"class":162},[103,99681,120],{"class":113},[103,99683,99684],{"class":105,"line":1753},[103,99685,95754],{"class":172},[103,99687,99688],{"class":105,"line":1767},[103,99689,93918],{"class":218},[103,99691,99692],{"class":105,"line":1772},[103,99693,99694],{"class":218},"[array([[ 1,  2],\n",[103,99696,99697],{"class":105,"line":2566},[103,99698,99699],{"class":218},"        [ 7,  8],\n",[103,99701,99702],{"class":105,"line":2580},[103,99703,99704],{"class":218},"        [13, 14],\n",[103,99706,99707],{"class":105,"line":2588},[103,99708,99709],{"class":218},"        [19, 20],\n",[103,99711,99712],{"class":105,"line":2593},[103,99713,99714],{"class":218},"        [25, 26],\n",[103,99716,99717],{"class":105,"line":2599},[103,99718,99719],{"class":218},"        [31, 32]]),\n",[103,99721,99722],{"class":105,"line":2605},[103,99723,99724],{"class":218}," array([[ 3,  4],\n",[103,99726,99727],{"class":105,"line":2610},[103,99728,99729],{"class":218},"        [ 9, 10],\n",[103,99731,99732],{"class":105,"line":7938},[103,99733,99734],{"class":218},"        [15, 16],\n",[103,99736,99737],{"class":105,"line":7962},[103,99738,99739],{"class":218},"        [21, 22],\n",[103,99741,99742],{"class":105,"line":7967},[103,99743,99744],{"class":218},"        [27, 28],\n",[103,99746,99747],{"class":105,"line":7973},[103,99748,99749],{"class":218},"        [33, 34]]),\n",[103,99751,99752],{"class":105,"line":8000},[103,99753,99754],{"class":218}," array([[ 5,  6],\n",[103,99756,99757],{"class":105,"line":8005},[103,99758,99759],{"class":218},"        [11, 12],\n",[103,99761,99762],{"class":105,"line":8011},[103,99763,99764],{"class":218},"        [17, 18],\n",[103,99766,99767],{"class":105,"line":8023},[103,99768,99769],{"class":218},"        [23, 24],\n",[103,99771,99772],{"class":105,"line":8035},[103,99773,99774],{"class":218},"        [29, 30],\n",[103,99776,99777],{"class":105,"line":8047},[103,99778,99779],{"class":218},"        [35, 36]])]\n",[103,99781,99782],{"class":105,"line":9706},[103,99783,99604],{"class":218},[103,99785,99786],{"class":105,"line":9731},[103,99787,99464],{"class":172},[103,99789,99790,99792,99794,99796,99798,99800,99802,99804,99806],{"class":105,"line":9754},[103,99791,99613],{"class":113},[103,99793,331],{"class":162},[103,99795,491],{"class":113},[103,99797,191],{"class":162},[103,99799,41599],{"class":113},[103,99801,47504],{"class":5206},[103,99803,159],{"class":109},[103,99805,331],{"class":162},[103,99807,120],{"class":113},[103,99809,99810],{"class":105,"line":9778},[103,99811,93554],{"class":172},[103,99813,99814],{"class":105,"line":9783},[103,99815,93918],{"class":218},[103,99817,99818],{"class":105,"line":9788},[103,99819,99820],{"class":218},"[array([[ 1],\n",[103,99822,99823],{"class":105,"line":9793},[103,99824,99825],{"class":218},"        [ 7],\n",[103,99827,99828],{"class":105,"line":9802},[103,99829,99830],{"class":218},"        [13],\n",[103,99832,99833],{"class":105,"line":9807},[103,99834,99835],{"class":218},"        [19],\n",[103,99837,99838],{"class":105,"line":9813},[103,99839,99840],{"class":218},"        [25],\n",[103,99842,99843],{"class":105,"line":9834},[103,99844,99845],{"class":218},"        [31]]),\n",[103,99847,99848],{"class":105,"line":9840},[103,99849,99850],{"class":218}," array([[ 2],\n",[103,99852,99853],{"class":105,"line":9854},[103,99854,99855],{"class":218},"        [ 8],\n",[103,99857,99858],{"class":105,"line":9860},[103,99859,99860],{"class":218},"        [14],\n",[103,99862,99863],{"class":105,"line":9887},[103,99864,99865],{"class":218},"        [20],\n",[103,99867,99868],{"class":105,"line":9896},[103,99869,99870],{"class":218},"        [26],\n",[103,99872,99873],{"class":105,"line":9902},[103,99874,99875],{"class":218},"        [32]]),\n",[103,99877,99878],{"class":105,"line":9910},[103,99879,99880],{"class":218}," array([[ 3,  4,  5,  6],\n",[103,99882,99883],{"class":105,"line":9915},[103,99884,99885],{"class":218},"        [ 9, 10, 11, 12],\n",[103,99887,99888],{"class":105,"line":16594},[103,99889,99890],{"class":218},"        [15, 16, 17, 18],\n",[103,99892,99893],{"class":105,"line":16600},[103,99894,99895],{"class":218},"        [21, 22, 23, 24],\n",[103,99897,99898],{"class":105,"line":16623},[103,99899,99900],{"class":218},"        [27, 28, 29, 30],\n",[103,99902,99903],{"class":105,"line":16629},[103,99904,99905],{"class":218},"        [33, 34, 35, 36]])]\n",[103,99907,99908],{"class":105,"line":16652},[103,99909,93918],{"class":218},[103,99911,99912],{"class":105,"line":16666},[103,99913,99914],{"class":172},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[103,99916,99917,99920,99922],{"class":105,"line":16686},[103,99918,99919],{"class":113},"np.vsplit(aa,",[103,99921,185],{"class":162},[103,99923,120],{"class":113},[103,99925,99926],{"class":105,"line":16692},[103,99927,93554],{"class":172},[103,99929,99930],{"class":105,"line":16703},[103,99931,93918],{"class":218},[103,99933,99934],{"class":105,"line":16726},[103,99935,99574],{"class":218},[103,99937,99938],{"class":105,"line":16748},[103,99939,99579],{"class":218},[103,99941,99942],{"class":105,"line":16753},[103,99943,99584],{"class":218},[103,99945,99946],{"class":105,"line":16759},[103,99947,99589],{"class":218},[103,99949,99950],{"class":105,"line":16773},[103,99951,99594],{"class":218},[103,99953,99954],{"class":105,"line":16786},[103,99955,99599],{"class":218},[103,99957,99958],{"class":105,"line":16791},[103,99959,93918],{"class":218},[103,99961,99962,99965,99967],{"class":105,"line":16805},[103,99963,99964],{"class":113},"np.hsplit(aa,",[103,99966,185],{"class":162},[103,99968,120],{"class":113},[103,99970,99971],{"class":105,"line":16810},[103,99972,93554],{"class":172},[103,99974,99975],{"class":105,"line":16816},[103,99976,93918],{"class":218},[103,99978,99979],{"class":105,"line":16821},[103,99980,99694],{"class":218},[103,99982,99983],{"class":105,"line":16835},[103,99984,99699],{"class":218},[103,99986,99987],{"class":105,"line":16840},[103,99988,99704],{"class":218},[103,99990,99991],{"class":105,"line":16845},[103,99992,99709],{"class":218},[103,99994,99995],{"class":105,"line":16859},[103,99996,99714],{"class":218},[103,99998,99999],{"class":105,"line":16871},[103,100000,99719],{"class":218},[103,100002,100003],{"class":105,"line":16876},[103,100004,99724],{"class":218},[103,100006,100007],{"class":105,"line":16889},[103,100008,99729],{"class":218},[103,100010,100011],{"class":105,"line":16894},[103,100012,99734],{"class":218},[103,100014,100015],{"class":105,"line":16899},[103,100016,99739],{"class":218},[103,100018,100019],{"class":105,"line":16904},[103,100020,99744],{"class":218},[103,100022,100023],{"class":105,"line":16917},[103,100024,99749],{"class":218},[103,100026,100027],{"class":105,"line":16922},[103,100028,99754],{"class":218},[103,100030,100031],{"class":105,"line":32623},[103,100032,99759],{"class":218},[103,100034,100035],{"class":105,"line":32629},[103,100036,99764],{"class":218},[103,100038,100039],{"class":105,"line":32635},[103,100040,99769],{"class":218},[103,100042,100043],{"class":105,"line":32641},[103,100044,99774],{"class":218},[103,100046,100047],{"class":105,"line":32647},[103,100048,99779],{"class":218},[103,100050,100051],{"class":105,"line":32658},[103,100052,93918],{"class":218},[103,100054,100055,100058,100060,100062,100064],{"class":105,"line":32664},[103,100056,100057],{"class":113},"np.vsplit(aa,[",[103,100059,191],{"class":162},[103,100061,491],{"class":113},[103,100063,432],{"class":162},[103,100065,4646],{"class":113},[103,100067,100068],{"class":105,"line":32684},[103,100069,93554],{"class":172},[103,100071,100072],{"class":105,"line":32690},[103,100073,93918],{"class":218},[103,100075,100076],{"class":105,"line":32701},[103,100077,99574],{"class":218},[103,100079,100080],{"class":105,"line":32707},[103,100081,99579],{"class":218},[103,100083,100084],{"class":105,"line":32713},[103,100085,99584],{"class":218},[103,100087,100088],{"class":105,"line":32719},[103,100089,99646],{"class":218},[103,100091,100092],{"class":105,"line":32725},[103,100093,99651],{"class":218},[103,100095,100096],{"class":105,"line":32731},[103,100097,99656],{"class":218},[103,100099,100100],{"class":105,"line":32737},[103,100101,99604],{"class":218},[5116,100103,100104],{},"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":24,"searchDepth":25,"depth":25,"links":100106},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99372,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100113,"title":100114,"body":100115,"description":27,"extension":28,"meta":100609,"navigation":30,"path":100610,"seo":100611,"stem":100612,"__hash__":100613},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100116,"toc":100600},[100117,100120,100123,100148,100152,100211,100263,100267,100269,100305,100359,100361,100399,100470,100474,100479,100483,100486,100519,100522,100526,100529,100532,100535,100538,100543,100547,100550,100553,100556,100559,100564,100568,100573,100576,100597],[10,100118,100114],{"id":100119},"_9数学函数",[14,100121,100122],{},"补充回顾：python的列表推导式",[94,100124,100126],{"className":30368,"code":100125,"language":30370,"meta":24,"style":24},"[1\u002Fi for i in a]\n",[100,100127,100128],{"__ignoreMap":24},[103,100129,100130,100132,100134,100136,100139,100141,100143,100145],{"class":105,"line":106},[103,100131,1003],{"class":113},[103,100133,331],{"class":162},[103,100135,697],{"class":109},[103,100137,100138],{"class":113},"i ",[103,100140,3014],{"class":109},[103,100142,9428],{"class":113},[103,100144,26033],{"class":109},[103,100146,100147],{"class":113}," a]\n",[45,100149,100151],{"id":100150},"_91-求倒数","9.1 求倒数",[94,100153,100155],{"className":30368,"code":100154,"language":30370,"meta":24,"style":24},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[100,100156,100157,100162,100190,100202],{"__ignoreMap":24},[103,100158,100159],{"class":105,"line":106},[103,100160,100161],{"class":172},"#数组求倒数\n",[103,100163,100164,100166,100168,100170,100172,100174,100176,100178,100180,100182,100184,100186,100188],{"class":105,"line":25},[103,100165,17],{"class":113},[103,100167,159],{"class":109},[103,100169,1003],{"class":113},[103,100171,331],{"class":162},[103,100173,491],{"class":113},[103,100175,191],{"class":162},[103,100177,491],{"class":113},[103,100179,185],{"class":162},[103,100181,491],{"class":113},[103,100183,406],{"class":162},[103,100185,491],{"class":113},[103,100187,432],{"class":162},[103,100189,33236],{"class":113},[103,100191,100192,100194,100196,100199],{"class":105,"line":1168},[103,100193,376],{"class":113},[103,100195,159],{"class":109},[103,100197,100198],{"class":113},"np.array(a)",[103,100200,100201],{"class":172},"#将列表转换为数组\n",[103,100203,100204,100206,100208],{"class":105,"line":1183},[103,100205,331],{"class":162},[103,100207,697],{"class":109},[103,100209,100210],{"class":113},"b\n",[94,100212,100214],{"className":30368,"code":100213,"language":30370,"meta":24,"style":24},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[100,100215,100216,100244,100253,100258],{"__ignoreMap":24},[103,100217,100218,100220,100222,100224,100226,100228,100230,100232,100234,100236,100238,100240,100242],{"class":105,"line":106},[103,100219,17],{"class":113},[103,100221,159],{"class":109},[103,100223,1003],{"class":113},[103,100225,331],{"class":162},[103,100227,491],{"class":113},[103,100229,191],{"class":162},[103,100231,491],{"class":113},[103,100233,185],{"class":162},[103,100235,491],{"class":113},[103,100237,406],{"class":162},[103,100239,491],{"class":113},[103,100241,432],{"class":162},[103,100243,33236],{"class":113},[103,100245,100246,100248,100250],{"class":105,"line":25},[103,100247,376],{"class":113},[103,100249,159],{"class":109},[103,100251,100252],{"class":113},"np.array(a)\n",[103,100254,100255],{"class":105,"line":1168},[103,100256,100257],{"class":172},"#调用numpy中的函数reciprocal()\n",[103,100259,100260],{"class":105,"line":1183},[103,100261,100262],{"class":113},"np.reciprocal(b)\n",[45,100264,100266],{"id":100265},"_92-求平方","9.2 求平方",[14,100268,94520],{},[94,100270,100272],{"className":30368,"code":100271,"language":30370,"meta":24,"style":24},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[100,100273,100274,100279,100284,100300],{"__ignoreMap":24},[103,100275,100276],{"class":105,"line":106},[103,100277,100278],{"class":172},"#square()，求平方\n",[103,100280,100281],{"class":105,"line":25},[103,100282,100283],{"class":172},"#一维数组\n",[103,100285,100286,100288,100290,100292,100294,100296,100298],{"class":105,"line":1168},[103,100287,17],{"class":113},[103,100289,159],{"class":109},[103,100291,92992],{"class":113},[103,100293,331],{"class":162},[103,100295,491],{"class":113},[103,100297,559],{"class":162},[103,100299,120],{"class":113},[103,100301,100302],{"class":105,"line":1183},[103,100303,100304],{"class":113},"np.square(a)\n",[94,100306,100308],{"className":30368,"code":100307,"language":30370,"meta":24,"style":24},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[100,100309,100310,100315,100320,100341],{"__ignoreMap":24},[103,100311,100312],{"class":105,"line":106},[103,100313,100314],{"class":172},"#或者通过循环遍历的形式来计算\n",[103,100316,100317],{"class":105,"line":25},[103,100318,100319],{"class":172},"#这是一个列表\n",[103,100321,100322,100325,100327,100329,100331,100333,100335,100338],{"class":105,"line":1168},[103,100323,100324],{"class":113},"[i",[103,100326,568],{"class":109},[103,100328,100138],{"class":113},[103,100330,3014],{"class":109},[103,100332,9428],{"class":113},[103,100334,26033],{"class":109},[103,100336,100337],{"class":113}," a]",[103,100339,100340],{"class":172},"#这个求完之后在数列当中\n",[103,100342,100343,100346,100348,100350,100352,100354,100356],{"class":105,"line":1183},[103,100344,100345],{"class":113},"np.array([i",[103,100347,568],{"class":109},[103,100349,100138],{"class":113},[103,100351,3014],{"class":109},[103,100353,9428],{"class":113},[103,100355,26033],{"class":109},[103,100357,100358],{"class":113}," a])\n",[14,100360,93281],{},[94,100362,100364],{"className":30368,"code":100363,"language":30370,"meta":24,"style":24},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[100,100365,100366,100370,100394],{"__ignoreMap":24},[103,100367,100368],{"class":105,"line":106},[103,100369,93291],{"class":172},[103,100371,100372,100374,100376,100378,100380,100382,100384,100386,100388,100390,100392],{"class":105,"line":25},[103,100373,93296],{"class":113},[103,100375,159],{"class":109},[103,100377,92992],{"class":113},[103,100379,331],{"class":162},[103,100381,491],{"class":113},[103,100383,636],{"class":162},[103,100385,92997],{"class":113},[103,100387,406],{"class":162},[103,100389,491],{"class":113},[103,100391,185],{"class":162},[103,100393,120],{"class":113},[103,100395,100396],{"class":105,"line":1168},[103,100397,100398],{"class":113},"np.square(aa)\n",[94,100400,100402],{"className":30368,"code":100401,"language":30370,"meta":24,"style":24},"#传统的方式\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",[100,100403,100404,100409,100418,100434,100450,100465],{"__ignoreMap":24},[103,100405,100406],{"class":105,"line":106},[103,100407,100408],{"class":172},"#传统的方式\n",[103,100410,100411,100413,100415],{"class":105,"line":25},[103,100412,98177],{"class":113},[103,100414,159],{"class":109},[103,100416,100417],{"class":113},"np.empty_like(aa)\n",[103,100419,100420,100422,100424,100426,100428,100430,100432],{"class":105,"line":1168},[103,100421,3014],{"class":109},[103,100423,9428],{"class":113},[103,100425,26033],{"class":109},[103,100427,32433],{"class":162},[103,100429,114],{"class":113},[103,100431,406],{"class":162},[103,100433,30776],{"class":113},[103,100435,100436,100438,100440,100442,100444,100446,100448],{"class":105,"line":1183},[103,100437,3190],{"class":109},[103,100439,9490],{"class":113},[103,100441,26033],{"class":109},[103,100443,32433],{"class":162},[103,100445,114],{"class":113},[103,100447,185],{"class":162},[103,100449,30776],{"class":113},[103,100451,100452,100455,100457,100460,100462],{"class":105,"line":1189},[103,100453,100454],{"class":113},"        bb[i,j]",[103,100456,159],{"class":109},[103,100458,100459],{"class":113},"aa[i,j]",[103,100461,568],{"class":109},[103,100463,100464],{"class":113},"aa[i,j]\n",[103,100466,100467],{"class":105,"line":1203},[103,100468,100469],{"class":113},"bb\n",[45,100471,100473],{"id":100472},"_93-求各元素的符号","9.3 求各元素的符号",[14,100475,100476],{},[1451,100477],{"alt":24,"src":100478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[45,100480,100482],{"id":100481},"_94-modf函数","9.4 modf函数",[14,100484,100485],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[94,100487,100489],{"className":30368,"code":100488,"language":30370,"meta":24,"style":24},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[100,100490,100491,100514],{"__ignoreMap":24},[103,100492,100493,100495,100497,100499,100501,100503,100505,100507,100509,100512],{"class":105,"line":106},[103,100494,17],{"class":113},[103,100496,159],{"class":109},[103,100498,92992],{"class":113},[103,100500,645],{"class":109},[103,100502,559],{"class":162},[103,100504,491],{"class":113},[103,100506,559],{"class":162},[103,100508,491],{"class":113},[103,100510,100511],{"class":162},"0.3",[103,100513,120],{"class":113},[103,100515,100516],{"class":105,"line":25},[103,100517,100518],{"class":113},"np.modf(a)\n",[14,100520,100521],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[45,100523,100525],{"id":100524},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100527,100528],{},"np.cell()",[14,100530,100531],{},"np.floor()",[14,100533,100534],{},"np.rint()",[14,100536,100537],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100539,100540],{},[1451,100541],{"alt":24,"src":100542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[45,100544,100546],{"id":100545},"_96-around函数","9.6 around()函数",[14,100548,100549],{},"around()函数也可以实现对数的小数位数进行操作",[14,100551,100552],{},"其中的参数：",[14,100554,100555],{},"1.要传的数组",[14,100557,100558],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100560,100561],{},[1451,100562],{"alt":24,"src":100563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[45,100565,100567],{"id":100566},"_97-三角函数","9.7 三角函数",[14,100569,100570],{},[1451,100571],{"alt":24,"src":100572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100574,100575],{},"引入图像模块非常重要",[94,100577,100579],{"className":30368,"code":100578,"language":30370,"meta":24,"style":24},"from matplotlib import pyplot as plt\n",[100,100580,100581],{"__ignoreMap":24},[103,100582,100583,100585,100588,100590,100593,100595],{"class":105,"line":106},[103,100584,30727],{"class":109},[103,100586,100587],{"class":113}," matplotlib ",[103,100589,30382],{"class":109},[103,100591,100592],{"class":113}," pyplot ",[103,100594,31373],{"class":109},[103,100596,31427],{"class":113},[5116,100598,100599],{},"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":24,"searchDepth":25,"depth":25,"links":100601},[100602,100603,100604,100605,100606,100607,100608],{"id":100150,"depth":25,"text":100151},{"id":100265,"depth":25,"text":100266},{"id":100472,"depth":25,"text":100473},{"id":100481,"depth":25,"text":100482},{"id":100524,"depth":25,"text":100525},{"id":100545,"depth":25,"text":100546},{"id":100566,"depth":25,"text":100567},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100114,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100615,"title":100616,"body":100617,"description":27,"extension":28,"meta":100621,"navigation":30,"path":100622,"seo":100623,"stem":100624,"__hash__":100625},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100618,"toc":100619},[],{"title":24,"searchDepth":25,"depth":25,"links":100620},[],{"category":50410},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100616,"description":27},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100627,"title":100628,"body":100629,"description":24,"extension":28,"meta":102637,"navigation":30,"path":102638,"seo":102639,"stem":102640,"__hash__":102641},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100630,"toc":102613},[100631,100634,100638,100641,100644,100650,100653,100676,100679,100713,100716,100757,100761,100764,100857,100860,100904,100907,100924,100927,100941,100944,100947,100992,100995,101032,101036,101039,101045,101050,101070,101074,101077,101143,101146,101164,101168,101171,101200,101210,101216,101220,101223,101229,101240,101244,101247,101277,101280,101560,101563,101566,101577,101580,101583,101605,101612,101615,101633,101636,101639,101653,101661,101664,101690,101696,101699,101702,101712,101724,101744,101753,101773,101783,101807,101820,101834,101839,101880,101897,101922,101934,101954,101960,102005,102024,102041,102054,102070,102077,102089,102098,102133,102154,102179,102192,102216,102231,102256,102259,102280,102289,102292,102303,102307,102310,102316,102328,102335,102339,102342,102354,102357,102371,102374,102384,102394,102397,102437,102440,102444,102450,102453,102467,102471,102474,102507,102511,102514,102537,102545,102548,102554,102560,102563,102566,102594,102598,102601,102607,102610],[10,100632,100628],{"id":100633},"_1环境安装与第一个-mujoco-程序",[45,100635,100637],{"id":100636},"_1目标说明","1.目标说明",[14,100639,100640],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100642,100643],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[94,100645,100648],{"className":100646,"code":100647,"language":5177,"meta":24},[5175],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[100,100649,100647],{"__ignoreMap":24},[14,100651,100652],{},"需要掌握:",[57,100654,100655,100658,100661,100666,100671],{},[60,100656,100657],{},"Fedora 44 下 MuJoCo 的系统依赖",[60,100659,100660],{},"Python 虚拟环境创建",[60,100662,100663],{},[100,100664,100665],{},"mujoco.MjModel",[60,100667,100668],{},[100,100669,100670],{},"mujoco.MjData",[60,100672,100673],{},[100,100674,100675],{},"mujoco.mj_step(model, data)",[14,100677,100678],{},"MuJoCo 中最重要的两个对象:",[251,100680,100681,100691],{},[254,100682,100683],{},[257,100684,100685,100688],{},[260,100686,100687],{"align":23726},"对象",[260,100689,100690],{"align":23726},"含义",[298,100692,100693,100703],{},[257,100694,100695,100700],{},[303,100696,100697],{"align":23726},[100,100698,100699],{},"MjModel",[303,100701,100702],{"align":23726},"模型结构，来自 XML，基本不随时间变化",[257,100704,100705,100710],{},[303,100706,100707],{"align":23726},[100,100708,100709],{},"MjData",[303,100711,100712],{"align":23726},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100714,100715],{},"可以先用一个类比理解：",[251,100717,100718,100728],{},[254,100719,100720],{},[257,100721,100722,100725],{},[260,100723,100724],{"align":23726},"类比",[260,100726,100727],{"align":23726},"MuJoCo 对象",[298,100729,100730,100739,100748],{},[257,100731,100732,100735],{},[303,100733,100734],{"align":23726},"游戏地图和角色配置",[303,100736,100737],{"align":23726},[100,100738,100699],{},[257,100740,100741,100744],{},[303,100742,100743],{"align":23726},"游戏运行到当前帧的状态",[303,100745,100746],{"align":23726},[100,100747,100709],{},[257,100749,100750,100753],{},[303,100751,100752],{"align":23726},"前进一帧",[303,100754,100755],{"align":23726},[100,100756,100675],{},[45,100758,100760],{"id":100759},"_2环境与依赖安装","2.环境与依赖安装",[14,100762,100763],{},"Fedora 44 系统依赖:",[94,100765,100767],{"className":23812,"code":100766,"language":23814,"meta":24,"style":24},"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",[100,100768,100769,100781,100794,100807,100817,100827,100846],{"__ignoreMap":24},[103,100770,100771,100773,100775,100777,100779],{"class":105,"line":106},[103,100772,24566],{"class":1952},[103,100774,26305],{"class":218},[103,100776,23824],{"class":218},[103,100778,26390],{"class":162},[103,100780,24668],{"class":162},[103,100782,100783,100786,100789,100792],{"class":105,"line":25},[103,100784,100785],{"class":218},"  python3",[103,100787,100788],{"class":218}," python3-pip",[103,100790,100791],{"class":218}," python3-virtualenv",[103,100793,24668],{"class":162},[103,100795,100796,100799,100802,100805],{"class":105,"line":1168},[103,100797,100798],{"class":218},"  mesa-libGL",[103,100800,100801],{"class":218}," mesa-libGLU",[103,100803,100804],{"class":218}," mesa-dri-drivers",[103,100806,24668],{"class":162},[103,100808,100809,100812,100815],{"class":105,"line":1183},[103,100810,100811],{"class":218},"  libglvnd-glx",[103,100813,100814],{"class":218}," libglvnd-opengl",[103,100816,24668],{"class":162},[103,100818,100819,100822,100825],{"class":105,"line":1189},[103,100820,100821],{"class":218},"  glfw",[103,100823,100824],{"class":218}," glfw-devel",[103,100826,24668],{"class":162},[103,100828,100829,100832,100835,100838,100841,100844],{"class":105,"line":1203},[103,100830,100831],{"class":218},"  libX11",[103,100833,100834],{"class":218}," libXcursor",[103,100836,100837],{"class":218}," libXi",[103,100839,100840],{"class":218}," libXinerama",[103,100842,100843],{"class":218}," libXrandr",[103,100845,24668],{"class":162},[103,100847,100848,100851,100854],{"class":105,"line":1209},[103,100849,100850],{"class":218},"  gcc",[103,100852,100853],{"class":218}," gcc-c++",[103,100855,100856],{"class":218}," make\n",[14,100858,100859],{},"创建 Python 环境:",[94,100861,100863],{"className":23812,"code":100862,"language":23814,"meta":24,"style":24},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[100,100864,100865,100879,100887],{"__ignoreMap":24},[103,100866,100867,100870,100873,100876],{"class":105,"line":106},[103,100868,100869],{"class":1952},"python3",[103,100871,100872],{"class":162}," -m",[103,100874,100875],{"class":218}," venv",[103,100877,100878],{"class":218}," .venv\n",[103,100880,100881,100884],{"class":105,"line":25},[103,100882,100883],{"class":162},"source",[103,100885,100886],{"class":218}," .venv\u002Fbin\u002Factivate\n",[103,100888,100889,100891,100893,100896,100898,100901],{"class":105,"line":1168},[103,100890,30370],{"class":1952},[103,100892,100872],{"class":162},[103,100894,100895],{"class":218}," pip",[103,100897,23824],{"class":218},[103,100899,100900],{"class":162}," --upgrade",[103,100902,100903],{"class":218}," pip\n",[14,100905,100906],{},"pip 安装:",[94,100908,100910],{"className":23812,"code":100909,"language":23814,"meta":24,"style":24},"pip install \"mujoco>=2.3\" numpy\n",[100,100911,100912],{"__ignoreMap":24},[103,100913,100914,100916,100918,100921],{"class":105,"line":106},[103,100915,23821],{"class":1952},[103,100917,23824],{"class":218},[103,100919,100920],{"class":218}," \"mujoco>=2.3\"",[103,100922,100923],{"class":218}," numpy\n",[14,100925,100926],{},"安装完成后，先做最小检查：",[94,100928,100930],{"className":23812,"code":100929,"language":23814,"meta":24,"style":24},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[100,100931,100932],{"__ignoreMap":24},[103,100933,100934,100936,100938],{"class":105,"line":106},[103,100935,30370],{"class":1952},[103,100937,30348],{"class":162},[103,100939,100940],{"class":218}," \"import mujoco; print(mujoco.__version__)\"\n",[14,100942,100943],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,100945,100946],{},"conda 安装:",[94,100948,100950],{"className":23812,"code":100949,"language":23814,"meta":24,"style":24},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[100,100951,100952,100972,100982],{"__ignoreMap":24},[103,100953,100954,100956,100958,100960,100963,100966,100969],{"class":105,"line":106},[103,100955,30320],{"class":1952},[103,100957,29166],{"class":218},[103,100959,25105],{"class":162},[103,100961,100962],{"class":218}," mujoco-study",[103,100964,100965],{"class":218}," python=",[103,100967,100968],{"class":162},"3.10",[103,100970,100971],{"class":162}," -y\n",[103,100973,100974,100976,100979],{"class":105,"line":25},[103,100975,30320],{"class":1952},[103,100977,100978],{"class":218}," activate",[103,100980,100981],{"class":218}," mujoco-study\n",[103,100983,100984,100986,100988,100990],{"class":105,"line":1168},[103,100985,23821],{"class":1952},[103,100987,23824],{"class":218},[103,100989,100920],{"class":218},[103,100991,100923],{"class":218},[14,100993,100994],{},"版本冲突说明:",[57,100996,100997,101003,101013,101022],{},[60,100998,100999,101000,28375],{},"不要安装 ",[100,101001,101002],{},"mujoco-py",[60,101004,101005,101006,101008,101009,101012],{},"如果旧项目里同时安装了 ",[100,101007,101002],{}," 和 ",[100,101010,101011],{},"mujoco","，建议新建干净虚拟环境。",[60,101014,101015,101018,101019,28375],{},[100,101016,101017],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[100,101020,101021],{},"~\u002F.mujoco\u002Fmujoco210",[60,101023,101024,101025,82529,101028,101031],{},"离屏渲染可能涉及 OpenGL 后端，",[100,101026,101027],{},"MUJOCO_GL=egl",[100,101029,101030],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[45,101033,101035],{"id":101034},"_3核心概念解释","3.核心概念解释",[14,101037,101038],{},"MuJoCo 的基本执行流程:",[94,101040,101043],{"className":101041,"code":101042,"language":5177,"meta":24},[5175],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[100,101044,101042],{"__ignoreMap":24},[14,101046,101047,101049],{},[100,101048,100699],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101051,101052,101054,101055,326,101058,326,101061,326,101064,326,101067,28375],{},[100,101053,100709],{}," 存放仿真运行时状态，例如 ",[100,101056,101057],{},"data.time",[100,101059,101060],{},"data.qpos",[100,101062,101063],{},"data.qvel",[100,101065,101066],{},"data.ctrl",[100,101068,101069],{},"data.xpos",[74,101071,101073],{"id":101072},"xml-是什么","XML 是什么",[14,101075,101076],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[94,101078,101080],{"className":53057,"code":101079,"language":53059,"meta":24,"style":24},"\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",[100,101081,101082,101104,101135],{"__ignoreMap":24},[103,101083,101084,101086,101088,101090,101092,101094,101097,101099,101102],{"class":105,"line":106},[103,101085,1023],{"class":113},[103,101087,51790],{"class":51290},[103,101089,14910],{"class":1952},[103,101091,159],{"class":113},[103,101093,53481],{"class":218},[103,101095,101096],{"class":1952}," pos",[103,101098,159],{"class":113},[103,101100,101101],{"class":218},"\"0 0 1\"",[103,101103,51297],{"class":113},[103,101105,101106,101108,101111,101113,101115,101118,101120,101122,101124,101127,101129,101132],{"class":105,"line":25},[103,101107,52134],{"class":113},[103,101109,101110],{"class":51290},"geom",[103,101112,14910],{"class":1952},[103,101114,159],{"class":113},[103,101116,101117],{"class":218},"\"box_geom\"",[103,101119,53814],{"class":1952},[103,101121,159],{"class":113},[103,101123,53481],{"class":218},[103,101125,101126],{"class":1952}," size",[103,101128,159],{"class":113},[103,101130,101131],{"class":218},"\"0.1 0.1 0.1\"",[103,101133,101134],{"class":113},"\u002F>\n",[103,101136,101137,101139,101141],{"class":105,"line":1168},[103,101138,51775],{"class":113},[103,101140,51790],{"class":51290},[103,101142,51297],{"class":113},[14,101144,101145],{},"这段意思是：",[57,101147,101148,101154,101161],{},[60,101149,101150,101151,101153],{},"创建一个叫 ",[100,101152,53704],{}," 的刚体。",[60,101155,101156,101157,101160],{},"它初始放在 ",[100,101158,101159],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[60,101162,101163],{},"它里面有一个盒子形状的几何体。",[74,101165,101167],{"id":101166},"timestep-是什么","timestep 是什么",[14,101169,101170],{},"XML 里的：",[94,101172,101174],{"className":53057,"code":101173,"language":53059,"meta":24,"style":24},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[100,101175,101176],{"__ignoreMap":24},[103,101177,101178,101180,101182,101185,101187,101190,101193,101195,101198],{"class":105,"line":106},[103,101179,1023],{"class":113},[103,101181,69156],{"class":51290},[103,101183,101184],{"class":1952}," timestep",[103,101186,159],{"class":113},[103,101188,101189],{"class":218},"\"0.01\"",[103,101191,101192],{"class":1952}," gravity",[103,101194,159],{"class":113},[103,101196,101197],{"class":218},"\"0 0 -9.81\"",[103,101199,101134],{"class":113},[14,101201,101202,101203,101206,101207,101209],{},"表示每调用一次 ",[100,101204,101205],{},"mj_step","，仿真时间前进 ",[100,101208,38976],{}," 秒。循环 100 次，大约就是 1 秒：",[94,101211,101214],{"className":101212,"code":101213,"language":5177,"meta":24},[5175],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[100,101215,101213],{"__ignoreMap":24},[74,101217,101219],{"id":101218},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101221,101222],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[94,101224,101227],{"className":101225,"code":101226,"language":5177,"meta":24},[5175],"x y z qw qx qy qz\n",[100,101228,101226],{"__ignoreMap":24},[14,101230,101231,101232,101235,101236,101239],{},"表示一个自由刚体的位置和姿态。其中 ",[100,101233,101234],{},"x y z"," 是位置，",[100,101237,101238],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[45,101241,101243],{"id":101242},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101245,101246],{},"新建文件:",[94,101248,101250],{"className":23812,"code":101249,"language":23814,"meta":24,"style":24},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[100,101251,101252,101262,101269],{"__ignoreMap":24},[103,101253,101254,101257,101259],{"class":105,"line":106},[103,101255,101256],{"class":1952},"mkdir",[103,101258,29206],{"class":162},[103,101260,101261],{"class":218}," mujoco_tutorial\n",[103,101263,101264,101267],{"class":105,"line":25},[103,101265,101266],{"class":162},"cd",[103,101268,101261],{"class":218},[103,101270,101271,101274],{"class":105,"line":1168},[103,101272,101273],{"class":1952},"touch",[103,101275,101276],{"class":218}," ch1_first_sim.py\n",[14,101278,101279],{},"写入:",[94,101281,101283],{"className":30368,"code":101282,"language":30370,"meta":24,"style":24},"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",[100,101284,101285,101292,101296,101300,101310,101315,101320,101324,101329,101334,101338,101343,101348,101353,101358,101363,101368,101372,101376,101380,101393,101407,101417,101421,101433,101445,101457,101469,101481,101485,101502,101507,101511,101522,101533,101537,101541,101555],{"__ignoreMap":24},[103,101286,101287,101289],{"class":105,"line":106},[103,101288,30382],{"class":109},[103,101290,101291],{"class":113}," mujoco\n",[103,101293,101294],{"class":105,"line":25},[103,101295,2389],{"emptyLinePlaceholder":30},[103,101297,101298],{"class":105,"line":1168},[103,101299,2389],{"emptyLinePlaceholder":30},[103,101301,101302,101305,101307],{"class":105,"line":1183},[103,101303,101304],{"class":162},"XML",[103,101306,13554],{"class":109},[103,101308,101309],{"class":218}," \"\"\"\n",[103,101311,101312],{"class":105,"line":1189},[103,101313,101314],{"class":218},"\u003Cmujoco model=\"first_sim\">\n",[103,101316,101317],{"class":105,"line":1203},[103,101318,101319],{"class":218},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[103,101321,101322],{"class":105,"line":1209},[103,101323,2389],{"emptyLinePlaceholder":30},[103,101325,101326],{"class":105,"line":1300},[103,101327,101328],{"class":218},"  \u003Cworldbody>\n",[103,101330,101331],{"class":105,"line":1306},[103,101332,101333],{"class":218},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[103,101335,101336],{"class":105,"line":1318},[103,101337,2389],{"emptyLinePlaceholder":30},[103,101339,101340],{"class":105,"line":1601},[103,101341,101342],{"class":218},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[103,101344,101345],{"class":105,"line":1606},[103,101346,101347],{"class":218},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[103,101349,101350],{"class":105,"line":1612},[103,101351,101352],{"class":218},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[103,101354,101355],{"class":105,"line":1617},[103,101356,101357],{"class":218},"    \u003C\u002Fbody>\n",[103,101359,101360],{"class":105,"line":1631},[103,101361,101362],{"class":218},"  \u003C\u002Fworldbody>\n",[103,101364,101365],{"class":105,"line":1636},[103,101366,101367],{"class":218},"\u003C\u002Fmujoco>\n",[103,101369,101370],{"class":105,"line":1642},[103,101371,95688],{"class":218},[103,101373,101374],{"class":105,"line":1663},[103,101375,2389],{"emptyLinePlaceholder":30},[103,101377,101378],{"class":105,"line":1668},[103,101379,2389],{"emptyLinePlaceholder":30},[103,101381,101382,101384,101386,101389,101391],{"class":105,"line":1682},[103,101383,31937],{"class":109},[103,101385,1962],{"class":1952},[103,101387,101388],{"class":113},"() -> ",[103,101390,95676],{"class":162},[103,101392,3728],{"class":113},[103,101394,101395,101398,101400,101403,101405],{"class":105,"line":1687},[103,101396,101397],{"class":113},"    model ",[103,101399,159],{"class":109},[103,101401,101402],{"class":113}," mujoco.MjModel.from_xml_string(",[103,101404,101304],{"class":162},[103,101406,120],{"class":113},[103,101408,101409,101412,101414],{"class":105,"line":1716},[103,101410,101411],{"class":113},"    data ",[103,101413,159],{"class":109},[103,101415,101416],{"class":113}," mujoco.MjData(model)\n",[103,101418,101419],{"class":105,"line":1721},[103,101420,2389],{"emptyLinePlaceholder":30},[103,101422,101423,101425,101427,101430],{"class":105,"line":1738},[103,101424,31289],{"class":162},[103,101426,114],{"class":113},[103,101428,101429],{"class":218},"\"nq:\"",[103,101431,101432],{"class":113},", model.nq)\n",[103,101434,101435,101437,101439,101442],{"class":105,"line":1743},[103,101436,31289],{"class":162},[103,101438,114],{"class":113},[103,101440,101441],{"class":218},"\"nv:\"",[103,101443,101444],{"class":113},", model.nv)\n",[103,101446,101447,101449,101451,101454],{"class":105,"line":1748},[103,101448,31289],{"class":162},[103,101450,114],{"class":113},[103,101452,101453],{"class":218},"\"nu:\"",[103,101455,101456],{"class":113},", model.nu)\n",[103,101458,101459,101461,101463,101466],{"class":105,"line":1753},[103,101460,31289],{"class":162},[103,101462,114],{"class":113},[103,101464,101465],{"class":218},"\"initial time:\"",[103,101467,101468],{"class":113},", data.time)\n",[103,101470,101471,101473,101475,101478],{"class":105,"line":1767},[103,101472,31289],{"class":162},[103,101474,114],{"class":113},[103,101476,101477],{"class":218},"\"initial qpos:\"",[103,101479,101480],{"class":113},", data.qpos.copy())\n",[103,101482,101483],{"class":105,"line":1772},[103,101484,2389],{"emptyLinePlaceholder":30},[103,101486,101487,101489,101492,101494,101496,101498,101500],{"class":105,"line":2566},[103,101488,3190],{"class":109},[103,101490,101491],{"class":113}," _ ",[103,101493,26033],{"class":109},[103,101495,32433],{"class":162},[103,101497,114],{"class":113},[103,101499,424],{"class":162},[103,101501,30776],{"class":113},[103,101503,101504],{"class":105,"line":2580},[103,101505,101506],{"class":113},"        mujoco.mj_step(model, data)\n",[103,101508,101509],{"class":105,"line":2588},[103,101510,2389],{"emptyLinePlaceholder":30},[103,101512,101513,101515,101517,101520],{"class":105,"line":2593},[103,101514,31289],{"class":162},[103,101516,114],{"class":113},[103,101518,101519],{"class":218},"\"final time:\"",[103,101521,101468],{"class":113},[103,101523,101524,101526,101528,101531],{"class":105,"line":2599},[103,101525,31289],{"class":162},[103,101527,114],{"class":113},[103,101529,101530],{"class":218},"\"final qpos:\"",[103,101532,101480],{"class":113},[103,101534,101535],{"class":105,"line":2605},[103,101536,2389],{"emptyLinePlaceholder":30},[103,101538,101539],{"class":105,"line":2610},[103,101540,2389],{"emptyLinePlaceholder":30},[103,101542,101543,101545,101547,101550,101553],{"class":105,"line":7938},[103,101544,1520],{"class":109},[103,101546,31210],{"class":162},[103,101548,101549],{"class":109}," ==",[103,101551,101552],{"class":218}," \"__main__\"",[103,101554,3728],{"class":113},[103,101556,101557],{"class":105,"line":7962},[103,101558,101559],{"class":113},"    main()\n",[74,101561,101562],{"id":101562},"代码逐段解释",[14,101564,101565],{},"导入库：",[94,101567,101569],{"className":30368,"code":101568,"language":30370,"meta":24,"style":24},"import mujoco\n",[100,101570,101571],{"__ignoreMap":24},[103,101572,101573,101575],{"class":105,"line":106},[103,101574,30382],{"class":109},[103,101576,101291],{"class":113},[14,101578,101579],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101581,101582],{},"定义 XML：",[94,101584,101586],{"className":30368,"code":101585,"language":30370,"meta":24,"style":24},"XML = \"\"\"\n...\n\"\"\"\n",[100,101587,101588,101596,101601],{"__ignoreMap":24},[103,101589,101590,101592,101594],{"class":105,"line":106},[103,101591,101304],{"class":162},[103,101593,13554],{"class":109},[103,101595,101309],{"class":218},[103,101597,101598],{"class":105,"line":25},[103,101599,101600],{"class":218},"...\n",[103,101602,101603],{"class":105,"line":1168},[103,101604,95688],{"class":218},[14,101606,101607,101608,101611],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[100,101609,101610],{},"freejoint"," 的方块。",[14,101613,101614],{},"编译模型：",[94,101616,101618],{"className":30368,"code":101617,"language":30370,"meta":24,"style":24},"model = mujoco.MjModel.from_xml_string(XML)\n",[100,101619,101620],{"__ignoreMap":24},[103,101621,101622,101625,101627,101629,101631],{"class":105,"line":106},[103,101623,101624],{"class":113},"model ",[103,101626,159],{"class":109},[103,101628,101402],{"class":113},[103,101630,101304],{"class":162},[103,101632,120],{"class":113},[14,101634,101635],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101637,101638],{},"创建数据：",[94,101640,101642],{"className":30368,"code":101641,"language":30370,"meta":24,"style":24},"data = mujoco.MjData(model)\n",[100,101643,101644],{"__ignoreMap":24},[103,101645,101646,101649,101651],{"class":105,"line":106},[103,101647,101648],{"class":113},"data ",[103,101650,159],{"class":109},[103,101652,101416],{"class":113},[14,101654,101655,101657,101658,101660],{},[100,101656,33391],{}," 会保存仿真当前状态。刚创建时，时间是 ",[100,101659,305],{},"，方块还在初始位置。",[14,101662,101663],{},"推进仿真：",[94,101665,101667],{"className":30368,"code":101666,"language":30370,"meta":24,"style":24},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[100,101668,101669,101685],{"__ignoreMap":24},[103,101670,101671,101673,101675,101677,101679,101681,101683],{"class":105,"line":106},[103,101672,3014],{"class":109},[103,101674,101491],{"class":113},[103,101676,26033],{"class":109},[103,101678,32433],{"class":162},[103,101680,114],{"class":113},[103,101682,424],{"class":162},[103,101684,30776],{"class":113},[103,101686,101687],{"class":105,"line":25},[103,101688,101689],{"class":113},"    mujoco.mj_step(model, data)\n",[14,101691,101692,101693,101695],{},"每次 ",[100,101694,101205],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[74,101697,101698],{"id":101698},"代码逐行细讲",[14,101700,101701],{},"下面把完整代码按新手视角拆开讲。",[94,101703,101704],{"className":30368,"code":101568,"language":30370,"meta":24,"style":24},[100,101705,101706],{"__ignoreMap":24},[103,101707,101708,101710],{"class":105,"line":106},[103,101709,30382],{"class":109},[103,101711,101291],{"class":113},[14,101713,101714,101716,101717,326,101719,326,101721,28375],{},[100,101715,30382],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[100,101718,100665],{},[100,101720,100670],{},[100,101722,101723],{},"mujoco.mj_step",[94,101725,101726],{"className":30368,"code":101585,"language":30370,"meta":24,"style":24},[100,101727,101728,101736,101740],{"__ignoreMap":24},[103,101729,101730,101732,101734],{"class":105,"line":106},[103,101731,101304],{"class":162},[103,101733,13554],{"class":109},[103,101735,101309],{"class":218},[103,101737,101738],{"class":105,"line":25},[103,101739,101600],{"class":218},[103,101741,101742],{"class":105,"line":1168},[103,101743,95688],{"class":218},[14,101745,101746,101748,101749,101752],{},[100,101747,101304],{}," 是一个变量名。右边的三引号 ",[100,101750,101751],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[94,101754,101755],{"className":53057,"code":101314,"language":53059,"meta":24,"style":24},[100,101756,101757],{"__ignoreMap":24},[103,101758,101759,101761,101763,101766,101768,101771],{"class":105,"line":106},[103,101760,1023],{"class":113},[103,101762,101011],{"class":51290},[103,101764,101765],{"class":1952}," model",[103,101767,159],{"class":113},[103,101769,101770],{"class":218},"\"first_sim\"",[103,101772,51297],{"class":113},[14,101774,101775,101776,101779,101780,28375],{},"这是 XML 的根标签。",[100,101777,101778],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[100,101781,101782],{},"first_sim",[94,101784,101785],{"className":53057,"code":101173,"language":53059,"meta":24,"style":24},[100,101786,101787],{"__ignoreMap":24},[103,101788,101789,101791,101793,101795,101797,101799,101801,101803,101805],{"class":105,"line":106},[103,101790,1023],{"class":113},[103,101792,69156],{"class":51290},[103,101794,101184],{"class":1952},[103,101796,159],{"class":113},[103,101798,101189],{"class":218},[103,101800,101192],{"class":1952},[103,101802,159],{"class":113},[103,101804,101197],{"class":218},[103,101806,101134],{"class":113},[14,101808,101809,101811,101812,101815,101816,101819],{},[100,101810,69156],{}," 用来设置仿真参数。",[100,101813,101814],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[100,101817,101818],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[94,101821,101823],{"className":53057,"code":101822,"language":53059,"meta":24,"style":24},"\u003Cworldbody>\n",[100,101824,101825],{"__ignoreMap":24},[103,101826,101827,101829,101832],{"class":105,"line":106},[103,101828,1023],{"class":113},[103,101830,101831],{"class":51290},"worldbody",[103,101833,51297],{"class":113},[14,101835,101836,101838],{},[100,101837,101831],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[94,101840,101842],{"className":53057,"code":101841,"language":53059,"meta":24,"style":24},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[100,101843,101844],{"__ignoreMap":24},[103,101845,101846,101848,101850,101852,101854,101857,101859,101861,101864,101866,101868,101871,101873,101875,101878],{"class":105,"line":106},[103,101847,1023],{"class":113},[103,101849,101110],{"class":51290},[103,101851,14910],{"class":1952},[103,101853,159],{"class":113},[103,101855,101856],{"class":218},"\"floor\"",[103,101858,53814],{"class":1952},[103,101860,159],{"class":113},[103,101862,101863],{"class":218},"\"plane\"",[103,101865,101126],{"class":1952},[103,101867,159],{"class":113},[103,101869,101870],{"class":218},"\"2 2 0.1\"",[103,101872,78757],{"class":1952},[103,101874,159],{"class":113},[103,101876,101877],{"class":218},"\"0.8 0.8 0.8 1\"",[103,101879,101134],{"class":113},[14,101881,101882,101883,101885,101886,101889,101890,101893,101894,101896],{},"这行创建地面。",[100,101884,101110],{}," 是几何体。",[100,101887,101888],{},"name=\"floor\""," 是名字。",[100,101891,101892],{},"type=\"plane\""," 表示平面。",[100,101895,55100],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[94,101898,101900],{"className":53057,"code":101899,"language":53059,"meta":24,"style":24},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[100,101901,101902],{"__ignoreMap":24},[103,101903,101904,101906,101908,101910,101912,101914,101916,101918,101920],{"class":105,"line":106},[103,101905,1023],{"class":113},[103,101907,51790],{"class":51290},[103,101909,14910],{"class":1952},[103,101911,159],{"class":113},[103,101913,53481],{"class":218},[103,101915,101096],{"class":1952},[103,101917,159],{"class":113},[103,101919,101101],{"class":218},[103,101921,51297],{"class":113},[14,101923,101924,101925,28375,101927,101930,101931,101933],{},"这行创建一个刚体，名字叫 ",[100,101926,53704],{},[100,101928,101929],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[100,101932,101159],{},"，也就是离地面 1 米高。",[94,101935,101937],{"className":53057,"code":101936,"language":53059,"meta":24,"style":24},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[100,101938,101939],{"__ignoreMap":24},[103,101940,101941,101943,101945,101947,101949,101952],{"class":105,"line":106},[103,101942,1023],{"class":113},[103,101944,101610],{"class":51290},[103,101946,14910],{"class":1952},[103,101948,159],{"class":113},[103,101950,101951],{"class":218},"\"box_free\"",[103,101953,101134],{"class":113},[14,101955,101956,101957,101959],{},"这行很重要。",[100,101958,101610],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[94,101961,101963],{"className":53057,"code":101962,"language":53059,"meta":24,"style":24},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[100,101964,101965],{"__ignoreMap":24},[103,101966,101967,101969,101971,101973,101975,101977,101979,101981,101983,101985,101987,101989,101992,101994,101996,101998,102000,102003],{"class":105,"line":106},[103,101968,1023],{"class":113},[103,101970,101110],{"class":51290},[103,101972,14910],{"class":1952},[103,101974,159],{"class":113},[103,101976,101117],{"class":218},[103,101978,53814],{"class":1952},[103,101980,159],{"class":113},[103,101982,53481],{"class":218},[103,101984,101126],{"class":1952},[103,101986,159],{"class":113},[103,101988,101131],{"class":218},[103,101990,101991],{"class":1952}," mass",[103,101993,159],{"class":113},[103,101995,3667],{"class":218},[103,101997,78757],{"class":1952},[103,101999,159],{"class":113},[103,102001,102002],{"class":218},"\"1 0 0 1\"",[103,102004,101134],{"class":113},[14,102006,102007,102008,102011,102012,102015,102016,102019,102020,102023],{},"这行给 box body 添加一个盒子形状。",[100,102009,102010],{},"type=\"box\""," 表示形状是盒子。",[100,102013,102014],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[100,102017,102018],{},"mass=\"1\""," 表示质量是 1。",[100,102021,102022],{},"rgba=\"1 0 0 1\""," 表示红色。",[94,102025,102027],{"className":30368,"code":102026,"language":30370,"meta":24,"style":24},"def main() -> None:\n",[100,102028,102029],{"__ignoreMap":24},[103,102030,102031,102033,102035,102037,102039],{"class":105,"line":106},[103,102032,31937],{"class":109},[103,102034,1962],{"class":1952},[103,102036,101388],{"class":113},[103,102038,95676],{"class":162},[103,102040,3728],{"class":113},[14,102042,102043,102045,102046,102049,102050,102053],{},[100,102044,31937],{}," 用来定义函数。这里定义了一个叫 ",[100,102047,102048],{},"main"," 的函数。",[100,102051,102052],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[94,102055,102056],{"className":30368,"code":101617,"language":30370,"meta":24,"style":24},[100,102057,102058],{"__ignoreMap":24},[103,102059,102060,102062,102064,102066,102068],{"class":105,"line":106},[103,102061,101624],{"class":113},[103,102063,159],{"class":109},[103,102065,101402],{"class":113},[103,102067,101304],{"class":162},[103,102069,120],{"class":113},[14,102071,102072,102073,102076],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[100,102074,102075],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[94,102078,102079],{"className":30368,"code":101641,"language":30370,"meta":24,"style":24},[100,102080,102081],{"__ignoreMap":24},[103,102082,102083,102085,102087],{"class":105,"line":106},[103,102084,101648],{"class":113},[103,102086,159],{"class":109},[103,102088,101416],{"class":113},[14,102090,102091,102092,102094,102095,102097],{},"这行创建仿真数据。",[100,102093,33391],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[100,102096,33391],{}," 都会变化。",[94,102099,102101],{"className":30368,"code":102100,"language":30370,"meta":24,"style":24},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[100,102102,102103,102113,102123],{"__ignoreMap":24},[103,102104,102105,102107,102109,102111],{"class":105,"line":106},[103,102106,30405],{"class":162},[103,102108,114],{"class":113},[103,102110,101429],{"class":218},[103,102112,101432],{"class":113},[103,102114,102115,102117,102119,102121],{"class":105,"line":25},[103,102116,30405],{"class":162},[103,102118,114],{"class":113},[103,102120,101441],{"class":218},[103,102122,101444],{"class":113},[103,102124,102125,102127,102129,102131],{"class":105,"line":1168},[103,102126,30405],{"class":162},[103,102128,114],{"class":113},[103,102130,101453],{"class":218},[103,102132,101456],{"class":113},[14,102134,102135,102137,102138,102141,102142,102145,102146,102149,102150,102153],{},[100,102136,30405],{}," 用来输出信息。",[100,102139,102140],{},"model.nq"," 是位置变量数量，",[100,102143,102144],{},"model.nv"," 是速度变量数量，",[100,102147,102148],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[100,102151,102152],{},"nu"," 是 0。",[94,102155,102157],{"className":30368,"code":102156,"language":30370,"meta":24,"style":24},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[100,102158,102159,102169],{"__ignoreMap":24},[103,102160,102161,102163,102165,102167],{"class":105,"line":106},[103,102162,30405],{"class":162},[103,102164,114],{"class":113},[103,102166,101465],{"class":218},[103,102168,101468],{"class":113},[103,102170,102171,102173,102175,102177],{"class":105,"line":25},[103,102172,30405],{"class":162},[103,102174,114],{"class":113},[103,102176,101477],{"class":218},[103,102178,101480],{"class":113},[14,102180,102181,102182,102184,102185,102187,102188,102191],{},"这里打印初始时间和初始位置。",[100,102183,101057],{}," 一开始是 0。",[100,102186,101060],{}," 是位置数组。",[100,102189,102190],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[94,102193,102194],{"className":30368,"code":101666,"language":30370,"meta":24,"style":24},[100,102195,102196,102212],{"__ignoreMap":24},[103,102197,102198,102200,102202,102204,102206,102208,102210],{"class":105,"line":106},[103,102199,3014],{"class":109},[103,102201,101491],{"class":113},[103,102203,26033],{"class":109},[103,102205,32433],{"class":162},[103,102207,114],{"class":113},[103,102209,424],{"class":162},[103,102211,30776],{"class":113},[103,102213,102214],{"class":105,"line":25},[103,102215,101689],{"class":113},[14,102217,102218,102220,102221,102224,102225,102227,102228,102230],{},[100,102219,3014],{}," 是循环。",[100,102222,102223],{},"range(100)"," 表示循环 100 次。",[100,102226,1105],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[100,102229,101205],{},"，仿真就前进一步。",[94,102232,102234],{"className":30368,"code":102233,"language":30370,"meta":24,"style":24},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[100,102235,102236,102246],{"__ignoreMap":24},[103,102237,102238,102240,102242,102244],{"class":105,"line":106},[103,102239,30405],{"class":162},[103,102241,114],{"class":113},[103,102243,101519],{"class":218},[103,102245,101468],{"class":113},[103,102247,102248,102250,102252,102254],{"class":105,"line":25},[103,102249,30405],{"class":162},[103,102251,114],{"class":113},[103,102253,101530],{"class":218},[103,102255,101480],{"class":113},[14,102257,102258],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[94,102260,102262],{"className":30368,"code":102261,"language":30370,"meta":24,"style":24},"if __name__ == \"__main__\":\n    main()\n",[100,102263,102264,102276],{"__ignoreMap":24},[103,102265,102266,102268,102270,102272,102274],{"class":105,"line":106},[103,102267,1520],{"class":109},[103,102269,31210],{"class":162},[103,102271,101549],{"class":109},[103,102273,101552],{"class":218},[103,102275,3728],{"class":113},[103,102277,102278],{"class":105,"line":25},[103,102279,101559],{"class":113},[14,102281,102282,102283,102286,102287,28375],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[100,102284,102285],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[100,102288,102285],{},[14,102290,102291],{},"运行:",[94,102293,102295],{"className":23812,"code":102294,"language":23814,"meta":24,"style":24},"python ch1_first_sim.py\n",[100,102296,102297],{"__ignoreMap":24},[103,102298,102299,102301],{"class":105,"line":106},[103,102300,30370],{"class":1952},[103,102302,101276],{"class":218},[45,102304,102306],{"id":102305},"_5运行结果说明","5.运行结果说明",[14,102308,102309],{},"你应该看到类似输出:",[94,102311,102314],{"className":102312,"code":102313,"language":5177,"meta":24},[5175],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[100,102315,102313],{"__ignoreMap":24},[14,102317,102318,102320,102321,102324,102325,28375],{},[100,102319,101610],{}," 有 7 个位置变量: ",[100,102322,102323],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[100,102326,102327],{},"vx vy vz wx wy wz",[14,102329,102330,102331,102334],{},"你还会看到 ",[100,102332,102333],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[45,102336,102338],{"id":102337},"_6验证步骤","6.验证步骤",[14,102340,102341],{},"确认版本:",[94,102343,102344],{"className":23812,"code":100929,"language":23814,"meta":24,"style":24},[100,102345,102346],{"__ignoreMap":24},[103,102347,102348,102350,102352],{"class":105,"line":106},[103,102349,30370],{"class":1952},[103,102351,30348],{"class":162},[103,102353,100940],{"class":218},[14,102355,102356],{},"确认导入的是官方 bindings:",[94,102358,102360],{"className":23812,"code":102359,"language":23814,"meta":24,"style":24},"python -c \"import mujoco; print(mujoco)\"\n",[100,102361,102362],{"__ignoreMap":24},[103,102363,102364,102366,102368],{"class":105,"line":106},[103,102365,30370],{"class":1952},[103,102367,30348],{"class":162},[103,102369,102370],{"class":218}," \"import mujoco; print(mujoco)\"\n",[14,102372,102373],{},"运行程序:",[94,102375,102376],{"className":23812,"code":102294,"language":23814,"meta":24,"style":24},[100,102377,102378],{"__ignoreMap":24},[103,102379,102380,102382],{"class":105,"line":106},[103,102381,30370],{"class":1952},[103,102383,101276],{"class":218},[14,102385,102386,102387,102390,102391,28375],{},"检查 ",[100,102388,102389],{},"final time"," 是否约等于 ",[100,102392,102393],{},"1.0",[14,102395,102396],{},"再做几个小实验：",[57,102398,102399,102409,102417,102430],{},[60,102400,102401,102402,102404,102405,102408],{},"把 ",[100,102403,101929],{}," 改成 ",[100,102406,102407],{},"pos=\"0 0 2\"","，观察初始高度变化。",[60,102410,102401,102411,102404,102413,102416],{},[100,102412,101818],{},[100,102414,102415],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[60,102418,102401,102419,102404,102421,102424,102425,102427,102428,28375],{},[100,102420,101814],{},[100,102422,102423],{},"timestep=\"0.005\"","，观察 100 步后的 ",[100,102426,102389],{}," 是否变成约 ",[100,102429,35319],{},[60,102431,102432,102433,102436],{},"删除 ",[100,102434,102435],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102438,102439],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[45,102441,102443],{"id":102442},"_7常见错误与解决方案","7.常见错误与解决方案",[74,102445,102447],{"id":102446},"modulenotfounderror-no-module-named-mujoco",[100,102448,102449],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102451,102452],{},"解决:",[94,102454,102456],{"className":23812,"code":102455,"language":23814,"meta":24,"style":24},"pip install \"mujoco>=2.3\"\n",[100,102457,102458],{"__ignoreMap":24},[103,102459,102460,102462,102464],{"class":105,"line":106},[103,102461,23821],{"class":1952},[103,102463,23824],{"class":218},[103,102465,102466],{"class":218}," \"mujoco>=2.3\"\n",[74,102468,102470],{"id":102469},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102472,102473],{},"先安装系统依赖:",[94,102475,102477],{"className":23812,"code":102476,"language":23814,"meta":24,"style":24},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[100,102478,102479],{"__ignoreMap":24},[103,102480,102481,102483,102485,102487,102489,102492,102494,102497,102499,102502,102504],{"class":105,"line":106},[103,102482,24566],{"class":1952},[103,102484,26305],{"class":218},[103,102486,23824],{"class":218},[103,102488,26390],{"class":162},[103,102490,102491],{"class":218}," mesa-libGL",[103,102493,100804],{"class":218},[103,102495,102496],{"class":218}," glfw",[103,102498,100824],{"class":218},[103,102500,102501],{"class":218}," libX11",[103,102503,100837],{"class":218},[103,102505,102506],{"class":218}," libXrandr\n",[74,102508,102510],{"id":102509},"xml-解析失败","XML 解析失败",[14,102512,102513],{},"检查:",[57,102515,102516,102519,102522,102528],{},[60,102517,102518],{},"标签是否闭合",[60,102520,102521],{},"属性是否带引号",[60,102523,102524,102525],{},"根节点是否是 ",[100,102526,102527],{},"\u003Cmujoco>",[60,102529,102530,102532,102533,102536],{},[100,102531,51790],{}," 是否放在 ",[100,102534,102535],{},"\u003Cworldbody>"," 内部",[74,102538,102540,102542,102543],{"id":102539},"final-time-不是严格等于-10",[100,102541,102389],{}," 不是严格等于 ",[100,102544,102393],{},[14,102546,102547],{},"这通常不是错误。浮点数计算可能得到：",[94,102549,102552],{"className":102550,"code":102551,"language":5177,"meta":24},[5175],"1.0000000000000007\n",[100,102553,102551],{"__ignoreMap":24},[14,102555,102556,102557,102559],{},"只要接近 ",[100,102558,102393],{}," 就正常。",[74,102561,102562],{"id":102562},"方块没有掉下来",[14,102564,102565],{},"检查：",[57,102567,102568,102574,102580,102585],{},[60,102569,102570,102571],{},"方块 body 里是否有 ",[100,102572,102573],{},"\u003Cfreejoint\u002F>",[60,102575,102576,102577],{},"重力是否是 ",[100,102578,102579],{},"0 0 -9.81",[60,102581,102582,102583],{},"是否真的调用了 ",[100,102584,100675],{},[60,102586,102587,102588,102590,102591],{},"你看的是否是 ",[100,102589,102333],{},"，不是 ",[100,102592,102593],{},"initial qpos",[45,102595,102597],{"id":102596},"_8本章小结","8.本章小结",[14,102599,102600],{},"本章你已经完成了 MuJoCo 的最小闭环：",[94,102602,102605],{"className":102603,"code":102604,"language":5177,"meta":24},[5175],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[100,102606,102604],{"__ignoreMap":24},[14,102608,102609],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5116,102611,102612],{},"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":24,"searchDepth":25,"depth":25,"links":102614},[102615,102616,102617,102622,102626,102627,102628,102636],{"id":100636,"depth":25,"text":100637},{"id":100759,"depth":25,"text":100760},{"id":101034,"depth":25,"text":101035,"children":102618},[102619,102620,102621],{"id":101072,"depth":1168,"text":101073},{"id":101166,"depth":1168,"text":101167},{"id":101218,"depth":1168,"text":101219},{"id":101242,"depth":25,"text":101243,"children":102623},[102624,102625],{"id":101562,"depth":1168,"text":101562},{"id":101698,"depth":1168,"text":101698},{"id":102305,"depth":25,"text":102306},{"id":102337,"depth":25,"text":102338},{"id":102442,"depth":25,"text":102443,"children":102629},[102630,102631,102632,102633,102635],{"id":102446,"depth":1168,"text":102449},{"id":102469,"depth":1168,"text":102470},{"id":102509,"depth":1168,"text":102510},{"id":102539,"depth":1168,"text":102634},"final time 不是严格等于 1.0",{"id":102562,"depth":1168,"text":102562},{"id":102596,"depth":25,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100628,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102643,"title":102644,"body":102645,"description":24,"extension":28,"meta":104301,"navigation":30,"path":104302,"seo":104303,"stem":104304,"__hash__":104305},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102646,"toc":104277},[102647,102650,102652,102655,102658,102675,102770,102773,102779,102781,102783,102807,102810,102824,102827,102868,102870,102883,102885,102888,102936,102948,102951,102954,102960,102973,103040,103043,103062,103065,103068,103074,103076,103085,103088,103092,103101,103183,103192,103196,103202,103216,103226,103228,103558,103561,103573,103575,103586,103588,103591,103609,103612,103615,103633,103644,103647,103662,103672,103674,103695,103712,103732,103738,103778,103794,103810,103816,103819,103843,103859,103864,103894,103911,103936,103939,103954,103963,103978,103987,104002,104009,104011,104021,104034,104041,104044,104083,104090,104092,104144,104146,104152,104155,104162,104169,104172,104174,104192,104195,104198,104232,104244,104246,104249,104271,104274],[10,102648,102644],{"id":102649},"_2xml-与-mjcf-物理建模基础",[45,102651,100637],{"id":100636},[14,102653,102654],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102656,102657],{},"本章结束后，你应该能看懂一个简单模型里：",[57,102659,102660,102663,102666,102669,102672],{},[60,102661,102662],{},"地面在哪里。",[60,102664,102665],{},"物体初始位置在哪里。",[60,102667,102668],{},"几何体是什么形状。",[60,102670,102671],{},"哪些 body 可以自由运动。",[60,102673,102674],{},"如何用名字在 Python 里找到 XML 中的对象。",[251,102676,102677,102687],{},[254,102678,102679],{},[257,102680,102681,102684],{},[260,102682,102683],{"align":23726},"标签",[260,102685,102686],{"align":23726},"作用",[298,102688,102689,102698,102708,102717,102727,102737,102750,102760],{},[257,102690,102691,102695],{},[303,102692,102693],{"align":23726},[100,102694,102527],{},[303,102696,102697],{"align":23726},"根节点",[257,102699,102700,102705],{},[303,102701,102702],{"align":23726},[100,102703,102704],{},"\u003Coption>",[303,102706,102707],{"align":23726},"仿真参数",[257,102709,102710,102714],{},[303,102711,102712],{"align":23726},[100,102713,102535],{},[303,102715,102716],{"align":23726},"世界中的物体",[257,102718,102719,102724],{},[303,102720,102721],{"align":23726},[100,102722,102723],{},"\u003Cbody>",[303,102725,102726],{"align":23726},"刚体",[257,102728,102729,102734],{},[303,102730,102731],{"align":23726},[100,102732,102733],{},"\u003Cgeom>",[303,102735,102736],{"align":23726},"几何体、碰撞体、可视体",[257,102738,102739,102747],{},[303,102740,102741,24968,102744],{"align":23726},[100,102742,102743],{},"\u003Cjoint>",[100,102745,102746],{},"\u003Cfreejoint>",[303,102748,102749],{"align":23726},"关节",[257,102751,102752,102757],{},[303,102753,102754],{"align":23726},[100,102755,102756],{},"\u003Csite>",[303,102758,102759],{"align":23726},"标记点",[257,102761,102762,102767],{},[303,102763,102764],{"align":23726},[100,102765,102766],{},"\u003Cactuator>",[303,102768,102769],{"align":23726},"控制器",[14,102771,102772],{},"初学时可以先记住：",[94,102774,102777],{"className":102775,"code":102776,"language":5177,"meta":24},[5175],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[100,102778,102776],{"__ignoreMap":24},[45,102780,100760],{"id":100759},[14,102782,100763],{},[94,102784,102786],{"className":23812,"code":102785,"language":23814,"meta":24,"style":24},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[100,102787,102788],{"__ignoreMap":24},[103,102789,102790,102792,102794,102796,102798,102800,102802,102804],{"class":105,"line":106},[103,102791,24566],{"class":1952},[103,102793,26305],{"class":218},[103,102795,23824],{"class":218},[103,102797,26390],{"class":162},[103,102799,102491],{"class":218},[103,102801,100804],{"class":218},[103,102803,102496],{"class":218},[103,102805,102806],{"class":218}," glfw-devel\n",[14,102808,102809],{},"pip:",[94,102811,102812],{"className":23812,"code":100909,"language":23814,"meta":24,"style":24},[100,102813,102814],{"__ignoreMap":24},[103,102815,102816,102818,102820,102822],{"class":105,"line":106},[103,102817,23821],{"class":1952},[103,102819,23824],{"class":218},[103,102821,100920],{"class":218},[103,102823,100923],{"class":218},[14,102825,102826],{},"conda:",[94,102828,102830],{"className":23812,"code":102829,"language":23814,"meta":24,"style":24},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[100,102831,102832,102849,102858],{"__ignoreMap":24},[103,102833,102834,102836,102838,102840,102843,102845,102847],{"class":105,"line":106},[103,102835,30320],{"class":1952},[103,102837,29166],{"class":218},[103,102839,25105],{"class":162},[103,102841,102842],{"class":218}," mujoco-xml",[103,102844,100965],{"class":218},[103,102846,100968],{"class":162},[103,102848,100971],{"class":162},[103,102850,102851,102853,102855],{"class":105,"line":25},[103,102852,30320],{"class":1952},[103,102854,100978],{"class":218},[103,102856,102857],{"class":218}," mujoco-xml\n",[103,102859,102860,102862,102864,102866],{"class":105,"line":1168},[103,102861,23821],{"class":1952},[103,102863,23824],{"class":218},[103,102865,100920],{"class":218},[103,102867,100923],{"class":218},[14,102869,100994],{},[57,102871,102872,102875,102880],{},[60,102873,102874],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[60,102876,102877,102878,28375],{},"本章使用基础标签，适用于 ",[100,102879,101017],{},[60,102881,102882],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[45,102884,101035],{"id":101034},[14,102886,102887],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[94,102889,102891],{"className":53057,"code":102890,"language":53059,"meta":24,"style":24},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[100,102892,102893,102907,102915,102920,102928],{"__ignoreMap":24},[103,102894,102895,102897,102899,102901,102903,102905],{"class":105,"line":106},[103,102896,1023],{"class":113},[103,102898,101011],{"class":51290},[103,102900,101765],{"class":1952},[103,102902,159],{"class":113},[103,102904,62669],{"class":218},[103,102906,51297],{"class":113},[103,102908,102909,102911,102913],{"class":105,"line":25},[103,102910,52134],{"class":113},[103,102912,101831],{"class":51290},[103,102914,51297],{"class":113},[103,102916,102917],{"class":105,"line":1168},[103,102918,102919],{"class":113},"    ...\n",[103,102921,102922,102924,102926],{"class":105,"line":1183},[103,102923,52407],{"class":113},[103,102925,101831],{"class":51290},[103,102927,51297],{"class":113},[103,102929,102930,102932,102934],{"class":105,"line":1189},[103,102931,51775],{"class":113},[103,102933,101011],{"class":51290},[103,102935,51297],{"class":113},[14,102937,102938,102940,102941,102943,102944,102947],{},[100,102939,51790],{}," 表示刚体。",[100,102942,101110],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[100,102945,102946],{},"joint"," 表示刚体相对父刚体如何运动。",[74,102949,102950],{"id":102950},"层级结构非常重要",[14,102952,102953],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[94,102955,102958],{"className":102956,"code":102957,"language":5177,"meta":24},[5175],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[100,102959,102957],{"__ignoreMap":24},[14,102961,102962,101008,102965,102968,102969,102972],{},[100,102963,102964],{},"red_box_geom",[100,102966,102967],{},"box_center"," 都属于 ",[100,102970,102971],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[94,102974,102976],{"className":53057,"code":102975,"language":53059,"meta":24,"style":24},"\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",[100,102977,102978,102998,103012,103032],{"__ignoreMap":24},[103,102979,102980,102982,102984,102986,102988,102990,102992,102994,102996],{"class":105,"line":106},[103,102981,1023],{"class":113},[103,102983,51790],{"class":51290},[103,102985,14910],{"class":1952},[103,102987,159],{"class":113},[103,102989,53481],{"class":218},[103,102991,101096],{"class":1952},[103,102993,159],{"class":113},[103,102995,101101],{"class":218},[103,102997,51297],{"class":113},[103,102999,103000,103002,103004,103006,103008,103010],{"class":105,"line":25},[103,103001,52134],{"class":113},[103,103003,101610],{"class":51290},[103,103005,14910],{"class":1952},[103,103007,159],{"class":113},[103,103009,101951],{"class":218},[103,103011,101134],{"class":113},[103,103013,103014,103016,103018,103020,103022,103024,103026,103028,103030],{"class":105,"line":1168},[103,103015,52134],{"class":113},[103,103017,101110],{"class":51290},[103,103019,53814],{"class":1952},[103,103021,159],{"class":113},[103,103023,53481],{"class":218},[103,103025,101126],{"class":1952},[103,103027,159],{"class":113},[103,103029,101131],{"class":218},[103,103031,101134],{"class":113},[103,103033,103034,103036,103038],{"class":105,"line":1183},[103,103035,51775],{"class":113},[103,103037,51790],{"class":51290},[103,103039,51297],{"class":113},[14,103041,103042],{},"含义:",[57,103044,103045,103051,103056,103059],{},[60,103046,103047,103048,103050],{},"创建名为 ",[100,103049,53704],{}," 的刚体",[60,103052,103053,103054],{},"初始位置在世界坐标 ",[100,103055,101159],{},[60,103057,103058],{},"它有一个自由关节",[60,103060,103061],{},"它有一个盒子几何体",[74,103063,103064],{"id":103064},"坐标怎么理解",[14,103066,103067],{},"MuJoCo 默认使用三维坐标：",[94,103069,103072],{"className":103070,"code":103071,"language":5177,"meta":24},[5175],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[100,103073,103071],{"__ignoreMap":24},[14,103075,14623],{},[94,103077,103079],{"className":53057,"code":103078,"language":53059,"meta":24,"style":24},"pos=\"0 0 1\"\n",[100,103080,103081],{"__ignoreMap":24},[103,103082,103083],{"class":105,"line":106},[103,103084,103078],{"class":113},[14,103086,103087],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[74,103089,103091],{"id":103090},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103093,103094,103095,82520,103098,103100],{},"不同 ",[100,103096,103097],{},"type",[100,103099,31486],{}," 含义不同：",[251,103102,103103,103118],{},[254,103104,103105],{},[257,103106,103107,103111,103116],{},[260,103108,103109],{"align":23726},[100,103110,103097],{},[260,103112,103113,103115],{"align":23726},[100,103114,31486],{}," 示例",[260,103117,100690],{"align":23726},[298,103119,103120,103134,103149,103168],{},[257,103121,103122,103126,103131],{},[303,103123,103124],{"align":23726},[100,103125,53704],{},[303,103127,103128],{"align":23726},[100,103129,103130],{},"size=\"0.1 0.2 0.3\"",[303,103132,103133],{"align":23726},"x\u002Fy\u002Fz 半边长，不是完整长度",[257,103135,103136,103141,103146],{},[303,103137,103138],{"align":23726},[100,103139,103140],{},"sphere",[303,103142,103143],{"align":23726},[100,103144,103145],{},"size=\"0.1\"",[303,103147,103148],{"align":23726},"球半径",[257,103150,103151,103156,103161],{},[303,103152,103153],{"align":23726},[100,103154,103155],{},"capsule",[303,103157,103158],{"align":23726},[100,103159,103160],{},"size=\"0.03\"",[303,103162,103163,103164,103167],{"align":23726},"胶囊半径，长度常用 ",[100,103165,103166],{},"fromto"," 指定",[257,103169,103170,103175,103180],{},[303,103171,103172],{"align":23726},[100,103173,103174],{},"plane",[303,103176,103177],{"align":23726},[100,103178,103179],{},"size=\"3 3 0.1\"",[303,103181,103182],{"align":23726},"可视平面大小，通常当地面",[14,103184,103185,103186,103188,103189,103191],{},"最容易踩坑的是 box：",[100,103187,102014],{}," 表示边长大约是 ",[100,103190,32027],{},"，因为 MuJoCo 用的是半边长。",[74,103193,103195],{"id":103194},"site-是什么","site 是什么",[14,103197,103198,103201],{},[100,103199,103200],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[57,103203,103204,103207,103210,103213],{},[60,103205,103206],{},"标记机械臂末端。",[60,103208,103209],{},"标记目标位置。",[60,103211,103212],{},"放传感器或相机参考点。",[60,103214,103215],{},"在 Python 中读取某个关键点的世界坐标。",[14,103217,103218,103219,101008,103222,103225],{},"在后面的 Reacher 任务中，",[100,103220,103221],{},"tip",[100,103223,103224],{},"target"," 就会用 site 表示。",[45,103227,101243],{"id":101242},[94,103229,103231],{"className":30368,"code":103230,"language":30370,"meta":24,"style":24},"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",[100,103232,103233,103239,103249,103253,103257,103265,103270,103274,103278,103282,103287,103291,103296,103301,103306,103311,103315,103319,103323,103327,103331,103335,103347,103359,103367,103371,103386,103401,103405,103418,103433,103446,103459,103463,103479,103483,103487,103498,103510,103522,103534,103538,103542,103554],{"__ignoreMap":24},[103,103234,103235,103237],{"class":105,"line":106},[103,103236,30382],{"class":109},[103,103238,101291],{"class":113},[103,103240,103241,103243,103245,103247],{"class":105,"line":25},[103,103242,30382],{"class":109},[103,103244,31370],{"class":113},[103,103246,31373],{"class":109},[103,103248,31376],{"class":113},[103,103250,103251],{"class":105,"line":1168},[103,103252,2389],{"emptyLinePlaceholder":30},[103,103254,103255],{"class":105,"line":1183},[103,103256,2389],{"emptyLinePlaceholder":30},[103,103258,103259,103261,103263],{"class":105,"line":1189},[103,103260,101304],{"class":162},[103,103262,13554],{"class":109},[103,103264,101309],{"class":218},[103,103266,103267],{"class":105,"line":1203},[103,103268,103269],{"class":218},"\u003Cmujoco model=\"xml_basic\">\n",[103,103271,103272],{"class":105,"line":1209},[103,103273,101319],{"class":218},[103,103275,103276],{"class":105,"line":1300},[103,103277,2389],{"emptyLinePlaceholder":30},[103,103279,103280],{"class":105,"line":1306},[103,103281,101328],{"class":218},[103,103283,103284],{"class":105,"line":1318},[103,103285,103286],{"class":218},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[103,103288,103289],{"class":105,"line":1601},[103,103290,2389],{"emptyLinePlaceholder":30},[103,103292,103293],{"class":105,"line":1606},[103,103294,103295],{"class":218},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[103,103297,103298],{"class":105,"line":1612},[103,103299,103300],{"class":218},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[103,103302,103303],{"class":105,"line":1617},[103,103304,103305],{"class":218},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[103,103307,103308],{"class":105,"line":1631},[103,103309,103310],{"class":218},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[103,103312,103313],{"class":105,"line":1636},[103,103314,101357],{"class":218},[103,103316,103317],{"class":105,"line":1642},[103,103318,101362],{"class":218},[103,103320,103321],{"class":105,"line":1663},[103,103322,101367],{"class":218},[103,103324,103325],{"class":105,"line":1668},[103,103326,95688],{"class":218},[103,103328,103329],{"class":105,"line":1682},[103,103330,2389],{"emptyLinePlaceholder":30},[103,103332,103333],{"class":105,"line":1687},[103,103334,2389],{"emptyLinePlaceholder":30},[103,103336,103337,103339,103341,103343,103345],{"class":105,"line":1716},[103,103338,31937],{"class":109},[103,103340,1962],{"class":1952},[103,103342,101388],{"class":113},[103,103344,95676],{"class":162},[103,103346,3728],{"class":113},[103,103348,103349,103351,103353,103355,103357],{"class":105,"line":1721},[103,103350,101397],{"class":113},[103,103352,159],{"class":109},[103,103354,101402],{"class":113},[103,103356,101304],{"class":162},[103,103358,120],{"class":113},[103,103360,103361,103363,103365],{"class":105,"line":1738},[103,103362,101411],{"class":113},[103,103364,159],{"class":109},[103,103366,101416],{"class":113},[103,103368,103369],{"class":105,"line":1743},[103,103370,2389],{"emptyLinePlaceholder":30},[103,103372,103373,103376,103378,103381,103384],{"class":105,"line":1748},[103,103374,103375],{"class":113},"    box_body_id ",[103,103377,159],{"class":109},[103,103379,103380],{"class":113}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[103,103382,103383],{"class":218},"\"red_box\"",[103,103385,120],{"class":113},[103,103387,103388,103391,103393,103396,103399],{"class":105,"line":1753},[103,103389,103390],{"class":113},"    site_id ",[103,103392,159],{"class":109},[103,103394,103395],{"class":113}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[103,103397,103398],{"class":218},"\"box_center\"",[103,103400,120],{"class":113},[103,103402,103403],{"class":105,"line":1767},[103,103404,2389],{"emptyLinePlaceholder":30},[103,103406,103407,103409,103412,103414,103416],{"class":105,"line":1772},[103,103408,3090],{"class":109},[103,103410,103411],{"class":113}," box_body_id ",[103,103413,1023],{"class":109},[103,103415,4082],{"class":162},[103,103417,3728],{"class":113},[103,103419,103420,103423,103426,103428,103431],{"class":105,"line":2566},[103,103421,103422],{"class":109},"        raise",[103,103424,103425],{"class":162}," RuntimeError",[103,103427,114],{"class":113},[103,103429,103430],{"class":218},"\"body red_box not found\"",[103,103432,120],{"class":113},[103,103434,103435,103437,103440,103442,103444],{"class":105,"line":2580},[103,103436,3090],{"class":109},[103,103438,103439],{"class":113}," site_id ",[103,103441,1023],{"class":109},[103,103443,4082],{"class":162},[103,103445,3728],{"class":113},[103,103447,103448,103450,103452,103454,103457],{"class":105,"line":2588},[103,103449,103422],{"class":109},[103,103451,103425],{"class":162},[103,103453,114],{"class":113},[103,103455,103456],{"class":218},"\"site box_center not found\"",[103,103458,120],{"class":113},[103,103460,103461],{"class":105,"line":2593},[103,103462,2389],{"emptyLinePlaceholder":30},[103,103464,103465,103467,103469,103471,103473,103475,103477],{"class":105,"line":2599},[103,103466,3190],{"class":109},[103,103468,101491],{"class":113},[103,103470,26033],{"class":109},[103,103472,32433],{"class":162},[103,103474,114],{"class":113},[103,103476,1711],{"class":162},[103,103478,30776],{"class":113},[103,103480,103481],{"class":105,"line":2605},[103,103482,101506],{"class":113},[103,103484,103485],{"class":105,"line":2610},[103,103486,2389],{"emptyLinePlaceholder":30},[103,103488,103489,103491,103493,103496],{"class":105,"line":7938},[103,103490,31289],{"class":162},[103,103492,114],{"class":113},[103,103494,103495],{"class":218},"\"simulation time:\"",[103,103497,101468],{"class":113},[103,103499,103500,103502,103504,103507],{"class":105,"line":7962},[103,103501,31289],{"class":162},[103,103503,114],{"class":113},[103,103505,103506],{"class":218},"\"box body position:\"",[103,103508,103509],{"class":113},", data.xpos[box_body_id].copy())\n",[103,103511,103512,103514,103516,103519],{"class":105,"line":7967},[103,103513,31289],{"class":162},[103,103515,114],{"class":113},[103,103517,103518],{"class":218},"\"site position:\"",[103,103520,103521],{"class":113},", data.site_xpos[site_id].copy())\n",[103,103523,103524,103526,103528,103531],{"class":105,"line":7973},[103,103525,31289],{"class":162},[103,103527,114],{"class":113},[103,103529,103530],{"class":218},"\"box qpos:\"",[103,103532,103533],{"class":113},", np.array(data.qpos))\n",[103,103535,103536],{"class":105,"line":8000},[103,103537,2389],{"emptyLinePlaceholder":30},[103,103539,103540],{"class":105,"line":8005},[103,103541,2389],{"emptyLinePlaceholder":30},[103,103543,103544,103546,103548,103550,103552],{"class":105,"line":8011},[103,103545,1520],{"class":109},[103,103547,31210],{"class":162},[103,103549,101549],{"class":109},[103,103551,101552],{"class":218},[103,103553,3728],{"class":113},[103,103555,103556],{"class":105,"line":8023},[103,103557,101559],{"class":113},[14,103559,103560],{},"保存为：",[94,103562,103564],{"className":23812,"code":103563,"language":23814,"meta":24,"style":24},"touch ch2_xml_basic.py\n",[100,103565,103566],{"__ignoreMap":24},[103,103567,103568,103570],{"class":105,"line":106},[103,103569,101273],{"class":1952},[103,103571,103572],{"class":218}," ch2_xml_basic.py\n",[14,103574,102291],{},[94,103576,103578],{"className":23812,"code":103577,"language":23814,"meta":24,"style":24},"python ch2_xml_basic.py\n",[100,103579,103580],{"__ignoreMap":24},[103,103581,103582,103584],{"class":105,"line":106},[103,103583,30370],{"class":1952},[103,103585,103572],{"class":218},[74,103587,101562],{"id":101562},[14,103589,103590],{},"用名字查找 body：",[94,103592,103594],{"className":30368,"code":103593,"language":30370,"meta":24,"style":24},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[100,103595,103596],{"__ignoreMap":24},[103,103597,103598,103601,103603,103605,103607],{"class":105,"line":106},[103,103599,103600],{"class":113},"box_body_id ",[103,103602,159],{"class":109},[103,103604,103380],{"class":113},[103,103606,103383],{"class":218},[103,103608,120],{"class":113},[14,103610,103611],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103613,103614],{},"用名字查找 site：",[94,103616,103618],{"className":30368,"code":103617,"language":30370,"meta":24,"style":24},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[100,103619,103620],{"__ignoreMap":24},[103,103621,103622,103625,103627,103629,103631],{"class":105,"line":106},[103,103623,103624],{"class":113},"site_id ",[103,103626,159],{"class":109},[103,103628,103395],{"class":113},[103,103630,103398],{"class":218},[103,103632,120],{"class":113},[14,103634,103635,103636,103639,103640,103643],{},"注意第二个参数是对象类型。查 body 就用 ",[100,103637,103638],{},"mjOBJ_BODY","，查 site 就用 ",[100,103641,103642],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103645,103646],{},"读取世界坐标：",[94,103648,103650],{"className":30368,"code":103649,"language":30370,"meta":24,"style":24},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[100,103651,103652,103657],{"__ignoreMap":24},[103,103653,103654],{"class":105,"line":106},[103,103655,103656],{"class":113},"data.xpos[box_body_id]\n",[103,103658,103659],{"class":105,"line":25},[103,103660,103661],{"class":113},"data.site_xpos[site_id]\n",[14,103663,103664,103667,103668,103671],{},[100,103665,103666],{},"xpos"," 是 body 的世界坐标，",[100,103669,103670],{},"site_xpos"," 是 site 的世界坐标。",[74,103673,101698],{"id":101698},[94,103675,103677],{"className":30368,"code":103676,"language":30370,"meta":24,"style":24},"import mujoco\nimport numpy as np\n",[100,103678,103679,103685],{"__ignoreMap":24},[103,103680,103681,103683],{"class":105,"line":106},[103,103682,30382],{"class":109},[103,103684,101291],{"class":113},[103,103686,103687,103689,103691,103693],{"class":105,"line":25},[103,103688,30382],{"class":109},[103,103690,31370],{"class":113},[103,103692,31373],{"class":109},[103,103694,31376],{"class":113},[14,103696,103697,103698,103701,103702,103705,103706,326,103709,28375],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[100,103699,103700],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[100,103703,103704],{},"as np"," 是习惯写法，后面就可以写 ",[100,103707,103708],{},"np.array(...)",[100,103710,103711],{},"np.round(...)",[94,103713,103714],{"className":30368,"code":101585,"language":30370,"meta":24,"style":24},[100,103715,103716,103724,103728],{"__ignoreMap":24},[103,103717,103718,103720,103722],{"class":105,"line":106},[103,103719,101304],{"class":162},[103,103721,13554],{"class":109},[103,103723,101309],{"class":218},[103,103725,103726],{"class":105,"line":25},[103,103727,101600],{"class":218},[103,103729,103730],{"class":105,"line":1168},[103,103731,95688],{"class":218},[14,103733,103734,103735,28375],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[100,103736,103737],{},"mujoco.MjModel.from_xml_string(XML)",[94,103739,103741],{"className":53057,"code":103740,"language":53059,"meta":24,"style":24},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[100,103742,103743],{"__ignoreMap":24},[103,103744,103745,103747,103749,103751,103753,103755,103757,103759,103762,103764,103766,103769,103771,103773,103776],{"class":105,"line":106},[103,103746,1023],{"class":113},[103,103748,103200],{"class":51290},[103,103750,14910],{"class":1952},[103,103752,159],{"class":113},[103,103754,103398],{"class":218},[103,103756,101096],{"class":1952},[103,103758,159],{"class":113},[103,103760,103761],{"class":218},"\"0 0 0\"",[103,103763,101126],{"class":1952},[103,103765,159],{"class":113},[103,103767,103768],{"class":218},"\"0.03\"",[103,103770,78757],{"class":1952},[103,103772,159],{"class":113},[103,103774,103775],{"class":218},"\"0 1 0 1\"",[103,103777,101134],{"class":113},[14,103779,103780,103782,103783,103786,103787,103789,103790,103793],{},[100,103781,103200],{}," 是标记点。",[100,103784,103785],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[100,103788,103160],{}," 表示显示出来的小球大小。",[100,103791,103792],{},"rgba=\"0 1 0 1\""," 表示绿色。",[94,103795,103796],{"className":30368,"code":103593,"language":30370,"meta":24,"style":24},[100,103797,103798],{"__ignoreMap":24},[103,103799,103800,103802,103804,103806,103808],{"class":105,"line":106},[103,103801,103600],{"class":113},[103,103803,159],{"class":109},[103,103805,103380],{"class":113},[103,103807,103383],{"class":218},[103,103809,120],{"class":113},[14,103811,103812,103813,103815],{},"这行的作用是：根据名字 ",[100,103814,103383],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103817,103818],{},"拆开看：",[57,103820,103821,103827,103832,103838],{},[60,103822,103823,103826],{},[100,103824,103825],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[60,103828,103829,103831],{},[100,103830,102075],{}," 是被查询的模型。",[60,103833,103834,103837],{},[100,103835,103836],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[60,103839,103840,103842],{},[100,103841,103383],{}," 是 XML 里写的名字。",[94,103844,103845],{"className":30368,"code":103617,"language":30370,"meta":24,"style":24},[100,103846,103847],{"__ignoreMap":24},[103,103848,103849,103851,103853,103855,103857],{"class":105,"line":106},[103,103850,103624],{"class":113},[103,103852,159],{"class":109},[103,103854,103395],{"class":113},[103,103856,103398],{"class":218},[103,103858,120],{"class":113},[14,103860,103861,103862,28375],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[100,103863,103398],{},[94,103865,103867],{"className":30368,"code":103866,"language":30370,"meta":24,"style":24},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[100,103868,103869,103881],{"__ignoreMap":24},[103,103870,103871,103873,103875,103877,103879],{"class":105,"line":106},[103,103872,1520],{"class":109},[103,103874,103411],{"class":113},[103,103876,1023],{"class":109},[103,103878,4082],{"class":162},[103,103880,3728],{"class":113},[103,103882,103883,103886,103888,103890,103892],{"class":105,"line":25},[103,103884,103885],{"class":109},"    raise",[103,103887,103425],{"class":162},[103,103889,114],{"class":113},[103,103891,103430],{"class":218},[103,103893,120],{"class":113},[14,103895,103896,103898,103899,103902,103903,103906,103907,103910],{},[100,103897,1520],{}," 是条件判断。",[100,103900,103901],{},"mj_name2id"," 找不到对象时会返回 ",[100,103904,103905],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[100,103908,103909],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[94,103912,103914],{"className":30368,"code":103913,"language":30370,"meta":24,"style":24},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[100,103915,103916,103932],{"__ignoreMap":24},[103,103917,103918,103920,103922,103924,103926,103928,103930],{"class":105,"line":106},[103,103919,3014],{"class":109},[103,103921,101491],{"class":113},[103,103923,26033],{"class":109},[103,103925,32433],{"class":162},[103,103927,114],{"class":113},[103,103929,1711],{"class":162},[103,103931,30776],{"class":113},[103,103933,103934],{"class":105,"line":25},[103,103935,101689],{"class":113},[14,103937,103938],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[94,103940,103942],{"className":30368,"code":103941,"language":30370,"meta":24,"style":24},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[100,103943,103944],{"__ignoreMap":24},[103,103945,103946,103948,103950,103952],{"class":105,"line":106},[103,103947,30405],{"class":162},[103,103949,114],{"class":113},[103,103951,103506],{"class":218},[103,103953,103509],{"class":113},[14,103955,103956,103958,103959,103962],{},[100,103957,101069],{}," 保存所有 body 的世界坐标。",[100,103960,103961],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[94,103964,103966],{"className":30368,"code":103965,"language":30370,"meta":24,"style":24},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[100,103967,103968],{"__ignoreMap":24},[103,103969,103970,103972,103974,103976],{"class":105,"line":106},[103,103971,30405],{"class":162},[103,103973,114],{"class":113},[103,103975,103518],{"class":218},[103,103977,103521],{"class":113},[14,103979,103980,103983,103984,103986],{},[100,103981,103982],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[100,103985,102967],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[94,103988,103990],{"className":30368,"code":103989,"language":30370,"meta":24,"style":24},"print(\"box qpos:\", np.array(data.qpos))\n",[100,103991,103992],{"__ignoreMap":24},[103,103993,103994,103996,103998,104000],{"class":105,"line":106},[103,103995,30405],{"class":162},[103,103997,114],{"class":113},[103,103999,103530],{"class":218},[103,104001,103533],{"class":113},[14,104003,104004,104005,104008],{},"这里打印广义位置数组。",[100,104006,104007],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[45,104010,102306],{"id":102305},[14,104012,104013,104014,104017,104018,28375],{},"程序会输出 ",[100,104015,104016],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[100,104019,104020],{},"qpos",[14,104022,104023,104025,104026,104029,104030,104033],{},[100,104024,103961],{}," 是 body 的世界坐标位置。",[100,104027,104028],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[100,104031,104032],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104035,82212,104036,82520,104038,104040],{},[100,104037,102967],{},[100,104039,103785],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104042,104043],{},"如果你把 site 改成：",[94,104045,104047],{"className":53057,"code":104046,"language":53059,"meta":24,"style":24},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[100,104048,104049],{"__ignoreMap":24},[103,104050,104051,104053,104055,104057,104059,104062,104064,104066,104069,104071,104073,104075,104077,104079,104081],{"class":105,"line":106},[103,104052,1023],{"class":113},[103,104054,103200],{"class":51290},[103,104056,14910],{"class":1952},[103,104058,159],{"class":113},[103,104060,104061],{"class":218},"\"box_top\"",[103,104063,101096],{"class":1952},[103,104065,159],{"class":113},[103,104067,104068],{"class":218},"\"0 0 0.15\"",[103,104070,101126],{"class":1952},[103,104072,159],{"class":113},[103,104074,103768],{"class":218},[103,104076,78757],{"class":1952},[103,104078,159],{"class":113},[103,104080,103775],{"class":218},[103,104082,101134],{"class":113},[14,104084,104085,104086,104089],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[100,104087,104088],{},"site position"," 就会比 body position 的 z 坐标更高。",[45,104091,102338],{"id":102337},[57,104093,104094,104103,104106,104113,104119,104130],{},[60,104095,102401,104096,104098,104099,102404,104101,28375],{},[100,104097,102971],{}," 的初始高度从 ",[100,104100,331],{},[100,104102,191],{},[60,104104,104105],{},"重新运行程序。",[60,104107,104108,104109,104112],{},"观察 ",[100,104110,104111],{},"box qpos"," 和最终位置是否变化。",[60,104114,104115,104116,104118],{},"故意把 ",[100,104117,103200],{}," 名称改错，确认程序能报错。",[60,104120,102401,104121,104123,104124,102404,104126,104129],{},[100,104122,101110],{}," 的颜色 ",[100,104125,102022],{},[100,104127,104128],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[60,104131,102401,104132,82520,104134,102404,104137,104140,104141,104143],{},[100,104133,102967],{},[100,104135,104136],{},"pos",[100,104138,104139],{},"0 0 0.2","，观察 ",[100,104142,104088],{}," 如何变化。",[45,104145,102443],{"id":102442},[74,104147,104149],{"id":104148},"xml-error-schema-violation",[100,104150,104151],{},"XML Error: Schema violation",[14,104153,104154],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[74,104156,104158,81280,104160],{"id":104157},"mj_name2id-返回-1",[100,104159,103901],{},[100,104161,103905],{},[14,104163,104164,104165,104168],{},"说明名字没有找到。检查 XML 中 ",[100,104166,104167],{},"name=\"...\"","，并确认对象类型正确。",[74,104170,104171],{"id":104171},"物体不下落",[14,104173,102513],{},[57,104175,104176,104181,104186],{},[60,104177,104178,104179],{},"body 是否有 ",[100,104180,101610],{},[60,104182,104183,104184],{},"gravity 是否为 ",[100,104185,102579],{},[60,104187,104188,104189,104191],{},"body 是否被固定在 ",[100,104190,101831],{}," 中",[74,104193,104194],{"id":104194},"坐标看起来不符合预期",[14,104196,104197],{},"先区分两种坐标：",[251,104199,104200,104209],{},[254,104201,104202],{},[257,104203,104204,104207],{},[260,104205,104206],{"align":23726},"坐标",[260,104208,100690],{"align":23726},[298,104210,104211,104221],{},[257,104212,104213,104218],{},[303,104214,104215,104216],{"align":23726},"XML 里的 ",[100,104217,104136],{},[303,104219,104220],{"align":23726},"相对父 body 的局部坐标",[257,104222,104223,104229],{},[303,104224,104225,24968,104227],{"align":23726},[100,104226,101069],{},[100,104228,103982],{},[303,104230,104231],{"align":23726},"仿真更新后的世界坐标",[14,104233,104234,104235,104237,104238,82529,104241,104243],{},"如果你修改了 ",[100,104236,101060],{},"，但还没调用 ",[100,104239,104240],{},"mj_forward",[100,104242,101205],{},"，世界坐标可能还没有更新。",[45,104245,102597],{"id":102596},[14,104247,104248],{},"MJCF 建模先掌握四件事：",[57,104250,104251,104256,104261,104266],{},[60,104252,104253,104255],{},[100,104254,51790],{}," 表示刚体层级。",[60,104257,104258,104260],{},[100,104259,101110],{}," 表示形状、碰撞和质量。",[60,104262,104263,104265],{},[100,104264,102946],{}," 决定 body 能不能动、怎么动。",[60,104267,104268,104270],{},[100,104269,103200],{}," 用来标记关键点，方便 Python 读取位置。",[14,104272,104273],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5116,104275,104276],{},"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":24,"searchDepth":25,"depth":25,"links":104278},[104279,104280,104281,104287,104291,104292,104293,104300],{"id":100636,"depth":25,"text":100637},{"id":100759,"depth":25,"text":100760},{"id":101034,"depth":25,"text":101035,"children":104282},[104283,104284,104285,104286],{"id":102950,"depth":1168,"text":102950},{"id":103064,"depth":1168,"text":103064},{"id":103090,"depth":1168,"text":103091},{"id":103194,"depth":1168,"text":103195},{"id":101242,"depth":25,"text":101243,"children":104288},[104289,104290],{"id":101562,"depth":1168,"text":101562},{"id":101698,"depth":1168,"text":101698},{"id":102305,"depth":25,"text":102306},{"id":102337,"depth":25,"text":102338},{"id":102442,"depth":25,"text":102443,"children":104294},[104295,104296,104298,104299],{"id":104148,"depth":1168,"text":104151},{"id":104157,"depth":1168,"text":104297},"mj_name2id 返回 -1",{"id":104171,"depth":1168,"text":104171},{"id":104194,"depth":1168,"text":104194},{"id":102596,"depth":25,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102644,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104307,"title":104308,"body":104309,"description":24,"extension":28,"meta":105804,"navigation":30,"path":105805,"seo":105806,"stem":105807,"__hash__":105808},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104310,"toc":105776},[104311,104314,104316,104319,104322,104360,104363,104369,104372,104374,104376,104403,104405,104419,104421,104462,104464,104488,104490,104493,104502,104511,104514,104523,104531,104540,104543,104553,104556,104608,104615,104621,104629,104677,104680,104699,104702,104710,104714,104723,104756,104758,105106,105108,105120,105122,105133,105135,105138,105159,105165,105168,105193,105203,105206,105214,105217,105220,105241,105252,105254,105274,105277,105298,105307,105326,105332,105357,105360,105374,105381,105405,105408,105416,105425,105441,105453,105461,105470,105472,105475,105499,105504,105507,105529,105531,105570,105572,105579,105581,105589,105592,105595,105607,105648,105655,105666,105673,105676,105725,105728,105731,105737,105739,105744,105770,105773],[10,104312,104308],{"id":104313},"_3python-控制接口读取状态与推进仿真",[45,104315,100637],{"id":100636},[14,104317,104318],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104320,104321],{},"你将学习:",[57,104323,104324,104329,104334,104338,104343,104354],{},[60,104325,104326],{},[100,104327,104328],{},"MjModel.from_xml_string",[60,104330,104331],{},[100,104332,104333],{},"MjData(model)",[60,104335,104336],{},[100,104337,101205],{},[60,104339,104340],{},[100,104341,104342],{},"mj_resetData",[60,104344,104345,104346,326,104348,326,104351],{},"读取 ",[100,104347,104020],{},[100,104349,104350],{},"qvel",[100,104352,104353],{},"ctrl",[60,104355,104356,104357],{},"使用 ",[100,104358,104359],{},"model.opt.timestep",[14,104361,104362],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[94,104364,104367],{"className":104365,"code":104366,"language":5177,"meta":24},[5175],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[100,104368,104366],{"__ignoreMap":24},[14,104370,104371],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[45,104373,100760],{"id":100759},[14,104375,100763],{},[94,104377,104379],{"className":23812,"code":104378,"language":23814,"meta":24,"style":24},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[100,104380,104381],{"__ignoreMap":24},[103,104382,104383,104385,104387,104389,104391,104394,104396,104398,104400],{"class":105,"line":106},[103,104384,24566],{"class":1952},[103,104386,26305],{"class":218},[103,104388,23824],{"class":218},[103,104390,26390],{"class":162},[103,104392,104393],{"class":218}," python3",[103,104395,100788],{"class":218},[103,104397,102491],{"class":218},[103,104399,100804],{"class":218},[103,104401,104402],{"class":218}," glfw\n",[14,104404,102809],{},[94,104406,104407],{"className":23812,"code":100909,"language":23814,"meta":24,"style":24},[100,104408,104409],{"__ignoreMap":24},[103,104410,104411,104413,104415,104417],{"class":105,"line":106},[103,104412,23821],{"class":1952},[103,104414,23824],{"class":218},[103,104416,100920],{"class":218},[103,104418,100923],{"class":218},[14,104420,102826],{},[94,104422,104424],{"className":23812,"code":104423,"language":23814,"meta":24,"style":24},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[100,104425,104426,104443,104452],{"__ignoreMap":24},[103,104427,104428,104430,104432,104434,104437,104439,104441],{"class":105,"line":106},[103,104429,30320],{"class":1952},[103,104431,29166],{"class":218},[103,104433,25105],{"class":162},[103,104435,104436],{"class":218}," mujoco-python-api",[103,104438,100965],{"class":218},[103,104440,100968],{"class":162},[103,104442,100971],{"class":162},[103,104444,104445,104447,104449],{"class":105,"line":25},[103,104446,30320],{"class":1952},[103,104448,100978],{"class":218},[103,104450,104451],{"class":218}," mujoco-python-api\n",[103,104453,104454,104456,104458,104460],{"class":105,"line":1168},[103,104455,23821],{"class":1952},[103,104457,23824],{"class":218},[103,104459,100920],{"class":218},[103,104461,100923],{"class":218},[14,104463,100994],{},[57,104465,104466,104473,104482],{},[60,104467,104468,101008,104470,104472],{},[100,104469,100665],{},[100,104471,100670],{}," 是官方 Python bindings 的类名。",[60,104474,104475,104476,104479,104480,28375],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[100,104477,104478],{},"mjModel"," 在 Python 中是 ",[100,104481,100699],{},[60,104483,104484,104485,28375],{},"不要使用 ",[100,104486,104487],{},"sim = mujoco_py.MjSim(...)",[45,104489,101035],{"id":101034},[14,104491,104492],{},"仿真推进核心代码:",[94,104494,104496],{"className":30368,"code":104495,"language":30370,"meta":24,"style":24},"mujoco.mj_step(model, data)\n",[100,104497,104498],{"__ignoreMap":24},[103,104499,104500],{"class":105,"line":106},[103,104501,104495],{"class":113},[14,104503,104504,104505,326,104507,326,104509,28375],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[100,104506,101060],{},[100,104508,101063],{},[100,104510,101057],{},[14,104512,104513],{},"重置仿真:",[94,104515,104517],{"className":30368,"code":104516,"language":30370,"meta":24,"style":24},"mujoco.mj_resetData(model, data)\n",[100,104518,104519],{"__ignoreMap":24},[103,104520,104521],{"class":105,"line":106},[103,104522,104516],{"class":113},[14,104524,104525,104526,82529,104528,104530],{},"如果手动修改了 ",[100,104527,101060],{},[100,104529,101063],{},"，通常应调用:",[94,104532,104534],{"className":30368,"code":104533,"language":30370,"meta":24,"style":24},"mujoco.mj_forward(model, data)\n",[100,104535,104536],{"__ignoreMap":24},[103,104537,104538],{"class":105,"line":106},[103,104539,104533],{"class":113},[14,104541,104542],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[74,104544,104546,326,104548,326,104550,104552],{"id":104545},"qposqvelctrl-是什么",[100,104547,104020],{},[100,104549,104350],{},[100,104551,104353],{}," 是什么",[14,104554,104555],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[251,104557,104558,104570],{},[254,104559,104560],{},[257,104561,104562,104565,104567],{},[260,104563,104564],{"align":23726},"字段",[260,104566,100690],{"align":23726},[260,104568,104569],{"align":23726},"谁来修改",[298,104571,104572,104584,104596],{},[257,104573,104574,104578,104581],{},[303,104575,104576],{"align":23726},[100,104577,101060],{},[303,104579,104580],{"align":23726},"广义位置，例如小车位置、关节角、自由物体位置姿态",[303,104582,104583],{"align":23726},"MuJoCo 更新，也可以手动设置初始状态",[257,104585,104586,104590,104593],{},[303,104587,104588],{"align":23726},[100,104589,101063],{},[303,104591,104592],{"align":23726},"广义速度，例如小车速度、关节角速度",[303,104594,104595],{"align":23726},"MuJoCo 更新，也可以手动清零",[257,104597,104598,104602,104605],{},[303,104599,104600],{"align":23726},[100,104601,101066],{},[303,104603,104604],{"align":23726},"actuator 的控制输入",[303,104606,104607],{"align":23726},"主要由你的控制代码写入",[14,104609,9015,104610,101008,104612,104614],{},[100,104611,104020],{},[100,104613,104350],{}," 不一定同维。自由刚体就是典型例子：",[94,104616,104619],{"className":104617,"code":104618,"language":5177,"meta":24},[5175],"freejoint: qpos 7 维，qvel 6 维\n",[100,104620,104618],{"__ignoreMap":24},[74,104622,104624,101008,104626,104628],{"id":104623},"mj_step-和-mj_forward-的区别",[100,104625,101205],{},[100,104627,104240],{}," 的区别",[251,104630,104631,104644],{},[254,104632,104633],{},[257,104634,104635,104638,104641],{},[260,104636,104637],{"align":23726},"函数",[260,104639,104640],{"align":23726},"是否推进时间",[260,104642,104643],{"align":23726},"什么时候用",[298,104645,104646,104659],{},[257,104647,104648,104653,104656],{},[303,104649,104650],{"align":23726},[100,104651,104652],{},"mj_step(model, data)",[303,104654,104655],{"align":23726},"是",[303,104657,104658],{"align":23726},"正常仿真循环，每调用一次前进一步",[257,104660,104661,104666,104669],{},[303,104662,104663],{"align":23726},[100,104664,104665],{},"mj_forward(model, data)",[303,104667,104668],{"align":23726},"否",[303,104670,104671,104672,326,104674,104676],{"align":23726},"手动改了 ",[100,104673,104020],{},[100,104675,104350],{}," 后，刷新派生量",[14,104678,104679],{},"例如你写：",[94,104681,104683],{"className":30368,"code":104682,"language":30370,"meta":24,"style":24},"data.qpos[2] = 2.0\n",[100,104684,104685],{"__ignoreMap":24},[103,104686,104687,104690,104692,104694,104696],{"class":105,"line":106},[103,104688,104689],{"class":113},"data.qpos[",[103,104691,191],{"class":162},[103,104693,4432],{"class":113},[103,104695,159],{"class":109},[103,104697,104698],{"class":162}," 2.0\n",[14,104700,104701],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[94,104703,104704],{"className":30368,"code":104533,"language":30370,"meta":24,"style":24},[100,104705,104706],{"__ignoreMap":24},[103,104707,104708],{"class":105,"line":106},[103,104709,104533],{"class":113},[74,104711,104713],{"id":104712},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104715,104716,104719,104720,104722],{},[100,104717,104718],{},"mujoco.mj_resetData(model, data)"," 会把 ",[100,104721,33391],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[94,104724,104726],{"className":30368,"code":104725,"language":30370,"meta":24,"style":24},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[100,104727,104728,104732,104742,104752],{"__ignoreMap":24},[103,104729,104730],{"class":105,"line":106},[103,104731,104516],{"class":113},[103,104733,104734,104737,104739],{"class":105,"line":25},[103,104735,104736],{"class":113},"data.qpos[:] ",[103,104738,159],{"class":109},[103,104740,104741],{"class":113}," random_qpos\n",[103,104743,104744,104747,104749],{"class":105,"line":1168},[103,104745,104746],{"class":113},"data.qvel[:] ",[103,104748,159],{"class":109},[103,104750,104751],{"class":162}," 0.0\n",[103,104753,104754],{"class":105,"line":1183},[103,104755,104533],{"class":113},[45,104757,101243],{"id":101242},[94,104759,104761],{"className":30368,"code":104760,"language":30370,"meta":24,"style":24},"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",[100,104762,104763,104769,104779,104783,104787,104795,104800,104804,104808,104812,104817,104821,104826,104831,104836,104840,104844,104848,104852,104856,104860,104879,104886,104898,104909,104925,104941,104945,104949,104961,104973,104981,104985,104996,105000,105016,105020,105024,105033,105037,105042,105051,105055,105068,105073,105082,105086,105090,105102],{"__ignoreMap":24},[103,104764,104765,104767],{"class":105,"line":106},[103,104766,30382],{"class":109},[103,104768,101291],{"class":113},[103,104770,104771,104773,104775,104777],{"class":105,"line":25},[103,104772,30382],{"class":109},[103,104774,31370],{"class":113},[103,104776,31373],{"class":109},[103,104778,31376],{"class":113},[103,104780,104781],{"class":105,"line":1168},[103,104782,2389],{"emptyLinePlaceholder":30},[103,104784,104785],{"class":105,"line":1183},[103,104786,2389],{"emptyLinePlaceholder":30},[103,104788,104789,104791,104793],{"class":105,"line":1189},[103,104790,101304],{"class":162},[103,104792,13554],{"class":109},[103,104794,101309],{"class":218},[103,104796,104797],{"class":105,"line":1203},[103,104798,104799],{"class":218},"\u003Cmujoco model=\"state_api\">\n",[103,104801,104802],{"class":105,"line":1209},[103,104803,101319],{"class":218},[103,104805,104806],{"class":105,"line":1300},[103,104807,2389],{"emptyLinePlaceholder":30},[103,104809,104810],{"class":105,"line":1306},[103,104811,101328],{"class":218},[103,104813,104814],{"class":105,"line":1318},[103,104815,104816],{"class":218},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[103,104818,104819],{"class":105,"line":1601},[103,104820,2389],{"emptyLinePlaceholder":30},[103,104822,104823],{"class":105,"line":1606},[103,104824,104825],{"class":218},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[103,104827,104828],{"class":105,"line":1612},[103,104829,104830],{"class":218},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[103,104832,104833],{"class":105,"line":1617},[103,104834,104835],{"class":218},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[103,104837,104838],{"class":105,"line":1631},[103,104839,101357],{"class":218},[103,104841,104842],{"class":105,"line":1636},[103,104843,101362],{"class":218},[103,104845,104846],{"class":105,"line":1642},[103,104847,101367],{"class":218},[103,104849,104850],{"class":105,"line":1663},[103,104851,95688],{"class":218},[103,104853,104854],{"class":105,"line":1668},[103,104855,2389],{"emptyLinePlaceholder":30},[103,104857,104858],{"class":105,"line":1682},[103,104859,2389],{"emptyLinePlaceholder":30},[103,104861,104862,104864,104867,104870,104872,104875,104877],{"class":105,"line":1687},[103,104863,31937],{"class":109},[103,104865,104866],{"class":1952}," print_state",[103,104868,104869],{"class":113},"(prefix: ",[103,104871,1288],{"class":162},[103,104873,104874],{"class":113},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[103,104876,95676],{"class":162},[103,104878,3728],{"class":113},[103,104880,104881,104883],{"class":105,"line":1716},[103,104882,31289],{"class":162},[103,104884,104885],{"class":113},"(prefix)\n",[103,104887,104888,104890,104892,104895],{"class":105,"line":1721},[103,104889,31289],{"class":162},[103,104891,114],{"class":113},[103,104893,104894],{"class":218},"\"  timestep:\"",[103,104896,104897],{"class":113},", model.opt.timestep)\n",[103,104899,104900,104902,104904,104907],{"class":105,"line":1738},[103,104901,31289],{"class":162},[103,104903,114],{"class":113},[103,104905,104906],{"class":218},"\"  time:\"",[103,104908,101468],{"class":113},[103,104910,104911,104913,104915,104918,104921,104923],{"class":105,"line":1743},[103,104912,31289],{"class":162},[103,104914,114],{"class":113},[103,104916,104917],{"class":218},"\"  qpos:\"",[103,104919,104920],{"class":113},", np.round(data.qpos.copy(), ",[103,104922,406],{"class":162},[103,104924,30487],{"class":113},[103,104926,104927,104929,104931,104934,104937,104939],{"class":105,"line":1748},[103,104928,31289],{"class":162},[103,104930,114],{"class":113},[103,104932,104933],{"class":218},"\"  qvel:\"",[103,104935,104936],{"class":113},", np.round(data.qvel.copy(), ",[103,104938,406],{"class":162},[103,104940,30487],{"class":113},[103,104942,104943],{"class":105,"line":1753},[103,104944,2389],{"emptyLinePlaceholder":30},[103,104946,104947],{"class":105,"line":1767},[103,104948,2389],{"emptyLinePlaceholder":30},[103,104950,104951,104953,104955,104957,104959],{"class":105,"line":1772},[103,104952,31937],{"class":109},[103,104954,1962],{"class":1952},[103,104956,101388],{"class":113},[103,104958,95676],{"class":162},[103,104960,3728],{"class":113},[103,104962,104963,104965,104967,104969,104971],{"class":105,"line":2566},[103,104964,101397],{"class":113},[103,104966,159],{"class":109},[103,104968,101402],{"class":113},[103,104970,101304],{"class":162},[103,104972,120],{"class":113},[103,104974,104975,104977,104979],{"class":105,"line":2580},[103,104976,101411],{"class":113},[103,104978,159],{"class":109},[103,104980,101416],{"class":113},[103,104982,104983],{"class":105,"line":2588},[103,104984,2389],{"emptyLinePlaceholder":30},[103,104986,104987,104990,104993],{"class":105,"line":2593},[103,104988,104989],{"class":113},"    print_state(",[103,104991,104992],{"class":218},"\"initial\"",[103,104994,104995],{"class":113},", model, data)\n",[103,104997,104998],{"class":105,"line":2599},[103,104999,2389],{"emptyLinePlaceholder":30},[103,105001,105002,105004,105006,105008,105010,105012,105014],{"class":105,"line":2605},[103,105003,3190],{"class":109},[103,105005,101491],{"class":113},[103,105007,26033],{"class":109},[103,105009,32433],{"class":162},[103,105011,114],{"class":113},[103,105013,769],{"class":162},[103,105015,30776],{"class":113},[103,105017,105018],{"class":105,"line":2610},[103,105019,101506],{"class":113},[103,105021,105022],{"class":105,"line":7938},[103,105023,2389],{"emptyLinePlaceholder":30},[103,105025,105026,105028,105031],{"class":105,"line":7962},[103,105027,104989],{"class":113},[103,105029,105030],{"class":218},"\"after 50 steps\"",[103,105032,104995],{"class":113},[103,105034,105035],{"class":105,"line":7967},[103,105036,2389],{"emptyLinePlaceholder":30},[103,105038,105039],{"class":105,"line":7973},[103,105040,105041],{"class":113},"    mujoco.mj_resetData(model, data)\n",[103,105043,105044,105046,105049],{"class":105,"line":8000},[103,105045,104989],{"class":113},[103,105047,105048],{"class":218},"\"after reset\"",[103,105050,104995],{"class":113},[103,105052,105053],{"class":105,"line":8005},[103,105054,2389],{"emptyLinePlaceholder":30},[103,105056,105057,105060,105062,105064,105066],{"class":105,"line":8011},[103,105058,105059],{"class":113},"    data.qpos[",[103,105061,191],{"class":162},[103,105063,4432],{"class":113},[103,105065,159],{"class":109},[103,105067,104698],{"class":162},[103,105069,105070],{"class":105,"line":8023},[103,105071,105072],{"class":113},"    mujoco.mj_forward(model, data)\n",[103,105074,105075,105077,105080],{"class":105,"line":8035},[103,105076,104989],{"class":113},[103,105078,105079],{"class":218},"\"after manual qpos edit\"",[103,105081,104995],{"class":113},[103,105083,105084],{"class":105,"line":8047},[103,105085,2389],{"emptyLinePlaceholder":30},[103,105087,105088],{"class":105,"line":9706},[103,105089,2389],{"emptyLinePlaceholder":30},[103,105091,105092,105094,105096,105098,105100],{"class":105,"line":9731},[103,105093,1520],{"class":109},[103,105095,31210],{"class":162},[103,105097,101549],{"class":109},[103,105099,101552],{"class":218},[103,105101,3728],{"class":113},[103,105103,105104],{"class":105,"line":9754},[103,105105,101559],{"class":113},[14,105107,103560],{},[94,105109,105111],{"className":23812,"code":105110,"language":23814,"meta":24,"style":24},"touch ch3_python_state.py\n",[100,105112,105113],{"__ignoreMap":24},[103,105114,105115,105117],{"class":105,"line":106},[103,105116,101273],{"class":1952},[103,105118,105119],{"class":218}," ch3_python_state.py\n",[14,105121,102291],{},[94,105123,105125],{"className":23812,"code":105124,"language":23814,"meta":24,"style":24},"python ch3_python_state.py\n",[100,105126,105127],{"__ignoreMap":24},[103,105128,105129,105131],{"class":105,"line":106},[103,105130,30370],{"class":1952},[103,105132,105119],{"class":218},[74,105134,101562],{"id":101562},[14,105136,105137],{},"打印状态的函数：",[94,105139,105141],{"className":30368,"code":105140,"language":30370,"meta":24,"style":24},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[100,105142,105143],{"__ignoreMap":24},[103,105144,105145,105147,105149,105151,105153,105155,105157],{"class":105,"line":106},[103,105146,31937],{"class":109},[103,105148,104866],{"class":1952},[103,105150,104869],{"class":113},[103,105152,1288],{"class":162},[103,105154,104874],{"class":113},[103,105156,95676],{"class":162},[103,105158,3728],{"class":113},[14,105160,105161,105162,105164],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[100,105163,33391],{}," 里发生了什么。",[14,105166,105167],{},"推进 50 步：",[94,105169,105171],{"className":30368,"code":105170,"language":30370,"meta":24,"style":24},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[100,105172,105173,105189],{"__ignoreMap":24},[103,105174,105175,105177,105179,105181,105183,105185,105187],{"class":105,"line":106},[103,105176,3014],{"class":109},[103,105178,101491],{"class":113},[103,105180,26033],{"class":109},[103,105182,32433],{"class":162},[103,105184,114],{"class":113},[103,105186,769],{"class":162},[103,105188,30776],{"class":113},[103,105190,105191],{"class":105,"line":25},[103,105192,101689],{"class":113},[14,105194,105195,105196,105199,105200,105202],{},"由于 ",[100,105197,105198],{},"timestep=0.01","，所以 50 步后时间约为 ",[100,105201,35319],{}," 秒。",[14,105204,105205],{},"重置：",[94,105207,105208],{"className":30368,"code":104516,"language":30370,"meta":24,"style":24},[100,105209,105210],{"__ignoreMap":24},[103,105211,105212],{"class":105,"line":106},[103,105213,104516],{"class":113},[14,105215,105216],{},"这会把时间、位置、速度恢复到初始状态。",[14,105218,105219],{},"手动改高度：",[94,105221,105223],{"className":30368,"code":105222,"language":30370,"meta":24,"style":24},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[100,105224,105225,105237],{"__ignoreMap":24},[103,105226,105227,105229,105231,105233,105235],{"class":105,"line":106},[103,105228,104689],{"class":113},[103,105230,191],{"class":162},[103,105232,4432],{"class":113},[103,105234,159],{"class":109},[103,105236,104698],{"class":162},[103,105238,105239],{"class":105,"line":25},[103,105240,104533],{"class":113},[14,105242,105243,105244,105247,105248,105251],{},"这个例子里 ",[100,105245,105246],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[100,105249,105250],{},"2.0"," 表示把小球放到更高的位置。",[74,105253,101698],{"id":101698},[94,105255,105256],{"className":30368,"code":105140,"language":30370,"meta":24,"style":24},[100,105257,105258],{"__ignoreMap":24},[103,105259,105260,105262,105264,105266,105268,105270,105272],{"class":105,"line":106},[103,105261,31937],{"class":109},[103,105263,104866],{"class":1952},[103,105265,104869],{"class":113},[103,105267,1288],{"class":162},[103,105269,104874],{"class":113},[103,105271,95676],{"class":162},[103,105273,3728],{"class":113},[14,105275,105276],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[57,105278,105279,105288,105293],{},[60,105280,105281,105284,105285,105287],{},[100,105282,105283],{},"prefix","：一段文字，比如 ",[100,105286,104992],{},"，用来说明现在打印的是哪个阶段。",[60,105289,105290,105292],{},[100,105291,102075],{},"：MuJoCo 模型。",[60,105294,105295,105297],{},[100,105296,33391],{},"：MuJoCo 当前状态。",[14,105299,105300,326,105303,105306],{},[100,105301,105302],{},"prefix: str",[100,105304,105305],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[94,105308,105310],{"className":30368,"code":105309,"language":30370,"meta":24,"style":24},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[100,105311,105312],{"__ignoreMap":24},[103,105313,105314,105316,105318,105320,105322,105324],{"class":105,"line":106},[103,105315,30405],{"class":162},[103,105317,114],{"class":113},[103,105319,104917],{"class":218},[103,105321,104920],{"class":113},[103,105323,406],{"class":162},[103,105325,30487],{"class":113},[14,105327,105328,105331],{},[100,105329,105330],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[94,105333,105335],{"className":30368,"code":105334,"language":30370,"meta":24,"style":24},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[100,105336,105337,105349],{"__ignoreMap":24},[103,105338,105339,105341,105343,105345,105347],{"class":105,"line":106},[103,105340,101624],{"class":113},[103,105342,159],{"class":109},[103,105344,101402],{"class":113},[103,105346,101304],{"class":162},[103,105348,120],{"class":113},[103,105350,105351,105353,105355],{"class":105,"line":25},[103,105352,101648],{"class":113},[103,105354,159],{"class":109},[103,105356,101416],{"class":113},[14,105358,105359],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[94,105361,105363],{"className":30368,"code":105362,"language":30370,"meta":24,"style":24},"print_state(\"initial\", model, data)\n",[100,105364,105365],{"__ignoreMap":24},[103,105366,105367,105370,105372],{"class":105,"line":106},[103,105368,105369],{"class":113},"print_state(",[103,105371,104992],{"class":218},[103,105373,104995],{"class":113},[14,105375,105376,105377,105380],{},"调用刚才定义的 ",[100,105378,105379],{},"print_state"," 函数，打印初始状态。",[94,105382,105383],{"className":30368,"code":105170,"language":30370,"meta":24,"style":24},[100,105384,105385,105401],{"__ignoreMap":24},[103,105386,105387,105389,105391,105393,105395,105397,105399],{"class":105,"line":106},[103,105388,3014],{"class":109},[103,105390,101491],{"class":113},[103,105392,26033],{"class":109},[103,105394,32433],{"class":162},[103,105396,114],{"class":113},[103,105398,769],{"class":162},[103,105400,30776],{"class":113},[103,105402,105403],{"class":105,"line":25},[103,105404,101689],{"class":113},[14,105406,105407],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[94,105409,105410],{"className":30368,"code":104516,"language":30370,"meta":24,"style":24},[100,105411,105412],{"__ignoreMap":24},[103,105413,105414],{"class":105,"line":106},[103,105415,104516],{"class":113},[14,105417,105418,105419,105421,105422,105424],{},"重置 ",[100,105420,33391],{},"。注意它不会重新创建 ",[100,105423,102075],{},"，因为模型结构没有变，只是状态回到初始值。",[94,105426,105427],{"className":30368,"code":104682,"language":30370,"meta":24,"style":24},[100,105428,105429],{"__ignoreMap":24},[103,105430,105431,105433,105435,105437,105439],{"class":105,"line":106},[103,105432,104689],{"class":113},[103,105434,191],{"class":162},[103,105436,4432],{"class":113},[103,105438,159],{"class":109},[103,105440,104698],{"class":162},[14,105442,105443,105444,326,105447,326,105450,105452],{},"这行是“手动改状态”。在 freejoint 中，",[100,105445,105446],{},"qpos[0]",[100,105448,105449],{},"qpos[1]",[100,105451,105246],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[94,105454,105455],{"className":30368,"code":104533,"language":30370,"meta":24,"style":24},[100,105456,105457],{"__ignoreMap":24},[103,105458,105459],{"class":105,"line":106},[103,105460,104533],{"class":113},[14,105462,105463,105464,105466,105467,105469],{},"手动改完 ",[100,105465,104020],{}," 后，调用 ",[100,105468,104240],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[45,105471,102306],{"id":102305},[14,105473,105474],{},"你会看到:",[57,105476,105477,105482,105487,105490],{},[60,105478,105479,105480],{},"初始时间为 ",[100,105481,305],{},[60,105483,105484,105485],{},"50 步后时间约为 ",[100,105486,35319],{},[60,105488,105489],{},"reset 后状态恢复",[60,105491,105492,105493,105496,105497],{},"手动修改 ",[100,105494,105495],{},"data.qpos[2]"," 后，小球高度变为 ",[100,105498,105250],{},[14,105500,105501,105503],{},[100,105502,105246],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105505,105506],{},"输出里可以重点看三件事：",[57,105508,105509,105517,105522],{},[60,105510,105511,105513,105514,105516],{},[100,105512,2376],{}," 是否随着 ",[100,105515,101205],{}," 增加。",[60,105518,105519,105521],{},[100,105520,104020],{}," 的 z 坐标是否因为下落而变化。",[60,105523,105524,105526,105527,28375],{},[100,105525,104342],{}," 后时间是否回到 ",[100,105528,305],{},[45,105530,102338],{"id":102337},[57,105532,105533,105539,105545,105551,105554,105563],{},[60,105534,105535,105536,28375],{},"修改 timestep 为 ",[100,105537,105538],{},"0.005",[60,105540,105541,105542,28375],{},"重新运行，检查 50 步后时间是否约为 ",[100,105543,105544],{},"0.25",[60,105546,105547,105548,28375],{},"修改重力为 ",[100,105549,105550],{},"0 0 -1.0",[60,105552,105553],{},"观察小球下降速度是否变慢。",[60,105555,102401,105556,102404,105559,105562],{},[100,105557,105558],{},"data.qpos[2] = 2.0",[100,105560,105561],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[60,105564,105565,105566,105569],{},"注释掉 ",[100,105567,105568],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[45,105571,102443],{"id":102442},[74,105573,105575,105576,105578],{"id":105574},"修改-dataqpos-后位置没有更新","修改 ",[100,105577,101060],{}," 后位置没有更新",[14,105580,102452],{},[94,105582,105583],{"className":30368,"code":104533,"language":30370,"meta":24,"style":24},[100,105584,105585],{"__ignoreMap":24},[103,105586,105587],{"class":105,"line":106},[103,105588,104533],{"class":113},[74,105590,105591],{"id":105591},"数组维度看不懂",[14,105593,105594],{},"打印模型维度:",[94,105596,105598],{"className":30368,"code":105597,"language":30370,"meta":24,"style":24},"print(model.nq, model.nv, model.nu)\n",[100,105599,105600],{"__ignoreMap":24},[103,105601,105602,105604],{"class":105,"line":106},[103,105603,30405],{"class":162},[103,105605,105606],{"class":113},"(model.nq, model.nv, model.nu)\n",[251,105608,105609,105617],{},[254,105610,105611],{},[257,105612,105613,105615],{},[260,105614,104564],{"align":23726},[260,105616,100690],{"align":23726},[298,105618,105619,105629,105639],{},[257,105620,105621,105626],{},[303,105622,105623],{"align":23726},[100,105624,105625],{},"nq",[303,105627,105628],{"align":23726},"位置变量数量",[257,105630,105631,105636],{},[303,105632,105633],{"align":23726},[100,105634,105635],{},"nv",[303,105637,105638],{"align":23726},"速度变量数量",[257,105640,105641,105645],{},[303,105642,105643],{"align":23726},[100,105644,102152],{},[303,105646,105647],{"align":23726},"控制输入数量",[74,105649,105651,105652,105654],{"id":105650},"误以为-qpos-一定等于关节数","误以为 ",[100,105653,104020],{}," 一定等于关节数",[14,105656,105657,105658,82520,105660,105662,105663,105665],{},"不是。例如 ",[100,105659,101610],{},[100,105661,104020],{}," 是 7 维，但 ",[100,105664,104350],{}," 是 6 维。",[74,105667,105669,105670,105672],{"id":105668},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[100,105671,104020],{}," 的第几位",[14,105674,105675],{},"初学时可以先打印：",[94,105677,105679],{"className":30368,"code":105678,"language":30370,"meta":24,"style":24},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[100,105680,105681,105691,105701,105713],{"__ignoreMap":24},[103,105682,105683,105685,105687,105689],{"class":105,"line":106},[103,105684,30405],{"class":162},[103,105686,114],{"class":113},[103,105688,101429],{"class":218},[103,105690,101432],{"class":113},[103,105692,105693,105695,105697,105699],{"class":105,"line":25},[103,105694,30405],{"class":162},[103,105696,114],{"class":113},[103,105698,101441],{"class":218},[103,105700,101444],{"class":113},[103,105702,105703,105705,105707,105710],{"class":105,"line":1168},[103,105704,30405],{"class":162},[103,105706,114],{"class":113},[103,105708,105709],{"class":218},"\"qpos:\"",[103,105711,105712],{"class":113},", data.qpos)\n",[103,105714,105715,105717,105719,105722],{"class":105,"line":1183},[103,105716,30405],{"class":162},[103,105718,114],{"class":113},[103,105720,105721],{"class":218},"\"qvel:\"",[103,105723,105724],{"class":113},", data.qvel)\n",[14,105726,105727],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[74,105729,105730],{"id":105730},"仿真结果每次都一样",[14,105732,105733,105734,105736],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[100,105735,104020],{},"、目标点或控制输入。",[45,105738,102597],{"id":102596},[14,105740,105741,105742,24608],{},"Python 控制 MuJoCo 的核心就是读写 ",[100,105743,33391],{},[57,105745,105746,105754,105759,105764],{},[60,105747,105748,105749,101008,105751,105753],{},"用 ",[100,105750,101060],{},[100,105752,101063],{}," 读取状态。",[60,105755,105748,105756,105758],{},[100,105757,101066],{}," 写入控制。",[60,105760,105748,105761,105763],{},[100,105762,101205],{}," 推进时间。",[60,105765,105766,105767,105769],{},"手动改状态后用 ",[100,105768,104240],{}," 刷新派生量。",[14,105771,105772],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5116,105774,105775],{},"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":24,"searchDepth":25,"depth":25,"links":105777},[105778,105779,105780,105787,105791,105792,105793,105803],{"id":100636,"depth":25,"text":100637},{"id":100759,"depth":25,"text":100760},{"id":101034,"depth":25,"text":101035,"children":105781},[105782,105784,105786],{"id":104545,"depth":1168,"text":105783},"qpos、qvel、ctrl 是什么",{"id":104623,"depth":1168,"text":105785},"mj_step 和 mj_forward 的区别",{"id":104712,"depth":1168,"text":104713},{"id":101242,"depth":25,"text":101243,"children":105788},[105789,105790],{"id":101562,"depth":1168,"text":101562},{"id":101698,"depth":1168,"text":101698},{"id":102305,"depth":25,"text":102306},{"id":102337,"depth":25,"text":102338},{"id":102442,"depth":25,"text":102443,"children":105794},[105795,105797,105798,105800,105802],{"id":105574,"depth":1168,"text":105796},"修改 data.qpos 后位置没有更新",{"id":105591,"depth":1168,"text":105591},{"id":105650,"depth":1168,"text":105799},"误以为 qpos 一定等于关节数",{"id":105668,"depth":1168,"text":105801},"不知道某个元素在 qpos 的第几位",{"id":105730,"depth":1168,"text":105730},{"id":102596,"depth":25,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104308,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105810,"title":105811,"body":105812,"description":24,"extension":28,"meta":107502,"navigation":30,"path":107503,"seo":107504,"stem":107505,"__hash__":107506},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105813,"toc":107478},[105814,105817,105819,105822,105824,105849,105852,105871,105874,105876,105878,105902,105904,105918,105920,105961,105963,105987,105989,105992,106026,106028,106041,106044,106112,106121,106125,106128,106162,106168,106171,106175,106214,106217,106237,106241,106284,106286,106315,106318,106324,106327,106329,106723,106725,106737,106739,106750,106752,106755,106784,106792,106795,106830,106833,106835,106843,106846,106848,106859,106869,106889,106892,106928,106940,106988,107007,107049,107062,107090,107095,107116,107126,107144,107147,107181,107184,107204,107207,107226,107232,107234,107237,107243,107249,107259,107262,107268,107277,107279,107325,107327,107333,107339,107342,107345,107365,107368,107374,107380,107382,107405,107408,107411,107420,107423,107461,107463,107466,107472,107475],[10,105815,105811],{"id":105816},"_4关节actuator-与力控制",[45,105818,100637],{"id":100636},[14,105820,105821],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105823,104321],{},[57,105825,105826,105832,105837,105841,105846],{},[60,105827,105828,105831],{},[100,105829,105830],{},"hinge"," 关节",[60,105833,105834],{},[100,105835,105836],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[60,105838,105839],{},[100,105840,101066],{},[60,105842,105843],{},[100,105844,105845],{},"ctrlrange",[60,105847,105848],{},"读取关节角和角速度",[14,105850,105851],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[94,105853,105855],{"className":30368,"code":105854,"language":30370,"meta":24,"style":24},"data.ctrl[0] = ...\n",[100,105856,105857],{"__ignoreMap":24},[103,105858,105859,105862,105864,105866,105868],{"class":105,"line":106},[103,105860,105861],{"class":113},"data.ctrl[",[103,105863,305],{"class":162},[103,105865,4432],{"class":113},[103,105867,159],{"class":109},[103,105869,105870],{"class":162}," ...\n",[14,105872,105873],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[45,105875,100760],{"id":100759},[14,105877,100763],{},[94,105879,105880],{"className":23812,"code":104378,"language":23814,"meta":24,"style":24},[100,105881,105882],{"__ignoreMap":24},[103,105883,105884,105886,105888,105890,105892,105894,105896,105898,105900],{"class":105,"line":106},[103,105885,24566],{"class":1952},[103,105887,26305],{"class":218},[103,105889,23824],{"class":218},[103,105891,26390],{"class":162},[103,105893,104393],{"class":218},[103,105895,100788],{"class":218},[103,105897,102491],{"class":218},[103,105899,100804],{"class":218},[103,105901,104402],{"class":218},[14,105903,102809],{},[94,105905,105906],{"className":23812,"code":100909,"language":23814,"meta":24,"style":24},[100,105907,105908],{"__ignoreMap":24},[103,105909,105910,105912,105914,105916],{"class":105,"line":106},[103,105911,23821],{"class":1952},[103,105913,23824],{"class":218},[103,105915,100920],{"class":218},[103,105917,100923],{"class":218},[14,105919,102826],{},[94,105921,105923],{"className":23812,"code":105922,"language":23814,"meta":24,"style":24},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[100,105924,105925,105942,105951],{"__ignoreMap":24},[103,105926,105927,105929,105931,105933,105936,105938,105940],{"class":105,"line":106},[103,105928,30320],{"class":1952},[103,105930,29166],{"class":218},[103,105932,25105],{"class":162},[103,105934,105935],{"class":218}," mujoco-control",[103,105937,100965],{"class":218},[103,105939,100968],{"class":162},[103,105941,100971],{"class":162},[103,105943,105944,105946,105948],{"class":105,"line":25},[103,105945,30320],{"class":1952},[103,105947,100978],{"class":218},[103,105949,105950],{"class":218}," mujoco-control\n",[103,105952,105953,105955,105957,105959],{"class":105,"line":1168},[103,105954,23821],{"class":1952},[103,105956,23824],{"class":218},[103,105958,100920],{"class":218},[103,105960,100923],{"class":218},[14,105962,100994],{},[57,105964,105965,105971,105978,105984],{},[60,105966,105967,105970],{},[100,105968,105969],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[60,105972,105973,105975,105976,28375],{},[100,105974,101066],{}," 长度等于 ",[100,105977,102148],{},[60,105979,82212,105980,105983],{},[100,105981,105982],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[60,105985,105986],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[45,105988,101035],{"id":101034},[14,105990,105991],{},"关节决定 body 如何运动:",[94,105993,105995],{"className":53057,"code":105994,"language":53059,"meta":24,"style":24},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[100,105996,105997],{"__ignoreMap":24},[103,105998,105999,106001,106003,106005,106007,106010,106012,106014,106016,106019,106021,106024],{"class":105,"line":106},[103,106000,1023],{"class":113},[103,106002,102946],{"class":51290},[103,106004,14910],{"class":1952},[103,106006,159],{"class":113},[103,106008,106009],{"class":218},"\"hinge\"",[103,106011,53814],{"class":1952},[103,106013,159],{"class":113},[103,106015,106009],{"class":218},[103,106017,106018],{"class":1952}," axis",[103,106020,159],{"class":113},[103,106022,106023],{"class":218},"\"0 1 0\"",[103,106025,101134],{"class":113},[14,106027,103042],{},[57,106029,106030,106035,106038],{},[60,106031,106032,106033],{},"名字是 ",[100,106034,105830],{},[60,106036,106037],{},"类型是旋转关节",[60,106039,106040],{},"绕 y 轴旋转",[14,106042,106043],{},"actuator 决定如何施加控制:",[94,106045,106047],{"className":53057,"code":106046,"language":53059,"meta":24,"style":24},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[100,106048,106049,106058,106104],{"__ignoreMap":24},[103,106050,106051,106053,106056],{"class":105,"line":106},[103,106052,1023],{"class":113},[103,106054,106055],{"class":51290},"actuator",[103,106057,51297],{"class":113},[103,106059,106060,106062,106065,106067,106069,106072,106075,106077,106079,106082,106084,106086,106089,106091,106094,106097,106099,106102],{"class":105,"line":25},[103,106061,52134],{"class":113},[103,106063,106064],{"class":51290},"motor",[103,106066,14910],{"class":1952},[103,106068,159],{"class":113},[103,106070,106071],{"class":218},"\"hinge_motor\"",[103,106073,106074],{"class":1952}," joint",[103,106076,159],{"class":113},[103,106078,106009],{"class":218},[103,106080,106081],{"class":1952}," gear",[103,106083,159],{"class":113},[103,106085,3667],{"class":218},[103,106087,106088],{"class":1952}," ctrlrange",[103,106090,159],{"class":113},[103,106092,106093],{"class":218},"\"-2 2\"",[103,106095,106096],{"class":1952}," ctrllimited",[103,106098,159],{"class":113},[103,106100,106101],{"class":218},"\"true\"",[103,106103,101134],{"class":113},[103,106105,106106,106108,106110],{"class":105,"line":1168},[103,106107,51775],{"class":113},[103,106109,106055],{"class":51290},[103,106111,51297],{"class":113},[14,106113,106114,106117,106118,28375],{},[100,106115,106116],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[100,106119,106120],{},"[-2, 2]",[74,106122,106124],{"id":106123},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106126,106127],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[251,106129,106130,106140],{},[254,106131,106132],{},[257,106133,106134,106136,106138],{},[260,106135,25743],{"align":23726},[260,106137,102686],{"align":23726},[260,106139,100724],{"align":23726},[298,106141,106142,106152],{},[257,106143,106144,106146,106149],{},[303,106145,102946],{"align":23726},[303,106147,106148],{"align":23726},"定义能怎么动",[303,106150,106151],{"align":23726},"门轴允许门旋转",[257,106153,106154,106156,106159],{},[303,106155,106055],{"align":23726},[303,106157,106158],{"align":23726},"定义怎么施力或控制",[303,106160,106161],{"align":23726},"人推门、马达带动门",[14,106163,106164,106165,106167],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[100,106166,101066],{}," 主动控制它。",[14,106169,106170],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[74,106172,106174],{"id":106173},"hinge-joint","hinge joint",[94,106176,106178],{"className":53057,"code":106177,"language":53059,"meta":24,"style":24},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[100,106179,106180],{"__ignoreMap":24},[103,106181,106182,106184,106186,106188,106190,106192,106194,106196,106198,106200,106202,106204,106207,106209,106212],{"class":105,"line":106},[103,106183,1023],{"class":113},[103,106185,102946],{"class":51290},[103,106187,14910],{"class":1952},[103,106189,159],{"class":113},[103,106191,106009],{"class":218},[103,106193,53814],{"class":1952},[103,106195,159],{"class":113},[103,106197,106009],{"class":218},[103,106199,106018],{"class":1952},[103,106201,159],{"class":113},[103,106203,106023],{"class":218},[103,106205,106206],{"class":1952}," damping",[103,106208,159],{"class":113},[103,106210,106211],{"class":218},"\"0.1\"",[103,106213,101134],{"class":113},[14,106215,106216],{},"含义：",[57,106218,106219,106225,106231],{},[60,106220,106221,106224],{},[100,106222,106223],{},"type=\"hinge\"","：只能绕一个轴旋转。",[60,106226,106227,106230],{},[100,106228,106229],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[60,106232,106233,106236],{},[100,106234,106235],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[74,106238,106240],{"id":106239},"motor-actuator","motor actuator",[94,106242,106244],{"className":53057,"code":106243,"language":53059,"meta":24,"style":24},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[100,106245,106246],{"__ignoreMap":24},[103,106247,106248,106250,106252,106254,106256,106258,106260,106262,106264,106266,106268,106270,106272,106274,106276,106278,106280,106282],{"class":105,"line":106},[103,106249,1023],{"class":113},[103,106251,106064],{"class":51290},[103,106253,14910],{"class":1952},[103,106255,159],{"class":113},[103,106257,106071],{"class":218},[103,106259,106074],{"class":1952},[103,106261,159],{"class":113},[103,106263,106009],{"class":218},[103,106265,106081],{"class":1952},[103,106267,159],{"class":113},[103,106269,3667],{"class":218},[103,106271,106088],{"class":1952},[103,106273,159],{"class":113},[103,106275,106093],{"class":218},[103,106277,106096],{"class":1952},[103,106279,159],{"class":113},[103,106281,106101],{"class":218},[103,106283,101134],{"class":113},[14,106285,106216],{},[57,106287,106288,106297,106303,106309],{},[60,106289,106290,106293,106294,106296],{},[100,106291,106292],{},"joint=\"hinge\"","：这个电机作用在名为 ",[100,106295,105830],{}," 的关节上。",[60,106298,106299,106302],{},[100,106300,106301],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[60,106304,106305,106308],{},[100,106306,106307],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[60,106310,106311,106314],{},[100,106312,106313],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106316,106317],{},"简单理解：",[94,106319,106322],{"className":106320,"code":106321,"language":5177,"meta":24},[5175],"实际施加效果 ≈ data.ctrl[0] * gear\n",[100,106323,106321],{"__ignoreMap":24},[14,106325,106326],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[45,106328,101243],{"id":101242},[94,106330,106332],{"className":30368,"code":106331,"language":30370,"meta":24,"style":24},"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",[100,106333,106334,106341,106345,106351,106361,106365,106369,106377,106382,106387,106391,106395,106400,106405,106409,106414,106419,106424,106429,106433,106437,106441,106446,106451,106456,106460,106464,106468,106472,106484,106496,106504,106508,106518,106528,106538,106542,106555,106568,106572,106589,106603,106638,106642,106646,106657,106672,106687,106699,106703,106707,106719],{"__ignoreMap":24},[103,106335,106336,106338],{"class":105,"line":106},[103,106337,30382],{"class":109},[103,106339,106340],{"class":113}," math\n",[103,106342,106343],{"class":105,"line":25},[103,106344,2389],{"emptyLinePlaceholder":30},[103,106346,106347,106349],{"class":105,"line":1168},[103,106348,30382],{"class":109},[103,106350,101291],{"class":113},[103,106352,106353,106355,106357,106359],{"class":105,"line":1183},[103,106354,30382],{"class":109},[103,106356,31370],{"class":113},[103,106358,31373],{"class":109},[103,106360,31376],{"class":113},[103,106362,106363],{"class":105,"line":1189},[103,106364,2389],{"emptyLinePlaceholder":30},[103,106366,106367],{"class":105,"line":1203},[103,106368,2389],{"emptyLinePlaceholder":30},[103,106370,106371,106373,106375],{"class":105,"line":1209},[103,106372,101304],{"class":162},[103,106374,13554],{"class":109},[103,106376,101309],{"class":218},[103,106378,106379],{"class":105,"line":1300},[103,106380,106381],{"class":218},"\u003Cmujoco model=\"one_link_motor\">\n",[103,106383,106384],{"class":105,"line":1306},[103,106385,106386],{"class":218},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[103,106388,106389],{"class":105,"line":1318},[103,106390,2389],{"emptyLinePlaceholder":30},[103,106392,106393],{"class":105,"line":1601},[103,106394,101328],{"class":218},[103,106396,106397],{"class":105,"line":1606},[103,106398,106399],{"class":218},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[103,106401,106402],{"class":105,"line":1612},[103,106403,106404],{"class":218},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[103,106406,106407],{"class":105,"line":1617},[103,106408,2389],{"emptyLinePlaceholder":30},[103,106410,106411],{"class":105,"line":1631},[103,106412,106413],{"class":218},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[103,106415,106416],{"class":105,"line":1636},[103,106417,106418],{"class":218},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[103,106420,106421],{"class":105,"line":1642},[103,106422,106423],{"class":218},"        \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",[103,106425,106426],{"class":105,"line":1663},[103,106427,106428],{"class":218},"      \u003C\u002Fbody>\n",[103,106430,106431],{"class":105,"line":1668},[103,106432,101357],{"class":218},[103,106434,106435],{"class":105,"line":1682},[103,106436,101362],{"class":218},[103,106438,106439],{"class":105,"line":1687},[103,106440,2389],{"emptyLinePlaceholder":30},[103,106442,106443],{"class":105,"line":1716},[103,106444,106445],{"class":218},"  \u003Cactuator>\n",[103,106447,106448],{"class":105,"line":1721},[103,106449,106450],{"class":218},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[103,106452,106453],{"class":105,"line":1738},[103,106454,106455],{"class":218},"  \u003C\u002Factuator>\n",[103,106457,106458],{"class":105,"line":1743},[103,106459,101367],{"class":218},[103,106461,106462],{"class":105,"line":1748},[103,106463,95688],{"class":218},[103,106465,106466],{"class":105,"line":1753},[103,106467,2389],{"emptyLinePlaceholder":30},[103,106469,106470],{"class":105,"line":1767},[103,106471,2389],{"emptyLinePlaceholder":30},[103,106473,106474,106476,106478,106480,106482],{"class":105,"line":1772},[103,106475,31937],{"class":109},[103,106477,1962],{"class":1952},[103,106479,101388],{"class":113},[103,106481,95676],{"class":162},[103,106483,3728],{"class":113},[103,106485,106486,106488,106490,106492,106494],{"class":105,"line":2566},[103,106487,101397],{"class":113},[103,106489,159],{"class":109},[103,106491,101402],{"class":113},[103,106493,101304],{"class":162},[103,106495,120],{"class":113},[103,106497,106498,106500,106502],{"class":105,"line":2580},[103,106499,101411],{"class":113},[103,106501,159],{"class":109},[103,106503,101416],{"class":113},[103,106505,106506],{"class":105,"line":2588},[103,106507,2389],{"emptyLinePlaceholder":30},[103,106509,106510,106512,106514,106516],{"class":105,"line":2593},[103,106511,31289],{"class":162},[103,106513,114],{"class":113},[103,106515,101429],{"class":218},[103,106517,101432],{"class":113},[103,106519,106520,106522,106524,106526],{"class":105,"line":2599},[103,106521,31289],{"class":162},[103,106523,114],{"class":113},[103,106525,101441],{"class":218},[103,106527,101444],{"class":113},[103,106529,106530,106532,106534,106536],{"class":105,"line":2605},[103,106531,31289],{"class":162},[103,106533,114],{"class":113},[103,106535,101453],{"class":218},[103,106537,101456],{"class":113},[103,106539,106540],{"class":105,"line":2610},[103,106541,2389],{"emptyLinePlaceholder":30},[103,106543,106544,106546,106549,106551,106553],{"class":105,"line":7938},[103,106545,3090],{"class":109},[103,106547,106548],{"class":113}," model.nu ",[103,106550,20938],{"class":109},[103,106552,25108],{"class":162},[103,106554,3728],{"class":113},[103,106556,106557,106559,106561,106563,106566],{"class":105,"line":7962},[103,106558,103422],{"class":109},[103,106560,103425],{"class":162},[103,106562,114],{"class":113},[103,106564,106565],{"class":218},"\"expected exactly one actuator\"",[103,106567,120],{"class":113},[103,106569,106570],{"class":105,"line":7967},[103,106571,2389],{"emptyLinePlaceholder":30},[103,106573,106574,106576,106578,106580,106582,106584,106587],{"class":105,"line":7973},[103,106575,3190],{"class":109},[103,106577,31606],{"class":113},[103,106579,26033],{"class":109},[103,106581,32433],{"class":162},[103,106583,114],{"class":113},[103,106585,106586],{"class":162},"2000",[103,106588,30776],{"class":113},[103,106590,106591,106594,106596,106598,106600],{"class":105,"line":8000},[103,106592,106593],{"class":113},"        t ",[103,106595,159],{"class":109},[103,106597,31606],{"class":113},[103,106599,568],{"class":109},[103,106601,106602],{"class":113}," model.opt.timestep\n",[103,106604,106605,106608,106610,106612,106614,106617,106619,106622,106624,106626,106629,106631,106633,106635],{"class":105,"line":8005},[103,106606,106607],{"class":113},"        data.ctrl[",[103,106609,305],{"class":162},[103,106611,4432],{"class":113},[103,106613,159],{"class":109},[103,106615,106616],{"class":162}," 1.5",[103,106618,6508],{"class":109},[103,106620,106621],{"class":113}," math.sin(",[103,106623,105250],{"class":162},[103,106625,6508],{"class":109},[103,106627,106628],{"class":113}," math.pi ",[103,106630,568],{"class":109},[103,106632,61857],{"class":162},[103,106634,6508],{"class":109},[103,106636,106637],{"class":113}," t)\n",[103,106639,106640],{"class":105,"line":8011},[103,106641,101506],{"class":113},[103,106643,106644],{"class":105,"line":8023},[103,106645,2389],{"emptyLinePlaceholder":30},[103,106647,106648,106650,106652,106655],{"class":105,"line":8035},[103,106649,31289],{"class":162},[103,106651,114],{"class":113},[103,106653,106654],{"class":218},"\"time:\"",[103,106656,101468],{"class":113},[103,106658,106659,106661,106663,106666,106668,106670],{"class":105,"line":8047},[103,106660,31289],{"class":162},[103,106662,114],{"class":113},[103,106664,106665],{"class":218},"\"joint qpos:\"",[103,106667,104920],{"class":113},[103,106669,406],{"class":162},[103,106671,30487],{"class":113},[103,106673,106674,106676,106678,106681,106683,106685],{"class":105,"line":9706},[103,106675,31289],{"class":162},[103,106677,114],{"class":113},[103,106679,106680],{"class":218},"\"joint qvel:\"",[103,106682,104936],{"class":113},[103,106684,406],{"class":162},[103,106686,30487],{"class":113},[103,106688,106689,106691,106693,106696],{"class":105,"line":9731},[103,106690,31289],{"class":162},[103,106692,114],{"class":113},[103,106694,106695],{"class":218},"\"last ctrl:\"",[103,106697,106698],{"class":113},", data.ctrl.copy())\n",[103,106700,106701],{"class":105,"line":9754},[103,106702,2389],{"emptyLinePlaceholder":30},[103,106704,106705],{"class":105,"line":9778},[103,106706,2389],{"emptyLinePlaceholder":30},[103,106708,106709,106711,106713,106715,106717],{"class":105,"line":9783},[103,106710,1520],{"class":109},[103,106712,31210],{"class":162},[103,106714,101549],{"class":109},[103,106716,101552],{"class":218},[103,106718,3728],{"class":113},[103,106720,106721],{"class":105,"line":9788},[103,106722,101559],{"class":113},[14,106724,103560],{},[94,106726,106728],{"className":23812,"code":106727,"language":23814,"meta":24,"style":24},"touch ch4_joint_motor.py\n",[100,106729,106730],{"__ignoreMap":24},[103,106731,106732,106734],{"class":105,"line":106},[103,106733,101273],{"class":1952},[103,106735,106736],{"class":218}," ch4_joint_motor.py\n",[14,106738,102291],{},[94,106740,106742],{"className":23812,"code":106741,"language":23814,"meta":24,"style":24},"python ch4_joint_motor.py\n",[100,106743,106744],{"__ignoreMap":24},[103,106745,106746,106748],{"class":105,"line":106},[103,106747,30370],{"class":1952},[103,106749,106736],{"class":218},[74,106751,101562],{"id":101562},[14,106753,106754],{},"检查 actuator 数量：",[94,106756,106758],{"className":30368,"code":106757,"language":30370,"meta":24,"style":24},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[100,106759,106760,106772],{"__ignoreMap":24},[103,106761,106762,106764,106766,106768,106770],{"class":105,"line":106},[103,106763,1520],{"class":109},[103,106765,106548],{"class":113},[103,106767,20938],{"class":109},[103,106769,25108],{"class":162},[103,106771,3728],{"class":113},[103,106773,106774,106776,106778,106780,106782],{"class":105,"line":25},[103,106775,103885],{"class":109},[103,106777,103425],{"class":162},[103,106779,114],{"class":113},[103,106781,106565],{"class":218},[103,106783,120],{"class":113},[14,106785,106786,106788,106789,106791],{},[100,106787,102148],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[100,106790,101066],{}," 长度应该是 1。",[14,106793,106794],{},"产生正弦控制信号：",[94,106796,106798],{"className":30368,"code":106797,"language":30370,"meta":24,"style":24},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[100,106799,106800],{"__ignoreMap":24},[103,106801,106802,106804,106806,106808,106810,106812,106814,106816,106818,106820,106822,106824,106826,106828],{"class":105,"line":106},[103,106803,105861],{"class":113},[103,106805,305],{"class":162},[103,106807,4432],{"class":113},[103,106809,159],{"class":109},[103,106811,106616],{"class":162},[103,106813,6508],{"class":109},[103,106815,106621],{"class":113},[103,106817,105250],{"class":162},[103,106819,6508],{"class":109},[103,106821,106628],{"class":113},[103,106823,568],{"class":109},[103,106825,61857],{"class":162},[103,106827,6508],{"class":109},[103,106829,106637],{"class":113},[14,106831,106832],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106834,101663],{},[94,106836,106837],{"className":30368,"code":104495,"language":30370,"meta":24,"style":24},[100,106838,106839],{"__ignoreMap":24},[103,106840,106841],{"class":105,"line":106},[103,106842,104495],{"class":113},[14,106844,106845],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[74,106847,101698],{"id":101698},[94,106849,106851],{"className":30368,"code":106850,"language":30370,"meta":24,"style":24},"import math\n",[100,106852,106853],{"__ignoreMap":24},[103,106854,106855,106857],{"class":105,"line":106},[103,106856,30382],{"class":109},[103,106858,106340],{"class":113},[14,106860,106861,106862,101008,106865,106868],{},"导入 Python 标准库里的数学模块。后面要用 ",[100,106863,106864],{},"math.sin",[100,106866,106867],{},"math.pi"," 生成周期变化的控制信号。",[94,106870,106871],{"className":30368,"code":103676,"language":30370,"meta":24,"style":24},[100,106872,106873,106879],{"__ignoreMap":24},[103,106874,106875,106877],{"class":105,"line":106},[103,106876,30382],{"class":109},[103,106878,101291],{"class":113},[103,106880,106881,106883,106885,106887],{"class":105,"line":25},[103,106882,30382],{"class":109},[103,106884,31370],{"class":113},[103,106886,31373],{"class":109},[103,106888,31376],{"class":113},[14,106890,106891],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[94,106893,106894],{"className":53057,"code":106177,"language":53059,"meta":24,"style":24},[100,106895,106896],{"__ignoreMap":24},[103,106897,106898,106900,106902,106904,106906,106908,106910,106912,106914,106916,106918,106920,106922,106924,106926],{"class":105,"line":106},[103,106899,1023],{"class":113},[103,106901,102946],{"class":51290},[103,106903,14910],{"class":1952},[103,106905,159],{"class":113},[103,106907,106009],{"class":218},[103,106909,53814],{"class":1952},[103,106911,159],{"class":113},[103,106913,106009],{"class":218},[103,106915,106018],{"class":1952},[103,106917,159],{"class":113},[103,106919,106023],{"class":218},[103,106921,106206],{"class":1952},[103,106923,159],{"class":113},[103,106925,106211],{"class":218},[103,106927,101134],{"class":113},[14,106929,106930,106931,106933,106934,106936,106937,106939],{},"这行定义关节。",[100,106932,105830],{}," 表示旋转关节。",[100,106935,106229],{}," 表示绕 y 轴旋转。",[100,106938,106235],{}," 表示有一点阻尼，运动不会完全无损耗。",[94,106941,106943],{"className":53057,"code":106942,"language":53059,"meta":24,"style":24},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[100,106944,106945],{"__ignoreMap":24},[103,106946,106947,106949,106951,106953,106955,106958,106960,106962,106965,106968,106970,106973,106975,106977,106979,106981,106983,106986],{"class":105,"line":106},[103,106948,1023],{"class":113},[103,106950,101110],{"class":51290},[103,106952,14910],{"class":1952},[103,106954,159],{"class":113},[103,106956,106957],{"class":218},"\"link_geom\"",[103,106959,53814],{"class":1952},[103,106961,159],{"class":113},[103,106963,106964],{"class":218},"\"capsule\"",[103,106966,106967],{"class":1952}," fromto",[103,106969,159],{"class":113},[103,106971,106972],{"class":218},"\"0 0 0 0 0 0.5\"",[103,106974,101126],{"class":1952},[103,106976,159],{"class":113},[103,106978,103768],{"class":218},[103,106980,101991],{"class":1952},[103,106982,159],{"class":113},[103,106984,106985],{"class":218},"\"0.5\"",[103,106987,101134],{"class":113},[14,106989,106990,106991,106993,106994,106996,106997,107000,107001,28375,107004,107006],{},"这行定义摆杆的形状。",[100,106992,103155],{}," 是胶囊体，适合表示杆子。",[100,106995,103166],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[100,106998,106999],{},"(0,0,0)"," 延伸到 ",[100,107002,107003],{},"(0,0,0.5)",[100,107005,103160],{}," 是半径。",[94,107008,107009],{"className":53057,"code":106243,"language":53059,"meta":24,"style":24},[100,107010,107011],{"__ignoreMap":24},[103,107012,107013,107015,107017,107019,107021,107023,107025,107027,107029,107031,107033,107035,107037,107039,107041,107043,107045,107047],{"class":105,"line":106},[103,107014,1023],{"class":113},[103,107016,106064],{"class":51290},[103,107018,14910],{"class":1952},[103,107020,159],{"class":113},[103,107022,106071],{"class":218},[103,107024,106074],{"class":1952},[103,107026,159],{"class":113},[103,107028,106009],{"class":218},[103,107030,106081],{"class":1952},[103,107032,159],{"class":113},[103,107034,3667],{"class":218},[103,107036,106088],{"class":1952},[103,107038,159],{"class":113},[103,107040,106093],{"class":218},[103,107042,106096],{"class":1952},[103,107044,159],{"class":113},[103,107046,106101],{"class":218},[103,107048,101134],{"class":113},[14,107050,107051,107052,107054,107055,107058,107059,107061],{},"这行定义电机。它作用在 ",[100,107053,105830],{}," 关节上。",[100,107056,107057],{},"gear"," 可以理解成放大倍数。",[100,107060,105845],{}," 限制控制输入范围。",[94,107063,107064],{"className":30368,"code":106757,"language":30370,"meta":24,"style":24},[100,107065,107066,107078],{"__ignoreMap":24},[103,107067,107068,107070,107072,107074,107076],{"class":105,"line":106},[103,107069,1520],{"class":109},[103,107071,106548],{"class":113},[103,107073,20938],{"class":109},[103,107075,25108],{"class":162},[103,107077,3728],{"class":113},[103,107079,107080,107082,107084,107086,107088],{"class":105,"line":25},[103,107081,103885],{"class":109},[103,107083,103425],{"class":162},[103,107085,114],{"class":113},[103,107087,106565],{"class":218},[103,107089,120],{"class":113},[14,107091,107092,107094],{},[100,107093,102148],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[94,107096,107098],{"className":30368,"code":107097,"language":30370,"meta":24,"style":24},"for step in range(2000):\n",[100,107099,107100],{"__ignoreMap":24},[103,107101,107102,107104,107106,107108,107110,107112,107114],{"class":105,"line":106},[103,107103,3014],{"class":109},[103,107105,31606],{"class":113},[103,107107,26033],{"class":109},[103,107109,32433],{"class":162},[103,107111,114],{"class":113},[103,107113,106586],{"class":162},[103,107115,30776],{"class":113},[14,107117,107118,107119,107121,107122,107125],{},"循环 2000 步。这里没有用 ",[100,107120,1105],{},"，而是用 ",[100,107123,107124],{},"step","，因为后面要用当前步数计算时间。",[94,107127,107129],{"className":30368,"code":107128,"language":30370,"meta":24,"style":24},"t = step * model.opt.timestep\n",[100,107130,107131],{"__ignoreMap":24},[103,107132,107133,107136,107138,107140,107142],{"class":105,"line":106},[103,107134,107135],{"class":113},"t ",[103,107137,159],{"class":109},[103,107139,31606],{"class":113},[103,107141,568],{"class":109},[103,107143,106602],{"class":113},[14,107145,107146],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[94,107148,107149],{"className":30368,"code":106797,"language":30370,"meta":24,"style":24},[100,107150,107151],{"__ignoreMap":24},[103,107152,107153,107155,107157,107159,107161,107163,107165,107167,107169,107171,107173,107175,107177,107179],{"class":105,"line":106},[103,107154,105861],{"class":113},[103,107156,305],{"class":162},[103,107158,4432],{"class":113},[103,107160,159],{"class":109},[103,107162,106616],{"class":162},[103,107164,6508],{"class":109},[103,107166,106621],{"class":113},[103,107168,105250],{"class":162},[103,107170,6508],{"class":109},[103,107172,106628],{"class":113},[103,107174,568],{"class":109},[103,107176,61857],{"class":162},[103,107178,6508],{"class":109},[103,107180,106637],{"class":113},[14,107182,107183],{},"这行给电机输入一个正弦波。拆开看：",[57,107185,107186,107192,107198],{},[60,107187,107188,107191],{},[100,107189,107190],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[60,107193,107194,107197],{},[100,107195,107196],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[60,107199,107200,107203],{},[100,107201,107202],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107205,107206],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[94,107208,107210],{"className":30368,"code":107209,"language":30370,"meta":24,"style":24},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[100,107211,107212],{"__ignoreMap":24},[103,107213,107214,107216,107218,107220,107222,107224],{"class":105,"line":106},[103,107215,30405],{"class":162},[103,107217,114],{"class":113},[103,107219,106665],{"class":218},[103,107221,104920],{"class":113},[103,107223,406],{"class":162},[103,107225,30487],{"class":113},[14,107227,107228,107229,107231],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[100,107230,101060],{}," 只有一个数。",[45,107233,102306],{"id":102305},[14,107235,107236],{},"输出类似:",[94,107238,107241],{"className":107239,"code":107240,"language":5177,"meta":24},[5175],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[100,107242,107240],{"__ignoreMap":24},[14,107244,107245,107246,107248],{},"这里 ",[100,107247,106116],{}," 是电机输入。",[14,107250,107251,107254,107255,107258],{},[100,107252,107253],{},"joint qpos"," 是关节角度，单位通常是弧度。",[100,107256,107257],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107260,107261],{},"角度单位提示：",[94,107263,107266],{"className":107264,"code":107265,"language":5177,"meta":24},[5175],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[100,107267,107265],{"__ignoreMap":24},[14,107269,107270,107271,107273,107274,107276],{},"如果你看到 ",[100,107272,104020],{}," 是 ",[100,107275,35319],{},"，大约就是 28.6 度。",[45,107278,102338],{"id":102337},[57,107280,107281,107288,107291,107298,107301,107309,107317],{},[60,107282,102401,107283,102404,107285,28375],{},[100,107284,106301],{},[100,107286,107287],{},"gear=\"5\"",[60,107289,107290],{},"重新运行，观察关节运动是否更剧烈。",[60,107292,102401,107293,102404,107295,28375],{},[100,107294,105845],{},[100,107296,107297],{},"-0.2 0.2",[60,107299,107300],{},"重新运行，观察控制能力是否变弱。",[60,107302,107303,107304,107306,107307,28375],{},"去掉 actuator，确认 ",[100,107305,102148],{}," 变成 ",[100,107308,305],{},[60,107310,102401,107311,102404,107313,107316],{},[100,107312,106235],{},[100,107314,107315],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[60,107318,102401,107319,102404,107321,107324],{},[100,107320,106229],{},[100,107322,107323],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[45,107326,102443],{"id":102442},[74,107328,107330],{"id":107329},"indexerror-index-0-is-out-of-bounds",[100,107331,107332],{},"IndexError: index 0 is out of bounds",[14,107334,107335,107336,107338],{},"原因是 ",[100,107337,105982],{},"，没有 actuator。",[74,107340,107341],{"id":107341},"关节几乎不动",[14,107343,107344],{},"可能原因:",[57,107346,107347,107352,107356,107362],{},[60,107348,107349,107351],{},[100,107350,107057],{}," 太小",[60,107353,107354,107351],{},[100,107355,105845],{},[60,107357,107358,107361],{},[100,107359,107360],{},"damping"," 太大",[60,107363,107364],{},"重力方向导致运动不明显",[74,107366,107367],{"id":107367},"模型编译失败",[14,107369,107370,107371,107373],{},"检查 actuator 引用的 ",[100,107372,106292],{}," 是否存在，joint 名称是否拼写一致。",[74,107375,107377,107379],{"id":107376},"datactrl0-写了但没有效果",[100,107378,106116],{}," 写了但没有效果",[14,107381,102565],{},[57,107383,107384,107389,107392,107397,107402],{},[60,107385,107386,107388],{},[100,107387,102148],{}," 是否大于 0。",[60,107390,107391],{},"motor 是否引用了正确 joint。",[60,107393,107394,107396],{},[100,107395,107057],{}," 是否太小。",[60,107398,107399,107401],{},[100,107400,105845],{}," 是否把输入限制得太小。",[60,107403,107404],{},"body 是否真的有可动 joint。",[74,107406,107407],{"id":107407},"控制输入超过范围会怎样",[14,107409,107410],{},"如果设置了：",[94,107412,107414],{"className":53057,"code":107413,"language":53059,"meta":24,"style":24},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[100,107415,107416],{"__ignoreMap":24},[103,107417,107418],{"class":105,"line":106},[103,107419,107413],{"class":113},[14,107421,107422],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[94,107424,107426],{"className":30368,"code":107425,"language":30370,"meta":24,"style":24},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[100,107427,107428,107448],{"__ignoreMap":24},[103,107429,107430,107433,107435,107438,107440,107442,107444,107446],{"class":105,"line":106},[103,107431,107432],{"class":113},"action ",[103,107434,159],{"class":109},[103,107436,107437],{"class":113}," np.clip(action, ",[103,107439,645],{"class":109},[103,107441,105250],{"class":162},[103,107443,12425],{"class":113},[103,107445,105250],{"class":162},[103,107447,120],{"class":113},[103,107449,107450,107452,107454,107456,107458],{"class":105,"line":25},[103,107451,105861],{"class":113},[103,107453,305],{"class":162},[103,107455,4432],{"class":113},[103,107457,159],{"class":109},[103,107459,107460],{"class":113}," action\n",[45,107462,102597],{"id":102596},[14,107464,107465],{},"这一章建立了控制任务的基本形式：",[94,107467,107470],{"className":107468,"code":107469,"language":5177,"meta":24},[5175],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[100,107471,107469],{"__ignoreMap":24},[14,107473,107474],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5116,107476,107477],{},"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":24,"searchDepth":25,"depth":25,"links":107479},[107480,107481,107482,107487,107491,107492,107493,107501],{"id":100636,"depth":25,"text":100637},{"id":100759,"depth":25,"text":100760},{"id":101034,"depth":25,"text":101035,"children":107483},[107484,107485,107486],{"id":106123,"depth":1168,"text":106124},{"id":106173,"depth":1168,"text":106174},{"id":106239,"depth":1168,"text":106240},{"id":101242,"depth":25,"text":101243,"children":107488},[107489,107490],{"id":101562,"depth":1168,"text":101562},{"id":101698,"depth":1168,"text":101698},{"id":102305,"depth":25,"text":102306},{"id":102337,"depth":25,"text":102338},{"id":102442,"depth":25,"text":102443,"children":107494},[107495,107496,107497,107498,107500],{"id":107329,"depth":1168,"text":107332},{"id":107341,"depth":1168,"text":107341},{"id":107367,"depth":1168,"text":107367},{"id":107376,"depth":1168,"text":107499},"data.ctrl[0] 写了但没有效果",{"id":107407,"depth":1168,"text":107407},{"id":102596,"depth":25,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105811,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107508,"title":107509,"body":107510,"description":24,"extension":28,"meta":109419,"navigation":30,"path":109420,"seo":109421,"stem":109422,"__hash__":109423},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107511,"toc":109395},[107512,107515,107517,107520,107528,107531,107548,107551,107576,107579,107625,107627,107629,107684,107686,107705,107707,107750,107753,107770,107773,107789,107799,107806,107808,107811,107814,107848,107851,107899,107903,107906,107920,107929,107933,107936,107961,107964,107968,107981,107984,107990,107993,108008,108010,108013,108273,108275,108287,108290,108602,108604,108616,108618,108621,108636,108641,108644,108666,108669,108672,108706,108709,108713,108724,108727,108744,108747,108761,108768,108788,108795,108809,108812,108824,108839,108859,108862,108884,108887,108891,108906,108917,108932,108935,108965,108981,109010,109018,109042,109045,109063,109073,109085,109092,109101,109107,109116,109119,109121,109130,109133,109148,109150,109153,109164,109167,109178,109181,109199,109201,109218,109221,109249,109251,109255,109258,109288,109294,109297,109301,109309,109312,109314,109335,109338,109341,109357,109360,109376,109378,109381,109392],[10,107513,107509],{"id":107514},"_5viewer-可视化与-renderer-离屏渲染",[45,107516,100637],{"id":100636},[14,107518,107519],{},"本章掌握两类可视化方式:",[57,107521,107522,107525],{},[60,107523,107524],{},"交互式 viewer: 适合人工观察仿真",[60,107526,107527],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107529,107530],{},"使用官方接口:",[94,107532,107534],{"className":30368,"code":107533,"language":30370,"meta":24,"style":24},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[100,107535,107536,107543],{"__ignoreMap":24},[103,107537,107538,107540],{"class":105,"line":106},[103,107539,30382],{"class":109},[103,107541,107542],{"class":113}," mujoco.viewer\n",[103,107544,107545],{"class":105,"line":25},[103,107546,107547],{"class":113},"mujoco.viewer.launch_passive(model, data)\n",[14,107549,107550],{},"以及:",[94,107552,107554],{"className":30368,"code":107553,"language":30370,"meta":24,"style":24},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[100,107555,107556,107566],{"__ignoreMap":24},[103,107557,107558,107561,107563],{"class":105,"line":106},[103,107559,107560],{"class":113},"renderer ",[103,107562,159],{"class":109},[103,107564,107565],{"class":113}," mujoco.Renderer(model)\n",[103,107567,107568,107571,107573],{"class":105,"line":25},[103,107569,107570],{"class":113},"image ",[103,107572,159],{"class":109},[103,107574,107575],{"class":113}," renderer.render()\n",[14,107577,107578],{},"新手建议先理解二者区别：",[251,107580,107581,107597],{},[254,107582,107583],{},[257,107584,107585,107588,107591,107594],{},[260,107586,107587],{"align":23726},"工具",[260,107589,107590],{"align":23726},"用途",[260,107592,107593],{"align":23726},"是否打开窗口",[260,107595,107596],{"align":23726},"常见场景",[298,107598,107599,107612],{},[257,107600,107601,107604,107607,107609],{},[303,107602,107603],{"align":23726},"Viewer",[303,107605,107606],{"align":23726},"人眼实时观察仿真",[303,107608,104655],{"align":23726},[303,107610,107611],{"align":23726},"调试模型、看控制效果",[257,107613,107614,107617,107620,107622],{},[303,107615,107616],{"align":23726},"Renderer",[303,107618,107619],{"align":23726},"生成图像数组",[303,107621,104668],{"align":23726},[303,107623,107624],{"align":23726},"保存图片、训练视觉策略、服务器批量采集",[45,107626,100760],{"id":100759},[14,107628,100763],{},[94,107630,107632],{"className":23812,"code":107631,"language":23814,"meta":24,"style":24},"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",[100,107633,107634,107646,107656,107664,107672],{"__ignoreMap":24},[103,107635,107636,107638,107640,107642,107644],{"class":105,"line":106},[103,107637,24566],{"class":1952},[103,107639,26305],{"class":218},[103,107641,23824],{"class":218},[103,107643,26390],{"class":162},[103,107645,24668],{"class":162},[103,107647,107648,107650,107652,107654],{"class":105,"line":25},[103,107649,100798],{"class":218},[103,107651,100801],{"class":218},[103,107653,100804],{"class":218},[103,107655,24668],{"class":162},[103,107657,107658,107660,107662],{"class":105,"line":1168},[103,107659,100811],{"class":218},[103,107661,100814],{"class":218},[103,107663,24668],{"class":162},[103,107665,107666,107668,107670],{"class":105,"line":1183},[103,107667,100821],{"class":218},[103,107669,100824],{"class":218},[103,107671,24668],{"class":162},[103,107673,107674,107676,107678,107680,107682],{"class":105,"line":1189},[103,107675,100831],{"class":218},[103,107677,100834],{"class":218},[103,107679,100837],{"class":218},[103,107681,100840],{"class":218},[103,107683,102506],{"class":218},[14,107685,102809],{},[94,107687,107689],{"className":23812,"code":107688,"language":23814,"meta":24,"style":24},"pip install \"mujoco>=2.3\" numpy pillow\n",[100,107690,107691],{"__ignoreMap":24},[103,107692,107693,107695,107697,107699,107702],{"class":105,"line":106},[103,107694,23821],{"class":1952},[103,107696,23824],{"class":218},[103,107698,100920],{"class":218},[103,107700,107701],{"class":218}," numpy",[103,107703,107704],{"class":218}," pillow\n",[14,107706,102826],{},[94,107708,107710],{"className":23812,"code":107709,"language":23814,"meta":24,"style":24},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[100,107711,107712,107729,107738],{"__ignoreMap":24},[103,107713,107714,107716,107718,107720,107723,107725,107727],{"class":105,"line":106},[103,107715,30320],{"class":1952},[103,107717,29166],{"class":218},[103,107719,25105],{"class":162},[103,107721,107722],{"class":218}," mujoco-render",[103,107724,100965],{"class":218},[103,107726,100968],{"class":162},[103,107728,100971],{"class":162},[103,107730,107731,107733,107735],{"class":105,"line":25},[103,107732,30320],{"class":1952},[103,107734,100978],{"class":218},[103,107736,107737],{"class":218}," mujoco-render\n",[103,107739,107740,107742,107744,107746,107748],{"class":105,"line":1168},[103,107741,23821],{"class":1952},[103,107743,23824],{"class":218},[103,107745,100920],{"class":218},[103,107747,107701],{"class":218},[103,107749,107704],{"class":218},[14,107751,107752],{},"离屏渲染后端:",[94,107754,107756],{"className":23812,"code":107755,"language":23814,"meta":24,"style":24},"export MUJOCO_GL=egl\n",[100,107757,107758],{"__ignoreMap":24},[103,107759,107760,107762,107765,107767],{"class":105,"line":106},[103,107761,25032],{"class":109},[103,107763,107764],{"class":113}," MUJOCO_GL",[103,107766,159],{"class":109},[103,107768,107769],{"class":113},"egl\n",[14,107771,107772],{},"或:",[94,107774,107776],{"className":23812,"code":107775,"language":23814,"meta":24,"style":24},"export MUJOCO_GL=osmesa\n",[100,107777,107778],{"__ignoreMap":24},[103,107779,107780,107782,107784,107786],{"class":105,"line":106},[103,107781,25032],{"class":109},[103,107783,107764],{"class":113},[103,107785,159],{"class":109},[103,107787,107788],{"class":113},"osmesa\n",[14,107790,107791,107792,107795,107796,28375],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[100,107793,107794],{},"egl"," 失败，再尝试 ",[100,107797,107798],{},"osmesa",[14,107800,107801,107802,107805],{},"如果你在本机桌面环境运行，通常先不要设置 ",[100,107803,107804],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[45,107807,101035],{"id":101034},[14,107809,107810],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107812,107813],{},"典型 viewer 流程:",[94,107815,107817],{"className":30368,"code":107816,"language":30370,"meta":24,"style":24},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[100,107818,107819,107832,107839,107843],{"__ignoreMap":24},[103,107820,107821,107824,107827,107829],{"class":105,"line":106},[103,107822,107823],{"class":109},"with",[103,107825,107826],{"class":113}," mujoco.viewer.launch_passive(model, data) ",[103,107828,31373],{"class":109},[103,107830,107831],{"class":113}," viewer:\n",[103,107833,107834,107836],{"class":105,"line":25},[103,107835,2240],{"class":109},[103,107837,107838],{"class":113}," viewer.is_running():\n",[103,107840,107841],{"class":105,"line":1168},[103,107842,101506],{"class":113},[103,107844,107845],{"class":105,"line":1183},[103,107846,107847],{"class":113},"        viewer.sync()\n",[14,107849,107850],{},"典型 renderer 流程:",[94,107852,107854],{"className":30368,"code":107853,"language":30370,"meta":24,"style":24},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[100,107855,107856,107882,107886,107891],{"__ignoreMap":24},[103,107857,107858,107860,107862,107865,107867,107869,107871,107873,107875,107877,107880],{"class":105,"line":106},[103,107859,107560],{"class":113},[103,107861,159],{"class":109},[103,107863,107864],{"class":113}," mujoco.Renderer(model, ",[103,107866,24971],{"class":5206},[103,107868,159],{"class":109},[103,107870,42332],{"class":162},[103,107872,12425],{"class":113},[103,107874,24967],{"class":5206},[103,107876,159],{"class":109},[103,107878,107879],{"class":162},"640",[103,107881,120],{"class":113},[103,107883,107884],{"class":105,"line":25},[103,107885,104495],{"class":113},[103,107887,107888],{"class":105,"line":1168},[103,107889,107890],{"class":113},"renderer.update_scene(data)\n",[103,107892,107893,107895,107897],{"class":105,"line":1183},[103,107894,107570],{"class":113},[103,107896,159],{"class":109},[103,107898,107575],{"class":113},[74,107900,107902],{"id":107901},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107904,107905],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[94,107907,107909],{"className":30368,"code":107908,"language":30370,"meta":24,"style":24},"mujoco.mj_step(model, data)\nviewer.sync()\n",[100,107910,107911,107915],{"__ignoreMap":24},[103,107912,107913],{"class":105,"line":106},[103,107914,104495],{"class":113},[103,107916,107917],{"class":105,"line":25},[103,107918,107919],{"class":113},"viewer.sync()\n",[14,107921,107922,107924,107925,107928],{},[100,107923,101205],{}," 负责算物理，",[100,107926,107927],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[74,107930,107932],{"id":107931},"为什么要-sleep","为什么要 sleep",[14,107934,107935],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[94,107937,107939],{"className":30368,"code":107938,"language":30370,"meta":24,"style":24},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[100,107940,107941],{"__ignoreMap":24},[103,107942,107943,107946,107948,107951,107953,107956,107958],{"class":105,"line":106},[103,107944,107945],{"class":113},"sleep_time ",[103,107947,159],{"class":109},[103,107949,107950],{"class":113}," model.opt.timestep ",[103,107952,645],{"class":109},[103,107954,107955],{"class":113}," (time.time() ",[103,107957,645],{"class":109},[103,107959,107960],{"class":113}," step_start)\n",[14,107962,107963],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[74,107965,107967],{"id":107966},"renderer-输出是什么","renderer 输出是什么",[94,107969,107971],{"className":30368,"code":107970,"language":30370,"meta":24,"style":24},"image = renderer.render()\n",[100,107972,107973],{"__ignoreMap":24},[103,107974,107975,107977,107979],{"class":105,"line":106},[103,107976,107570],{"class":113},[103,107978,159],{"class":109},[103,107980,107575],{"class":113},[14,107982,107983],{},"得到的是 NumPy 数组，形状通常是：",[94,107985,107988],{"className":107986,"code":107987,"language":5177,"meta":24},[5175],"(height, width, 3)\n",[100,107989,107987],{"__ignoreMap":24},[14,107991,107992],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[94,107994,107996],{"className":30368,"code":107995,"language":30370,"meta":24,"style":24},"Image.fromarray(image).save(\"render_output.png\")\n",[100,107997,107998],{"__ignoreMap":24},[103,107999,108000,108003,108006],{"class":105,"line":106},[103,108001,108002],{"class":113},"Image.fromarray(image).save(",[103,108004,108005],{"class":218},"\"render_output.png\"",[103,108007,120],{"class":113},[45,108009,101243],{"id":101242},[14,108011,108012],{},"交互式 Viewer:",[94,108014,108016],{"className":30368,"code":108015,"language":30370,"meta":24,"style":24},"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",[100,108017,108018,108024,108028,108034,108040,108044,108048,108056,108061,108065,108069,108073,108078,108083,108087,108091,108095,108100,108104,108108,108112,108116,108120,108124,108136,108148,108156,108160,108170,108190,108200,108205,108210,108214,108231,108244,108249,108253,108257,108269],{"__ignoreMap":24},[103,108019,108020,108022],{"class":105,"line":106},[103,108021,30382],{"class":109},[103,108023,31819],{"class":113},[103,108025,108026],{"class":105,"line":25},[103,108027,2389],{"emptyLinePlaceholder":30},[103,108029,108030,108032],{"class":105,"line":1168},[103,108031,30382],{"class":109},[103,108033,101291],{"class":113},[103,108035,108036,108038],{"class":105,"line":1183},[103,108037,30382],{"class":109},[103,108039,107542],{"class":113},[103,108041,108042],{"class":105,"line":1189},[103,108043,2389],{"emptyLinePlaceholder":30},[103,108045,108046],{"class":105,"line":1203},[103,108047,2389],{"emptyLinePlaceholder":30},[103,108049,108050,108052,108054],{"class":105,"line":1209},[103,108051,101304],{"class":162},[103,108053,13554],{"class":109},[103,108055,101309],{"class":218},[103,108057,108058],{"class":105,"line":1300},[103,108059,108060],{"class":218},"\u003Cmujoco model=\"viewer_demo\">\n",[103,108062,108063],{"class":105,"line":1306},[103,108064,101319],{"class":218},[103,108066,108067],{"class":105,"line":1318},[103,108068,2389],{"emptyLinePlaceholder":30},[103,108070,108071],{"class":105,"line":1601},[103,108072,101328],{"class":218},[103,108074,108075],{"class":105,"line":1606},[103,108076,108077],{"class":218},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[103,108079,108080],{"class":105,"line":1612},[103,108081,108082],{"class":218},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[103,108084,108085],{"class":105,"line":1617},[103,108086,2389],{"emptyLinePlaceholder":30},[103,108088,108089],{"class":105,"line":1631},[103,108090,101342],{"class":218},[103,108092,108093],{"class":105,"line":1636},[103,108094,101347],{"class":218},[103,108096,108097],{"class":105,"line":1642},[103,108098,108099],{"class":218},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[103,108101,108102],{"class":105,"line":1663},[103,108103,101357],{"class":218},[103,108105,108106],{"class":105,"line":1668},[103,108107,101362],{"class":218},[103,108109,108110],{"class":105,"line":1682},[103,108111,101367],{"class":218},[103,108113,108114],{"class":105,"line":1687},[103,108115,95688],{"class":218},[103,108117,108118],{"class":105,"line":1716},[103,108119,2389],{"emptyLinePlaceholder":30},[103,108121,108122],{"class":105,"line":1721},[103,108123,2389],{"emptyLinePlaceholder":30},[103,108125,108126,108128,108130,108132,108134],{"class":105,"line":1738},[103,108127,31937],{"class":109},[103,108129,1962],{"class":1952},[103,108131,101388],{"class":113},[103,108133,95676],{"class":162},[103,108135,3728],{"class":113},[103,108137,108138,108140,108142,108144,108146],{"class":105,"line":1743},[103,108139,101397],{"class":113},[103,108141,159],{"class":109},[103,108143,101402],{"class":113},[103,108145,101304],{"class":162},[103,108147,120],{"class":113},[103,108149,108150,108152,108154],{"class":105,"line":1748},[103,108151,101411],{"class":113},[103,108153,159],{"class":109},[103,108155,101416],{"class":113},[103,108157,108158],{"class":105,"line":1753},[103,108159,2389],{"emptyLinePlaceholder":30},[103,108161,108162,108164,108166,108168],{"class":105,"line":1767},[103,108163,34168],{"class":109},[103,108165,107826],{"class":113},[103,108167,31373],{"class":109},[103,108169,107831],{"class":113},[103,108171,108172,108175,108178,108180,108183,108185,108188],{"class":105,"line":1772},[103,108173,108174],{"class":109},"        while",[103,108176,108177],{"class":113}," viewer.is_running() ",[103,108179,30452],{"class":109},[103,108181,108182],{"class":113}," data.time ",[103,108184,1023],{"class":109},[103,108186,108187],{"class":162}," 5.0",[103,108189,3728],{"class":113},[103,108191,108192,108195,108197],{"class":105,"line":2566},[103,108193,108194],{"class":113},"            step_start ",[103,108196,159],{"class":109},[103,108198,108199],{"class":113}," time.time()\n",[103,108201,108202],{"class":105,"line":2580},[103,108203,108204],{"class":113},"            mujoco.mj_step(model, data)\n",[103,108206,108207],{"class":105,"line":2588},[103,108208,108209],{"class":113},"            viewer.sync()\n",[103,108211,108212],{"class":105,"line":2593},[103,108213,2389],{"emptyLinePlaceholder":30},[103,108215,108216,108219,108221,108223,108225,108227,108229],{"class":105,"line":2599},[103,108217,108218],{"class":113},"            sleep_time ",[103,108220,159],{"class":109},[103,108222,107950],{"class":113},[103,108224,645],{"class":109},[103,108226,107955],{"class":113},[103,108228,645],{"class":109},[103,108230,107960],{"class":113},[103,108232,108233,108235,108238,108240,108242],{"class":105,"line":2605},[103,108234,4631],{"class":109},[103,108236,108237],{"class":113}," sleep_time ",[103,108239,1073],{"class":109},[103,108241,4082],{"class":162},[103,108243,3728],{"class":113},[103,108245,108246],{"class":105,"line":2610},[103,108247,108248],{"class":113},"                time.sleep(sleep_time)\n",[103,108250,108251],{"class":105,"line":7938},[103,108252,2389],{"emptyLinePlaceholder":30},[103,108254,108255],{"class":105,"line":7962},[103,108256,2389],{"emptyLinePlaceholder":30},[103,108258,108259,108261,108263,108265,108267],{"class":105,"line":7967},[103,108260,1520],{"class":109},[103,108262,31210],{"class":162},[103,108264,101549],{"class":109},[103,108266,101552],{"class":218},[103,108268,3728],{"class":113},[103,108270,108271],{"class":105,"line":7973},[103,108272,101559],{"class":113},[14,108274,103560],{},[94,108276,108278],{"className":23812,"code":108277,"language":23814,"meta":24,"style":24},"touch ch5_viewer.py\n",[100,108279,108280],{"__ignoreMap":24},[103,108281,108282,108284],{"class":105,"line":106},[103,108283,101273],{"class":1952},[103,108285,108286],{"class":218}," ch5_viewer.py\n",[14,108288,108289],{},"离屏 Renderer 保存图片:",[94,108291,108293],{"className":30368,"code":108292,"language":30370,"meta":24,"style":24},"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",[100,108294,108295,108307,108311,108317,108327,108331,108335,108343,108348,108352,108356,108360,108364,108369,108373,108377,108381,108385,108389,108393,108397,108401,108405,108409,108413,108425,108437,108445,108470,108474,108490,108494,108498,108513,108522,108526,108540,108545,108550,108554,108566,108578,108582,108586,108598],{"__ignoreMap":24},[103,108296,108297,108299,108302,108304],{"class":105,"line":106},[103,108298,30727],{"class":109},[103,108300,108301],{"class":113}," pathlib ",[103,108303,30382],{"class":109},[103,108305,108306],{"class":113}," Path\n",[103,108308,108309],{"class":105,"line":25},[103,108310,2389],{"emptyLinePlaceholder":30},[103,108312,108313,108315],{"class":105,"line":1168},[103,108314,30382],{"class":109},[103,108316,101291],{"class":113},[103,108318,108319,108321,108323,108325],{"class":105,"line":1183},[103,108320,30727],{"class":109},[103,108322,47253],{"class":162},[103,108324,47256],{"class":109},[103,108326,47259],{"class":113},[103,108328,108329],{"class":105,"line":1189},[103,108330,2389],{"emptyLinePlaceholder":30},[103,108332,108333],{"class":105,"line":1203},[103,108334,2389],{"emptyLinePlaceholder":30},[103,108336,108337,108339,108341],{"class":105,"line":1209},[103,108338,101304],{"class":162},[103,108340,13554],{"class":109},[103,108342,101309],{"class":218},[103,108344,108345],{"class":105,"line":1300},[103,108346,108347],{"class":218},"\u003Cmujoco model=\"renderer_demo\">\n",[103,108349,108350],{"class":105,"line":1306},[103,108351,101319],{"class":218},[103,108353,108354],{"class":105,"line":1318},[103,108355,2389],{"emptyLinePlaceholder":30},[103,108357,108358],{"class":105,"line":1601},[103,108359,101328],{"class":218},[103,108361,108362],{"class":105,"line":1606},[103,108363,108077],{"class":218},[103,108365,108366],{"class":105,"line":1612},[103,108367,108368],{"class":218},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[103,108370,108371],{"class":105,"line":1617},[103,108372,108082],{"class":218},[103,108374,108375],{"class":105,"line":1631},[103,108376,2389],{"emptyLinePlaceholder":30},[103,108378,108379],{"class":105,"line":1636},[103,108380,101342],{"class":218},[103,108382,108383],{"class":105,"line":1642},[103,108384,101347],{"class":218},[103,108386,108387],{"class":105,"line":1663},[103,108388,108099],{"class":218},[103,108390,108391],{"class":105,"line":1668},[103,108392,101357],{"class":218},[103,108394,108395],{"class":105,"line":1682},[103,108396,101362],{"class":218},[103,108398,108399],{"class":105,"line":1687},[103,108400,101367],{"class":218},[103,108402,108403],{"class":105,"line":1716},[103,108404,95688],{"class":218},[103,108406,108407],{"class":105,"line":1721},[103,108408,2389],{"emptyLinePlaceholder":30},[103,108410,108411],{"class":105,"line":1738},[103,108412,2389],{"emptyLinePlaceholder":30},[103,108414,108415,108417,108419,108421,108423],{"class":105,"line":1743},[103,108416,31937],{"class":109},[103,108418,1962],{"class":1952},[103,108420,101388],{"class":113},[103,108422,95676],{"class":162},[103,108424,3728],{"class":113},[103,108426,108427,108429,108431,108433,108435],{"class":105,"line":1748},[103,108428,101397],{"class":113},[103,108430,159],{"class":109},[103,108432,101402],{"class":113},[103,108434,101304],{"class":162},[103,108436,120],{"class":113},[103,108438,108439,108441,108443],{"class":105,"line":1753},[103,108440,101411],{"class":113},[103,108442,159],{"class":109},[103,108444,101416],{"class":113},[103,108446,108447,108450,108452,108454,108456,108458,108460,108462,108464,108466,108468],{"class":105,"line":1767},[103,108448,108449],{"class":113},"    renderer ",[103,108451,159],{"class":109},[103,108453,107864],{"class":113},[103,108455,24971],{"class":5206},[103,108457,159],{"class":109},[103,108459,42332],{"class":162},[103,108461,12425],{"class":113},[103,108463,24967],{"class":5206},[103,108465,159],{"class":109},[103,108467,107879],{"class":162},[103,108469,120],{"class":113},[103,108471,108472],{"class":105,"line":1772},[103,108473,2389],{"emptyLinePlaceholder":30},[103,108475,108476,108478,108480,108482,108484,108486,108488],{"class":105,"line":2566},[103,108477,3190],{"class":109},[103,108479,101491],{"class":113},[103,108481,26033],{"class":109},[103,108483,32433],{"class":162},[103,108485,114],{"class":113},[103,108487,424],{"class":162},[103,108489,30776],{"class":113},[103,108491,108492],{"class":105,"line":2580},[103,108493,101506],{"class":113},[103,108495,108496],{"class":105,"line":2588},[103,108497,2389],{"emptyLinePlaceholder":30},[103,108499,108500,108503,108506,108508,108511],{"class":105,"line":2593},[103,108501,108502],{"class":113},"    renderer.update_scene(data, ",[103,108504,108505],{"class":5206},"camera",[103,108507,159],{"class":109},[103,108509,108510],{"class":218},"\"fixed_camera\"",[103,108512,120],{"class":113},[103,108514,108515,108518,108520],{"class":105,"line":2599},[103,108516,108517],{"class":113},"    image ",[103,108519,159],{"class":109},[103,108521,107575],{"class":113},[103,108523,108524],{"class":105,"line":2605},[103,108525,2389],{"emptyLinePlaceholder":30},[103,108527,108528,108531,108533,108536,108538],{"class":105,"line":2610},[103,108529,108530],{"class":113},"    output_path ",[103,108532,159],{"class":109},[103,108534,108535],{"class":113}," Path(",[103,108537,108005],{"class":218},[103,108539,120],{"class":113},[103,108541,108542],{"class":105,"line":7938},[103,108543,108544],{"class":113},"    Image.fromarray(image).save(output_path)\n",[103,108546,108547],{"class":105,"line":7962},[103,108548,108549],{"class":113},"    renderer.close()\n",[103,108551,108552],{"class":105,"line":7967},[103,108553,2389],{"emptyLinePlaceholder":30},[103,108555,108556,108558,108560,108563],{"class":105,"line":7973},[103,108557,31289],{"class":162},[103,108559,114],{"class":113},[103,108561,108562],{"class":218},"\"saved:\"",[103,108564,108565],{"class":113},", output_path.resolve())\n",[103,108567,108568,108570,108572,108575],{"class":105,"line":8000},[103,108569,31289],{"class":162},[103,108571,114],{"class":113},[103,108573,108574],{"class":218},"\"image shape:\"",[103,108576,108577],{"class":113},", image.shape)\n",[103,108579,108580],{"class":105,"line":8005},[103,108581,2389],{"emptyLinePlaceholder":30},[103,108583,108584],{"class":105,"line":8011},[103,108585,2389],{"emptyLinePlaceholder":30},[103,108587,108588,108590,108592,108594,108596],{"class":105,"line":8023},[103,108589,1520],{"class":109},[103,108591,31210],{"class":162},[103,108593,101549],{"class":109},[103,108595,101552],{"class":218},[103,108597,3728],{"class":113},[103,108599,108600],{"class":105,"line":8035},[103,108601,101559],{"class":113},[14,108603,103560],{},[94,108605,108607],{"className":23812,"code":108606,"language":23814,"meta":24,"style":24},"touch ch5_renderer.py\n",[100,108608,108609],{"__ignoreMap":24},[103,108610,108611,108613],{"class":105,"line":106},[103,108612,101273],{"class":1952},[103,108614,108615],{"class":218}," ch5_renderer.py\n",[74,108617,101562],{"id":101562},[14,108619,108620],{},"viewer 上下文：",[94,108622,108624],{"className":30368,"code":108623,"language":30370,"meta":24,"style":24},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[100,108625,108626],{"__ignoreMap":24},[103,108627,108628,108630,108632,108634],{"class":105,"line":106},[103,108629,107823],{"class":109},[103,108631,107826],{"class":113},[103,108633,31373],{"class":109},[103,108635,107831],{"class":113},[14,108637,108638,108640],{},[100,108639,107823],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108642,108643],{},"窗口循环：",[94,108645,108647],{"className":30368,"code":108646,"language":30370,"meta":24,"style":24},"while viewer.is_running() and data.time \u003C 5.0:\n",[100,108648,108649],{"__ignoreMap":24},[103,108650,108651,108654,108656,108658,108660,108662,108664],{"class":105,"line":106},[103,108652,108653],{"class":109},"while",[103,108655,108177],{"class":113},[103,108657,30452],{"class":109},[103,108659,108182],{"class":113},[103,108661,1023],{"class":109},[103,108663,108187],{"class":162},[103,108665,3728],{"class":113},[14,108667,108668],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108670,108671],{},"固定相机：",[94,108673,108675],{"className":53057,"code":108674,"language":53059,"meta":24,"style":24},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[100,108676,108677],{"__ignoreMap":24},[103,108678,108679,108681,108683,108685,108687,108689,108691,108693,108696,108699,108701,108704],{"class":105,"line":106},[103,108680,1023],{"class":113},[103,108682,108505],{"class":51290},[103,108684,14910],{"class":1952},[103,108686,159],{"class":113},[103,108688,108510],{"class":218},[103,108690,101096],{"class":1952},[103,108692,159],{"class":113},[103,108694,108695],{"class":218},"\"1.5 -2.0 1.2\"",[103,108697,108698],{"class":1952}," xyaxes",[103,108700,159],{"class":113},[103,108702,108703],{"class":218},"\"1 0.75 0 0 0 1\"",[103,108705,101134],{"class":113},[14,108707,108708],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[74,108710,108712],{"id":108711},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[94,108714,108716],{"className":30368,"code":108715,"language":30370,"meta":24,"style":24},"import time\n",[100,108717,108718],{"__ignoreMap":24},[103,108719,108720,108722],{"class":105,"line":106},[103,108721,30382],{"class":109},[103,108723,31819],{"class":113},[14,108725,108726],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[94,108728,108730],{"className":30368,"code":108729,"language":30370,"meta":24,"style":24},"import mujoco\nimport mujoco.viewer\n",[100,108731,108732,108738],{"__ignoreMap":24},[103,108733,108734,108736],{"class":105,"line":106},[103,108735,30382],{"class":109},[103,108737,101291],{"class":113},[103,108739,108740,108742],{"class":105,"line":25},[103,108741,30382],{"class":109},[103,108743,107542],{"class":113},[14,108745,108746],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[94,108748,108749],{"className":30368,"code":108623,"language":30370,"meta":24,"style":24},[100,108750,108751],{"__ignoreMap":24},[103,108752,108753,108755,108757,108759],{"class":105,"line":106},[103,108754,107823],{"class":109},[103,108756,107826],{"class":113},[103,108758,31373],{"class":109},[103,108760,107831],{"class":113},[14,108762,108763,108764,108767],{},"打开一个 viewer 窗口。",[100,108765,108766],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[94,108769,108770],{"className":30368,"code":108646,"language":30370,"meta":24,"style":24},[100,108771,108772],{"__ignoreMap":24},[103,108773,108774,108776,108778,108780,108782,108784,108786],{"class":105,"line":106},[103,108775,108653],{"class":109},[103,108777,108177],{"class":113},[103,108779,30452],{"class":109},[103,108781,108182],{"class":113},[103,108783,1023],{"class":109},[103,108785,108187],{"class":162},[103,108787,3728],{"class":113},[14,108789,108790,108791,108794],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[100,108792,108793],{},"viewer.is_running()"," 会变成 false，循环结束。",[94,108796,108798],{"className":30368,"code":108797,"language":30370,"meta":24,"style":24},"step_start = time.time()\n",[100,108799,108800],{"__ignoreMap":24},[103,108801,108802,108805,108807],{"class":105,"line":106},[103,108803,108804],{"class":113},"step_start ",[103,108806,159],{"class":109},[103,108808,108199],{"class":113},[14,108810,108811],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[94,108813,108814],{"className":30368,"code":107908,"language":30370,"meta":24,"style":24},[100,108815,108816,108820],{"__ignoreMap":24},[103,108817,108818],{"class":105,"line":106},[103,108819,104495],{"class":113},[103,108821,108822],{"class":105,"line":25},[103,108823,107919],{"class":113},[14,108825,108826,108828,108829,108831,108832,108834,108835,108838],{},[100,108827,101205],{}," 推进物理仿真。",[100,108830,107927],{}," 把最新的 ",[100,108833,33391],{}," 同步到窗口里显示。没有 ",[100,108836,108837],{},"sync()","，窗口可能看不到最新状态。",[94,108840,108841],{"className":30368,"code":107938,"language":30370,"meta":24,"style":24},[100,108842,108843],{"__ignoreMap":24},[103,108844,108845,108847,108849,108851,108853,108855,108857],{"class":105,"line":106},[103,108846,107945],{"class":113},[103,108848,159],{"class":109},[103,108850,107950],{"class":113},[103,108852,645],{"class":109},[103,108854,107955],{"class":113},[103,108856,645],{"class":109},[103,108858,107960],{"class":113},[14,108860,108861],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[94,108863,108865],{"className":30368,"code":108864,"language":30370,"meta":24,"style":24},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[100,108866,108867,108879],{"__ignoreMap":24},[103,108868,108869,108871,108873,108875,108877],{"class":105,"line":106},[103,108870,1520],{"class":109},[103,108872,108237],{"class":113},[103,108874,1073],{"class":109},[103,108876,4082],{"class":162},[103,108878,3728],{"class":113},[103,108880,108881],{"class":105,"line":25},[103,108882,108883],{"class":113},"    time.sleep(sleep_time)\n",[14,108885,108886],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[74,108888,108890],{"id":108889},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[94,108892,108894],{"className":30368,"code":108893,"language":30370,"meta":24,"style":24},"from pathlib import Path\n",[100,108895,108896],{"__ignoreMap":24},[103,108897,108898,108900,108902,108904],{"class":105,"line":106},[103,108899,30727],{"class":109},[103,108901,108301],{"class":113},[103,108903,30382],{"class":109},[103,108905,108306],{"class":113},[14,108907,108908,108909,108912,108913,108916],{},"导入 ",[100,108910,108911],{},"Path","，用来处理文件路径。相比直接写字符串，",[100,108914,108915],{},"Path(\"render_output.png\")"," 更清晰。",[94,108918,108920],{"className":30368,"code":108919,"language":30370,"meta":24,"style":24},"from PIL import Image\n",[100,108921,108922],{"__ignoreMap":24},[103,108923,108924,108926,108928,108930],{"class":105,"line":106},[103,108925,30727],{"class":109},[103,108927,47253],{"class":162},[103,108929,47256],{"class":109},[103,108931,47259],{"class":113},[14,108933,108934],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[94,108936,108937],{"className":53057,"code":108674,"language":53059,"meta":24,"style":24},[100,108938,108939],{"__ignoreMap":24},[103,108940,108941,108943,108945,108947,108949,108951,108953,108955,108957,108959,108961,108963],{"class":105,"line":106},[103,108942,1023],{"class":113},[103,108944,108505],{"class":51290},[103,108946,14910],{"class":1952},[103,108948,159],{"class":113},[103,108950,108510],{"class":218},[103,108952,101096],{"class":1952},[103,108954,159],{"class":113},[103,108956,108695],{"class":218},[103,108958,108698],{"class":1952},[103,108960,159],{"class":113},[103,108962,108703],{"class":218},[103,108964,101134],{"class":113},[14,108966,108967,108968,108970,108971,108973,108974,108977,108978,108980],{},"定义一个相机。",[100,108969,79800],{}," 是相机名字。",[100,108972,104136],{}," 是相机在世界里的位置。",[100,108975,108976],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[100,108979,104136],{}," 来调视角。",[94,108982,108984],{"className":30368,"code":108983,"language":30370,"meta":24,"style":24},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[100,108985,108986],{"__ignoreMap":24},[103,108987,108988,108990,108992,108994,108996,108998,109000,109002,109004,109006,109008],{"class":105,"line":106},[103,108989,107560],{"class":113},[103,108991,159],{"class":109},[103,108993,107864],{"class":113},[103,108995,24971],{"class":5206},[103,108997,159],{"class":109},[103,108999,42332],{"class":162},[103,109001,12425],{"class":113},[103,109003,24967],{"class":5206},[103,109005,159],{"class":109},[103,109007,107879],{"class":162},[103,109009,120],{"class":113},[14,109011,109012,109013,101008,109015,109017],{},"创建离屏渲染器。",[100,109014,24971],{},[100,109016,24967],{}," 决定输出图片大小。",[94,109019,109020],{"className":30368,"code":101666,"language":30370,"meta":24,"style":24},[100,109021,109022,109038],{"__ignoreMap":24},[103,109023,109024,109026,109028,109030,109032,109034,109036],{"class":105,"line":106},[103,109025,3014],{"class":109},[103,109027,101491],{"class":113},[103,109029,26033],{"class":109},[103,109031,32433],{"class":162},[103,109033,114],{"class":113},[103,109035,424],{"class":162},[103,109037,30776],{"class":113},[103,109039,109040],{"class":105,"line":25},[103,109041,101689],{"class":113},[14,109043,109044],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[94,109046,109048],{"className":30368,"code":109047,"language":30370,"meta":24,"style":24},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[100,109049,109050],{"__ignoreMap":24},[103,109051,109052,109055,109057,109059,109061],{"class":105,"line":106},[103,109053,109054],{"class":113},"renderer.update_scene(data, ",[103,109056,108505],{"class":5206},[103,109058,159],{"class":109},[103,109060,108510],{"class":218},[103,109062,120],{"class":113},[14,109064,109065,109066,109068,109069,109072],{},"告诉 renderer：用当前 ",[100,109067,33391],{}," 的状态更新画面，并使用名为 ",[100,109070,109071],{},"fixed_camera"," 的相机视角。",[94,109074,109075],{"className":30368,"code":107970,"language":30370,"meta":24,"style":24},[100,109076,109077],{"__ignoreMap":24},[103,109078,109079,109081,109083],{"class":105,"line":106},[103,109080,107570],{"class":113},[103,109082,159],{"class":109},[103,109084,107575],{"class":113},[14,109086,109087,109088,109091],{},"真正渲染出图像。",[100,109089,109090],{},"image"," 是一个 NumPy 数组，不是文件。",[94,109093,109095],{"className":30368,"code":109094,"language":30370,"meta":24,"style":24},"Image.fromarray(image).save(output_path)\n",[100,109096,109097],{"__ignoreMap":24},[103,109098,109099],{"class":105,"line":106},[103,109100,109094],{"class":113},[14,109102,109103,109104,28375],{},"把数组转换成图片，并保存到 ",[100,109105,109106],{},"render_output.png",[94,109108,109110],{"className":30368,"code":109109,"language":30370,"meta":24,"style":24},"renderer.close()\n",[100,109111,109112],{"__ignoreMap":24},[103,109113,109114],{"class":105,"line":106},[103,109115,109109],{"class":113},[14,109117,109118],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[45,109120,102306],{"id":102305},[14,109122,109123,109124,109126,109127,28375],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[100,109125,109106],{},"，并输出图像数组形状，例如 ",[100,109128,109129],{},"(480, 640, 3)",[14,109131,109132],{},"如果图片里看不到方块，先检查：",[57,109134,109135,109138,109141],{},[60,109136,109137],{},"方块是否掉到相机视野外。",[60,109139,109140],{},"camera 位置是否合理。",[60,109142,109143,109144,109147],{},"是否在 ",[100,109145,109146],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[45,109149,102338],{"id":102337},[14,109151,109152],{},"运行 viewer:",[94,109154,109156],{"className":23812,"code":109155,"language":23814,"meta":24,"style":24},"python ch5_viewer.py\n",[100,109157,109158],{"__ignoreMap":24},[103,109159,109160,109162],{"class":105,"line":106},[103,109161,30370],{"class":1952},[103,109163,108286],{"class":218},[14,109165,109166],{},"运行 renderer:",[94,109168,109170],{"className":23812,"code":109169,"language":23814,"meta":24,"style":24},"python ch5_renderer.py\n",[100,109171,109172],{"__ignoreMap":24},[103,109173,109174,109176],{"class":105,"line":106},[103,109175,30370],{"class":1952},[103,109177,108615],{"class":218},[14,109179,109180],{},"如果在服务器上运行:",[94,109182,109184],{"className":23812,"code":109183,"language":23814,"meta":24,"style":24},"MUJOCO_GL=egl python ch5_renderer.py\n",[100,109185,109186],{"__ignoreMap":24},[103,109187,109188,109190,109192,109194,109197],{"class":105,"line":106},[103,109189,107804],{"class":113},[103,109191,159],{"class":109},[103,109193,107794],{"class":218},[103,109195,109196],{"class":1952}," python",[103,109198,108615],{"class":218},[14,109200,107772],{},[94,109202,109204],{"className":23812,"code":109203,"language":23814,"meta":24,"style":24},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[100,109205,109206],{"__ignoreMap":24},[103,109207,109208,109210,109212,109214,109216],{"class":105,"line":106},[103,109209,107804],{"class":113},[103,109211,159],{"class":109},[103,109213,107798],{"class":218},[103,109215,109196],{"class":1952},[103,109217,108615],{"class":218},[14,109219,109220],{},"再做几个练习：",[57,109222,109223,109230,109233,109239],{},[60,109224,109225,109226,109229],{},"把 renderer 分辨率改成 ",[100,109227,109228],{},"height=240, width=320","，观察输出 shape。",[60,109231,109232],{},"把方块颜色改成蓝色，重新保存图片。",[60,109234,109235,109236,109238],{},"把相机 ",[100,109237,104136],{}," 改远一点，观察画面中物体是否变小。",[60,109240,109241,109242,102404,109245,109248],{},"把 viewer 示例中的 ",[100,109243,109244],{},"data.time \u003C 5.0",[100,109246,109247],{},"data.time \u003C 20.0","，观察更长时间。",[45,109250,102443],{"id":102442},[74,109252,109254],{"id":109253},"viewer-窗口打不开","viewer 窗口打不开",[14,109256,109257],{},"安装:",[94,109259,109261],{"className":23812,"code":109260,"language":23814,"meta":24,"style":24},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[100,109262,109263],{"__ignoreMap":24},[103,109264,109265,109267,109269,109271,109273,109275,109277,109279,109281,109283,109285],{"class":105,"line":106},[103,109266,24566],{"class":1952},[103,109268,26305],{"class":218},[103,109270,23824],{"class":218},[103,109272,26390],{"class":162},[103,109274,102496],{"class":218},[103,109276,100824],{"class":218},[103,109278,102501],{"class":218},[103,109280,100837],{"class":218},[103,109282,100843],{"class":218},[103,109284,100834],{"class":218},[103,109286,109287],{"class":218}," libXinerama\n",[74,109289,109291],{"id":109290},"glfwerror",[100,109292,109293],{},"GLFWError",[14,109295,109296],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[74,109298,109300],{"id":109299},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109302,109303,109304,82529,109306,109308],{},"尝试 ",[100,109305,101027],{},[100,109307,101030],{},"。可能存在版本差异。",[74,109310,109311],{"id":109311},"保存图片是黑的",[14,109313,102565],{},[57,109315,109316,109319,109322,109332],{},[60,109317,109318],{},"XML 里是否有 light。",[60,109320,109321],{},"相机是否对着模型。",[60,109323,109324,109325,109328,109329,28375],{},"是否先 ",[100,109326,109327],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[100,109330,109331],{},"renderer.render()",[60,109333,109334],{},"物体是否已经掉出视野。",[74,109336,109337],{"id":109337},"远程服务器没有显示器",[14,109339,109340],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[94,109342,109343],{"className":23812,"code":109183,"language":23814,"meta":24,"style":24},[100,109344,109345],{"__ignoreMap":24},[103,109346,109347,109349,109351,109353,109355],{"class":105,"line":106},[103,109348,107804],{"class":113},[103,109350,159],{"class":109},[103,109352,107794],{"class":218},[103,109354,109196],{"class":1952},[103,109356,108615],{"class":218},[14,109358,109359],{},"如果 EGL 不可用，再尝试：",[94,109361,109362],{"className":23812,"code":109203,"language":23814,"meta":24,"style":24},[100,109363,109364],{"__ignoreMap":24},[103,109365,109366,109368,109370,109372,109374],{"class":105,"line":106},[103,109367,107804],{"class":113},[103,109369,159],{"class":109},[103,109371,107798],{"class":218},[103,109373,109196],{"class":1952},[103,109375,108615],{"class":218},[45,109377,102597],{"id":102596},[14,109379,109380],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[57,109382,109383,109386,109389],{},[60,109384,109385],{},"先用 viewer 看模型和控制是否正常。",[60,109387,109388],{},"再用 renderer 保存图片或构造视觉观测。",[60,109390,109391],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5116,109393,109394],{},"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":24,"searchDepth":25,"depth":25,"links":109396},[109397,109398,109399,109404,109409,109410,109411,109418],{"id":100636,"depth":25,"text":100637},{"id":100759,"depth":25,"text":100760},{"id":101034,"depth":25,"text":101035,"children":109400},[109401,109402,109403],{"id":107901,"depth":1168,"text":107902},{"id":107931,"depth":1168,"text":107932},{"id":107966,"depth":1168,"text":107967},{"id":101242,"depth":25,"text":101243,"children":109405},[109406,109407,109408],{"id":101562,"depth":1168,"text":101562},{"id":108711,"depth":1168,"text":108712},{"id":108889,"depth":1168,"text":108890},{"id":102305,"depth":25,"text":102306},{"id":102337,"depth":25,"text":102338},{"id":102442,"depth":25,"text":102443,"children":109412},[109413,109414,109415,109416,109417],{"id":109253,"depth":1168,"text":109254},{"id":109290,"depth":1168,"text":109293},{"id":109299,"depth":1168,"text":109300},{"id":109311,"depth":1168,"text":109311},{"id":109337,"depth":1168,"text":109337},{"id":102596,"depth":25,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107509,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109425,"title":109426,"body":109427,"description":24,"extension":28,"meta":111338,"navigation":30,"path":111339,"seo":111340,"stem":111341,"__hash__":111342},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109428,"toc":111314},[109429,109432,109434,109437,109439,109458,109461,109467,109470,109472,109474,109498,109500,109514,109516,109557,109559,109570,109572,109575,109581,109584,109618,109621,109653,109656,109688,109692,109695,109735,109738,109744,109747,109753,109757,109760,109766,109769,109773,109776,109816,109818,109831,109834,109836,110418,110420,110432,110435,110446,110448,110451,110470,110482,110485,110506,110509,110512,110555,110558,110561,110581,110588,110590,110608,110623,110626,110632,110635,110641,110658,110665,110696,110707,110741,110752,110769,110778,110786,110791,110805,110808,110829,110835,110849,110854,110884,110894,110919,110927,110950,110953,110969,110972,110980,110986,111008,111021,111042,111051,111090,111101,111103,111106,111112,111115,111118,111124,111127,111147,111150,111152,111191,111193,111196,111204,111207,111210,111237,111240,111250,111256,111259,111265,111267,111273,111277,111280,111282,111285,111309,111312],[10,109430,109426],{"id":109431},"_6控制任务cartpole",[45,109433,100637],{"id":100636},[14,109435,109436],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109438,104321],{},[57,109440,109441,109444,109446,109449,109452,109455],{},[60,109442,109443],{},"slide joint",[60,109445,106174],{},[60,109447,109448],{},"cart force actuator",[60,109450,109451],{},"状态观测",[60,109453,109454],{},"简单控制循环",[60,109456,109457],{},"reward 设计雏形",[14,109459,109460],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[94,109462,109465],{"className":109463,"code":109464,"language":5177,"meta":24},[5175],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[100,109466,109464],{"__ignoreMap":24},[14,109468,109469],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[45,109471,100760],{"id":100759},[14,109473,100763],{},[94,109475,109476],{"className":23812,"code":104378,"language":23814,"meta":24,"style":24},[100,109477,109478],{"__ignoreMap":24},[103,109479,109480,109482,109484,109486,109488,109490,109492,109494,109496],{"class":105,"line":106},[103,109481,24566],{"class":1952},[103,109483,26305],{"class":218},[103,109485,23824],{"class":218},[103,109487,26390],{"class":162},[103,109489,104393],{"class":218},[103,109491,100788],{"class":218},[103,109493,102491],{"class":218},[103,109495,100804],{"class":218},[103,109497,104402],{"class":218},[14,109499,102809],{},[94,109501,109502],{"className":23812,"code":100909,"language":23814,"meta":24,"style":24},[100,109503,109504],{"__ignoreMap":24},[103,109505,109506,109508,109510,109512],{"class":105,"line":106},[103,109507,23821],{"class":1952},[103,109509,23824],{"class":218},[103,109511,100920],{"class":218},[103,109513,100923],{"class":218},[14,109515,102826],{},[94,109517,109519],{"className":23812,"code":109518,"language":23814,"meta":24,"style":24},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[100,109520,109521,109538,109547],{"__ignoreMap":24},[103,109522,109523,109525,109527,109529,109532,109534,109536],{"class":105,"line":106},[103,109524,30320],{"class":1952},[103,109526,29166],{"class":218},[103,109528,25105],{"class":162},[103,109530,109531],{"class":218}," mujoco-cartpole",[103,109533,100965],{"class":218},[103,109535,100968],{"class":162},[103,109537,100971],{"class":162},[103,109539,109540,109542,109544],{"class":105,"line":25},[103,109541,30320],{"class":1952},[103,109543,100978],{"class":218},[103,109545,109546],{"class":218}," mujoco-cartpole\n",[103,109548,109549,109551,109553,109555],{"class":105,"line":1168},[103,109550,23821],{"class":1952},[103,109552,23824],{"class":218},[103,109554,100920],{"class":218},[103,109556,100923],{"class":218},[14,109558,100994],{},[57,109560,109561,109564,109567],{},[60,109562,109563],{},"本章不依赖 Gymnasium。",[60,109565,109566],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[60,109568,109569],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[45,109571,101035],{"id":101034},[14,109573,109574],{},"Cartpole 的模型结构:",[94,109576,109579],{"className":109577,"code":109578,"language":5177,"meta":24},[5175],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[100,109580,109578],{"__ignoreMap":24},[14,109582,109583],{},"小车通过 slide joint 左右移动:",[94,109585,109587],{"className":53057,"code":109586,"language":53059,"meta":24,"style":24},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[100,109588,109589],{"__ignoreMap":24},[103,109590,109591,109593,109595,109597,109599,109602,109604,109606,109609,109611,109613,109616],{"class":105,"line":106},[103,109592,1023],{"class":113},[103,109594,102946],{"class":51290},[103,109596,14910],{"class":1952},[103,109598,159],{"class":113},[103,109600,109601],{"class":218},"\"cart_x\"",[103,109603,53814],{"class":1952},[103,109605,159],{"class":113},[103,109607,109608],{"class":218},"\"slide\"",[103,109610,106018],{"class":1952},[103,109612,159],{"class":113},[103,109614,109615],{"class":218},"\"1 0 0\"",[103,109617,101134],{"class":113},[14,109619,109620],{},"杆子通过 hinge joint 旋转:",[94,109622,109624],{"className":53057,"code":109623,"language":53059,"meta":24,"style":24},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[100,109625,109626],{"__ignoreMap":24},[103,109627,109628,109630,109632,109634,109636,109639,109641,109643,109645,109647,109649,109651],{"class":105,"line":106},[103,109629,1023],{"class":113},[103,109631,102946],{"class":51290},[103,109633,14910],{"class":1952},[103,109635,159],{"class":113},[103,109637,109638],{"class":218},"\"pole_hinge\"",[103,109640,53814],{"class":1952},[103,109642,159],{"class":113},[103,109644,106009],{"class":218},[103,109646,106018],{"class":1952},[103,109648,159],{"class":113},[103,109650,106023],{"class":218},[103,109652,101134],{"class":113},[14,109654,109655],{},"控制力作用在小车 slide joint 上:",[94,109657,109659],{"className":53057,"code":109658,"language":53059,"meta":24,"style":24},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[100,109660,109661],{"__ignoreMap":24},[103,109662,109663,109665,109667,109669,109671,109674,109676,109678,109680,109682,109684,109686],{"class":105,"line":106},[103,109664,1023],{"class":113},[103,109666,106064],{"class":51290},[103,109668,14910],{"class":1952},[103,109670,159],{"class":113},[103,109672,109673],{"class":218},"\"cart_motor\"",[103,109675,106074],{"class":1952},[103,109677,159],{"class":113},[103,109679,109601],{"class":218},[103,109681,106081],{"class":1952},[103,109683,159],{"class":113},[103,109685,54306],{"class":218},[103,109687,101134],{"class":113},[74,109689,109691],{"id":109690},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109693,109694],{},"这个简化模型有两个关节：",[251,109696,109697,109708],{},[254,109698,109699],{},[257,109700,109701,109703,109705],{},[260,109702,102749],{"align":23726},[260,109704,23727],{"align":23726},[260,109706,109707],{"align":23726},"对应状态",[298,109709,109710,109723],{},[257,109711,109712,109717,109720],{},[303,109713,109714],{"align":23726},[100,109715,109716],{},"cart_x",[303,109718,109719],{"align":23726},"slide",[303,109721,109722],{"align":23726},"小车 x 位置",[257,109724,109725,109730,109732],{},[303,109726,109727],{"align":23726},[100,109728,109729],{},"pole_hinge",[303,109731,105830],{"align":23726},[303,109733,109734],{"align":23726},"杆子角度",[14,109736,109737],{},"所以：",[94,109739,109742],{"className":109740,"code":109741,"language":5177,"meta":24},[5175],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[100,109743,109741],{"__ignoreMap":24},[14,109745,109746],{},"把它们拼起来就是观测：",[94,109748,109751],{"className":109749,"code":109750,"language":5177,"meta":24},[5175],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[100,109752,109750],{"__ignoreMap":24},[74,109754,109756],{"id":109755},"action-是什么","action 是什么",[14,109758,109759],{},"本章只有一个 actuator：",[94,109761,109764],{"className":109762,"code":109763,"language":5177,"meta":24},[5175],"data.ctrl[0] = action\n",[100,109765,109763],{"__ignoreMap":24},[14,109767,109768],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[74,109770,109772],{"id":109771},"reward-是什么","reward 是什么",[14,109774,109775],{},"奖励函数：",[94,109777,109779],{"className":30368,"code":109778,"language":30370,"meta":24,"style":24},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[100,109780,109781],{"__ignoreMap":24},[103,109782,109783,109785,109788,109790,109792,109794,109797,109799,109802,109804,109806,109808,109811,109813],{"class":105,"line":106},[103,109784,17036],{"class":109},[103,109786,109787],{"class":162}," float",[103,109789,114],{"class":113},[103,109791,102393],{"class":162},[103,109793,52261],{"class":109},[103,109795,109796],{"class":162}," 0.1",[103,109798,6508],{"class":109},[103,109800,109801],{"class":113}," cart_x ",[103,109803,568],{"class":109},[103,109805,109801],{"class":113},[103,109807,645],{"class":109},[103,109809,109810],{"class":113}," pole_angle ",[103,109812,568],{"class":109},[103,109814,109815],{"class":113}," pole_angle)\n",[14,109817,106216],{},[57,109819,109820,109825,109828],{},[60,109821,109822,109823,28375],{},"基础奖励是 ",[100,109824,102393],{},[60,109826,109827],{},"小车离中心越远，扣分越多。",[60,109829,109830],{},"杆子角度越大，扣分越多。",[14,109832,109833],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[45,109835,101243],{"id":101242},[94,109837,109839],{"className":30368,"code":109838,"language":30370,"meta":24,"style":24},"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",[100,109840,109841,109847,109857,109861,109865,109873,109878,109882,109886,109890,109895,109899,109904,109909,109914,109918,109923,109928,109933,109937,109941,109945,109949,109953,109958,109962,109966,109970,109974,109978,109988,109995,109999,110003,110017,110031,110044,110074,110078,110082,110094,110106,110114,110118,110131,110135,110139,110148,110152,110168,110178,110191,110204,110208,110231,110249,110253,110265,110269,110273,110283,110293,110297,110313,110354,110358,110378,110394,110398,110402,110414],{"__ignoreMap":24},[103,109842,109843,109845],{"class":105,"line":106},[103,109844,30382],{"class":109},[103,109846,101291],{"class":113},[103,109848,109849,109851,109853,109855],{"class":105,"line":25},[103,109850,30382],{"class":109},[103,109852,31370],{"class":113},[103,109854,31373],{"class":109},[103,109856,31376],{"class":113},[103,109858,109859],{"class":105,"line":1168},[103,109860,2389],{"emptyLinePlaceholder":30},[103,109862,109863],{"class":105,"line":1183},[103,109864,2389],{"emptyLinePlaceholder":30},[103,109866,109867,109869,109871],{"class":105,"line":1189},[103,109868,101304],{"class":162},[103,109870,13554],{"class":109},[103,109872,101309],{"class":218},[103,109874,109875],{"class":105,"line":1203},[103,109876,109877],{"class":218},"\u003Cmujoco model=\"cartpole\">\n",[103,109879,109880],{"class":105,"line":1209},[103,109881,101319],{"class":218},[103,109883,109884],{"class":105,"line":1300},[103,109885,2389],{"emptyLinePlaceholder":30},[103,109887,109888],{"class":105,"line":1306},[103,109889,101328],{"class":218},[103,109891,109892],{"class":105,"line":1318},[103,109893,109894],{"class":218},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[103,109896,109897],{"class":105,"line":1601},[103,109898,2389],{"emptyLinePlaceholder":30},[103,109900,109901],{"class":105,"line":1606},[103,109902,109903],{"class":218},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[103,109905,109906],{"class":105,"line":1612},[103,109907,109908],{"class":218},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[103,109910,109911],{"class":105,"line":1617},[103,109912,109913],{"class":218},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[103,109915,109916],{"class":105,"line":1631},[103,109917,2389],{"emptyLinePlaceholder":30},[103,109919,109920],{"class":105,"line":1636},[103,109921,109922],{"class":218},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[103,109924,109925],{"class":105,"line":1642},[103,109926,109927],{"class":218},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[103,109929,109930],{"class":105,"line":1663},[103,109931,109932],{"class":218},"        \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",[103,109934,109935],{"class":105,"line":1668},[103,109936,106428],{"class":218},[103,109938,109939],{"class":105,"line":1682},[103,109940,101357],{"class":218},[103,109942,109943],{"class":105,"line":1687},[103,109944,101362],{"class":218},[103,109946,109947],{"class":105,"line":1716},[103,109948,2389],{"emptyLinePlaceholder":30},[103,109950,109951],{"class":105,"line":1721},[103,109952,106445],{"class":218},[103,109954,109955],{"class":105,"line":1738},[103,109956,109957],{"class":218},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[103,109959,109960],{"class":105,"line":1743},[103,109961,106455],{"class":218},[103,109963,109964],{"class":105,"line":1748},[103,109965,101367],{"class":218},[103,109967,109968],{"class":105,"line":1753},[103,109969,95688],{"class":218},[103,109971,109972],{"class":105,"line":1767},[103,109973,2389],{"emptyLinePlaceholder":30},[103,109975,109976],{"class":105,"line":1772},[103,109977,2389],{"emptyLinePlaceholder":30},[103,109979,109980,109982,109985],{"class":105,"line":2566},[103,109981,31937],{"class":109},[103,109983,109984],{"class":1952}," get_observation",[103,109986,109987],{"class":113},"(data: mujoco.MjData) -> np.ndarray:\n",[103,109989,109990,109992],{"class":105,"line":2580},[103,109991,4079],{"class":109},[103,109993,109994],{"class":113}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[103,109996,109997],{"class":105,"line":2588},[103,109998,2389],{"emptyLinePlaceholder":30},[103,110000,110001],{"class":105,"line":2593},[103,110002,2389],{"emptyLinePlaceholder":30},[103,110004,110005,110007,110010,110013,110015],{"class":105,"line":2599},[103,110006,31937],{"class":109},[103,110008,110009],{"class":1952}," compute_reward",[103,110011,110012],{"class":113},"(obs: np.ndarray) -> ",[103,110014,153],{"class":162},[103,110016,3728],{"class":113},[103,110018,110019,110022,110024,110027,110029],{"class":105,"line":2605},[103,110020,110021],{"class":113},"    cart_x ",[103,110023,159],{"class":109},[103,110025,110026],{"class":113}," obs[",[103,110028,305],{"class":162},[103,110030,33236],{"class":113},[103,110032,110033,110036,110038,110040,110042],{"class":105,"line":2610},[103,110034,110035],{"class":113},"    pole_angle ",[103,110037,159],{"class":109},[103,110039,110026],{"class":113},[103,110041,331],{"class":162},[103,110043,33236],{"class":113},[103,110045,110046,110048,110050,110052,110054,110056,110058,110060,110062,110064,110066,110068,110070,110072],{"class":105,"line":7938},[103,110047,4079],{"class":109},[103,110049,109787],{"class":162},[103,110051,114],{"class":113},[103,110053,102393],{"class":162},[103,110055,52261],{"class":109},[103,110057,109796],{"class":162},[103,110059,6508],{"class":109},[103,110061,109801],{"class":113},[103,110063,568],{"class":109},[103,110065,109801],{"class":113},[103,110067,645],{"class":109},[103,110069,109810],{"class":113},[103,110071,568],{"class":109},[103,110073,109815],{"class":113},[103,110075,110076],{"class":105,"line":7962},[103,110077,2389],{"emptyLinePlaceholder":30},[103,110079,110080],{"class":105,"line":7967},[103,110081,2389],{"emptyLinePlaceholder":30},[103,110083,110084,110086,110088,110090,110092],{"class":105,"line":7973},[103,110085,31937],{"class":109},[103,110087,1962],{"class":1952},[103,110089,101388],{"class":113},[103,110091,95676],{"class":162},[103,110093,3728],{"class":113},[103,110095,110096,110098,110100,110102,110104],{"class":105,"line":8000},[103,110097,101397],{"class":113},[103,110099,159],{"class":109},[103,110101,101402],{"class":113},[103,110103,101304],{"class":162},[103,110105,120],{"class":113},[103,110107,110108,110110,110112],{"class":105,"line":8005},[103,110109,101411],{"class":113},[103,110111,159],{"class":109},[103,110113,101416],{"class":113},[103,110115,110116],{"class":105,"line":8011},[103,110117,2389],{"emptyLinePlaceholder":30},[103,110119,110120,110122,110124,110126,110128],{"class":105,"line":8023},[103,110121,105059],{"class":113},[103,110123,331],{"class":162},[103,110125,4432],{"class":113},[103,110127,159],{"class":109},[103,110129,110130],{"class":162}," 0.1\n",[103,110132,110133],{"class":105,"line":8035},[103,110134,105072],{"class":113},[103,110136,110137],{"class":105,"line":8047},[103,110138,2389],{"emptyLinePlaceholder":30},[103,110140,110141,110144,110146],{"class":105,"line":9706},[103,110142,110143],{"class":113},"    total_reward ",[103,110145,159],{"class":109},[103,110147,104751],{"class":162},[103,110149,110150],{"class":105,"line":9731},[103,110151,2389],{"emptyLinePlaceholder":30},[103,110153,110154,110156,110158,110160,110162,110164,110166],{"class":105,"line":9754},[103,110155,3190],{"class":109},[103,110157,31606],{"class":113},[103,110159,26033],{"class":109},[103,110161,32433],{"class":162},[103,110163,114],{"class":113},[103,110165,6400],{"class":162},[103,110167,30776],{"class":113},[103,110169,110170,110173,110175],{"class":105,"line":9778},[103,110171,110172],{"class":113},"        obs ",[103,110174,159],{"class":109},[103,110176,110177],{"class":113}," get_observation(data)\n",[103,110179,110180,110183,110185,110187,110189],{"class":105,"line":9783},[103,110181,110182],{"class":113},"        pole_angle ",[103,110184,159],{"class":109},[103,110186,110026],{"class":113},[103,110188,331],{"class":162},[103,110190,33236],{"class":113},[103,110192,110193,110196,110198,110200,110202],{"class":105,"line":9788},[103,110194,110195],{"class":113},"        pole_angular_velocity ",[103,110197,159],{"class":109},[103,110199,110026],{"class":113},[103,110201,185],{"class":162},[103,110203,33236],{"class":113},[103,110205,110206],{"class":105,"line":9793},[103,110207,2389],{"emptyLinePlaceholder":30},[103,110209,110210,110213,110215,110218,110220,110222,110224,110226,110228],{"class":105,"line":9802},[103,110211,110212],{"class":113},"        action ",[103,110214,159],{"class":109},[103,110216,110217],{"class":162}," 2.0",[103,110219,6508],{"class":109},[103,110221,109810],{"class":113},[103,110223,594],{"class":109},[103,110225,61857],{"class":162},[103,110227,6508],{"class":109},[103,110229,110230],{"class":113}," pole_angular_velocity\n",[103,110232,110233,110235,110237,110239,110241,110243,110245,110247],{"class":105,"line":9807},[103,110234,110212],{"class":113},[103,110236,159],{"class":109},[103,110238,107437],{"class":113},[103,110240,645],{"class":109},[103,110242,102393],{"class":162},[103,110244,12425],{"class":113},[103,110246,102393],{"class":162},[103,110248,120],{"class":113},[103,110250,110251],{"class":105,"line":9813},[103,110252,2389],{"emptyLinePlaceholder":30},[103,110254,110255,110257,110259,110261,110263],{"class":105,"line":9834},[103,110256,106607],{"class":113},[103,110258,305],{"class":162},[103,110260,4432],{"class":113},[103,110262,159],{"class":109},[103,110264,107460],{"class":113},[103,110266,110267],{"class":105,"line":9840},[103,110268,101506],{"class":113},[103,110270,110271],{"class":105,"line":9854},[103,110272,2389],{"emptyLinePlaceholder":30},[103,110274,110275,110278,110280],{"class":105,"line":9860},[103,110276,110277],{"class":113},"        reward ",[103,110279,159],{"class":109},[103,110281,110282],{"class":113}," compute_reward(get_observation(data))\n",[103,110284,110285,110288,110290],{"class":105,"line":9887},[103,110286,110287],{"class":113},"        total_reward ",[103,110289,9467],{"class":109},[103,110291,110292],{"class":113}," reward\n",[103,110294,110295],{"class":105,"line":9896},[103,110296,2389],{"emptyLinePlaceholder":30},[103,110298,110299,110301,110303,110305,110307,110309,110311],{"class":105,"line":9902},[103,110300,2486],{"class":109},[103,110302,31606],{"class":113},[103,110304,441],{"class":109},[103,110306,5744],{"class":162},[103,110308,101549],{"class":109},[103,110310,4082],{"class":162},[103,110312,3728],{"class":113},[103,110314,110315,110317,110319,110322,110325,110328,110331,110333,110336,110339,110341,110343,110345,110347,110350,110352],{"class":105,"line":9910},[103,110316,34640],{"class":162},[103,110318,114],{"class":113},[103,110320,110321],{"class":218},"\"step:\"",[103,110323,110324],{"class":113},", step, ",[103,110326,110327],{"class":218},"\"obs:\"",[103,110329,110330],{"class":113},", np.round(obs, ",[103,110332,185],{"class":162},[103,110334,110335],{"class":113},"), ",[103,110337,110338],{"class":218},"\"action:\"",[103,110340,12425],{"class":113},[103,110342,32008],{"class":162},[103,110344,114],{"class":113},[103,110346,153],{"class":162},[103,110348,110349],{"class":113},"(action), ",[103,110351,185],{"class":162},[103,110353,30487],{"class":113},[103,110355,110356],{"class":105,"line":9915},[103,110357,2389],{"emptyLinePlaceholder":30},[103,110359,110360,110362,110364,110367,110369,110371,110374,110376],{"class":105,"line":16594},[103,110361,31289],{"class":162},[103,110363,114],{"class":113},[103,110365,110366],{"class":218},"\"total_reward:\"",[103,110368,12425],{"class":113},[103,110370,32008],{"class":162},[103,110372,110373],{"class":113},"(total_reward, ",[103,110375,185],{"class":162},[103,110377,30487],{"class":113},[103,110379,110380,110382,110384,110387,110390,110392],{"class":105,"line":16600},[103,110381,31289],{"class":162},[103,110383,114],{"class":113},[103,110385,110386],{"class":218},"\"final obs:\"",[103,110388,110389],{"class":113},", np.round(get_observation(data), ",[103,110391,185],{"class":162},[103,110393,30487],{"class":113},[103,110395,110396],{"class":105,"line":16623},[103,110397,2389],{"emptyLinePlaceholder":30},[103,110399,110400],{"class":105,"line":16629},[103,110401,2389],{"emptyLinePlaceholder":30},[103,110403,110404,110406,110408,110410,110412],{"class":105,"line":16652},[103,110405,1520],{"class":109},[103,110407,31210],{"class":162},[103,110409,101549],{"class":109},[103,110411,101552],{"class":218},[103,110413,3728],{"class":113},[103,110415,110416],{"class":105,"line":16666},[103,110417,101559],{"class":113},[14,110419,103560],{},[94,110421,110423],{"className":23812,"code":110422,"language":23814,"meta":24,"style":24},"touch ch6_cartpole.py\n",[100,110424,110425],{"__ignoreMap":24},[103,110426,110427,110429],{"class":105,"line":106},[103,110428,101273],{"class":1952},[103,110430,110431],{"class":218}," ch6_cartpole.py\n",[14,110433,110434],{},"运行：",[94,110436,110438],{"className":23812,"code":110437,"language":23814,"meta":24,"style":24},"python ch6_cartpole.py\n",[100,110439,110440],{"__ignoreMap":24},[103,110441,110442,110444],{"class":105,"line":106},[103,110443,30370],{"class":1952},[103,110445,110431],{"class":218},[74,110447,101562],{"id":101562},[14,110449,110450],{},"构造观测：",[94,110452,110454],{"className":30368,"code":110453,"language":30370,"meta":24,"style":24},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[100,110455,110456,110464],{"__ignoreMap":24},[103,110457,110458,110460,110462],{"class":105,"line":106},[103,110459,31937],{"class":109},[103,110461,109984],{"class":1952},[103,110463,109987],{"class":113},[103,110465,110466,110468],{"class":105,"line":25},[103,110467,4079],{"class":109},[103,110469,109994],{"class":113},[14,110471,110472,110475,110476,110478,110479,110481],{},[100,110473,110474],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[100,110477,104020],{}," 2 维，",[100,110480,104350],{}," 2 维，所以 obs 是 4 维。",[14,110483,110484],{},"设置初始角度：",[94,110486,110488],{"className":30368,"code":110487,"language":30370,"meta":24,"style":24},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[100,110489,110490,110502],{"__ignoreMap":24},[103,110491,110492,110494,110496,110498,110500],{"class":105,"line":106},[103,110493,104689],{"class":113},[103,110495,331],{"class":162},[103,110497,4432],{"class":113},[103,110499,159],{"class":109},[103,110501,110130],{"class":162},[103,110503,110504],{"class":105,"line":25},[103,110505,104533],{"class":113},[14,110507,110508],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110510,110511],{},"简单反馈控制：",[94,110513,110515],{"className":30368,"code":110514,"language":30370,"meta":24,"style":24},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[100,110516,110517,110537],{"__ignoreMap":24},[103,110518,110519,110521,110523,110525,110527,110529,110531,110533,110535],{"class":105,"line":106},[103,110520,107432],{"class":113},[103,110522,159],{"class":109},[103,110524,110217],{"class":162},[103,110526,6508],{"class":109},[103,110528,109810],{"class":113},[103,110530,594],{"class":109},[103,110532,61857],{"class":162},[103,110534,6508],{"class":109},[103,110536,110230],{"class":113},[103,110538,110539,110541,110543,110545,110547,110549,110551,110553],{"class":105,"line":25},[103,110540,107432],{"class":113},[103,110542,159],{"class":109},[103,110544,107437],{"class":113},[103,110546,645],{"class":109},[103,110548,102393],{"class":162},[103,110550,12425],{"class":113},[103,110552,102393],{"class":162},[103,110554,120],{"class":113},[14,110556,110557],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110559,110560],{},"限制动作：",[94,110562,110564],{"className":30368,"code":110563,"language":30370,"meta":24,"style":24},"np.clip(action, -1.0, 1.0)\n",[100,110565,110566],{"__ignoreMap":24},[103,110567,110568,110571,110573,110575,110577,110579],{"class":105,"line":106},[103,110569,110570],{"class":113},"np.clip(action, ",[103,110572,645],{"class":109},[103,110574,102393],{"class":162},[103,110576,12425],{"class":113},[103,110578,102393],{"class":162},[103,110580,120],{"class":113},[14,110582,110583,110584,110587],{},"因为 XML 里 ",[100,110585,110586],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[74,110589,101698],{"id":101698},[94,110591,110592],{"className":30368,"code":110453,"language":30370,"meta":24,"style":24},[100,110593,110594,110602],{"__ignoreMap":24},[103,110595,110596,110598,110600],{"class":105,"line":106},[103,110597,31937],{"class":109},[103,110599,109984],{"class":1952},[103,110601,109987],{"class":113},[103,110603,110604,110606],{"class":105,"line":25},[103,110605,4079],{"class":109},[103,110607,109994],{"class":113},[14,110609,110610,110611,110614,110615,110618,110619,110622],{},"这段定义了一个函数，用来获取当前观测。",[100,110612,110613],{},"data.qpos.copy()"," 是位置数组副本，",[100,110616,110617],{},"data.qvel.copy()"," 是速度数组副本。",[100,110620,110621],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110624,110625],{},"在本章模型里：",[94,110627,110630],{"className":110628,"code":110629,"language":5177,"meta":24},[5175],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[100,110631,110629],{"__ignoreMap":24},[14,110633,110634],{},"所以返回的 obs 是：",[94,110636,110639],{"className":110637,"code":110638,"language":5177,"meta":24},[5175],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[100,110640,110638],{"__ignoreMap":24},[94,110642,110644],{"className":30368,"code":110643,"language":30370,"meta":24,"style":24},"def compute_reward(obs: np.ndarray) -> float:\n",[100,110645,110646],{"__ignoreMap":24},[103,110647,110648,110650,110652,110654,110656],{"class":105,"line":106},[103,110649,31937],{"class":109},[103,110651,110009],{"class":1952},[103,110653,110012],{"class":113},[103,110655,153],{"class":162},[103,110657,3728],{"class":113},[14,110659,110660,110661,110664],{},"这行定义奖励函数。输入是观测 ",[100,110662,110663],{},"obs","，输出是一个浮点数奖励。",[94,110666,110668],{"className":30368,"code":110667,"language":30370,"meta":24,"style":24},"cart_x = obs[0]\npole_angle = obs[1]\n",[100,110669,110670,110683],{"__ignoreMap":24},[103,110671,110672,110675,110677,110679,110681],{"class":105,"line":106},[103,110673,110674],{"class":113},"cart_x ",[103,110676,159],{"class":109},[103,110678,110026],{"class":113},[103,110680,305],{"class":162},[103,110682,33236],{"class":113},[103,110684,110685,110688,110690,110692,110694],{"class":105,"line":25},[103,110686,110687],{"class":113},"pole_angle ",[103,110689,159],{"class":109},[103,110691,110026],{"class":113},[103,110693,331],{"class":162},[103,110695,33236],{"class":113},[14,110697,110698,110699,110702,110703,110706],{},"数组索引从 0 开始。",[100,110700,110701],{},"obs[0]"," 是第一个元素，也就是小车位置。",[100,110704,110705],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[94,110708,110709],{"className":30368,"code":109778,"language":30370,"meta":24,"style":24},[100,110710,110711],{"__ignoreMap":24},[103,110712,110713,110715,110717,110719,110721,110723,110725,110727,110729,110731,110733,110735,110737,110739],{"class":105,"line":106},[103,110714,17036],{"class":109},[103,110716,109787],{"class":162},[103,110718,114],{"class":113},[103,110720,102393],{"class":162},[103,110722,52261],{"class":109},[103,110724,109796],{"class":162},[103,110726,6508],{"class":109},[103,110728,109801],{"class":113},[103,110730,568],{"class":109},[103,110732,109801],{"class":113},[103,110734,645],{"class":109},[103,110736,109810],{"class":113},[103,110738,568],{"class":109},[103,110740,109815],{"class":113},[14,110742,110743,110744,110747,110748,110751],{},"这行计算奖励。",[100,110745,110746],{},"cart_x * cart_x"," 是小车位置的平方，",[100,110749,110750],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[94,110753,110755],{"className":30368,"code":110754,"language":30370,"meta":24,"style":24},"data.qpos[1] = 0.1\n",[100,110756,110757],{"__ignoreMap":24},[103,110758,110759,110761,110763,110765,110767],{"class":105,"line":106},[103,110760,104689],{"class":113},[103,110762,331],{"class":162},[103,110764,4432],{"class":113},[103,110766,159],{"class":109},[103,110768,110130],{"class":162},[14,110770,110771,110772,110774,110775,110777],{},"手动设置杆子的初始角度。因为 ",[100,110773,105446],{}," 是小车位置，",[100,110776,105449],{}," 是杆子角度，所以这里改的是杆子。",[94,110779,110780],{"className":30368,"code":104533,"language":30370,"meta":24,"style":24},[100,110781,110782],{"__ignoreMap":24},[103,110783,110784],{"class":105,"line":106},[103,110785,104533],{"class":113},[14,110787,105492,110788,110790],{},[100,110789,104020],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[94,110792,110794],{"className":30368,"code":110793,"language":30370,"meta":24,"style":24},"total_reward = 0.0\n",[100,110795,110796],{"__ignoreMap":24},[103,110797,110798,110801,110803],{"class":105,"line":106},[103,110799,110800],{"class":113},"total_reward ",[103,110802,159],{"class":109},[103,110804,104751],{"class":162},[14,110806,110807],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[94,110809,110811],{"className":30368,"code":110810,"language":30370,"meta":24,"style":24},"for step in range(1000):\n",[100,110812,110813],{"__ignoreMap":24},[103,110814,110815,110817,110819,110821,110823,110825,110827],{"class":105,"line":106},[103,110816,3014],{"class":109},[103,110818,31606],{"class":113},[103,110820,26033],{"class":109},[103,110822,32433],{"class":162},[103,110824,114],{"class":113},[103,110826,6400],{"class":162},[103,110828,30776],{"class":113},[14,110830,110831,110832,110834],{},"循环 1000 步。",[100,110833,107124],{}," 是当前步数，从 0 到 999。",[94,110836,110838],{"className":30368,"code":110837,"language":30370,"meta":24,"style":24},"obs = get_observation(data)\n",[100,110839,110840],{"__ignoreMap":24},[103,110841,110842,110845,110847],{"class":105,"line":106},[103,110843,110844],{"class":113},"obs ",[103,110846,159],{"class":109},[103,110848,110177],{"class":113},[14,110850,110851,110852,28375],{},"读取当前状态，保存到 ",[100,110853,110663],{},[94,110855,110857],{"className":30368,"code":110856,"language":30370,"meta":24,"style":24},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[100,110858,110859,110871],{"__ignoreMap":24},[103,110860,110861,110863,110865,110867,110869],{"class":105,"line":106},[103,110862,110687],{"class":113},[103,110864,159],{"class":109},[103,110866,110026],{"class":113},[103,110868,331],{"class":162},[103,110870,33236],{"class":113},[103,110872,110873,110876,110878,110880,110882],{"class":105,"line":25},[103,110874,110875],{"class":113},"pole_angular_velocity ",[103,110877,159],{"class":109},[103,110879,110026],{"class":113},[103,110881,185],{"class":162},[103,110883,33236],{"class":113},[14,110885,110886,110887,110890,110891,28375],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[100,110888,110889],{},"obs[3]","？因为 obs 的顺序是 ",[100,110892,110893],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[94,110895,110897],{"className":30368,"code":110896,"language":30370,"meta":24,"style":24},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[100,110898,110899],{"__ignoreMap":24},[103,110900,110901,110903,110905,110907,110909,110911,110913,110915,110917],{"class":105,"line":106},[103,110902,107432],{"class":113},[103,110904,159],{"class":109},[103,110906,110217],{"class":162},[103,110908,6508],{"class":109},[103,110910,109810],{"class":113},[103,110912,594],{"class":109},[103,110914,61857],{"class":162},[103,110916,6508],{"class":109},[103,110918,110230],{"class":113},[14,110920,110921,110922,101008,110924,110926],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[100,110923,105250],{},[100,110925,35319],{}," 是人为设置的系数，不是固定公式。",[94,110928,110930],{"className":30368,"code":110929,"language":30370,"meta":24,"style":24},"action = np.clip(action, -1.0, 1.0)\n",[100,110931,110932],{"__ignoreMap":24},[103,110933,110934,110936,110938,110940,110942,110944,110946,110948],{"class":105,"line":106},[103,110935,107432],{"class":113},[103,110937,159],{"class":109},[103,110939,107437],{"class":113},[103,110941,645],{"class":109},[103,110943,102393],{"class":162},[103,110945,12425],{"class":113},[103,110947,102393],{"class":162},[103,110949,120],{"class":113},[14,110951,110952],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[94,110954,110955],{"className":30368,"code":109763,"language":30370,"meta":24,"style":24},[100,110956,110957],{"__ignoreMap":24},[103,110958,110959,110961,110963,110965,110967],{"class":105,"line":106},[103,110960,105861],{"class":113},[103,110962,305],{"class":162},[103,110964,4432],{"class":113},[103,110966,159],{"class":109},[103,110968,107460],{"class":113},[14,110970,110971],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[94,110973,110974],{"className":30368,"code":104495,"language":30370,"meta":24,"style":24},[100,110975,110976],{"__ignoreMap":24},[103,110977,110978],{"class":105,"line":106},[103,110979,104495],{"class":113},[14,110981,110982,110983,110985],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[100,110984,106116],{}," 计算小车和杆子的下一刻状态。",[94,110987,110989],{"className":30368,"code":110988,"language":30370,"meta":24,"style":24},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[100,110990,110991,111000],{"__ignoreMap":24},[103,110992,110993,110996,110998],{"class":105,"line":106},[103,110994,110995],{"class":113},"reward ",[103,110997,159],{"class":109},[103,110999,110282],{"class":113},[103,111001,111002,111004,111006],{"class":105,"line":25},[103,111003,110800],{"class":113},[103,111005,9467],{"class":109},[103,111007,110292],{"class":113},[14,111009,111010,111011,111013,111014,111017,111018,28375],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[100,111012,9467],{}," 是简写，",[100,111015,111016],{},"total_reward += reward"," 等价于 ",[100,111019,111020],{},"total_reward = total_reward + reward",[94,111022,111024],{"className":30368,"code":111023,"language":30370,"meta":24,"style":24},"if step % 100 == 0:\n",[100,111025,111026],{"__ignoreMap":24},[103,111027,111028,111030,111032,111034,111036,111038,111040],{"class":105,"line":106},[103,111029,1520],{"class":109},[103,111031,31606],{"class":113},[103,111033,441],{"class":109},[103,111035,5744],{"class":162},[103,111037,101549],{"class":109},[103,111039,4082],{"class":162},[103,111041,3728],{"class":113},[14,111043,111044,111046,111047,111050],{},[100,111045,441],{}," 是取余数。",[100,111048,111049],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[94,111052,111054],{"className":30368,"code":111053,"language":30370,"meta":24,"style":24},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[100,111055,111056],{"__ignoreMap":24},[103,111057,111058,111060,111062,111064,111066,111068,111070,111072,111074,111076,111078,111080,111082,111084,111086,111088],{"class":105,"line":106},[103,111059,30405],{"class":162},[103,111061,114],{"class":113},[103,111063,110321],{"class":218},[103,111065,110324],{"class":113},[103,111067,110327],{"class":218},[103,111069,110330],{"class":113},[103,111071,185],{"class":162},[103,111073,110335],{"class":113},[103,111075,110338],{"class":218},[103,111077,12425],{"class":113},[103,111079,32008],{"class":162},[103,111081,114],{"class":113},[103,111083,153],{"class":162},[103,111085,110349],{"class":113},[103,111087,185],{"class":162},[103,111089,30487],{"class":113},[14,111091,111092,111093,111096,111097,111100],{},"打印当前步数、观测和动作。",[100,111094,111095],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[100,111098,111099],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[45,111102,102306],{"id":102305},[14,111104,111105],{},"观测向量:",[94,111107,111110],{"className":111108,"code":111109,"language":5177,"meta":24},[5175],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[100,111111,111109],{"__ignoreMap":24},[14,111113,111114],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111116,111117],{},"每隔 100 步会打印一次：",[94,111119,111122],{"className":111120,"code":111121,"language":5177,"meta":24},[5175],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[100,111123,111121],{"__ignoreMap":24},[14,111125,111126],{},"重点观察：",[57,111128,111129,111135,111140],{},[60,111130,111131,111134],{},[100,111132,111133],{},"pole_angle"," 是否越来越大。",[60,111136,111137,111139],{},[100,111138,109716],{}," 是否跑得太远。",[60,111141,111142,111143,82529,111145,28375],{},"action 是否经常被 clip 到 ",[100,111144,103905],{},[100,111146,331],{},[14,111148,111149],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[45,111151,102338],{"id":102337},[57,111153,111154,111160,111163,111169,111179,111185,111188],{},[60,111155,111156,111157,28375],{},"把初始角度改为 ",[100,111158,111159],{},"data.qpos[1] = 0.3",[60,111161,111162],{},"重新运行，观察控制是否变差。",[60,111164,111165,111166,111168],{},"把 actuator ",[100,111167,107057],{}," 改小。",[60,111170,111171,111172,111175,111176,28375],{},"打印 ",[100,111173,111174],{},"model.nq, model.nv, model.nu","，应为 ",[100,111177,111178],{},"2 2 1",[60,111180,111181,111182,111184],{},"把 reward 里的 ",[100,111183,110750],{}," 系数改大，观察总奖励变化。",[60,111186,111187],{},"把控制器改成反号，观察杆子是否更容易倒。",[60,111189,111190],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[45,111192,102443],{"id":102442},[74,111194,111195],{"id":111195},"杆子方向和预期不一致",[14,111197,102386,111198,111200,111201,111203],{},[100,111199,106229],{}," 和 capsule 的 ",[100,111202,103166],{},"，必要时用 viewer 可视化确认。",[74,111205,111206],{"id":111206},"控制器越控越倒",[14,111208,111209],{},"说明反馈符号可能反了，尝试:",[94,111211,111213],{"className":30368,"code":111212,"language":30370,"meta":24,"style":24},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[100,111214,111215],{"__ignoreMap":24},[103,111216,111217,111219,111221,111223,111225,111227,111229,111231,111233,111235],{"class":105,"line":106},[103,111218,107432],{"class":113},[103,111220,159],{"class":109},[103,111222,52261],{"class":109},[103,111224,105250],{"class":162},[103,111226,6508],{"class":109},[103,111228,109810],{"class":113},[103,111230,645],{"class":109},[103,111232,61857],{"class":162},[103,111234,6508],{"class":109},[103,111236,110230],{"class":113},[74,111238,111239],{"id":111239},"小车飞走",[14,111241,111242,111243,111245,111246,111249],{},"降低 ",[100,111244,107057],{}," 或缩小 ",[100,111247,111248],{},"action"," 的 clip 范围。",[74,111251,111253,111255],{"id":111252},"obs3-为什么是杆子角速度",[100,111254,110889],{}," 为什么是杆子角速度",[14,111257,111258],{},"因为这个模型里：",[94,111260,111263],{"className":111261,"code":111262,"language":5177,"meta":24},[5175],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[100,111264,111262],{"__ignoreMap":24},[14,111266,109737],{},[94,111268,111271],{"className":111269,"code":111270,"language":5177,"meta":24},[5175],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[100,111272,111270],{"__ignoreMap":24},[74,111274,111276],{"id":111275},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111278,111279],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[45,111281,102597],{"id":102596},[14,111283,111284],{},"一个控制任务通常包含：",[57,111286,111287,111290,111298,111303,111306],{},[60,111288,111289],{},"模型：Cartpole 的 body、joint、actuator。",[60,111291,111292,111293,326,111295,111297],{},"观测：从 ",[100,111294,104020],{},[100,111296,104350],{}," 里取状态。",[60,111299,111300,111301,28375],{},"动作：写入 ",[100,111302,101066],{},[60,111304,111305],{},"奖励：根据任务目标打分。",[60,111307,111308],{},"循环：obs -> action -> step -> reward。",[14,111310,111311],{},"这就是后面 Gymnasium 环境的基本骨架。",[5116,111313,104276],{},{"title":24,"searchDepth":25,"depth":25,"links":111315},[111316,111317,111318,111323,111327,111328,111329,111337],{"id":100636,"depth":25,"text":100637},{"id":100759,"depth":25,"text":100760},{"id":101034,"depth":25,"text":101035,"children":111319},[111320,111321,111322],{"id":109690,"depth":1168,"text":109691},{"id":109755,"depth":1168,"text":109756},{"id":109771,"depth":1168,"text":109772},{"id":101242,"depth":25,"text":101243,"children":111324},[111325,111326],{"id":101562,"depth":1168,"text":101562},{"id":101698,"depth":1168,"text":101698},{"id":102305,"depth":25,"text":102306},{"id":102337,"depth":25,"text":102338},{"id":102442,"depth":25,"text":102443,"children":111330},[111331,111332,111333,111334,111336],{"id":111195,"depth":1168,"text":111195},{"id":111206,"depth":1168,"text":111206},{"id":111239,"depth":1168,"text":111239},{"id":111252,"depth":1168,"text":111335},"obs[3] 为什么是杆子角速度",{"id":111275,"depth":1168,"text":111276},{"id":102596,"depth":25,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109426,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111344,"title":111345,"body":111346,"description":24,"extension":28,"meta":113360,"navigation":30,"path":113361,"seo":113362,"stem":113363,"__hash__":113364},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111347,"toc":113336},[111348,111351,111353,111356,111358,111375,111378,111381,111387,111390,111392,111394,111418,111420,111434,111436,111477,111479,111497,111499,111502,111508,111511,111539,111543,111549,111574,111577,111608,111615,111618,111621,111627,111630,111636,111639,111645,111649,111652,111677,111680,111682,112442,112444,112456,112458,112469,112471,112474,112491,112494,112496,112507,112510,112512,112558,112561,112574,112577,112659,112662,112664,112680,112690,112703,112706,112745,112755,112766,112776,112789,112792,112821,112824,112834,112837,112843,112860,112871,112873,112879,112896,112907,112928,112931,112943,112946,112967,112970,112978,112986,113003,113006,113075,113082,113090,113093,113106,113113,113115,113118,113124,113127,113130,113136,113142,113144,113184,113186,113192,113201,113204,113206,113226,113229,113232,113238,113242,113244,113271,113274,113277,113304,113310,113313,113316,113318,113321,113324,113330,113333],[10,111349,111345],{"id":111350},"_7控制任务reacher-机械臂到达目标",[45,111352,100637],{"id":100636},[14,111354,111355],{},"本章搭建一个二维两关节 reacher 任务。",[14,111357,104321],{},[57,111359,111360,111363,111366,111369,111372],{},[60,111361,111362],{},"两个 hinge joint",[60,111364,111365],{},"两个 motor actuator",[60,111367,111368],{},"site 作为末端点和目标点",[60,111370,111371],{},"根据末端和目标距离设计 reward",[60,111373,111374],{},"构造机械臂任务的基本形式",[14,111376,111377],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111379,111380],{},"Reacher 任务可以理解为：",[94,111382,111385],{"className":111383,"code":111384,"language":5177,"meta":24},[5175],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[100,111386,111384],{"__ignoreMap":24},[14,111388,111389],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[45,111391,100760],{"id":100759},[14,111393,100763],{},[94,111395,111396],{"className":23812,"code":104378,"language":23814,"meta":24,"style":24},[100,111397,111398],{"__ignoreMap":24},[103,111399,111400,111402,111404,111406,111408,111410,111412,111414,111416],{"class":105,"line":106},[103,111401,24566],{"class":1952},[103,111403,26305],{"class":218},[103,111405,23824],{"class":218},[103,111407,26390],{"class":162},[103,111409,104393],{"class":218},[103,111411,100788],{"class":218},[103,111413,102491],{"class":218},[103,111415,100804],{"class":218},[103,111417,104402],{"class":218},[14,111419,102809],{},[94,111421,111422],{"className":23812,"code":100909,"language":23814,"meta":24,"style":24},[100,111423,111424],{"__ignoreMap":24},[103,111425,111426,111428,111430,111432],{"class":105,"line":106},[103,111427,23821],{"class":1952},[103,111429,23824],{"class":218},[103,111431,100920],{"class":218},[103,111433,100923],{"class":218},[14,111435,102826],{},[94,111437,111439],{"className":23812,"code":111438,"language":23814,"meta":24,"style":24},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[100,111440,111441,111458,111467],{"__ignoreMap":24},[103,111442,111443,111445,111447,111449,111452,111454,111456],{"class":105,"line":106},[103,111444,30320],{"class":1952},[103,111446,29166],{"class":218},[103,111448,25105],{"class":162},[103,111450,111451],{"class":218}," mujoco-reacher",[103,111453,100965],{"class":218},[103,111455,100968],{"class":162},[103,111457,100971],{"class":162},[103,111459,111460,111462,111464],{"class":105,"line":25},[103,111461,30320],{"class":1952},[103,111463,100978],{"class":218},[103,111465,111466],{"class":218}," mujoco-reacher\n",[103,111468,111469,111471,111473,111475],{"class":105,"line":1168},[103,111470,23821],{"class":1952},[103,111472,23824],{"class":218},[103,111474,100920],{"class":218},[103,111476,100923],{"class":218},[14,111478,100994],{},[57,111480,111481,111484,111487],{},[60,111482,111483],{},"本章使用低维状态，不使用图像输入。",[60,111485,111486],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[60,111488,111489,111490,326,111492,326,111494,111496],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[100,111491,104020],{},[100,111493,104350],{},[100,111495,103670],{}," 的方法一致。",[45,111498,101035],{"id":101034},[14,111500,111501],{},"Reacher 任务核心:",[94,111503,111506],{"className":111504,"code":111505,"language":5177,"meta":24},[5175],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[100,111507,111505],{"__ignoreMap":24},[14,111509,111510],{},"读取 site 世界坐标:",[94,111512,111514],{"className":30368,"code":111513,"language":30370,"meta":24,"style":24},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[100,111515,111516,111529],{"__ignoreMap":24},[103,111517,111518,111520,111522,111524,111527],{"class":105,"line":106},[103,111519,103624],{"class":113},[103,111521,159],{"class":109},[103,111523,103395],{"class":113},[103,111525,111526],{"class":218},"\"tip\"",[103,111528,120],{"class":113},[103,111530,111531,111534,111536],{"class":105,"line":25},[103,111532,111533],{"class":113},"tip_pos ",[103,111535,159],{"class":109},[103,111537,111538],{"class":113}," data.site_xpos[site_id]\n",[74,111540,111542],{"id":111541},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111544,111545,111546,111548],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[100,111547,104020],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[94,111550,111552],{"className":30368,"code":111551,"language":30370,"meta":24,"style":24},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[100,111553,111554,111564],{"__ignoreMap":24},[103,111555,111556,111559,111561],{"class":105,"line":106},[103,111557,111558],{"class":113},"tip ",[103,111560,159],{"class":109},[103,111562,111563],{"class":113}," data.site_xpos[tip_site_id]\n",[103,111565,111566,111569,111571],{"class":105,"line":25},[103,111567,111568],{"class":113},"target ",[103,111570,159],{"class":109},[103,111572,111573],{"class":113}," data.site_xpos[target_site_id]\n",[14,111575,111576],{},"这样 reward 就很容易写：",[94,111578,111580],{"className":30368,"code":111579,"language":30370,"meta":24,"style":24},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[100,111581,111582,111597],{"__ignoreMap":24},[103,111583,111584,111587,111589,111592,111594],{"class":105,"line":106},[103,111585,111586],{"class":113},"dist ",[103,111588,159],{"class":109},[103,111590,111591],{"class":113}," np.linalg.norm(tip ",[103,111593,645],{"class":109},[103,111595,111596],{"class":113}," target)\n",[103,111598,111599,111601,111603,111605],{"class":105,"line":25},[103,111600,110995],{"class":113},[103,111602,159],{"class":109},[103,111604,52261],{"class":109},[103,111606,111607],{"class":113},"dist\n",[14,111609,111610,111611,111614],{},"距离越小，",[100,111612,111613],{},"-dist"," 越接近 0，奖励越高。",[74,111616,111617],{"id":111617},"两关节机械臂的状态",[14,111619,111620],{},"这个模型有两个 hinge joint：",[94,111622,111625],{"className":111623,"code":111624,"language":5177,"meta":24},[5175],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[100,111626,111624],{"__ignoreMap":24},[14,111628,111629],{},"再加上末端和目标位置：",[94,111631,111634],{"className":111632,"code":111633,"language":5177,"meta":24},[5175],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[100,111635,111633],{"__ignoreMap":24},[14,111637,111638],{},"总维度：",[94,111640,111643],{"className":111641,"code":111642,"language":5177,"meta":24},[5175],"2 + 2 + 3 + 3 = 10\n",[100,111644,111642],{"__ignoreMap":24},[74,111646,111648],{"id":111647},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111650,111651],{},"本章把重力设为：",[94,111653,111655],{"className":53057,"code":111654,"language":53059,"meta":24,"style":24},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[100,111656,111657],{"__ignoreMap":24},[103,111658,111659,111661,111663,111665,111667,111669,111671,111673,111675],{"class":105,"line":106},[103,111660,1023],{"class":113},[103,111662,69156],{"class":51290},[103,111664,101184],{"class":1952},[103,111666,159],{"class":113},[103,111668,101189],{"class":218},[103,111670,101192],{"class":1952},[103,111672,159],{"class":113},[103,111674,103761],{"class":218},[103,111676,101134],{"class":113},[14,111678,111679],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[45,111681,101243],{"id":101242},[94,111683,111685],{"className":30368,"code":111684,"language":30370,"meta":24,"style":24},"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",[100,111686,111687,111693,111703,111707,111711,111719,111724,111729,111733,111737,111742,111747,111751,111756,111761,111766,111770,111775,111780,111785,111790,111794,111798,111802,111806,111810,111815,111820,111824,111828,111832,111836,111840,111855,111864,111876,111899,111906,111910,111914,111924,111938,111952,111959,111963,111967,111981,111993,112005,112018,112033,112050,112054,112058,112070,112082,112090,112098,112102,112118,112123,112136,112149,112164,112168,112203,112235,112239,112243,112252,112256,112272,112282,112293,112309,112325,112341,112357,112361,112379,112399,112418,112422,112426,112438],{"__ignoreMap":24},[103,111688,111689,111691],{"class":105,"line":106},[103,111690,30382],{"class":109},[103,111692,101291],{"class":113},[103,111694,111695,111697,111699,111701],{"class":105,"line":25},[103,111696,30382],{"class":109},[103,111698,31370],{"class":113},[103,111700,31373],{"class":109},[103,111702,31376],{"class":113},[103,111704,111705],{"class":105,"line":1168},[103,111706,2389],{"emptyLinePlaceholder":30},[103,111708,111709],{"class":105,"line":1183},[103,111710,2389],{"emptyLinePlaceholder":30},[103,111712,111713,111715,111717],{"class":105,"line":1189},[103,111714,101304],{"class":162},[103,111716,13554],{"class":109},[103,111718,101309],{"class":218},[103,111720,111721],{"class":105,"line":1203},[103,111722,111723],{"class":218},"\u003Cmujoco model=\"two_link_reacher\">\n",[103,111725,111726],{"class":105,"line":1209},[103,111727,111728],{"class":218},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[103,111730,111731],{"class":105,"line":1300},[103,111732,2389],{"emptyLinePlaceholder":30},[103,111734,111735],{"class":105,"line":1306},[103,111736,101328],{"class":218},[103,111738,111739],{"class":105,"line":1318},[103,111740,111741],{"class":218},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[103,111743,111744],{"class":105,"line":1601},[103,111745,111746],{"class":218},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[103,111748,111749],{"class":105,"line":1606},[103,111750,2389],{"emptyLinePlaceholder":30},[103,111752,111753],{"class":105,"line":1612},[103,111754,111755],{"class":218},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[103,111757,111758],{"class":105,"line":1617},[103,111759,111760],{"class":218},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[103,111762,111763],{"class":105,"line":1631},[103,111764,111765],{"class":218},"      \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",[103,111767,111768],{"class":105,"line":1636},[103,111769,2389],{"emptyLinePlaceholder":30},[103,111771,111772],{"class":105,"line":1642},[103,111773,111774],{"class":218},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[103,111776,111777],{"class":105,"line":1663},[103,111778,111779],{"class":218},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[103,111781,111782],{"class":105,"line":1668},[103,111783,111784],{"class":218},"        \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",[103,111786,111787],{"class":105,"line":1682},[103,111788,111789],{"class":218},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[103,111791,111792],{"class":105,"line":1687},[103,111793,106428],{"class":218},[103,111795,111796],{"class":105,"line":1716},[103,111797,101357],{"class":218},[103,111799,111800],{"class":105,"line":1721},[103,111801,101362],{"class":218},[103,111803,111804],{"class":105,"line":1738},[103,111805,2389],{"emptyLinePlaceholder":30},[103,111807,111808],{"class":105,"line":1743},[103,111809,106445],{"class":218},[103,111811,111812],{"class":105,"line":1748},[103,111813,111814],{"class":218},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[103,111816,111817],{"class":105,"line":1753},[103,111818,111819],{"class":218},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[103,111821,111822],{"class":105,"line":1767},[103,111823,106455],{"class":218},[103,111825,111826],{"class":105,"line":1772},[103,111827,101367],{"class":218},[103,111829,111830],{"class":105,"line":2566},[103,111831,95688],{"class":218},[103,111833,111834],{"class":105,"line":2580},[103,111835,2389],{"emptyLinePlaceholder":30},[103,111837,111838],{"class":105,"line":2588},[103,111839,2389],{"emptyLinePlaceholder":30},[103,111841,111842,111844,111847,111850,111852],{"class":105,"line":2593},[103,111843,31937],{"class":109},[103,111845,111846],{"class":1952}," site_position",[103,111848,111849],{"class":113},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[103,111851,1288],{"class":162},[103,111853,111854],{"class":113},") -> np.ndarray:\n",[103,111856,111857,111859,111861],{"class":105,"line":2599},[103,111858,103390],{"class":113},[103,111860,159],{"class":109},[103,111862,111863],{"class":113}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[103,111865,111866,111868,111870,111872,111874],{"class":105,"line":2605},[103,111867,3090],{"class":109},[103,111869,103439],{"class":113},[103,111871,1023],{"class":109},[103,111873,4082],{"class":162},[103,111875,3728],{"class":113},[103,111877,111878,111880,111882,111884,111886,111889,111891,111893,111895,111897],{"class":105,"line":2610},[103,111879,103422],{"class":109},[103,111881,103425],{"class":162},[103,111883,114],{"class":113},[103,111885,166],{"class":109},[103,111887,111888],{"class":218},"\"site not found: ",[103,111890,1009],{"class":162},[103,111892,79800],{"class":113},[103,111894,1059],{"class":162},[103,111896,364],{"class":218},[103,111898,120],{"class":113},[103,111900,111901,111903],{"class":105,"line":7938},[103,111902,4079],{"class":109},[103,111904,111905],{"class":113}," data.site_xpos[site_id].copy()\n",[103,111907,111908],{"class":105,"line":7962},[103,111909,2389],{"emptyLinePlaceholder":30},[103,111911,111912],{"class":105,"line":7967},[103,111913,2389],{"emptyLinePlaceholder":30},[103,111915,111916,111918,111921],{"class":105,"line":7973},[103,111917,31937],{"class":109},[103,111919,111920],{"class":1952}," get_obs",[103,111922,111923],{"class":113},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[103,111925,111926,111929,111931,111934,111936],{"class":105,"line":8000},[103,111927,111928],{"class":113},"    tip ",[103,111930,159],{"class":109},[103,111932,111933],{"class":113}," site_position(model, data, ",[103,111935,111526],{"class":218},[103,111937,120],{"class":113},[103,111939,111940,111943,111945,111947,111950],{"class":105,"line":8005},[103,111941,111942],{"class":113},"    target ",[103,111944,159],{"class":109},[103,111946,111933],{"class":113},[103,111948,111949],{"class":218},"\"target\"",[103,111951,120],{"class":113},[103,111953,111954,111956],{"class":105,"line":8011},[103,111955,4079],{"class":109},[103,111957,111958],{"class":113}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[103,111960,111961],{"class":105,"line":8023},[103,111962,2389],{"emptyLinePlaceholder":30},[103,111964,111965],{"class":105,"line":8035},[103,111966,2389],{"emptyLinePlaceholder":30},[103,111968,111969,111971,111974,111977,111979],{"class":105,"line":8047},[103,111970,31937],{"class":109},[103,111972,111973],{"class":1952}," reward",[103,111975,111976],{"class":113},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[103,111978,153],{"class":162},[103,111980,3728],{"class":113},[103,111982,111983,111985,111987,111989,111991],{"class":105,"line":9706},[103,111984,111928],{"class":113},[103,111986,159],{"class":109},[103,111988,111933],{"class":113},[103,111990,111526],{"class":218},[103,111992,120],{"class":113},[103,111994,111995,111997,111999,112001,112003],{"class":105,"line":9731},[103,111996,111942],{"class":113},[103,111998,159],{"class":109},[103,112000,111933],{"class":113},[103,112002,111949],{"class":218},[103,112004,120],{"class":113},[103,112006,112007,112010,112012,112014,112016],{"class":105,"line":9754},[103,112008,112009],{"class":113},"    dist ",[103,112011,159],{"class":109},[103,112013,111591],{"class":113},[103,112015,645],{"class":109},[103,112017,111596],{"class":113},[103,112019,112020,112023,112025,112028,112030],{"class":105,"line":9778},[103,112021,112022],{"class":113},"    control_cost ",[103,112024,159],{"class":109},[103,112026,112027],{"class":162}," 0.01",[103,112029,6508],{"class":109},[103,112031,112032],{"class":113}," np.sum(np.square(data.ctrl))\n",[103,112034,112035,112037,112039,112041,112043,112045,112047],{"class":105,"line":9783},[103,112036,4079],{"class":109},[103,112038,109787],{"class":162},[103,112040,114],{"class":113},[103,112042,645],{"class":109},[103,112044,111586],{"class":113},[103,112046,645],{"class":109},[103,112048,112049],{"class":113}," control_cost)\n",[103,112051,112052],{"class":105,"line":9788},[103,112053,2389],{"emptyLinePlaceholder":30},[103,112055,112056],{"class":105,"line":9793},[103,112057,2389],{"emptyLinePlaceholder":30},[103,112059,112060,112062,112064,112066,112068],{"class":105,"line":9802},[103,112061,31937],{"class":109},[103,112063,1962],{"class":1952},[103,112065,101388],{"class":113},[103,112067,95676],{"class":162},[103,112069,3728],{"class":113},[103,112071,112072,112074,112076,112078,112080],{"class":105,"line":9807},[103,112073,101397],{"class":113},[103,112075,159],{"class":109},[103,112077,101402],{"class":113},[103,112079,101304],{"class":162},[103,112081,120],{"class":113},[103,112083,112084,112086,112088],{"class":105,"line":9813},[103,112085,101411],{"class":113},[103,112087,159],{"class":109},[103,112089,101416],{"class":113},[103,112091,112092,112094,112096],{"class":105,"line":9834},[103,112093,110143],{"class":113},[103,112095,159],{"class":109},[103,112097,104751],{"class":162},[103,112099,112100],{"class":105,"line":9840},[103,112101,2389],{"emptyLinePlaceholder":30},[103,112103,112104,112106,112108,112110,112112,112114,112116],{"class":105,"line":9854},[103,112105,3190],{"class":109},[103,112107,31606],{"class":113},[103,112109,26033],{"class":109},[103,112111,32433],{"class":162},[103,112113,114],{"class":113},[103,112115,65064],{"class":162},[103,112117,30776],{"class":113},[103,112119,112120],{"class":105,"line":9860},[103,112121,112122],{"class":113},"        mujoco.mj_forward(model, data)\n",[103,112124,112125,112128,112130,112132,112134],{"class":105,"line":9887},[103,112126,112127],{"class":113},"        tip ",[103,112129,159],{"class":109},[103,112131,111933],{"class":113},[103,112133,111526],{"class":218},[103,112135,120],{"class":113},[103,112137,112138,112141,112143,112145,112147],{"class":105,"line":9896},[103,112139,112140],{"class":113},"        target ",[103,112142,159],{"class":109},[103,112144,111933],{"class":113},[103,112146,111949],{"class":218},[103,112148,120],{"class":113},[103,112150,112151,112154,112156,112159,112161],{"class":105,"line":9902},[103,112152,112153],{"class":113},"        error ",[103,112155,159],{"class":109},[103,112157,112158],{"class":113}," target ",[103,112160,645],{"class":109},[103,112162,112163],{"class":113}," tip\n",[103,112165,112166],{"class":105,"line":9910},[103,112167,2389],{"emptyLinePlaceholder":30},[103,112169,112170,112172,112174,112176,112178,112181,112183,112185,112188,112190,112193,112195,112197,112199,112201],{"class":105,"line":9915},[103,112171,106607],{"class":113},[103,112173,305],{"class":162},[103,112175,4432],{"class":113},[103,112177,159],{"class":109},[103,112179,112180],{"class":113}," np.clip(",[103,112182,105250],{"class":162},[103,112184,6508],{"class":109},[103,112186,112187],{"class":113}," error[",[103,112189,191],{"class":162},[103,112191,112192],{"class":113},"], ",[103,112194,645],{"class":109},[103,112196,102393],{"class":162},[103,112198,12425],{"class":113},[103,112200,102393],{"class":162},[103,112202,120],{"class":113},[103,112204,112205,112207,112209,112211,112213,112215,112217,112219,112221,112223,112225,112227,112229,112231,112233],{"class":105,"line":16594},[103,112206,106607],{"class":113},[103,112208,331],{"class":162},[103,112210,4432],{"class":113},[103,112212,159],{"class":109},[103,112214,112180],{"class":113},[103,112216,105250],{"class":162},[103,112218,6508],{"class":109},[103,112220,112187],{"class":113},[103,112222,305],{"class":162},[103,112224,112192],{"class":113},[103,112226,645],{"class":109},[103,112228,102393],{"class":162},[103,112230,12425],{"class":113},[103,112232,102393],{"class":162},[103,112234,120],{"class":113},[103,112236,112237],{"class":105,"line":16600},[103,112238,2389],{"emptyLinePlaceholder":30},[103,112240,112241],{"class":105,"line":16623},[103,112242,101506],{"class":113},[103,112244,112245,112247,112249],{"class":105,"line":16629},[103,112246,110287],{"class":113},[103,112248,9467],{"class":109},[103,112250,112251],{"class":113}," reward(model, data)\n",[103,112253,112254],{"class":105,"line":16652},[103,112255,2389],{"emptyLinePlaceholder":30},[103,112257,112258,112260,112262,112264,112266,112268,112270],{"class":105,"line":16666},[103,112259,2486],{"class":109},[103,112261,31606],{"class":113},[103,112263,441],{"class":109},[103,112265,5744],{"class":162},[103,112267,101549],{"class":109},[103,112269,4082],{"class":162},[103,112271,3728],{"class":113},[103,112273,112274,112277,112279],{"class":105,"line":16686},[103,112275,112276],{"class":113},"            obs ",[103,112278,159],{"class":109},[103,112280,112281],{"class":113}," get_obs(model, data)\n",[103,112283,112284,112286,112288,112290],{"class":105,"line":16692},[103,112285,34640],{"class":162},[103,112287,114],{"class":113},[103,112289,110321],{"class":218},[103,112291,112292],{"class":113},", step)\n",[103,112294,112295,112297,112299,112302,112305,112307],{"class":105,"line":16703},[103,112296,34640],{"class":162},[103,112298,114],{"class":113},[103,112300,112301],{"class":218},"\"  tip:\"",[103,112303,112304],{"class":113},", np.round(tip, ",[103,112306,185],{"class":162},[103,112308,30487],{"class":113},[103,112310,112311,112313,112315,112318,112321,112323],{"class":105,"line":16726},[103,112312,34640],{"class":162},[103,112314,114],{"class":113},[103,112316,112317],{"class":218},"\"  target:\"",[103,112319,112320],{"class":113},", np.round(target, ",[103,112322,185],{"class":162},[103,112324,30487],{"class":113},[103,112326,112327,112329,112331,112334,112337,112339],{"class":105,"line":16748},[103,112328,34640],{"class":162},[103,112330,114],{"class":113},[103,112332,112333],{"class":218},"\"  ctrl:\"",[103,112335,112336],{"class":113},", np.round(data.ctrl.copy(), ",[103,112338,185],{"class":162},[103,112340,30487],{"class":113},[103,112342,112343,112345,112347,112350,112353,112355],{"class":105,"line":16753},[103,112344,34640],{"class":162},[103,112346,114],{"class":113},[103,112348,112349],{"class":218},"\"  obs_dim:\"",[103,112351,112352],{"class":113},", obs.shape[",[103,112354,305],{"class":162},[103,112356,4646],{"class":113},[103,112358,112359],{"class":105,"line":16759},[103,112360,2389],{"emptyLinePlaceholder":30},[103,112362,112363,112365,112367,112369,112371,112373,112375,112377],{"class":105,"line":16773},[103,112364,31289],{"class":162},[103,112366,114],{"class":113},[103,112368,110366],{"class":218},[103,112370,12425],{"class":113},[103,112372,32008],{"class":162},[103,112374,110373],{"class":113},[103,112376,185],{"class":162},[103,112378,30487],{"class":113},[103,112380,112381,112383,112385,112388,112391,112393,112395,112397],{"class":105,"line":16786},[103,112382,31289],{"class":162},[103,112384,114],{"class":113},[103,112386,112387],{"class":218},"\"final tip:\"",[103,112389,112390],{"class":113},", np.round(site_position(model, data, ",[103,112392,111526],{"class":218},[103,112394,110335],{"class":113},[103,112396,185],{"class":162},[103,112398,30487],{"class":113},[103,112400,112401,112403,112405,112408,112410,112412,112414,112416],{"class":105,"line":16791},[103,112402,31289],{"class":162},[103,112404,114],{"class":113},[103,112406,112407],{"class":218},"\"target:\"",[103,112409,112390],{"class":113},[103,112411,111949],{"class":218},[103,112413,110335],{"class":113},[103,112415,185],{"class":162},[103,112417,30487],{"class":113},[103,112419,112420],{"class":105,"line":16805},[103,112421,2389],{"emptyLinePlaceholder":30},[103,112423,112424],{"class":105,"line":16810},[103,112425,2389],{"emptyLinePlaceholder":30},[103,112427,112428,112430,112432,112434,112436],{"class":105,"line":16816},[103,112429,1520],{"class":109},[103,112431,31210],{"class":162},[103,112433,101549],{"class":109},[103,112435,101552],{"class":218},[103,112437,3728],{"class":113},[103,112439,112440],{"class":105,"line":16821},[103,112441,101559],{"class":113},[14,112443,103560],{},[94,112445,112447],{"className":23812,"code":112446,"language":23814,"meta":24,"style":24},"touch ch7_reacher.py\n",[100,112448,112449],{"__ignoreMap":24},[103,112450,112451,112453],{"class":105,"line":106},[103,112452,101273],{"class":1952},[103,112454,112455],{"class":218}," ch7_reacher.py\n",[14,112457,110434],{},[94,112459,112461],{"className":23812,"code":112460,"language":23814,"meta":24,"style":24},"python ch7_reacher.py\n",[100,112462,112463],{"__ignoreMap":24},[103,112464,112465,112467],{"class":105,"line":106},[103,112466,30370],{"class":1952},[103,112468,112455],{"class":218},[74,112470,101562],{"id":101562},[14,112472,112473],{},"读取 site 坐标：",[94,112475,112477],{"className":30368,"code":112476,"language":30370,"meta":24,"style":24},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[100,112478,112479],{"__ignoreMap":24},[103,112480,112481,112483,112485,112487,112489],{"class":105,"line":106},[103,112482,31937],{"class":109},[103,112484,111846],{"class":1952},[103,112486,111849],{"class":113},[103,112488,1288],{"class":162},[103,112490,111854],{"class":113},[14,112492,112493],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112495,110450],{},[94,112497,112499],{"className":30368,"code":112498,"language":30370,"meta":24,"style":24},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[100,112500,112501],{"__ignoreMap":24},[103,112502,112503,112505],{"class":105,"line":106},[103,112504,17036],{"class":109},[103,112506,111958],{"class":113},[14,112508,112509],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112511,109775],{},[94,112513,112515],{"className":30368,"code":112514,"language":30370,"meta":24,"style":24},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[100,112516,112517,112529,112542],{"__ignoreMap":24},[103,112518,112519,112521,112523,112525,112527],{"class":105,"line":106},[103,112520,111586],{"class":113},[103,112522,159],{"class":109},[103,112524,111591],{"class":113},[103,112526,645],{"class":109},[103,112528,111596],{"class":113},[103,112530,112531,112534,112536,112538,112540],{"class":105,"line":25},[103,112532,112533],{"class":113},"control_cost ",[103,112535,159],{"class":109},[103,112537,112027],{"class":162},[103,112539,6508],{"class":109},[103,112541,112032],{"class":113},[103,112543,112544,112546,112548,112550,112552,112554,112556],{"class":105,"line":1168},[103,112545,17036],{"class":109},[103,112547,109787],{"class":162},[103,112549,114],{"class":113},[103,112551,645],{"class":109},[103,112553,111586],{"class":113},[103,112555,645],{"class":109},[103,112557,112049],{"class":113},[14,112559,112560],{},"奖励由两部分组成：",[57,112562,112563,112568],{},[60,112564,112565,112567],{},[100,112566,111613],{},"：末端离目标越远，奖励越低。",[60,112569,112570,112573],{},[100,112571,112572],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112575,112576],{},"简单控制器：",[94,112578,112580],{"className":30368,"code":112579,"language":30370,"meta":24,"style":24},"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",[100,112581,112582,112595,112627],{"__ignoreMap":24},[103,112583,112584,112587,112589,112591,112593],{"class":105,"line":106},[103,112585,112586],{"class":113},"error ",[103,112588,159],{"class":109},[103,112590,112158],{"class":113},[103,112592,645],{"class":109},[103,112594,112163],{"class":113},[103,112596,112597,112599,112601,112603,112605,112607,112609,112611,112613,112615,112617,112619,112621,112623,112625],{"class":105,"line":25},[103,112598,105861],{"class":113},[103,112600,305],{"class":162},[103,112602,4432],{"class":113},[103,112604,159],{"class":109},[103,112606,112180],{"class":113},[103,112608,105250],{"class":162},[103,112610,6508],{"class":109},[103,112612,112187],{"class":113},[103,112614,191],{"class":162},[103,112616,112192],{"class":113},[103,112618,645],{"class":109},[103,112620,102393],{"class":162},[103,112622,12425],{"class":113},[103,112624,102393],{"class":162},[103,112626,120],{"class":113},[103,112628,112629,112631,112633,112635,112637,112639,112641,112643,112645,112647,112649,112651,112653,112655,112657],{"class":105,"line":1168},[103,112630,105861],{"class":113},[103,112632,331],{"class":162},[103,112634,4432],{"class":113},[103,112636,159],{"class":109},[103,112638,112180],{"class":113},[103,112640,105250],{"class":162},[103,112642,6508],{"class":109},[103,112644,112187],{"class":113},[103,112646,305],{"class":162},[103,112648,112192],{"class":113},[103,112650,645],{"class":109},[103,112652,102393],{"class":162},[103,112654,12425],{"class":113},[103,112656,102393],{"class":162},[103,112658,120],{"class":113},[14,112660,112661],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[74,112663,101698],{"id":101698},[94,112665,112666],{"className":30368,"code":112476,"language":30370,"meta":24,"style":24},[100,112667,112668],{"__ignoreMap":24},[103,112669,112670,112672,112674,112676,112678],{"class":105,"line":106},[103,112671,31937],{"class":109},[103,112673,111846],{"class":1952},[103,112675,111849],{"class":113},[103,112677,1288],{"class":162},[103,112679,111854],{"class":113},[14,112681,112682,112683,112685,112686,82529,112688,28375],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[100,112684,79800],{}," 是 site 的名字，比如 ",[100,112687,111526],{},[100,112689,111949],{},[94,112691,112693],{"className":30368,"code":112692,"language":30370,"meta":24,"style":24},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[100,112694,112695],{"__ignoreMap":24},[103,112696,112697,112699,112701],{"class":105,"line":106},[103,112698,103624],{"class":113},[103,112700,159],{"class":109},[103,112702,111863],{"class":113},[14,112704,112705],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[94,112707,112709],{"className":30368,"code":112708,"language":30370,"meta":24,"style":24},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[100,112710,112711,112723],{"__ignoreMap":24},[103,112712,112713,112715,112717,112719,112721],{"class":105,"line":106},[103,112714,1520],{"class":109},[103,112716,103439],{"class":113},[103,112718,1023],{"class":109},[103,112720,4082],{"class":162},[103,112722,3728],{"class":113},[103,112724,112725,112727,112729,112731,112733,112735,112737,112739,112741,112743],{"class":105,"line":25},[103,112726,103885],{"class":109},[103,112728,103425],{"class":162},[103,112730,114],{"class":113},[103,112732,166],{"class":109},[103,112734,111888],{"class":218},[103,112736,1009],{"class":162},[103,112738,79800],{"class":113},[103,112740,1059],{"class":162},[103,112742,364],{"class":218},[103,112744,120],{"class":113},[14,112746,112747,112748,112751,112752,112754],{},"如果 site 没找到，就主动报错。",[100,112749,112750],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[100,112753,79800],{}," 的值放进字符串里。",[94,112756,112758],{"className":30368,"code":112757,"language":30370,"meta":24,"style":24},"return data.site_xpos[site_id].copy()\n",[100,112759,112760],{"__ignoreMap":24},[103,112761,112762,112764],{"class":105,"line":106},[103,112763,17036],{"class":109},[103,112765,111905],{"class":113},[14,112767,112768,112769,112771,112772,112775],{},"返回这个 site 的世界坐标。",[100,112770,103670],{}," 里的每一行都是一个 site 的 ",[100,112773,112774],{},"(x, y, z)"," 坐标。",[94,112777,112779],{"className":30368,"code":112778,"language":30370,"meta":24,"style":24},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[100,112780,112781],{"__ignoreMap":24},[103,112782,112783,112785,112787],{"class":105,"line":106},[103,112784,31937],{"class":109},[103,112786,111920],{"class":1952},[103,112788,111923],{"class":113},[14,112790,112791],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[94,112793,112795],{"className":30368,"code":112794,"language":30370,"meta":24,"style":24},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[100,112796,112797,112809],{"__ignoreMap":24},[103,112798,112799,112801,112803,112805,112807],{"class":105,"line":106},[103,112800,111558],{"class":113},[103,112802,159],{"class":109},[103,112804,111933],{"class":113},[103,112806,111526],{"class":218},[103,112808,120],{"class":113},[103,112810,112811,112813,112815,112817,112819],{"class":105,"line":25},[103,112812,111568],{"class":113},[103,112814,159],{"class":109},[103,112816,111933],{"class":113},[103,112818,111949],{"class":218},[103,112820,120],{"class":113},[14,112822,112823],{},"分别读取末端点和目标点的世界坐标。",[94,112825,112826],{"className":30368,"code":112498,"language":30370,"meta":24,"style":24},[100,112827,112828],{"__ignoreMap":24},[103,112829,112830,112832],{"class":105,"line":106},[103,112831,17036],{"class":109},[103,112833,111958],{"class":113},[14,112835,112836],{},"把四部分拼成一个观测数组：",[94,112838,112841],{"className":112839,"code":112840,"language":5177,"meta":24},[5175],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[100,112842,112840],{"__ignoreMap":24},[94,112844,112846],{"className":30368,"code":112845,"language":30370,"meta":24,"style":24},"dist = np.linalg.norm(tip - target)\n",[100,112847,112848],{"__ignoreMap":24},[103,112849,112850,112852,112854,112856,112858],{"class":105,"line":106},[103,112851,111586],{"class":113},[103,112853,159],{"class":109},[103,112855,111591],{"class":113},[103,112857,645],{"class":109},[103,112859,111596],{"class":113},[14,112861,112862,112863,112866,112867,112870],{},"计算 tip 到 target 的距离。",[100,112864,112865],{},"tip - target"," 得到一个三维向量，",[100,112868,112869],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112872,14623],{},[94,112874,112877],{"className":112875,"code":112876,"language":5177,"meta":24},[5175],"tip    = [0.3, 0.0, 0.4]\ntarget = [0.5, 0.0, 0.4]\ntip - target = [-0.2, 0.0, 0.0]\ndistance = 0.2\n",[100,112878,112876],{"__ignoreMap":24},[94,112880,112882],{"className":30368,"code":112881,"language":30370,"meta":24,"style":24},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[100,112883,112884],{"__ignoreMap":24},[103,112885,112886,112888,112890,112892,112894],{"class":105,"line":106},[103,112887,112533],{"class":113},[103,112889,159],{"class":109},[103,112891,112027],{"class":162},[103,112893,6508],{"class":109},[103,112895,112032],{"class":113},[14,112897,112898,112899,112902,112903,112906],{},"计算动作惩罚。",[100,112900,112901],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[100,112904,112905],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[94,112908,112910],{"className":30368,"code":112909,"language":30370,"meta":24,"style":24},"return float(-dist - control_cost)\n",[100,112911,112912],{"__ignoreMap":24},[103,112913,112914,112916,112918,112920,112922,112924,112926],{"class":105,"line":106},[103,112915,17036],{"class":109},[103,112917,109787],{"class":162},[103,112919,114],{"class":113},[103,112921,645],{"class":109},[103,112923,111586],{"class":113},[103,112925,645],{"class":109},[103,112927,112049],{"class":113},[14,112929,112930],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[94,112932,112933],{"className":30368,"code":110793,"language":30370,"meta":24,"style":24},[100,112934,112935],{"__ignoreMap":24},[103,112936,112937,112939,112941],{"class":105,"line":106},[103,112938,110800],{"class":113},[103,112940,159],{"class":109},[103,112942,104751],{"class":162},[14,112944,112945],{},"累计奖励变量，记录整个运行过程的总分。",[94,112947,112949],{"className":30368,"code":112948,"language":30370,"meta":24,"style":24},"for step in range(500):\n",[100,112950,112951],{"__ignoreMap":24},[103,112952,112953,112955,112957,112959,112961,112963,112965],{"class":105,"line":106},[103,112954,3014],{"class":109},[103,112956,31606],{"class":113},[103,112958,26033],{"class":109},[103,112960,32433],{"class":162},[103,112962,114],{"class":113},[103,112964,65064],{"class":162},[103,112966,30776],{"class":113},[14,112968,112969],{},"运行 500 个控制步。",[94,112971,112972],{"className":30368,"code":104533,"language":30370,"meta":24,"style":24},[100,112973,112974],{"__ignoreMap":24},[103,112975,112976],{"class":105,"line":106},[103,112977,104533],{"class":113},[14,112979,112980,112981,101008,112983,112985],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[100,112982,103221],{},[100,112984,103224],{}," 是当前状态下的坐标。",[94,112987,112989],{"className":30368,"code":112988,"language":30370,"meta":24,"style":24},"error = target - tip\n",[100,112990,112991],{"__ignoreMap":24},[103,112992,112993,112995,112997,112999,113001],{"class":105,"line":106},[103,112994,112586],{"class":113},[103,112996,159],{"class":109},[103,112998,112158],{"class":113},[103,113000,645],{"class":109},[103,113002,112163],{"class":113},[14,113004,113005],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[94,113007,113009],{"className":30368,"code":113008,"language":30370,"meta":24,"style":24},"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",[100,113010,113011,113043],{"__ignoreMap":24},[103,113012,113013,113015,113017,113019,113021,113023,113025,113027,113029,113031,113033,113035,113037,113039,113041],{"class":105,"line":106},[103,113014,105861],{"class":113},[103,113016,305],{"class":162},[103,113018,4432],{"class":113},[103,113020,159],{"class":109},[103,113022,112180],{"class":113},[103,113024,105250],{"class":162},[103,113026,6508],{"class":109},[103,113028,112187],{"class":113},[103,113030,191],{"class":162},[103,113032,112192],{"class":113},[103,113034,645],{"class":109},[103,113036,102393],{"class":162},[103,113038,12425],{"class":113},[103,113040,102393],{"class":162},[103,113042,120],{"class":113},[103,113044,113045,113047,113049,113051,113053,113055,113057,113059,113061,113063,113065,113067,113069,113071,113073],{"class":105,"line":25},[103,113046,105861],{"class":113},[103,113048,331],{"class":162},[103,113050,4432],{"class":113},[103,113052,159],{"class":109},[103,113054,112180],{"class":113},[103,113056,105250],{"class":162},[103,113058,6508],{"class":109},[103,113060,112187],{"class":113},[103,113062,305],{"class":162},[103,113064,112192],{"class":113},[103,113066,645],{"class":109},[103,113068,102393],{"class":162},[103,113070,12425],{"class":113},[103,113072,102393],{"class":162},[103,113074,120],{"class":113},[14,113076,113077,113078,113081],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[100,113079,113080],{},"error -> ctrl -> step"," 的流程。",[94,113083,113084],{"className":30368,"code":104495,"language":30370,"meta":24,"style":24},[100,113085,113086],{"__ignoreMap":24},[103,113087,113088],{"class":105,"line":106},[103,113089,104495],{"class":113},[14,113091,113092],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[94,113094,113096],{"className":30368,"code":113095,"language":30370,"meta":24,"style":24},"obs = get_obs(model, data)\n",[100,113097,113098],{"__ignoreMap":24},[103,113099,113100,113102,113104],{"class":105,"line":106},[103,113101,110844],{"class":113},[103,113103,159],{"class":109},[103,113105,112281],{"class":113},[14,113107,113108,113109,113112],{},"读取最新观测。后面打印 ",[100,113110,113111],{},"obs.shape[0]","，用来确认观测维度是 10。",[45,113114,102306],{"id":102305},[14,113116,113117],{},"观测维度为:",[94,113119,113122],{"className":113120,"code":113121,"language":5177,"meta":24},[5175],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[100,113123,113121],{"__ignoreMap":24},[14,113125,113126],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113128,113129],{},"程序每 100 步打印：",[94,113131,113134],{"className":113132,"code":113133,"language":5177,"meta":24},[5175],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[100,113135,113133],{"__ignoreMap":24},[14,113137,113138,113139,113141],{},"如果控制有效，你应该看到最终 ",[100,113140,103221],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[45,113143,102338],{"id":102337},[57,113145,113146,113149,113152,113158,113164,113171,113181],{},[60,113147,113148],{},"修改目标点位置。",[60,113150,113151],{},"重新运行，观察最终 tip 是否变化。",[60,113153,113154,113155,113157],{},"把 gravity 改成 ",[100,113156,102579],{},"，观察控制是否变差。",[60,113159,111171,113160,111175,113162,28375],{},[100,113161,102148],{},[100,113163,191],{},[60,113165,102401,113166,102404,113168,113170],{},[100,113167,110586],{},[100,113169,107297],{},"，观察机械臂是否更难移动。",[60,113172,102401,113173,82520,113175,102404,113177,113180],{},[100,113174,103224],{},[100,113176,104136],{},[100,113178,113179],{},"0.2 0 0.6","，观察 reward 和 final tip。",[60,113182,113183],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[45,113185,102443],{"id":102442},[74,113187,113189],{"id":113188},"site-not-found",[100,113190,113191],{},"site not found",[14,113193,113194,113195,101008,113198,28375],{},"检查 XML 中是否有 ",[100,113196,113197],{},"site name=\"tip\"",[100,113199,113200],{},"site name=\"target\"",[74,113202,113203],{"id":113203},"机械臂完全不动",[14,113205,102513],{},[57,113207,113208,113213,113216,113221],{},[60,113209,113210,113212],{},[100,113211,102148],{}," 是否为 2",[60,113214,113215],{},"actuator 是否引用正确 joint",[60,113217,113218,113220],{},[100,113219,101066],{}," 是否被赋值",[60,113222,113223,113224],{},"是否执行了 ",[100,113225,100675],{},[74,113227,113228],{"id":113228},"控制效果不好",[14,113230,113231],{},"正常。本章重点不是控制器最优，而是任务结构:",[94,113233,113236],{"className":113234,"code":113235,"language":5177,"meta":24},[5175],"obs → action → mj_step → reward → next_obs\n",[100,113237,113235],{"__ignoreMap":24},[74,113239,113241],{"id":113240},"tip-坐标不变化","tip 坐标不变化",[14,113243,102565],{},[57,113245,113246,113251,113259,113268],{},[60,113247,113248,113249,28375],{},"是否每步调用了 ",[100,113250,100675],{},[60,113252,113253,113254,101008,113256,28375],{},"是否写入了 ",[100,113255,106116],{},[100,113257,113258],{},"data.ctrl[1]",[60,113260,113261,113262,326,113265,28375],{},"actuator 是否正确引用 ",[100,113263,113264],{},"joint1",[100,113266,113267],{},"joint2",[60,113269,113270],{},"控制输入是否太小。",[74,113272,113273],{"id":113273},"目标点不会动",[14,113275,113276],{},"本章的 target 是固定 site：",[94,113278,113280],{"className":53057,"code":113279,"language":53059,"meta":24,"style":24},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[100,113281,113282],{"__ignoreMap":24},[103,113283,113284,113286,113288,113290,113292,113294,113296,113298,113301],{"class":105,"line":106},[103,113285,1023],{"class":113},[103,113287,103200],{"class":51290},[103,113289,14910],{"class":1952},[103,113291,159],{"class":113},[103,113293,111949],{"class":218},[103,113295,101096],{"class":1952},[103,113297,159],{"class":113},[103,113299,113300],{"class":218},"\"0.5 0 0.4\"",[103,113302,113303],{"class":113}," ...\u002F>\n",[14,113305,113306,113307,113309],{},"它直接挂在 ",[100,113308,101831],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[74,113311,113312],{"id":113312},"机械臂不像真实机械臂",[14,113314,113315],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[45,113317,102597],{"id":102596},[14,113319,113320],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113322,113323],{},"核心公式：",[94,113325,113328],{"className":113326,"code":113327,"language":5177,"meta":24},[5175],"distance = ||tip - target||\nreward = -distance - action_cost\n",[100,113329,113327],{"__ignoreMap":24},[14,113331,113332],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5116,113334,113335],{},"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":24,"searchDepth":25,"depth":25,"links":113337},[113338,113339,113340,113345,113349,113350,113351,113359],{"id":100636,"depth":25,"text":100637},{"id":100759,"depth":25,"text":100760},{"id":101034,"depth":25,"text":101035,"children":113341},[113342,113343,113344],{"id":111541,"depth":1168,"text":111542},{"id":111617,"depth":1168,"text":111617},{"id":111647,"depth":1168,"text":111648},{"id":101242,"depth":25,"text":101243,"children":113346},[113347,113348],{"id":101562,"depth":1168,"text":101562},{"id":101698,"depth":1168,"text":101698},{"id":102305,"depth":25,"text":102306},{"id":102337,"depth":25,"text":102338},{"id":102442,"depth":25,"text":102443,"children":113352},[113353,113354,113355,113356,113357,113358],{"id":113188,"depth":1168,"text":113191},{"id":113203,"depth":1168,"text":113203},{"id":113228,"depth":1168,"text":113228},{"id":113240,"depth":1168,"text":113241},{"id":113273,"depth":1168,"text":113273},{"id":113312,"depth":1168,"text":113312},{"id":102596,"depth":25,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111345,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113366,"title":113367,"body":113368,"description":24,"extension":28,"meta":116830,"navigation":30,"path":116831,"seo":116832,"stem":116833,"__hash__":116834},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113369,"toc":116801},[113370,113373,113375,113378,113381,113406,113409,113415,113418,113424,113426,113428,113452,113454,113472,113474,113517,113519,113546,113548,113551,113603,113606,113612,113621,113624,113662,113665,113704,113707,113715,113722,113725,113731,113733,113787,113794,113839,113842,113846,113862,113872,113874,115135,115137,115149,115151,115162,115164,115167,115188,115191,115194,115227,115233,115236,115269,115272,115275,115316,115321,115335,115338,115351,115356,115379,115381,115396,115406,115421,115428,115448,115463,115481,115484,115501,115509,115525,115531,115563,115576,115608,115618,115653,115667,115713,115727,115769,115780,115793,115799,115832,115835,115862,115872,115912,115922,115939,115946,115964,115967,116008,116021,116036,116039,116062,116065,116077,116080,116099,116104,116125,116128,116143,116146,116180,116192,116207,116210,116235,116238,116257,116260,116292,116295,116319,116325,116355,116362,116375,116378,116380,116382,116388,116391,116394,116406,116409,116411,116465,116467,116471,116477,116486,116489,116496,116498,116521,116524,116528,116530,116548,116554,116556,116589,116592,116598,116602,116605,116625,116630,116634,116641,116661,116666,116670,116673,116693,116696,116782,116786,116789,116795,116798],[10,113371,113367],{"id":113372},"_8gymnasium-风格强化学习接口基础",[45,113374,100637],{"id":100636},[14,113376,113377],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113379,113380],{},"你将实现:",[94,113382,113384],{"className":30368,"code":113383,"language":30370,"meta":24,"style":24},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[100,113385,113386,113396],{"__ignoreMap":24},[103,113387,113388,113391,113393],{"class":105,"line":106},[103,113389,113390],{"class":113},"obs, info ",[103,113392,159],{"class":109},[103,113394,113395],{"class":113}," env.reset()\n",[103,113397,113398,113401,113403],{"class":105,"line":25},[103,113399,113400],{"class":113},"obs, reward, terminated, truncated, info ",[103,113402,159],{"class":109},[103,113404,113405],{"class":113}," env.step(action)\n",[14,113407,113408],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113410,113411,113412,113414],{},"前面章节的代码都是“脚本式”的：在 ",[100,113413,102285],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113416,113417],{},"可以先记住 Gymnasium 环境的核心交互：",[94,113419,113422],{"className":113420,"code":113421,"language":5177,"meta":24},[5175],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[100,113423,113421],{"__ignoreMap":24},[45,113425,100760],{"id":100759},[14,113427,100763],{},[94,113429,113430],{"className":23812,"code":104378,"language":23814,"meta":24,"style":24},[100,113431,113432],{"__ignoreMap":24},[103,113433,113434,113436,113438,113440,113442,113444,113446,113448,113450],{"class":105,"line":106},[103,113435,24566],{"class":1952},[103,113437,26305],{"class":218},[103,113439,23824],{"class":218},[103,113441,26390],{"class":162},[103,113443,104393],{"class":218},[103,113445,100788],{"class":218},[103,113447,102491],{"class":218},[103,113449,100804],{"class":218},[103,113451,104402],{"class":218},[14,113453,102809],{},[94,113455,113457],{"className":23812,"code":113456,"language":23814,"meta":24,"style":24},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[100,113458,113459],{"__ignoreMap":24},[103,113460,113461,113463,113465,113467,113469],{"class":105,"line":106},[103,113462,23821],{"class":1952},[103,113464,23824],{"class":218},[103,113466,100920],{"class":218},[103,113468,107701],{"class":218},[103,113470,113471],{"class":218}," gymnasium\n",[14,113473,102826],{},[94,113475,113477],{"className":23812,"code":113476,"language":23814,"meta":24,"style":24},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[100,113478,113479,113496,113505],{"__ignoreMap":24},[103,113480,113481,113483,113485,113487,113490,113492,113494],{"class":105,"line":106},[103,113482,30320],{"class":1952},[103,113484,29166],{"class":218},[103,113486,25105],{"class":162},[103,113488,113489],{"class":218}," mujoco-gym-api",[103,113491,100965],{"class":218},[103,113493,100968],{"class":162},[103,113495,100971],{"class":162},[103,113497,113498,113500,113502],{"class":105,"line":25},[103,113499,30320],{"class":1952},[103,113501,100978],{"class":218},[103,113503,113504],{"class":218}," mujoco-gym-api\n",[103,113506,113507,113509,113511,113513,113515],{"class":105,"line":1168},[103,113508,23821],{"class":1952},[103,113510,23824],{"class":218},[103,113512,100920],{"class":218},[103,113514,107701],{"class":218},[103,113516,113471],{"class":218},[14,113518,100994],{},[57,113520,113521,113531,113534,113540],{},[60,113522,113523,113524,113527,113528,28375],{},"本章使用 ",[100,113525,113526],{},"gymnasium","，不是旧版 ",[100,113529,113530],{},"gym",[60,113532,113533],{},"Gymnasium API 与旧 Gym API 有差异。",[60,113535,113536,113537,28375],{},"旧 Gym 常见返回值是 4 个: ",[100,113538,113539],{},"obs, reward, done, info",[60,113541,113542,113543,28375],{},"Gymnasium 返回值是 5 个: ",[100,113544,113545],{},"obs, reward, terminated, truncated, info",[45,113547,101035],{"id":101034},[14,113549,113550],{},"强化学习环境接口包含:",[251,113552,113553,113562],{},[254,113554,113555],{},[257,113556,113557,113560],{},[260,113558,113559],{"align":23726},"方法",[260,113561,102686],{"align":23726},[298,113563,113564,113574,113584,113594],{},[257,113565,113566,113571],{},[303,113567,113568],{"align":23726},[100,113569,113570],{},"reset()",[303,113572,113573],{"align":23726},"重置环境",[257,113575,113576,113581],{},[303,113577,113578],{"align":23726},[100,113579,113580],{},"step(action)",[303,113582,113583],{"align":23726},"执行动作",[257,113585,113586,113591],{},[303,113587,113588],{"align":23726},[100,113589,113590],{},"observation_space",[303,113592,113593],{"align":23726},"观测空间",[257,113595,113596,113601],{},[303,113597,113598],{"align":23726},[100,113599,113600],{},"action_space",[303,113602,23644],{"align":23726},[14,113604,113605],{},"一个最小环境需要完成:",[94,113607,113610],{"className":113608,"code":113609,"language":5177,"meta":24},[5175],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[100,113611,113609],{"__ignoreMap":24},[74,113613,113615,101008,113618,104628],{"id":113614},"terminated-和-truncated-的区别",[100,113616,113617],{},"terminated",[100,113619,113620],{},"truncated",[14,113622,113623],{},"Gymnasium 把“结束”拆成两个概念：",[251,113625,113626,113636],{},[254,113627,113628],{},[257,113629,113630,113632,113634],{},[260,113631,104564],{"align":23726},[260,113633,100690],{"align":23726},[260,113635,21177],{"align":23726},[298,113637,113638,113650],{},[257,113639,113640,113644,113647],{},[303,113641,113642],{"align":23726},[100,113643,113617],{},[303,113645,113646],{"align":23726},"任务自然结束",[303,113648,113649],{"align":23726},"机械臂到达目标、机器人摔倒",[257,113651,113652,113656,113659],{},[303,113653,113654],{"align":23726},[100,113655,113620],{},[303,113657,113658],{"align":23726},"因外部限制截断",[303,113660,113661],{"align":23726},"达到最大步数、时间限制",[14,113663,113664],{},"本章中：",[94,113666,113668],{"className":30368,"code":113667,"language":30370,"meta":24,"style":24},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[100,113669,113670,113685],{"__ignoreMap":24},[103,113671,113672,113675,113677,113680,113682],{"class":105,"line":106},[103,113673,113674],{"class":113},"terminated ",[103,113676,159],{"class":109},[103,113678,113679],{"class":113}," dist ",[103,113681,1023],{"class":109},[103,113683,113684],{"class":162}," 0.05\n",[103,113686,113687,113690,113692,113694,113697,113699,113701],{"class":105,"line":25},[103,113688,113689],{"class":113},"truncated ",[103,113691,159],{"class":109},[103,113693,38863],{"class":162},[103,113695,113696],{"class":113},".steps ",[103,113698,1699],{"class":109},[103,113700,38863],{"class":162},[103,113702,113703],{"class":113},".max_steps\n",[14,113705,113706],{},"也就是：",[57,113708,113709,113712],{},[60,113710,113711],{},"末端距离目标小于 0.05，任务成功结束。",[60,113713,113714],{},"步数超过上限，episode 被截断。",[74,113716,113718,101008,113720],{"id":113717},"observation_space-和-action_space",[100,113719,113590],{},[100,113721,113600],{},[14,113723,113724],{},"这两个对象告诉算法：",[94,113726,113729],{"className":113727,"code":113728,"language":5177,"meta":24},[5175],"观测长什么样\n动作允许多大\n",[100,113730,113728],{"__ignoreMap":24},[14,113732,14623],{},[94,113734,113736],{"className":30368,"code":113735,"language":30370,"meta":24,"style":24},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[100,113737,113738],{"__ignoreMap":24},[103,113739,113740,113742,113745,113747,113750,113753,113756,113758,113760,113763,113765,113767,113769,113771,113773,113775,113777,113780,113782,113784],{"class":105,"line":106},[103,113741,30813],{"class":162},[103,113743,113744],{"class":113},".action_space ",[103,113746,159],{"class":109},[103,113748,113749],{"class":113}," spaces.Box(",[103,113751,113752],{"class":5206},"low",[103,113754,113755],{"class":109},"=-",[103,113757,102393],{"class":162},[103,113759,12425],{"class":113},[103,113761,113762],{"class":5206},"high",[103,113764,159],{"class":109},[103,113766,102393],{"class":162},[103,113768,12425],{"class":113},[103,113770,95953],{"class":5206},[103,113772,159],{"class":109},[103,113774,114],{"class":113},[103,113776,191],{"class":162},[103,113778,113779],{"class":113},",), ",[103,113781,93490],{"class":5206},[103,113783,159],{"class":109},[103,113785,113786],{"class":113},"np.float32)\n",[14,113788,113789,113790,113793],{},"表示动作是 2 维数组，每个值都在 ",[100,113791,113792],{},"[-1, 1]"," 范围内。",[94,113795,113797],{"className":30368,"code":113796,"language":30370,"meta":24,"style":24},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[100,113798,113799],{"__ignoreMap":24},[103,113800,113801,113803,113806,113808,113810,113812,113814,113817,113819,113821,113823,113825,113827,113829,113831,113833,113835,113837],{"class":105,"line":106},[103,113802,30813],{"class":162},[103,113804,113805],{"class":113},".observation_space ",[103,113807,159],{"class":109},[103,113809,113749],{"class":113},[103,113811,113752],{"class":5206},[103,113813,113755],{"class":109},[103,113815,113816],{"class":113},"np.inf, ",[103,113818,113762],{"class":5206},[103,113820,159],{"class":109},[103,113822,113816],{"class":113},[103,113824,95953],{"class":5206},[103,113826,159],{"class":109},[103,113828,114],{"class":113},[103,113830,559],{"class":162},[103,113832,113779],{"class":113},[103,113834,93490],{"class":5206},[103,113836,159],{"class":109},[103,113838,113786],{"class":113},[14,113840,113841],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[74,113843,113845],{"id":113844},"frame_skip-是什么","frame_skip 是什么",[94,113847,113849],{"className":30368,"code":113848,"language":30370,"meta":24,"style":24},"self.frame_skip = 5\n",[100,113850,113851],{"__ignoreMap":24},[103,113852,113853,113855,113858,113860],{"class":105,"line":106},[103,113854,30813],{"class":162},[103,113856,113857],{"class":113},".frame_skip ",[103,113859,159],{"class":109},[103,113861,54417],{"class":162},[14,113863,113864,113865,113868,113869,113871],{},"表示外部调用一次 ",[100,113866,113867],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[100,113870,101205],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[45,113873,101243],{"id":101242},[94,113875,113877],{"className":30368,"code":113876,"language":30370,"meta":24,"style":24},"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",[100,113878,113879,113891,113897,113907,113918,113922,113926,113934,113939,113943,113947,113951,113955,113959,113963,113967,113972,113976,113980,113984,113989,113993,113997,114001,114005,114009,114013,114017,114021,114025,114029,114033,114037,114041,114059,114074,114078,114091,114101,114116,114133,114137,114158,114177,114202,114216,114220,114230,114242,114252,114256,114298,114336,114340,114350,114366,114381,114400,114407,114411,114424,114439,114454,114467,114486,114502,114506,114547,114562,114577,114581,114620,114631,114644,114648,114658,114667,114671,114681,114696,114714,114718,114729,114746,114759,114763,114773,114777,114788,114799,114803,114817,114831,114847,114851,114864,114881,114896,114903,114907,114911,114923,114933,114951,114963,114975,114979,114987,115003,115012,115021,115029,115071,115084,115089,115093,115111,115115,115119,115131],{"__ignoreMap":24},[103,113880,113881,113883,113886,113888],{"class":105,"line":106},[103,113882,30382],{"class":109},[103,113884,113885],{"class":113}," gymnasium ",[103,113887,31373],{"class":109},[103,113889,113890],{"class":113}," gym\n",[103,113892,113893,113895],{"class":105,"line":25},[103,113894,30382],{"class":109},[103,113896,101291],{"class":113},[103,113898,113899,113901,113903,113905],{"class":105,"line":1168},[103,113900,30382],{"class":109},[103,113902,31370],{"class":113},[103,113904,31373],{"class":109},[103,113906,31376],{"class":113},[103,113908,113909,113911,113913,113915],{"class":105,"line":1183},[103,113910,30727],{"class":109},[103,113912,113885],{"class":113},[103,113914,30382],{"class":109},[103,113916,113917],{"class":113}," spaces\n",[103,113919,113920],{"class":105,"line":1189},[103,113921,2389],{"emptyLinePlaceholder":30},[103,113923,113924],{"class":105,"line":1203},[103,113925,2389],{"emptyLinePlaceholder":30},[103,113927,113928,113930,113932],{"class":105,"line":1209},[103,113929,101304],{"class":162},[103,113931,13554],{"class":109},[103,113933,101309],{"class":218},[103,113935,113936],{"class":105,"line":1300},[103,113937,113938],{"class":218},"\u003Cmujoco model=\"gym_reacher\">\n",[103,113940,113941],{"class":105,"line":1306},[103,113942,111728],{"class":218},[103,113944,113945],{"class":105,"line":1318},[103,113946,2389],{"emptyLinePlaceholder":30},[103,113948,113949],{"class":105,"line":1601},[103,113950,101328],{"class":218},[103,113952,113953],{"class":105,"line":1606},[103,113954,111746],{"class":218},[103,113956,113957],{"class":105,"line":1612},[103,113958,2389],{"emptyLinePlaceholder":30},[103,113960,113961],{"class":105,"line":1617},[103,113962,111755],{"class":218},[103,113964,113965],{"class":105,"line":1631},[103,113966,111760],{"class":218},[103,113968,113969],{"class":105,"line":1636},[103,113970,113971],{"class":218},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[103,113973,113974],{"class":105,"line":1642},[103,113975,2389],{"emptyLinePlaceholder":30},[103,113977,113978],{"class":105,"line":1663},[103,113979,111774],{"class":218},[103,113981,113982],{"class":105,"line":1668},[103,113983,111779],{"class":218},[103,113985,113986],{"class":105,"line":1682},[103,113987,113988],{"class":218},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[103,113990,113991],{"class":105,"line":1687},[103,113992,111789],{"class":218},[103,113994,113995],{"class":105,"line":1716},[103,113996,106428],{"class":218},[103,113998,113999],{"class":105,"line":1721},[103,114000,101357],{"class":218},[103,114002,114003],{"class":105,"line":1738},[103,114004,101362],{"class":218},[103,114006,114007],{"class":105,"line":1743},[103,114008,2389],{"emptyLinePlaceholder":30},[103,114010,114011],{"class":105,"line":1748},[103,114012,106445],{"class":218},[103,114014,114015],{"class":105,"line":1753},[103,114016,111814],{"class":218},[103,114018,114019],{"class":105,"line":1767},[103,114020,111819],{"class":218},[103,114022,114023],{"class":105,"line":1772},[103,114024,106455],{"class":218},[103,114026,114027],{"class":105,"line":2566},[103,114028,101367],{"class":218},[103,114030,114031],{"class":105,"line":2580},[103,114032,95688],{"class":218},[103,114034,114035],{"class":105,"line":2588},[103,114036,2389],{"emptyLinePlaceholder":30},[103,114038,114039],{"class":105,"line":2593},[103,114040,2389],{"emptyLinePlaceholder":30},[103,114042,114043,114045,114048,114050,114052,114054,114057],{"class":105,"line":2599},[103,114044,14684],{"class":109},[103,114046,114047],{"class":1952}," ReacherEnv",[103,114049,114],{"class":113},[103,114051,113530],{"class":1952},[103,114053,671],{"class":113},[103,114055,114056],{"class":1952},"Env",[103,114058,30776],{"class":113},[103,114060,114061,114064,114066,114068,114071],{"class":105,"line":2605},[103,114062,114063],{"class":113},"    metadata ",[103,114065,159],{"class":109},[103,114067,4437],{"class":113},[103,114069,114070],{"class":218},"\"render_modes\"",[103,114072,114073],{"class":113},": []}\n",[103,114075,114076],{"class":105,"line":2610},[103,114077,2389],{"emptyLinePlaceholder":30},[103,114079,114080,114082,114084,114087,114089],{"class":105,"line":7938},[103,114081,30791],{"class":109},[103,114083,30794],{"class":162},[103,114085,114086],{"class":113},"(self) -> ",[103,114088,95676],{"class":162},[103,114090,3728],{"class":113},[103,114092,114093,114095,114097,114099],{"class":105,"line":7962},[103,114094,30807],{"class":162},[103,114096,17251],{"class":113},[103,114098,30819],{"class":162},[103,114100,1965],{"class":113},[103,114102,114103,114105,114108,114110,114112,114114],{"class":105,"line":7967},[103,114104,30835],{"class":162},[103,114106,114107],{"class":113},".model ",[103,114109,159],{"class":109},[103,114111,101402],{"class":113},[103,114113,101304],{"class":162},[103,114115,120],{"class":113},[103,114117,114118,114120,114123,114125,114128,114130],{"class":105,"line":7973},[103,114119,30835],{"class":162},[103,114121,114122],{"class":113},".data ",[103,114124,159],{"class":109},[103,114126,114127],{"class":113}," mujoco.MjData(",[103,114129,30813],{"class":162},[103,114131,114132],{"class":113},".model)\n",[103,114134,114135],{"class":105,"line":8000},[103,114136,2389],{"emptyLinePlaceholder":30},[103,114138,114139,114141,114144,114146,114149,114151,114154,114156],{"class":105,"line":8005},[103,114140,30835],{"class":162},[103,114142,114143],{"class":113},".tip_site_id ",[103,114145,159],{"class":109},[103,114147,114148],{"class":113}," mujoco.mj_name2id(",[103,114150,30813],{"class":162},[103,114152,114153],{"class":113},".model, mujoco.mjtObj.mjOBJ_SITE, ",[103,114155,111526],{"class":218},[103,114157,120],{"class":113},[103,114159,114160,114162,114165,114167,114169,114171,114173,114175],{"class":105,"line":8011},[103,114161,30835],{"class":162},[103,114163,114164],{"class":113},".target_site_id ",[103,114166,159],{"class":109},[103,114168,114148],{"class":113},[103,114170,30813],{"class":162},[103,114172,114153],{"class":113},[103,114174,111949],{"class":218},[103,114176,120],{"class":113},[103,114178,114179,114181,114183,114185,114187,114189,114192,114194,114196,114198,114200],{"class":105,"line":8023},[103,114180,2486],{"class":109},[103,114182,38863],{"class":162},[103,114184,114143],{"class":113},[103,114186,1023],{"class":109},[103,114188,4082],{"class":162},[103,114190,114191],{"class":109}," or",[103,114193,38863],{"class":162},[103,114195,114164],{"class":113},[103,114197,1023],{"class":109},[103,114199,4082],{"class":162},[103,114201,3728],{"class":113},[103,114203,114204,114207,114209,114211,114214],{"class":105,"line":8035},[103,114205,114206],{"class":109},"            raise",[103,114208,103425],{"class":162},[103,114210,114],{"class":113},[103,114212,114213],{"class":218},"\"required sites not found\"",[103,114215,120],{"class":113},[103,114217,114218],{"class":105,"line":8047},[103,114219,2389],{"emptyLinePlaceholder":30},[103,114221,114222,114224,114226,114228],{"class":105,"line":9706},[103,114223,30835],{"class":162},[103,114225,113857],{"class":113},[103,114227,159],{"class":109},[103,114229,54417],{"class":162},[103,114231,114232,114234,114237,114239],{"class":105,"line":9731},[103,114233,30835],{"class":162},[103,114235,114236],{"class":113},".max_steps ",[103,114238,159],{"class":109},[103,114240,114241],{"class":162}," 200\n",[103,114243,114244,114246,114248,114250],{"class":105,"line":9754},[103,114245,30835],{"class":162},[103,114247,113696],{"class":113},[103,114249,159],{"class":109},[103,114251,47323],{"class":162},[103,114253,114254],{"class":105,"line":9778},[103,114255,2389],{"emptyLinePlaceholder":30},[103,114257,114258,114260,114262,114264,114266,114268,114270,114272,114274,114276,114278,114280,114282,114284,114286,114288,114290,114292,114294,114296],{"class":105,"line":9783},[103,114259,30835],{"class":162},[103,114261,113744],{"class":113},[103,114263,159],{"class":109},[103,114265,113749],{"class":113},[103,114267,113752],{"class":5206},[103,114269,113755],{"class":109},[103,114271,102393],{"class":162},[103,114273,12425],{"class":113},[103,114275,113762],{"class":5206},[103,114277,159],{"class":109},[103,114279,102393],{"class":162},[103,114281,12425],{"class":113},[103,114283,95953],{"class":5206},[103,114285,159],{"class":109},[103,114287,114],{"class":113},[103,114289,191],{"class":162},[103,114291,113779],{"class":113},[103,114293,93490],{"class":5206},[103,114295,159],{"class":109},[103,114297,113786],{"class":113},[103,114299,114300,114302,114304,114306,114308,114310,114312,114314,114316,114318,114320,114322,114324,114326,114328,114330,114332,114334],{"class":105,"line":9788},[103,114301,30835],{"class":162},[103,114303,113805],{"class":113},[103,114305,159],{"class":109},[103,114307,113749],{"class":113},[103,114309,113752],{"class":5206},[103,114311,113755],{"class":109},[103,114313,113816],{"class":113},[103,114315,113762],{"class":5206},[103,114317,159],{"class":109},[103,114319,113816],{"class":113},[103,114321,95953],{"class":5206},[103,114323,159],{"class":109},[103,114325,114],{"class":113},[103,114327,559],{"class":162},[103,114329,113779],{"class":113},[103,114331,93490],{"class":5206},[103,114333,159],{"class":109},[103,114335,113786],{"class":113},[103,114337,114338],{"class":105,"line":9793},[103,114339,2389],{"emptyLinePlaceholder":30},[103,114341,114342,114344,114347],{"class":105,"line":9802},[103,114343,30791],{"class":109},[103,114345,114346],{"class":1952}," _get_obs",[103,114348,114349],{"class":113},"(self) -> np.ndarray:\n",[103,114351,114352,114354,114356,114358,114361,114363],{"class":105,"line":9807},[103,114353,112127],{"class":113},[103,114355,159],{"class":109},[103,114357,38863],{"class":162},[103,114359,114360],{"class":113},".data.site_xpos[",[103,114362,30813],{"class":162},[103,114364,114365],{"class":113},".tip_site_id].copy()\n",[103,114367,114368,114370,114372,114374,114376,114378],{"class":105,"line":9813},[103,114369,112140],{"class":113},[103,114371,159],{"class":109},[103,114373,38863],{"class":162},[103,114375,114360],{"class":113},[103,114377,30813],{"class":162},[103,114379,114380],{"class":113},".target_site_id].copy()\n",[103,114382,114383,114385,114387,114390,114392,114395,114397],{"class":105,"line":9834},[103,114384,110172],{"class":113},[103,114386,159],{"class":109},[103,114388,114389],{"class":113}," np.concatenate([",[103,114391,30813],{"class":162},[103,114393,114394],{"class":113},".data.qpos.copy(), ",[103,114396,30813],{"class":162},[103,114398,114399],{"class":113},".data.qvel.copy(), tip, target])\n",[103,114401,114402,114404],{"class":105,"line":9840},[103,114403,14742],{"class":109},[103,114405,114406],{"class":113}," obs.astype(np.float32)\n",[103,114408,114409],{"class":105,"line":9854},[103,114410,2389],{"emptyLinePlaceholder":30},[103,114412,114413,114415,114418,114420,114422],{"class":105,"line":9860},[103,114414,30791],{"class":109},[103,114416,114417],{"class":1952}," _get_reward",[103,114419,114086],{"class":113},[103,114421,153],{"class":162},[103,114423,3728],{"class":113},[103,114425,114426,114428,114430,114432,114434,114436],{"class":105,"line":9887},[103,114427,112127],{"class":113},[103,114429,159],{"class":109},[103,114431,38863],{"class":162},[103,114433,114360],{"class":113},[103,114435,30813],{"class":162},[103,114437,114438],{"class":113},".tip_site_id]\n",[103,114440,114441,114443,114445,114447,114449,114451],{"class":105,"line":9896},[103,114442,112140],{"class":113},[103,114444,159],{"class":109},[103,114446,38863],{"class":162},[103,114448,114360],{"class":113},[103,114450,30813],{"class":162},[103,114452,114453],{"class":113},".target_site_id]\n",[103,114455,114456,114459,114461,114463,114465],{"class":105,"line":9902},[103,114457,114458],{"class":113},"        dist ",[103,114460,159],{"class":109},[103,114462,111591],{"class":113},[103,114464,645],{"class":109},[103,114466,111596],{"class":113},[103,114468,114469,114472,114474,114476,114478,114481,114483],{"class":105,"line":9910},[103,114470,114471],{"class":113},"        control_cost ",[103,114473,159],{"class":109},[103,114475,112027],{"class":162},[103,114477,6508],{"class":109},[103,114479,114480],{"class":113}," np.sum(np.square(",[103,114482,30813],{"class":162},[103,114484,114485],{"class":113},".data.ctrl))\n",[103,114487,114488,114490,114492,114494,114496,114498,114500],{"class":105,"line":9915},[103,114489,14742],{"class":109},[103,114491,109787],{"class":162},[103,114493,114],{"class":113},[103,114495,645],{"class":109},[103,114497,111586],{"class":113},[103,114499,645],{"class":109},[103,114501,112049],{"class":113},[103,114503,114504],{"class":105,"line":16594},[103,114505,2389],{"emptyLinePlaceholder":30},[103,114507,114508,114510,114513,114516,114518,114521,114523,114525,114527,114529,114531,114534,114537,114539,114541,114543,114545],{"class":105,"line":16600},[103,114509,30791],{"class":109},[103,114511,114512],{"class":1952}," reset",[103,114514,114515],{"class":113},"(self, ",[103,114517,568],{"class":109},[103,114519,114520],{"class":113},", seed: ",[103,114522,117],{"class":162},[103,114524,25099],{"class":109},[103,114526,38923],{"class":162},[103,114528,13554],{"class":109},[103,114530,38923],{"class":162},[103,114532,114533],{"class":113},", options: ",[103,114535,114536],{"class":162},"dict",[103,114538,25099],{"class":109},[103,114540,38923],{"class":162},[103,114542,13554],{"class":109},[103,114544,38923],{"class":162},[103,114546,30776],{"class":113},[103,114548,114549,114551,114554,114557,114559],{"class":105,"line":16623},[103,114550,30807],{"class":162},[103,114552,114553],{"class":113},"().reset(",[103,114555,114556],{"class":5206},"seed",[103,114558,159],{"class":109},[103,114560,114561],{"class":113},"seed)\n",[103,114563,114564,114567,114569,114572,114574],{"class":105,"line":16629},[103,114565,114566],{"class":113},"        mujoco.mj_resetData(",[103,114568,30813],{"class":162},[103,114570,114571],{"class":113},".model, ",[103,114573,30813],{"class":162},[103,114575,114576],{"class":113},".data)\n",[103,114578,114579],{"class":105,"line":16652},[103,114580,2389],{"emptyLinePlaceholder":30},[103,114582,114583,114585,114588,114590,114592,114595,114597,114599,114601,114603,114605,114607,114609,114611,114613,114615,114617],{"class":105,"line":16666},[103,114584,30835],{"class":162},[103,114586,114587],{"class":113},".data.qpos[:] ",[103,114589,159],{"class":109},[103,114591,38863],{"class":162},[103,114593,114594],{"class":113},".np_random.uniform(",[103,114596,113752],{"class":5206},[103,114598,113755],{"class":109},[103,114600,86200],{"class":162},[103,114602,12425],{"class":113},[103,114604,113762],{"class":5206},[103,114606,159],{"class":109},[103,114608,86200],{"class":162},[103,114610,12425],{"class":113},[103,114612,31486],{"class":5206},[103,114614,159],{"class":109},[103,114616,30813],{"class":162},[103,114618,114619],{"class":113},".model.nq)\n",[103,114621,114622,114624,114627,114629],{"class":105,"line":16686},[103,114623,30835],{"class":162},[103,114625,114626],{"class":113},".data.qvel[:] ",[103,114628,159],{"class":109},[103,114630,104751],{"class":162},[103,114632,114633,114636,114638,114640,114642],{"class":105,"line":16692},[103,114634,114635],{"class":113},"        mujoco.mj_forward(",[103,114637,30813],{"class":162},[103,114639,114571],{"class":113},[103,114641,30813],{"class":162},[103,114643,114576],{"class":113},[103,114645,114646],{"class":105,"line":16703},[103,114647,2389],{"emptyLinePlaceholder":30},[103,114649,114650,114652,114654,114656],{"class":105,"line":16726},[103,114651,30835],{"class":162},[103,114653,113696],{"class":113},[103,114655,159],{"class":109},[103,114657,47323],{"class":162},[103,114659,114660,114662,114664],{"class":105,"line":16748},[103,114661,14742],{"class":109},[103,114663,38863],{"class":162},[103,114665,114666],{"class":113},"._get_obs(), {}\n",[103,114668,114669],{"class":105,"line":16753},[103,114670,2389],{"emptyLinePlaceholder":30},[103,114672,114673,114675,114678],{"class":105,"line":16759},[103,114674,30791],{"class":109},[103,114676,114677],{"class":1952}," step",[103,114679,114680],{"class":113},"(self, action):\n",[103,114682,114683,114685,114687,114690,114692,114694],{"class":105,"line":16773},[103,114684,110212],{"class":113},[103,114686,159],{"class":109},[103,114688,114689],{"class":113}," np.asarray(action, ",[103,114691,93490],{"class":5206},[103,114693,159],{"class":109},[103,114695,113786],{"class":113},[103,114697,114698,114700,114702,114704,114706,114709,114711],{"class":105,"line":16786},[103,114699,110212],{"class":113},[103,114701,159],{"class":109},[103,114703,107437],{"class":113},[103,114705,30813],{"class":162},[103,114707,114708],{"class":113},".action_space.low, ",[103,114710,30813],{"class":162},[103,114712,114713],{"class":113},".action_space.high)\n",[103,114715,114716],{"class":105,"line":16791},[103,114717,2389],{"emptyLinePlaceholder":30},[103,114719,114720,114722,114725,114727],{"class":105,"line":16805},[103,114721,30835],{"class":162},[103,114723,114724],{"class":113},".data.ctrl[:] ",[103,114726,159],{"class":109},[103,114728,107460],{"class":113},[103,114730,114731,114733,114735,114737,114739,114741,114743],{"class":105,"line":16810},[103,114732,3392],{"class":109},[103,114734,101491],{"class":113},[103,114736,26033],{"class":109},[103,114738,32433],{"class":162},[103,114740,114],{"class":113},[103,114742,30813],{"class":162},[103,114744,114745],{"class":113},".frame_skip):\n",[103,114747,114748,114751,114753,114755,114757],{"class":105,"line":16816},[103,114749,114750],{"class":113},"            mujoco.mj_step(",[103,114752,30813],{"class":162},[103,114754,114571],{"class":113},[103,114756,30813],{"class":162},[103,114758,114576],{"class":113},[103,114760,114761],{"class":105,"line":16821},[103,114762,2389],{"emptyLinePlaceholder":30},[103,114764,114765,114767,114769,114771],{"class":105,"line":16835},[103,114766,30835],{"class":162},[103,114768,113696],{"class":113},[103,114770,9467],{"class":109},[103,114772,55689],{"class":162},[103,114774,114775],{"class":105,"line":16840},[103,114776,2389],{"emptyLinePlaceholder":30},[103,114778,114779,114781,114783,114785],{"class":105,"line":16845},[103,114780,110172],{"class":113},[103,114782,159],{"class":109},[103,114784,38863],{"class":162},[103,114786,114787],{"class":113},"._get_obs()\n",[103,114789,114790,114792,114794,114796],{"class":105,"line":16859},[103,114791,110277],{"class":113},[103,114793,159],{"class":109},[103,114795,38863],{"class":162},[103,114797,114798],{"class":113},"._get_reward()\n",[103,114800,114801],{"class":105,"line":16871},[103,114802,2389],{"emptyLinePlaceholder":30},[103,114804,114805,114807,114809,114811,114813,114815],{"class":105,"line":16876},[103,114806,112127],{"class":113},[103,114808,159],{"class":109},[103,114810,38863],{"class":162},[103,114812,114360],{"class":113},[103,114814,30813],{"class":162},[103,114816,114438],{"class":113},[103,114818,114819,114821,114823,114825,114827,114829],{"class":105,"line":16889},[103,114820,112140],{"class":113},[103,114822,159],{"class":109},[103,114824,38863],{"class":162},[103,114826,114360],{"class":113},[103,114828,30813],{"class":162},[103,114830,114453],{"class":113},[103,114832,114833,114835,114837,114839,114842,114844],{"class":105,"line":16894},[103,114834,114458],{"class":113},[103,114836,159],{"class":109},[103,114838,109787],{"class":162},[103,114840,114841],{"class":113},"(np.linalg.norm(tip ",[103,114843,645],{"class":109},[103,114845,114846],{"class":113}," target))\n",[103,114848,114849],{"class":105,"line":16899},[103,114850,2389],{"emptyLinePlaceholder":30},[103,114852,114853,114856,114858,114860,114862],{"class":105,"line":16904},[103,114854,114855],{"class":113},"        terminated ",[103,114857,159],{"class":109},[103,114859,113679],{"class":113},[103,114861,1023],{"class":109},[103,114863,113684],{"class":162},[103,114865,114866,114869,114871,114873,114875,114877,114879],{"class":105,"line":16917},[103,114867,114868],{"class":113},"        truncated ",[103,114870,159],{"class":109},[103,114872,38863],{"class":162},[103,114874,113696],{"class":113},[103,114876,1699],{"class":109},[103,114878,38863],{"class":162},[103,114880,113703],{"class":113},[103,114882,114883,114886,114888,114890,114893],{"class":105,"line":16922},[103,114884,114885],{"class":113},"        info ",[103,114887,159],{"class":109},[103,114889,4437],{"class":113},[103,114891,114892],{"class":218},"\"distance\"",[103,114894,114895],{"class":113},": dist}\n",[103,114897,114898,114900],{"class":105,"line":32623},[103,114899,14742],{"class":109},[103,114901,114902],{"class":113}," obs, reward, terminated, truncated, info\n",[103,114904,114905],{"class":105,"line":32629},[103,114906,2389],{"emptyLinePlaceholder":30},[103,114908,114909],{"class":105,"line":32635},[103,114910,2389],{"emptyLinePlaceholder":30},[103,114912,114913,114915,114917,114919,114921],{"class":105,"line":32641},[103,114914,31937],{"class":109},[103,114916,1962],{"class":1952},[103,114918,101388],{"class":113},[103,114920,95676],{"class":162},[103,114922,3728],{"class":113},[103,114924,114925,114928,114930],{"class":105,"line":32647},[103,114926,114927],{"class":113},"    env ",[103,114929,159],{"class":109},[103,114931,114932],{"class":113}," ReacherEnv()\n",[103,114934,114935,114938,114940,114943,114945,114947,114949],{"class":105,"line":32658},[103,114936,114937],{"class":113},"    obs, info ",[103,114939,159],{"class":109},[103,114941,114942],{"class":113}," env.reset(",[103,114944,114556],{"class":5206},[103,114946,159],{"class":109},[103,114948,305],{"class":162},[103,114950,120],{"class":113},[103,114952,114953,114955,114957,114960],{"class":105,"line":32664},[103,114954,31289],{"class":162},[103,114956,114],{"class":113},[103,114958,114959],{"class":218},"\"initial obs shape:\"",[103,114961,114962],{"class":113},", obs.shape)\n",[103,114964,114965,114967,114969,114972],{"class":105,"line":32684},[103,114966,31289],{"class":162},[103,114968,114],{"class":113},[103,114970,114971],{"class":218},"\"initial info:\"",[103,114973,114974],{"class":113},", info)\n",[103,114976,114977],{"class":105,"line":32690},[103,114978,2389],{"emptyLinePlaceholder":30},[103,114980,114981,114983,114985],{"class":105,"line":32701},[103,114982,110143],{"class":113},[103,114984,159],{"class":109},[103,114986,104751],{"class":162},[103,114988,114989,114991,114993,114995,114997,114999,115001],{"class":105,"line":32707},[103,114990,3190],{"class":109},[103,114992,31606],{"class":113},[103,114994,26033],{"class":109},[103,114996,32433],{"class":162},[103,114998,114],{"class":113},[103,115000,813],{"class":162},[103,115002,30776],{"class":113},[103,115004,115005,115007,115009],{"class":105,"line":32713},[103,115006,110212],{"class":113},[103,115008,159],{"class":109},[103,115010,115011],{"class":113}," env.action_space.sample()\n",[103,115013,115014,115017,115019],{"class":105,"line":32719},[103,115015,115016],{"class":113},"        obs, reward, terminated, truncated, info ",[103,115018,159],{"class":109},[103,115020,113405],{"class":113},[103,115022,115023,115025,115027],{"class":105,"line":32725},[103,115024,110287],{"class":113},[103,115026,9467],{"class":109},[103,115028,110292],{"class":113},[103,115030,115031,115033,115035,115037,115039,115042,115044,115046,115049,115051,115053,115056,115058,115060,115063,115065,115067,115069],{"class":105,"line":32731},[103,115032,32441],{"class":162},[103,115034,114],{"class":113},[103,115036,110321],{"class":218},[103,115038,110324],{"class":113},[103,115040,115041],{"class":218},"\"reward:\"",[103,115043,12425],{"class":113},[103,115045,32008],{"class":162},[103,115047,115048],{"class":113},"(reward, ",[103,115050,185],{"class":162},[103,115052,110335],{"class":113},[103,115054,115055],{"class":218},"\"distance:\"",[103,115057,12425],{"class":113},[103,115059,32008],{"class":162},[103,115061,115062],{"class":113},"(info[",[103,115064,114892],{"class":218},[103,115066,112192],{"class":113},[103,115068,185],{"class":162},[103,115070,30487],{"class":113},[103,115072,115073,115075,115078,115081],{"class":105,"line":32737},[103,115074,2486],{"class":109},[103,115076,115077],{"class":113}," terminated ",[103,115079,115080],{"class":109},"or",[103,115082,115083],{"class":113}," truncated:\n",[103,115085,115086],{"class":105,"line":32743},[103,115087,115088],{"class":109},"            break\n",[103,115090,115091],{"class":105,"line":32763},[103,115092,2389],{"emptyLinePlaceholder":30},[103,115094,115095,115097,115099,115101,115103,115105,115107,115109],{"class":105,"line":32769},[103,115096,31289],{"class":162},[103,115098,114],{"class":113},[103,115100,110366],{"class":218},[103,115102,12425],{"class":113},[103,115104,32008],{"class":162},[103,115106,110373],{"class":113},[103,115108,185],{"class":162},[103,115110,30487],{"class":113},[103,115112,115113],{"class":105,"line":32785},[103,115114,2389],{"emptyLinePlaceholder":30},[103,115116,115117],{"class":105,"line":32791},[103,115118,2389],{"emptyLinePlaceholder":30},[103,115120,115121,115123,115125,115127,115129],{"class":105,"line":32805},[103,115122,1520],{"class":109},[103,115124,31210],{"class":162},[103,115126,101549],{"class":109},[103,115128,101552],{"class":218},[103,115130,3728],{"class":113},[103,115132,115133],{"class":105,"line":32811},[103,115134,101559],{"class":113},[14,115136,103560],{},[94,115138,115140],{"className":23812,"code":115139,"language":23814,"meta":24,"style":24},"touch ch8_gym_env.py\n",[100,115141,115142],{"__ignoreMap":24},[103,115143,115144,115146],{"class":105,"line":106},[103,115145,101273],{"class":1952},[103,115147,115148],{"class":218}," ch8_gym_env.py\n",[14,115150,110434],{},[94,115152,115154],{"className":23812,"code":115153,"language":23814,"meta":24,"style":24},"python ch8_gym_env.py\n",[100,115155,115156],{"__ignoreMap":24},[103,115157,115158,115160],{"class":105,"line":106},[103,115159,30370],{"class":1952},[103,115161,115148],{"class":218},[74,115163,101562],{"id":101562},[14,115165,115166],{},"继承 Gymnasium 环境：",[94,115168,115170],{"className":30368,"code":115169,"language":30370,"meta":24,"style":24},"class ReacherEnv(gym.Env):\n",[100,115171,115172],{"__ignoreMap":24},[103,115173,115174,115176,115178,115180,115182,115184,115186],{"class":105,"line":106},[103,115175,14684],{"class":109},[103,115177,114047],{"class":1952},[103,115179,114],{"class":113},[103,115181,113530],{"class":1952},[103,115183,671],{"class":113},[103,115185,114056],{"class":1952},[103,115187,30776],{"class":113},[14,115189,115190],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115192,115193],{},"初始化模型：",[94,115195,115197],{"className":30368,"code":115196,"language":30370,"meta":24,"style":24},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[100,115198,115199,115213],{"__ignoreMap":24},[103,115200,115201,115203,115205,115207,115209,115211],{"class":105,"line":106},[103,115202,30813],{"class":162},[103,115204,114107],{"class":113},[103,115206,159],{"class":109},[103,115208,101402],{"class":113},[103,115210,101304],{"class":162},[103,115212,120],{"class":113},[103,115214,115215,115217,115219,115221,115223,115225],{"class":105,"line":25},[103,115216,30813],{"class":162},[103,115218,114122],{"class":113},[103,115220,159],{"class":109},[103,115222,114127],{"class":113},[103,115224,30813],{"class":162},[103,115226,114132],{"class":113},[14,115228,115229,115230,115232],{},"这和前面章节一样，只是现在放到了类的 ",[100,115231,30819],{}," 里。",[14,115234,115235],{},"缓存 site ID：",[94,115237,115239],{"className":30368,"code":115238,"language":30370,"meta":24,"style":24},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[100,115240,115241,115255],{"__ignoreMap":24},[103,115242,115243,115245,115247,115249,115251,115253],{"class":105,"line":106},[103,115244,30813],{"class":162},[103,115246,114143],{"class":113},[103,115248,159],{"class":109},[103,115250,114148],{"class":113},[103,115252,89544],{"class":162},[103,115254,120],{"class":113},[103,115256,115257,115259,115261,115263,115265,115267],{"class":105,"line":25},[103,115258,30813],{"class":162},[103,115260,114164],{"class":113},[103,115262,159],{"class":109},[103,115264,114148],{"class":113},[103,115266,89544],{"class":162},[103,115268,120],{"class":113},[14,115270,115271],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115273,115274],{},"reset：",[94,115276,115278],{"className":30368,"code":115277,"language":30370,"meta":24,"style":24},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[100,115279,115280],{"__ignoreMap":24},[103,115281,115282,115284,115286,115288,115290,115292,115294,115296,115298,115300,115302,115304,115306,115308,115310,115312,115314],{"class":105,"line":106},[103,115283,31937],{"class":109},[103,115285,114512],{"class":1952},[103,115287,114515],{"class":113},[103,115289,568],{"class":109},[103,115291,114520],{"class":113},[103,115293,117],{"class":162},[103,115295,25099],{"class":109},[103,115297,38923],{"class":162},[103,115299,13554],{"class":109},[103,115301,38923],{"class":162},[103,115303,114533],{"class":113},[103,115305,114536],{"class":162},[103,115307,25099],{"class":109},[103,115309,38923],{"class":162},[103,115311,13554],{"class":109},[103,115313,38923],{"class":162},[103,115315,30776],{"class":113},[14,115317,115318,115320],{},[100,115319,70046],{}," 做四件事：",[57,115322,115323,115326,115329,115332],{},[60,115324,115325],{},"设置随机种子。",[60,115327,115328],{},"重置 MuJoCo data。",[60,115330,115331],{},"随机初始化关节角。",[60,115333,115334],{},"返回初始观测和 info。",[14,115336,115337],{},"step：",[94,115339,115341],{"className":30368,"code":115340,"language":30370,"meta":24,"style":24},"def step(self, action):\n",[100,115342,115343],{"__ignoreMap":24},[103,115344,115345,115347,115349],{"class":105,"line":106},[103,115346,31937],{"class":109},[103,115348,114677],{"class":1952},[103,115350,114680],{"class":113},[14,115352,115353,115355],{},[100,115354,107124],{}," 做六件事：",[57,115357,115358,115361,115367,115370,115373,115376],{},[60,115359,115360],{},"检查并裁剪 action。",[60,115362,115363,115364,28375],{},"写入 ",[100,115365,115366],{},"self.data.ctrl",[60,115368,115369],{},"连续推进若干个 MuJoCo 物理步。",[60,115371,115372],{},"计算新观测。",[60,115374,115375],{},"计算奖励和结束条件。",[60,115377,115378],{},"返回 Gymnasium 标准五元组。",[74,115380,101698],{"id":101698},[94,115382,115384],{"className":30368,"code":115383,"language":30370,"meta":24,"style":24},"import gymnasium as gym\n",[100,115385,115386],{"__ignoreMap":24},[103,115387,115388,115390,115392,115394],{"class":105,"line":106},[103,115389,30382],{"class":109},[103,115391,113885],{"class":113},[103,115393,31373],{"class":109},[103,115395,113890],{"class":113},[14,115397,115398,115399,115401,115402,115405],{},"导入 Gymnasium，并起别名 ",[100,115400,113530],{},"。后面写 ",[100,115403,115404],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[94,115407,115409],{"className":30368,"code":115408,"language":30370,"meta":24,"style":24},"from gymnasium import spaces\n",[100,115410,115411],{"__ignoreMap":24},[103,115412,115413,115415,115417,115419],{"class":105,"line":106},[103,115414,30727],{"class":109},[103,115416,113885],{"class":113},[103,115418,30382],{"class":109},[103,115420,113917],{"class":113},[14,115422,115423,115424,115427],{},"导入空间定义工具。",[100,115425,115426],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[94,115429,115430],{"className":30368,"code":115169,"language":30370,"meta":24,"style":24},[100,115431,115432],{"__ignoreMap":24},[103,115433,115434,115436,115438,115440,115442,115444,115446],{"class":105,"line":106},[103,115435,14684],{"class":109},[103,115437,114047],{"class":1952},[103,115439,114],{"class":113},[103,115441,113530],{"class":1952},[103,115443,671],{"class":113},[103,115445,114056],{"class":1952},[103,115447,30776],{"class":113},[14,115449,115450,115451,115454,115455,115457,115458,101008,115460,115462],{},"定义一个类，名字叫 ",[100,115452,115453],{},"ReacherEnv","。括号里的 ",[100,115456,115404],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[100,115459,70046],{},[100,115461,107124],{}," 这两个核心方法。",[94,115464,115466],{"className":30368,"code":115465,"language":30370,"meta":24,"style":24},"metadata = {\"render_modes\": []}\n",[100,115467,115468],{"__ignoreMap":24},[103,115469,115470,115473,115475,115477,115479],{"class":105,"line":106},[103,115471,115472],{"class":113},"metadata ",[103,115474,159],{"class":109},[103,115476,4437],{"class":113},[103,115478,114070],{"class":218},[103,115480,114073],{"class":113},[14,115482,115483],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[94,115485,115487],{"className":30368,"code":115486,"language":30370,"meta":24,"style":24},"def __init__(self) -> None:\n",[100,115488,115489],{"__ignoreMap":24},[103,115490,115491,115493,115495,115497,115499],{"class":105,"line":106},[103,115492,31937],{"class":109},[103,115494,30794],{"class":162},[103,115496,114086],{"class":113},[103,115498,95676],{"class":162},[103,115500,3728],{"class":113},[14,115502,115503,115505,115506,28375],{},[100,115504,30819],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[100,115507,115508],{},"env = ReacherEnv()",[94,115510,115512],{"className":30368,"code":115511,"language":30370,"meta":24,"style":24},"super().__init__()\n",[100,115513,115514],{"__ignoreMap":24},[103,115515,115516,115519,115521,115523],{"class":105,"line":106},[103,115517,115518],{"class":162},"super",[103,115520,17251],{"class":113},[103,115522,30819],{"class":162},[103,115524,1965],{"class":113},[14,115526,115527,115528,115530],{},"调用父类 ",[100,115529,115404],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[94,115532,115533],{"className":30368,"code":115196,"language":30370,"meta":24,"style":24},[100,115534,115535,115549],{"__ignoreMap":24},[103,115536,115537,115539,115541,115543,115545,115547],{"class":105,"line":106},[103,115538,30813],{"class":162},[103,115540,114107],{"class":113},[103,115542,159],{"class":109},[103,115544,101402],{"class":113},[103,115546,101304],{"class":162},[103,115548,120],{"class":113},[103,115550,115551,115553,115555,115557,115559,115561],{"class":105,"line":25},[103,115552,30813],{"class":162},[103,115554,114122],{"class":113},[103,115556,159],{"class":109},[103,115558,114127],{"class":113},[103,115560,30813],{"class":162},[103,115562,114132],{"class":113},[14,115564,115565,115566,115568,115569,101008,115572,115575],{},"把 MuJoCo 模型和状态保存到 ",[100,115567,30813],{}," 上。",[100,115570,115571],{},"self.model",[100,115573,115574],{},"self.data"," 表示这个环境对象自己的模型和状态。",[94,115577,115578],{"className":30368,"code":115238,"language":30370,"meta":24,"style":24},[100,115579,115580,115594],{"__ignoreMap":24},[103,115581,115582,115584,115586,115588,115590,115592],{"class":105,"line":106},[103,115583,30813],{"class":162},[103,115585,114143],{"class":113},[103,115587,159],{"class":109},[103,115589,114148],{"class":113},[103,115591,89544],{"class":162},[103,115593,120],{"class":113},[103,115595,115596,115598,115600,115602,115604,115606],{"class":105,"line":25},[103,115597,30813],{"class":162},[103,115599,114164],{"class":113},[103,115601,159],{"class":109},[103,115603,114148],{"class":113},[103,115605,89544],{"class":162},[103,115607,120],{"class":113},[14,115609,115610,115611,101008,115614,115617],{},"提前查好 tip 和 target 的 site ID。这样 ",[100,115612,115613],{},"_get_obs",[100,115615,115616],{},"_get_reward"," 里就不用每次按名字查找。",[94,115619,115621],{"className":30368,"code":115620,"language":30370,"meta":24,"style":24},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[100,115622,115623,115633,115643],{"__ignoreMap":24},[103,115624,115625,115627,115629,115631],{"class":105,"line":106},[103,115626,30813],{"class":162},[103,115628,113857],{"class":113},[103,115630,159],{"class":109},[103,115632,54417],{"class":162},[103,115634,115635,115637,115639,115641],{"class":105,"line":25},[103,115636,30813],{"class":162},[103,115638,114236],{"class":113},[103,115640,159],{"class":109},[103,115642,114241],{"class":162},[103,115644,115645,115647,115649,115651],{"class":105,"line":1168},[103,115646,30813],{"class":162},[103,115648,113696],{"class":113},[103,115650,159],{"class":109},[103,115652,47323],{"class":162},[14,115654,115655,115658,115659,115662,115663,115666],{},[100,115656,115657],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[100,115660,115661],{},"max_steps"," 是一个 episode 最多运行多少步。",[100,115664,115665],{},"steps"," 记录当前 episode 已经走了多少步。",[94,115668,115669],{"className":30368,"code":113735,"language":30370,"meta":24,"style":24},[100,115670,115671],{"__ignoreMap":24},[103,115672,115673,115675,115677,115679,115681,115683,115685,115687,115689,115691,115693,115695,115697,115699,115701,115703,115705,115707,115709,115711],{"class":105,"line":106},[103,115674,30813],{"class":162},[103,115676,113744],{"class":113},[103,115678,159],{"class":109},[103,115680,113749],{"class":113},[103,115682,113752],{"class":5206},[103,115684,113755],{"class":109},[103,115686,102393],{"class":162},[103,115688,12425],{"class":113},[103,115690,113762],{"class":5206},[103,115692,159],{"class":109},[103,115694,102393],{"class":162},[103,115696,12425],{"class":113},[103,115698,95953],{"class":5206},[103,115700,159],{"class":109},[103,115702,114],{"class":113},[103,115704,191],{"class":162},[103,115706,113779],{"class":113},[103,115708,93490],{"class":5206},[103,115710,159],{"class":109},[103,115712,113786],{"class":113},[14,115714,115715,115716,115719,115720,101008,115723,115726],{},"定义动作空间。",[100,115717,115718],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[100,115721,115722],{},"low=-1.0",[100,115724,115725],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[94,115728,115729],{"className":30368,"code":113796,"language":30370,"meta":24,"style":24},[100,115730,115731],{"__ignoreMap":24},[103,115732,115733,115735,115737,115739,115741,115743,115745,115747,115749,115751,115753,115755,115757,115759,115761,115763,115765,115767],{"class":105,"line":106},[103,115734,30813],{"class":162},[103,115736,113805],{"class":113},[103,115738,159],{"class":109},[103,115740,113749],{"class":113},[103,115742,113752],{"class":5206},[103,115744,113755],{"class":109},[103,115746,113816],{"class":113},[103,115748,113762],{"class":5206},[103,115750,159],{"class":109},[103,115752,113816],{"class":113},[103,115754,95953],{"class":5206},[103,115756,159],{"class":109},[103,115758,114],{"class":113},[103,115760,559],{"class":162},[103,115762,113779],{"class":113},[103,115764,93490],{"class":5206},[103,115766,159],{"class":109},[103,115768,113786],{"class":113},[14,115770,115771,115772,115775,115776,115779],{},"定义观测空间。",[100,115773,115774],{},"shape=(10,)"," 表示观测是 10 个数。",[100,115777,115778],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[94,115781,115783],{"className":30368,"code":115782,"language":30370,"meta":24,"style":24},"def _get_obs(self) -> np.ndarray:\n",[100,115784,115785],{"__ignoreMap":24},[103,115786,115787,115789,115791],{"class":105,"line":106},[103,115788,31937],{"class":109},[103,115790,114346],{"class":1952},[103,115792,114349],{"class":113},[14,115794,115795,115796,115798],{},"定义内部函数，用来生成观测。函数名前面的 ",[100,115797,1105],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[94,115800,115802],{"className":30368,"code":115801,"language":30370,"meta":24,"style":24},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[100,115803,115804,115818],{"__ignoreMap":24},[103,115805,115806,115808,115810,115812,115814,115816],{"class":105,"line":106},[103,115807,111558],{"class":113},[103,115809,159],{"class":109},[103,115811,38863],{"class":162},[103,115813,114360],{"class":113},[103,115815,30813],{"class":162},[103,115817,114365],{"class":113},[103,115819,115820,115822,115824,115826,115828,115830],{"class":105,"line":25},[103,115821,111568],{"class":113},[103,115823,159],{"class":109},[103,115825,38863],{"class":162},[103,115827,114360],{"class":113},[103,115829,30813],{"class":162},[103,115831,114380],{"class":113},[14,115833,115834],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[94,115836,115838],{"className":30368,"code":115837,"language":30370,"meta":24,"style":24},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[100,115839,115840,115856],{"__ignoreMap":24},[103,115841,115842,115844,115846,115848,115850,115852,115854],{"class":105,"line":106},[103,115843,110844],{"class":113},[103,115845,159],{"class":109},[103,115847,114389],{"class":113},[103,115849,30813],{"class":162},[103,115851,114394],{"class":113},[103,115853,30813],{"class":162},[103,115855,114399],{"class":113},[103,115857,115858,115860],{"class":105,"line":25},[103,115859,17036],{"class":109},[103,115861,114406],{"class":113},[14,115863,115864,115865,115868,115869,115871],{},"拼接观测，并转换成 ",[100,115866,115867],{},"float32","。很多强化学习库默认使用 ",[100,115870,115867],{},"，所以这里主动转换。",[94,115873,115874],{"className":30368,"code":115277,"language":30370,"meta":24,"style":24},[100,115875,115876],{"__ignoreMap":24},[103,115877,115878,115880,115882,115884,115886,115888,115890,115892,115894,115896,115898,115900,115902,115904,115906,115908,115910],{"class":105,"line":106},[103,115879,31937],{"class":109},[103,115881,114512],{"class":1952},[103,115883,114515],{"class":113},[103,115885,568],{"class":109},[103,115887,114520],{"class":113},[103,115889,117],{"class":162},[103,115891,25099],{"class":109},[103,115893,38923],{"class":162},[103,115895,13554],{"class":109},[103,115897,38923],{"class":162},[103,115899,114533],{"class":113},[103,115901,114536],{"class":162},[103,115903,25099],{"class":109},[103,115905,38923],{"class":162},[103,115907,13554],{"class":109},[103,115909,38923],{"class":162},[103,115911,30776],{"class":113},[14,115913,115914,115915,115917,115918,115921],{},"定义 reset。",[100,115916,114556],{}," 用来控制随机数，保证实验可以复现。",[100,115919,115920],{},"options"," 用来接收额外配置，本章暂时不用。",[94,115923,115925],{"className":30368,"code":115924,"language":30370,"meta":24,"style":24},"super().reset(seed=seed)\n",[100,115926,115927],{"__ignoreMap":24},[103,115928,115929,115931,115933,115935,115937],{"class":105,"line":106},[103,115930,115518],{"class":162},[103,115932,114553],{"class":113},[103,115934,114556],{"class":5206},[103,115936,159],{"class":109},[103,115938,114561],{"class":113},[14,115940,115941,115942,115945],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[100,115943,115944],{},"self.np_random"," 生成可复现的随机数。",[94,115947,115949],{"className":30368,"code":115948,"language":30370,"meta":24,"style":24},"mujoco.mj_resetData(self.model, self.data)\n",[100,115950,115951],{"__ignoreMap":24},[103,115952,115953,115956,115958,115960,115962],{"class":105,"line":106},[103,115954,115955],{"class":113},"mujoco.mj_resetData(",[103,115957,30813],{"class":162},[103,115959,114571],{"class":113},[103,115961,30813],{"class":162},[103,115963,114576],{"class":113},[14,115965,115966],{},"把 MuJoCo 状态重置到默认状态。",[94,115968,115970],{"className":30368,"code":115969,"language":30370,"meta":24,"style":24},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[100,115971,115972],{"__ignoreMap":24},[103,115973,115974,115976,115978,115980,115982,115984,115986,115988,115990,115992,115994,115996,115998,116000,116002,116004,116006],{"class":105,"line":106},[103,115975,30813],{"class":162},[103,115977,114587],{"class":113},[103,115979,159],{"class":109},[103,115981,38863],{"class":162},[103,115983,114594],{"class":113},[103,115985,113752],{"class":5206},[103,115987,113755],{"class":109},[103,115989,86200],{"class":162},[103,115991,12425],{"class":113},[103,115993,113762],{"class":5206},[103,115995,159],{"class":109},[103,115997,86200],{"class":162},[103,115999,12425],{"class":113},[103,116001,31486],{"class":5206},[103,116003,159],{"class":109},[103,116005,30813],{"class":162},[103,116007,114619],{"class":113},[14,116009,115331,116010,116013,116014,116017,116018,116020],{},[100,116011,116012],{},"[:]"," 表示修改整个数组。",[100,116015,116016],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[100,116019,102140],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[94,116022,116024],{"className":30368,"code":116023,"language":30370,"meta":24,"style":24},"self.data.qvel[:] = 0.0\n",[100,116025,116026],{"__ignoreMap":24},[103,116027,116028,116030,116032,116034],{"class":105,"line":106},[103,116029,30813],{"class":162},[103,116031,114626],{"class":113},[103,116033,159],{"class":109},[103,116035,104751],{"class":162},[14,116037,116038],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[94,116040,116042],{"className":30368,"code":116041,"language":30370,"meta":24,"style":24},"self.steps = 0\nreturn self._get_obs(), {}\n",[100,116043,116044,116054],{"__ignoreMap":24},[103,116045,116046,116048,116050,116052],{"class":105,"line":106},[103,116047,30813],{"class":162},[103,116049,113696],{"class":113},[103,116051,159],{"class":109},[103,116053,47323],{"class":162},[103,116055,116056,116058,116060],{"class":105,"line":25},[103,116057,17036],{"class":109},[103,116059,38863],{"class":162},[103,116061,114666],{"class":113},[14,116063,116064],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[94,116066,116067],{"className":30368,"code":115340,"language":30370,"meta":24,"style":24},[100,116068,116069],{"__ignoreMap":24},[103,116070,116071,116073,116075],{"class":105,"line":106},[103,116072,31937],{"class":109},[103,116074,114677],{"class":1952},[103,116076,114680],{"class":113},[14,116078,116079],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[94,116081,116083],{"className":30368,"code":116082,"language":30370,"meta":24,"style":24},"action = np.asarray(action, dtype=np.float32)\n",[100,116084,116085],{"__ignoreMap":24},[103,116086,116087,116089,116091,116093,116095,116097],{"class":105,"line":106},[103,116088,107432],{"class":113},[103,116090,159],{"class":109},[103,116092,114689],{"class":113},[103,116094,93490],{"class":5206},[103,116096,159],{"class":109},[103,116098,113786],{"class":113},[14,116100,116101,116102,28375],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[100,116103,115867],{},[94,116105,116107],{"className":30368,"code":116106,"language":30370,"meta":24,"style":24},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[100,116108,116109],{"__ignoreMap":24},[103,116110,116111,116113,116115,116117,116119,116121,116123],{"class":105,"line":106},[103,116112,107432],{"class":113},[103,116114,159],{"class":109},[103,116116,107437],{"class":113},[103,116118,30813],{"class":162},[103,116120,114708],{"class":113},[103,116122,30813],{"class":162},[103,116124,114713],{"class":113},[14,116126,116127],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[94,116129,116131],{"className":30368,"code":116130,"language":30370,"meta":24,"style":24},"self.data.ctrl[:] = action\n",[100,116132,116133],{"__ignoreMap":24},[103,116134,116135,116137,116139,116141],{"class":105,"line":106},[103,116136,30813],{"class":162},[103,116138,114724],{"class":113},[103,116140,159],{"class":109},[103,116142,107460],{"class":113},[14,116144,116145],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[94,116147,116149],{"className":30368,"code":116148,"language":30370,"meta":24,"style":24},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[100,116150,116151,116167],{"__ignoreMap":24},[103,116152,116153,116155,116157,116159,116161,116163,116165],{"class":105,"line":106},[103,116154,3014],{"class":109},[103,116156,101491],{"class":113},[103,116158,26033],{"class":109},[103,116160,32433],{"class":162},[103,116162,114],{"class":113},[103,116164,30813],{"class":162},[103,116166,114745],{"class":113},[103,116168,116169,116172,116174,116176,116178],{"class":105,"line":25},[103,116170,116171],{"class":113},"    mujoco.mj_step(",[103,116173,30813],{"class":162},[103,116175,114571],{"class":113},[103,116177,30813],{"class":162},[103,116179,114576],{"class":113},[14,116181,116182,116183,116186,116187,116189,116190,28375],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[100,116184,116185],{},"frame_skip=5","，所以外部调用一次 ",[100,116188,113867],{},"，内部实际执行 5 次 ",[100,116191,101205],{},[94,116193,116195],{"className":30368,"code":116194,"language":30370,"meta":24,"style":24},"self.steps += 1\n",[100,116196,116197],{"__ignoreMap":24},[103,116198,116199,116201,116203,116205],{"class":105,"line":106},[103,116200,30813],{"class":162},[103,116202,113696],{"class":113},[103,116204,9467],{"class":109},[103,116206,55689],{"class":162},[14,116208,116209],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[94,116211,116213],{"className":30368,"code":116212,"language":30370,"meta":24,"style":24},"obs = self._get_obs()\nreward = self._get_reward()\n",[100,116214,116215,116225],{"__ignoreMap":24},[103,116216,116217,116219,116221,116223],{"class":105,"line":106},[103,116218,110844],{"class":113},[103,116220,159],{"class":109},[103,116222,38863],{"class":162},[103,116224,114787],{"class":113},[103,116226,116227,116229,116231,116233],{"class":105,"line":25},[103,116228,110995],{"class":113},[103,116230,159],{"class":109},[103,116232,38863],{"class":162},[103,116234,114798],{"class":113},[14,116236,116237],{},"计算新的观测和奖励。",[94,116239,116241],{"className":30368,"code":116240,"language":30370,"meta":24,"style":24},"dist = float(np.linalg.norm(tip - target))\n",[100,116242,116243],{"__ignoreMap":24},[103,116244,116245,116247,116249,116251,116253,116255],{"class":105,"line":106},[103,116246,111586],{"class":113},[103,116248,159],{"class":109},[103,116250,109787],{"class":162},[103,116252,114841],{"class":113},[103,116254,645],{"class":109},[103,116256,114846],{"class":113},[14,116258,116259],{},"计算末端到目标的距离，并转换成 Python float。",[94,116261,116262],{"className":30368,"code":113667,"language":30370,"meta":24,"style":24},[100,116263,116264,116276],{"__ignoreMap":24},[103,116265,116266,116268,116270,116272,116274],{"class":105,"line":106},[103,116267,113674],{"class":113},[103,116269,159],{"class":109},[103,116271,113679],{"class":113},[103,116273,1023],{"class":109},[103,116275,113684],{"class":162},[103,116277,116278,116280,116282,116284,116286,116288,116290],{"class":105,"line":25},[103,116279,113689],{"class":113},[103,116281,159],{"class":109},[103,116283,38863],{"class":162},[103,116285,113696],{"class":113},[103,116287,1699],{"class":109},[103,116289,38863],{"class":162},[103,116291,113703],{"class":113},[14,116293,116294],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[94,116296,116298],{"className":30368,"code":116297,"language":30370,"meta":24,"style":24},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[100,116299,116300,116313],{"__ignoreMap":24},[103,116301,116302,116305,116307,116309,116311],{"class":105,"line":106},[103,116303,116304],{"class":113},"info ",[103,116306,159],{"class":109},[103,116308,4437],{"class":113},[103,116310,114892],{"class":218},[103,116312,114895],{"class":113},[103,116314,116315,116317],{"class":105,"line":25},[103,116316,17036],{"class":109},[103,116318,114902],{"class":113},[14,116320,116321,116324],{},[100,116322,116323],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[94,116326,116328],{"className":30368,"code":116327,"language":30370,"meta":24,"style":24},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[100,116329,116330,116339],{"__ignoreMap":24},[103,116331,116332,116335,116337],{"class":105,"line":106},[103,116333,116334],{"class":113},"env ",[103,116336,159],{"class":109},[103,116338,114932],{"class":113},[103,116340,116341,116343,116345,116347,116349,116351,116353],{"class":105,"line":25},[103,116342,113390],{"class":113},[103,116344,159],{"class":109},[103,116346,114942],{"class":113},[103,116348,114556],{"class":5206},[103,116350,159],{"class":109},[103,116352,305],{"class":162},[103,116354,120],{"class":113},[14,116356,116357,116358,116361],{},"创建环境并重置。",[100,116359,116360],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[94,116363,116365],{"className":30368,"code":116364,"language":30370,"meta":24,"style":24},"action = env.action_space.sample()\n",[100,116366,116367],{"__ignoreMap":24},[103,116368,116369,116371,116373],{"class":105,"line":106},[103,116370,107432],{"class":113},[103,116372,159],{"class":109},[103,116374,115011],{"class":113},[14,116376,116377],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[45,116379,102306],{"id":102305},[14,116381,105474],{},[94,116383,116386],{"className":116384,"code":116385,"language":5177,"meta":24},[5175],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[100,116387,116385],{"__ignoreMap":24},[14,116389,116390],{},"这个环境已经具备强化学习环境的基本结构。",[14,116392,116393],{},"主函数里使用随机动作：",[94,116395,116396],{"className":30368,"code":116364,"language":30370,"meta":24,"style":24},[100,116397,116398],{"__ignoreMap":24},[103,116399,116400,116402,116404],{"class":105,"line":106},[103,116401,107432],{"class":113},[103,116403,159],{"class":109},[103,116405,115011],{"class":113},[14,116407,116408],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[45,116410,102338],{"id":102337},[57,116412,116413,116416,116422,116431,116440,116449,116455],{},[60,116414,116415],{},"运行程序。",[60,116417,116418,116419,28375],{},"确认 ",[100,116420,116421],{},"obs.shape == (10,)",[60,116423,111171,116424,116427,116428,28375],{},[100,116425,116426],{},"env.action_space","，应类似 ",[100,116429,116430],{},"Box(-1.0, 1.0, (2,), float32)",[60,116432,105575,116433,116436,116437,28375],{},[100,116434,116435],{},"self.max_steps = 10","，确认环境会更快 ",[100,116438,116439],{},"truncated=True",[60,116441,102401,116442,102404,116445,116448],{},[100,116443,116444],{},"terminated = dist \u003C 0.05",[100,116446,116447],{},"dist \u003C 0.2","，观察是否更容易结束。",[60,116450,102401,116451,116454],{},[100,116452,116453],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[60,116456,116457,116458,116460,116461,116464],{},"在 ",[100,116459,116323],{}," 里加入 ",[100,116462,116463],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[45,116466,102443],{"id":102442},[74,116468,116470],{"id":116469},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116472,116473,116474,116476],{},"Gymnasium 的 ",[100,116475,107124],{}," 返回 5 个值:",[94,116478,116480],{"className":30368,"code":116479,"language":30370,"meta":24,"style":24},"obs, reward, terminated, truncated, info\n",[100,116481,116482],{"__ignoreMap":24},[103,116483,116484],{"class":105,"line":106},[103,116485,116479],{"class":113},[14,116487,116488],{},"不是旧 Gym 的 4 个值。",[74,116490,116492,116495],{"id":116491},"datactrl-action-维度错误",[100,116493,116494],{},"data.ctrl[:] = action"," 维度错误",[14,116497,102513],{},[94,116499,116501],{"className":30368,"code":116500,"language":30370,"meta":24,"style":24},"print(self.model.nu)\nprint(action.shape)\n",[100,116502,116503,116514],{"__ignoreMap":24},[103,116504,116505,116507,116509,116511],{"class":105,"line":106},[103,116506,30405],{"class":162},[103,116508,114],{"class":113},[103,116510,30813],{"class":162},[103,116512,116513],{"class":113},".model.nu)\n",[103,116515,116516,116518],{"class":105,"line":25},[103,116517,30405],{"class":162},[103,116519,116520],{"class":113},"(action.shape)\n",[14,116522,116523],{},"两者必须匹配。",[74,116525,116527],{"id":116526},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116529,102452],{},[94,116531,116533],{"className":30368,"code":116532,"language":30370,"meta":24,"style":24},"mujoco.mj_forward(self.model, self.data)\n",[100,116534,116535],{"__ignoreMap":24},[103,116536,116537,116540,116542,116544,116546],{"class":105,"line":106},[103,116538,116539],{"class":113},"mujoco.mj_forward(",[103,116541,30813],{"class":162},[103,116543,114571],{"class":113},[103,116545,30813],{"class":162},[103,116547,114576],{"class":113},[74,116549,116551,116553],{"id":116550},"observation_space-维度和-obs-不一致",[100,116552,113590],{}," 维度和 obs 不一致",[14,116555,102565],{},[94,116557,116559],{"className":30368,"code":116558,"language":30370,"meta":24,"style":24},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[100,116560,116561,116571,116578],{"__ignoreMap":24},[103,116562,116563,116565,116567,116569],{"class":105,"line":106},[103,116564,110844],{"class":113},[103,116566,159],{"class":109},[103,116568,38863],{"class":162},[103,116570,114787],{"class":113},[103,116572,116573,116575],{"class":105,"line":25},[103,116574,30405],{"class":162},[103,116576,116577],{"class":113},"(obs.shape)\n",[103,116579,116580,116582,116584,116586],{"class":105,"line":1168},[103,116581,30405],{"class":162},[103,116583,114],{"class":113},[103,116585,30813],{"class":162},[103,116587,116588],{"class":113},".observation_space.shape)\n",[14,116590,116591],{},"两者必须一致。本章观测是：",[94,116593,116596],{"className":116594,"code":116595,"language":5177,"meta":24},[5175],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[100,116597,116595],{"__ignoreMap":24},[74,116599,116601],{"id":116600},"action-超过范围","action 超过范围",[14,116603,116604],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[94,116606,116607],{"className":30368,"code":116106,"language":30370,"meta":24,"style":24},[100,116608,116609],{"__ignoreMap":24},[103,116610,116611,116613,116615,116617,116619,116621,116623],{"class":105,"line":106},[103,116612,107432],{"class":113},[103,116614,159],{"class":109},[103,116616,107437],{"class":113},[103,116618,30813],{"class":162},[103,116620,114708],{"class":113},[103,116622,30813],{"class":162},[103,116624,114713],{"class":113},[14,116626,116627,116628,28375],{},"这能避免无效动作直接写入 ",[100,116629,101066],{},[74,116631,116633],{"id":116632},"忘记返回-info","忘记返回 info",[14,116635,116473,116636,101008,116638,116640],{},[100,116637,70046],{},[100,116639,107124],{}," 都会返回 info：",[94,116642,116643],{"className":30368,"code":113383,"language":30370,"meta":24,"style":24},[100,116644,116645,116653],{"__ignoreMap":24},[103,116646,116647,116649,116651],{"class":105,"line":106},[103,116648,113390],{"class":113},[103,116650,159],{"class":109},[103,116652,113395],{"class":113},[103,116654,116655,116657,116659],{"class":105,"line":25},[103,116656,113400],{"class":113},[103,116658,159],{"class":109},[103,116660,113405],{"class":113},[14,116662,116663,116664,28375],{},"即使暂时没有额外信息，也返回 ",[100,116665,32449],{},[45,116667,116669],{"id":116668},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116671,116672],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[57,116674,116675,116678,116681,116684,116687,116690],{},[60,116676,116677],{},"更稳定的 reward。",[60,116679,116680],{},"合理的 episode 长度。",[60,116682,116683],{},"可重复的随机目标采样。",[60,116685,116686],{},"render 接口。",[60,116688,116689],{},"环境注册代码。",[60,116691,116692],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116694,116695],{},"如果只是自己写训练循环，最小形式是：",[94,116697,116699],{"className":30368,"code":116698,"language":30370,"meta":24,"style":24},"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",[100,116700,116701,116709,116725,116729,116745,116754,116763,116773],{"__ignoreMap":24},[103,116702,116703,116705,116707],{"class":105,"line":106},[103,116704,116334],{"class":113},[103,116706,159],{"class":109},[103,116708,114932],{"class":113},[103,116710,116711,116713,116715,116717,116719,116721,116723],{"class":105,"line":25},[103,116712,113390],{"class":113},[103,116714,159],{"class":109},[103,116716,114942],{"class":113},[103,116718,114556],{"class":5206},[103,116720,159],{"class":109},[103,116722,305],{"class":162},[103,116724,120],{"class":113},[103,116726,116727],{"class":105,"line":1168},[103,116728,2389],{"emptyLinePlaceholder":30},[103,116730,116731,116733,116735,116737,116739,116741,116743],{"class":105,"line":1183},[103,116732,3014],{"class":109},[103,116734,101491],{"class":113},[103,116736,26033],{"class":109},[103,116738,32433],{"class":162},[103,116740,114],{"class":113},[103,116742,6400],{"class":162},[103,116744,30776],{"class":113},[103,116746,116747,116750,116752],{"class":105,"line":1189},[103,116748,116749],{"class":113},"    action ",[103,116751,159],{"class":109},[103,116753,115011],{"class":113},[103,116755,116756,116759,116761],{"class":105,"line":1203},[103,116757,116758],{"class":113},"    obs, reward, terminated, truncated, info ",[103,116760,159],{"class":109},[103,116762,113405],{"class":113},[103,116764,116765,116767,116769,116771],{"class":105,"line":1209},[103,116766,3090],{"class":109},[103,116768,115077],{"class":113},[103,116770,115080],{"class":109},[103,116772,115083],{"class":113},[103,116774,116775,116778,116780],{"class":105,"line":1300},[103,116776,116777],{"class":113},"        obs, info ",[103,116779,159],{"class":109},[103,116781,113395],{"class":113},[45,116783,116785],{"id":116784},"_9本章小结","9.本章小结",[14,116787,116788],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[94,116790,116793],{"className":116791,"code":116792,"language":5177,"meta":24},[5175],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[100,116794,116792],{"__ignoreMap":24},[14,116796,116797],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5116,116799,116800],{},"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":24,"searchDepth":25,"depth":25,"links":116802},[116803,116804,116805,116812,116816,116817,116818,116828,116829],{"id":100636,"depth":25,"text":100637},{"id":100759,"depth":25,"text":100760},{"id":101034,"depth":25,"text":101035,"children":116806},[116807,116809,116811],{"id":113614,"depth":1168,"text":116808},"terminated 和 truncated 的区别",{"id":113717,"depth":1168,"text":116810},"observation_space 和 action_space",{"id":113844,"depth":1168,"text":113845},{"id":101242,"depth":25,"text":101243,"children":116813},[116814,116815],{"id":101562,"depth":1168,"text":101562},{"id":101698,"depth":1168,"text":101698},{"id":102305,"depth":25,"text":102306},{"id":102337,"depth":25,"text":102338},{"id":102442,"depth":25,"text":102443,"children":116819},[116820,116821,116823,116824,116826,116827],{"id":116469,"depth":1168,"text":116470},{"id":116491,"depth":1168,"text":116822},"data.ctrl[:] = action 维度错误",{"id":116526,"depth":1168,"text":116527},{"id":116550,"depth":1168,"text":116825},"observation_space 维度和 obs 不一致",{"id":116600,"depth":1168,"text":116601},{"id":116632,"depth":1168,"text":116633},{"id":116668,"depth":25,"text":116669},{"id":116784,"depth":25,"text":116785},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113367,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116836,"title":116837,"body":116838,"description":117261,"extension":28,"meta":117262,"navigation":30,"path":117263,"seo":117264,"stem":117265,"__hash__":117266},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116839,"toc":117251},[116840,116844,116847,116850,116870,116876,116882,116892,116895,116898,116918,116921,116925,116928,116934,116937,116951,116954,116957,117031,117034,117040,117043,117066,117069,117119,117122,117128,117131,117134,117137,117156,117159,117165,117168,117171,117174,117194,117197,117200,117203,117248],[10,116841,116843],{"id":116842},"mujoco-学习","MuJoCo 学习",[14,116845,116846],{},"初版",[14,116848,116849],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[57,116851,116852,116855,116858,116867],{},[60,116853,116854],{},"MuJoCo 模型文件在描述什么。",[60,116856,116857],{},"Python 代码怎样读取和推进仿真。",[60,116859,116860,326,116862,326,116864,116866],{},[100,116861,104020],{},[100,116863,104350],{},[100,116865,104353],{}," 这些数组为什么重要。",[60,116868,116869],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116871,116872,116873,116875],{},"默认环境为 Fedora 44、Python >= 3.10、",[100,116874,101017],{}," 官方 Python bindings。",[14,116877,116878,116879,116881],{},"注意：本文禁止使用 ",[100,116880,101002],{},"。所有示例均使用：",[94,116883,116884],{"className":30368,"code":101568,"language":30370,"meta":24,"style":24},[100,116885,116886],{"__ignoreMap":24},[103,116887,116888,116890],{"class":105,"line":106},[103,116889,30382],{"class":109},[103,116891,101291],{"class":113},[45,116893,116894],{"id":116894},"适合谁阅读",[14,116896,116897],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[57,116899,116900,116903,116906,116909],{},[60,116901,116902],{},"没学过 MuJoCo，只会一点 Python。",[60,116904,116905],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[60,116907,116908],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[60,116910,116911,116912,116914,116915,116917],{},"以前接触过 ",[100,116913,101002],{},"，现在想迁移到官方 ",[100,116916,101011],{}," Python bindings。",[14,116919,116920],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[45,116922,116924],{"id":116923},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116926,116927],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[94,116929,116932],{"className":116930,"code":116931,"language":5177,"meta":24},[5175],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[100,116933,116931],{"__ignoreMap":24},[14,116935,116936],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[57,116938,116939,116942,116945,116948],{},[60,116940,116941],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[60,116943,116944],{},"快速测试控制算法，不必一开始就上真实机器人。",[60,116946,116947],{},"生成强化学习环境。",[60,116949,116950],{},"采集状态、动作、图像、奖励等训练数据。",[45,116952,116953],{"id":116953},"学习前的心智模型",[14,116955,116956],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[251,116958,116959,116971],{},[254,116960,116961],{},[257,116962,116963,116966,116969],{},[260,116964,116965],{"align":23726},"部分",[260,116967,116968],{"align":23726},"负责什么",[260,116970,21177],{"align":23726},[298,116972,116973,116984,116996,117008,117020],{},[257,116974,116975,116978,116981],{},[303,116976,116977],{"align":23726},"MJCF XML",[303,116979,116980],{"align":23726},"定义世界和机器人结构",[303,116982,116983],{"align":23726},"地面、盒子、关节、电机、摄像头",[257,116985,116986,116990,116993],{},[303,116987,116988],{"align":23726},[100,116989,100699],{},[303,116991,116992],{"align":23726},"编译后的静态模型",[303,116994,116995],{"align":23726},"有几个关节、有几个电机、时间步长是多少",[257,116997,116998,117002,117005],{},[303,116999,117000],{"align":23726},[100,117001,100709],{},[303,117003,117004],{"align":23726},"运行中的动态状态",[303,117006,117007],{"align":23726},"当前时间、位置、速度、电机输入",[257,117009,117010,117014,117017],{},[303,117011,117012],{"align":23726},[100,117013,101205],{},[303,117015,117016],{"align":23726},"推进一步物理仿真",[303,117018,117019],{"align":23726},"根据重力、力、碰撞更新状态",[257,117021,117022,117025,117028],{},[303,117023,117024],{"align":23726},"Viewer \u002F Renderer",[303,117026,117027],{"align":23726},"把仿真显示出来",[303,117029,117030],{"align":23726},"打开窗口或保存图片",[14,117032,117033],{},"一句话总结：",[94,117035,117038],{"className":117036,"code":117037,"language":5177,"meta":24},[5175],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[100,117039,117037],{"__ignoreMap":24},[14,117041,117042],{},"参考来源：",[1120,117044,117045,117052,117059],{},[60,117046,117047,117048],{},"MuJoCo Python 官方文档：",[17,117049,117050],{"href":117050,"rel":117051},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[21],[60,117053,117054,117055],{},"MuJoCo XML Reference：",[17,117056,117057],{"href":117057,"rel":117058},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[21],[60,117060,117061,117062],{},"MuJoCo Overview：",[17,117063,117064],{"href":117064,"rel":117065},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[21],[45,117067,117068],{"id":117068},"章节目录",[57,117070,117071,117077,117083,117089,117095,117101,117107,117113],{},[60,117072,117073],{},[17,117074,117076],{"href":117075},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[60,117078,117079],{},[17,117080,117082],{"href":117081},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[60,117084,117085],{},[17,117086,117088],{"href":117087},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[60,117090,117091],{},[17,117092,117094],{"href":117093},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[60,117096,117097],{},[17,117098,117100],{"href":117099},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[60,117102,117103],{},[17,117104,117106],{"href":117105},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[60,117108,117109],{},[17,117110,117112],{"href":117111},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[60,117114,117115],{},[17,117116,117118],{"href":117117},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[45,117120,117121],{"id":117121},"推荐学习路线",[94,117123,117126],{"className":117124,"code":117125,"language":5177,"meta":24},[5175],"环境安装\n→ XML \u002F MJCF 建模\n→ MjModel \u002F MjData\n→ mj_step 控制循环\n→ joint \u002F actuator\n→ viewer \u002F renderer\n→ cartpole \u002F reacher\n→ Gymnasium 环境接口\n→ imitation learning \u002F VLA 数据采集\n",[100,117127,117125],{"__ignoreMap":24},[14,117129,117130],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[45,117132,117133],{"id":117133},"建议的目录结构",[14,117135,117136],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[94,117138,117140],{"className":23812,"code":117139,"language":23814,"meta":24,"style":24},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[100,117141,117142,117150],{"__ignoreMap":24},[103,117143,117144,117146,117148],{"class":105,"line":106},[103,117145,101256],{"class":1952},[103,117147,29206],{"class":162},[103,117149,101261],{"class":218},[103,117151,117152,117154],{"class":105,"line":25},[103,117153,101266],{"class":162},[103,117155,101261],{"class":218},[14,117157,117158],{},"每一章的代码都单独保存：",[94,117160,117163],{"className":117161,"code":117162,"language":5177,"meta":24},[5175],"mujoco_tutorial\u002F\n├── ch1_first_sim.py\n├── ch2_xml_basic.py\n├── ch3_python_state.py\n├── ch4_joint_motor.py\n├── ch5_viewer.py\n├── ch5_renderer.py\n├── ch6_cartpole.py\n├── ch7_reacher.py\n└── ch8_gym_env.py\n",[100,117164,117162],{"__ignoreMap":24},[14,117166,117167],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[45,117169,117170],{"id":117170},"学习方法",[14,117172,117173],{},"每章建议按这个顺序操作：",[57,117175,117176,117179,117182,117185,117188,117191],{},[60,117177,117178],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[60,117180,117181],{},"复制最小可运行代码，保存成指定文件。",[60,117183,117184],{},"运行代码，确认没有报错。",[60,117186,117187],{},"对照“运行结果说明”理解输出。",[60,117189,117190],{},"做“验证步骤”，主动改一两个参数。",[60,117192,117193],{},"遇到报错先看“常见错误与解决方案”。",[14,117195,117196],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[45,117198,117199],{"id":117199},"全局排错顺序",[14,117201,117202],{},"遇到问题时，按下面顺序查：",[57,117204,117205,117211,117217,117222,117225,117228,117235,117245],{},[60,117206,117207,117208],{},"Python 环境是否激活：",[100,117209,117210],{},"which python",[60,117212,117213,117214],{},"MuJoCo 是否能导入：",[100,117215,117216],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[60,117218,117219,117220],{},"是否误装了 ",[100,117221,101002],{},[60,117223,117224],{},"XML 标签是否闭合、属性是否拼写正确",[60,117226,117227],{},"actuator 引用的 joint 名字是否存在",[60,117229,117230,117232,117233],{},[100,117231,101066],{}," 的长度是否等于 ",[100,117234,102148],{},[60,117236,105575,117237,82529,117239,117241,117242],{},[100,117238,104020],{},[100,117240,104350],{}," 后是否调用了 ",[100,117243,117244],{},"mujoco.mj_forward",[60,117246,117247],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5116,117249,117250],{},"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":24,"searchDepth":25,"depth":25,"links":117252},[117253,117254,117255,117256,117257,117258,117259,117260],{"id":116894,"depth":25,"text":116894},{"id":116923,"depth":25,"text":116924},{"id":116953,"depth":25,"text":116953},{"id":117068,"depth":25,"text":117068},{"id":117121,"depth":25,"text":117121},{"id":117133,"depth":25,"text":117133},{"id":117170,"depth":25,"text":117170},{"id":117199,"depth":25,"text":117199},"仿真搭建。",{"category":23368},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116837,"description":117261},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117268,"title":117269,"body":117270,"description":27,"extension":28,"meta":117725,"navigation":30,"path":117726,"seo":117727,"stem":117728,"__hash__":117729},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117271,"toc":117723},[117272,117275,117278,117284,117720],[10,117273,117269],{"id":117274},"_1-最常用的基本操作更新",[14,117276,117277],{},"装linux系统教程：",[14,117279,117280],{},[17,117281,117282],{"href":117282,"rel":117283},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[21],[94,117285,117289],{"className":117286,"code":117287,"language":117288,"meta":24,"style":24},"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",[100,117290,117291,117296,117301,117310,117315,117324,117329,117349,117354,117365,117370,117379,117384,117412,117417,117436,117441,117460,117464,117469,117485,117489,117494,117524,117528,117533,117549,117553,117558,117573,117577,117582,117598,117602,117607,117619,117631,117635,117640,117657,117661,117666,117684,117688,117693,117702,117706,117711],{"__ignoreMap":24},[103,117292,117293],{"class":105,"line":106},[103,117294,117295],{"class":172},"#更新相关的知识\n",[103,117297,117298],{"class":105,"line":25},[103,117299,117300],{"class":172},"# 更新软件包列表（从服务器获取最新软件信息）\n",[103,117302,117303,117305,117308],{"class":105,"line":1168},[103,117304,24566],{"class":1952},[103,117306,117307],{"class":218}," apt",[103,117309,26232],{"class":218},[103,117311,117312],{"class":105,"line":1183},[103,117313,117314],{"class":172},"# 升级所有可更新的软件包（不删除旧包）\n",[103,117316,117317,117319,117321],{"class":105,"line":1189},[103,117318,24566],{"class":1952},[103,117320,117307],{"class":218},[103,117322,117323],{"class":218}," upgrade\n",[103,117325,117326],{"class":105,"line":1203},[103,117327,117328],{"class":172},"#更新和升级软件包\n",[103,117330,117331,117333,117335,117338,117340,117342,117344,117347],{"class":105,"line":1209},[103,117332,24566],{"class":1952},[103,117334,117307],{"class":218},[103,117336,117337],{"class":218}," update",[103,117339,26180],{"class":113},[103,117341,24566],{"class":1952},[103,117343,117307],{"class":218},[103,117345,117346],{"class":218}," upgrade",[103,117348,100971],{"class":162},[103,117350,117351],{"class":105,"line":1300},[103,117352,117353],{"class":172},"#列出可更新的软件包及版本信息\n",[103,117355,117356,117359,117362],{"class":105,"line":1306},[103,117357,117358],{"class":1952},"apt",[103,117360,117361],{"class":218}," list",[103,117363,117364],{"class":162}," --upgradable\n",[103,117366,117367],{"class":105,"line":1318},[103,117368,117369],{"class":172},"#彻底升级（处理依赖关系，可能删除旧包）\n",[103,117371,117372,117374,117376],{"class":105,"line":1601},[103,117373,24566],{"class":1952},[103,117375,117307],{"class":218},[103,117377,117378],{"class":218}," full-upgrade\n",[103,117380,117381],{"class":105,"line":1606},[103,117382,117383],{"class":172},"#设置指定版本\n",[103,117385,117386,117388,117390,117392,117394,117397,117399,117401,117403,117405,117408,117410],{"class":105,"line":1612},[103,117387,24566],{"class":1952},[103,117389,117307],{"class":218},[103,117391,23824],{"class":218},[103,117393,28892],{"class":109},[103,117395,117396],{"class":218},"package_nam",[103,117398,188],{"class":113},[103,117400,1073],{"class":109},[103,117402,159],{"class":218},[103,117404,1023],{"class":109},[103,117406,117407],{"class":218},"version_numbe",[103,117409,783],{"class":113},[103,117411,51297],{"class":109},[103,117413,117414],{"class":105,"line":1617},[103,117415,117416],{"class":172},"#只安装软件包不升级\n",[103,117418,117419,117421,117423,117425,117427,117429,117431,117433],{"class":105,"line":1631},[103,117420,24566],{"class":1952},[103,117422,117307],{"class":218},[103,117424,23824],{"class":218},[103,117426,28892],{"class":109},[103,117428,117396],{"class":218},[103,117430,188],{"class":113},[103,117432,1073],{"class":109},[103,117434,117435],{"class":162}," --no-upgrade\n",[103,117437,117438],{"class":105,"line":1636},[103,117439,117440],{"class":172},"#只升级，不存在就不安装\n",[103,117442,117443,117445,117447,117449,117451,117453,117455,117457],{"class":105,"line":1642},[103,117444,24566],{"class":1952},[103,117446,117307],{"class":218},[103,117448,23824],{"class":218},[103,117450,28892],{"class":109},[103,117452,117396],{"class":218},[103,117454,188],{"class":113},[103,117456,1073],{"class":109},[103,117458,117459],{"class":162}," --only-upgrade\n",[103,117461,117462],{"class":105,"line":1663},[103,117463,2389],{"emptyLinePlaceholder":30},[103,117465,117466],{"class":105,"line":1668},[103,117467,117468],{"class":172},"#安装指定的软件命令\n",[103,117470,117471,117473,117475,117477,117479,117481,117483],{"class":105,"line":1682},[103,117472,24566],{"class":1952},[103,117474,117307],{"class":218},[103,117476,23824],{"class":218},[103,117478,28892],{"class":109},[103,117480,117396],{"class":218},[103,117482,188],{"class":113},[103,117484,51297],{"class":109},[103,117486,117487],{"class":105,"line":1687},[103,117488,2389],{"emptyLinePlaceholder":30},[103,117490,117491],{"class":105,"line":1716},[103,117492,117493],{"class":172},"#安装多个软件包\n",[103,117495,117496,117498,117500,117502,117504,117507,117510,117512,117514,117517,117519,117521],{"class":105,"line":1721},[103,117497,24566],{"class":1952},[103,117499,117307],{"class":218},[103,117501,23824],{"class":218},[103,117503,28892],{"class":109},[103,117505,117506],{"class":218},"package_",[103,117508,117509],{"class":109},"1>",[103,117511,28892],{"class":109},[103,117513,117506],{"class":218},[103,117515,117516],{"class":109},"2>",[103,117518,28892],{"class":109},[103,117520,117506],{"class":218},[103,117522,117523],{"class":109},"3>\n",[103,117525,117526],{"class":105,"line":1738},[103,117527,2389],{"emptyLinePlaceholder":30},[103,117529,117530],{"class":105,"line":1743},[103,117531,117532],{"class":172},"#更新指定的软件命令\n",[103,117534,117535,117537,117539,117541,117543,117545,117547],{"class":105,"line":1748},[103,117536,24566],{"class":1952},[103,117538,117307],{"class":218},[103,117540,117337],{"class":218},[103,117542,28892],{"class":109},[103,117544,117396],{"class":218},[103,117546,188],{"class":113},[103,117548,51297],{"class":109},[103,117550,117551],{"class":105,"line":1753},[103,117552,2389],{"emptyLinePlaceholder":30},[103,117554,117555],{"class":105,"line":1767},[103,117556,117557],{"class":172},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[103,117559,117560,117562,117565,117567,117569,117571],{"class":105,"line":1772},[103,117561,117358],{"class":1952},[103,117563,117564],{"class":218}," show",[103,117566,28892],{"class":109},[103,117568,117396],{"class":218},[103,117570,188],{"class":113},[103,117572,51297],{"class":109},[103,117574,117575],{"class":105,"line":2566},[103,117576,2389],{"emptyLinePlaceholder":30},[103,117578,117579],{"class":105,"line":2580},[103,117580,117581],{"class":172},"#删除软件包命令\n",[103,117583,117584,117586,117588,117590,117592,117594,117596],{"class":105,"line":2588},[103,117585,24566],{"class":1952},[103,117587,117307],{"class":218},[103,117589,26069],{"class":218},[103,117591,28892],{"class":109},[103,117593,117396],{"class":218},[103,117595,188],{"class":113},[103,117597,51297],{"class":109},[103,117599,117600],{"class":105,"line":2593},[103,117601,2389],{"emptyLinePlaceholder":30},[103,117603,117604],{"class":105,"line":2599},[103,117605,117606],{"class":172},"# 清理旧版本和缓存（释放磁盘空间）\n",[103,117608,117609,117611,117613,117616],{"class":105,"line":2605},[103,117610,24566],{"class":1952},[103,117612,117307],{"class":218},[103,117614,117615],{"class":218}," autoremove",[103,117617,117618],{"class":172},"  # 删除不再需要的依赖和库文件\n",[103,117620,117621,117623,117625,117628],{"class":105,"line":2610},[103,117622,24566],{"class":1952},[103,117624,117307],{"class":218},[103,117626,117627],{"class":218}," clean",[103,117629,117630],{"class":172},"       # 清理下载的缓存包\n",[103,117632,117633],{"class":105,"line":7938},[103,117634,2389],{"emptyLinePlaceholder":30},[103,117636,117637],{"class":105,"line":7962},[103,117638,117639],{"class":172},"#移除软件包及配置文件\n",[103,117641,117642,117644,117646,117649,117651,117653,117655],{"class":105,"line":7967},[103,117643,24566],{"class":1952},[103,117645,117307],{"class":218},[103,117647,117648],{"class":218}," purge",[103,117650,28892],{"class":109},[103,117652,117396],{"class":218},[103,117654,188],{"class":113},[103,117656,51297],{"class":109},[103,117658,117659],{"class":105,"line":7973},[103,117660,2389],{"emptyLinePlaceholder":30},[103,117662,117663],{"class":105,"line":8000},[103,117664,117665],{"class":172},"#查找软件包命令\n",[103,117667,117668,117670,117672,117675,117677,117680,117682],{"class":105,"line":8005},[103,117669,24566],{"class":1952},[103,117671,117307],{"class":218},[103,117673,117674],{"class":218}," search",[103,117676,28892],{"class":109},[103,117678,117679],{"class":218},"keywor",[103,117681,427],{"class":113},[103,117683,51297],{"class":109},[103,117685,117686],{"class":105,"line":8011},[103,117687,2389],{"emptyLinePlaceholder":30},[103,117689,117690],{"class":105,"line":8023},[103,117691,117692],{"class":172},"#列出所有已安装的包\n",[103,117694,117695,117697,117699],{"class":105,"line":8035},[103,117696,117358],{"class":1952},[103,117698,117361],{"class":218},[103,117700,117701],{"class":162}," --installed\n",[103,117703,117704],{"class":105,"line":8047},[103,117705,2389],{"emptyLinePlaceholder":30},[103,117707,117708],{"class":105,"line":9706},[103,117709,117710],{"class":172},"#列出所有已安装的包的版本信息\n",[103,117712,117713,117715,117717],{"class":105,"line":9731},[103,117714,117358],{"class":1952},[103,117716,117361],{"class":218},[103,117718,117719],{"class":162}," --all-versions\n",[5116,117721,117722],{},"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":24,"searchDepth":25,"depth":25,"links":117724},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117269,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117731,"title":117732,"body":117733,"description":27,"extension":28,"meta":118474,"navigation":30,"path":118475,"seo":118476,"stem":118477,"__hash__":118478},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117734,"toc":118461},[117735,117738,117742,117745,117751,117755,117759,117765,117770,117775,117780,117785,117790,117793,117796,117799,117802,117806,117809,117814,117817,117822,117825,117830,117837,117840,117843,117846,117849,117852,117863,117867,117871,117876,117881,117885,117890,117894,117899,117903,117907,117912,117915,117960,117965,117969,117973,117978,117984,117989,117999,118004,118014,118019,118024,118051,118055,118058,118063,118066,118091,118095,118100,118103,118108,118113,118133,118138,118141,118156,118160,118213,118216,118221,118225,118228,118243,118246,118249,118254,118258,118262,118265,118269,118273,118276,118281,118286,118290,118297,118305,118308,118315,118320,118325,118328,118333,118340,118345,118352,118356,118358,118363,118367,118370,118373,118378,118381,118386,118389,118394,118399,118404,118408,118413,118417,118458],[10,117736,117732],{"id":117737},"_2-linux装机教程",[45,117739,117741],{"id":117740},"_21-实体机","2.1 实体机",[14,117743,117744],{},"使用清华源：（Ubuntu24.04）",[14,117746,117747],{},[17,117748,117749],{"href":117749,"rel":117750},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[21],[45,117752,117754],{"id":117753},"_22-普通虚拟机","2.2 普通虚拟机",[74,117756,117758],{"id":117757},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117760,117761],{},[17,117762,117763],{"href":117763,"rel":117764},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[21],[14,117766,117767],{},[1451,117768],{"alt":24,"src":117769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117771,117772],{},[1451,117773],{"alt":24,"src":117774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117776,117777],{},[1451,117778],{"alt":24,"src":117779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117781,117782],{},[1451,117783],{"alt":24,"src":117784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117786,117787],{},[1451,117788],{"alt":24,"src":117789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117791,117792],{},"内存4G（4096MB）；",[14,117794,117795],{},"CPU给4个核；",[14,117797,117798],{},"硬盘动态分配60G；",[14,117800,117801],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[74,117803,117805],{"id":117804},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117807,117808],{},"按照1.1的步骤下载Ubuntu",[14,117810,117811],{},[1451,117812],{"alt":24,"src":117813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117815,117816],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117818,117819],{},[1451,117820],{"alt":24,"src":117821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117823,117824],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117826,117827],{},[1451,117828],{"alt":24,"src":117829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117831,117832,117833,117836],{},"选择“正常安装”(找不到都用Alt+F7)， ",[263,117834,117835],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117838,117839],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117841,117842],{},"将改动写入磁盘吗 继续",[14,117844,117845],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117847,117848],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117850,117851],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117853,117854,117855,117858,117859,117862],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[263,117856,117857],{},"除了"," 选不发送系统信息与不升级之外， ",[263,117860,117861],{},"其它"," 都跳过或前进）",[74,117864,117866],{"id":117865},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21988,117868,117870],{"id":117869},"_2231-全屏","2.2.3.1 全屏",[14,117872,117873],{},[1451,117874],{"alt":24,"src":117875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117877,117878],{},[1451,117879],{"alt":24,"src":117880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[21988,117882,117884],{"id":117883},"_2232-文件交换","2.2.3.2 文件交换",[14,117886,117887],{},[1451,117888],{"alt":24,"src":117889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21988,117891,117893],{"id":117892},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117895,117896],{},[1451,117897],{"alt":24,"src":117898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[45,117900,117902],{"id":117901},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[74,117904,117906],{"id":117905},"_231-简介与优缺点","2.3.1 简介与优缺点",[57,117908,117909],{},[60,117910,117911],{},"什么情况下推荐？",[14,117913,117914],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[57,117916,117917],{"start":25},[60,117918,117919,117920],{},"优缺点：",[57,117921,117922,117952],{},[60,117923,117924,117925],{},"优点：",[57,117926,117927,117930,117937,117940,117943,117946,117949],{},[60,117928,117929],{},"WSL2是最好的Linux发行版;(bushi)",[60,117931,117932,117933,117936],{},"性能损耗极低。且比在Windows上跑深度性能 ",[263,117934,117935],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[60,117938,117939],{},"非常方便调用USB设备，可以USB直通;",[60,117941,117942],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[60,117944,117945],{},"非常方便Win与WSL2互相传文件等协同操作;",[60,117947,117948],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[60,117950,117951],{},"非常方便使用Windows的VScode远程开发;",[60,117953,117954,117955],{},"缺点：",[57,117956,117957],{},[60,117958,117959],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,117961,117962],{},[1451,117963],{"alt":24,"src":117964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[74,117966,117968],{"id":117967},"_232-安装教程","2.3.2 安装教程",[21988,117970,117972],{"id":117971},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[57,117974,117975],{},[60,117976,117977],{},"方法一(图形界面)",[14,117979,117980,117981,24608],{},"用Win+R输入",[100,117982,117983],{},"appwiz.cpl",[14,117985,117986],{},[1451,117987],{"alt":24,"src":117988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,117990,117991,117992,117995,117996,26463],{},"点击OK进入 ",[263,117993,117994],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[263,117997,117998],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118000,118001],{},[1451,118002],{"alt":24,"src":118003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118005,118006,118007,101008,118010,118013],{},"选择 ",[263,118008,118009],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[263,118011,118012],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118015,118016],{},[1451,118017],{"alt":24,"src":118018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[57,118020,118021],{"start":25},[60,118022,118023],{},"方法二(命令行)",[94,118025,118029],{"className":118026,"code":118027,"language":118028,"meta":24,"style":24},"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",[100,118030,118031,118036,118041,118046],{"__ignoreMap":24},[103,118032,118033],{"class":105,"line":106},[103,118034,118035],{},"# 开启 Linux 子系统\n",[103,118037,118038],{"class":105,"line":25},[103,118039,118040],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[103,118042,118043],{"class":105,"line":1168},[103,118044,118045],{},"# 开启虚拟机平台\n",[103,118047,118048],{"class":105,"line":1183},[103,118049,118050],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21988,118052,118054],{"id":118053},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118056,118057],{},"用管理员权限打开powershell",[14,118059,118060],{},[1451,118061],{"alt":24,"src":118062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118064,118065],{},"升级WSL并设置默认版本为WSL2",[94,118067,118069],{"className":118026,"code":118068,"language":118028,"meta":24,"style":24},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[100,118070,118071,118076,118081,118086],{"__ignoreMap":24},[103,118072,118073],{"class":105,"line":106},[103,118074,118075],{},"# 更新 wsl\n",[103,118077,118078],{"class":105,"line":25},[103,118079,118080],{},"wsl --update\n",[103,118082,118083],{"class":105,"line":1168},[103,118084,118085],{},"# 将 wsl 版本设置为 wsl2\n",[103,118087,118088],{"class":105,"line":1183},[103,118089,118090],{},"wsl --set-default-version 2\n",[21988,118092,118094],{"id":118093},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[57,118096,118097],{},[60,118098,118099],{},"方式一(商店下载)",[14,118101,118102],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118104,118105],{},[1451,118106],{"alt":24,"src":118107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[57,118109,118110],{"start":25},[60,118111,118112],{},"方式二(命令行安装)",[94,118114,118116],{"className":118026,"code":118115,"language":118028,"meta":24,"style":24},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[100,118117,118118,118123,118128],{"__ignoreMap":24},[103,118119,118120],{"class":105,"line":106},[103,118121,118122],{},"# 列出可安装的 Linux 版本\n",[103,118124,118125],{"class":105,"line":25},[103,118126,118127],{},"#（需要科学手段）\n",[103,118129,118130],{"class":105,"line":1168},[103,118131,118132],{},"wsl --list --online\n",[14,118134,118135],{},[1451,118136],{"alt":24,"src":118137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118139,118140],{},"选择对应发行版并安装",[94,118142,118144],{"className":118026,"code":118143,"language":118028,"meta":24,"style":24},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[100,118145,118146,118151],{"__ignoreMap":24},[103,118147,118148],{"class":105,"line":106},[103,118149,118150],{},"# Ubuntu安装完毕后需要重启系统\n",[103,118152,118153],{"class":105,"line":25},[103,118154,118155],{},"wsl --install -d Ubuntu-24.04\n",[21988,118157,118159],{"id":118158},"_2324-查看系统状态","2.3.2.4 查看系统状态",[94,118161,118163],{"className":118026,"code":118162,"language":118028,"meta":24,"style":24},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[100,118164,118165,118170,118175,118180,118185,118189,118193,118198,118203,118208],{"__ignoreMap":24},[103,118166,118167],{"class":105,"line":106},[103,118168,118169],{},"# 查看 wsl\n",[103,118171,118172],{"class":105,"line":25},[103,118173,118174],{},"wsl -l\n",[103,118176,118177],{"class":105,"line":1168},[103,118178,118179],{},"# 查看 wsl 运行版本或模式\n",[103,118181,118182],{"class":105,"line":1183},[103,118183,118184],{},"wsl -l -v\n",[103,118186,118187],{"class":105,"line":1189},[103,118188,2389],{"emptyLinePlaceholder":30},[103,118190,118191],{"class":105,"line":1203},[103,118192,2389],{"emptyLinePlaceholder":30},[103,118194,118195],{"class":105,"line":1209},[103,118196,118197],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[103,118199,118200],{"class":105,"line":1300},[103,118201,118202],{},"wsl --set-version \u003Cdistro> 2\n",[103,118204,118205],{"class":105,"line":1306},[103,118206,118207],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[103,118209,118210],{"class":105,"line":1318},[103,118211,118212],{},"wsl --unregister \u003Cdistro>\n",[14,118214,118215],{},"输出Version为2即正常",[14,118217,118218],{},[1451,118219],{"alt":24,"src":118220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21988,118222,118224],{"id":118223},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118226,118227],{},"直接在Powershell里输入wsl命令进入子系统",[94,118229,118231],{"className":118026,"code":118230,"language":118028,"meta":24,"style":24},"# 进入子系统\nwsl\n",[100,118232,118233,118238],{"__ignoreMap":24},[103,118234,118235],{"class":105,"line":106},[103,118236,118237],{},"# 进入子系统\n",[103,118239,118240],{"class":105,"line":25},[103,118241,118242],{},"wsl\n",[14,118244,118245],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118247,118248],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118250,118251],{},[1451,118252],{"alt":24,"src":118253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[74,118255,118257],{"id":118256},"_233-配置各种环境","2.3.3 配置各种环境",[21988,118259,118261],{"id":118260},"_2331-换源","2.3.3.1 换源",[14,118263,118264],{},"(同实体机LINUX，往下找教程)",[21988,118266,118268],{"id":118267},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22900,118270,118272],{"id":118271},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118274,118275],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118277,118278],{},[1451,118279],{"alt":24,"src":118280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118282,118283],{},[1451,118284],{"alt":24,"src":118285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22900,118287,118289],{"id":118288},"_23322-cuda","2.3.3.2.2 CUDA",[14,118291,118292,118293],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[17,118294,118295],{"href":118295,"rel":118296},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[21],[14,118298,118299,118302],{},[1451,118300],{"alt":24,"src":118301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1451,118303],{"alt":24,"src":118304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118306,118307],{},"在下方的网站，选择合适的版本。",[14,118309,118310,118311],{},"WSL2 专属 CUDA 指南：",[17,118312,118313],{"href":118313,"rel":118314},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[21],[14,118316,118317],{},[263,118318,118319],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118321,118322],{},[1451,118323],{"alt":24,"src":118324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118326,118327],{},"挨行敲一遍",[14,118329,118330],{},[1451,118331],{"alt":24,"src":118332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118334,118335,118336,118339],{},"敲完后，输入",[100,118337,118338],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118341,118342],{},[1451,118343],{"alt":24,"src":118344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118346,118347,118348,118351],{},"（请详看下方教程的",[263,118349,118350],{},"安装CUDA的配置环境来看","如何配置环境）",[22900,118353,118355],{"id":118354},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118357,118264],{},[14,118359,118360],{},[1451,118361],{"alt":24,"src":118362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21988,118364,118366],{"id":118365},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118368,118369],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118371,118372],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118374,118375],{},[1451,118376],{"alt":24,"src":118377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118379,118380],{},"连接WSL2",[14,118382,118383],{},[1451,118384],{"alt":24,"src":118385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118387,118388],{},"远程开发成功。",[14,118390,118391],{},[1451,118392],{"alt":24,"src":118393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118395,118396],{},[1451,118397],{"alt":24,"src":118398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118400,118401],{},[1451,118402],{"alt":24,"src":118403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[21988,118405,118407],{"id":118406},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118409,118410],{},[1451,118411],{"alt":24,"src":118412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21988,118414,118416],{"id":118415},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[94,118418,118420],{"className":117286,"code":118419,"language":117288,"meta":24,"style":24},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[100,118421,118422,118430,118438,118449,118453],{"__ignoreMap":24},[103,118423,118424,118426,118428],{"class":105,"line":106},[103,118425,24566],{"class":1952},[103,118427,117307],{"class":218},[103,118429,26232],{"class":218},[103,118431,118432,118434,118436],{"class":105,"line":25},[103,118433,24566],{"class":1952},[103,118435,117307],{"class":218},[103,118437,117323],{"class":218},[103,118439,118440,118442,118444,118446],{"class":105,"line":1168},[103,118441,24566],{"class":1952},[103,118443,117307],{"class":218},[103,118445,23824],{"class":218},[103,118447,118448],{"class":218}," mesa-utils\n",[103,118450,118451],{"class":105,"line":1183},[103,118452,2389],{"emptyLinePlaceholder":30},[103,118454,118455],{"class":105,"line":1189},[103,118456,118457],{"class":172},"#然后重启wsl2即可\n",[5116,118459,118460],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":24,"searchDepth":25,"depth":25,"links":118462},[118463,118464,118469],{"id":117740,"depth":25,"text":117741},{"id":117753,"depth":25,"text":117754,"children":118465},[118466,118467,118468],{"id":117757,"depth":1168,"text":117758},{"id":117804,"depth":1168,"text":117805},{"id":117865,"depth":1168,"text":117866},{"id":117901,"depth":25,"text":117902,"children":118470},[118471,118472,118473],{"id":117905,"depth":1168,"text":117906},{"id":117967,"depth":1168,"text":117968},{"id":118256,"depth":1168,"text":118257},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117732,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118480,"title":118481,"body":118482,"description":27,"extension":28,"meta":121418,"navigation":30,"path":121419,"seo":121420,"stem":121421,"__hash__":121422},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118483,"toc":121390},[118484,118487,118491,118497,118501,118507,118511,118699,118702,118707,118711,118715,118718,118721,118727,118732,118735,118738,118743,118776,118781,118785,118862,118865,118870,118874,118877,118916,118919,118928,118946,118951,118958,119075,119080,119083,119110,119115,119119,119128,119178,119185,119189,119192,119206,119213,119247,119252,119256,119279,119282,119287,119291,119294,119297,119300,119342,119346,119349,119352,119393,119397,119401,119404,119409,119414,119417,119440,119443,119451,119456,119459,119464,119469,119472,119477,119481,119486,119509,119514,119576,119584,119589,119594,119597,119602,119605,119610,119615,119633,119638,119644,119649,119663,119667,119670,119673,119676,119719,119722,119727,119828,119831,119836,119840,119844,119881,119885,119889,119893,119939,119943,119988,119992,119999,120007,120062,120065,120142,120145,120168,120172,120175,120180,120185,120193,120196,120201,120206,120211,120214,120219,120228,120231,120236,120239,120310,120315,120318,120323,120326,120331,120334,120339,120342,120347,120352,120355,120430,120433,120446,120451,120454,120468,120471,120500,120505,120534,120537,120542,120546,120551,120560,120563,120568,120571,120576,120579,120582,120587,120590,120595,120600,120603,120608,120611,120736,120741,120771,120774,120779,120784,120801,120804,120847,120850,120877,120882,120895,121038,121042,121047,121061,121064,121115,121118,121148,121151,121167,121172,121186,121189,121256,121261,121270,121275,121278,121290,121295,121302,121326,121329,121334,121337,121356,121361,121368,121380,121387],[10,118485,118481],{"id":118486},"_3-安装必备配置",[45,118488,118490],{"id":118489},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[94,118492,118495],{"className":118493,"code":118494,"language":5177},[5175],"  打开下方网站（注意，该Ubuntu仓库版本是X86、amd64的仓库，ARM的仓库并非该网站（99.9%的人的电脑是X86的，很多工控机是ARM的，但工控机也有X86的，请看[Vinci机器人队单片机教程](https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fdocx\u002FPRAodvrWvoXTrVxP1EDcMKM7nXb)中讲的了解一下，或者自行百度。）\n\n  下方这俩学校二选一。\n\n1.  清华大学开源软件镜像站：https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\n\n2.  中国科学技术大学镜像站：https:\u002F\u002Fmirrors.ustc.edu.cn\n\n  可以测速，选择出速度最快的源。\n\n```Bash\ncurl https:\u002F\u002Fmirrors.cernet.edu.cn\u002Foh-my-mirrorz.py | python3\n```\n\n  在北方（山东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-036.png)\n\n  在南方（广东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-037.png)\n\n  在南北都比较快的是`北京外国语大学BFSU`和`南方科技大学SUSTech`，不想测速可以无脑选，也可以测速选择最好的源。\n\n  \n",[100,118496,118494],{"__ignoreMap":24},[74,118498,118500],{"id":118499},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[94,118502,118505],{"className":118503,"code":118504,"language":5177},[5175],"  输入以下命令\n\n```Bash\nsudo apt update\nsudo apt install vim\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list\n```\n\n  在以下界面，用键盘按ggdG（注意区分大小写）\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-038.png)\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-039.png)\n\n  选择好Ubuntu版本后，\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-040.png)\n\n  粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-041.png)\n\n  按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-042.png)\n\n  输入以下命令\n\n```Bash\nsudo apt update\n```\n\n  下方出现对应学校源网站则成功\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-043.png)\n\n  至此换源结束\n",[100,118506,118504],{"__ignoreMap":24},[74,118508,118510],{"id":118509},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[94,118512,118516],{"className":118513,"code":118514,"language":118515,"meta":24,"style":24},"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",[100,118517,118518,118526,118537,118549,118563,118567,118577,118582,118586,118590,118595,118599,118611,118615,118620,118624,118635,118639,118655,118659,118670,118674,118679,118683,118691],{"__ignoreMap":24},[103,118519,118520,118522,118524],{"class":105,"line":106},[103,118521,24566],{"class":1952},[103,118523,117307],{"class":218},[103,118525,26232],{"class":218},[103,118527,118528,118530,118532,118534],{"class":105,"line":25},[103,118529,24566],{"class":1952},[103,118531,117307],{"class":218},[103,118533,23824],{"class":218},[103,118535,118536],{"class":218}," vim\n",[103,118538,118539,118541,118544,118546],{"class":105,"line":1168},[103,118540,24566],{"class":1952},[103,118542,118543],{"class":218}," rm",[103,118545,25315],{"class":162},[103,118547,118548],{"class":218}," \u002Fetc\u002Fapt\u002Fsources.list\n",[103,118550,118551,118553,118555,118557,118560],{"class":105,"line":1183},[103,118552,24566],{"class":1952},[103,118554,118543],{"class":218},[103,118556,25315],{"class":162},[103,118558,118559],{"class":218}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[103,118561,118562],{"class":162},"**\n",[103,118564,118565],{"class":105,"line":1189},[103,118566,2389],{"emptyLinePlaceholder":30},[103,118568,118569,118571,118574],{"class":105,"line":1203},[103,118570,24566],{"class":1952},[103,118572,118573],{"class":218}," vim",[103,118575,118576],{"class":218}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[103,118578,118579],{"class":105,"line":1209},[103,118580,118581],{"class":218},"```\n",[103,118583,118584],{"class":105,"line":1300},[103,118585,2389],{"emptyLinePlaceholder":30},[103,118587,118588],{"class":105,"line":1306},[103,118589,2389],{"emptyLinePlaceholder":30},[103,118591,118592],{"class":105,"line":1318},[103,118593,118594],{"class":1952},"选择好Ubuntu版本后，复制下方的内容。\n",[103,118596,118597],{"class":105,"line":1601},[103,118598,2389],{"emptyLinePlaceholder":30},[103,118600,118601,118603,118606,118609],{"class":105,"line":1606},[103,118602,340],{"class":109},[103,118604,118605],{"class":218},"[](",[103,118607,118608],{"class":1952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[103,118610,120],{"class":218},[103,118612,118613],{"class":105,"line":1612},[103,118614,2389],{"emptyLinePlaceholder":30},[103,118616,118617],{"class":105,"line":1617},[103,118618,118619],{"class":1952},"粘贴进去\n",[103,118621,118622],{"class":105,"line":1631},[103,118623,2389],{"emptyLinePlaceholder":30},[103,118625,118626,118628,118630,118633],{"class":105,"line":1636},[103,118627,340],{"class":109},[103,118629,118605],{"class":218},[103,118631,118632],{"class":1952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[103,118634,120],{"class":218},[103,118636,118637],{"class":105,"line":1642},[103,118638,2389],{"emptyLinePlaceholder":30},[103,118640,118641,118644,118647,118650,118652],{"class":105,"line":1663},[103,118642,118643],{"class":1952},"按一下ESC，然后英文冒号，输入",[103,118645,118646],{"class":218}," `",[103,118648,118649],{"class":1952},":wq!",[103,118651,1085],{"class":218},[103,118653,118654],{"class":1952},"然后回车\n",[103,118656,118657],{"class":105,"line":1668},[103,118658,2389],{"emptyLinePlaceholder":30},[103,118660,118661,118663,118665,118668],{"class":105,"line":1682},[103,118662,340],{"class":109},[103,118664,118605],{"class":218},[103,118666,118667],{"class":1952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[103,118669,120],{"class":218},[103,118671,118672],{"class":105,"line":1687},[103,118673,2389],{"emptyLinePlaceholder":30},[103,118675,118676],{"class":105,"line":1716},[103,118677,118678],{"class":1952},"输入以下命令\n",[103,118680,118681],{"class":105,"line":1721},[103,118682,2389],{"emptyLinePlaceholder":30},[103,118684,118685,118688],{"class":105,"line":1738},[103,118686,118687],{"class":218},"```",[103,118689,118690],{"class":1952},"Bash\n",[103,118692,118693,118695,118697],{"class":105,"line":1743},[103,118694,24566],{"class":1952},[103,118696,117307],{"class":218},[103,118698,26232],{"class":218},[14,118700,118701],{},"这里被替换成对应学校则成功",[14,118703,118704],{},[1451,118705],{"alt":24,"src":118706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[45,118708,118710],{"id":118709},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[74,118712,118714],{"id":118713},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118716,118717],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118719,118720],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118722,118723],{},[17,118724,118725],{"href":118725,"rel":118726},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[21],[14,118728,118729],{},[1451,118730],{"alt":24,"src":118731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118733,118734],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118736,118737],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118739,118740],{},[1451,118741],{"alt":24,"src":118742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[94,118744,118746],{"className":117286,"code":118745,"language":117288,"meta":24,"style":24},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[100,118747,118748,118753,118760,118765],{"__ignoreMap":24},[103,118749,118750],{"class":105,"line":106},[103,118751,118752],{"class":172},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[103,118754,118755,118757],{"class":105,"line":25},[103,118756,101266],{"class":162},[103,118758,118759],{"class":218}," ~\u002FDownloads\n",[103,118761,118762],{"class":105,"line":1168},[103,118763,118764],{"class":172},"#下方chrome安装包名不一定是这个，根据名字来看\n",[103,118766,118767,118769,118771,118773],{"class":105,"line":1183},[103,118768,24566],{"class":1952},[103,118770,117307],{"class":218},[103,118772,23824],{"class":218},[103,118774,118775],{"class":218}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118777,118778],{},[1451,118779],{"alt":24,"src":118780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[74,118782,118784],{"id":118783},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[94,118786,118788],{"className":117286,"code":118787,"language":117288,"meta":24,"style":24},"# 老版\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",[100,118789,118790,118795,118803,118814,118819,118823,118828,118838,118846,118857],{"__ignoreMap":24},[103,118791,118792],{"class":105,"line":106},[103,118793,118794],{"class":172},"# 老版\n",[103,118796,118797,118799,118801],{"class":105,"line":25},[103,118798,24566],{"class":1952},[103,118800,117307],{"class":218},[103,118802,26232],{"class":218},[103,118804,118805,118807,118809,118811],{"class":105,"line":1168},[103,118806,24566],{"class":1952},[103,118808,117307],{"class":218},[103,118810,23824],{"class":218},[103,118812,118813],{"class":218}," neofetch\n",[103,118815,118816],{"class":105,"line":1183},[103,118817,118818],{"class":1952},"neofetch\n",[103,118820,118821],{"class":105,"line":1189},[103,118822,2389],{"emptyLinePlaceholder":30},[103,118824,118825],{"class":105,"line":1203},[103,118826,118827],{"class":172},"# 新版\n",[103,118829,118830,118832,118835],{"class":105,"line":1209},[103,118831,24566],{"class":1952},[103,118833,118834],{"class":218}," add-apt-repository",[103,118836,118837],{"class":218}," ppa:zhangsongcui3371\u002Ffastfetch\n",[103,118839,118840,118842,118844],{"class":105,"line":1300},[103,118841,24566],{"class":1952},[103,118843,117307],{"class":218},[103,118845,26232],{"class":218},[103,118847,118848,118850,118852,118854],{"class":105,"line":1306},[103,118849,24566],{"class":1952},[103,118851,117307],{"class":218},[103,118853,23824],{"class":218},[103,118855,118856],{"class":218}," fastfetch\n",[103,118858,118859],{"class":105,"line":1318},[103,118860,118861],{"class":1952},"fastfetch\n",[14,118863,118864],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118866,118867],{},[1451,118868],{"alt":24,"src":118869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[74,118871,118873],{"id":118872},"_323-移除snap应用","3.2.3 移除snap应用",[14,118875,118876],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[94,118878,118880],{"className":117286,"code":118879,"language":117288,"meta":24,"style":24},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[100,118881,118882,118894,118905],{"__ignoreMap":24},[103,118883,118884,118886,118888,118891],{"class":105,"line":106},[103,118885,24566],{"class":1952},[103,118887,26503],{"class":218},[103,118889,118890],{"class":218}," disable",[103,118892,118893],{"class":218}," snapd.service\n",[103,118895,118896,118898,118900,118902],{"class":105,"line":25},[103,118897,24566],{"class":1952},[103,118899,26503],{"class":218},[103,118901,118890],{"class":218},[103,118903,118904],{"class":218}," snapd.socket\n",[103,118906,118907,118909,118911,118913],{"class":105,"line":1168},[103,118908,24566],{"class":1952},[103,118910,26503],{"class":218},[103,118912,118890],{"class":218},[103,118914,118915],{"class":218}," snapd.seeded.service\n",[14,118917,118918],{},"然后查看snap应用列表",[14,118920,118921,118922,118927],{},"根据你安装的选择不同（最小安装或普通安装），有",[17,118923,118926],{"href":118924,"rel":118925},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[21],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[94,118929,118931],{"className":117286,"code":118930,"language":117288,"meta":24,"style":24},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[100,118932,118933,118938],{"__ignoreMap":24},[103,118934,118935],{"class":105,"line":106},[103,118936,118937],{"class":172},"# 查询当前系统上snap安装了哪些app\n",[103,118939,118940,118943],{"class":105,"line":25},[103,118941,118942],{"class":1952},"snap",[103,118944,118945],{"class":218}," list\n",[14,118947,118948],{},[1451,118949],{"alt":24,"src":118950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,118952,118953,118954,118957],{},"卸载掉图中所有应用，按照 ",[263,118955,118956],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[94,118959,118961],{"className":117286,"code":118960,"language":117288,"meta":24,"style":24},"#移除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",[100,118962,118963,118968,118980,118985,118996,119001,119012,119017,119028,119033,119037,119042,119053,119064],{"__ignoreMap":24},[103,118964,118965],{"class":105,"line":106},[103,118966,118967],{"class":172},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[103,118969,118970,118972,118975,118977],{"class":105,"line":25},[103,118971,24566],{"class":1952},[103,118973,118974],{"class":218}," snap",[103,118976,26069],{"class":218},[103,118978,118979],{"class":218}," snap-store\n",[103,118981,118982],{"class":105,"line":1168},[103,118983,118984],{"class":172},"#移除firefox浏览器\n",[103,118986,118987,118989,118991,118993],{"class":105,"line":1183},[103,118988,24566],{"class":1952},[103,118990,118974],{"class":218},[103,118992,26069],{"class":218},[103,118994,118995],{"class":218}," firefox\n",[103,118997,118998],{"class":105,"line":1189},[103,118999,119000],{"class":172},"#移除gnome-42-2204\n",[103,119002,119003,119005,119007,119009],{"class":105,"line":1203},[103,119004,24566],{"class":1952},[103,119006,118974],{"class":218},[103,119008,26069],{"class":218},[103,119010,119011],{"class":218}," gnome-42-2204\n",[103,119013,119014],{"class":105,"line":1209},[103,119015,119016],{"class":172},"#移除gtk-common-themes\n",[103,119018,119019,119021,119023,119025],{"class":105,"line":1300},[103,119020,24566],{"class":1952},[103,119022,118974],{"class":218},[103,119024,26069],{"class":218},[103,119026,119027],{"class":218}," gtk-common-themes\n",[103,119029,119030],{"class":105,"line":1306},[103,119031,119032],{"class":172},"#移除其它...\n",[103,119034,119035],{"class":105,"line":1318},[103,119036,2663],{"class":113},[103,119038,119039],{"class":105,"line":1601},[103,119040,119041],{"class":172},"#移除core22,bare以及snapd\n",[103,119043,119044,119046,119048,119050],{"class":105,"line":1606},[103,119045,24566],{"class":1952},[103,119047,118974],{"class":218},[103,119049,26069],{"class":218},[103,119051,119052],{"class":218}," core22\n",[103,119054,119055,119057,119059,119061],{"class":105,"line":1612},[103,119056,24566],{"class":1952},[103,119058,118974],{"class":218},[103,119060,26069],{"class":218},[103,119062,119063],{"class":218}," bare\n",[103,119065,119066,119068,119070,119072],{"class":105,"line":1617},[103,119067,24566],{"class":1952},[103,119069,118974],{"class":218},[103,119071,26069],{"class":218},[103,119073,119074],{"class":218}," snapd\n",[14,119076,119077],{},[1451,119078],{"alt":24,"src":119079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119081,119082],{},"输入以下命令查看是否还有snap包",[94,119084,119086],{"className":117286,"code":119085,"language":117288,"meta":24,"style":24},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[100,119087,119088,119094,119098,119102,119106],{"__ignoreMap":24},[103,119089,119090,119092],{"class":105,"line":106},[103,119091,118942],{"class":1952},[103,119093,118945],{"class":218},[103,119095,119096],{"class":105,"line":25},[103,119097,118794],{"class":172},[103,119099,119100],{"class":105,"line":1168},[103,119101,118818],{"class":1952},[103,119103,119104],{"class":105,"line":1183},[103,119105,118827],{"class":172},[103,119107,119108],{"class":105,"line":1189},[103,119109,118861],{"class":1952},[14,119111,119112],{},[1451,119113],{"alt":24,"src":119114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[74,119116,119118],{"id":119117},"_324-移除snap","3.2.4 移除snap",[14,119120,119121,119122,119127],{},"在删除掉",[17,119123,119126],{"href":119124,"rel":119125},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[21],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[94,119129,119131],{"className":117286,"code":119130,"language":117288,"meta":24,"style":24}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[100,119132,119133,119138,119151,119156,119167],{"__ignoreMap":24},[103,119134,119135],{"class":105,"line":106},[103,119136,119137],{"class":172}," #使用apt移除掉snap\n",[103,119139,119140,119142,119144,119146,119149],{"class":105,"line":25},[103,119141,24566],{"class":1952},[103,119143,117307],{"class":218},[103,119145,117615],{"class":218},[103,119147,119148],{"class":162}," --purge",[103,119150,119074],{"class":218},[103,119152,119153],{"class":105,"line":1168},[103,119154,119155],{"class":172},"#移除snapd的一些目录\n",[103,119157,119158,119160,119162,119164],{"class":105,"line":1183},[103,119159,24566],{"class":1952},[103,119161,118543],{"class":218},[103,119163,25315],{"class":162},[103,119165,119166],{"class":218}," \u002Fvar\u002Fcache\u002Fsnapd\n",[103,119168,119169,119171,119173,119175],{"class":105,"line":1189},[103,119170,24566],{"class":1952},[103,119172,118543],{"class":218},[103,119174,25315],{"class":162},[103,119176,119177],{"class":218}," ~\u002Fsnap\n",[14,119179,119180,119181,119184],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[100,119182,119183],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[74,119186,119188],{"id":119187},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119190,119191],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[94,119193,119195],{"className":117286,"code":119194,"language":117288,"meta":24,"style":24},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[100,119196,119197],{"__ignoreMap":24},[103,119198,119199,119201,119203],{"class":105,"line":106},[103,119200,24566],{"class":1952},[103,119202,118573],{"class":218},[103,119204,119205],{"class":218}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119207,119208,119209,119212],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[100,119210,119211],{},":wq"," 回车",[94,119214,119216],{"className":117286,"code":119215,"language":117288,"meta":24,"style":24},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[100,119217,119218,119225,119239],{"__ignoreMap":24},[103,119219,119220,119223],{"class":105,"line":106},[103,119221,119222],{"class":1952},"Package:",[103,119224,119074],{"class":218},[103,119226,119227,119230,119233,119236],{"class":105,"line":25},[103,119228,119229],{"class":1952},"Pin:",[103,119231,119232],{"class":218}," release",[103,119234,119235],{"class":218}," a=",[103,119237,119238],{"class":162},"*\n",[103,119240,119241,119244],{"class":105,"line":1168},[103,119242,119243],{"class":1952},"Pin-Priority:",[103,119245,119246],{"class":162}," -10\n",[14,119248,119249],{},[1451,119250],{"alt":24,"src":119251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[74,119253,119255],{"id":119254},"_326-测试是否成功","3.2.6 测试是否成功",[94,119257,119259],{"className":117286,"code":119258,"language":117288,"meta":24,"style":24},"sudo apt update\nsudo apt install firefox\n",[100,119260,119261,119269],{"__ignoreMap":24},[103,119262,119263,119265,119267],{"class":105,"line":106},[103,119264,24566],{"class":1952},[103,119266,117307],{"class":218},[103,119268,26232],{"class":218},[103,119270,119271,119273,119275,119277],{"class":105,"line":25},[103,119272,24566],{"class":1952},[103,119274,117307],{"class":218},[103,119276,23824],{"class":218},[103,119278,118995],{"class":218},[14,119280,119281],{},"这里提示snapd无法被安装，就证明成功了",[14,119283,119284],{},[1451,119285],{"alt":24,"src":119286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[74,119288,119290],{"id":119289},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119292,119293],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119295,119296],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119298,119299],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[94,119301,119303],{"className":117286,"code":119302,"language":117288,"meta":24,"style":24},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[100,119304,119305,119310,119319,119324,119332],{"__ignoreMap":24},[103,119306,119307],{"class":105,"line":106},[103,119308,119309],{"class":172},"# 添加Mozilla提供的源\n",[103,119311,119312,119314,119316],{"class":105,"line":25},[103,119313,24566],{"class":1952},[103,119315,118834],{"class":218},[103,119317,119318],{"class":218}," ppa:mozillateam\u002Fppa\n",[103,119320,119321],{"class":105,"line":1168},[103,119322,119323],{"class":172},"# 安装Firefox\n",[103,119325,119326,119328,119330],{"class":105,"line":1183},[103,119327,24566],{"class":1952},[103,119329,117307],{"class":218},[103,119331,26232],{"class":218},[103,119333,119334,119336,119338,119340],{"class":105,"line":1189},[103,119335,24566],{"class":1952},[103,119337,117307],{"class":218},[103,119339,23824],{"class":218},[103,119341,118995],{"class":218},[74,119343,119345],{"id":119344},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119347,119348],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119350,119351],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[94,119353,119355],{"className":117286,"code":119354,"language":117288,"meta":24,"style":24},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[100,119356,119357,119362,119372,119380,119384],{"__ignoreMap":24},[103,119358,119359],{"class":105,"line":106},[103,119360,119361],{"class":172},"#删掉禁止安装snap的配置文件\n",[103,119363,119364,119366,119368,119370],{"class":105,"line":25},[103,119365,24566],{"class":1952},[103,119367,118543],{"class":218},[103,119369,25315],{"class":162},[103,119371,119205],{"class":218},[103,119373,119374,119376,119378],{"class":105,"line":1168},[103,119375,24566],{"class":1952},[103,119377,117307],{"class":218},[103,119379,26232],{"class":218},[103,119381,119382],{"class":105,"line":1183},[103,119383,2389],{"emptyLinePlaceholder":30},[103,119385,119386,119388,119390],{"class":105,"line":1189},[103,119387,24566],{"class":1952},[103,119389,117307],{"class":218},[103,119391,119392],{"class":218}," dist-update\n",[45,119394,119396],{"id":119395},"_33-中文输入法","3.3 中文输入法",[74,119398,119400],{"id":119399},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119402,119403],{},"官网下载搜狗输入法",[14,119405,119406],{},[1451,119407],{"alt":24,"src":119408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119410,119411],{},[1451,119412],{"alt":24,"src":119413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119415,119416],{},"打开终端输入如下",[94,119418,119420],{"className":117286,"code":119419,"language":117288,"meta":24,"style":24},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[100,119421,119422,119429],{"__ignoreMap":24},[103,119423,119424,119426],{"class":105,"line":106},[103,119425,101266],{"class":162},[103,119427,119428],{"class":218}," ~\u002FDownloads\u002F\n",[103,119430,119431,119433,119435,119437],{"class":105,"line":25},[103,119432,24566],{"class":1952},[103,119434,117307],{"class":218},[103,119436,23824],{"class":218},[103,119438,119439],{"class":218}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119441,119442],{},"打开Fcitx",[14,119444,119445,119448],{},[1451,119446],{"alt":24,"src":119447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1451,119449],{"alt":24,"src":119450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119452,119453],{},[1451,119454],{"alt":24,"src":119455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119457,119458],{},"添加搜狗输入法",[14,119460,119461],{},[1451,119462],{"alt":24,"src":119463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119465,119466],{},[1451,119467],{"alt":24,"src":119468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119470,119471],{},"将搜狗输入法设置为唯一输入法",[14,119473,119474],{},[1451,119475],{"alt":24,"src":119476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[74,119478,119480],{"id":119479},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[57,119482,119483],{},[60,119484,119485],{},"卸载旧输入法",[94,119487,119489],{"className":118513,"code":119488,"language":118515,"meta":24,"style":24},"sudo apt purge fcitx* ibus*\n",[100,119490,119491],{"__ignoreMap":24},[103,119492,119493,119495,119497,119499,119502,119504,119507],{"class":105,"line":106},[103,119494,24566],{"class":1952},[103,119496,117307],{"class":218},[103,119498,117648],{"class":218},[103,119500,119501],{"class":218}," fcitx",[103,119503,568],{"class":162},[103,119505,119506],{"class":218}," ibus",[103,119508,119238],{"class":162},[57,119510,119511],{"start":25},[60,119512,119513],{},"安装Fcitx5",[94,119515,119517],{"className":117286,"code":119516,"language":117288,"meta":24,"style":24},"# 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",[100,119518,119519,119524,119538,119542,119547,119556,119564],{"__ignoreMap":24},[103,119520,119521],{"class":105,"line":106},[103,119522,119523],{"class":172},"# Ubuntu22.04及以上、Debian12及以上\n",[103,119525,119526,119528,119530,119532,119535],{"class":105,"line":25},[103,119527,24566],{"class":1952},[103,119529,117307],{"class":218},[103,119531,23824],{"class":218},[103,119533,119534],{"class":218}," fcitx5",[103,119536,119537],{"class":218}," fcitx5-chinese-addons\n",[103,119539,119540],{"class":105,"line":1168},[103,119541,2389],{"emptyLinePlaceholder":30},[103,119543,119544],{"class":105,"line":1183},[103,119545,119546],{"class":172},"# Ubuntu20.04\n",[103,119548,119549,119551,119553],{"class":105,"line":1189},[103,119550,24566],{"class":1952},[103,119552,118834],{"class":218},[103,119554,119555],{"class":218}," ppa:zhsj\u002Ffcitx5\n",[103,119557,119558,119560,119562],{"class":105,"line":1203},[103,119559,24566],{"class":1952},[103,119561,117307],{"class":218},[103,119563,26232],{"class":218},[103,119565,119566,119568,119570,119572,119574],{"class":105,"line":1209},[103,119567,24566],{"class":1952},[103,119569,117307],{"class":218},[103,119571,23824],{"class":218},[103,119573,119534],{"class":218},[103,119575,119537],{"class":218},[57,119577,119578,119581],{"start":1168},[60,119579,119580],{},"Reboot System",[60,119582,119583],{},"启动Fcitx5",[14,119585,119586],{},[1451,119587],{"alt":24,"src":119588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[57,119590,119591],{"start":1189},[60,119592,119593],{},"修改一些设置",[14,119595,119596],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119598,119599],{},[1451,119600],{"alt":24,"src":119601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119603,119604],{},"添加快捷键以便于更好切换中英文",[14,119606,119607],{},[1451,119608],{"alt":24,"src":119609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[57,119611,119612],{"start":1203},[60,119613,119614],{},"重启",[94,119616,119618],{"className":118513,"code":119617,"language":118515,"meta":24,"style":24},"sudo shutdown -r now\n",[100,119619,119620],{"__ignoreMap":24},[103,119621,119622,119624,119627,119630],{"class":105,"line":106},[103,119623,24566],{"class":1952},[103,119625,119626],{"class":218}," shutdown",[103,119628,119629],{"class":162}," -r",[103,119631,119632],{"class":218}," now\n",[57,119634,119635],{"start":1209},[60,119636,119637],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119639,119640],{},[17,119641,119642],{"href":119642,"rel":119643},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[21],[57,119645,119646],{"start":1300},[60,119647,119648],{},"再重启",[94,119650,119651],{"className":118513,"code":119617,"language":118515,"meta":24,"style":24},[100,119652,119653],{"__ignoreMap":24},[103,119654,119655,119657,119659,119661],{"class":105,"line":106},[103,119656,24566],{"class":1952},[103,119658,119626],{"class":218},[103,119660,119629],{"class":162},[103,119662,119632],{"class":218},[45,119664,119666],{"id":119665},"_34-pip3源替换","3.4 pip3源替换",[14,119668,119669],{},"非Debian系发行版需要做。",[14,119671,119672],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119674,119675],{},"使用dnf的系统也可能不用做。",[94,119677,119679],{"className":117286,"code":119678,"language":117288,"meta":24,"style":24},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[100,119680,119681,119686,119693,119698,119703],{"__ignoreMap":24},[103,119682,119683],{"class":105,"line":106},[103,119684,119685],{"class":172},"# 检查是否已安装 pip\n",[103,119687,119688,119691],{"class":105,"line":25},[103,119689,119690],{"class":1952},"pip3",[103,119692,26283],{"class":162},[103,119694,119695],{"class":105,"line":1168},[103,119696,119697],{"class":172},"# 如果未安装，先安装 pip3（见下方）\n",[103,119699,119700],{"class":105,"line":1183},[103,119701,119702],{"class":172},"# 配置 pip 使用清华源\n",[103,119704,119705,119707,119710,119713,119716],{"class":105,"line":1189},[103,119706,119690],{"class":1952},[103,119708,119709],{"class":218}," config",[103,119711,119712],{"class":218}," set",[103,119714,119715],{"class":218}," global.index-url",[103,119717,119718],{"class":218}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119720,119721],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119723,119724],{},[1451,119725],{"alt":24,"src":119726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[94,119728,119730],{"className":117286,"code":119729,"language":117288,"meta":24,"style":24},"#安装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",[100,119731,119732,119737,119745,119756,119760,119765,119784,119788,119793,119805,119809,119814],{"__ignoreMap":24},[103,119733,119734],{"class":105,"line":106},[103,119735,119736],{"class":172},"#安装pip3\n",[103,119738,119739,119741,119743],{"class":105,"line":25},[103,119740,24566],{"class":1952},[103,119742,117307],{"class":218},[103,119744,26232],{"class":218},[103,119746,119747,119749,119751,119753],{"class":105,"line":1168},[103,119748,24566],{"class":1952},[103,119750,26066],{"class":218},[103,119752,23824],{"class":218},[103,119754,119755],{"class":218}," python3-pip\n",[103,119757,119758],{"class":105,"line":1183},[103,119759,2389],{"emptyLinePlaceholder":30},[103,119761,119762],{"class":105,"line":1189},[103,119763,119764],{"class":172},"#更新pip3\n",[103,119766,119767,119769,119771,119773,119775,119777,119780,119782],{"class":105,"line":1203},[103,119768,100869],{"class":1952},[103,119770,100872],{"class":162},[103,119772,100895],{"class":218},[103,119774,23824],{"class":218},[103,119776,26420],{"class":162},[103,119778,119779],{"class":218}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[103,119781,100900],{"class":162},[103,119783,100903],{"class":218},[103,119785,119786],{"class":105,"line":1209},[103,119787,2389],{"emptyLinePlaceholder":30},[103,119789,119790],{"class":105,"line":1300},[103,119791,119792],{"class":172},"#设置pip源为清华源\n",[103,119794,119795,119797,119799,119801,119803],{"class":105,"line":1306},[103,119796,119690],{"class":1952},[103,119798,119709],{"class":218},[103,119800,119712],{"class":218},[103,119802,119715],{"class":218},[103,119804,119718],{"class":218},[103,119806,119807],{"class":105,"line":1318},[103,119808,2389],{"emptyLinePlaceholder":30},[103,119810,119811],{"class":105,"line":1601},[103,119812,119813],{"class":172},"#测试\n",[103,119815,119816,119818,119820,119822,119824,119826],{"class":105,"line":1606},[103,119817,100869],{"class":1952},[103,119819,100872],{"class":162},[103,119821,100895],{"class":218},[103,119823,23824],{"class":218},[103,119825,100900],{"class":162},[103,119827,100903],{"class":218},[14,119829,119830],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119832,119833],{},[1451,119834],{"alt":24,"src":119835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[45,119837,119839],{"id":119838},"_35-显卡驱动安装","3.5 显卡驱动安装",[74,119841,119843],{"id":119842},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[94,119845,119847],{"className":118513,"code":119846,"language":118515,"meta":24,"style":24},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[100,119848,119849,119854,119869,119874],{"__ignoreMap":24},[103,119850,119851],{"class":105,"line":106},[103,119852,119853],{"class":172},"# 如果是使用apt安装的驱动\n",[103,119855,119856,119858,119860,119862,119864,119867],{"class":105,"line":25},[103,119857,24566],{"class":1952},[103,119859,26066],{"class":218},[103,119861,26069],{"class":218},[103,119863,119148],{"class":162},[103,119865,119866],{"class":218}," nvidia",[103,119868,119238],{"class":162},[103,119870,119871],{"class":105,"line":1168},[103,119872,119873],{"class":172},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[103,119875,119876,119878],{"class":105,"line":1183},[103,119877,24566],{"class":1952},[103,119879,119880],{"class":218}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[74,119882,119884],{"id":119883},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21988,119886,119888],{"id":119887},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22900,119890,119892],{"id":119891},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[94,119894,119896],{"className":118513,"code":119895,"language":118515,"meta":24,"style":24},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[100,119897,119898,119903,119914,119919,119929,119934],{"__ignoreMap":24},[103,119899,119900],{"class":105,"line":106},[103,119901,119902],{"class":172},"# 安装英伟达驱动\n",[103,119904,119905,119907,119909,119911],{"class":105,"line":25},[103,119906,24566],{"class":1952},[103,119908,117307],{"class":218},[103,119910,23824],{"class":218},[103,119912,119913],{"class":218}," nvidia-driver-版本号\n",[103,119915,119916],{"class":105,"line":1168},[103,119917,119918],{"class":172},"# 重启 \n",[103,119920,119921,119923,119925,119927],{"class":105,"line":1183},[103,119922,24566],{"class":1952},[103,119924,119626],{"class":218},[103,119926,119629],{"class":162},[103,119928,119632],{"class":218},[103,119930,119931],{"class":105,"line":1189},[103,119932,119933],{"class":172},"# 检查驱动是否安装成功\n",[103,119935,119936],{"class":105,"line":1203},[103,119937,119938],{"class":1952},"nvidia-smi\n",[22900,119940,119942],{"id":119941},"_35212-debian","3.5.2.1.2 Debian",[94,119944,119946],{"className":118513,"code":119945,"language":118515,"meta":24,"style":24},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[100,119947,119948,119952,119966,119970,119980,119984],{"__ignoreMap":24},[103,119949,119950],{"class":105,"line":106},[103,119951,119902],{"class":172},[103,119953,119954,119956,119958,119960,119963],{"class":105,"line":25},[103,119955,24566],{"class":1952},[103,119957,117307],{"class":218},[103,119959,23824],{"class":218},[103,119961,119962],{"class":218}," nvidia-driver",[103,119964,119965],{"class":218}," nvidia-settings\n",[103,119967,119968],{"class":105,"line":1168},[103,119969,119918],{"class":172},[103,119971,119972,119974,119976,119978],{"class":105,"line":1183},[103,119973,24566],{"class":1952},[103,119975,119626],{"class":218},[103,119977,119629],{"class":162},[103,119979,119632],{"class":218},[103,119981,119982],{"class":105,"line":1189},[103,119983,119933],{"class":172},[103,119985,119986],{"class":105,"line":1203},[103,119987,119938],{"class":1952},[21988,119989,119991],{"id":119990},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,119993,119994,119995,119998],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[263,119996,119997],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120000,120001,120002],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23543,120003,120004],{},[263,120005,120006],{},"（也可以不禁用桌面环境，直接进行下一步。）",[94,120008,120010],{"className":118513,"code":120009,"language":118515,"meta":24,"style":24},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[100,120011,120012,120017,120027,120032,120045,120050],{"__ignoreMap":24},[103,120013,120014],{"class":105,"line":106},[103,120015,120016],{"class":172},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[103,120018,120019,120021,120024],{"class":105,"line":25},[103,120020,24566],{"class":1952},[103,120022,120023],{"class":218}," telinit",[103,120025,120026],{"class":162}," 3\n",[103,120028,120029],{"class":105,"line":1168},[103,120030,120031],{"class":172},"# ubuntu 使用下方命令\n",[103,120033,120034,120036,120039,120042],{"class":105,"line":1183},[103,120035,24566],{"class":1952},[103,120037,120038],{"class":218}," service",[103,120040,120041],{"class":218}," lightdm",[103,120043,120044],{"class":218}," stop\n",[103,120046,120047],{"class":105,"line":1189},[103,120048,120049],{"class":172},"# Fedora 使用下方命令\n",[103,120051,120052,120054,120056,120059],{"class":105,"line":1203},[103,120053,24566],{"class":1952},[103,120055,26503],{"class":218},[103,120057,120058],{"class":218}," isolate",[103,120060,120061],{"class":218}," multi-user.target\n",[14,120063,120064],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[94,120066,120068],{"className":118513,"code":120067,"language":118515,"meta":24,"style":24},"# 编译环境+准备工作\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",[100,120069,120070,120075,120086,120091,120098,120103,120115,120120,120127,120132],{"__ignoreMap":24},[103,120071,120072],{"class":105,"line":106},[103,120073,120074],{"class":172},"# 编译环境+准备工作\n",[103,120076,120077,120079,120081,120083],{"class":105,"line":25},[103,120078,24566],{"class":1952},[103,120080,117307],{"class":218},[103,120082,23824],{"class":218},[103,120084,120085],{"class":218}," build-essential\n",[103,120087,120088],{"class":105,"line":1168},[103,120089,120090],{"class":172},"# 进入到.run目录中\n",[103,120092,120093,120095],{"class":105,"line":1183},[103,120094,101266],{"class":162},[103,120096,120097],{"class":218}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[103,120099,120100],{"class":105,"line":1189},[103,120101,120102],{"class":172},"# 给驱动文件增加可执行权限：\n",[103,120104,120105,120107,120109,120112],{"class":105,"line":1203},[103,120106,24566],{"class":1952},[103,120108,24569],{"class":218},[103,120110,120111],{"class":218}," a+x",[103,120113,120114],{"class":218}," NVIDIA-Linux-x86_64-550.107.02.run\n",[103,120116,120117],{"class":105,"line":1209},[103,120118,120119],{"class":172},"# 然后执行安装：\n",[103,120121,120122,120124],{"class":105,"line":1300},[103,120123,24566],{"class":1952},[103,120125,120126],{"class":218}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[103,120128,120129],{"class":105,"line":1306},[103,120130,120131],{"class":172},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[103,120133,120134,120136,120139],{"class":105,"line":1318},[103,120135,24566],{"class":1952},[103,120137,120138],{"class":218}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[103,120140,120141],{"class":162},"  --no-opengl-files\n",[14,120143,120144],{},"安装完毕重启即可",[94,120146,120148],{"className":118513,"code":120147,"language":118515,"meta":24,"style":24},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[100,120149,120150,120154,120160,120164],{"__ignoreMap":24},[103,120151,120152],{"class":105,"line":106},[103,120153,119918],{"class":172},[103,120155,120156,120158],{"class":105,"line":25},[103,120157,24566],{"class":1952},[103,120159,26637],{"class":218},[103,120161,120162],{"class":105,"line":1168},[103,120163,119933],{"class":172},[103,120165,120166],{"class":105,"line":1183},[103,120167,119938],{"class":1952},[74,120169,120171],{"id":120170},"_353-安装cuda","3.5.3 安装CUDA",[14,120173,120174],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120176,120177],{},[1451,120178],{"alt":24,"src":120179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[57,120181,120182],{},[60,120183,120184],{},"先查看显卡驱动所支持的最高CUDA版本",[94,120186,120187],{"className":118513,"code":119938,"language":118515,"meta":24,"style":24},[100,120188,120189],{"__ignoreMap":24},[103,120190,120191],{"class":105,"line":106},[103,120192,119938],{"class":1952},[14,120194,120195],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120197,120198],{},[1451,120199],{"alt":24,"src":120200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[57,120202,120203],{"start":25},[60,120204,120205],{},"下载CUDA并安装CUDA",[14,120207,118292,120208],{},[17,120209,118295],{"href":118295,"rel":120210},[21],[14,120212,120213],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120215,120216],{},[1451,120217],{"alt":24,"src":120218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120220,120221,120222,120227],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[17,120223,120226],{"href":120224,"rel":120225},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[21],"Vinci机器人队单片机教程","）",[14,120229,120230],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120232,120233],{},[1451,120234],{"alt":24,"src":120235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120237,120238],{},"将最下方框框里的命令敲入终端",[94,120240,120242],{"className":118513,"code":120241,"language":118515,"meta":24,"style":24},"# 在当前文件夹下创建一个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",[100,120243,120244,120249,120258,120263,120270,120275,120283,120288,120299,120304],{"__ignoreMap":24},[103,120245,120246],{"class":105,"line":106},[103,120247,120248],{"class":172},"# 在当前文件夹下创建一个ttt的子文件夹\n",[103,120250,120251,120253,120255],{"class":105,"line":25},[103,120252,101256],{"class":1952},[103,120254,29206],{"class":162},[103,120256,120257],{"class":218}," .\u002Fttt\n",[103,120259,120260],{"class":105,"line":1168},[103,120261,120262],{"class":172},"# 进入ttt文件夹\n",[103,120264,120265,120267],{"class":105,"line":1183},[103,120266,101266],{"class":162},[103,120268,120269],{"class":218}," ttt\n",[103,120271,120272],{"class":105,"line":1189},[103,120273,120274],{"class":172},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[103,120276,120277,120280],{"class":105,"line":1203},[103,120278,120279],{"class":1952},"wget",[103,120281,120282],{"class":218}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[103,120284,120285],{"class":105,"line":1209},[103,120286,120287],{"class":172},"# 给予权限\n",[103,120289,120290,120292,120294,120296],{"class":105,"line":1300},[103,120291,24566],{"class":1952},[103,120293,24569],{"class":218},[103,120295,120111],{"class":218},[103,120297,120298],{"class":218}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[103,120300,120301],{"class":105,"line":1306},[103,120302,120303],{"class":172},"# 运行脚本\n",[103,120305,120306,120308],{"class":105,"line":1318},[103,120307,24566],{"class":1952},[103,120309,120298],{"class":218},[14,120311,120312],{},[1451,120313],{"alt":24,"src":120314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120316,120317],{},"正在安装中：",[14,120319,120320],{},[1451,120321],{"alt":24,"src":120322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120324,120325],{},"输入accept接受即可",[14,120327,120328],{},[1451,120329],{"alt":24,"src":120330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120332,120333],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120335,120336],{},[1451,120337],{"alt":24,"src":120338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120340,120341],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120343,120344],{},[1451,120345],{"alt":24,"src":120346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[57,120348,120349],{"start":1168},[60,120350,120351],{},"配置环境",[14,120353,120354],{},"根据上方确认一下路径，比如我上面红色框起来的为",[94,120356,120358],{"className":118513,"code":120357,"language":118515,"meta":24,"style":24},"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",[100,120359,120360,120376,120391],{"__ignoreMap":24},[103,120361,120362,120365,120368,120371,120374],{"class":105,"line":106},[103,120363,120364],{"class":1952},"Please",[103,120366,120367],{"class":218}," make",[103,120369,120370],{"class":218}," sure",[103,120372,120373],{"class":218}," that",[103,120375,2663],{"class":113},[103,120377,120378,120380,120383,120386,120389],{"class":105,"line":25},[103,120379,52261],{"class":1952},[103,120381,120382],{"class":218},"   PATH",[103,120384,120385],{"class":218}," includes",[103,120387,120388],{"class":218}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[103,120390,2663],{"class":113},[103,120392,120393,120395,120398,120400,120403,120406,120408,120411,120414,120417,120420,120422,120425,120427],{"class":105,"line":1168},[103,120394,52261],{"class":1952},[103,120396,120397],{"class":218},"   LD_LIBRARY_PATH",[103,120399,120385],{"class":218},[103,120401,120402],{"class":218}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[103,120404,120405],{"class":218}," or,",[103,120407,5199],{"class":218},[103,120409,120410],{"class":218}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[103,120412,120413],{"class":218}," to",[103,120415,120416],{"class":218}," \u002Fetc\u002Fld.so.conf",[103,120418,120419],{"class":218}," and",[103,120421,27220],{"class":218},[103,120423,120424],{"class":218}," ldconfig",[103,120426,64594],{"class":218},[103,120428,120429],{"class":218}," root\n",[14,120431,120432],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[94,120434,120436],{"className":118513,"code":120435,"language":118515,"meta":24,"style":24},"which nvcc\n",[100,120437,120438],{"__ignoreMap":24},[103,120439,120440,120443],{"class":105,"line":106},[103,120441,120442],{"class":162},"which",[103,120444,120445],{"class":218}," nvcc\n",[14,120447,120448],{},[1451,120449],{"alt":24,"src":120450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120452,120453],{},"所以我进行以下操作：",[94,120455,120457],{"className":118513,"code":120456,"language":118515,"meta":24,"style":24},"sudo vim ~\u002F.bashrc\n",[100,120458,120459],{"__ignoreMap":24},[103,120460,120461,120463,120465],{"class":105,"line":106},[103,120462,24566],{"class":1952},[103,120464,118573],{"class":218},[103,120466,120467],{"class":218}," ~\u002F.bashrc\n",[14,120469,120470],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[94,120472,120474],{"className":118513,"code":120473,"language":118515,"meta":24,"style":24},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[100,120475,120476,120488],{"__ignoreMap":24},[103,120477,120478,120480,120483,120485],{"class":105,"line":106},[103,120479,25032],{"class":109},[103,120481,120482],{"class":113}," PATH",[103,120484,159],{"class":109},[103,120486,120487],{"class":113},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[103,120489,120490,120492,120495,120497],{"class":105,"line":25},[103,120491,25032],{"class":109},[103,120493,120494],{"class":113}," LD_LIBRARY_PATH",[103,120496,159],{"class":109},[103,120498,120499],{"class":113},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120501,120502],{},[1451,120503],{"alt":24,"src":120504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[94,120506,120508],{"className":118513,"code":120507,"language":118515,"meta":24,"style":24},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[100,120509,120510,120515,120521,120526],{"__ignoreMap":24},[103,120511,120512],{"class":105,"line":106},[103,120513,120514],{"class":172},"# 刷新当前终端的环境变量\n",[103,120516,120517,120519],{"class":105,"line":25},[103,120518,100883],{"class":162},[103,120520,120467],{"class":218},[103,120522,120523],{"class":105,"line":1168},[103,120524,120525],{"class":172},"# 验证CUDA是否安装成功\n",[103,120527,120528,120531],{"class":105,"line":1183},[103,120529,120530],{"class":1952},"nvcc",[103,120532,120533],{"class":162}," -V\n",[14,120535,120536],{},"出现下图这种则安装成功。",[14,120538,120539],{},[1451,120540],{"alt":24,"src":120541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[74,120543,120545],{"id":120544},"_354-安装cudnn","3.5.4 安装cuDNN",[57,120547,120548],{},[60,120549,120550],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120552,120553,120554,120559],{},"前往 NVIDIA cuDNN 下载页面：",[17,120555,120558],{"href":120556,"rel":120557},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[21],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120561,120562],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120564,120565],{},[1451,120566],{"alt":24,"src":120567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120569,120570],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120572,120573],{},[1451,120574],{"alt":24,"src":120575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120577,120578],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120580,120581],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120583,120584],{},[263,120585,120586],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120588,120589],{},"下载好的：",[14,120591,120592],{},[1451,120593],{"alt":24,"src":120594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[57,120596,120597],{"start":25},[60,120598,120599],{},"安装cuDNN",[14,120601,120602],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120604,120605],{},[1451,120606],{"alt":24,"src":120607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120609,120610],{},"解压文件，并复制到对应位置完成安装",[94,120612,120614],{"className":118513,"code":120613,"language":118515,"meta":24,"style":24},"# 解压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",[100,120615,120616,120621,120632,120637,120644,120649,120665,120679,120684,120695,120704,120708,120724],{"__ignoreMap":24},[103,120617,120618],{"class":105,"line":106},[103,120619,120620],{"class":172},"# 解压cuDNN文件\n",[103,120622,120623,120626,120629],{"class":105,"line":25},[103,120624,120625],{"class":1952},"tar",[103,120627,120628],{"class":162}," -xvf",[103,120630,120631],{"class":218}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[103,120633,120634],{"class":105,"line":1168},[103,120635,120636],{"class":172},"# cd进文件夹\n",[103,120638,120639,120641],{"class":105,"line":1183},[103,120640,101266],{"class":162},[103,120642,120643],{"class":218}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[103,120645,120646],{"class":105,"line":1189},[103,120647,120648],{"class":172},"# 复制cuDNN文件到CUDA目录\n",[103,120650,120651,120653,120655,120658,120660,120663],{"class":105,"line":1203},[103,120652,24566],{"class":1952},[103,120654,27851],{"class":218},[103,120656,120657],{"class":218}," include\u002Fcudnn",[103,120659,568],{"class":162},[103,120661,120662],{"class":218},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[103,120664,2663],{"class":113},[103,120666,120667,120669,120671,120674,120676],{"class":105,"line":1209},[103,120668,24566],{"class":1952},[103,120670,27851],{"class":218},[103,120672,120673],{"class":218}," lib\u002Flibcudnn",[103,120675,568],{"class":162},[103,120677,120678],{"class":218},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[103,120680,120681],{"class":105,"line":1300},[103,120682,120683],{"class":172},"# 对比一下有没有缺文件\n",[103,120685,120686,120688,120691,120693],{"class":105,"line":1306},[103,120687,26751],{"class":1952},[103,120689,120690],{"class":218}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[103,120692,568],{"class":162},[103,120694,2663],{"class":113},[103,120696,120697,120699,120702],{"class":105,"line":1318},[103,120698,26751],{"class":1952},[103,120700,120701],{"class":218}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[103,120703,119238],{"class":162},[103,120705,120706],{"class":105,"line":1601},[103,120707,120287],{"class":172},[103,120709,120710,120712,120714,120717,120719,120721],{"class":105,"line":1606},[103,120711,24566],{"class":1952},[103,120713,24569],{"class":218},[103,120715,120716],{"class":218}," a+r",[103,120718,120690],{"class":218},[103,120720,568],{"class":162},[103,120722,120723],{"class":113},"   \n",[103,120725,120726,120728,120730,120732,120734],{"class":105,"line":1612},[103,120727,24566],{"class":1952},[103,120729,24569],{"class":218},[103,120731,120716],{"class":218},[103,120733,120701],{"class":218},[103,120735,119238],{"class":162},[57,120737,120738],{"start":1168},[60,120739,120740],{},"检查是否安装成功",[94,120742,120744],{"className":118513,"code":120743,"language":118515,"meta":24,"style":24},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[100,120745,120746,120751],{"__ignoreMap":24},[103,120747,120748],{"class":105,"line":106},[103,120749,120750],{"class":172},"# 检查cuDNN版本命令\n",[103,120752,120753,120756,120759,120761,120763,120766,120769],{"class":105,"line":25},[103,120754,120755],{"class":1952},"cat",[103,120757,120758],{"class":218}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[103,120760,25099],{"class":109},[103,120762,30226],{"class":1952},[103,120764,120765],{"class":218}," CUDNN_MAJOR",[103,120767,120768],{"class":162}," -A",[103,120770,47713],{"class":162},[14,120772,120773],{},"出现下图这样的就是安装成功了",[14,120775,120776],{},[1451,120777],{"alt":24,"src":120778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[57,120780,120781],{"start":1183},[60,120782,120783],{},"软链接(一般不需要)",[94,120785,120787],{"className":118513,"code":120786,"language":118515,"meta":24,"style":24},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[100,120788,120789,120794],{"__ignoreMap":24},[103,120790,120791],{"class":105,"line":106},[103,120792,120793],{"class":172},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[103,120795,120796,120798],{"class":105,"line":25},[103,120797,24566],{"class":1952},[103,120799,120800],{"class":218}," ldconfig\n",[14,120802,120803],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[94,120805,120810],{"className":120806,"code":120807,"language":120808,"meta":120809,"style":24},"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",[100,120811,120812,120817,120822,120827,120832,120837,120842],{"__ignoreMap":24},[103,120813,120814],{"class":105,"line":106},[103,120815,120816],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[103,120818,120819],{"class":105,"line":25},[103,120820,120821],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[103,120823,120824],{"class":105,"line":1168},[103,120825,120826],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[103,120828,120829],{"class":105,"line":1183},[103,120830,120831],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[103,120833,120834],{"class":105,"line":1189},[103,120835,120836],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[103,120838,120839],{"class":105,"line":1203},[103,120840,120841],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[103,120843,120844],{"class":105,"line":1209},[103,120845,120846],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120848,120849],{},"运行下方的命令",[94,120851,120853],{"className":118513,"code":120852,"language":118515,"meta":24,"style":24},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[100,120854,120855,120860,120867,120872],{"__ignoreMap":24},[103,120856,120857],{"class":105,"line":106},[103,120858,120859],{"class":172},"# cd进入CUDA路径\n",[103,120861,120862,120864],{"class":105,"line":25},[103,120863,101266],{"class":162},[103,120865,120866],{"class":218}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[103,120868,120869],{"class":105,"line":1168},[103,120870,120871],{"class":172}," # 查看本路径下的需要软链接的文件名\n",[103,120873,120874],{"class":105,"line":1183},[103,120875,120876],{"class":1952}," ls\n",[14,120878,120879],{},[1451,120880],{"alt":24,"src":120881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120883,120884,120885,18400,120888,18400,120891,120894],{},"如上图，我需要将",[100,120886,120887],{},"libcudnn_xxx_xxxxx.so.8.9.7",[100,120889,120890],{},"libcudnn_xxx_xxxxx.so.8",[100,120892,120893],{},"libcudnn_xxx_xxxxx.so","软链接",[94,120896,120898],{"className":118513,"code":120897,"language":118515,"meta":24,"style":24},"# 创建符号链接。对于每个 .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",[100,120899,120900,120905,120921,120935,120949,120963,120977,120991,121005,121010,121016,121021],{"__ignoreMap":24},[103,120901,120902],{"class":105,"line":106},[103,120903,120904],{"class":172},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[103,120906,120907,120909,120912,120915,120918],{"class":105,"line":25},[103,120908,24566],{"class":1952},[103,120910,120911],{"class":218}," ln",[103,120913,120914],{"class":162}," -sf",[103,120916,120917],{"class":218}," libcudnn_cnn_train.so.8.9.7",[103,120919,120920],{"class":218}," libcudnn_cnn_train.so.8\n",[103,120922,120923,120925,120927,120929,120932],{"class":105,"line":1168},[103,120924,24566],{"class":1952},[103,120926,120911],{"class":218},[103,120928,120914],{"class":162},[103,120930,120931],{"class":218}," libcudnn_adv_infer.so.8.9.7",[103,120933,120934],{"class":218}," libcudnn_adv_infer.so.8\n",[103,120936,120937,120939,120941,120943,120946],{"class":105,"line":1183},[103,120938,24566],{"class":1952},[103,120940,120911],{"class":218},[103,120942,120914],{"class":162},[103,120944,120945],{"class":218}," libcudnn_adv_train.so.8.9.7",[103,120947,120948],{"class":218}," libcudnn_adv_train.so.8\n",[103,120950,120951,120953,120955,120957,120960],{"class":105,"line":1189},[103,120952,24566],{"class":1952},[103,120954,120911],{"class":218},[103,120956,120914],{"class":162},[103,120958,120959],{"class":218}," libcudnn_cnn_infer.so.8.9.7",[103,120961,120962],{"class":218}," libcudnn_cnn_infer.so.8\n",[103,120964,120965,120967,120969,120971,120974],{"class":105,"line":1203},[103,120966,24566],{"class":1952},[103,120968,120911],{"class":218},[103,120970,120914],{"class":162},[103,120972,120973],{"class":218}," libcudnn.so.8.9.7",[103,120975,120976],{"class":218}," libcudnn.so.8\n",[103,120978,120979,120981,120983,120985,120988],{"class":105,"line":1209},[103,120980,24566],{"class":1952},[103,120982,120911],{"class":218},[103,120984,120914],{"class":162},[103,120986,120987],{"class":218}," libcudnn_ops_infer.so.8.9.7",[103,120989,120990],{"class":218}," libcudnn_ops_infer.so.8\n",[103,120992,120993,120995,120997,120999,121002],{"class":105,"line":1300},[103,120994,24566],{"class":1952},[103,120996,120911],{"class":218},[103,120998,120914],{"class":162},[103,121000,121001],{"class":218}," libcudnn_ops_train.so.8.9.7",[103,121003,121004],{"class":218}," libcudnn_ops_train.so.8\n",[103,121006,121007],{"class":105,"line":1306},[103,121008,121009],{"class":172},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[103,121011,121012,121014],{"class":105,"line":1318},[103,121013,24566],{"class":1952},[103,121015,120800],{"class":218},[103,121017,121018],{"class":105,"line":1601},[103,121019,121020],{"class":172},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[103,121022,121023,121025,121028,121031,121033,121036],{"class":105,"line":1606},[103,121024,26751],{"class":1952},[103,121026,121027],{"class":162}," -l",[103,121029,121030],{"class":218}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[103,121032,568],{"class":162},[103,121034,121035],{"class":218},".so",[103,121037,119238],{"class":162},[74,121039,121041],{"id":121040},"_355-常见问题","3.5.5 常见问题",[57,121043,121044],{},[60,121045,121046],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[94,121048,121050],{"className":118513,"code":121049,"language":118515,"meta":24,"style":24},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[100,121051,121052],{"__ignoreMap":24},[103,121053,121054,121056,121058],{"class":105,"line":106},[103,121055,24566],{"class":1952},[103,121057,118573],{"class":218},[103,121059,121060],{"class":218}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121062,121063],{},"blacklist-nouveau.conf文件内容如下：",[94,121065,121067],{"className":118513,"code":121066,"language":118515,"meta":24,"style":24},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[100,121068,121069,121077,121084,121096,121106],{"__ignoreMap":24},[103,121070,121071,121074],{"class":105,"line":106},[103,121072,121073],{"class":1952},"blacklist",[103,121075,121076],{"class":218}," nouveau\n",[103,121078,121079,121081],{"class":105,"line":25},[103,121080,121073],{"class":1952},[103,121082,121083],{"class":218}," lbm-nouveau\n",[103,121085,121086,121088,121091,121094],{"class":105,"line":1168},[103,121087,115920],{"class":1952},[103,121089,121090],{"class":218}," nouveau",[103,121092,121093],{"class":218}," modeset=",[103,121095,3074],{"class":162},[103,121097,121098,121101,121103],{"class":105,"line":1183},[103,121099,121100],{"class":162},"alias",[103,121102,121090],{"class":218},[103,121104,121105],{"class":218}," off\n",[103,121107,121108,121110,121113],{"class":105,"line":1189},[103,121109,121100],{"class":162},[103,121111,121112],{"class":218}," lbm-nouveau",[103,121114,121105],{"class":218},[14,121116,121117],{},"接着运行下方命令",[94,121119,121121],{"className":118513,"code":121120,"language":118515,"meta":24,"style":24},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[100,121122,121123,121133,121138],{"__ignoreMap":24},[103,121124,121125,121127,121130],{"class":105,"line":106},[103,121126,24566],{"class":1952},[103,121128,121129],{"class":218}," update-initramfs",[103,121131,121132],{"class":162}," -u\n",[103,121134,121135],{"class":105,"line":25},[103,121136,121137],{"class":1952},"或者\n",[103,121139,121140,121142,121145],{"class":105,"line":1168},[103,121141,24566],{"class":1952},[103,121143,121144],{"class":218}," dracut",[103,121146,121147],{"class":162}," --force\n",[14,121149,121150],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[94,121152,121154],{"className":118513,"code":121153,"language":118515,"meta":24,"style":24},"lsmod | grep nouveau\n",[100,121155,121156],{"__ignoreMap":24},[103,121157,121158,121161,121163,121165],{"class":105,"line":106},[103,121159,121160],{"class":1952},"lsmod",[103,121162,25099],{"class":109},[103,121164,30226],{"class":1952},[103,121166,121076],{"class":218},[57,121168,121169],{"start":25},[60,121170,121171],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[94,121173,121175],{"className":118513,"code":121174,"language":118515,"meta":24,"style":24},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[100,121176,121177],{"__ignoreMap":24},[103,121178,121179,121181,121183],{"class":105,"line":106},[103,121180,24566],{"class":1952},[103,121182,118573],{"class":218},[103,121184,121185],{"class":218}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121187,121188],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[94,121190,121192],{"className":118513,"code":121191,"language":118515,"meta":24,"style":24},"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",[100,121193,121194,121202,121210,121218,121225,121233,121243,121251],{"__ignoreMap":24},[103,121195,121196,121199],{"class":105,"line":106},[103,121197,121198],{"class":1952},"Section",[103,121200,121201],{"class":218}," \"OutputClass\"\n",[103,121203,121204,121207],{"class":105,"line":25},[103,121205,121206],{"class":1952},"   Identifier",[103,121208,121209],{"class":218}," \"nvidia\"\n",[103,121211,121212,121215],{"class":105,"line":1168},[103,121213,121214],{"class":1952},"   MatchDriver",[103,121216,121217],{"class":218}," \"nvidia-drm\"\n",[103,121219,121220,121223],{"class":105,"line":1183},[103,121221,121222],{"class":1952},"   Driver",[103,121224,121209],{"class":218},[103,121226,121227,121230],{"class":105,"line":1189},[103,121228,121229],{"class":1952},"   Option",[103,121231,121232],{"class":218}," \"AllowEmptyInitialConfiguration\"\n",[103,121234,121235,121237,121240],{"class":105,"line":1203},[103,121236,121229],{"class":1952},[103,121238,121239],{"class":218}," \"PrimaryGPU\"",[103,121241,121242],{"class":218}," \"yes\"\n",[103,121244,121245,121248],{"class":105,"line":1209},[103,121246,121247],{"class":1952},"   ModulePath",[103,121249,121250],{"class":218}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[103,121252,121253],{"class":105,"line":1300},[103,121254,121255],{"class":1952},"EndSection\n",[57,121257,121258],{"start":1168},[60,121259,121260],{},"安装N卡驱动提示错误",[94,121262,121264],{"className":120806,"code":121263,"language":120808,"meta":120809,"style":24},"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",[100,121265,121266],{"__ignoreMap":24},[103,121267,121268],{"class":105,"line":106},[103,121269,121263],{},[57,121271,121272],{},[60,121273,121274],{},"检查当前运行的内核版本：",[14,121276,121277],{},"运行以下命令以查看你当前正在使用的内核版本：",[94,121279,121281],{"className":117286,"code":121280,"language":117288,"meta":24,"style":24},"uname -r\n",[100,121282,121283],{"__ignoreMap":24},[103,121284,121285,121287],{"class":105,"line":106},[103,121286,70194],{"class":1952},[103,121288,121289],{"class":162}," -r\n",[57,121291,121292],{"start":25},[60,121293,121294],{},"安装内核开发文件：",[14,121296,121297,121298,121301],{},"确保你已经安装了与当前内核版本相匹配的 ",[100,121299,121300],{},"kernel-devel"," 包。运行以下命令来安装：",[94,121303,121305],{"className":117286,"code":121304,"language":117288,"meta":24,"style":24},"sudo dnf install kernel-devel-$(uname -r)\n",[100,121306,121307],{"__ignoreMap":24},[103,121308,121309,121311,121313,121315,121318,121320,121322,121324],{"class":105,"line":106},[103,121310,24566],{"class":1952},[103,121312,26305],{"class":218},[103,121314,23824],{"class":218},[103,121316,121317],{"class":218}," kernel-devel-",[103,121319,25089],{"class":113},[103,121321,70194],{"class":1952},[103,121323,119629],{"class":162},[103,121325,120],{"class":113},[14,121327,121328],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[57,121330,121331],{"start":1168},[60,121332,121333],{},"安装内核源代码（如果需要）：",[14,121335,121336],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[94,121338,121340],{"className":117286,"code":121339,"language":117288,"meta":24,"style":24},"sudo dnf install kernel-headers kernel-source\n",[100,121341,121342],{"__ignoreMap":24},[103,121343,121344,121346,121348,121350,121353],{"class":105,"line":106},[103,121345,24566],{"class":1952},[103,121347,26305],{"class":218},[103,121349,23824],{"class":218},[103,121351,121352],{"class":218}," kernel-headers",[103,121354,121355],{"class":218}," kernel-source\n",[57,121357,121358],{"start":1183},[60,121359,121360],{},"检查安装：",[14,121362,121363,121364,121367],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[100,121365,121366],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[94,121369,121371],{"className":117286,"code":121370,"language":117288,"meta":24,"style":24},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[100,121372,121373],{"__ignoreMap":24},[103,121374,121375,121377],{"class":105,"line":106},[103,121376,26751],{"class":1952},[103,121378,121379],{"class":218}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121381,121382,121383,121386],{},"如果仍然遇到问题，可以通过 ",[100,121384,121385],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5116,121388,121389],{},"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":24,"searchDepth":25,"depth":25,"links":121391},[121392,121396,121406,121410,121411],{"id":118489,"depth":25,"text":118490,"children":121393},[121394,121395],{"id":118499,"depth":1168,"text":118500},{"id":118509,"depth":1168,"text":118510},{"id":118709,"depth":25,"text":118710,"children":121397},[121398,121399,121400,121401,121402,121403,121404,121405],{"id":118713,"depth":1168,"text":118714},{"id":118783,"depth":1168,"text":118784},{"id":118872,"depth":1168,"text":118873},{"id":119117,"depth":1168,"text":119118},{"id":119187,"depth":1168,"text":119188},{"id":119254,"depth":1168,"text":119255},{"id":119289,"depth":1168,"text":119290},{"id":119344,"depth":1168,"text":119345},{"id":119395,"depth":25,"text":119396,"children":121407},[121408,121409],{"id":119399,"depth":1168,"text":119400},{"id":119479,"depth":1168,"text":119480},{"id":119665,"depth":25,"text":119666},{"id":119838,"depth":25,"text":119839,"children":121412},[121413,121414,121415,121416,121417],{"id":119842,"depth":1168,"text":119843},{"id":119883,"depth":1168,"text":119884},{"id":120170,"depth":1168,"text":120171},{"id":120544,"depth":1168,"text":120545},{"id":121040,"depth":1168,"text":121041},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118481,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121424,"title":121425,"body":121426,"description":27,"extension":28,"meta":121766,"navigation":30,"path":121767,"seo":121768,"stem":121769,"__hash__":121770},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121427,"toc":121764},[121428,121431,121436,121439,121685,121690,121693,121729,121732,121761],[10,121429,121425],{"id":121430},"_4-命令教程长期积累",[57,121432,121433],{},[60,121434,121435],{},"大多数命令",[14,121437,121438],{},"常用 Linux 命令速查：",[94,121440,121442],{"className":117286,"code":121441,"language":117288,"meta":24,"style":24},"# 文件与目录\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",[100,121443,121444,121449,121456,121463,121471,121478,121485,121493,121501,121508,121515,121523,121527,121532,121539,121547,121554,121558,121563,121570,121578,121586,121594,121602,121606,121611,121619,121626,121633,121641,121649,121653,121658,121667,121676],{"__ignoreMap":24},[103,121445,121446],{"class":105,"line":106},[103,121447,121448],{"class":172},"# 文件与目录\n",[103,121450,121451,121453],{"class":105,"line":25},[103,121452,26751],{"class":1952},[103,121454,121455],{"class":172},"        # 列出目录内容\n",[103,121457,121458,121460],{"class":105,"line":1168},[103,121459,101266],{"class":162},[103,121461,121462],{"class":172},"        # 切换目录\n",[103,121464,121465,121468],{"class":105,"line":1183},[103,121466,121467],{"class":162},"pwd",[103,121469,121470],{"class":172},"       # 显示当前路径\n",[103,121472,121473,121475],{"class":105,"line":1189},[103,121474,101256],{"class":1952},[103,121476,121477],{"class":172},"     # 创建目录\n",[103,121479,121480,121482],{"class":105,"line":1203},[103,121481,25312],{"class":1952},[103,121483,121484],{"class":172},"        # 删除文件或目录\n",[103,121486,121487,121490],{"class":105,"line":1209},[103,121488,121489],{"class":1952},"cp",[103,121491,121492],{"class":172},"        # 复制文件或目录\n",[103,121494,121495,121498],{"class":105,"line":1300},[103,121496,121497],{"class":1952},"mv",[103,121499,121500],{"class":172},"        # 移动\u002F重命名文件或目录\n",[103,121502,121503,121505],{"class":105,"line":1306},[103,121504,101273],{"class":1952},[103,121506,121507],{"class":172},"     # 创建空文件\n",[103,121509,121510,121512],{"class":105,"line":1318},[103,121511,120755],{"class":1952},[103,121513,121514],{"class":172},"       # 查看文件内容\n",[103,121516,121517,121520],{"class":105,"line":1601},[103,121518,121519],{"class":1952},"head\u002Ftail",[103,121521,121522],{"class":172}," # 查看文件头部\u002F尾部\n",[103,121524,121525],{"class":105,"line":1606},[103,121526,2389],{"emptyLinePlaceholder":30},[103,121528,121529],{"class":105,"line":1612},[103,121530,121531],{"class":172},"# 权限管理\n",[103,121533,121534,121536],{"class":105,"line":1617},[103,121535,24601],{"class":1952},[103,121537,121538],{"class":172},"     # 修改文件权限\n",[103,121540,121541,121544],{"class":105,"line":1631},[103,121542,121543],{"class":1952},"chown",[103,121545,121546],{"class":172},"     # 修改文件所有者\n",[103,121548,121549,121551],{"class":105,"line":1636},[103,121550,24566],{"class":1952},[103,121552,121553],{"class":172},"      # 以管理员身份执行\n",[103,121555,121556],{"class":105,"line":1642},[103,121557,2389],{"emptyLinePlaceholder":30},[103,121559,121560],{"class":105,"line":1663},[103,121561,121562],{"class":172},"# 系统信息\n",[103,121564,121565,121567],{"class":105,"line":1668},[103,121566,70194],{"class":1952},[103,121568,121569],{"class":172},"     # 系统信息\n",[103,121571,121572,121575],{"class":105,"line":1682},[103,121573,121574],{"class":1952},"df",[103,121576,121577],{"class":172},"        # 磁盘使用情况\n",[103,121579,121580,121583],{"class":105,"line":1687},[103,121581,121582],{"class":1952},"free",[103,121584,121585],{"class":172},"      # 内存使用情况\n",[103,121587,121588,121591],{"class":105,"line":1716},[103,121589,121590],{"class":1952},"top\u002Fhtop",[103,121592,121593],{"class":172},"  # 进程监控\n",[103,121595,121596,121599],{"class":105,"line":1721},[103,121597,121598],{"class":1952},"ps",[103,121600,121601],{"class":172},"        # 查看进程\n",[103,121603,121604],{"class":105,"line":1738},[103,121605,2389],{"emptyLinePlaceholder":30},[103,121607,121608],{"class":105,"line":1743},[103,121609,121610],{"class":172},"# 网络\n",[103,121612,121613,121616],{"class":105,"line":1748},[103,121614,121615],{"class":1952},"ping",[103,121617,121618],{"class":172},"      # 测试网络连通性\n",[103,121620,121621,121623],{"class":105,"line":1753},[103,121622,26839],{"class":1952},[103,121624,121625],{"class":172},"      # 发送 HTTP 请求\n",[103,121627,121628,121630],{"class":105,"line":1767},[103,121629,120279],{"class":1952},[103,121631,121632],{"class":172},"      # 下载文件\n",[103,121634,121635,121638],{"class":105,"line":1772},[103,121636,121637],{"class":1952},"ssh",[103,121639,121640],{"class":172},"       # 远程登录\n",[103,121642,121643,121646],{"class":105,"line":2566},[103,121644,121645],{"class":1952},"scp",[103,121647,121648],{"class":172},"       # 远程文件传输\n",[103,121650,121651],{"class":105,"line":2580},[103,121652,2389],{"emptyLinePlaceholder":30},[103,121654,121655],{"class":105,"line":2588},[103,121656,121657],{"class":172},"# 包管理（Debian\u002FUbuntu）\n",[103,121659,121660,121662,121664],{"class":105,"line":2593},[103,121661,117358],{"class":1952},[103,121663,117337],{"class":218},[103,121665,121666],{"class":172},"   # 更新软件源\n",[103,121668,121669,121671,121673],{"class":105,"line":2599},[103,121670,117358],{"class":1952},[103,121672,23824],{"class":218},[103,121674,121675],{"class":172},"  # 安装软件包\n",[103,121677,121678,121680,121682],{"class":105,"line":2605},[103,121679,117358],{"class":1952},[103,121681,26069],{"class":218},[103,121683,121684],{"class":172},"   # 卸载软件包\n",[57,121686,121687],{"start":25},[60,121688,121689],{},"KDE Dolphin 以root打开",[14,121691,121692],{},"kde5",[94,121694,121696],{"className":117286,"code":121695,"language":117288,"meta":24,"style":24},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[100,121697,121698],{"__ignoreMap":24},[103,121699,121700,121703,121706,121709,121711,121713,121716,121719,121721,121724,121726],{"class":105,"line":106},[103,121701,121702],{"class":1952},"pkexec",[103,121704,121705],{"class":218}," env",[103,121707,121708],{"class":218}," DISPLAY=",[103,121710,28133],{"class":113},[103,121712,28191],{"class":218},[103,121714,121715],{"class":113},"$XAUTHORITY ",[103,121717,121718],{"class":218},"KDE_SESSION_VERSION=",[103,121720,432],{"class":162},[103,121722,121723],{"class":218}," KDE_FULL_SESSION=",[103,121725,1351],{"class":162},[103,121727,121728],{"class":218}," dolphin\n",[14,121730,121731],{},"kde6",[94,121733,121735],{"className":117286,"code":121734,"language":117288,"meta":24,"style":24},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[100,121736,121737],{"__ignoreMap":24},[103,121738,121739,121741,121743,121745,121747,121749,121751,121753,121755,121757,121759],{"class":105,"line":106},[103,121740,121702],{"class":1952},[103,121742,121705],{"class":218},[103,121744,121708],{"class":218},[103,121746,28133],{"class":113},[103,121748,28191],{"class":218},[103,121750,121715],{"class":113},[103,121752,121718],{"class":218},[103,121754,457],{"class":162},[103,121756,121723],{"class":218},[103,121758,1351],{"class":162},[103,121760,121728],{"class":218},[5116,121762,121763],{},"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":24,"searchDepth":25,"depth":25,"links":121765},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121425,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":4,"title":5,"body":121772,"description":27,"extension":28,"meta":121783,"navigation":30,"path":31,"seo":121784,"stem":33,"__hash__":34},{"type":7,"value":121773,"toc":121781},[121774,121776],[10,121775,5],{"id":12},[14,121777,121778],{},[17,121779,22],{"href":19,"rel":121780},[21],{"title":24,"searchDepth":25,"depth":25,"links":121782},[],{},{"title":5,"description":27},{"id":121786,"title":121787,"body":121788,"description":27,"extension":28,"meta":122136,"navigation":30,"path":122137,"seo":122138,"stem":122139,"__hash__":122140},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121789,"toc":122128},[121790,121793,121797,121801,121805,121810,121817,121821,122114,122118,122125],[10,121791,121787],{"id":121792},"_6-拓展功能",[45,121794,121796],{"id":121795},"_61-wine","6.1 Wine",[45,121798,121800],{"id":121799},"_62-android","6.2 Android",[74,121802,121804],{"id":121803},"_621-i卡a卡","6.2.1 I卡、A卡",[57,121806,121807],{},[60,121808,121809],{},"Wayland-Waydroid(体验超级好)",[14,121811,121812,121813],{},"Waydroid 官网与安装指南：",[17,121814,121815],{"href":121815,"rel":121816},"https:\u002F\u002Fwaydro.id\u002F",[21],[74,121818,121820],{"id":121819},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[57,121822,121823],{},[60,121824,121825,121826,121828,121829,121833,121835,121838,121843,122040],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53706,121827],{},"BlissOS 官网下载：",[17,121830,121831],{"href":121831,"rel":121832},"https:\u002F\u002Fblissos.org\u002F",[21],[53706,121834],{},[1451,121836],{"alt":24,"src":121837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[57,121839,121840],{"start":1168},[60,121841,121842],{},"比较推荐的配置",[94,121844,121846],{"className":117286,"code":121845,"language":117288,"meta":24,"style":24},"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",[100,121847,121848,121855,121865,121875,121885,121897,121907,121914,121924,121933,121942,121952,121962,121971,121981,121991,122003,122013,122022,122032],{"__ignoreMap":24},[103,121849,121850,121853],{"class":105,"line":106},[103,121851,121852],{"class":1952},"qemu-system-x86_64",[103,121854,24668],{"class":162},[103,121856,121857,121860,121863],{"class":105,"line":25},[103,121858,121859],{"class":162},"        -M",[103,121861,121862],{"class":218}," q35,vmport=off",[103,121864,24668],{"class":162},[103,121866,121867,121870,121873],{"class":105,"line":1168},[103,121868,121869],{"class":162},"        -accel",[103,121871,121872],{"class":218}," kvm",[103,121874,24668],{"class":162},[103,121876,121877,121880,121883],{"class":105,"line":1183},[103,121878,121879],{"class":162},"        -cpu",[103,121881,121882],{"class":218}," qemu64,+sse3,+sse4.2",[103,121884,24668],{"class":162},[103,121886,121887,121890,121893,121895],{"class":105,"line":1189},[103,121888,121889],{"class":162},"        -smp",[103,121891,121892],{"class":218}," 8,cores=",[103,121894,406],{"class":162},[103,121896,24668],{"class":162},[103,121898,121899,121902,121905],{"class":105,"line":1203},[103,121900,121901],{"class":162},"        -m",[103,121903,121904],{"class":218}," 6G",[103,121906,24668],{"class":162},[103,121908,121909,121912],{"class":105,"line":1209},[103,121910,121911],{"class":162},"        -usb",[103,121913,24668],{"class":162},[103,121915,121916,121919,121922],{"class":105,"line":1300},[103,121917,121918],{"class":162},"        -device",[103,121920,121921],{"class":218}," virtio-tablet",[103,121923,24668],{"class":162},[103,121925,121926,121928,121931],{"class":105,"line":1306},[103,121927,121918],{"class":162},[103,121929,121930],{"class":218}," virtio-keyboard",[103,121932,24668],{"class":162},[103,121934,121935,121937,121940],{"class":105,"line":1318},[103,121936,121918],{"class":162},[103,121938,121939],{"class":218}," usb-tablet",[103,121941,24668],{"class":162},[103,121943,121944,121947,121950],{"class":105,"line":1601},[103,121945,121946],{"class":162},"        -bios",[103,121948,121949],{"class":218}," OVMF-pure-efi64.fd",[103,121951,24668],{"class":162},[103,121953,121954,121957,121960],{"class":105,"line":1606},[103,121955,121956],{"class":162},"        -net",[103,121958,121959],{"class":218}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[103,121961,24668],{"class":162},[103,121963,121964,121966,121969],{"class":105,"line":1612},[103,121965,121956],{"class":162},[103,121967,121968],{"class":218}," nic,model=virtio",[103,121970,24668],{"class":162},[103,121972,121973,121976,121979],{"class":105,"line":1617},[103,121974,121975],{"class":162},"        -audio",[103,121977,121978],{"class":218}," sdl,model=hda",[103,121980,24668],{"class":162},[103,121982,121983,121986,121989],{"class":105,"line":1631},[103,121984,121985],{"class":162},"        -display",[103,121987,121988],{"class":218}," sdl,gl=on,show-cursor=on",[103,121990,24668],{"class":162},[103,121992,121993,121995,121998,122001],{"class":105,"line":1636},[103,121994,121918],{"class":162},[103,121996,121997],{"class":218}," virtio-vga-gl,xres=1920,yres=",[103,121999,122000],{"class":162},"1080",[103,122002,24668],{"class":162},[103,122004,122005,122008,122011],{"class":105,"line":1642},[103,122006,122007],{"class":162},"        -drive",[103,122009,122010],{"class":218}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[103,122012,24668],{"class":162},[103,122014,122015,122017,122020],{"class":105,"line":1663},[103,122016,122007],{"class":162},[103,122018,122019],{"class":218}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[103,122021,24668],{"class":162},[103,122023,122024,122027,122030],{"class":105,"line":1668},[103,122025,122026],{"class":162},"        -monitor",[103,122028,122029],{"class":218}," stdio",[103,122031,24668],{"class":162},[103,122033,122034,122037],{"class":105,"line":1682},[103,122035,122036],{"class":162},"        -serial",[103,122038,122039],{"class":218}," none\n",[57,122041,122042],{"start":1189},[60,122043,122044,122045],{},"常用操作：",[57,122046,122047,122050,122106],{},[60,122048,122049],{},"全屏：Ctrl+Alt+F",[60,122051,122052,122053,122058],{},"adb调试",[57,122054,122055],{},[60,122056,122057],{},"使Linux与Android用ADB连接。",[94,122059,122061],{"className":117286,"code":122060,"language":117288,"meta":24,"style":24},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[100,122062,122063,122068,122079,122084,122096,122101],{"__ignoreMap":24},[103,122064,122065],{"class":105,"line":106},[103,122066,122067],{"class":172},"# 连接安卓\n",[103,122069,122070,122073,122076],{"class":105,"line":25},[103,122071,122072],{"class":1952},"adb",[103,122074,122075],{"class":218}," connect",[103,122077,122078],{"class":162}," 127.0.0.1\n",[103,122080,122081],{"class":105,"line":1168},[103,122082,122083],{"class":172},"# 打开shell\n",[103,122085,122086,122088,122090,122093],{"class":105,"line":1183},[103,122087,122072],{"class":1952},[103,122089,26873],{"class":162},[103,122091,122092],{"class":218}," 127.0.0.1:5555",[103,122094,122095],{"class":218}," shell\n",[103,122097,122098],{"class":105,"line":1189},[103,122099,122100],{"class":172},"# 使用root权限\n",[103,122102,122103],{"class":105,"line":1203},[103,122104,122105],{"class":1952},"su\n",[60,122107,122108,122109],{},"中文输入法",[57,122110,122111],{},[60,122112,122113],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[45,122115,122117],{"id":122116},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122119,122120,122121],{},"rEFInd 官网与文档：",[17,122122,122123],{"href":122123,"rel":122124},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[21],[5116,122126,122127],{},"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":24,"searchDepth":25,"depth":25,"links":122129},[122130,122131,122135],{"id":121795,"depth":25,"text":121796},{"id":121799,"depth":25,"text":121800,"children":122132},[122133,122134],{"id":121803,"depth":1168,"text":121804},{"id":121819,"depth":1168,"text":121820},{"id":122116,"depth":25,"text":122117},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121787,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122142,"title":122143,"body":122144,"description":27,"extension":28,"meta":125443,"navigation":30,"path":125444,"seo":125445,"stem":125446,"__hash__":125447},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122145,"toc":125417},[122146,122149,122153,122156,122163,122413,122416,122488,122491,122495,122499,122504,122507,122510,122513,122518,122521,122524,122527,122532,122535,122540,122543,122546,122551,122554,122559,122562,122566,122570,122573,122578,122581,122595,122598,122601,122610,122613,122622,122625,122628,122637,122640,122649,122652,122655,122664,122667,122670,122685,122688,122691,122700,122705,122708,122711,122720,122723,122732,122735,122744,122747,122756,122761,122764,122772,122777,122780,122789,122792,122800,122805,122808,122817,122820,122823,122827,122830,122835,122838,122843,122857,122862,122867,122878,122883,122889,122894,122909,122914,122917,122922,122927,122932,122940,122945,122952,122957,122968,122973,122976,122980,122983,122986,122991,122994,123013,123018,123021,123030,123035,123038,123060,123063,123093,123096,123101,123104,123118,123123,123142,123145,123148,123153,123165,123170,123175,123178,123183,123186,123201,123204,123209,123214,123218,123223,123263,123266,123270,123276,123282,123287,123290,123297,123302,123309,123312,123315,123322,123336,123339,123399,123402,123416,123428,123431,123434,123437,123501,123504,123507,123510,123530,123533,123538,123545,123549,123552,123556,123561,123566,123570,123573,123576,123618,123623,123626,123648,123663,123665,123670,123682,123742,123744,123746,123800,123802,123804,123810,123815,123818,123823,123827,123830,123892,123897,123900,123902,123906,123918,124000,124002,124004,124058,124064,124066,124070,124075,124077,124082,124086,124106,124141,124145,124148,124151,124154,124161,124164,124176,124179,124194,124197,124216,124264,124267,124284,124287,124301,124306,124309,124318,124333,124345,124383,124388,124397,124402,124407,124433,124442,124446,124450,124455,124458,124462,124466,124471,124474,124479,124482,124487,124490,124495,124498,124502,124507,124510,124515,124518,124522,124527,124530,124535,124538,124543,124546,124550,124555,124558,124563,124566,124571,124574,124578,124583,124586,124591,124594,124599,124602,124607,124610,124615,124618,124623,124626,124630,124635,124638,124643,124650,124654,124659,124662,124667,124670,124674,124679,124682,124685,124688,124691,124694,124698,124701,124711,124716,124721,124743,124748,124753,124760,124764,124769,124772,124775,124780,124783,124786,124789,124792,124795,124798,124801,124804,124807,124810,124813,124816,124821,124826,124831,124836,124841,124846,124851,124854,124858,124861,124865,124870,124875,124880,124885,124889,124895,124903,124908,124911,124916,124931,124934,124939,124973,124988,124991,125046,125072,125084,125087,125096,125099,125114,125119,125122,125128,125133,125136,125141,125144,125149,125154,125161,125164,125179,125182,125217,125222,125230,125268,125271,125274,125279,125282,125287,125298,125332,125337,125340,125349,125354,125360,125363,125368,125377,125382,125385,125388,125393,125401,125404,125409,125414],[10,122147,122143],{"id":122148},"_7-其他操作",[45,122150,122152],{"id":122151},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122154,122155],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122157,122158,122159,122162],{},"进入工控机的硬盘目录，进入",[100,122160,122161],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[94,122164,122168],{"className":122165,"code":122166,"language":122167,"meta":24,"style":24},"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",[100,122169,122170,122178,122189,122196,122203,122215,122222,122234,122245,122256,122263,122270,122277,122289,122301,122308,122320,122332,122339,122351,122363,122375,122386,122393,122404],{"__ignoreMap":24},[103,122171,122172,122175],{"class":105,"line":106},[103,122173,122174],{"class":51290},"network",[103,122176,122177],{"class":113},": \n",[103,122179,122180,122183,122185,122187],{"class":105,"line":25},[103,122181,122182],{"class":51290},"  version",[103,122184,51427],{"class":113},[103,122186,191],{"class":162},[103,122188,2663],{"class":113},[103,122190,122191,122194],{"class":105,"line":1168},[103,122192,122193],{"class":51290},"  wifis",[103,122195,122177],{"class":113},[103,122197,122198,122201],{"class":105,"line":1183},[103,122199,122200],{"class":51290},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[103,122202,122177],{"class":113},[103,122204,122205,122208,122210,122213],{"class":105,"line":1189},[103,122206,122207],{"class":51290},"      renderer",[103,122209,51427],{"class":113},[103,122211,122212],{"class":218},"NetworkManager",[103,122214,2663],{"class":113},[103,122216,122217,122220],{"class":105,"line":1203},[103,122218,122219],{"class":51290},"      match",[103,122221,122177],{"class":113},[103,122223,122224,122227,122229,122232],{"class":105,"line":1209},[103,122225,122226],{"class":51290},"        name",[103,122228,51427],{"class":113},[103,122230,122231],{"class":218},"\"wlan0\"",[103,122233,2663],{"class":113},[103,122235,122236,122239,122241,122243],{"class":105,"line":1300},[103,122237,122238],{"class":51290},"      dhcp4",[103,122240,51427],{"class":113},[103,122242,1351],{"class":162},[103,122244,2663],{"class":113},[103,122246,122247,122250,122252,122254],{"class":105,"line":1306},[103,122248,122249],{"class":51290},"      dhcp6",[103,122251,51427],{"class":113},[103,122253,1351],{"class":162},[103,122255,2663],{"class":113},[103,122257,122258,122261],{"class":105,"line":1318},[103,122259,122260],{"class":51290},"      access-points",[103,122262,122177],{"class":113},[103,122264,122265,122268],{"class":105,"line":1601},[103,122266,122267],{"class":218},"        \"EMIS_Vinci_Robocon_5G\"",[103,122269,122177],{"class":113},[103,122271,122272,122275],{"class":105,"line":1606},[103,122273,122274],{"class":51290},"          auth",[103,122276,122177],{"class":113},[103,122278,122279,122282,122284,122287],{"class":105,"line":1612},[103,122280,122281],{"class":51290},"            key-management",[103,122283,51427],{"class":113},[103,122285,122286],{"class":218},"\"psk\"",[103,122288,2663],{"class":113},[103,122290,122291,122294,122296,122299],{"class":105,"line":1617},[103,122292,122293],{"class":51290},"            password",[103,122295,51427],{"class":113},[103,122297,122298],{"class":218},"\"vinci666\"",[103,122300,2663],{"class":113},[103,122302,122303,122306],{"class":105,"line":1631},[103,122304,122305],{"class":51290},"          networkmanager",[103,122307,122177],{"class":113},[103,122309,122310,122313,122315,122318],{"class":105,"line":1636},[103,122311,122312],{"class":51290},"            uuid",[103,122314,51427],{"class":113},[103,122316,122317],{"class":218},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[103,122319,2663],{"class":113},[103,122321,122322,122325,122327,122330],{"class":105,"line":1642},[103,122323,122324],{"class":51290},"            name",[103,122326,51427],{"class":113},[103,122328,122329],{"class":218},"\"EMIS_Vinci_Robocon_5G\"",[103,122331,2663],{"class":113},[103,122333,122334,122337],{"class":105,"line":1663},[103,122335,122336],{"class":51290},"            passthrough",[103,122338,122177],{"class":113},[103,122340,122341,122344,122346,122349],{"class":105,"line":1668},[103,122342,122343],{"class":51290},"              wifi-security.auth-alg",[103,122345,51427],{"class":113},[103,122347,122348],{"class":218},"\"open\"",[103,122350,2663],{"class":113},[103,122352,122353,122356,122358,122361],{"class":105,"line":1682},[103,122354,122355],{"class":51290},"              ipv6.addr-gen-mode",[103,122357,51427],{"class":113},[103,122359,122360],{"class":218},"\"default\"",[103,122362,2663],{"class":113},[103,122364,122365,122368,122370,122373],{"class":105,"line":1687},[103,122366,122367],{"class":51290},"              ipv6.ip6-privacy",[103,122369,51427],{"class":113},[103,122371,122372],{"class":218},"\"-1\"",[103,122374,2663],{"class":113},[103,122376,122377,122380,122382,122384],{"class":105,"line":1716},[103,122378,122379],{"class":51290},"              proxy._",[103,122381,51427],{"class":113},[103,122383,7642],{"class":218},[103,122385,2663],{"class":113},[103,122387,122388,122391],{"class":105,"line":1721},[103,122389,122390],{"class":51290},"      networkmanager",[103,122392,122177],{"class":113},[103,122394,122395,122398,122400,122402],{"class":105,"line":1738},[103,122396,122397],{"class":51290},"        uuid",[103,122399,51427],{"class":113},[103,122401,122317],{"class":218},[103,122403,2663],{"class":113},[103,122405,122406,122408,122410],{"class":105,"line":1743},[103,122407,122226],{"class":51290},[103,122409,51427],{"class":113},[103,122411,122412],{"class":218},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122414,122415],{},"将其改为新wifi的名和密码：",[94,122417,122419],{"className":122165,"code":122418,"language":122167,"meta":24,"style":24},"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",[100,122420,122421,122427,122436,122442,122449,122458,122466,122472,122478],{"__ignoreMap":24},[103,122422,122423,122425],{"class":105,"line":106},[103,122424,122174],{"class":51290},[103,122426,3728],{"class":113},[103,122428,122429,122431,122433],{"class":105,"line":25},[103,122430,122182],{"class":51290},[103,122432,51427],{"class":113},[103,122434,122435],{"class":162},"2\n",[103,122437,122438,122440],{"class":105,"line":1168},[103,122439,122193],{"class":51290},[103,122441,3728],{"class":113},[103,122443,122444,122447],{"class":105,"line":1183},[103,122445,122446],{"class":51290},"    wlan0",[103,122448,3728],{"class":113},[103,122450,122451,122453,122455],{"class":105,"line":1189},[103,122452,122238],{"class":51290},[103,122454,51427],{"class":113},[103,122456,122457],{"class":162},"true\n",[103,122459,122460,122462,122464],{"class":105,"line":1203},[103,122461,122249],{"class":51290},[103,122463,51427],{"class":113},[103,122465,122457],{"class":162},[103,122467,122468,122470],{"class":105,"line":1209},[103,122469,122260],{"class":51290},[103,122471,3728],{"class":113},[103,122473,122474,122476],{"class":105,"line":1300},[103,122475,122267],{"class":218},[103,122477,3728],{"class":113},[103,122479,122480,122483,122485],{"class":105,"line":1306},[103,122481,122482],{"class":51290},"          password",[103,122484,51427],{"class":113},[103,122486,122487],{"class":218},"\"vinci666\"\n",[14,122489,122490],{},"工控机开机即可连上网。",[45,122492,122494],{"id":122493},"_72-ssh远程开发","7.2 SSH远程开发",[74,122496,122498],{"id":122497},"_721-环境准备","7.2.1 环境准备",[14,122500,122501],{},[263,122502,122503],{},"1.硬件准备",[14,122505,122506],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122508,122509],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122511,122512],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122514,122515],{},[263,122516,122517],{},"2.设置固定IP",[14,122519,122520],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122522,122523],{},"1.进入设置界面",[14,122525,122526],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122528,122529],{},[1451,122530],{"alt":24,"src":122531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122533,122534],{},"2.配置所连接的网络",[14,122536,122537],{},[1451,122538],{"alt":24,"src":122539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122541,122542],{},"3.设置固定IP",[14,122544,122545],{},"查看当前IP地址。",[14,122547,122548],{},[1451,122549],{"alt":24,"src":122550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122552,122553],{},"设置固定IP。",[14,122555,122556],{},[1451,122557],{"alt":24,"src":122558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122560,122561],{},"至此，IP配置完毕。",[74,122563,122565],{"id":122564},"_722-环境搭建","7.2.2 环境搭建",[14,122567,122568],{},[263,122569,25743],{},[14,122571,122572],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122574,122575],{},[263,122576,122577],{},"实现",[14,122579,122580],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[57,122582,122583,122586,122589,122592],{},[60,122584,122585],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[60,122587,122588],{},"远程主机启动SSH服务；",[60,122590,122591],{},"本地主机登陆远程主机；",[60,122593,122594],{},"实现数据传输。",[14,122596,122597],{},"1.安装SSH客户端与服务端",[14,122599,122600],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[94,122602,122604],{"className":120806,"code":122603,"language":120808,"meta":120809,"style":24}," sudo apt install openssh-server\n",[100,122605,122606],{"__ignoreMap":24},[103,122607,122608],{"class":105,"line":106},[103,122609,122603],{},[14,122611,122612],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[94,122614,122616],{"className":120806,"code":122615,"language":120808,"meta":120809,"style":24},"sudo apt install openssh-client\n",[100,122617,122618],{"__ignoreMap":24},[103,122619,122620],{"class":105,"line":106},[103,122621,122615],{},[14,122623,122624],{},"2.远程主机启动SSH服务",[14,122626,122627],{},"远程主机启动 ssh 服务命令如下：",[94,122629,122631],{"className":120806,"code":122630,"language":120808,"meta":120809,"style":24},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[100,122632,122633],{"__ignoreMap":24},[103,122634,122635],{"class":105,"line":106},[103,122636,122630],{},[14,122638,122639],{},"启动后可使用如下命令查看服务是否正常运行：",[94,122641,122643],{"className":120806,"code":122642,"language":120808,"meta":120809,"style":24},"ps -e | grep ssh\n",[100,122644,122645],{"__ignoreMap":24},[103,122646,122647],{"class":105,"line":106},[103,122648,122642],{},[14,122650,122651],{},"如果启动成功，会包含 sshd 程序。",[14,122653,122654],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[94,122656,122658],{"className":120806,"code":122657,"language":120808,"meta":120809,"style":24},"sudo systemctl enable ssh\n",[100,122659,122660],{"__ignoreMap":24},[103,122661,122662],{"class":105,"line":106},[103,122663,122657],{},[14,122665,122666],{},"3.本地远程登录",[14,122668,122669],{},"登录远程主机可以调用如下命令:",[94,122671,122673],{"className":117286,"code":122672,"language":117288,"meta":24,"style":24},"ssh -X 用户名@ip地址\n",[100,122674,122675],{"__ignoreMap":24},[103,122676,122677,122679,122682],{"class":105,"line":106},[103,122678,121637],{"class":1952},[103,122680,122681],{"class":162}," -X",[103,122683,122684],{"class":218}," 用户名@ip地址\n",[14,122686,122687],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122689,122690],{},"如果退出，可以调用exit命令：",[94,122692,122694],{"className":120806,"code":122693,"language":120808,"meta":120809,"style":24},"exit\n",[100,122695,122696],{"__ignoreMap":24},[103,122697,122698],{"class":105,"line":106},[103,122699,122693],{},[14,122701,122702],{},[263,122703,122704],{},"4.实现数据传输",[14,122706,122707],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122709,122710],{},"上传文件指令格式如下：",[94,122712,122714],{"className":120806,"code":122713,"language":120808,"meta":120809,"style":24},"scp 本地文件路径 账号@ip:路径\n",[100,122715,122716],{"__ignoreMap":24},[103,122717,122718],{"class":105,"line":106},[103,122719,122713],{},[14,122721,122722],{},"上传文件夹指令格式如下：",[94,122724,122726],{"className":120806,"code":122725,"language":120808,"meta":120809,"style":24},"scp -r 本地文件夹路径 账号@ip:路径\n",[100,122727,122728],{"__ignoreMap":24},[103,122729,122730],{"class":105,"line":106},[103,122731,122725],{},[14,122733,122734],{},"下载文件指令格式如下：",[94,122736,122738],{"className":120806,"code":122737,"language":120808,"meta":120809,"style":24},"scp 账号@ip:路径 本地文件夹路径\n",[100,122739,122740],{"__ignoreMap":24},[103,122741,122742],{"class":105,"line":106},[103,122743,122737],{},[14,122745,122746],{},"下载文件夹指令格式如下：",[94,122748,122750],{"className":120806,"code":122749,"language":120808,"meta":120809,"style":24},"scp -r 账号@ip:路径 本地文件夹路径\n",[100,122751,122752],{"__ignoreMap":24},[103,122753,122754],{"class":105,"line":106},[103,122755,122749],{},[14,122757,122758],{},[263,122759,122760],{},"优化",[14,122762,122763],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[57,122765,122766,122769],{},[60,122767,122768],{},"本地生成密钥对；",[60,122770,122771],{},"将公钥上传至远程主机。",[14,122773,122774],{},[263,122775,122776],{},"1.生成密钥对",[14,122778,122779],{},"本地客户端生成公私钥：（一路回车默认即可）",[94,122781,122783],{"className":120806,"code":122782,"language":120808,"meta":120809,"style":24},"ssh-keygen\n",[100,122784,122785],{"__ignoreMap":24},[103,122786,122787],{"class":105,"line":106},[103,122788,122782],{},[14,122790,122791],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[57,122793,122794,122797],{},[60,122795,122796],{},"id_rsa （私钥）；",[60,122798,122799],{},"id_rsa.pub (公钥)。",[14,122801,122802],{},[263,122803,122804],{},"2.公钥上传",[14,122806,122807],{},"上传指令如下：",[94,122809,122811],{"className":120806,"code":122810,"language":120808,"meta":120809,"style":24},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[100,122812,122813],{"__ignoreMap":24},[103,122814,122815],{"class":105,"line":106},[103,122816,122810],{},[14,122818,122819],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122821,122822],{},"以后再远程登录就无需录入密码了。",[74,122824,122826],{"id":122825},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122828,122829],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122831,122832],{},[263,122833,122834],{},"1.准备工作",[14,122836,122837],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122839,122840],{},[263,122841,122842],{},"2.为VScode安装远程开发插件",[14,122844,122845,122846,122849,122850,122853,122854,28375],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[100,122847,122848],{},"扩展：商店","的搜索栏输入",[100,122851,122852],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[100,122855,122856],{},"安装",[14,122858,122859],{},[1451,122860],{"alt":24,"src":122861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122863,122864],{},[263,122865,122866],{},"3.配置远程连接",[14,122868,122869,122870,122873,122874,122877],{},"步骤1：使用快捷键",[100,122871,122872],{},"ctrl + shift + p","打开命令输入窗口，并输入",[100,122875,122876],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122879,122880],{},[1451,122881],{"alt":24,"src":122882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122884,122885,122886,28375],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[100,122887,122888],{},"Add New SSH Host",[14,122890,122891],{},[1451,122892],{"alt":24,"src":122893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122895,122896,122897,122900,122901,122904,122905,122908],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[100,122898,122899],{},"ssh +X ubuntu@192.168.43.164","，其中，",[100,122902,122903],{},"ubuntu","需要替换为你的登录用户名，",[100,122906,122907],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122910,122911],{},[1451,122912],{"alt":24,"src":122913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122915,122916],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122918,122919],{},[1451,122920],{"alt":24,"src":122921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,122923,122924],{},[1451,122925],{"alt":24,"src":122926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,122928,122929],{},[263,122930,122931],{},"4.使用",[14,122933,122934,122935,122873,122937,122939],{},"步骤1：继续使用快捷键",[100,122936,122872],{},[100,122938,122876],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,122941,122942],{},[1451,122943],{"alt":24,"src":122944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,122946,122947,122948,122951],{},"或者，也可以点击侧边栏的",[100,122949,122950],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,122953,122954],{},[1451,122955],{"alt":24,"src":122956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,122958,122959,122960,122963,122964,122967],{},"步骤2：选择菜单栏的",[100,122961,122962],{},"文件","下的",[100,122965,122966],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,122969,122970],{},[1451,122971],{"alt":24,"src":122972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,122974,122975],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[45,122977,122979],{"id":122978},"_73-远程桌面","7.3 远程桌面",[14,122981,122982],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,122984,122985],{},"我们选择使用VNC来看。",[57,122987,122988],{},[60,122989,122990],{},"安装VNC服务器：",[14,122992,122993],{},"这里以TigerVNC为例进行安装：",[94,122995,122997],{"className":117286,"code":122996,"language":117288,"meta":24,"style":24},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[100,122998,122999],{"__ignoreMap":24},[103,123000,123001,123003,123005,123007,123010],{"class":105,"line":106},[103,123002,24566],{"class":1952},[103,123004,117307],{"class":218},[103,123006,23824],{"class":218},[103,123008,123009],{"class":218}," tigervnc-standalone-server",[103,123011,123012],{"class":218}," tigervnc-common\n",[57,123014,123015],{"start":25},[60,123016,123017],{},"设置VNC密码：",[14,123019,123020],{},"为VNC用户设置密码，运行以下命令：",[94,123022,123024],{"className":117286,"code":123023,"language":117288,"meta":24,"style":24},"vncpasswd\n",[100,123025,123026],{"__ignoreMap":24},[103,123027,123028],{"class":105,"line":106},[103,123029,123023],{"class":1952},[57,123031,123032],{"start":1168},[60,123033,123034],{},"配置VNC启动脚本:",[14,123036,123037],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[94,123039,123041],{"className":117286,"code":123040,"language":117288,"meta":24,"style":24},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[100,123042,123043,123052],{"__ignoreMap":24},[103,123044,123045,123047,123049],{"class":105,"line":106},[103,123046,101256],{"class":1952},[103,123048,29206],{"class":162},[103,123050,123051],{"class":218}," ~\u002F.vnc\n",[103,123053,123054,123057],{"class":105,"line":25},[103,123055,123056],{"class":1952},"nano",[103,123058,123059],{"class":218}," ~\u002F.vnc\u002Fxstartup\n",[14,123061,123062],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[94,123064,123066],{"className":117286,"code":123065,"language":117288,"meta":24,"style":24},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[100,123067,123068,123073,123081,123088],{"__ignoreMap":24},[103,123069,123070],{"class":105,"line":106},[103,123071,123072],{"class":172},"#!\u002Fbin\u002Fsh\n",[103,123074,123075,123078],{"class":105,"line":25},[103,123076,123077],{"class":162},"unset",[103,123079,123080],{"class":218}," SESSION_MANAGER\n",[103,123082,123083,123085],{"class":105,"line":1168},[103,123084,123077],{"class":162},[103,123086,123087],{"class":218}," DBUS_SESSION_BUS_ADDRESS\n",[103,123089,123090],{"class":105,"line":1183},[103,123091,123092],{"class":1952},"gnome-session\n",[14,123094,123095],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[57,123097,123098],{"start":1183},[60,123099,123100],{},"给予执行权限：",[14,123102,123103],{},"为xstartup文件设置执行权限：",[94,123105,123107],{"className":117286,"code":123106,"language":117288,"meta":24,"style":24},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[100,123108,123109],{"__ignoreMap":24},[103,123110,123111,123113,123116],{"class":105,"line":106},[103,123112,24601],{"class":1952},[103,123114,123115],{"class":218}," +x",[103,123117,123059],{"class":218},[57,123119,123120],{"start":1189},[60,123121,123122],{},"启动VNC服务器：",[94,123124,123126],{"className":117286,"code":123125,"language":117288,"meta":24,"style":24},"vncserver -geometry 1920x1080 -localhost=0\n",[100,123127,123128],{"__ignoreMap":24},[103,123129,123130,123133,123136,123139],{"class":105,"line":106},[103,123131,123132],{"class":1952},"vncserver",[103,123134,123135],{"class":162}," -geometry",[103,123137,123138],{"class":218}," 1920x1080",[103,123140,123141],{"class":162}," -localhost=0\n",[14,123143,123144],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123146,123147],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[57,123149,123150],{"start":1203},[60,123151,123152],{},"查看已开启的VNC服务器：",[94,123154,123156],{"className":117286,"code":123155,"language":117288,"meta":24,"style":24},"vncserver -list\n",[100,123157,123158],{"__ignoreMap":24},[103,123159,123160,123162],{"class":105,"line":106},[103,123161,123132],{"class":1952},[103,123163,123164],{"class":162}," -list\n",[14,123166,123167],{},[1451,123168],{"alt":24,"src":123169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[57,123171,123172],{"start":1209},[60,123173,123174],{},"连接到VNC服务器：",[14,123176,123177],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[57,123179,123180],{"start":1300},[60,123181,123182],{},"停止VNC服务器：",[14,123184,123185],{},"如果需要停止VNC服务器，可以使用以下命令：",[94,123187,123189],{"className":117286,"code":123188,"language":117288,"meta":24,"style":24},"vncserver -kill :1\n",[100,123190,123191],{"__ignoreMap":24},[103,123192,123193,123195,123198],{"class":105,"line":106},[103,123194,123132],{"class":1952},[103,123196,123197],{"class":162}," -kill",[103,123199,123200],{"class":218}," :1\n",[14,123202,123203],{},"将:1替换为你实际使用的显示编号。",[14,123205,123206],{},[1451,123207],{"alt":24,"src":123208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123210,123211],{},[1451,123212],{"alt":24,"src":123213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[45,123215,123217],{"id":123216},"_74-usb端口设置","7.4 USB端口设置",[14,123219,123220],{},[263,123221,123222],{},"首先先配置好权限",[94,123224,123226],{"className":117286,"code":123225,"language":117288,"meta":24,"style":24},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[100,123227,123228,123233,123246,123253,123258],{"__ignoreMap":24},[103,123229,123230],{"class":105,"line":106},[103,123231,123232],{"class":172},"# 将用户权限提高\n",[103,123234,123235,123237,123239,123241,123244],{"class":105,"line":25},[103,123236,24566],{"class":1952},[103,123238,26564],{"class":218},[103,123240,26567],{"class":162},[103,123242,123243],{"class":218}," dialout",[103,123245,26572],{"class":113},[103,123247,123248,123250],{"class":105,"line":1168},[103,123249,26591],{"class":1952},[103,123251,123252],{"class":218}," dialout\n",[103,123254,123255],{"class":105,"line":1183},[103,123256,123257],{"class":172},"# 查看下面命令是否输出dialout（若输出才正常）\n",[103,123259,123260],{"class":105,"line":1189},[103,123261,123262],{"class":1952},"groups\n",[14,123264,123265],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[74,123267,123269],{"id":123268},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123271,123272,123275],{},[263,123273,123274],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123277,123278,123281],{},[263,123279,123280],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123283,123284],{},[263,123285,123286],{},"流程如下：",[14,123288,123289],{},"（1）.查找设备idVendor和idProduct",[14,123291,123292,123293,123296],{},"接入两个USB设备，在终端调用指令",[100,123294,123295],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123298,123299],{},[1451,123300],{"alt":24,"src":123301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123303,123304,123305,123308],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[100,123306,123307],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123310,123311],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123313,123314],{},"（2）.编写映射规则",[14,123316,123317,123318,123321],{},"在",[100,123319,123320],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[94,123323,123325],{"className":117286,"code":123324,"language":117288,"meta":24,"style":24},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[100,123326,123327],{"__ignoreMap":24},[103,123328,123329,123331,123333],{"class":105,"line":106},[103,123330,24566],{"class":1952},[103,123332,118573],{"class":218},[103,123334,123335],{"class":218}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123337,123338],{},"输入如下内容：",[94,123340,123342],{"className":117286,"code":123341,"language":117288,"meta":24,"style":24},"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",[100,123343,123344,123374],{"__ignoreMap":24},[103,123345,123346,123349,123351,123354,123357,123360,123363,123365,123368,123371],{"class":105,"line":106},[103,123347,123348],{"class":113},"KERNEL",[103,123350,159],{"class":109},[103,123352,123353],{"class":218},"=\"ttyUSB*\",",[103,123355,123356],{"class":1952}," ATTRS",[103,123358,123359],{"class":218},"{idVendor}==",[103,123361,123362],{"class":1952},"\"10c4\"",[103,123364,491],{"class":1952},[103,123366,123367],{"class":218}," ATTRS{idProduct}==\"ea60\",",[103,123369,123370],{"class":218}," MODE:=\"0777\",",[103,123372,123373],{"class":218}," SYMLINK+=\"mylidar\"\n",[103,123375,123376,123378,123380,123382,123384,123386,123389,123391,123394,123396],{"class":105,"line":25},[103,123377,123348],{"class":113},[103,123379,159],{"class":109},[103,123381,123353],{"class":218},[103,123383,123356],{"class":1952},[103,123385,123359],{"class":218},[103,123387,123388],{"class":1952},"\"1a86\"",[103,123390,491],{"class":1952},[103,123392,123393],{"class":218}," ATTRS{idProduct}==\"7523\",",[103,123395,123370],{"class":218},[103,123397,123398],{"class":218}," SYMLINK+=\"mycar\"\n",[14,123400,123401],{},"代码解释：",[1120,123403,123404,123407,123410,123413],{},[60,123405,123406],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[60,123408,123409],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[60,123411,123412],{},"SYMLINK是符号连接，即绑定的别名；",[60,123414,123415],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123417,123418,123419,123422,123425],{},"***小提示：***",[23543,123420,123421],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[100,123423,123424],{},"\u002Fetc\u002Fudev\u002Frule.d",[23543,123426,123427],{},"目录即可。",[14,123429,123430],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123432,123433],{},"（3）.使规则生效",[14,123435,123436],{},"在终端下输入如下指令：",[94,123438,123440],{"className":117286,"code":123439,"language":117288,"meta":24,"style":24},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[100,123441,123442,123447,123459,123470,123474,123479,123492],{"__ignoreMap":24},[103,123443,123444],{"class":105,"line":106},[103,123445,123446],{"class":172},"# Ubuntu用下方命令\n",[103,123448,123449,123451,123453,123456],{"class":105,"line":25},[103,123450,24566],{"class":1952},[103,123452,120038],{"class":218},[103,123454,123455],{"class":218}," udev",[103,123457,123458],{"class":218}," reload\n",[103,123460,123461,123463,123465,123467],{"class":105,"line":1168},[103,123462,24566],{"class":1952},[103,123464,120038],{"class":218},[103,123466,123455],{"class":218},[103,123468,123469],{"class":218}," restart\n",[103,123471,123472],{"class":105,"line":1183},[103,123473,2389],{"emptyLinePlaceholder":30},[103,123475,123476],{"class":105,"line":1189},[103,123477,123478],{"class":172},"#Fedora用下方命令\n",[103,123480,123481,123483,123486,123489],{"class":105,"line":1203},[103,123482,24566],{"class":1952},[103,123484,123485],{"class":218}," udevadm",[103,123487,123488],{"class":218}," control",[103,123490,123491],{"class":162}," --reload\n",[103,123493,123494,123496,123498],{"class":105,"line":1209},[103,123495,24566],{"class":1952},[103,123497,123485],{"class":218},[103,123499,123500],{"class":218}," trigger\n",[14,123502,123503],{},"再重新插拔设备即可。",[14,123505,123506],{},"（4）.测试",[14,123508,123509],{},"终端下输入如下指令",[94,123511,123513],{"className":117286,"code":123512,"language":117288,"meta":24,"style":24},"ll \u002Fdev | grep ttyUSB\n",[100,123514,123515],{"__ignoreMap":24},[103,123516,123517,123520,123523,123525,123527],{"class":105,"line":106},[103,123518,123519],{"class":1952},"ll",[103,123521,123522],{"class":218}," \u002Fdev",[103,123524,25099],{"class":109},[103,123526,30226],{"class":1952},[103,123528,123529],{"class":218}," ttyUSB\n",[14,123531,123532],{},"运行结果如下：",[14,123534,123535],{},[1451,123536],{"alt":24,"src":123537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123539,123540,123541,123544],{},"也可以多次插拔USB设备，会发现设备端口",[100,123542,123543],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123546,123547],{},[263,123548,117954],{},[14,123550,123551],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[74,123553,123555],{"id":123554},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123557,123558,123560],{},[263,123559,123274],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123562,123563,123565],{},[263,123564,123280],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123567,123568],{},[263,123569,123286],{},[14,123571,123572],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123574,123575],{},"调用如下指令查看第一台雷达的USB信息：",[94,123577,123579],{"className":117286,"code":123578,"language":117288,"meta":24,"style":24},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[100,123580,123581,123601],{"__ignoreMap":24},[103,123582,123583,123586,123588,123591,123594,123596,123598],{"class":105,"line":106},[103,123584,123585],{"class":1952},"udevadm",[103,123587,69811],{"class":218},[103,123589,123590],{"class":162}," --attribute-walk",[103,123592,123593],{"class":162}," --name=\u002Fdev\u002FttyUSB0",[103,123595,25099],{"class":109},[103,123597,30226],{"class":1952},[103,123599,123600],{"class":218}," KERNELS\n",[103,123602,123603,123605,123607,123609,123612,123614,123616],{"class":105,"line":25},[103,123604,123585],{"class":1952},[103,123606,69811],{"class":218},[103,123608,123590],{"class":162},[103,123610,123611],{"class":162}," --name=\u002Fdev\u002FttyACM0",[103,123613,25099],{"class":109},[103,123615,30226],{"class":1952},[103,123617,123600],{"class":218},[14,123619,123620],{},[1451,123621],{"alt":24,"src":123622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123624,123625],{},"调用如下指令查看第二台雷达的USB信息：",[94,123627,123629],{"className":117286,"code":123628,"language":117288,"meta":24,"style":24},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[100,123630,123631],{"__ignoreMap":24},[103,123632,123633,123635,123637,123639,123642,123644,123646],{"class":105,"line":106},[103,123634,123585],{"class":1952},[103,123636,69811],{"class":218},[103,123638,123590],{"class":162},[103,123640,123641],{"class":162}," --name=\u002Fdev\u002FttyUSB1",[103,123643,25099],{"class":109},[103,123645,30226],{"class":1952},[103,123647,123600],{"class":218},[14,123649,123650,123651,123654,123655,123658,123659,123662],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[100,123652,123653],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[100,123656,123657],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[263,123660,123661],{},"唯一性标识","”。",[14,123664,123314],{},[14,123666,123317,123667,123669],{},[100,123668,123320],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[94,123671,123672],{"className":117286,"code":123324,"language":117288,"meta":24,"style":24},[100,123673,123674],{"__ignoreMap":24},[103,123675,123676,123678,123680],{"class":105,"line":106},[103,123677,24566],{"class":1952},[103,123679,118573],{"class":218},[103,123681,123335],{"class":218},[94,123683,123685],{"className":117286,"code":123684,"language":117288,"meta":24,"style":24},"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",[100,123686,123687,123716],{"__ignoreMap":24},[103,123688,123689,123691,123693,123695,123698,123700,123703,123706,123708,123711,123713],{"class":105,"line":106},[103,123690,123348],{"class":113},[103,123692,159],{"class":109},[103,123694,123353],{"class":218},[103,123696,123697],{"class":113}," KERNELS",[103,123699,159],{"class":109},[103,123701,123702],{"class":218},"=\"1-1.3:1.0\",",[103,123704,123705],{"class":1952}," MODE:",[103,123707,159],{"class":218},[103,123709,123710],{"class":1952},"\"0777\"",[103,123712,491],{"class":1952},[103,123714,123715],{"class":218}," SYMLINK+=\"rplidar_front\"\n",[103,123717,123718,123720,123722,123724,123726,123728,123731,123733,123735,123737,123739],{"class":105,"line":25},[103,123719,123348],{"class":113},[103,123721,159],{"class":109},[103,123723,123353],{"class":218},[103,123725,123697],{"class":113},[103,123727,159],{"class":109},[103,123729,123730],{"class":218},"=\"1-1.4:1.0\",",[103,123732,123705],{"class":1952},[103,123734,159],{"class":218},[103,123736,123710],{"class":1952},[103,123738,491],{"class":1952},[103,123740,123741],{"class":218}," SYMLINK+=\"rplidar_back\"\n",[14,123743,123433],{},[14,123745,123436],{},[94,123747,123748],{"className":117286,"code":123439,"language":117288,"meta":24,"style":24},[100,123749,123750,123754,123764,123774,123778,123782,123792],{"__ignoreMap":24},[103,123751,123752],{"class":105,"line":106},[103,123753,123446],{"class":172},[103,123755,123756,123758,123760,123762],{"class":105,"line":25},[103,123757,24566],{"class":1952},[103,123759,120038],{"class":218},[103,123761,123455],{"class":218},[103,123763,123458],{"class":218},[103,123765,123766,123768,123770,123772],{"class":105,"line":1168},[103,123767,24566],{"class":1952},[103,123769,120038],{"class":218},[103,123771,123455],{"class":218},[103,123773,123469],{"class":218},[103,123775,123776],{"class":105,"line":1183},[103,123777,2389],{"emptyLinePlaceholder":30},[103,123779,123780],{"class":105,"line":1189},[103,123781,123478],{"class":172},[103,123783,123784,123786,123788,123790],{"class":105,"line":1203},[103,123785,24566],{"class":1952},[103,123787,123485],{"class":218},[103,123789,123488],{"class":218},[103,123791,123491],{"class":162},[103,123793,123794,123796,123798],{"class":105,"line":1209},[103,123795,24566],{"class":1952},[103,123797,123485],{"class":218},[103,123799,123500],{"class":218},[14,123801,123503],{},[14,123803,123506],{},[14,123805,123509,123806,123809],{},[100,123807,123808],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123811,123812],{},[1451,123813],{"alt":24,"src":123814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123816,123817],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123819,123820,123822],{},[263,123821,117954],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[74,123824,123826],{"id":123825},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123828,123829],{},"（1）.查看所连接的主机USB接口的信息",[94,123831,123833],{"className":117286,"code":123832,"language":117288,"meta":24,"style":24},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[100,123834,123835,123865],{"__ignoreMap":24},[103,123836,123837,123839,123841,123844,123846,123848,123850,123852,123855,123858,123860,123863],{"class":105,"line":106},[103,123838,123585],{"class":1952},[103,123840,69811],{"class":218},[103,123842,123843],{"class":162}," -a",[103,123845,29206],{"class":162},[103,123847,28412],{"class":113},[103,123849,123585],{"class":1952},[103,123851,69811],{"class":218},[103,123853,123854],{"class":162}," -q",[103,123856,123857],{"class":218}," path",[103,123859,25105],{"class":162},[103,123861,123862],{"class":218}," \u002Fdev\u002FttyACM0",[103,123864,120],{"class":113},[103,123866,123867,123869,123871,123873,123875,123877,123879,123881,123883,123885,123887,123890],{"class":105,"line":25},[103,123868,123585],{"class":1952},[103,123870,69811],{"class":218},[103,123872,123843],{"class":162},[103,123874,29206],{"class":162},[103,123876,28412],{"class":113},[103,123878,123585],{"class":1952},[103,123880,69811],{"class":218},[103,123882,123854],{"class":162},[103,123884,123857],{"class":218},[103,123886,25105],{"class":162},[103,123888,123889],{"class":218}," \u002Fdev\u002FttyUSB0",[103,123891,120],{"class":113},[14,123893,123894],{},[1451,123895],{"alt":24,"src":123896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123898,123899],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123901,123314],{},[14,123903,123317,123904,123669],{},[100,123905,123320],{},[94,123907,123908],{"className":117286,"code":123324,"language":117288,"meta":24,"style":24},[100,123909,123910],{"__ignoreMap":24},[103,123911,123912,123914,123916],{"class":105,"line":106},[103,123913,24566],{"class":1952},[103,123915,118573],{"class":218},[103,123917,123335],{"class":218},[94,123919,123921],{"className":117286,"code":123920,"language":117288,"meta":24,"style":24},"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",[100,123922,123923,123951,123977],{"__ignoreMap":24},[103,123924,123925,123927,123929,123932,123934,123936,123938,123940,123943,123946,123948],{"class":105,"line":106},[103,123926,123348],{"class":113},[103,123928,159],{"class":109},[103,123930,123931],{"class":218},"=\"ttyACM*\",",[103,123933,123356],{"class":1952},[103,123935,123359],{"class":218},[103,123937,123388],{"class":1952},[103,123939,491],{"class":1952},[103,123941,123942],{"class":218}," ATTRS{idProduct}==\"55d4\",",[103,123944,123945],{"class":218}," ATTRS{serial}==\"0001\",",[103,123947,123370],{"class":218},[103,123949,123950],{"class":218}," SYMLINK+=\"ttyACM_MCU\"\n",[103,123952,123953,123955,123957,123959,123961,123963,123965,123967,123969,123972,123974],{"class":105,"line":25},[103,123954,123348],{"class":113},[103,123956,159],{"class":109},[103,123958,123931],{"class":218},[103,123960,123356],{"class":1952},[103,123962,123359],{"class":218},[103,123964,123388],{"class":1952},[103,123966,491],{"class":1952},[103,123968,123942],{"class":218},[103,123970,123971],{"class":218}," ATTRS{serial}==\"0002\",",[103,123973,123370],{"class":218},[103,123975,123976],{"class":218}," SYMLINK+=\"ttyACM_Lidar\"\n",[103,123978,123979,123981,123983,123985,123987,123989,123991,123993,123995,123997],{"class":105,"line":1168},[103,123980,123348],{"class":113},[103,123982,159],{"class":109},[103,123984,123353],{"class":218},[103,123986,123356],{"class":1952},[103,123988,123359],{"class":218},[103,123990,123388],{"class":1952},[103,123992,491],{"class":1952},[103,123994,123393],{"class":218},[103,123996,123370],{"class":218},[103,123998,123999],{"class":218}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124001,123433],{},[14,124003,123436],{},[94,124005,124006],{"className":117286,"code":123439,"language":117288,"meta":24,"style":24},[100,124007,124008,124012,124022,124032,124036,124040,124050],{"__ignoreMap":24},[103,124009,124010],{"class":105,"line":106},[103,124011,123446],{"class":172},[103,124013,124014,124016,124018,124020],{"class":105,"line":25},[103,124015,24566],{"class":1952},[103,124017,120038],{"class":218},[103,124019,123455],{"class":218},[103,124021,123458],{"class":218},[103,124023,124024,124026,124028,124030],{"class":105,"line":1168},[103,124025,24566],{"class":1952},[103,124027,120038],{"class":218},[103,124029,123455],{"class":218},[103,124031,123469],{"class":218},[103,124033,124034],{"class":105,"line":1183},[103,124035,2389],{"emptyLinePlaceholder":30},[103,124037,124038],{"class":105,"line":1189},[103,124039,123478],{"class":172},[103,124041,124042,124044,124046,124048],{"class":105,"line":1203},[103,124043,24566],{"class":1952},[103,124045,123485],{"class":218},[103,124047,123488],{"class":218},[103,124049,123491],{"class":162},[103,124051,124052,124054,124056],{"class":105,"line":1209},[103,124053,24566],{"class":1952},[103,124055,123485],{"class":218},[103,124057,123500],{"class":218},[14,124059,124060,124061],{},"再重新插拔设备即可，或者 ",[263,124062,124063],{},"直接重启系统。",[14,124065,123506],{},[14,124067,123509,124068,123809],{},[100,124069,123808],{},[14,124071,124072],{},[1451,124073],{"alt":24,"src":124074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124076,123817],{},[14,124078,124079,124081],{},[263,124080,117954],{}," 一些设备可能没有串口号等。",[74,124083,124085],{"id":124084},"_744-其他注意事项","7.4.4 其他注意事项",[14,124087,124088,124089,124091,124092,124095,124096,18400,124099,124102,124103,124105],{},"并非所有的USB设备端口号都是",[100,124090,123543],{},"的格式，比如Arduino的端口号可能是",[100,124093,124094],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[100,124097,124098],{},"videon",[100,124100,124101],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[100,124104,124098],{},"端口，绑定时需要关联的也是该接口。",[14,124107,124108,124109,124112,124113,124116,124117,124119,124120,124123,124124,124127,124128,124131,124132,124131,124135,124131,124138,28375],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[100,124110,124111],{},"KERNEL==\"ttyUSB*\"","修改为",[100,124114,124115],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[100,124118,124111],{},"修改为类似于",[100,124121,124122],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[100,124125,124126],{},"video[0,2,4,6]","表示可以绑定的端口为",[100,124129,124130],{},"video0","或",[100,124133,124134],{},"video2",[100,124136,124137],{},"video4",[100,124139,124140],{},"video6",[45,124142,124144],{"id":124143},"_75-挂载内网网页","7.5 挂载内网网页",[14,124146,124147],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124149,124150],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124152,124153],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124155,124156,124157],{},"Termux 下载地址（F-Droid）：",[17,124158,124159],{"href":124159,"rel":124160},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[21],[14,124162,124163],{},"首先打开app后，先更新软件缓存：",[94,124165,124167],{"className":117286,"code":124166,"language":117288,"meta":24,"style":24},"pkg update\n",[100,124168,124169],{"__ignoreMap":24},[103,124170,124171,124174],{"class":105,"line":106},[103,124172,124173],{"class":1952},"pkg",[103,124175,26232],{"class":218},[14,124177,124178],{},"然后换源",[94,124180,124182],{"className":117286,"code":124181,"language":117288,"meta":24,"style":24},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[100,124183,124184],{"__ignoreMap":24},[103,124185,124186,124188,124191],{"class":105,"line":106},[103,124187,123056],{"class":1952},[103,124189,124190],{"class":113}," $PREFIX",[103,124192,124193],{"class":218},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124195,124196],{},"将该文件内容替换为下面：",[94,124198,124200],{"className":117286,"code":124199,"language":117288,"meta":24,"style":24},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[100,124201,124202],{"__ignoreMap":24},[103,124203,124204,124207,124210,124213],{"class":105,"line":106},[103,124205,124206],{"class":1952},"deb",[103,124208,124209],{"class":218}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[103,124211,124212],{"class":218}," stable",[103,124214,124215],{"class":218}," main\n",[1120,124217,124218,124245],{},[60,124219,124220,124221,124223,124224],{},"如果你使用的是",[100,124222,123056],{},"编辑器：",[1120,124225,124226,124233,124239],{},[60,124227,124228,124229,124232],{},"按 ",[100,124230,124231],{},"Ctrl+O"," 保存文件。",[60,124234,124228,124235,124238],{},[100,124236,124237],{},"Enter"," 确认文件名。",[60,124240,124228,124241,124244],{},[100,124242,124243],{},"Ctrl+X"," 退出编辑器。",[60,124246,124220,124247,124223,124250],{},[100,124248,124249],{},"vim",[1120,124251,124252,124258],{},[60,124253,124228,124254,124257],{},[100,124255,124256],{},"Esc"," 退出编辑模式。",[60,124259,124260,124261,124263],{},"输入 ",[100,124262,119211],{}," 保存并退出。",[14,124265,124266],{},"接下来重新更新软件源：",[94,124268,124270],{"className":117286,"code":124269,"language":117288,"meta":24,"style":24},"pkg update && pkg upgrade\n",[100,124271,124272],{"__ignoreMap":24},[103,124273,124274,124276,124278,124280,124282],{"class":105,"line":106},[103,124275,124173],{"class":1952},[103,124277,117337],{"class":218},[103,124279,26180],{"class":113},[103,124281,124173],{"class":1952},[103,124283,117323],{"class":218},[14,124285,124286],{},"安装python：",[94,124288,124290],{"className":117286,"code":124289,"language":117288,"meta":24,"style":24},"pkg install python\n",[100,124291,124292],{"__ignoreMap":24},[103,124293,124294,124296,124298],{"class":105,"line":106},[103,124295,124173],{"class":1952},[103,124297,23824],{"class":218},[103,124299,124300],{"class":218}," python\n",[14,124302,124303,26463],{},[263,124304,124305],{},"通过Termux访问设备存储",[14,124307,124308],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[94,124310,124312],{"className":117286,"code":124311,"language":117288,"meta":24,"style":24},"termux-setup-storage\n",[100,124313,124314],{"__ignoreMap":24},[103,124315,124316],{"class":105,"line":106},[103,124317,124311],{"class":1952},[57,124319,124320],{},[60,124321,124322,26463,124325],{},[263,124323,124324],{},"进入HTML文件所在的目录",[57,124326,124327],{},[60,124328,124329,124330,124332],{},"使用",[100,124331,101266],{},"命令进入HTML文件所在的目录：",[94,124334,124336],{"className":117286,"code":124335,"language":117288,"meta":24,"style":24},"cd ~\u002Fyour_html_folder\n",[100,124337,124338],{"__ignoreMap":24},[103,124339,124340,124342],{"class":105,"line":106},[103,124341,101266],{"class":162},[103,124343,124344],{"class":218}," ~\u002Fyour_html_folder\n",[57,124346,124347],{"start":25},[60,124348,124349,26463,124352,124357,124374],{},[263,124350,124351],{},"启动Python HTTP服务器",[57,124353,124354],{},[60,124355,124356],{},"运行以下命令启动一个简单的HTTP服务器：",[94,124358,124360],{"className":117286,"code":124359,"language":117288,"meta":24,"style":24},"python -m http.server 8000\n",[100,124361,124362],{"__ignoreMap":24},[103,124363,124364,124366,124368,124371],{"class":105,"line":106},[103,124365,30370],{"class":1952},[103,124367,100872],{"class":162},[103,124369,124370],{"class":218}," http.server",[103,124372,124373],{"class":162}," 8000\n",[57,124375,124376],{"start":1168},[60,124377,124378,124379,124382],{},"这会在端口",[100,124380,124381],{},"8000","上启动一个Web服务器。",[1120,124384,124385],{},[60,124386,124387],{},"启动服务器后，Termux会显示日志信息，例如：",[94,124389,124391],{"className":120806,"code":124390,"language":120808,"meta":120809,"style":24},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[100,124392,124393],{"__ignoreMap":24},[103,124394,124395],{"class":105,"line":106},[103,124396,124390],{},[1120,124398,124399],{},[60,124400,124401],{},"这表示服务器已成功启动。",[14,124403,124404],{},[263,124405,124406],{},"在浏览器中访问HTML文件",[57,124408,124409],{},[60,124410,124411,26463,124414,124419],{},[263,124412,124413],{},"在同一设备上访问",[57,124415,124416],{},[60,124417,124418],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[94,124420,124423],{"className":124421,"code":124422,"language":71654,"meta":24,"style":24},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[100,124424,124425],{"__ignoreMap":24},[103,124426,124427,124430],{"class":105,"line":106},[103,124428,124429],{"class":113},"http:",[103,124431,124432],{"class":172},"\u002F\u002Flocalhost:8000\n",[1120,124434,124435],{},[60,124436,124437,124438,124441],{},"如果HTML文件中有",[100,124439,124440],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[45,124443,124445],{"id":124444},"_76-linux重点知识","7.6 Linux重点知识",[74,124447,124449],{"id":124448},"_761-关于点的说明","7.6.1 关于点的说明",[14,124451,124452],{},[1451,124453],{"alt":24,"src":124454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124456,124457],{},"一点本目录，两点上目录",[74,124459,124461],{"id":124460},"_762-目录","7.6.2 目录",[21988,124463,124465],{"id":124464},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124467,124468],{},[263,124469,124470],{},"\u002Fboot:",[14,124472,124473],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124475,124476],{},[263,124477,124478],{},"\u002Fetc:",[14,124480,124481],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124483,124484],{},[263,124485,124486],{},"\u002Flib：",[14,124488,124489],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124491,124492],{},[263,124493,124494],{},"\u002Fsys:",[14,124496,124497],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21988,124499,124501],{"id":124500},"_7622-指令集合","7.6.2.2 指令集合",[14,124503,124504],{},[263,124505,124506],{},"\u002Fbin:",[14,124508,124509],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124511,124512],{},[263,124513,124514],{},"\u002Fsbin:",[14,124516,124517],{},"只有系统管理员才能使用的程序和指令",[21988,124519,124521],{"id":124520},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124523,124524],{},[263,124525,124526],{},"\u002Fdev:",[14,124528,124529],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124531,124532],{},[263,124533,124534],{},"\u002Fmedia:",[14,124536,124537],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124539,124540],{},[263,124541,124542],{},"\u002Fmnt:",[14,124544,124545],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21988,124547,124549],{"id":124548},"_7624-临时文件","7.6.2.4 临时文件",[14,124551,124552],{},[263,124553,124554],{},"\u002Frun:",[14,124556,124557],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124559,124560],{},[263,124561,124562],{},"\u002Flost+found:",[14,124564,124565],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124567,124568],{},[263,124569,124570],{},"\u002Ftmp:",[14,124572,124573],{},"这个目录是用来存放一些临时文件的",[21988,124575,124577],{"id":124576},"_7625-账户","7.6.2.5 账户",[14,124579,124580],{},[263,124581,124582],{},"\u002Froot：",[14,124584,124585],{},"系统管理员的用户主目录",[14,124587,124588,26463],{},[263,124589,124590],{},"\u002Fhome",[14,124592,124593],{},"用户的主目录，以用户的账号命名的",[14,124595,124596,26463],{},[263,124597,124598],{},"\u002Fusr",[14,124600,124601],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124603,124604],{},[263,124605,124606],{},"\u002Fusr\u002Fbin：",[14,124608,124609],{},"系统用户使用的应用程序与指令",[14,124611,124612],{},[263,124613,124614],{},"\u002Fusr\u002Fsbin：",[14,124616,124617],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124619,124620],{},[263,124621,124622],{},"\u002Fusr\u002Fsrc：",[14,124624,124625],{},"内核源代码默认的放置目录",[21988,124627,124629],{"id":124628},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124631,124632],{},[263,124633,124634],{},"\u002Fvar：",[14,124636,124637],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124639,124640],{},[263,124641,124642],{},"\u002Fproc:",[14,124644,124645,124646,124649],{},"管理 ",[263,124647,124648],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21988,124651,124653],{"id":124652},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124655,124656],{},[263,124657,124658],{},"\u002Fopt:",[14,124660,124661],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124663,124664],{},[263,124665,124666],{},"\u002Fsrv:",[14,124668,124669],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[74,124671,124673],{"id":124672},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124675,124676],{},[1451,124677],{"alt":24,"src":124678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124680,124681],{},"windows-->linux:",[14,124683,124684],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124686,124687],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124689,124690],{},"linux传输文件到windows",[14,124692,124693],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[74,124695,124697],{"id":124696},"_764-易忘知识","7.6.4 易忘知识",[14,124699,124700],{},"操作系统内核查看",[94,124702,124703],{"className":117286,"code":121280,"language":117288,"meta":24,"style":24},[100,124704,124705],{"__ignoreMap":24},[103,124706,124707,124709],{"class":105,"line":106},[103,124708,70194],{"class":1952},[103,124710,121289],{"class":162},[14,124712,124713],{},[1451,124714],{"alt":24,"src":124715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124717,124718],{},[1451,124719],{"alt":24,"src":124720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[94,124722,124724],{"className":117286,"code":124723,"language":117288,"meta":24,"style":24},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[100,124725,124726,124738],{"__ignoreMap":24},[103,124727,124728,124730,124733,124736],{"class":105,"line":106},[103,124729,121497],{"class":1952},[103,124731,124732],{"class":218}," mvtest",[103,124734,124735],{"class":218}," mvtest2",[103,124737,2663],{"class":113},[103,124739,124740],{"class":105,"line":25},[103,124741,124742],{"class":1952},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124744,124745],{},[1451,124746],{"alt":24,"src":124747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124749,124750],{},[1451,124751],{"alt":24,"src":124752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124754,124755,124756,124759],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[100,124757,124758],{},"du -a"," 可以快速查看磁盘使用细节。",[74,124761,124763],{"id":124762},"_765-vim","7.6.5 Vim",[14,124765,124766],{},[1451,124767],{"alt":24,"src":124768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124770,124771],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124773,124774],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124776,124777],{},[263,124778,124779],{},"1.命令模式：",[14,124781,124782],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124784,124785],{},"x 删除当前光标所在处的字符",[14,124787,124788],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124790,124791],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124793,124794],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124796,124797],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124799,124800],{},"dd 剪切当前行",[14,124802,124803],{},"yy 复制当前行",[14,124805,124806],{},"p 粘贴剪贴板内容到光标下方",[14,124808,124809],{},"P 粘贴剪贴板内容到光标上方",[14,124811,124812],{},"u 撤销上一次操作",[14,124814,124815],{},"ctrl+r 重做上一次操作",[14,124817,124818,124820],{},[908,124819],{}," 保存文件",[14,124822,124823,124825],{},[758,124824],{}," 退出Vim编辑器",[14,124827,124828,124830],{},[758,124829],{},"! 强制退出Vim编辑器，不保存修改",[14,124832,124833],{},[263,124834,124835],{},"2.输入模式：",[14,124837,124838],{},[1451,124839],{"alt":24,"src":124840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124842,124843],{},[263,124844,124845],{},"3.底线命令模式：",[14,124847,124848],{},[1451,124849],{"alt":24,"src":124850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124852,124853],{},"按下esc可以退出底线命令模式",[74,124855,124857],{"id":124856},"_766-apt","7.6.6 apt",[14,124859,124860],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[74,124862,124864],{"id":124863},"_767-home与root的区别","7.6.7 home与root的区别",[14,124866,124867],{},[1451,124868],{"alt":24,"src":124869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124871,124872],{},[1451,124873],{"alt":24,"src":124874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124876,124877],{},[1451,124878],{"alt":24,"src":124879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124881,124882],{},[1451,124883],{"alt":24,"src":124884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[74,124886,124888],{"id":124887},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124890,124891],{},[17,124892,124893],{"href":124893,"rel":124894},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[21],[57,124896,124897,124900],{},[60,124898,124899],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[60,124901,124902],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124904,124905],{},[1451,124906],{"alt":24,"src":124907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124909,124910],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124912,124913],{},[1451,124914],{"alt":24,"src":124915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[94,124917,124919],{"className":120806,"code":124918,"language":120808,"meta":120809,"style":24},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[100,124920,124921,124926],{"__ignoreMap":24},[103,124922,124923],{"class":105,"line":106},[103,124924,124925],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[103,124927,124928],{"class":105,"line":25},[103,124929,124930],{},".\u002Fpycharm.sh\n",[14,124932,124933],{},"3️⃣创建.desktop文件",[14,124935,124936],{},[263,124937,124938],{},"原理：",[1120,124940,124941,124951],{},[60,124942,124943,124944,124950],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[263,124945,124946,124949],{},[100,124947,124948],{},".desktop"," 文件"," 来识别应用。",[60,124952,124953,124955,124956],{},[100,124954,124948],{}," 文件相当于一个“应用注册表”，告诉系统：",[1120,124957,124958,124961,124964,124967,124970],{},[60,124959,124960],{},"应用名字（Name）",[60,124962,124963],{},"图标（Icon）",[60,124965,124966],{},"执行命令（Exec）",[60,124968,124969],{},"分类（Categories）",[60,124971,124972],{},"是否需要终端（Terminal）",[94,124974,124976],{"className":120806,"code":124975,"language":120808,"meta":120809,"style":24},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[100,124977,124978,124983],{"__ignoreMap":24},[103,124979,124980],{"class":105,"line":106},[103,124981,124982],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[103,124984,124985],{"class":105,"line":25},[103,124986,124987],{},"nano pycharm.desktop\n",[14,124989,124990],{},"nano是一个命令行下的编辑器，也可以使用vim",[94,124992,124994],{"className":120806,"code":124993,"language":120808,"meta":120809,"style":24},"[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",[100,124995,124996,125001,125006,125011,125016,125021,125026,125031,125036,125041],{"__ignoreMap":24},[103,124997,124998],{"class":105,"line":106},[103,124999,125000],{},"[Desktop Entry]\n",[103,125002,125003],{"class":105,"line":25},[103,125004,125005],{},"Version=1.0\n",[103,125007,125008],{"class":105,"line":1168},[103,125009,125010],{},"Type=Application\n",[103,125012,125013],{"class":105,"line":1183},[103,125014,125015],{},"Name=PyCharm\n",[103,125017,125018],{"class":105,"line":1189},[103,125019,125020],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[103,125022,125023],{"class":105,"line":1203},[103,125024,125025],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[103,125027,125028],{"class":105,"line":1209},[103,125029,125030],{},"Comment=JetBrains PyCharm IDE\n",[103,125032,125033],{"class":105,"line":1300},[103,125034,125035],{},"Categories=Development;IDE;\n",[103,125037,125038],{"class":105,"line":1306},[103,125039,125040],{},"Terminal=false\n",[103,125042,125043],{"class":105,"line":1318},[103,125044,125045],{},"StartupWMClass=jetbrains-pycharm\n",[1120,125047,125048,125054,125060,125066],{},[60,125049,125050,125053],{},[100,125051,125052],{},"Exec"," → 点击图标时执行的命令",[60,125055,125056,125059],{},[100,125057,125058],{},"Icon"," → 显示在菜单和桌面上的图标",[60,125061,125062,125065],{},[100,125063,125064],{},"Terminal=false"," → 不打开终端",[60,125067,125068,125071],{},[100,125069,125070],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125073,125074,125075],"blockquote",{},[14,125076,125077,125078,125080,125081],{},"可以理解成 ",[100,125079,124948],{}," 文件是 Linux 的 ",[263,125082,125083],{},"快捷方式配置文件",[14,125085,125086],{},"4️⃣设置可执行权限",[94,125088,125090],{"className":120806,"code":125089,"language":120808,"meta":120809,"style":24},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[100,125091,125092],{"__ignoreMap":24},[103,125093,125094],{"class":105,"line":106},[103,125095,125089],{},[14,125097,125098],{},"5️⃣桌面图标启动的话如下：",[94,125100,125102],{"className":120806,"code":125101,"language":120808,"meta":120809,"style":24},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[100,125103,125104,125109],{"__ignoreMap":24},[103,125105,125106],{"class":105,"line":106},[103,125107,125108],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[103,125110,125111],{"class":105,"line":25},[103,125112,125113],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[57,125115,125116],{"start":1168},[60,125117,125118],{},"下载Appimage文件实现软件的安装",[14,125120,125121],{},"1️⃣先下载appimage",[14,125123,125124],{},[17,125125,125126],{"href":125126,"rel":125127},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[21],[14,125129,125130],{},[1451,125131],{"alt":24,"src":125132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125134,125135],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125137,125138],{},[1451,125139],{"alt":24,"src":125140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125142,125143],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125145,125146],{},[1451,125147],{"alt":24,"src":125148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125150,125151],{},[1451,125152],{"alt":24,"src":125153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125155,125156,125157,125160],{},"3️⃣给他们放在",[100,125158,125159],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125162,125163],{},"4️⃣给软件执行权限",[94,125165,125167],{"className":120806,"code":125166,"language":120808,"meta":120809,"style":24},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[100,125168,125169,125174],{"__ignoreMap":24},[103,125170,125171],{"class":105,"line":106},[103,125172,125173],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[103,125175,125176],{"class":105,"line":25},[103,125177,125178],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125180,125181],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[94,125183,125185],{"className":117286,"code":125184,"language":117288,"meta":24,"style":24},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[100,125186,125187,125194,125201,125207],{"__ignoreMap":24},[103,125188,125189,125191],{"class":105,"line":106},[103,125190,101266],{"class":162},[103,125192,125193],{"class":218}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[103,125195,125196,125198],{"class":105,"line":25},[103,125197,101273],{"class":1952},[103,125199,125200],{"class":218}," .\u002Fqqmusic.desktop\n",[103,125202,125203,125205],{"class":105,"line":1168},[103,125204,124249],{"class":1952},[103,125206,125200],{"class":218},[103,125208,125209,125211,125213,125215],{"class":105,"line":1183},[103,125210,24566],{"class":1952},[103,125212,24569],{"class":218},[103,125214,123115],{"class":218},[103,125216,125200],{"class":218},[14,125218,125219,125221],{},[100,125220,101273],{},"：一个 Linux 命令，主要功能是：",[1120,125223,125224,125227],{},[60,125225,125226],{},"如果文件不存在，就创建一个新的空文件",[60,125228,125229],{},"如果文件已存在，就更新该文件的最后修改时间",[94,125231,125233],{"className":120806,"code":125232,"language":120808,"meta":120809,"style":24},"[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",[100,125234,125235,125239,125244,125249,125254,125258,125263],{"__ignoreMap":24},[103,125236,125237],{"class":105,"line":106},[103,125238,125000],{},[103,125240,125241],{"class":105,"line":25},[103,125242,125243],{},"Name=QQ音乐\n",[103,125245,125246],{"class":105,"line":1168},[103,125247,125248],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[103,125250,125251],{"class":105,"line":1183},[103,125252,125253],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[103,125255,125256],{"class":105,"line":1189},[103,125257,125010],{},[103,125259,125260],{"class":105,"line":1203},[103,125261,125262],{},"Categories=Audio;Music;Player;\n",[103,125264,125265],{"class":105,"line":1209},[103,125266,125267],{},"Comment=QQ Music Client for Linux\n",[14,125269,125270],{},"将文件复制进去",[14,125272,125273],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125275,125276],{},[1451,125277],{"alt":24,"src":125278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125280,125281],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125283,125284],{},[1451,125285],{"alt":24,"src":125286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125288,125289,125290,125293,125294,125297],{},"如果你用的不是KDE，那么也可以直接修改",[100,125291,125292],{},"qqmuic.desktop","：在exec的末尾加上",[100,125295,125296],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[94,125299,125301],{"className":120806,"code":125300,"language":120808,"meta":120809,"style":24},"[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",[100,125302,125303,125307,125311,125316,125320,125324,125328],{"__ignoreMap":24},[103,125304,125305],{"class":105,"line":106},[103,125306,125000],{},[103,125308,125309],{"class":105,"line":25},[103,125310,125243],{},[103,125312,125313],{"class":105,"line":1168},[103,125314,125315],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[103,125317,125318],{"class":105,"line":1183},[103,125319,125253],{},[103,125321,125322],{"class":105,"line":1189},[103,125323,125010],{},[103,125325,125326],{"class":105,"line":1203},[103,125327,125262],{},[103,125329,125330],{"class":105,"line":1209},[103,125331,125267],{},[14,125333,125334],{},[1451,125335],{"alt":24,"src":125336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125338,125339],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[94,125341,125343],{"className":120806,"code":125342,"language":120808,"meta":120809,"style":24},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[100,125344,125345],{"__ignoreMap":24},[103,125346,125347],{"class":105,"line":106},[103,125348,125342],{},[57,125350,125351],{"start":1183},[60,125352,125353],{},"去Flathub上安装软件",[14,125355,125356],{},[17,125357,125358],{"href":125358,"rel":125359},"https:\u002F\u002Fflathub.org\u002F",[21],[14,125361,125362],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125364,125365],{},[1451,125366],{"alt":24,"src":125367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[94,125369,125371],{"className":120806,"code":125370,"language":120808,"meta":120809,"style":24},"flatpak install flathub com.obsproject.Studio\n",[100,125372,125373],{"__ignoreMap":24},[103,125374,125375],{"class":105,"line":106},[103,125376,125370],{},[14,125378,125379],{},[1451,125380],{"alt":24,"src":125381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125383,125384],{},"2️⃣运行软件",[14,125386,125387],{},"a.官方方式：",[14,125389,125390],{},[1451,125391],{"alt":24,"src":125392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[94,125394,125395],{"className":120806,"code":125370,"language":120808,"meta":120809,"style":24},[100,125396,125397],{"__ignoreMap":24},[103,125398,125399],{"class":105,"line":106},[103,125400,125370],{},[14,125402,125403],{},"b.当普通软件运行：",[14,125405,125406],{},[1451,125407],{"alt":24,"src":125408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125410,125411],{},[1451,125412],{"alt":24,"src":125413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5116,125415,125416],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":24,"searchDepth":25,"depth":25,"links":125418},[125419,125420,125425,125426,125432,125433],{"id":122151,"depth":25,"text":122152},{"id":122493,"depth":25,"text":122494,"children":125421},[125422,125423,125424],{"id":122497,"depth":1168,"text":122498},{"id":122564,"depth":1168,"text":122565},{"id":122825,"depth":1168,"text":122826},{"id":122978,"depth":25,"text":122979},{"id":123216,"depth":25,"text":123217,"children":125427},[125428,125429,125430,125431],{"id":123268,"depth":1168,"text":123269},{"id":123554,"depth":1168,"text":123555},{"id":123825,"depth":1168,"text":123826},{"id":124084,"depth":1168,"text":124085},{"id":124143,"depth":25,"text":124144},{"id":124444,"depth":25,"text":124445,"children":125434},[125435,125436,125437,125438,125439,125440,125441,125442],{"id":124448,"depth":1168,"text":124449},{"id":124460,"depth":1168,"text":124461},{"id":124672,"depth":1168,"text":124673},{"id":124696,"depth":1168,"text":124697},{"id":124762,"depth":1168,"text":124763},{"id":124856,"depth":1168,"text":124857},{"id":124863,"depth":1168,"text":124864},{"id":124887,"depth":1168,"text":124888},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122143,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125449,"title":125450,"body":125451,"description":27,"extension":28,"meta":125455,"navigation":30,"path":125456,"seo":125457,"stem":125458,"__hash__":125459},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125452,"toc":125453},[],{"title":24,"searchDepth":25,"depth":25,"links":125454},[],{"category":30253},"\u002Fwiki\u002F2025-01-27-linux",{"title":125450,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125461,"title":125462,"body":125463,"description":125467,"extension":28,"meta":125858,"navigation":30,"path":125859,"seo":125860,"stem":125861,"__hash__":125862},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125464,"toc":125856},[125465,125468,125472,125489,125492,125545,125549,125551,125591,125600,125604,125607,125848,125853],[14,125466,125467],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125469,125471],{"id":125470},"_1ubuntu环境配置","1.Ubuntu环境配置",[57,125473,125474,125477,125480,125483,125486],{},[60,125475,125476],{},"ubuntu环境换源",[60,125478,125479],{},"安装cuda",[60,125481,125482],{},"安装miniconda",[60,125484,125485],{},"安装pytorch",[60,125487,125488],{},"安装genesis",[14,125490,125491],{},"参考链接：",[94,125493,125495],{"className":23812,"code":125494,"language":23814,"meta":24,"style":24},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[100,125496,125497],{"__ignoreMap":24},[103,125498,125499,125502,125505,125508,125510,125513,125516,125518,125521,125524,125526,125529,125532,125534,125537,125540,125542],{"class":105,"line":106},[103,125500,125501],{"class":1952},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[103,125503,125504],{"class":218},"=blogdetail",[103,125506,125507],{"class":113},"&sharetype",[103,125509,159],{"class":109},[103,125511,125512],{"class":218},"blogdetail",[103,125514,125515],{"class":113},"&sharerId",[103,125517,159],{"class":109},[103,125519,125520],{"class":218},"144728092",[103,125522,125523],{"class":113},"&sharerefer",[103,125525,159],{"class":109},[103,125527,125528],{"class":218},"PC",[103,125530,125531],{"class":113},"&sharesource",[103,125533,159],{"class":109},[103,125535,125536],{"class":218},"qq_69379513",[103,125538,125539],{"class":113},"&sharefrom",[103,125541,159],{"class":109},[103,125543,125544],{"class":218},"from_link\n",[10,125546,125548],{"id":125547},"_2genesis-报错issue","2.Genesis 报错issue",[14,125550,125491],{},[94,125552,125553],{"className":23812,"code":125494,"language":23814,"meta":24,"style":24},[100,125554,125555],{"__ignoreMap":24},[103,125556,125557,125559,125561,125563,125565,125567,125569,125571,125573,125575,125577,125579,125581,125583,125585,125587,125589],{"class":105,"line":106},[103,125558,125501],{"class":1952},[103,125560,125504],{"class":218},[103,125562,125507],{"class":113},[103,125564,159],{"class":109},[103,125566,125512],{"class":218},[103,125568,125515],{"class":113},[103,125570,159],{"class":109},[103,125572,125520],{"class":218},[103,125574,125523],{"class":113},[103,125576,159],{"class":109},[103,125578,125528],{"class":218},[103,125580,125531],{"class":113},[103,125582,159],{"class":109},[103,125584,125536],{"class":218},[103,125586,125539],{"class":113},[103,125588,159],{"class":109},[103,125590,125544],{"class":218},[94,125592,125594],{"className":23812,"code":125593,"language":23814,"meta":24,"style":24},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[100,125595,125596],{"__ignoreMap":24},[103,125597,125598],{"class":105,"line":106},[103,125599,125593],{"class":1952},[10,125601,125603],{"id":125602},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125605,125606],{},"hello_robot.py",[94,125608,125610],{"className":30368,"code":125609,"language":30370,"meta":24,"style":24},"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",[100,125611,125612,125618,125633,125637,125649,125661,125665,125678,125682,125701,125711,125721,125735,125739,125743,125748,125752,125762,125769,125783,125790,125800,125805,125809,125827,125832,125836,125843],{"__ignoreMap":24},[103,125613,125614,125616],{"class":105,"line":106},[103,125615,30382],{"class":109},[103,125617,45295],{"class":113},[103,125619,125620,125623,125626,125628,125630],{"class":105,"line":25},[103,125621,125622],{"class":113},"os.environ[",[103,125624,125625],{"class":218},"'PYOPENGL_PLATFORM'",[103,125627,4432],{"class":113},[103,125629,159],{"class":109},[103,125631,125632],{"class":218}," 'glx'\n",[103,125634,125635],{"class":105,"line":1168},[103,125636,2389],{"emptyLinePlaceholder":30},[103,125638,125639,125641,125644,125646],{"class":105,"line":1183},[103,125640,30382],{"class":109},[103,125642,125643],{"class":113}," genesis ",[103,125645,31373],{"class":109},[103,125647,125648],{"class":113}," gs\n",[103,125650,125651,125653,125656,125658],{"class":105,"line":1189},[103,125652,30727],{"class":109},[103,125654,125655],{"class":113}," pynput ",[103,125657,30382],{"class":109},[103,125659,125660],{"class":113}," keyboard\n",[103,125662,125663],{"class":105,"line":1203},[103,125664,2389],{"emptyLinePlaceholder":30},[103,125666,125667,125670,125673,125675],{"class":105,"line":1209},[103,125668,125669],{"class":113},"gs.init(",[103,125671,125672],{"class":5206},"backend",[103,125674,159],{"class":109},[103,125676,125677],{"class":113},"gs.gpu)\n",[103,125679,125680],{"class":105,"line":1300},[103,125681,2389],{"emptyLinePlaceholder":30},[103,125683,125684,125687,125689,125692,125695,125697,125699],{"class":105,"line":1306},[103,125685,125686],{"class":113},"scene ",[103,125688,159],{"class":109},[103,125690,125691],{"class":113}," gs.Scene(",[103,125693,125694],{"class":5206},"show_viewer",[103,125696,159],{"class":109},[103,125698,31466],{"class":162},[103,125700,120],{"class":113},[103,125702,125703,125706,125708],{"class":105,"line":1318},[103,125704,125705],{"class":113},"plane ",[103,125707,159],{"class":109},[103,125709,125710],{"class":113}," scene.add_entity(gs.morphs.Plane())\n",[103,125712,125713,125716,125718],{"class":105,"line":1601},[103,125714,125715],{"class":113},"franka ",[103,125717,159],{"class":109},[103,125719,125720],{"class":113}," scene.add_entity(\n",[103,125722,125723,125726,125728,125730,125733],{"class":105,"line":1606},[103,125724,125725],{"class":113},"    gs.morphs.MJCF(",[103,125727,45344],{"class":5206},[103,125729,159],{"class":109},[103,125731,125732],{"class":218},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[103,125734,38037],{"class":113},[103,125736,125737],{"class":105,"line":1612},[103,125738,120],{"class":113},[103,125740,125741],{"class":105,"line":1617},[103,125742,2389],{"emptyLinePlaceholder":30},[103,125744,125745],{"class":105,"line":1631},[103,125746,125747],{"class":113},"scene.build()\n",[103,125749,125750],{"class":105,"line":1636},[103,125751,2389],{"emptyLinePlaceholder":30},[103,125753,125754,125756,125759],{"class":105,"line":1642},[103,125755,31937],{"class":109},[103,125757,125758],{"class":1952}," on_press",[103,125760,125761],{"class":113},"(key):\n",[103,125763,125764,125767],{"class":105,"line":1663},[103,125765,125766],{"class":109},"    try",[103,125768,3728],{"class":113},[103,125770,125771,125773,125776,125778,125781],{"class":105,"line":1668},[103,125772,2486],{"class":109},[103,125774,125775],{"class":113}," key.char ",[103,125777,2938],{"class":109},[103,125779,125780],{"class":218}," 'q'",[103,125782,3728],{"class":113},[103,125784,125785,125787],{"class":105,"line":1682},[103,125786,15722],{"class":109},[103,125788,125789],{"class":162}," False\n",[103,125791,125792,125795,125798],{"class":105,"line":1687},[103,125793,125794],{"class":109},"    except",[103,125796,125797],{"class":162}," AttributeError",[103,125799,3728],{"class":113},[103,125801,125802],{"class":105,"line":1716},[103,125803,125804],{"class":109},"        pass\n",[103,125806,125807],{"class":105,"line":1721},[103,125808,2389],{"emptyLinePlaceholder":30},[103,125810,125811,125814,125816,125819,125822,125824],{"class":105,"line":1738},[103,125812,125813],{"class":113},"listener ",[103,125815,159],{"class":109},[103,125817,125818],{"class":113}," keyboard.Listener(",[103,125820,125821],{"class":5206},"on_press",[103,125823,159],{"class":109},[103,125825,125826],{"class":113},"on_press)\n",[103,125828,125829],{"class":105,"line":1743},[103,125830,125831],{"class":113},"listener.start()\n",[103,125833,125834],{"class":105,"line":1748},[103,125835,2389],{"emptyLinePlaceholder":30},[103,125837,125838,125840],{"class":105,"line":1753},[103,125839,108653],{"class":109},[103,125841,125842],{"class":113}," listener.running:\n",[103,125844,125845],{"class":105,"line":1767},[103,125846,125847],{"class":113},"    scene.step()\n",[14,125849,125850],{},[1451,125851],{"alt":24,"src":125852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5116,125854,125855],{},"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":24,"searchDepth":25,"depth":25,"links":125857},[],{"category":23368},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125462,"description":125467},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125864,"title":125865,"body":125866,"description":27,"extension":28,"meta":125881,"navigation":30,"path":125882,"seo":125883,"stem":125884,"__hash__":125885},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125867,"toc":125878},[125868,125871,125875],[10,125869,125865],{"id":125870},"_1-基础知识",[45,125872,125874],{"id":125873},"_11-js的组成","1.1 js的组成",[14,125876,125877],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":24,"searchDepth":25,"depth":25,"links":125879},[125880],{"id":125873,"depth":25,"text":125874},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125865,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125887,"title":125888,"body":125889,"description":27,"extension":28,"meta":126028,"navigation":30,"path":126029,"seo":126030,"stem":126031,"__hash__":126032},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125890,"toc":126016},[125891,125894,125898,125901,125905,125915,125919,125922,125925,125928,125932,125939,125945,125949,125955,125966,125970,125973,125977,125980,125984,125987,125991,125994,125998,126001,126004,126007,126010,126013],[10,125892,125888],{"id":125893},"_2-vscode必备内容",[45,125895,125897],{"id":125896},"_21-标签分类","2.1 标签分类",[14,125899,125900],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[45,125902,125904],{"id":125903},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125906,125907,125908,125910,125911,125914],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[100,125909,340],{}," 然后按 ",[100,125912,125913],{},"Tab","，快速自动生成基本结构。",[45,125916,125918],{"id":125917},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125920,125921],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125923,125924],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125926,125927],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[45,125929,125931],{"id":125930},"_24-视图缩放","2.4 视图缩放",[14,125933,125934,125935,125938],{},"缩放视图 ",[100,125936,125937],{},"ctrl+"," 可实现代码增大。",[14,125940,125941,125944],{},[100,125942,125943],{},"ctrl-"," 可实现代码减小。",[45,125946,125948],{"id":125947},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,125950,125951,125952,28375],{},"VSCode 新建文件快捷键为 ",[100,125953,125954],{},"ctrl+N",[14,125956,125957,125958,125961,125962,125965],{},"保存快捷键为 ",[100,125959,125960],{},"ctrl+S","，将文本保存为 ",[100,125963,125964],{},".html"," 文件。",[45,125967,125969],{"id":125968},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,125971,125972],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[45,125974,125976],{"id":125975},"_27-vscode-icons","2.7 vscode-icons",[14,125978,125979],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[45,125981,125983],{"id":125982},"_28-easy-less","2.8 Easy LESS",[14,125985,125986],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[45,125988,125990],{"id":125989},"_29-会了吧插件","2.9 会了吧插件",[14,125992,125993],{},"会了吧插件可以展示代码中英语单词的意思。",[45,125995,125997],{"id":125996},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,125999,126000],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126002,126003],{},"②选定多个相同的单词:ctrl+D",[14,126005,126006],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126008,126009],{},"④全局替换某些单词:ctrl+h",[14,126011,126012],{},"⑤快速定位到某一行:ctrl+g",[14,126014,126015],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":24,"searchDepth":25,"depth":25,"links":126017},[126018,126019,126020,126021,126022,126023,126024,126025,126026,126027],{"id":125896,"depth":25,"text":125897},{"id":125903,"depth":25,"text":125904},{"id":125917,"depth":25,"text":125918},{"id":125930,"depth":25,"text":125931},{"id":125947,"depth":25,"text":125948},{"id":125968,"depth":25,"text":125969},{"id":125975,"depth":25,"text":125976},{"id":125982,"depth":25,"text":125983},{"id":125989,"depth":25,"text":125990},{"id":125996,"depth":25,"text":125997},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125888,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126034,"title":126035,"body":126036,"description":27,"extension":28,"meta":126195,"navigation":30,"path":126196,"seo":126197,"stem":126198,"__hash__":126199},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126037,"toc":126187},[126038,126041,126045,126055,126061,126067,126071,126080,126084,126089,126092,126095,126099,126102,126112,126121,126130,126139,126149,126156,126161,126166,126179],[10,126039,126035],{"id":126040},"_3-html文本与容器标签",[45,126042,126044],{"id":126043},"_31-标题标签","3.1 标题标签",[14,126046,126047,126050,126051,126054],{},[100,126048,126049],{},"\u003Ch1>","我是一级标签",[100,126052,126053],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126056,126057,126050,126059],{},[100,126058,126049],{},[100,126060,126053],{},[14,126062,123317,126063,126066],{},[100,126064,126065],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[45,126068,126070],{"id":126069},"_32-段落标签","3.2 段落标签",[14,126072,126073,126076,126077],{},[100,126074,126075],{},"\u003Cp>","....",[100,126078,126079],{},"\u003C\u002Fp>",[45,126081,126083],{"id":126082},"_33-换行标签","3.3 换行标签",[14,126085,126086],{},[100,126087,126088],{},"\u003Cbr \u002F>",[14,126090,126091],{},"具有强制换行的作用",[14,126093,126094],{},"单标签",[45,126096,126098],{"id":126097},"_34-文本格式化标签","3.4 文本格式化标签",[14,126100,126101],{},"提供粗体、斜体和下划线等效果",[14,126103,126104,126105,82529,126108,126111],{},"加粗：",[100,126106,126107],{},"\u003Cstrong>...\u003C\u002Fstrong>",[100,126109,126110],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126113,126114,126115,82529,126118,126111],{},"斜体：",[100,126116,126117],{},"\u003Cem>...\u003C\u002Fem>",[100,126119,126120],{},"\u003Ci>...\u003C\u002Fi>",[14,126122,126123,126124,82529,126127,126111],{},"删除线：",[100,126125,126126],{},"\u003Cdel>...\u003C\u002Fdel>",[100,126128,126129],{},"\u003Cs>...\u003C\u002Fs>",[14,126131,126132,126133,82529,126136,126111],{},"下划线：",[100,126134,126135],{},"\u003Cins>...\u003C\u002Fins>",[100,126137,126138],{},"\u003Cu>...\u003C\u002Fu>",[45,126140,126142,126143,18400,126146,102683],{"id":126141},"_35-div和span标签","3.5 ",[100,126144,126145],{},"\u003Cdiv>",[100,126147,126148],{},"\u003Cspan>",[14,126150,126151,101008,126153,126155],{},[100,126152,126145],{},[100,126154,126148],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126157,126158],{},[100,126159,126160],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126162,126163],{},[100,126164,126165],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126167,126168,126169,126171,126172,126174,126175,126178],{},"两者特点：①",[100,126170,126145],{}," 标签用来布局，但一行通常只放一个 ",[100,126173,126145],{},"。可以理解为一个大盒子，独占一行，在 ",[100,126176,126177],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126180,77239,126181,126183,126184,126186],{},[100,126182,126148],{}," 标签也可用于布局，一行可以放多个 ",[100,126185,126148],{},"，可理解为小盒子。",{"title":24,"searchDepth":25,"depth":25,"links":126188},[126189,126190,126191,126192,126193],{"id":126043,"depth":25,"text":126044},{"id":126069,"depth":25,"text":126070},{"id":126082,"depth":25,"text":126083},{"id":126097,"depth":25,"text":126098},{"id":126141,"depth":25,"text":126194},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126035,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126201,"title":126202,"body":126203,"description":27,"extension":28,"meta":126400,"navigation":30,"path":126401,"seo":126402,"stem":126403,"__hash__":126404},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126204,"toc":126392},[126205,126208,126212,126215,126221,126228,126234,126240,126243,126246,126249,126252,126255,126258,126261,126265,126268,126271,126274,126280,126286,126292,126299,126303,126309,126315,126318,126321,126327,126333,126339,126342,126345,126349,126352,126362,126368,126372,126381,126385,126388],[10,126206,126202],{"id":126207},"_4-html图像与链接",[45,126209,126211],{"id":126210},"_41-图像标签","4.1 图像标签",[14,126213,126214],{},"（1）标签",[14,126216,126217,126220],{},[100,126218,126219],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126222,126223,126224,126227],{},"src是",[100,126225,126226],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126229,126230,126231],{},"alt:文本，替换文本。图像不能显示的文字 ",[100,126232,126233],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126235,126236,126237],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[100,126238,126239],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126241,126242],{},"width:像素，设置图像的宽度",[14,126244,126245],{},"height:像素，设置图像的高度",[14,126247,126248],{},"border：像素，设置图像的边框粗细",[14,126250,126251],{},"（2）图像标签属性的注意点：",[14,126253,126254],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126256,126257],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126259,126260],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[45,126262,126264],{"id":126263},"_42-路径注意要点","4.2 路径注意要点：",[14,126266,126267],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126269,126270],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126272,126273],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126275,126276,126277],{},"①同一级路径：图像文件位于HTML文件同一级，如",[100,126278,126279],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126281,126282,126283],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[100,126284,126285],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126287,126288,126289],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[100,126290,126291],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126293,126294,126295,364],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[17,126296,126297],{"href":126297,"rel":126298},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[21],[45,126300,126302],{"id":126301},"_43-超链接标签","4.3 超链接标签",[14,126304,126305,126308],{},[100,126306,126307],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126310,126311,126312],{},"①语法格式：",[100,126313,126314],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126316,126317],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126319,126320],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126322,126323,126324],{},"③链接分类：外部链接：",[100,126325,126326],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126328,126329,126330],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[100,126331,126332],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126334,126335,126336],{},"空链接：如果当时没有确定链接目标时，",[100,126337,126338],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126340,126341],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126343,126344],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[45,126346,126348],{"id":126347},"_44-锚点链接","4.4 锚点链接",[14,126350,126351],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126353,126354,126355,126358,126359],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[100,126356,126357],{},"\u003Ca href=\"#two\">","第二级",[100,126360,126361],{},"\u003C\u002Fa>",[14,126363,126364,126365],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[100,126366,126367],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[45,126369,126371],{"id":126370},"_45-注释标签","4.5 注释标签",[14,126373,126374,126377,126378],{},[100,126375,126376],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[100,126379,126380],{},"ctrl+\u002F",[45,126382,126384],{"id":126383},"_46-特殊字符","4.6 特殊字符",[14,126386,126387],{},"可以实现添加多个空格",[1451,126389],{"style":126390,"src":126391},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":24,"searchDepth":25,"depth":25,"links":126393},[126394,126395,126396,126397,126398,126399],{"id":126210,"depth":25,"text":126211},{"id":126263,"depth":25,"text":126264},{"id":126301,"depth":25,"text":126302},{"id":126347,"depth":25,"text":126348},{"id":126370,"depth":25,"text":126371},{"id":126383,"depth":25,"text":126384},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126202,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126406,"title":126407,"body":126408,"description":27,"extension":28,"meta":126701,"navigation":30,"path":126702,"seo":126703,"stem":126704,"__hash__":126705},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126409,"toc":126692},[126410,126413,126417,126420,126423,126426,126429,126432,126435,126438,126441,126444,126464,126470,126474,126477,126480,126483,126486,126489,126492,126496,126499,126502,126505,126508,126521,126526,126529,126532,126547,126550,126553,126556,126559,126562,126566,126569,126576,126579,126582,126585,126588,126591,126597,126600,126603,126609,126612,126615,126618,126624,126627,126630,126644,126651,126654,126657,126664,126673,126676,126679,126682,126686,126689],[10,126411,126407],{"id":126412},"_5-html表格列表与表单",[45,126414,126416],{"id":126415},"_51-表格标签","5.1 表格标签",[14,126418,126419],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126421,126422],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126424,126425],{},"②表格基本语法：",[1451,126427],{"style":126390,"src":126428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126430,126431],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1451,126433],{"style":126390,"src":126434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126436,126437],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1451,126439],{"style":126390,"src":126440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126442,126443],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126445,126446,126449,126450,126452,126453,126456,126457,126459,126460,126463],{},[100,126447,126448],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[100,126451,126448],{},"内部必须拥有",[100,126454,126455],{},"\u003Ctr>","标签，一般位于第一行，",[100,126458,126448],{},"比",[100,126461,126462],{},"\u003Cth>","范围广",[14,126465,126466,126469],{},[100,126467,126468],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[45,126471,126473],{"id":126472},"_52-合并单元格","5.2 合并单元格",[14,126475,126476],{},"（1）合并单元格方式：",[14,126478,126479],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126481,126482],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126484,126485],{},"（2）目标单元格：",[14,126487,126488],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126490,126491],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[45,126493,126495],{"id":126494},"_53-列表标签","5.3 列表标签",[14,126497,126498],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126500,126501],{},"①无序列表：",[1451,126503],{"style":126390,"src":126504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126506,126507],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126509,126510,126513,126514,126517,126518,126520],{},[100,126511,126512],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[100,126515,126516],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[100,126519,126512],{},"中输入其他标签或文字是不对的",[14,126522,126523,126525],{},[100,126524,126516],{},"之间相当于一个容器，可以容纳所有元素",[14,126527,126528],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126530,126531],{},"在css中去除前边的小圆点采用如下代码:",[94,126533,126537],{"className":126534,"code":126535,"language":126536,"meta":24,"style":24},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[100,126538,126539],{"__ignoreMap":24},[103,126540,126541,126544],{"class":105,"line":106},[103,126542,126543],{"class":51290},"list-style",[103,126545,126546],{"class":113},": none;\n",[14,126548,126549],{},"②有序列表：",[1451,126551],{"style":126390,"src":126552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126554,126555],{},"③自定义列表：",[1451,126557],{"style":126390,"src":126558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1451,126560],{"style":126390,"src":126561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[45,126563,126565],{"id":126564},"_54-表单标签","5.4 表单标签",[14,126567,126568],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126570,126571,126572,126575],{},"（1）表单域：包含单元素的区域，",[100,126573,126574],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1451,126577],{"style":126390,"src":126578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126580,126581],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126583,126584],{},"表单元素提交必须有name属性",[14,126586,126587],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126589,126590],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126592,77216,126593,126596],{},[100,126594,126595],{},"\u003Cinput>","输入表单元素",[1451,126598],{"style":126390,"src":126599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1451,126601],{"style":126390,"src":126602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126604,126605,126606],{},"单选按钮：",[100,126607,126608],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1451,126610],{"style":126390,"src":126611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126613,126614],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1451,126616],{"style":126390,"src":126617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126619,126620,126623],{},[263,126621,126622],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126625,126626],{},"②select下拉表单元素：可以节约页面控件",[1451,126628],{"style":126390,"src":126629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126631,126632,13785,126634,126637,126638,126640,126641,126643],{},[263,126633,143],{},[100,126635,126636],{},"\u003Cselect>","中至少包含一对",[100,126639,102704],{},"；在",[100,126642,102704],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126645,126646,126647,126650],{},"③",[100,126648,126649],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1451,126652],{"style":126390,"src":126653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126655,126656],{},"3行20列",[45,126658,126660,126661,102683],{"id":126659},"_55-lable标签","5.5 ",[100,126662,126663],{},"\u003Clable>",[14,126665,126666,126667,126669,126670,126672],{},"它不是表单标签，但常常与表单标签搭配使用，",[100,126668,126663],{},"标签用于绑定一个表单标签，当点击",[100,126671,126663],{},"标签内的文本",[14,126674,126675],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1451,126677],{"style":126390,"src":126678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1451,126680],{"style":126390,"src":126681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[45,126683,126685],{"id":126684},"_56-实例","5.6 实例",[1451,126687],{"style":126390,"src":126688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5116,126690,126691],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":24,"searchDepth":25,"depth":25,"links":126693},[126694,126695,126696,126697,126698,126700],{"id":126415,"depth":25,"text":126416},{"id":126472,"depth":25,"text":126473},{"id":126494,"depth":25,"text":126495},{"id":126564,"depth":25,"text":126565},{"id":126659,"depth":25,"text":126699},"5.5 \u003Clable>标签",{"id":126684,"depth":25,"text":126685},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126407,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126707,"title":126708,"body":126709,"description":27,"extension":28,"meta":127258,"navigation":30,"path":127259,"seo":127260,"stem":127261,"__hash__":127262},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126710,"toc":127233},[126711,126714,126718,126721,126724,126728,126731,126734,126737,126740,126743,126746,126749,126753,126756,126760,126763,126766,126769,126773,126776,126779,126782,126788,126791,126794,126797,126800,126803,126806,126809,126842,126846,126849,126852,126855,126859,126862,126865,126868,126871,126874,126878,126881,126884,126887,126891,126894,126898,126901,126905,126908,126913,126917,126920,126924,126927,126930,126933,126936,126963,126966,126970,126973,126976,126981,126984,126987,126991,126994,126999,127002,127005,127008,127012,127015,127018,127021,127025,127028,127031,127034,127038,127042,127045,127085,127088,127092,127099,127102,127106,127109,127155,127159,127162,127165,127168,127196,127200,127203,127230],[10,126712,126708],{"id":126713},"_6-css语法与文本样式",[45,126715,126717],{"id":126716},"_61-css语法规范","6.1 css语法规范",[14,126719,126720],{},"由两部分组成，选择器及一条或多条声明",[1451,126722],{"style":126390,"src":126723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126725,126726],{},[263,126727,143],{},[14,126729,126730],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126732,126733],{},"②属性与属性值以“键值对”的形式出现",[14,126735,126736],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126738,126739],{},"④属性和属性值之间用英文“;”分开",[1451,126741],{"style":126390,"src":126742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1451,126744],{"style":126390,"src":126745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1451,126747],{"style":126390,"src":126748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[45,126750,126752],{"id":126751},"_62-css选择器","6.2 css选择器",[14,126754,126755],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[74,126757,126759],{"id":126758},"_621-标签选择器","6.2.1 标签选择器",[14,126761,126762],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126764,126765],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1451,126767],{"style":126390,"src":126768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[74,126770,126772],{"id":126771},"_622-类选择器","6.2.2 类选择器",[14,126774,126775],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126777,126778],{},"②样例",[1451,126780],{"style":126390,"src":126781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126783,126784,126785,126787],{},"③ ",[263,126786,126622],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126789,126790],{},"可以理解为给这个标签起了个名字，来表示；",[14,126792,126793],{},"长名称或词组可以使用横线来为选择器命名；",[14,126795,126796],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126798,126799],{},"命名要有意义；",[1451,126801],{"style":126390,"src":126802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126804,126805],{},"类选择器也可以指定特殊的元素p.center{}",[14,126807,126808],{},"p.center和.center都对",[94,126810,126812],{"className":126534,"code":126811,"language":126536,"meta":24,"style":24},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[100,126813,126814,126819,126828,126838],{"__ignoreMap":24},[103,126815,126816],{"class":105,"line":106},[103,126817,126818],{"class":172},"\u002F* 类选择器指定特殊元素 *\u002F\n",[103,126820,126821,126823,126826],{"class":105,"line":25},[103,126822,14],{"class":51290},[103,126824,126825],{"class":1952},".center",[103,126827,15562],{"class":113},[103,126829,126830,126832,126834,126836],{"class":105,"line":1168},[103,126831,70516],{"class":162},[103,126833,51427],{"class":113},[103,126835,51582],{"class":162},[103,126837,1279],{"class":113},[103,126839,126840],{"class":105,"line":1183},[103,126841,1554],{"class":113},[74,126843,126845],{"id":126844},"_623-多类名使用","6.2.3 多类名使用",[14,126847,126848],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1451,126850],{"style":126390,"src":126851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126853,126854],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[74,126856,126858],{"id":126857},"_624-id选择器","6.2.4 id选择器",[14,126860,126861],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126863,126864],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1451,126866],{"style":126390,"src":126867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126869,126870],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126872,126873],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[74,126875,126877],{"id":126876},"_625-通配符选择器","6.2.5 通配符选择器",[14,126879,126880],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126882,126883],{},"* {",[14,126885,126886],{},"color=\"red\"}",[74,126888,126890],{"id":126889},"_626-总结","6.2.6 总结",[1451,126892],{"style":126390,"src":126893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[45,126895,126897],{"id":126896},"_63-css字体属性","6.3 css字体属性",[14,126899,126900],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[74,126902,126904],{"id":126903},"_631-字体系列","6.3.1 字体系列",[14,126906,126907],{},"font-family: '宋体';",[14,126909,126910,126912],{},[263,126911,143],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[74,126914,126916],{"id":126915},"_632-字体大小","6.3.2 字体大小",[14,126918,126919],{},"font-size: 20px",[14,126921,126922,26463],{},[263,126923,126622],{},[14,126925,126926],{},"①px（像素）大小是网页的最常用单位",[14,126928,126929],{},"②谷歌浏览器默认为16px",[14,126931,126932],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,126934,126935],{},"④可以给body指定整个页面的大小：会自动引用",[94,126937,126939],{"className":126534,"code":126938,"language":126536,"meta":24,"style":24},"body {\n  font-size: 16px;\n}\n",[100,126940,126941,126947,126959],{"__ignoreMap":24},[103,126942,126943,126945],{"class":105,"line":106},[103,126944,51790],{"class":51290},[103,126946,15562],{"class":113},[103,126948,126949,126951,126953,126955,126957],{"class":105,"line":25},[103,126950,70616],{"class":162},[103,126952,51427],{"class":113},[103,126954,714],{"class":162},[103,126956,51482],{"class":109},[103,126958,1279],{"class":113},[103,126960,126961],{"class":105,"line":1168},[103,126962,1554],{"class":113},[14,126964,126965],{},"⑤标题标签比较特殊，需要单独指定大小",[74,126967,126969],{"id":126968},"_633-字体粗细","6.3.3 字体粗细",[14,126971,126972],{},"font-weight: bold;",[14,126974,126975],{},"font-weight: 100；",[14,126977,126978,126980],{},[263,126979,143],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,126982,126983],{},"font-weight= 400;",[14,126985,126986],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[74,126988,126990],{"id":126989},"_634-文字样式","6.3.4 文字样式",[14,126992,126993],{},"font-style: normal；",[14,126995,126996,26463],{},[263,126997,126998],{},"属性值",[14,127000,127001],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127003,127004],{},"②italic：浏览器会显示斜体的字体样式",[1451,127006],{"style":126390,"src":127007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[74,127009,127011],{"id":127010},"_635-字体符合属性","6.3.5 字体符合属性",[1451,127013],{"style":126390,"src":127014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1451,127016],{"style":126390,"src":127017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127019,127020],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127022,127023,26463],{},[263,127024,126622],{},[14,127026,127027],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127029,127030],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127032,127033],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[45,127035,127037],{"id":127036},"_64-css-test文本属性","6.4 css test文本属性",[74,127039,127041],{"id":127040},"_641-文本颜色","6.4.1 文本颜色",[14,127043,127044],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[94,127046,127048],{"className":126534,"code":127047,"language":126536,"meta":24,"style":24},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[100,127049,127050,127055,127061,127071,127076,127081],{"__ignoreMap":24},[103,127051,127052],{"class":105,"line":106},[103,127053,127054],{"class":172},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[103,127056,127057,127059],{"class":105,"line":25},[103,127058,14],{"class":51290},[103,127060,15562],{"class":113},[103,127062,127063,127065,127067,127069],{"class":105,"line":1168},[103,127064,70895],{"class":162},[103,127066,51427],{"class":113},[103,127068,57411],{"class":162},[103,127070,1279],{"class":113},[103,127072,127073],{"class":105,"line":1183},[103,127074,127075],{"class":172},"  \u002F* color: #ff0000; *\u002F\n",[103,127077,127078],{"class":105,"line":1189},[103,127079,127080],{"class":172},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[103,127082,127083],{"class":105,"line":1203},[103,127084,1554],{"class":113},[1451,127086],{"style":126390,"src":127087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[74,127089,127091],{"id":127090},"_642-对齐文本","6.4.2 对齐文本",[14,127093,127094,127095,127098],{},"text-align属于用于设置元素内文本内容的 ",[263,127096,127097],{},"水平对齐"," 方式",[14,127100,127101],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[74,127103,127105],{"id":127104},"_643-装饰文本","6.4.3 装饰文本",[14,127107,127108],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[94,127110,127112],{"className":126534,"code":127111,"language":126536,"meta":24,"style":24},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[100,127113,127114,127120,127130,127134,127140,127151],{"__ignoreMap":24},[103,127115,127116,127118],{"class":105,"line":106},[103,127117,17],{"class":51290},[103,127119,15562],{"class":113},[103,127121,127122,127124,127126,127128],{"class":105,"line":25},[103,127123,70492],{"class":162},[103,127125,51427],{"class":113},[103,127127,54727],{"class":162},[103,127129,1279],{"class":113},[103,127131,127132],{"class":105,"line":1168},[103,127133,1554],{"class":113},[103,127135,127136,127138],{"class":105,"line":1183},[103,127137,14],{"class":51290},[103,127139,15562],{"class":113},[103,127141,127142,127144,127146,127149],{"class":105,"line":1189},[103,127143,70492],{"class":162},[103,127145,51427],{"class":113},[103,127147,127148],{"class":162},"underline",[103,127150,1279],{"class":113},[103,127152,127153],{"class":105,"line":1203},[103,127154,1554],{"class":113},[74,127156,127158],{"id":127157},"_644-文本缩进","6.4.4 文本缩进",[14,127160,127161],{},"实现文本的第一行首行缩进自己指定的距离",[14,127163,127164],{},"20px往右边走；-20px往左边走",[14,127166,127167],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[94,127169,127171],{"className":126534,"code":127170,"language":126536,"meta":24,"style":24},"p {\n  text-indent: 2em;\n}\n",[100,127172,127173,127179,127192],{"__ignoreMap":24},[103,127174,127175,127177],{"class":105,"line":106},[103,127176,14],{"class":51290},[103,127178,15562],{"class":113},[103,127180,127181,127184,127186,127188,127190],{"class":105,"line":25},[103,127182,127183],{"class":162},"  text-indent",[103,127185,51427],{"class":113},[103,127187,191],{"class":162},[103,127189,23543],{"class":109},[103,127191,1279],{"class":113},[103,127193,127194],{"class":105,"line":1168},[103,127195,1554],{"class":113},[74,127197,127199],{"id":127198},"_645-行间距","6.4.5 行间距",[14,127201,127202],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[94,127204,127206],{"className":126534,"code":127205,"language":126536,"meta":24,"style":24},"p {\n  line-height: 1.6;\n}\n",[100,127207,127208,127214,127226],{"__ignoreMap":24},[103,127209,127210,127212],{"class":105,"line":106},[103,127211,14],{"class":51290},[103,127213,15562],{"class":113},[103,127215,127216,127219,127221,127224],{"class":105,"line":25},[103,127217,127218],{"class":162},"  line-height",[103,127220,51427],{"class":113},[103,127222,127223],{"class":162},"1.6",[103,127225,1279],{"class":113},[103,127227,127228],{"class":105,"line":1168},[103,127229,1554],{"class":113},[5116,127231,127232],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":24,"searchDepth":25,"depth":25,"links":127234},[127235,127236,127244,127251],{"id":126716,"depth":25,"text":126717},{"id":126751,"depth":25,"text":126752,"children":127237},[127238,127239,127240,127241,127242,127243],{"id":126758,"depth":1168,"text":126759},{"id":126771,"depth":1168,"text":126772},{"id":126844,"depth":1168,"text":126845},{"id":126857,"depth":1168,"text":126858},{"id":126876,"depth":1168,"text":126877},{"id":126889,"depth":1168,"text":126890},{"id":126896,"depth":25,"text":126897,"children":127245},[127246,127247,127248,127249,127250],{"id":126903,"depth":1168,"text":126904},{"id":126915,"depth":1168,"text":126916},{"id":126968,"depth":1168,"text":126969},{"id":126989,"depth":1168,"text":126990},{"id":127010,"depth":1168,"text":127011},{"id":127036,"depth":25,"text":127037,"children":127252},[127253,127254,127255,127256,127257],{"id":127040,"depth":1168,"text":127041},{"id":127090,"depth":1168,"text":127091},{"id":127104,"depth":1168,"text":127105},{"id":127157,"depth":1168,"text":127158},{"id":127198,"depth":1168,"text":127199},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126708,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127264,"title":127265,"body":127266,"description":27,"extension":28,"meta":127915,"navigation":30,"path":127916,"seo":127917,"stem":127918,"__hash__":127919},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127267,"toc":127896},[127268,127271,127275,127279,127339,127343,127353,127356,127359,127363,127388,127392,127395,127398,127401,127404,127407,127411,127414,127417,127459,127462,127488,127494,127497,127501,127505,127511,127514,127517,127520,127523,127526,127529,127574,127578,127581,127584,127588,127592,127621,127624,127629,127632,127635,127638,127641,127645,127649,127652,127654,127657,127661,127664,127668,127671,127674,127677,127681,127685,127691,127701,127704,127707,127710,127713,127716,127839,127847,127855,127893],[10,127269,127265],{"id":127270},"_7-css引入方式与选择器进阶",[45,127272,127274],{"id":127273},"_71-css引入方式","7.1 css引入方式",[74,127276,127278],{"id":127277},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[94,127280,127284],{"className":127281,"code":127282,"language":127283,"meta":24,"style":24},"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",[100,127285,127286,127294,127301,127313,127326,127331],{"__ignoreMap":24},[103,127287,127288,127290,127292],{"class":105,"line":106},[103,127289,1023],{"class":113},[103,127291,5116],{"class":51290},[103,127293,51297],{"class":113},[103,127295,127296,127299],{"class":105,"line":25},[103,127297,127298],{"class":51290},"  h1",[103,127300,15562],{"class":113},[103,127302,127303,127306,127308,127311],{"class":105,"line":1168},[103,127304,127305],{"class":162},"    color",[103,127307,51427],{"class":113},[103,127309,127310],{"class":162},"blue",[103,127312,1279],{"class":113},[103,127314,127315,127318,127320,127322,127324],{"class":105,"line":1183},[103,127316,127317],{"class":162},"    font-size",[103,127319,51427],{"class":113},[103,127321,913],{"class":162},[103,127323,51482],{"class":109},[103,127325,1279],{"class":113},[103,127327,127328],{"class":105,"line":1189},[103,127329,127330],{"class":113},"  }\n",[103,127332,127333,127335,127337],{"class":105,"line":1203},[103,127334,51775],{"class":113},[103,127336,5116],{"class":51290},[103,127338,51297],{"class":113},[14,127340,127341,26463],{},[263,127342,126622],{},[14,127344,77216,127345,127348,127349,127352],{},[100,127346,127347],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[100,127350,127351],{},"\u003Chead>","标签中",[14,127354,127355],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127357,127358],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[74,127360,127362],{"id":127361},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[94,127364,127366],{"className":127281,"code":127365,"language":127283,"meta":24,"style":24},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[100,127367,127368],{"__ignoreMap":24},[103,127369,127370,127372,127374,127376,127378,127381,127384,127386],{"class":105,"line":106},[103,127371,1023],{"class":113},[103,127373,14],{"class":51290},[103,127375,62616],{"class":1952},[103,127377,159],{"class":113},[103,127379,127380],{"class":218},"\"color: red; font-size: 16px;\"",[103,127382,127383],{"class":113},">这是一个段落\u003C\u002F",[103,127385,14],{"class":51290},[103,127387,51297],{"class":113},[14,127389,127390,26463],{},[263,127391,126622],{},[14,127393,127394],{},"①style其实就是标签的属性",[14,127396,127397],{},"②在双引号中间，写法要符合css规范",[14,127399,127400],{},"③可以控制当前的标签设置样式",[14,127402,127403],{},"④书写繁琐，简单时才用",[14,127405,127406],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[74,127408,127410],{"id":127409},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127412,127413],{},"使用最多，单独建一个css文件，然后html引用",[14,127415,127416],{},"①css文件部分： style.css",[94,127418,127420],{"className":126534,"code":127419,"language":126536,"meta":24,"style":24},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[100,127421,127422,127427,127433,127443,127455],{"__ignoreMap":24},[103,127423,127424],{"class":105,"line":106},[103,127425,127426],{"class":172},"\u002F* style.css *\u002F\n",[103,127428,127429,127431],{"class":105,"line":25},[103,127430,10],{"class":51290},[103,127432,15562],{"class":113},[103,127434,127435,127437,127439,127441],{"class":105,"line":1168},[103,127436,70895],{"class":162},[103,127438,51427],{"class":113},[103,127440,127310],{"class":162},[103,127442,1279],{"class":113},[103,127444,127445,127447,127449,127451,127453],{"class":105,"line":1183},[103,127446,70616],{"class":162},[103,127448,51427],{"class":113},[103,127450,913],{"class":162},[103,127452,51482],{"class":109},[103,127454,1279],{"class":113},[103,127456,127457],{"class":105,"line":1189},[103,127458,1554],{"class":113},[14,127460,127461],{},"②html部分",[94,127463,127465],{"className":127281,"code":127464,"language":127283,"meta":24,"style":24},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[100,127466,127467],{"__ignoreMap":24},[103,127468,127469,127471,127473,127475,127477,127479,127481,127483,127486],{"class":105,"line":106},[103,127470,1023],{"class":113},[103,127472,68995],{"class":51290},[103,127474,68998],{"class":1952},[103,127476,159],{"class":113},[103,127478,69003],{"class":218},[103,127480,61047],{"class":1952},[103,127482,159],{"class":113},[103,127484,127485],{"class":218},"\"style.css\"",[103,127487,51297],{"class":113},[14,127489,127490,127493],{},[100,127491,127492],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127495,127496],{},"ctrl+0回到页面原来大小",[45,127498,127500],{"id":127499},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[74,127502,127504],{"id":127503},"_721-快速生成html","7.2.1 快速生成html",[14,127506,127507,127508],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[100,127509,127510],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127512,127513],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127515,127516],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127518,127519],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127521,127522],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127524,127525],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127527,127528],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[94,127530,127532],{"className":127281,"code":127531,"language":127283,"meta":24,"style":24},"\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",[100,127533,127534,127539,127544,127549,127554,127559,127564,127569],{"__ignoreMap":24},[103,127535,127536],{"class":105,"line":106},[103,127537,127538],{"class":172},"\u003C!-- Emmet 语法示例 -->\n",[103,127540,127541],{"class":105,"line":25},[103,127542,127543],{"class":172},"\u003C!-- div*3        → 生成3个div -->\n",[103,127545,127546],{"class":105,"line":1168},[103,127547,127548],{"class":172},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[103,127550,127551],{"class":105,"line":1183},[103,127552,127553],{"class":172},"\u003C!-- div+p        → 兄弟div和p -->\n",[103,127555,127556],{"class":105,"line":1189},[103,127557,127558],{"class":172},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[103,127560,127561],{"class":105,"line":1203},[103,127562,127563],{"class":172},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[103,127565,127566],{"class":105,"line":1209},[103,127567,127568],{"class":172},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[103,127570,127571],{"class":105,"line":1300},[103,127572,127573],{"class":172},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[74,127575,127577],{"id":127576},"_722-快速生成css","7.2.2 快速生成css",[14,127579,127580],{},"简写开头",[14,127582,127583],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[45,127585,127587],{"id":127586},"_73-css复合选择器","7.3 css复合选择器",[74,127589,127591],{"id":127590},"_731-后代选择器","7.3.1 后代选择器",[94,127593,127595],{"className":126534,"code":127594,"language":126536,"meta":24,"style":24},".parent .child {\n  color: blue;\n}\n",[100,127596,127597,127607,127617],{"__ignoreMap":24},[103,127598,127599,127602,127605],{"class":105,"line":106},[103,127600,127601],{"class":1952},".parent",[103,127603,127604],{"class":1952}," .child",[103,127606,15562],{"class":113},[103,127608,127609,127611,127613,127615],{"class":105,"line":25},[103,127610,70895],{"class":162},[103,127612,51427],{"class":113},[103,127614,127310],{"class":162},[103,127616,1279],{"class":113},[103,127618,127619],{"class":105,"line":1168},[103,127620,1554],{"class":113},[14,127622,127623],{},"元素1 元素2 {样式声明}",[14,127625,127626],{},[263,127627,127628],{},"注意点:",[14,127630,127631],{},"①元素1和元素2中间用空格隔开",[14,127633,127634],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127636,127637],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127639,127640],{},"④元素1和元素2可以是任意基础选择器",[74,127642,127644],{"id":127643},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127646,127647],{},[263,127648,127628],{},[14,127650,127651],{},"①元素1和元素2中间用大于号隔开",[14,127653,127634],{},[14,127655,127656],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[74,127658,127660],{"id":127659},"_733-并集选择器","7.3.3 并集选择器",[14,127662,127663],{},"元素1，元素2 {样式声明}",[14,127665,127666],{},[263,127667,127628],{},[14,127669,127670],{},"①元素1和元素2中间用逗号隔开",[14,127672,127673],{},"②逗号可以理解为和的意思",[14,127675,127676],{},"③并集选择器通常用于集体声明",[74,127678,127680],{"id":127679},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127682,127683],{},[263,127684,127628],{},[14,127686,127687,127688,127690],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68995,127689],{},"－:visited－:hover－:active。",[14,127692,127693,127694,127697,127698,25730],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127695,127696],"hover",{}," 、 ",[127699,127700],"first-child",{},[14,127702,127703],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127705,127706],{},"link对没访问的进行设置",[14,127708,127709],{},"vistied对已访问的进行改变",[14,127711,127712],{},"hover鼠标经过就会变",[14,127714,127715],{},"active常按(点)就会变",[94,127717,127719],{"className":126534,"code":127718,"language":126536,"meta":24,"style":24},"\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",[100,127720,127721,127726,127735,127745,127755,127759,127768,127779,127783,127791,127801,127811,127815,127824,127835],{"__ignoreMap":24},[103,127722,127723],{"class":105,"line":106},[103,127724,127725],{"class":172},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[103,127727,127728,127730,127733],{"class":105,"line":25},[103,127729,17],{"class":51290},[103,127731,127732],{"class":1952},":link",[103,127734,15562],{"class":113},[103,127736,127737,127739,127741,127743],{"class":105,"line":1168},[103,127738,70895],{"class":162},[103,127740,51427],{"class":113},[103,127742,62359],{"class":162},[103,127744,1279],{"class":113},[103,127746,127747,127749,127751,127753],{"class":105,"line":1183},[103,127748,70492],{"class":162},[103,127750,51427],{"class":113},[103,127752,54727],{"class":162},[103,127754,1279],{"class":113},[103,127756,127757],{"class":105,"line":1189},[103,127758,1554],{"class":113},[103,127760,127761,127763,127766],{"class":105,"line":1203},[103,127762,17],{"class":51290},[103,127764,127765],{"class":1952},":visited",[103,127767,15562],{"class":113},[103,127769,127770,127772,127774,127777],{"class":105,"line":1209},[103,127771,70895],{"class":162},[103,127773,51427],{"class":113},[103,127775,127776],{"class":162},"purple",[103,127778,1279],{"class":113},[103,127780,127781],{"class":105,"line":1300},[103,127782,1554],{"class":113},[103,127784,127785,127787,127789],{"class":105,"line":1306},[103,127786,17],{"class":51290},[103,127788,60930],{"class":1952},[103,127790,15562],{"class":113},[103,127792,127793,127795,127797,127799],{"class":105,"line":1318},[103,127794,70895],{"class":162},[103,127796,51427],{"class":113},[103,127798,54879],{"class":162},[103,127800,1279],{"class":113},[103,127802,127803,127805,127807,127809],{"class":105,"line":1601},[103,127804,70492],{"class":162},[103,127806,51427],{"class":113},[103,127808,127148],{"class":162},[103,127810,1279],{"class":113},[103,127812,127813],{"class":105,"line":1606},[103,127814,1554],{"class":113},[103,127816,127817,127819,127822],{"class":105,"line":1612},[103,127818,17],{"class":51290},[103,127820,127821],{"class":1952},":active",[103,127823,15562],{"class":113},[103,127825,127826,127828,127830,127833],{"class":105,"line":1617},[103,127827,70895],{"class":162},[103,127829,51427],{"class":113},[103,127831,127832],{"class":162},"green",[103,127834,1279],{"class":113},[103,127836,127837],{"class":105,"line":1631},[103,127838,1554],{"class":113},[74,127840,127842,127843,127846],{"id":127841},"_735-伪类选择器","7.3.5 ",[127844,127845],"focus",{},"伪类选择器",[14,127848,127849,127851,127852,127854],{},[127844,127850],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[100,127853,126595],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[94,127856,127858],{"className":126534,"code":127857,"language":126536,"meta":24,"style":24},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[100,127859,127860,127868,127879,127889],{"__ignoreMap":24},[103,127861,127862,127864,127866],{"class":105,"line":106},[103,127863,53811],{"class":51290},[103,127865,61890],{"class":1952},[103,127867,15562],{"class":113},[103,127869,127870,127873,127875,127877],{"class":105,"line":25},[103,127871,127872],{"class":162},"  border-color",[103,127874,51427],{"class":113},[103,127876,54879],{"class":162},[103,127878,1279],{"class":113},[103,127880,127881,127883,127885,127887],{"class":105,"line":1168},[103,127882,70788],{"class":162},[103,127884,51427],{"class":113},[103,127886,54727],{"class":162},[103,127888,1279],{"class":113},[103,127890,127891],{"class":105,"line":1183},[103,127892,1554],{"class":113},[5116,127894,127895],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":24,"searchDepth":25,"depth":25,"links":127897},[127898,127903,127907],{"id":127273,"depth":25,"text":127274,"children":127899},[127900,127901,127902],{"id":127277,"depth":1168,"text":127278},{"id":127361,"depth":1168,"text":127362},{"id":127409,"depth":1168,"text":127410},{"id":127499,"depth":25,"text":127500,"children":127904},[127905,127906],{"id":127503,"depth":1168,"text":127504},{"id":127576,"depth":1168,"text":127577},{"id":127586,"depth":25,"text":127587,"children":127908},[127909,127910,127911,127912,127913],{"id":127590,"depth":1168,"text":127591},{"id":127643,"depth":1168,"text":127644},{"id":127659,"depth":1168,"text":127660},{"id":127679,"depth":1168,"text":127680},{"id":127841,"depth":1168,"text":127914},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127265,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127921,"title":127922,"body":127923,"description":27,"extension":28,"meta":129846,"navigation":30,"path":129847,"seo":129848,"stem":129849,"__hash__":129850},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127924,"toc":129820},[127925,127928,127932,127941,127945,127971,127976,127979,127982,127985,127988,127992,127995,128005,128013,128017,128052,128057,128060,128063,128066,128069,128073,128076,128085,128089,128102,128107,128110,128113,128116,128120,128123,128127,128130,128185,128188,128219,128222,128276,128280,128283,128449,128572,128575,128578,128581,128584,128588,128591,128595,128598,128601,128605,128608,128639,128666,128694,128697,128701,128727,128770,128774,128868,128871,128898,128901,128904,128907,128910,128913,128916,128919,128922,128925,128929,128986,129013,129017,129065,129069,129110,129112,129115,129118,129121,129124,129128,129220,129223,129226,129229,129233,129356,129557,129561,129565,129568,129571,129574,129578,129581,129584,129609,129612,129615,129618,129621,129624,129628,129636,129698,129701,129759,129762,129765,129768,129771,129774,129777,129780,129817],[10,127926,127922],{"id":127927},"_8-css显示模式与背景特性",[45,127929,127931],{"id":127930},"_81-css元素显示模式","8.1 css元素显示模式",[14,127933,127934,127935,127937,127938,127940],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[100,127936,126145],{},"自己占一行，比如一行可以放多个",[100,127939,126148],{},"，HTML 元素一般分为块元素和行内元素两种类型",[74,127942,127944],{"id":127943},"_811-块元素","8.1.1 块元素",[14,127946,127947,127948,127950,127951,326,127954,326,127956,326,127958,326,127961,326,127964,127967,127968,127970],{},"常见的块元素有",[100,127949,126049],{},"~",[100,127952,127953],{},"\u003Ch6>",[100,127955,126075],{},[100,127957,126145],{},[100,127959,127960],{},"\u003Cul>",[100,127962,127963],{},"\u003Col>",[100,127965,127966],{},"\u003Cli>","等，其中 ",[100,127969,126145],{}," 标签是最典型的块元素",[14,127972,127973],{},[263,127974,127975],{},"块级元素的特点：",[14,127977,127978],{},"① 比较霸道，自己独占一行。",[14,127980,127981],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,127983,127984],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,127986,127987],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,127989,127990],{},[263,127991,143],{},[14,127993,127994],{},"①文字类的元素内不能使用块级元素",[14,127996,77239,127997,127999,128000,128002,128003],{},[100,127998,126075],{}," 标签主要用于存放文字，因此 ",[100,128001,126075],{}," 里面不能放块级元素，特别是不能放",[100,128004,126145],{},[14,128006,128007,128008,127950,128010,128012],{},"⑥同理， ",[100,128009,126049],{},[100,128011,127953],{},"等都是文字类块级标签，里面也不能放其他块级元素",[74,128014,128016],{"id":128015},"_812-行内元素","8.1.2 行内元素",[14,128018,128019,128020,326,128022,326,128025,326,128028,326,128031,326,128034,326,128037,326,128040,326,128043,326,128046,128048,128049,128051],{},"常见的行内元素有 ",[100,128021,126307],{},[100,128023,128024],{},"\u003Cstrong>",[100,128026,128027],{},"\u003Cb>",[100,128029,128030],{},"\u003Cem>",[100,128032,128033],{},"\u003Ci>",[100,128035,128036],{},"\u003Cdel>",[100,128038,128039],{},"\u003Cs>",[100,128041,128042],{},"\u003Cins>",[100,128044,128045],{},"\u003Cu>",[100,128047,126148],{}," 等，其中 ",[100,128050,126148],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128053,128054],{},[263,128055,128056],{},"特点：",[14,128058,128059],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128061,128062],{},"② 高、宽直接设置是无效的。",[14,128064,128065],{},"③ 默认宽度就是它本身内容的宽度。",[14,128067,128068],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128070,128071],{},[263,128072,143],{},[14,128074,128075],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128077,128078,128079,128081,128082,128084],{},"②特殊情况链接 ",[100,128080,126307],{}," 里面可以放块级元素，但是给 ",[100,128083,126307],{}," 转换一下块级模式最安全",[74,128086,128088],{"id":128087},"_813-行内块元素","8.1.3 行内块元素",[14,128090,128091,128092,326,128095,326,128098,128101],{},"在行内元素中有几个特殊的标签 —— ",[100,128093,128094],{},"\u003Cimg \u002F>",[100,128096,128097],{},"\u003Cinput \u002F>",[100,128099,128100],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128103,128104],{},[263,128105,128106],{},"行内块元素的特点：",[14,128108,128109],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128111,128112],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128114,128115],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[74,128117,128119],{"id":128118},"_814-总结","8.1.4 总结",[1451,128121],{"style":126390,"src":128122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[74,128124,128126],{"id":128125},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128128,128129],{},"①转换为块元素：display:block;",[94,128131,128133],{"className":126534,"code":128132,"language":126536,"meta":24,"style":24},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[100,128134,128135,128140,128146,128157,128169,128181],{"__ignoreMap":24},[103,128136,128137],{"class":105,"line":106},[103,128138,128139],{"class":172},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[103,128141,128142,128144],{"class":105,"line":25},[103,128143,17],{"class":51290},[103,128145,15562],{"class":113},[103,128147,128148,128151,128153,128155],{"class":105,"line":1168},[103,128149,128150],{"class":162},"  display",[103,128152,51427],{"class":113},[103,128154,60859],{"class":162},[103,128156,1279],{"class":113},[103,128158,128159,128161,128163,128165,128167],{"class":105,"line":1183},[103,128160,70558],{"class":162},[103,128162,51427],{"class":113},[103,128164,424],{"class":162},[103,128166,51482],{"class":109},[103,128168,1279],{"class":113},[103,128170,128171,128173,128175,128177,128179],{"class":105,"line":1189},[103,128172,70778],{"class":162},[103,128174,51427],{"class":113},[103,128176,514],{"class":162},[103,128178,51482],{"class":109},[103,128180,1279],{"class":113},[103,128182,128183],{"class":105,"line":1203},[103,128184,1554],{"class":113},[14,128186,128187],{},"②转换为行内元素：display:inline;",[94,128189,128191],{"className":126534,"code":128190,"language":126536,"meta":24,"style":24},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[100,128192,128193,128198,128204,128215],{"__ignoreMap":24},[103,128194,128195],{"class":105,"line":106},[103,128196,128197],{"class":172},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[103,128199,128200,128202],{"class":105,"line":25},[103,128201,51601],{"class":51290},[103,128203,15562],{"class":113},[103,128205,128206,128208,128210,128213],{"class":105,"line":1168},[103,128207,128150],{"class":162},[103,128209,51427],{"class":113},[103,128211,128212],{"class":162},"inline",[103,128214,1279],{"class":113},[103,128216,128217],{"class":105,"line":1183},[103,128218,1554],{"class":113},[14,128220,128221],{},"③转换为行内块：display:inline-block;",[94,128223,128225],{"className":126534,"code":128224,"language":126536,"meta":24,"style":24},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[100,128226,128227,128232,128238,128248,128260,128272],{"__ignoreMap":24},[103,128228,128229],{"class":105,"line":106},[103,128230,128231],{"class":172},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[103,128233,128234,128236],{"class":105,"line":25},[103,128235,103],{"class":51290},[103,128237,15562],{"class":113},[103,128239,128240,128242,128244,128246],{"class":105,"line":1168},[103,128241,128150],{"class":162},[103,128243,51427],{"class":113},[103,128245,72373],{"class":162},[103,128247,1279],{"class":113},[103,128249,128250,128252,128254,128256,128258],{"class":105,"line":1183},[103,128251,70558],{"class":162},[103,128253,51427],{"class":113},[103,128255,725],{"class":162},[103,128257,51482],{"class":109},[103,128259,1279],{"class":113},[103,128261,128262,128264,128266,128268,128270],{"class":105,"line":1189},[103,128263,70778],{"class":162},[103,128265,51427],{"class":113},[103,128267,1064],{"class":162},[103,128269,51482],{"class":109},[103,128271,1279],{"class":113},[103,128273,128274],{"class":105,"line":1203},[103,128275,1554],{"class":113},[74,128277,128279],{"id":128278},"_816-小米侧边栏","8.1.6 小米侧边栏",[1451,128281],{"style":126390,"src":128282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[94,128284,128286],{"className":127281,"code":128285,"language":127283,"meta":24,"style":24},"\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",[100,128287,128288,128293,128308,128327,128346,128365,128384,128403,128422,128441],{"__ignoreMap":24},[103,128289,128290],{"class":105,"line":106},[103,128291,128292],{"class":172},"\u003C!-- 小米侧边栏案例 -->\n",[103,128294,128295,128297,128299,128301,128303,128306],{"class":105,"line":25},[103,128296,1023],{"class":113},[103,128298,51601],{"class":51290},[103,128300,53476],{"class":1952},[103,128302,159],{"class":113},[103,128304,128305],{"class":218},"\"sidebar\"",[103,128307,51297],{"class":113},[103,128309,128310,128312,128314,128316,128318,128320,128323,128325],{"class":105,"line":1168},[103,128311,52134],{"class":113},[103,128313,17],{"class":51290},[103,128315,61047],{"class":1952},[103,128317,159],{"class":113},[103,128319,61052],{"class":218},[103,128321,128322],{"class":113},">手机 电话卡\u003C\u002F",[103,128324,17],{"class":51290},[103,128326,51297],{"class":113},[103,128328,128329,128331,128333,128335,128337,128339,128342,128344],{"class":105,"line":1183},[103,128330,52134],{"class":113},[103,128332,17],{"class":51290},[103,128334,61047],{"class":1952},[103,128336,159],{"class":113},[103,128338,61052],{"class":218},[103,128340,128341],{"class":113},">电视 盒子\u003C\u002F",[103,128343,17],{"class":51290},[103,128345,51297],{"class":113},[103,128347,128348,128350,128352,128354,128356,128358,128361,128363],{"class":105,"line":1189},[103,128349,52134],{"class":113},[103,128351,17],{"class":51290},[103,128353,61047],{"class":1952},[103,128355,159],{"class":113},[103,128357,61052],{"class":218},[103,128359,128360],{"class":113},">笔记本 平板\u003C\u002F",[103,128362,17],{"class":51290},[103,128364,51297],{"class":113},[103,128366,128367,128369,128371,128373,128375,128377,128380,128382],{"class":105,"line":1203},[103,128368,52134],{"class":113},[103,128370,17],{"class":51290},[103,128372,61047],{"class":1952},[103,128374,159],{"class":113},[103,128376,61052],{"class":218},[103,128378,128379],{"class":113},">出行 穿戴\u003C\u002F",[103,128381,17],{"class":51290},[103,128383,51297],{"class":113},[103,128385,128386,128388,128390,128392,128394,128396,128399,128401],{"class":105,"line":1209},[103,128387,52134],{"class":113},[103,128389,17],{"class":51290},[103,128391,61047],{"class":1952},[103,128393,159],{"class":113},[103,128395,61052],{"class":218},[103,128397,128398],{"class":113},">智能 路由器\u003C\u002F",[103,128400,17],{"class":51290},[103,128402,51297],{"class":113},[103,128404,128405,128407,128409,128411,128413,128415,128418,128420],{"class":105,"line":1300},[103,128406,52134],{"class":113},[103,128408,17],{"class":51290},[103,128410,61047],{"class":1952},[103,128412,159],{"class":113},[103,128414,61052],{"class":218},[103,128416,128417],{"class":113},">健康 儿童\u003C\u002F",[103,128419,17],{"class":51290},[103,128421,51297],{"class":113},[103,128423,128424,128426,128428,128430,128432,128434,128437,128439],{"class":105,"line":1306},[103,128425,52134],{"class":113},[103,128427,17],{"class":51290},[103,128429,61047],{"class":1952},[103,128431,159],{"class":113},[103,128433,61052],{"class":218},[103,128435,128436],{"class":113},">耳机 音响\u003C\u002F",[103,128438,17],{"class":51290},[103,128440,51297],{"class":113},[103,128442,128443,128445,128447],{"class":105,"line":1318},[103,128444,51775],{"class":113},[103,128446,51601],{"class":51290},[103,128448,51297],{"class":113},[94,128450,128452],{"className":126534,"code":128451,"language":126536,"meta":24,"style":24},".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",[100,128453,128454,128463,128473,128486,128498,128510,128522,128532,128543,128547,128557,128568],{"__ignoreMap":24},[103,128455,128456,128459,128461],{"class":105,"line":106},[103,128457,128458],{"class":1952},".sidebar",[103,128460,1387],{"class":51290},[103,128462,15562],{"class":113},[103,128464,128465,128467,128469,128471],{"class":105,"line":25},[103,128466,128150],{"class":162},[103,128468,51427],{"class":113},[103,128470,60859],{"class":162},[103,128472,1279],{"class":113},[103,128474,128475,128477,128479,128482,128484],{"class":105,"line":1168},[103,128476,70558],{"class":162},[103,128478,51427],{"class":113},[103,128480,128481],{"class":162},"234",[103,128483,51482],{"class":109},[103,128485,1279],{"class":113},[103,128487,128488,128490,128492,128494,128496],{"class":105,"line":1183},[103,128489,70778],{"class":162},[103,128491,51427],{"class":113},[103,128493,565],{"class":162},[103,128495,51482],{"class":109},[103,128497,1279],{"class":113},[103,128499,128500,128502,128504,128506,128508],{"class":105,"line":1189},[103,128501,127218],{"class":162},[103,128503,51427],{"class":113},[103,128505,565],{"class":162},[103,128507,51482],{"class":109},[103,128509,1279],{"class":113},[103,128511,128512,128514,128516,128518,128520],{"class":105,"line":1203},[103,128513,70813],{"class":162},[103,128515,51427],{"class":113},[103,128517,1064],{"class":162},[103,128519,51482],{"class":109},[103,128521,1279],{"class":113},[103,128523,128524,128526,128528,128530],{"class":105,"line":1209},[103,128525,70895],{"class":162},[103,128527,51427],{"class":113},[103,128529,60832],{"class":162},[103,128531,1279],{"class":113},[103,128533,128534,128536,128538,128541],{"class":105,"line":1300},[103,128535,70868],{"class":162},[103,128537,51427],{"class":113},[103,128539,128540],{"class":162},"#55585a",[103,128542,1279],{"class":113},[103,128544,128545],{"class":105,"line":1306},[103,128546,1554],{"class":113},[103,128548,128549,128551,128553,128555],{"class":105,"line":1318},[103,128550,128458],{"class":1952},[103,128552,1387],{"class":51290},[103,128554,60930],{"class":1952},[103,128556,15562],{"class":113},[103,128558,128559,128561,128563,128566],{"class":105,"line":1601},[103,128560,70868],{"class":162},[103,128562,51427],{"class":113},[103,128564,128565],{"class":162},"#ff6700",[103,128567,1279],{"class":113},[103,128569,128570],{"class":105,"line":1606},[103,128571,1554],{"class":113},[1451,128573],{"style":126390,"src":128574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128576,128577],{},"行高=盒子高度：实现文字的垂直居中",[14,128579,128580],{},"原理讲解：",[1451,128582],{"style":126390,"src":128583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[45,128585,128587],{"id":128586},"_82-css背景","8.2 css背景",[14,128589,128590],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[74,128592,128594],{"id":128593},"_821-背景颜色","8.2.1 背景颜色",[14,128596,128597],{},"background-color:颜色值;",[14,128599,128600],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[74,128602,128604],{"id":128603},"_822-背景图片","8.2.2 背景图片",[14,128606,128607],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[94,128609,128611],{"className":126534,"code":128610,"language":126536,"meta":24,"style":24},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[100,128612,128613,128619,128635],{"__ignoreMap":24},[103,128614,128615,128617],{"class":105,"line":106},[103,128616,51601],{"class":51290},[103,128618,15562],{"class":113},[103,128620,128621,128624,128626,128628,128630,128633],{"class":105,"line":25},[103,128622,128623],{"class":162},"  background-image",[103,128625,51427],{"class":113},[103,128627,61716],{"class":162},[103,128629,114],{"class":113},[103,128631,128632],{"class":5206},"images\u002Fbg.png",[103,128634,2708],{"class":113},[103,128636,128637],{"class":105,"line":1168},[103,128638,1554],{"class":113},[251,128640,128641,128650],{},[254,128642,128643],{},[257,128644,128645,128648],{},[260,128646,128647],{"align":23726},"参数值",[260,128649,102686],{"align":23726},[298,128651,128652,128659],{},[257,128653,128654,128656],{},[303,128655,54727],{"align":23726},[303,128657,128658],{"align":23726},"无背景图（默认的）",[257,128660,128661,128663],{},[303,128662,61716],{"align":23726},[303,128664,128665],{"align":23726},"使用绝对或相对地址指定背景图像",[94,128667,128668],{"className":126534,"code":128610,"language":126536,"meta":24,"style":24},[100,128669,128670,128676,128690],{"__ignoreMap":24},[103,128671,128672,128674],{"class":105,"line":106},[103,128673,51601],{"class":51290},[103,128675,15562],{"class":113},[103,128677,128678,128680,128682,128684,128686,128688],{"class":105,"line":25},[103,128679,128623],{"class":162},[103,128681,51427],{"class":113},[103,128683,61716],{"class":162},[103,128685,114],{"class":113},[103,128687,128632],{"class":5206},[103,128689,2708],{"class":113},[103,128691,128692],{"class":105,"line":1168},[103,128693,1554],{"class":113},[14,128695,128696],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[74,128698,128700],{"id":128699},"_823-背景平铺","8.2.3 背景平铺",[94,128702,128704],{"className":126534,"code":128703,"language":126536,"meta":24,"style":24},"div {\n  background-repeat: no-repeat;\n}\n",[100,128705,128706,128712,128723],{"__ignoreMap":24},[103,128707,128708,128710],{"class":105,"line":106},[103,128709,51601],{"class":51290},[103,128711,15562],{"class":113},[103,128713,128714,128717,128719,128721],{"class":105,"line":25},[103,128715,128716],{"class":162},"  background-repeat",[103,128718,51427],{"class":113},[103,128720,61726],{"class":162},[103,128722,1279],{"class":113},[103,128724,128725],{"class":105,"line":1168},[103,128726,1554],{"class":113},[251,128728,128729,128737],{},[254,128730,128731],{},[257,128732,128733,128735],{},[260,128734,128647],{"align":23726},[260,128736,102686],{"align":23726},[298,128738,128739,128747,128754,128762],{},[257,128740,128741,128744],{},[303,128742,128743],{"align":23726},"repeat",[303,128745,128746],{"align":23726},"背景图像在纵向和横向上平铺（默认的）",[257,128748,128749,128751],{},[303,128750,61726],{"align":23726},[303,128752,128753],{"align":23726},"背景图像不平铺",[257,128755,128756,128759],{},[303,128757,128758],{"align":23726},"repeat-x",[303,128760,128761],{"align":23726},"背景图像在横向上平铺",[257,128763,128764,128767],{},[303,128765,128766],{"align":23726},"repeat-y",[303,128768,128769],{"align":23726},"背景图像在纵向平铺",[74,128771,128773],{"id":128772},"_824-背景图片位置","8.2.4 背景图片位置",[94,128775,128777],{"className":126534,"code":128776,"language":126536,"meta":24,"style":24},"\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",[100,128778,128779,128784,128790,128804,128808,128813,128819,128835,128839,128844,128850,128864],{"__ignoreMap":24},[103,128780,128781],{"class":105,"line":106},[103,128782,128783],{"class":172},"\u002F* 方位名词 *\u002F\n",[103,128785,128786,128788],{"class":105,"line":25},[103,128787,51601],{"class":51290},[103,128789,15562],{"class":113},[103,128791,128792,128795,128797,128799,128802],{"class":105,"line":1168},[103,128793,128794],{"class":162},"  background-position",[103,128796,51427],{"class":113},[103,128798,51582],{"class":162},[103,128800,128801],{"class":162}," top",[103,128803,1279],{"class":113},[103,128805,128806],{"class":105,"line":1183},[103,128807,1554],{"class":113},[103,128809,128810],{"class":105,"line":1189},[103,128811,128812],{"class":172},"\u002F* 精确单位 *\u002F\n",[103,128814,128815,128817],{"class":105,"line":1203},[103,128816,51601],{"class":51290},[103,128818,15562],{"class":113},[103,128820,128821,128823,128825,128827,128829,128831,128833],{"class":105,"line":1209},[103,128822,128794],{"class":162},[103,128824,51427],{"class":113},[103,128826,813],{"class":162},[103,128828,51482],{"class":109},[103,128830,57494],{"class":162},[103,128832,51482],{"class":109},[103,128834,1279],{"class":113},[103,128836,128837],{"class":105,"line":1300},[103,128838,1554],{"class":113},[103,128840,128841],{"class":105,"line":1306},[103,128842,128843],{"class":172},"\u002F* 混合单位 *\u002F\n",[103,128845,128846,128848],{"class":105,"line":1318},[103,128847,51601],{"class":51290},[103,128849,15562],{"class":113},[103,128851,128852,128854,128856,128858,128860,128862],{"class":105,"line":1601},[103,128853,128794],{"class":162},[103,128855,51427],{"class":113},[103,128857,813],{"class":162},[103,128859,51482],{"class":109},[103,128861,17134],{"class":162},[103,128863,1279],{"class":113},[103,128865,128866],{"class":105,"line":1606},[103,128867,1554],{"class":113},[14,128869,128870],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[251,128872,128873,128881],{},[254,128874,128875],{},[257,128876,128877,128879],{},[260,128878,128647],{"align":23726},[260,128880,25859],{"align":23726},[298,128882,128883,128890],{},[257,128884,128885,128887],{},[303,128886,51958],{"align":23726},[303,128888,128889],{"align":23726},"百分数|由浮点数和单位标识符组成的长度值",[257,128891,128892,128895],{},[303,128893,128894],{"align":23726},"position",[303,128896,128897],{"align":23726},"top|center|bottom|left|center|right 方位名词",[14,128899,128900],{},"其他说明：",[14,128902,128903],{},"①参数是方位名词",[14,128905,128906],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128908,128909],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128911,128912],{},"②参数是精确单位",[14,128914,128915],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128917,128918],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128920,128921],{},"③参数是混合单位",[14,128923,128924],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[74,128926,128928],{"id":128927},"_825-背景图片固定","8.2.5 背景图片固定",[94,128930,128932],{"className":126534,"code":128931,"language":126536,"meta":24,"style":24},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[100,128933,128934,128939,128945,128957,128961,128966,128972,128982],{"__ignoreMap":24},[103,128935,128936],{"class":105,"line":106},[103,128937,128938],{"class":172},"\u002F* 背景滚动（默认） *\u002F\n",[103,128940,128941,128943],{"class":105,"line":25},[103,128942,51601],{"class":51290},[103,128944,15562],{"class":113},[103,128946,128947,128950,128952,128955],{"class":105,"line":1168},[103,128948,128949],{"class":162},"  background-attachment",[103,128951,51427],{"class":113},[103,128953,128954],{"class":162},"scroll",[103,128956,1279],{"class":113},[103,128958,128959],{"class":105,"line":1183},[103,128960,1554],{"class":113},[103,128962,128963],{"class":105,"line":1189},[103,128964,128965],{"class":172},"\u002F* 背景固定 *\u002F\n",[103,128967,128968,128970],{"class":105,"line":1203},[103,128969,51601],{"class":51290},[103,128971,15562],{"class":113},[103,128973,128974,128976,128978,128980],{"class":105,"line":1209},[103,128975,128949],{"class":162},[103,128977,51427],{"class":113},[103,128979,86223],{"class":162},[103,128981,1279],{"class":113},[103,128983,128984],{"class":105,"line":1300},[103,128985,1554],{"class":113},[251,128987,128988,128997],{},[254,128989,128990],{},[257,128991,128992,128995],{},[260,128993,128994],{"align":23726},"参数",[260,128996,102686],{"align":23726},[298,128998,128999,129006],{},[257,129000,129001,129003],{},[303,129002,128954],{"align":23726},[303,129004,129005],{"align":23726},"背景图像是随对象内容滚动",[257,129007,129008,129010],{},[303,129009,86223],{"align":23726},[303,129011,129012],{"align":23726},"背景图像固定",[74,129014,129016],{"id":129015},"_826-背景样式合写","8.2.6 背景样式合写",[94,129018,129020],{"className":126534,"code":129019,"language":126536,"meta":24,"style":24},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[100,129021,129022,129027,129033,129061],{"__ignoreMap":24},[103,129023,129024],{"class":105,"line":106},[103,129025,129026],{"class":172},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[103,129028,129029,129031],{"class":105,"line":25},[103,129030,51601],{"class":51290},[103,129032,15562],{"class":113},[103,129034,129035,129037,129039,129041,129044,129046,129048,129050,129052,129055,129057,129059],{"class":105,"line":1168},[103,129036,70601],{"class":162},[103,129038,51427],{"class":113},[103,129040,60832],{"class":162},[103,129042,129043],{"class":162}," url",[103,129045,114],{"class":113},[103,129047,128632],{"class":5206},[103,129049,13704],{"class":113},[103,129051,61726],{"class":162},[103,129053,129054],{"class":162}," fixed",[103,129056,17134],{"class":162},[103,129058,128801],{"class":162},[103,129060,1279],{"class":113},[103,129062,129063],{"class":105,"line":1183},[103,129064,1554],{"class":113},[74,129066,129068],{"id":129067},"_827-背景色半透明","8.2.7 背景色半透明",[94,129070,129072],{"className":126534,"code":129071,"language":126536,"meta":24,"style":24},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[100,129073,129074,129080,129106],{"__ignoreMap":24},[103,129075,129076,129078],{"class":105,"line":106},[103,129077,51601],{"class":51290},[103,129079,15562],{"class":113},[103,129081,129082,129084,129086,129088,129090,129092,129094,129096,129098,129100,129102,129104],{"class":105,"line":25},[103,129083,70601],{"class":162},[103,129085,51427],{"class":113},[103,129087,55100],{"class":162},[103,129089,114],{"class":113},[103,129091,305],{"class":162},[103,129093,12425],{"class":113},[103,129095,305],{"class":162},[103,129097,12425],{"class":113},[103,129099,305],{"class":162},[103,129101,12425],{"class":113},[103,129103,100511],{"class":162},[103,129105,2708],{"class":113},[103,129107,129108],{"class":105,"line":1168},[103,129109,1554],{"class":113},[14,129111,99386],{},[14,129113,129114],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129116,129117],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129119,129120],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129122,129123],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[74,129125,129127],{"id":129126},"_828-总结","8.2.8 总结",[251,129129,129130,129141],{},[254,129131,129132],{},[257,129133,129134,129137,129139],{},[260,129135,129136],{"align":23726},"属性",[260,129138,102686],{"align":23726},[260,129140,266],{"align":23726},[298,129142,129143,129154,129165,129176,129187,129198,129209],{},[257,129144,129145,129148,129151],{},[303,129146,129147],{"align":23726},"background-color",[303,129149,129150],{"align":23726},"背景颜色",[303,129152,129153],{"align":23726},"预定义的颜色值\u002F十六进制\u002FRGB代码",[257,129155,129156,129159,129162],{},[303,129157,129158],{"align":23726},"background-image",[303,129160,129161],{"align":23726},"背景图片",[303,129163,129164],{"align":23726},"url(图片路径)",[257,129166,129167,129170,129173],{},[303,129168,129169],{"align":23726},"background-repeat",[303,129171,129172],{"align":23726},"是否平铺",[303,129174,129175],{"align":23726},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[257,129177,129178,129181,129184],{},[303,129179,129180],{"align":23726},"background-position",[303,129182,129183],{"align":23726},"背景位置",[303,129185,129186],{"align":23726},"length\u002Fposition 分别是x和y坐标",[257,129188,129189,129192,129195],{},[303,129190,129191],{"align":23726},"background-attachment",[303,129193,129194],{"align":23726},"背景附着",[303,129196,129197],{"align":23726},"scroll(背景滚动) \u002Ffixed (背景固定)",[257,129199,129200,129203,129206],{},[303,129201,129202],{"align":23726},"背景简写",[303,129204,129205],{"align":23726},"书写更简单",[303,129207,129208],{"align":23726},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[257,129210,129211,129214,129217],{},[303,129212,129213],{"align":23726},"背景半透明",[303,129215,129216],{"align":23726},"背景颜色半透明",[303,129218,129219],{"align":23726},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129221,129222],{},"颜色渐变：",[1451,129224],{"style":126390,"src":129225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1451,129227],{"style":126390,"src":129228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[74,129230,129232],{"id":129231},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[94,129234,129236],{"className":127281,"code":129235,"language":127283,"meta":24,"style":24},"\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",[100,129237,129238,129253,129272,129291,129310,129329,129348],{"__ignoreMap":24},[103,129239,129240,129242,129244,129246,129248,129251],{"class":105,"line":106},[103,129241,1023],{"class":113},[103,129243,51601],{"class":51290},[103,129245,53476],{"class":1952},[103,129247,159],{"class":113},[103,129249,129250],{"class":218},"\"nav\"",[103,129252,51297],{"class":113},[103,129254,129255,129257,129259,129261,129263,129265,129268,129270],{"class":105,"line":25},[103,129256,52134],{"class":113},[103,129258,17],{"class":51290},[103,129260,61047],{"class":1952},[103,129262,159],{"class":113},[103,129264,61052],{"class":218},[103,129266,129267],{"class":113},">五彩导航1\u003C\u002F",[103,129269,17],{"class":51290},[103,129271,51297],{"class":113},[103,129273,129274,129276,129278,129280,129282,129284,129287,129289],{"class":105,"line":1168},[103,129275,52134],{"class":113},[103,129277,17],{"class":51290},[103,129279,61047],{"class":1952},[103,129281,159],{"class":113},[103,129283,61052],{"class":218},[103,129285,129286],{"class":113},">五彩导航2\u003C\u002F",[103,129288,17],{"class":51290},[103,129290,51297],{"class":113},[103,129292,129293,129295,129297,129299,129301,129303,129306,129308],{"class":105,"line":1183},[103,129294,52134],{"class":113},[103,129296,17],{"class":51290},[103,129298,61047],{"class":1952},[103,129300,159],{"class":113},[103,129302,61052],{"class":218},[103,129304,129305],{"class":113},">五彩导航3\u003C\u002F",[103,129307,17],{"class":51290},[103,129309,51297],{"class":113},[103,129311,129312,129314,129316,129318,129320,129322,129325,129327],{"class":105,"line":1189},[103,129313,52134],{"class":113},[103,129315,17],{"class":51290},[103,129317,61047],{"class":1952},[103,129319,159],{"class":113},[103,129321,61052],{"class":218},[103,129323,129324],{"class":113},">五彩导航4\u003C\u002F",[103,129326,17],{"class":51290},[103,129328,51297],{"class":113},[103,129330,129331,129333,129335,129337,129339,129341,129344,129346],{"class":105,"line":1203},[103,129332,52134],{"class":113},[103,129334,17],{"class":51290},[103,129336,61047],{"class":1952},[103,129338,159],{"class":113},[103,129340,61052],{"class":218},[103,129342,129343],{"class":113},">五彩导航5\u003C\u002F",[103,129345,17],{"class":51290},[103,129347,51297],{"class":113},[103,129349,129350,129352,129354],{"class":105,"line":1209},[103,129351,51775],{"class":113},[103,129353,51601],{"class":51290},[103,129355,51297],{"class":113},[94,129357,129359],{"className":126534,"code":129358,"language":126536,"meta":24,"style":24},".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",[100,129360,129361,129370,129380,129392,129404,129414,129426,129436,129440,129465,129488,129511,129534],{"__ignoreMap":24},[103,129362,129363,129366,129368],{"class":105,"line":106},[103,129364,129365],{"class":1952},".nav",[103,129367,1387],{"class":51290},[103,129369,15562],{"class":113},[103,129371,129372,129374,129376,129378],{"class":105,"line":25},[103,129373,128150],{"class":162},[103,129375,51427],{"class":113},[103,129377,72373],{"class":162},[103,129379,1279],{"class":113},[103,129381,129382,129384,129386,129388,129390],{"class":105,"line":1168},[103,129383,70558],{"class":162},[103,129385,51427],{"class":113},[103,129387,930],{"class":162},[103,129389,51482],{"class":109},[103,129391,1279],{"class":113},[103,129393,129394,129396,129398,129400,129402],{"class":105,"line":1183},[103,129395,70778],{"class":162},[103,129397,51427],{"class":113},[103,129399,969],{"class":162},[103,129401,51482],{"class":109},[103,129403,1279],{"class":113},[103,129405,129406,129408,129410,129412],{"class":105,"line":1189},[103,129407,70516],{"class":162},[103,129409,51427],{"class":113},[103,129411,51582],{"class":162},[103,129413,1279],{"class":113},[103,129415,129416,129418,129420,129422,129424],{"class":105,"line":1203},[103,129417,127218],{"class":162},[103,129419,51427],{"class":113},[103,129421,969],{"class":162},[103,129423,51482],{"class":109},[103,129425,1279],{"class":113},[103,129427,129428,129430,129432,129434],{"class":105,"line":1209},[103,129429,70895],{"class":162},[103,129431,51427],{"class":113},[103,129433,60832],{"class":162},[103,129435,1279],{"class":113},[103,129437,129438],{"class":105,"line":1300},[103,129439,1554],{"class":113},[103,129441,129442,129444,129446,129449,129451,129453,129456,129458,129460,129462],{"class":105,"line":1306},[103,129443,129365],{"class":1952},[103,129445,1387],{"class":51290},[103,129447,129448],{"class":1952},":nth-child",[103,129450,114],{"class":113},[103,129452,331],{"class":162},[103,129454,129455],{"class":113},") { ",[103,129457,129147],{"class":162},[103,129459,51427],{"class":113},[103,129461,128565],{"class":162},[103,129463,129464],{"class":113},"; }\n",[103,129466,129467,129469,129471,129473,129475,129477,129479,129481,129483,129486],{"class":105,"line":1318},[103,129468,129365],{"class":1952},[103,129470,1387],{"class":51290},[103,129472,129448],{"class":1952},[103,129474,114],{"class":113},[103,129476,191],{"class":162},[103,129478,129455],{"class":113},[103,129480,129147],{"class":162},[103,129482,51427],{"class":113},[103,129484,129485],{"class":162},"#ff0000",[103,129487,129464],{"class":113},[103,129489,129490,129492,129494,129496,129498,129500,129502,129504,129506,129509],{"class":105,"line":1601},[103,129491,129365],{"class":1952},[103,129493,1387],{"class":51290},[103,129495,129448],{"class":1952},[103,129497,114],{"class":113},[103,129499,185],{"class":162},[103,129501,129455],{"class":113},[103,129503,129147],{"class":162},[103,129505,51427],{"class":113},[103,129507,129508],{"class":162},"#00a4ff",[103,129510,129464],{"class":113},[103,129512,129513,129515,129517,129519,129521,129523,129525,129527,129529,129532],{"class":105,"line":1606},[103,129514,129365],{"class":1952},[103,129516,1387],{"class":51290},[103,129518,129448],{"class":1952},[103,129520,114],{"class":113},[103,129522,406],{"class":162},[103,129524,129455],{"class":113},[103,129526,129147],{"class":162},[103,129528,51427],{"class":113},[103,129530,129531],{"class":162},"#ff00ff",[103,129533,129464],{"class":113},[103,129535,129536,129538,129540,129542,129544,129546,129548,129550,129552,129555],{"class":105,"line":1612},[103,129537,129365],{"class":1952},[103,129539,1387],{"class":51290},[103,129541,129448],{"class":1952},[103,129543,114],{"class":113},[103,129545,432],{"class":162},[103,129547,129455],{"class":113},[103,129549,129147],{"class":162},[103,129551,51427],{"class":113},[103,129553,129554],{"class":162},"#00ff00",[103,129556,129464],{"class":113},[45,129558,129560],{"id":129559},"_83-css三大特性","8.3 css三大特性",[74,129562,129564],{"id":129563},"_831-层叠性","8.3.1 层叠性",[14,129566,129567],{},"为了解决样式冲突问题",[14,129569,129570],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129572,129573],{},"   ②样式不冲突，不会层叠",[74,129575,129577],{"id":129576},"_832-继承性","8.3.2 继承性",[14,129579,129580],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129582,129583],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[94,129585,129587],{"className":126534,"code":129586,"language":126536,"meta":24,"style":24},"p {\n  color: #333;\n}\n",[100,129588,129589,129595,129605],{"__ignoreMap":24},[103,129590,129591,129593],{"class":105,"line":106},[103,129592,14],{"class":51290},[103,129594,15562],{"class":113},[103,129596,129597,129599,129601,129603],{"class":105,"line":25},[103,129598,70895],{"class":162},[103,129600,51427],{"class":113},[103,129602,62359],{"class":162},[103,129604,1279],{"class":113},[103,129606,129607],{"class":105,"line":1168},[103,129608,1554],{"class":113},[1451,129610],{"style":126390,"src":129611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129613,129614],{},"解释：①行高可以跟单位也可以不跟单位",[14,129616,129617],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129619,129620],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129622,129623],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[74,129625,129627],{"id":129626},"_833-优先级","8.3.3 优先级",[57,129629,129630,129633],{},[60,129631,129632],{},"选择器相同，则执行层叠性",[60,129634,129635],{},"选择器不同，则根据选择器权重执行",[251,129637,129638,129648],{},[254,129639,129640],{},[257,129641,129642,129645],{},[260,129643,129644],{"align":23726},"选择器",[260,129646,129647],{"align":23726},"选择器权重",[298,129649,129650,129658,129666,129674,129682,129690],{},[257,129651,129652,129655],{},[303,129653,129654],{"align":23726},"继承 或者*",[303,129656,129657],{"align":23726},"0，0，0，0",[257,129659,129660,129663],{},[303,129661,129662],{"align":23726},"标签选择器",[303,129664,129665],{"align":23726},"0，0，0，1",[257,129667,129668,129671],{},[303,129669,129670],{"align":23726},"类选择器，伪类选择器",[303,129672,129673],{"align":23726},"0，0，1，0",[257,129675,129676,129679],{},[303,129677,129678],{"align":23726},"ID选择器",[303,129680,129681],{"align":23726},"0，1，0，0",[257,129683,129684,129687],{},[303,129685,129686],{"align":23726},"行内样式",[303,129688,129689],{"align":23726},"1，0，0，0",[257,129691,129692,129695],{},[303,129693,129694],{"align":23726},"！important",[303,129696,129697],{"align":23726},"无穷大",[14,129699,129700],{},"! important用法：",[94,129702,129704],{"className":126534,"code":129703,"language":126536,"meta":24,"style":24},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[100,129705,129706,129711,129717,129730,129734,129739,129745,129755],{"__ignoreMap":24},[103,129707,129708],{"class":105,"line":106},[103,129709,129710],{"class":172},"\u002F* !important 拥有最高优先级 *\u002F\n",[103,129712,129713,129715],{"class":105,"line":25},[103,129714,51601],{"class":51290},[103,129716,15562],{"class":113},[103,129718,129719,129721,129723,129725,129728],{"class":105,"line":1168},[103,129720,70895],{"class":162},[103,129722,51427],{"class":113},[103,129724,51635],{"class":162},[103,129726,129727],{"class":109}," !important",[103,129729,1279],{"class":113},[103,129731,129732],{"class":105,"line":1183},[103,129733,1554],{"class":113},[103,129735,129736],{"class":105,"line":1189},[103,129737,129738],{"class":172},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[103,129740,129741,129743],{"class":105,"line":1203},[103,129742,51601],{"class":51290},[103,129744,15562],{"class":113},[103,129746,129747,129749,129751,129753],{"class":105,"line":1209},[103,129748,70895],{"class":162},[103,129750,51427],{"class":113},[103,129752,57411],{"class":162},[103,129754,1279],{"class":113},[103,129756,129757],{"class":105,"line":1300},[103,129758,1554],{"class":113},[14,129760,129761],{},"优先级注意点：",[14,129763,129764],{},"①权重是有4组数字组成,但是不会有进位",[14,129766,129767],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129769,129770],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129772,129773],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129775,129776],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129778,129779],{},"⑥复合选择器",[251,129781,129782,129792],{},[254,129783,129784],{},[257,129785,129786,129789],{},[260,129787,129788],{"align":23726},"div ul li",[260,129790,129791],{"align":23726},"0,0,0,3",[298,129793,129794,129802,129810],{},[257,129795,129796,129799],{},[303,129797,129798],{"align":23726},".nav ul li",[303,129800,129801],{"align":23726},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[257,129803,129804,129807],{},[303,129805,129806],{"align":23726},"a:hover",[303,129808,129809],{"align":23726},"0,0,1,1",[257,129811,129812,129815],{},[303,129813,129814],{"align":23726},".nav a",[303,129816,129809],{"align":23726},[5116,129818,129819],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":24,"searchDepth":25,"depth":25,"links":129821},[129822,129830,129841],{"id":127930,"depth":25,"text":127931,"children":129823},[129824,129825,129826,129827,129828,129829],{"id":127943,"depth":1168,"text":127944},{"id":128015,"depth":1168,"text":128016},{"id":128087,"depth":1168,"text":128088},{"id":128118,"depth":1168,"text":128119},{"id":128125,"depth":1168,"text":128126},{"id":128278,"depth":1168,"text":128279},{"id":128586,"depth":25,"text":128587,"children":129831},[129832,129833,129834,129835,129836,129837,129838,129839,129840],{"id":128593,"depth":1168,"text":128594},{"id":128603,"depth":1168,"text":128604},{"id":128699,"depth":1168,"text":128700},{"id":128772,"depth":1168,"text":128773},{"id":128927,"depth":1168,"text":128928},{"id":129015,"depth":1168,"text":129016},{"id":129067,"depth":1168,"text":129068},{"id":129126,"depth":1168,"text":129127},{"id":129231,"depth":1168,"text":129232},{"id":129559,"depth":25,"text":129560,"children":129842},[129843,129844,129845],{"id":129563,"depth":1168,"text":129564},{"id":129576,"depth":1168,"text":129577},{"id":129626,"depth":1168,"text":129627},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127922,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129852,"title":129853,"body":129854,"description":27,"extension":28,"meta":131444,"navigation":30,"path":131445,"seo":131446,"stem":131447,"__hash__":131448},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129855,"toc":131423},[129856,129859,129863,129866,129869,129872,129875,129878,129881,129884,129888,129896,129933,129969,129972,129986,129991,130025,130028,130121,130126,130129,130159,130162,130167,130175,130179,130186,130232,130276,130281,130284,130287,130290,130293,130296,130299,130301,130304,130308,130313,130357,130362,130365,130368,130405,130410,130413,130416,130419,130422,130454,130457,130460,130463,130495,130498,130501,130504,130508,130511,130543,130546,130550,130570,130573,130581,130584,130588,130593,130596,130628,130633,130636,130674,130678,130683,130686,130689,130720,130723,130740,130745,130797,130857,130862,130916,130954,130958,130962,130965,130969,130977,130980,130982,130993,130998,131046,131080,131083,131086,131089,131092,131136,131139,131142,131145,131148,131151,131154,131198,131201,131204,131207,131210,131213,131216,131222,131225,131269,131272,131275,131278,131281,131284,131328,131331,131333,131336,131340,131344,131382,131386,131389,131392,131396,131404,131408,131411,131414,131417,131420],[10,129857,129853],{"id":129858},"_9-css盒模型浮动与切图",[45,129860,129862],{"id":129861},"_91-盒子模型","9.1 盒子模型",[14,129864,129865],{},"利用盒子来设计网页",[14,129867,129868],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129870,129871],{},"网页布局设置：",[14,129873,129874],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129876,129877],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129879,129880],{},"③往盒子里装内容",[1451,129882],{"style":126390,"src":129883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[74,129885,129887],{"id":129886},"_911-边框border","9.1.1 边框（border）",[57,129889,129890,129893],{},[60,129891,129892],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[60,129894,129895],{},"语法",[94,129897,129899],{"className":126534,"code":129898,"language":126536,"meta":24,"style":24},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[100,129900,129901,129906,129912,129929],{"__ignoreMap":24},[103,129902,129903],{"class":105,"line":106},[103,129904,129905],{"class":172},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[103,129907,129908,129910],{"class":105,"line":25},[103,129909,51601],{"class":51290},[103,129911,15562],{"class":113},[103,129913,129914,129916,129918,129920,129922,129924,129927],{"class":105,"line":1168},[103,129915,70886],{"class":162},[103,129917,51427],{"class":113},[103,129919,331],{"class":162},[103,129921,51482],{"class":109},[103,129923,51511],{"class":162},[103,129925,129926],{"class":162}," #ccc",[103,129928,1279],{"class":113},[103,129930,129931],{"class":105,"line":1183},[103,129932,1554],{"class":113},[251,129934,129935,129943],{},[254,129936,129937],{},[257,129938,129939,129941],{},[260,129940,129136],{"align":23726},[260,129942,102686],{"align":23726},[298,129944,129945,129953,129961],{},[257,129946,129947,129950],{},[303,129948,129949],{"align":23726},"border-width",[303,129951,129952],{"align":23726},"定义边框粗细，单位是px",[257,129954,129955,129958],{},[303,129956,129957],{"align":23726},"border-style",[303,129959,129960],{"align":23726},"边框的样式",[257,129962,129963,129966],{},[303,129964,129965],{"align":23726},"border-color",[303,129967,129968],{"align":23726},"边框的颜色",[14,129970,129971],{},"边框样式 border-style 可以设置如下值：",[1120,129973,129974,129977,129980,129983],{},[60,129975,129976],{},"none：没有边框即忽略所有边框的宽度（默认值）",[60,129978,129979],{},"solid：边框为单实线(最为常用的)",[60,129981,129982],{},"dashed：边框为虚线",[60,129984,129985],{},"dotted：边框为点线",[57,129987,129988],{"start":1168},[60,129989,129990],{},"边框的合写分写",[94,129992,129993],{"className":126534,"code":129898,"language":126536,"meta":24,"style":24},[100,129994,129995,129999,130005,130021],{"__ignoreMap":24},[103,129996,129997],{"class":105,"line":106},[103,129998,129905],{"class":172},[103,130000,130001,130003],{"class":105,"line":25},[103,130002,51601],{"class":51290},[103,130004,15562],{"class":113},[103,130006,130007,130009,130011,130013,130015,130017,130019],{"class":105,"line":1168},[103,130008,70886],{"class":162},[103,130010,51427],{"class":113},[103,130012,331],{"class":162},[103,130014,51482],{"class":109},[103,130016,51511],{"class":162},[103,130018,129926],{"class":162},[103,130020,1279],{"class":113},[103,130022,130023],{"class":105,"line":1183},[103,130024,1554],{"class":113},[14,130026,130027],{},"边框分开写法：",[94,130029,130031],{"className":126534,"code":130030,"language":126536,"meta":24,"style":24},"\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",[100,130032,130033,130038,130044,130062,130080,130099,130117],{"__ignoreMap":24},[103,130034,130035],{"class":105,"line":106},[103,130036,130037],{"class":172},"\u002F* 边框分开写法 *\u002F\n",[103,130039,130040,130042],{"class":105,"line":25},[103,130041,51601],{"class":51290},[103,130043,15562],{"class":113},[103,130045,130046,130049,130051,130053,130055,130057,130060],{"class":105,"line":1168},[103,130047,130048],{"class":162},"  border-top",[103,130050,51427],{"class":113},[103,130052,331],{"class":162},[103,130054,51482],{"class":109},[103,130056,51511],{"class":162},[103,130058,130059],{"class":162}," #000",[103,130061,1279],{"class":113},[103,130063,130064,130067,130069,130071,130073,130075,130078],{"class":105,"line":1183},[103,130065,130066],{"class":162},"  border-right",[103,130068,51427],{"class":113},[103,130070,191],{"class":162},[103,130072,51482],{"class":109},[103,130074,62231],{"class":162},[103,130076,130077],{"class":162}," #333",[103,130079,1279],{"class":113},[103,130081,130082,130085,130087,130089,130091,130094,130097],{"class":105,"line":1189},[103,130083,130084],{"class":162},"  border-bottom",[103,130086,51427],{"class":113},[103,130088,185],{"class":162},[103,130090,51482],{"class":109},[103,130092,130093],{"class":162}," dotted",[103,130095,130096],{"class":162}," #666",[103,130098,1279],{"class":113},[103,130100,130101,130104,130106,130108,130110,130112,130115],{"class":105,"line":1203},[103,130102,130103],{"class":162},"  border-left",[103,130105,51427],{"class":113},[103,130107,331],{"class":162},[103,130109,51482],{"class":109},[103,130111,51511],{"class":162},[103,130113,130114],{"class":162}," #999",[103,130116,1279],{"class":113},[103,130118,130119],{"class":105,"line":1209},[103,130120,1554],{"class":113},[57,130122,130123],{"start":1183},[60,130124,130125],{},"表格的细线边框",[14,130127,130128],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[94,130130,130132],{"className":126534,"code":130131,"language":126536,"meta":24,"style":24},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[100,130133,130134,130139,130145,130155],{"__ignoreMap":24},[103,130135,130136],{"class":105,"line":106},[103,130137,130138],{"class":172},"\u002F* 表格细线边框合并 *\u002F\n",[103,130140,130141,130143],{"class":105,"line":25},[103,130142,251],{"class":51290},[103,130144,15562],{"class":113},[103,130146,130147,130149,130151,130153],{"class":105,"line":1168},[103,130148,70568],{"class":162},[103,130150,51427],{"class":113},[103,130152,65025],{"class":162},[103,130154,1279],{"class":113},[103,130156,130157],{"class":105,"line":1183},[103,130158,1554],{"class":113},[14,130160,130161],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[57,130163,130164],{"start":1189},[60,130165,130166],{},"解决边框额外增加盒子的实际大小的方法：",[1120,130168,130169,130172],{},[60,130170,130171],{},"测量盒子大小的时候,不量边框",[60,130173,130174],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[74,130176,130178],{"id":130177},"_912-内边距","9.1.2 内边距",[57,130180,130181,130184],{},[60,130182,130183],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[60,130185,129895],{},[251,130187,130188,130198],{},[254,130189,130190],{},[257,130191,130192,130195],{},[260,130193,130194],{"align":23726},"值的个数",[260,130196,130197],{"align":23726},"表达意思",[298,130199,130200,130208,130216,130224],{},[257,130201,130202,130205],{},[303,130203,130204],{"align":23726},"padding: 5px;",[303,130206,130207],{"align":23726},"1个值，代表上下左右都有5个元素",[257,130209,130210,130213],{},[303,130211,130212],{"align":23726},"padding: 5px 10px;",[303,130214,130215],{"align":23726},"2个值，代表上下内边距为5像素，左右内边距为10像素",[257,130217,130218,130221],{},[303,130219,130220],{"align":23726},"padding: 5px 10px 20px;",[303,130222,130223],{"align":23726},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[257,130225,130226,130229],{},[303,130227,130228],{"align":23726},"padding: 5px 10px 20px 30px;",[303,130230,130231],{"align":23726},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[251,130233,130234,130242],{},[254,130235,130236],{},[257,130237,130238,130240],{},[260,130239,129136],{"align":23726},[260,130241,102686],{"align":23726},[298,130243,130244,130252,130260,130268],{},[257,130245,130246,130249],{},[303,130247,130248],{"align":23726},"padding-left",[303,130250,130251],{"align":23726},"左内边距",[257,130253,130254,130257],{},[303,130255,130256],{"align":23726},"padding-right",[303,130258,130259],{"align":23726},"右内边距",[257,130261,130262,130265],{},[303,130263,130264],{"align":23726},"padding-top",[303,130266,130267],{"align":23726},"上内边距",[257,130269,130270,130273],{},[303,130271,130272],{"align":23726},"padding-bottom",[303,130274,130275],{"align":23726},"下内边距",[57,130277,130278],{"start":1168},[60,130279,130280],{},"内边距会影响盒子的实际大小",[14,130282,130283],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130285,130286],{},"①内容和边框有了距离，添加了内边距",[14,130288,130289],{},"②padding影响了盒子实际大小",[14,130291,130292],{},"内边距对盒子大小的影响：",[14,130294,130295],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130297,130298],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130300,95210],{},[14,130302,130303],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[74,130305,130307],{"id":130306},"_913-外边距","9.1.3 外边距",[57,130309,130310],{},[60,130311,130312],{},"控制盒子与盒子之间的距离",[251,130314,130315,130323],{},[254,130316,130317],{},[257,130318,130319,130321],{},[260,130320,129136],{"align":23726},[260,130322,102686],{"align":23726},[298,130324,130325,130333,130341,130349],{},[257,130326,130327,130330],{},[303,130328,130329],{"align":23726},"margin-left",[303,130331,130332],{"align":23726},"左外边距",[257,130334,130335,130338],{},[303,130336,130337],{"align":23726},"margin-right",[303,130339,130340],{"align":23726},"右外边距",[257,130342,130343,130346],{},[303,130344,130345],{"align":23726},"margin-top",[303,130347,130348],{"align":23726},"上外边距",[257,130350,130351,130354],{},[303,130352,130353],{"align":23726},"margin-bottom",[303,130355,130356],{"align":23726},"下外边距",[57,130358,130359],{"start":25},[60,130360,130361],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130363,130364],{},"①盒子必须指定了宽度（width）",[14,130366,130367],{},"②盒子左右的外边距都设置为 auto",[94,130369,130371],{"className":126534,"code":130370,"language":126536,"meta":24,"style":24},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[100,130372,130373,130378,130385,130401],{"__ignoreMap":24},[103,130374,130375],{"class":105,"line":106},[103,130376,130377],{"class":172},"\u002F* margin 复合写法（同上） *\u002F\n",[103,130379,130380,130383],{"class":105,"line":25},[103,130381,130382],{"class":1952},".box",[103,130384,15562],{"class":113},[103,130386,130387,130389,130391,130393,130395,130398],{"class":105,"line":1168},[103,130388,70460],{"class":162},[103,130390,51427],{"class":113},[103,130392,305],{"class":162},[103,130394,51546],{"class":162},[103,130396,130397],{"class":113},";  ",[103,130399,130400],{"class":172},"\u002F* 块级盒子水平居中 *\u002F\n",[103,130402,130403],{"class":105,"line":1183},[103,130404,1554],{"class":113},[57,130406,130407],{"start":1168},[60,130408,130409],{},"外边距塌陷问题",[14,130411,130412],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1451,130414],{"style":126390,"src":130415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130417,130418],{},"解决方案：",[14,130420,130421],{},"①可以为父亲元素定义上边距",[94,130423,130424],{"className":126534,"code":130370,"language":126536,"meta":24,"style":24},[100,130425,130426,130430,130436,130450],{"__ignoreMap":24},[103,130427,130428],{"class":105,"line":106},[103,130429,130377],{"class":172},[103,130431,130432,130434],{"class":105,"line":25},[103,130433,130382],{"class":1952},[103,130435,15562],{"class":113},[103,130437,130438,130440,130442,130444,130446,130448],{"class":105,"line":1168},[103,130439,70460],{"class":162},[103,130441,51427],{"class":113},[103,130443,305],{"class":162},[103,130445,51546],{"class":162},[103,130447,130397],{"class":113},[103,130449,130400],{"class":172},[103,130451,130452],{"class":105,"line":1183},[103,130453,1554],{"class":113},[14,130455,130456],{},"②可以为父亲元素定义上内边距",[14,130458,130459],{},"③可以为父亲元素添加overflow:hidden",[1451,130461],{"style":126390,"src":130462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[94,130464,130465],{"className":126534,"code":130370,"language":126536,"meta":24,"style":24},[100,130466,130467,130471,130477,130491],{"__ignoreMap":24},[103,130468,130469],{"class":105,"line":106},[103,130470,130377],{"class":172},[103,130472,130473,130475],{"class":105,"line":25},[103,130474,130382],{"class":1952},[103,130476,15562],{"class":113},[103,130478,130479,130481,130483,130485,130487,130489],{"class":105,"line":1168},[103,130480,70460],{"class":162},[103,130482,51427],{"class":113},[103,130484,305],{"class":162},[103,130486,51546],{"class":162},[103,130488,130397],{"class":113},[103,130490,130400],{"class":172},[103,130492,130493],{"class":105,"line":1183},[103,130494,1554],{"class":113},[1451,130496],{"style":126390,"src":130497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130499,130500],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130502,130503],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[74,130505,130507],{"id":130506},"_914-清除内外边距","9.1.4 清除内外边距",[14,130509,130510],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[94,130512,130513],{"className":126534,"code":130370,"language":126536,"meta":24,"style":24},[100,130514,130515,130519,130525,130539],{"__ignoreMap":24},[103,130516,130517],{"class":105,"line":106},[103,130518,130377],{"class":172},[103,130520,130521,130523],{"class":105,"line":25},[103,130522,130382],{"class":1952},[103,130524,15562],{"class":113},[103,130526,130527,130529,130531,130533,130535,130537],{"class":105,"line":1168},[103,130528,70460],{"class":162},[103,130530,51427],{"class":113},[103,130532,305],{"class":162},[103,130534,51546],{"class":162},[103,130536,130397],{"class":113},[103,130538,130400],{"class":172},[103,130540,130541],{"class":105,"line":1183},[103,130542,1554],{"class":113},[14,130544,130545],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[74,130547,130549],{"id":130548},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1120,130551,130552,130555,130558,130561,130564,130567],{},[60,130553,130554],{},"文件→打开 ：可以打开我们要测量的图片",[60,130556,130557],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[60,130559,130560],{},"右击标尺，把里面的单位改为像素",[60,130562,130563],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[60,130565,130566],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[60,130568,130569],{},"用选区拖动 可以测量大小",[1451,130571],{"style":126390,"src":130572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1120,130574,130575,130578],{},[60,130576,130577],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[60,130579,130580],{},"吸管取色工具",[1451,130582],{"style":126390,"src":130583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[74,130585,130587],{"id":130586},"_916-案例","9.1.6 案例",[57,130589,130590],{},[60,130591,130592],{},"小米商品",[1451,130594],{"style":126390,"src":130595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[94,130597,130598],{"className":126534,"code":130370,"language":126536,"meta":24,"style":24},[100,130599,130600,130604,130610,130624],{"__ignoreMap":24},[103,130601,130602],{"class":105,"line":106},[103,130603,130377],{"class":172},[103,130605,130606,130608],{"class":105,"line":25},[103,130607,130382],{"class":1952},[103,130609,15562],{"class":113},[103,130611,130612,130614,130616,130618,130620,130622],{"class":105,"line":1168},[103,130613,70460],{"class":162},[103,130615,51427],{"class":113},[103,130617,305],{"class":162},[103,130619,51546],{"class":162},[103,130621,130397],{"class":113},[103,130623,130400],{"class":172},[103,130625,130626],{"class":105,"line":1183},[103,130627,1554],{"class":113},[57,130629,130630],{"start":25},[60,130631,130632],{},"快报模块",[1451,130634],{"style":126390,"src":130635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[94,130637,130639],{"className":127281,"code":130638,"language":127283,"meta":24,"style":24},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[100,130640,130641,130646,130661,130666],{"__ignoreMap":24},[103,130642,130643],{"class":105,"line":106},[103,130644,130645],{"class":172},"\u003C!-- HTML 代码示例 -->\n",[103,130647,130648,130650,130652,130654,130656,130659],{"class":105,"line":25},[103,130649,1023],{"class":113},[103,130651,51601],{"class":51290},[103,130653,53476],{"class":1952},[103,130655,159],{"class":113},[103,130657,130658],{"class":218},"\"example\"",[103,130660,51297],{"class":113},[103,130662,130663],{"class":105,"line":1168},[103,130664,130665],{"class":113},"  示例内容\n",[103,130667,130668,130670,130672],{"class":105,"line":1183},[103,130669,51775],{"class":113},[103,130671,51601],{"class":51290},[103,130673,51297],{"class":113},[74,130675,130677],{"id":130676},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[57,130679,130680],{},[60,130681,130682],{},"圆角边框",[14,130684,130685],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1451,130687],{"style":126390,"src":130688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[94,130690,130692],{"className":126534,"code":130691,"language":126536,"meta":24,"style":24},"div {\n  border: 1px solid #ccc;\n}\n",[100,130693,130694,130700,130716],{"__ignoreMap":24},[103,130695,130696,130698],{"class":105,"line":106},[103,130697,51601],{"class":51290},[103,130699,15562],{"class":113},[103,130701,130702,130704,130706,130708,130710,130712,130714],{"class":105,"line":25},[103,130703,70886],{"class":162},[103,130705,51427],{"class":113},[103,130707,331],{"class":162},[103,130709,51482],{"class":109},[103,130711,51511],{"class":162},[103,130713,129926],{"class":162},[103,130715,1279],{"class":113},[103,130717,130718],{"class":105,"line":1168},[103,130719,1554],{"class":113},[14,130721,130722],{},"解释:",[1120,130724,130725,130728,130731,130734,130737],{},[60,130726,130727],{},"参数值可以为数值或百分比的形式",[60,130729,130730],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[60,130732,130733],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[60,130735,130736],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[60,130738,130739],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[57,130741,130742],{"start":25},[60,130743,130744],{},"盒子阴影",[94,130746,130748],{"className":126534,"code":130747,"language":126536,"meta":24,"style":24},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[100,130749,130750,130756,130793],{"__ignoreMap":24},[103,130751,130752,130754],{"class":105,"line":106},[103,130753,51601],{"class":51290},[103,130755,15562],{"class":113},[103,130757,130758,130761,130763,130765,130767,130769,130771,130773,130775,130777,130779,130781,130783,130785,130787,130789,130791],{"class":105,"line":25},[103,130759,130760],{"class":162},"  box-shadow",[103,130762,51427],{"class":113},[103,130764,305],{"class":162},[103,130766,14745],{"class":162},[103,130768,51482],{"class":109},[103,130770,2027],{"class":162},[103,130772,51482],{"class":109},[103,130774,78757],{"class":162},[103,130776,114],{"class":113},[103,130778,305],{"class":162},[103,130780,12425],{"class":113},[103,130782,305],{"class":162},[103,130784,12425],{"class":113},[103,130786,305],{"class":162},[103,130788,12425],{"class":113},[103,130790,86200],{"class":162},[103,130792,2708],{"class":113},[103,130794,130795],{"class":105,"line":1168},[103,130796,1554],{"class":113},[251,130798,130799,130807],{},[254,130800,130801],{},[257,130802,130803,130805],{},[260,130804,266],{"align":23726},[260,130806,27479],{"align":23726},[298,130808,130809,130817,130825,130833,130841,130849],{},[257,130810,130811,130814],{},[303,130812,130813],{"align":23726},"h-shadow",[303,130815,130816],{"align":23726},"必需,水平阴影的位置,允许负值",[257,130818,130819,130822],{},[303,130820,130821],{"align":23726},"v-shadow",[303,130823,130824],{"align":23726},"必需,垂直阴影的位置,允许负值",[257,130826,130827,130830],{},[303,130828,130829],{"align":23726},"blur",[303,130831,130832],{"align":23726},"可选,模糊距离,就是影子的虚实",[257,130834,130835,130838],{},[303,130836,130837],{"align":23726},"spread",[303,130839,130840],{"align":23726},"可选,阴影尺寸",[257,130842,130843,130846],{},[303,130844,130845],{"align":23726},"color",[303,130847,130848],{"align":23726},"可选,阴影的颜色",[257,130850,130851,130854],{},[303,130852,130853],{"align":23726},"inset",[303,130855,130856],{"align":23726},"可选,将外部阴影(outset)改为内部阴影",[57,130858,130859],{"start":1168},[60,130860,130861],{},"文字阴影",[94,130863,130865],{"className":126534,"code":130864,"language":126536,"meta":24,"style":24},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[100,130866,130867,130873,130912],{"__ignoreMap":24},[103,130868,130869,130871],{"class":105,"line":106},[103,130870,14],{"class":51290},[103,130872,15562],{"class":113},[103,130874,130875,130878,130880,130882,130884,130886,130888,130890,130892,130894,130896,130898,130900,130902,130904,130906,130908,130910],{"class":105,"line":25},[103,130876,130877],{"class":162},"  text-shadow",[103,130879,51427],{"class":113},[103,130881,331],{"class":162},[103,130883,51482],{"class":109},[103,130885,25108],{"class":162},[103,130887,51482],{"class":109},[103,130889,14745],{"class":162},[103,130891,51482],{"class":109},[103,130893,78757],{"class":162},[103,130895,114],{"class":113},[103,130897,305],{"class":162},[103,130899,12425],{"class":113},[103,130901,305],{"class":162},[103,130903,12425],{"class":113},[103,130905,305],{"class":162},[103,130907,12425],{"class":113},[103,130909,100511],{"class":162},[103,130911,2708],{"class":113},[103,130913,130914],{"class":105,"line":1168},[103,130915,1554],{"class":113},[251,130917,130918,130926],{},[254,130919,130920],{},[257,130921,130922,130924],{},[260,130923,266],{"align":23726},[260,130925,27479],{"align":23726},[298,130927,130928,130934,130941,130948],{},[257,130929,130930,130932],{},[303,130931,130813],{"align":23726},[303,130933,130816],{"align":23726},[257,130935,130936,130938],{},[303,130937,130821],{"align":23726},[303,130939,130940],{"align":23726},"必需,垂直阴影位置,允许负值",[257,130942,130943,130945],{},[303,130944,130829],{"align":23726},[303,130946,130947],{"align":23726},"可选,模糊的距离",[257,130949,130950,130952],{},[303,130951,130845],{"align":23726},[303,130953,130848],{"align":23726},[45,130955,130957],{"id":130956},"_92-浮动","9.2 浮动",[74,130959,130961],{"id":130960},"_921-浮动介绍","9.2.1 浮动介绍",[14,130963,130964],{},"在16.2中详细介绍",[74,130966,130968],{"id":130967},"_922-清除浮动","9.2.2 清除浮动",[57,130970,130971,130974],{},[60,130972,130973],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[60,130975,130976],{},"清除浮动的本质",[14,130978,130979],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,130981,9015],{},[1120,130983,130984,130987,130990],{},[60,130985,130986],{},"如果父盒子本身有高度，则不需要清除浮动",[60,130988,130989],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[60,130991,130992],{},"父级有了高度，就不会影响下面的标准流了",[57,130994,130995],{"start":1168},[60,130996,130997],{},"清除浮动样式",[94,130999,131001],{"className":126534,"code":131000,"language":126536,"meta":24,"style":24},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[100,131002,131003,131010,131021,131025,131032,131042],{"__ignoreMap":24},[103,131004,131005,131008],{"class":105,"line":106},[103,131006,131007],{"class":1952},".left",[103,131009,15562],{"class":113},[103,131011,131012,131015,131017,131019],{"class":105,"line":25},[103,131013,131014],{"class":162},"  float",[103,131016,51427],{"class":113},[103,131018,23726],{"class":162},[103,131020,1279],{"class":113},[103,131022,131023],{"class":105,"line":1168},[103,131024,1554],{"class":113},[103,131026,131027,131030],{"class":105,"line":1183},[103,131028,131029],{"class":1952},".right",[103,131031,15562],{"class":113},[103,131033,131034,131036,131038,131040],{"class":105,"line":1189},[103,131035,131014],{"class":162},[103,131037,51427],{"class":113},[103,131039,72512],{"class":162},[103,131041,1279],{"class":113},[103,131043,131044],{"class":105,"line":1203},[103,131045,1554],{"class":113},[251,131047,131048,131056],{},[254,131049,131050],{},[257,131051,131052,131054],{},[260,131053,126998],{"align":23726},[260,131055,27479],{"align":23726},[298,131057,131058,131065,131072],{},[257,131059,131060,131062],{},[303,131061,23726],{"align":23726},[303,131063,131064],{"align":23726},"不允许左侧有浮动元素（清除左侧浮动的影响）",[257,131066,131067,131069],{},[303,131068,72512],{"align":23726},[303,131070,131071],{"align":23726},"不允许右侧有浮动元素（清除右侧浮动的影响）",[257,131073,131074,131077],{},[303,131075,131076],{"align":23726},"both",[303,131078,131079],{"align":23726},"同时清除左右侧浮动的影响",[14,131081,131082],{},"法一",[14,131084,131085],{},"额外标签法也称为隔墙法",[14,131087,131088],{},"使用方式：",[14,131090,131091],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[94,131093,131094],{"className":126534,"code":131000,"language":126536,"meta":24,"style":24},[100,131095,131096,131102,131112,131116,131122,131132],{"__ignoreMap":24},[103,131097,131098,131100],{"class":105,"line":106},[103,131099,131007],{"class":1952},[103,131101,15562],{"class":113},[103,131103,131104,131106,131108,131110],{"class":105,"line":25},[103,131105,131014],{"class":162},[103,131107,51427],{"class":113},[103,131109,23726],{"class":162},[103,131111,1279],{"class":113},[103,131113,131114],{"class":105,"line":1168},[103,131115,1554],{"class":113},[103,131117,131118,131120],{"class":105,"line":1183},[103,131119,131029],{"class":1952},[103,131121,15562],{"class":113},[103,131123,131124,131126,131128,131130],{"class":105,"line":1189},[103,131125,131014],{"class":162},[103,131127,51427],{"class":113},[103,131129,72512],{"class":162},[103,131131,1279],{"class":113},[103,131133,131134],{"class":105,"line":1203},[103,131135,1554],{"class":113},[14,131137,131138],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131140,131141],{},"优点： 通俗易懂，书写方便",[14,131143,131144],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131146,131147],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131149,131150],{},"法二",[14,131152,131153],{},"父级添加overflow属性",[94,131155,131156],{"className":126534,"code":131000,"language":126536,"meta":24,"style":24},[100,131157,131158,131164,131174,131178,131184,131194],{"__ignoreMap":24},[103,131159,131160,131162],{"class":105,"line":106},[103,131161,131007],{"class":1952},[103,131163,15562],{"class":113},[103,131165,131166,131168,131170,131172],{"class":105,"line":25},[103,131167,131014],{"class":162},[103,131169,51427],{"class":113},[103,131171,23726],{"class":162},[103,131173,1279],{"class":113},[103,131175,131176],{"class":105,"line":1168},[103,131177,1554],{"class":113},[103,131179,131180,131182],{"class":105,"line":1183},[103,131181,131029],{"class":1952},[103,131183,15562],{"class":113},[103,131185,131186,131188,131190,131192],{"class":105,"line":1189},[103,131187,131014],{"class":162},[103,131189,51427],{"class":113},[103,131191,72512],{"class":162},[103,131193,1279],{"class":113},[103,131195,131196],{"class":105,"line":1203},[103,131197,1554],{"class":113},[14,131199,131200],{},"overflow: hidden;",[14,131202,131203],{},"优点：代码简洁",[14,131205,131206],{},"缺点：无法显示溢出的部分",[14,131208,131209],{},"注意：是给父元素添加代码",[14,131211,131212],{},"法三",[14,131214,131215],{},"父级添加after伪元素",[14,131217,131218,131221],{},[131219,131220],"after",{}," 方式是额外标签法的升级版",[14,131223,131224],{},"使用的时候复制就可以",[94,131226,131227],{"className":126534,"code":131000,"language":126536,"meta":24,"style":24},[100,131228,131229,131235,131245,131249,131255,131265],{"__ignoreMap":24},[103,131230,131231,131233],{"class":105,"line":106},[103,131232,131007],{"class":1952},[103,131234,15562],{"class":113},[103,131236,131237,131239,131241,131243],{"class":105,"line":25},[103,131238,131014],{"class":162},[103,131240,51427],{"class":113},[103,131242,23726],{"class":162},[103,131244,1279],{"class":113},[103,131246,131247],{"class":105,"line":1168},[103,131248,1554],{"class":113},[103,131250,131251,131253],{"class":105,"line":1183},[103,131252,131029],{"class":1952},[103,131254,15562],{"class":113},[103,131256,131257,131259,131261,131263],{"class":105,"line":1189},[103,131258,131014],{"class":162},[103,131260,51427],{"class":113},[103,131262,72512],{"class":162},[103,131264,1279],{"class":113},[103,131266,131267],{"class":105,"line":1203},[103,131268,1554],{"class":113},[14,131270,131271],{},"优点：没有增加标签，结构更简单",[14,131273,131274],{},"缺点：照顾低版本浏览器",[14,131276,131277],{},"代表网站： 百度、淘宝网、网易等",[14,131279,131280],{},"法四",[14,131282,131283],{},"父级添加双伪元素",[94,131285,131286],{"className":126534,"code":131000,"language":126536,"meta":24,"style":24},[100,131287,131288,131294,131304,131308,131314,131324],{"__ignoreMap":24},[103,131289,131290,131292],{"class":105,"line":106},[103,131291,131007],{"class":1952},[103,131293,15562],{"class":113},[103,131295,131296,131298,131300,131302],{"class":105,"line":25},[103,131297,131014],{"class":162},[103,131299,51427],{"class":113},[103,131301,23726],{"class":162},[103,131303,1279],{"class":113},[103,131305,131306],{"class":105,"line":1168},[103,131307,1554],{"class":113},[103,131309,131310,131312],{"class":105,"line":1183},[103,131311,131029],{"class":1952},[103,131313,15562],{"class":113},[103,131315,131316,131318,131320,131322],{"class":105,"line":1189},[103,131317,131014],{"class":162},[103,131319,51427],{"class":113},[103,131321,72512],{"class":162},[103,131323,1279],{"class":113},[103,131325,131326],{"class":105,"line":1203},[103,131327,1554],{"class":113},[14,131329,131330],{},"优点：代码更简洁",[14,131332,131274],{},[14,131334,131335],{},"代表网站：小米、腾讯等",[45,131337,131339],{"id":131338},"_93-ps切图","9.3 PS切图",[74,131341,131343],{"id":131342},"_931-常见图片格式","9.3.1 常见图片格式",[251,131345,131346,131356],{},[254,131347,131348],{},[257,131349,131350,131353],{},[260,131351,131352],{"align":23726},"jpg图像格式",[260,131354,131355],{"align":23726},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[298,131357,131358,131366,131374],{},[257,131359,131360,131363],{},[303,131361,131362],{"align":23726},"gif图像格式",[303,131364,131365],{"align":23726},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[257,131367,131368,131371],{},[303,131369,131370],{"align":23726},"png图像格式",[303,131372,131373],{"align":23726},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[257,131375,131376,131379],{},[303,131377,131378],{"align":23726},"PSD图像格式",[303,131380,131381],{"align":23726},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[74,131383,131385],{"id":131384},"_932-图层切图","9.3.2 图层切图",[14,131387,131388],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131390,131391],{},"按住shift选中两个图层->图层菜单->合并图层",[74,131393,131395],{"id":131394},"_933-切片切图","9.3.3 切片切图",[1120,131397,131398,131401],{},[60,131399,131400],{},"利用切片工具手动划出",[60,131402,131403],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[74,131405,131407],{"id":131406},"_934-切图步骤","9.3.4 切图步骤",[14,131409,131410],{},"用切片工具选中：",[1451,131412],{"style":126390,"src":131413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131415,131416],{},"文件 -> 导出",[1451,131418],{"style":126390,"src":131419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5116,131421,131422],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":24,"searchDepth":25,"depth":25,"links":131424},[131425,131434,131438],{"id":129861,"depth":25,"text":129862,"children":131426},[131427,131428,131429,131430,131431,131432,131433],{"id":129886,"depth":1168,"text":129887},{"id":130177,"depth":1168,"text":130178},{"id":130306,"depth":1168,"text":130307},{"id":130506,"depth":1168,"text":130507},{"id":130548,"depth":1168,"text":130549},{"id":130586,"depth":1168,"text":130587},{"id":130676,"depth":1168,"text":130677},{"id":130956,"depth":25,"text":130957,"children":131435},[131436,131437],{"id":130960,"depth":1168,"text":130961},{"id":130967,"depth":1168,"text":130968},{"id":131338,"depth":25,"text":131339,"children":131439},[131440,131441,131442,131443],{"id":131342,"depth":1168,"text":131343},{"id":131384,"depth":1168,"text":131385},{"id":131394,"depth":1168,"text":131395},{"id":131406,"depth":1168,"text":131407},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129853,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131450,"title":131451,"body":131452,"description":27,"extension":28,"meta":132093,"navigation":30,"path":132094,"seo":132095,"stem":132096,"__hash__":132097},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131453,"toc":132081},[131454,131457,131461,131487,131521,131525,131529,131532,131574,131581,131591,131599,131601,131604,131607,131610,131617,131631,131635,131638,131667,131671,131674,131688,131692,131695,131723,131727,131730,131756,131760,131765,131798,131803,131831,131835,131852,131898,131903,131947,131964,132071,132079],[10,131455,131451],{"id":131456},"_10-css规范与学成在线案例",[45,131458,131460],{"id":131459},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[57,131462,131463,131469,131475,131481],{},[60,131464,131465,131468],{},[263,131466,131467],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[60,131470,131471,131474],{},[263,131472,131473],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[60,131476,131477,131480],{},[263,131478,131479],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[60,131482,131483,131486],{},[263,131484,131485],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[94,131488,131489],{"className":126534,"code":129898,"language":126536,"meta":24,"style":24},[100,131490,131491,131495,131501,131517],{"__ignoreMap":24},[103,131492,131493],{"class":105,"line":106},[103,131494,129905],{"class":172},[103,131496,131497,131499],{"class":105,"line":25},[103,131498,51601],{"class":51290},[103,131500,15562],{"class":113},[103,131502,131503,131505,131507,131509,131511,131513,131515],{"class":105,"line":1168},[103,131504,70886],{"class":162},[103,131506,51427],{"class":113},[103,131508,331],{"class":162},[103,131510,51482],{"class":109},[103,131512,51511],{"class":162},[103,131514,129926],{"class":162},[103,131516,1279],{"class":113},[103,131518,131519],{"class":105,"line":1183},[103,131520,1554],{"class":113},[45,131522,131524],{"id":131523},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[74,131526,131528],{"id":131527},"_1021-header头部制作","10.2.1 header头部制作",[1451,131530],{"style":126390,"src":131531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1120,131533,131534,131541,131548,131554,131561,131568],{},[60,131535,131536,131537,131540],{},"1号是版心盒子 ",[263,131538,131539],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[60,131542,131543,131544,131547],{},"版心盒子 里面包含 2号盒子 ",[263,131545,131546],{},"logo"," 图标",[60,131549,131550,131551,131553],{},"版心盒子 里面包含 3号盒子 ",[263,131552,53703],{}," 导航栏",[60,131555,131556,131557,131560],{},"版心盒子 里面包含 4号盒子 ",[263,131558,131559],{},"search"," 搜索框",[60,131562,131563,131564,131567],{},"版心盒子 里面包含 5号盒子 ",[263,131565,131566],{},"user"," 个人信息",[60,131569,131570,131571],{},"注意，要求里面的 ",[263,131572,131573],{},"4个子盒子 必须都浮动",[57,131575,131576],{},[60,131577,131578],{},[263,131579,131580],{},"导航栏注意点:",[14,131582,131583,131584,131587,131588],{},"实际开发中， ",[263,131585,131586],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[263,131589,131590],{},"用 li 包含链接(li+a)的做法",[1120,131592,131593,131596],{},[60,131594,131595],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[60,131597,131598],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131600,9015],{},[14,131602,131603],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131605,131606],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131608,131609],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[57,131611,131612],{"start":25},[60,131613,131614],{},[263,131615,131616],{},"4号盒子search的细节：",[1120,131618,131619,131622,131625],{},[60,131620,131621],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[60,131623,131624],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[60,131626,131627,131630],{},[100,131628,131629],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[74,131632,131634],{"id":131633},"_1022-banner制作","10.2.2 banner制作",[1451,131636],{"style":126390,"src":131637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1120,131639,131640,131647,131653,131660],{},[60,131641,131642,131643,131646],{},"1号盒子是通栏的大盒子 ",[263,131644,131645],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[60,131648,131649,131650,131652],{},"2号盒子是版心 ",[263,131651,908],{}," ， 要水平居中对齐",[60,131654,131655,131656,131659],{},"3号盒子版心内，左对齐 ",[263,131657,131658],{},"subnav"," 侧导航栏",[60,131661,131662,131663,131666],{},"4号盒子版心内，右对齐 ",[263,131664,131665],{},"course"," 课程",[74,131668,131670],{"id":131669},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1451,131672],{"style":126390,"src":131673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1120,131675,131676,131679,131682,131685],{},[60,131677,131678],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[60,131680,131681],{},"1号盒子是标题 H3 左侧浮动",[60,131683,131684],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[60,131686,131687],{},"3号盒子 右浮动 mod 修改",[74,131689,131691],{"id":131690},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1451,131693],{"style":126390,"src":131694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1120,131696,131697,131703,131710,131717,131720],{},[60,131698,131699,131700,131702],{},"1号盒子为最大的盒子 ",[263,131701,53704],{}," 版心水平居中对齐",[60,131704,131705,131706,131709],{},"2号盒子为上面部分 ",[263,131707,131708],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[60,131711,131712,131713,131716],{},"3号盒子为底下部分 ",[263,131714,131715],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[60,131718,131719],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[60,131721,131722],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[74,131724,131726],{"id":131725},"_1025-底部模块制作","10.2.5 底部模块制作",[1451,131728],{"style":126390,"src":131729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1120,131731,131732,131739,131742,131749],{},[60,131733,131734,131735,131738],{},"1号盒子通栏大盒子 底部 ",[263,131736,131737],{},"footer"," 给高度 底色是白色",[60,131740,131741],{},"2号盒子版心水平居中",[60,131743,131744,131745,131748],{},"3号盒子版权 ",[263,131746,131747],{},"copyright"," 左对齐",[60,131750,131751,131752,131755],{},"4号盒子 链接组 ",[263,131753,131754],{},"links"," 右对齐",[74,131757,131759],{"id":131758},"_1026-代码模块","10.2.6 代码模块",[57,131761,131762],{},[60,131763,131764],{},"html部分",[94,131766,131768],{"className":127281,"code":131767,"language":127283,"meta":24,"style":24},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[100,131769,131770],{"__ignoreMap":24},[103,131771,131772,131774,131776,131778,131780,131783,131786,131788,131791,131794,131796],{"class":105,"line":106},[103,131773,1023],{"class":113},[103,131775,17],{"class":51290},[103,131777,61047],{"class":1952},[103,131779,159],{"class":113},[103,131781,131782],{"class":218},"\"https:\u002F\u002Fexample.com\"",[103,131784,131785],{"class":1952}," target",[103,131787,159],{"class":113},[103,131789,131790],{"class":218},"\"_blank\"",[103,131792,131793],{"class":113},">链接文字\u003C\u002F",[103,131795,17],{"class":51290},[103,131797,51297],{"class":113},[57,131799,131800],{"start":25},[60,131801,131802],{},"css部分",[94,131804,131805],{"className":127281,"code":131767,"language":127283,"meta":24,"style":24},[100,131806,131807],{"__ignoreMap":24},[103,131808,131809,131811,131813,131815,131817,131819,131821,131823,131825,131827,131829],{"class":105,"line":106},[103,131810,1023],{"class":113},[103,131812,17],{"class":51290},[103,131814,61047],{"class":1952},[103,131816,159],{"class":113},[103,131818,131782],{"class":218},[103,131820,131785],{"class":1952},[103,131822,159],{"class":113},[103,131824,131790],{"class":218},[103,131826,131793],{"class":113},[103,131828,17],{"class":51290},[103,131830,51297],{"class":113},[74,131832,131834],{"id":131833},"_1027-收获","10.2.7 收获",[57,131836,131837,131840,131843,131846,131849],{},[60,131838,131839],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[60,131841,131842],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[60,131844,131845],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[60,131847,131848],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[60,131850,131851],{},"遗忘代码",[94,131853,131855],{"className":126534,"code":131854,"language":126536,"meta":24,"style":24},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[100,131856,131857,131879,131884,131894],{"__ignoreMap":24},[103,131858,131859,131861,131863,131865,131867,131869,131871,131873,131875,131877],{"class":105,"line":106},[103,131860,51601],{"class":51290},[103,131862,12425],{"class":113},[103,131864,14],{"class":51290},[103,131866,12425],{"class":113},[103,131868,10],{"class":51290},[103,131870,12425],{"class":113},[103,131872,1120],{"class":51290},[103,131874,12425],{"class":113},[103,131876,60],{"class":51290},[103,131878,15562],{"class":113},[103,131880,131881],{"class":105,"line":25},[103,131882,131883],{"class":172},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[103,131885,131886,131888,131890,131892],{"class":105,"line":1168},[103,131887,128150],{"class":162},[103,131889,51427],{"class":113},[103,131891,60859],{"class":162},[103,131893,1279],{"class":113},[103,131895,131896],{"class":105,"line":1183},[103,131897,1554],{"class":113},[57,131899,131900],{"start":1203},[60,131901,131902],{},"html引css的程序",[94,131904,131905],{"className":126534,"code":131854,"language":126536,"meta":24,"style":24},[100,131906,131907,131929,131933,131943],{"__ignoreMap":24},[103,131908,131909,131911,131913,131915,131917,131919,131921,131923,131925,131927],{"class":105,"line":106},[103,131910,51601],{"class":51290},[103,131912,12425],{"class":113},[103,131914,14],{"class":51290},[103,131916,12425],{"class":113},[103,131918,10],{"class":51290},[103,131920,12425],{"class":113},[103,131922,1120],{"class":51290},[103,131924,12425],{"class":113},[103,131926,60],{"class":51290},[103,131928,15562],{"class":113},[103,131930,131931],{"class":105,"line":25},[103,131932,131883],{"class":172},[103,131934,131935,131937,131939,131941],{"class":105,"line":1168},[103,131936,128150],{"class":162},[103,131938,51427],{"class":113},[103,131940,60859],{"class":162},[103,131942,1279],{"class":113},[103,131944,131945],{"class":105,"line":1183},[103,131946,1554],{"class":113},[57,131948,131949,131952,131955,131958,131961],{"start":1209},[60,131950,131951],{},"浮动的盒子不会有外边距合并问题",[60,131953,131954],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[60,131956,131957],{},"ctrl+g快速定位行；shift+alt多个光标",[60,131959,131960],{},"学习上方各个模块的选择器起名方法，以后就这样用",[60,131962,131963],{},"在写选择器时尽量写全一些，例如",[94,131965,131967],{"className":126534,"code":131966,"language":126536,"meta":24,"style":24},"\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",[100,131968,131969,131974,131990,131995,132010,132015,132030,132035,132050,132055],{"__ignoreMap":24},[103,131970,131971],{"class":105,"line":106},[103,131972,131973],{"class":172},"\u002F* 静态定位（默认） *\u002F\n",[103,131975,131976,131979,131981,131983,131985,131988],{"class":105,"line":25},[103,131977,131978],{"class":1952},".static",[103,131980,79797],{"class":113},[103,131982,128894],{"class":162},[103,131984,51427],{"class":113},[103,131986,131987],{"class":162},"static",[103,131989,129464],{"class":113},[103,131991,131992],{"class":105,"line":1168},[103,131993,131994],{"class":172},"\u002F* 相对定位 *\u002F\n",[103,131996,131997,132000,132002,132004,132006,132008],{"class":105,"line":1183},[103,131998,131999],{"class":1952},".relative",[103,132001,79797],{"class":113},[103,132003,128894],{"class":162},[103,132005,51427],{"class":113},[103,132007,54754],{"class":162},[103,132009,129464],{"class":113},[103,132011,132012],{"class":105,"line":1189},[103,132013,132014],{"class":172},"\u002F* 绝对定位 *\u002F\n",[103,132016,132017,132020,132022,132024,132026,132028],{"class":105,"line":1203},[103,132018,132019],{"class":1952},".absolute",[103,132021,79797],{"class":113},[103,132023,128894],{"class":162},[103,132025,51427],{"class":113},[103,132027,54821],{"class":162},[103,132029,129464],{"class":113},[103,132031,132032],{"class":105,"line":1209},[103,132033,132034],{"class":172},"\u002F* 固定定位 *\u002F\n",[103,132036,132037,132040,132042,132044,132046,132048],{"class":105,"line":1300},[103,132038,132039],{"class":1952},".fixed",[103,132041,79797],{"class":113},[103,132043,128894],{"class":162},[103,132045,51427],{"class":113},[103,132047,86223],{"class":162},[103,132049,129464],{"class":113},[103,132051,132052],{"class":105,"line":1306},[103,132053,132054],{"class":172},"\u002F* 粘性定位 *\u002F\n",[103,132056,132057,132060,132062,132064,132066,132069],{"class":105,"line":1318},[103,132058,132059],{"class":1952},".sticky",[103,132061,79797],{"class":113},[103,132063,128894],{"class":162},[103,132065,51427],{"class":113},[103,132067,132068],{"class":162},"sticky",[103,132070,129464],{"class":113},[57,132072,132073,132076],{"start":1606},[60,132074,132075],{},"一定要用好注释",[60,132077,132078],{},"浮动的盒子不会有外边距合并的问题",[5116,132080,131422],{},{"title":24,"searchDepth":25,"depth":25,"links":132082},[132083,132084],{"id":131459,"depth":25,"text":131460},{"id":131523,"depth":25,"text":131524,"children":132085},[132086,132087,132088,132089,132090,132091,132092],{"id":131527,"depth":1168,"text":131528},{"id":131633,"depth":1168,"text":131634},{"id":131669,"depth":1168,"text":131670},{"id":131690,"depth":1168,"text":131691},{"id":131725,"depth":1168,"text":131726},{"id":131758,"depth":1168,"text":131759},{"id":131833,"depth":1168,"text":131834},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131451,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132099,"title":132100,"body":132101,"description":27,"extension":28,"meta":133587,"navigation":30,"path":133588,"seo":133589,"stem":133590,"__hash__":133591},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132102,"toc":133579},[132103,132106,132110,132114,132125,132129,132146,132190,132223,132226,132243,132246,132249,132293,132297,132301,132304,132307,132311,132314,132325,132388,132429,132432,132447,132501,132509,132512,132523,132577,132603,132606,132619,132673,132705,132759,132782,132836,132839,132842,132849,132903,132924,132978,132981,132984,133069,133077,133134,133157,133161,133164,133182,133186,133205,133259,133297,133301,133304,133307,133329,133333,133341,133344,133349,133360,133363,133367,133381,133425,133428,133432,133435,133440,133466,133471,133548,133551,133555,133558,133561,133564,133567,133570,133573,133576],[10,132104,132100],{"id":132105},"_11-传统布局与定位体系",[45,132107,132109],{"id":132108},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[74,132111,132113],{"id":132112},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1120,132115,132116,132119,132122],{},[60,132117,132118],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[60,132120,132121],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[60,132123,132124],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[74,132126,132128],{"id":132127},"_1112-浮动","11.1.2 浮动",[1120,132130,132131,132134,132137,132140,132143],{},[60,132132,132133],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[60,132135,132136],{},"浮动可以改变元素标签默认的排列方式",[60,132138,132139],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[60,132141,132142],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[60,132144,132145],{},"在使用行内块转换时盒子之间是有空隙的",[94,132147,132148],{"className":126534,"code":131000,"language":126536,"meta":24,"style":24},[100,132149,132150,132156,132166,132170,132176,132186],{"__ignoreMap":24},[103,132151,132152,132154],{"class":105,"line":106},[103,132153,131007],{"class":1952},[103,132155,15562],{"class":113},[103,132157,132158,132160,132162,132164],{"class":105,"line":25},[103,132159,131014],{"class":162},[103,132161,51427],{"class":113},[103,132163,23726],{"class":162},[103,132165,1279],{"class":113},[103,132167,132168],{"class":105,"line":1168},[103,132169,1554],{"class":113},[103,132171,132172,132174],{"class":105,"line":1183},[103,132173,131029],{"class":1952},[103,132175,15562],{"class":113},[103,132177,132178,132180,132182,132184],{"class":105,"line":1189},[103,132179,131014],{"class":162},[103,132181,51427],{"class":113},[103,132183,72512],{"class":162},[103,132185,1279],{"class":113},[103,132187,132188],{"class":105,"line":1203},[103,132189,1554],{"class":113},[251,132191,132192,132200],{},[254,132193,132194],{},[257,132195,132196,132198],{},[260,132197,126998],{"align":23726},[260,132199,27479],{"align":23726},[298,132201,132202,132209,132216],{},[257,132203,132204,132206],{},[303,132205,54727],{"align":23726},[303,132207,132208],{"align":23726},"元素不浮动（默认值）",[257,132210,132211,132213],{},[303,132212,23726],{"align":23726},[303,132214,132215],{"align":23726},"元素向左浮动",[257,132217,132218,132220],{},[303,132219,72512],{"align":23726},[303,132221,132222],{"align":23726},"元素向右浮动",[14,132224,132225],{},"浮动重点：",[1120,132227,132228,132231,132234,132237,132240],{},[60,132229,132230],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[60,132232,132233],{},"浮动的元素会一行内显示并且元素顶部对齐",[60,132235,132236],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[60,132238,132239],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[60,132241,132242],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132244,132245],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132247,132248],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[94,132250,132251],{"className":126534,"code":131000,"language":126536,"meta":24,"style":24},[100,132252,132253,132259,132269,132273,132279,132289],{"__ignoreMap":24},[103,132254,132255,132257],{"class":105,"line":106},[103,132256,131007],{"class":1952},[103,132258,15562],{"class":113},[103,132260,132261,132263,132265,132267],{"class":105,"line":25},[103,132262,131014],{"class":162},[103,132264,51427],{"class":113},[103,132266,23726],{"class":162},[103,132268,1279],{"class":113},[103,132270,132271],{"class":105,"line":1168},[103,132272,1554],{"class":113},[103,132274,132275,132277],{"class":105,"line":1183},[103,132276,131029],{"class":1952},[103,132278,15562],{"class":113},[103,132280,132281,132283,132285,132287],{"class":105,"line":1189},[103,132282,131014],{"class":162},[103,132284,51427],{"class":113},[103,132286,72512],{"class":162},[103,132288,1279],{"class":113},[103,132290,132291],{"class":105,"line":1203},[103,132292,1554],{"class":113},[74,132294,132296],{"id":132295},"_1113-定位","11.1.3 定位",[21988,132298,132300],{"id":132299},"_11131-使用场景","11.1.3.1 使用场景",[14,132302,132303],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132305,132306],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21988,132308,132310],{"id":132309},"_11132-定位组成","11.1.3.2 定位组成",[14,132312,132313],{},"定位 = 定位模式 + 边偏移",[57,132315,132316],{},[60,132317,132318,132321,132322],{},[263,132319,132320],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[263,132323,132324],{},"定位模式",[94,132326,132328],{"className":126534,"code":132327,"language":126536,"meta":24,"style":24},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[100,132329,132330,132336,132350,132367,132384],{"__ignoreMap":24},[103,132331,132332,132334],{"class":105,"line":106},[103,132333,130382],{"class":1952},[103,132335,15562],{"class":113},[103,132337,132338,132341,132343,132345,132347],{"class":105,"line":25},[103,132339,132340],{"class":162},"  position",[103,132342,51427],{"class":113},[103,132344,54754],{"class":162},[103,132346,130397],{"class":113},[103,132348,132349],{"class":172},"\u002F* 定位模式 *\u002F\n",[103,132351,132352,132355,132357,132359,132361,132364],{"class":105,"line":1168},[103,132353,132354],{"class":162},"  top",[103,132356,51427],{"class":113},[103,132358,559],{"class":162},[103,132360,51482],{"class":109},[103,132362,132363],{"class":113},";           ",[103,132365,132366],{"class":172},"\u002F* 边偏移：上 *\u002F\n",[103,132368,132369,132372,132374,132376,132378,132381],{"class":105,"line":1183},[103,132370,132371],{"class":162},"  left",[103,132373,51427],{"class":113},[103,132375,813],{"class":162},[103,132377,51482],{"class":109},[103,132379,132380],{"class":113},";          ",[103,132382,132383],{"class":172},"\u002F* 边偏移：左 *\u002F\n",[103,132385,132386],{"class":105,"line":1189},[103,132387,1554],{"class":113},[251,132389,132390,132399],{},[254,132391,132392],{},[257,132393,132394,132396],{},[260,132395,266],{"align":23726},[260,132397,132398],{"align":23726},"语义",[298,132400,132401,132408,132415,132422],{},[257,132402,132403,132405],{},[303,132404,131987],{"align":23726},[303,132406,132407],{"align":23726},"静态定位",[257,132409,132410,132412],{},[303,132411,54754],{"align":23726},[303,132413,132414],{"align":23726},"相对定位",[257,132416,132417,132419],{},[303,132418,54821],{"align":23726},[303,132420,132421],{"align":23726},"绝对定位",[257,132423,132424,132426],{},[303,132425,86223],{"align":23726},[303,132427,132428],{"align":23726},"固定定位",[14,132430,132431],{},"（1）静态定位：",[1120,132433,132434,132445],{},[60,132435,132436,132437,132440,132441,132444],{},"静态定位是元素的 ",[263,132438,132439],{},"默认定位方式"," ， ",[263,132442,132443],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[60,132446,5171],{},[94,132448,132449],{"className":126534,"code":132327,"language":126536,"meta":24,"style":24},[100,132450,132451,132457,132469,132483,132497],{"__ignoreMap":24},[103,132452,132453,132455],{"class":105,"line":106},[103,132454,130382],{"class":1952},[103,132456,15562],{"class":113},[103,132458,132459,132461,132463,132465,132467],{"class":105,"line":25},[103,132460,132340],{"class":162},[103,132462,51427],{"class":113},[103,132464,54754],{"class":162},[103,132466,130397],{"class":113},[103,132468,132349],{"class":172},[103,132470,132471,132473,132475,132477,132479,132481],{"class":105,"line":1168},[103,132472,132354],{"class":162},[103,132474,51427],{"class":113},[103,132476,559],{"class":162},[103,132478,51482],{"class":109},[103,132480,132363],{"class":113},[103,132482,132366],{"class":172},[103,132484,132485,132487,132489,132491,132493,132495],{"class":105,"line":1183},[103,132486,132371],{"class":162},[103,132488,51427],{"class":113},[103,132490,813],{"class":162},[103,132492,51482],{"class":109},[103,132494,132380],{"class":113},[103,132496,132383],{"class":172},[103,132498,132499],{"class":105,"line":1189},[103,132500,1554],{"class":113},[1120,132502,132503,132506],{},[60,132504,132505],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[60,132507,132508],{},"静态定位在布局时我们几乎不用的",[14,132510,132511],{},"（2）相对定位",[1120,132513,132514,132521],{},[60,132515,132516,132517,132520],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[263,132518,132519],{},"原来的位置"," 来说的（自恋型）",[60,132522,5171],{},[94,132524,132525],{"className":126534,"code":132327,"language":126536,"meta":24,"style":24},[100,132526,132527,132533,132545,132559,132573],{"__ignoreMap":24},[103,132528,132529,132531],{"class":105,"line":106},[103,132530,130382],{"class":1952},[103,132532,15562],{"class":113},[103,132534,132535,132537,132539,132541,132543],{"class":105,"line":25},[103,132536,132340],{"class":162},[103,132538,51427],{"class":113},[103,132540,54754],{"class":162},[103,132542,130397],{"class":113},[103,132544,132349],{"class":172},[103,132546,132547,132549,132551,132553,132555,132557],{"class":105,"line":1168},[103,132548,132354],{"class":162},[103,132550,51427],{"class":113},[103,132552,559],{"class":162},[103,132554,51482],{"class":109},[103,132556,132363],{"class":113},[103,132558,132366],{"class":172},[103,132560,132561,132563,132565,132567,132569,132571],{"class":105,"line":1183},[103,132562,132371],{"class":162},[103,132564,51427],{"class":113},[103,132566,813],{"class":162},[103,132568,51482],{"class":109},[103,132570,132380],{"class":113},[103,132572,132383],{"class":172},[103,132574,132575],{"class":105,"line":1189},[103,132576,1554],{"class":113},[1120,132578,132579],{},[60,132580,132581,132582,132584,132585,132587,132588,132591,132592,132595,132596,132598,132599,132602],{},"相对定位的特点：",[53706,132583],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53706,132586],{},"  ② ",[263,132589,132590],{},"原来"," 在标准流的 ",[263,132593,132594],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53706,132597],{},"  ③因此， ",[263,132600,132601],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132604,132605],{},"（3）绝对定位",[1120,132607,132608,132617],{},[60,132609,132610,132612,132613,132616],{},[263,132611,132421],{}," 是元素在移动位置的时候，是相对于它 ",[263,132614,132615],{},"祖先元素"," 来说的（拼爹型）",[60,132618,5171],{},[94,132620,132621],{"className":126534,"code":132327,"language":126536,"meta":24,"style":24},[100,132622,132623,132629,132641,132655,132669],{"__ignoreMap":24},[103,132624,132625,132627],{"class":105,"line":106},[103,132626,130382],{"class":1952},[103,132628,15562],{"class":113},[103,132630,132631,132633,132635,132637,132639],{"class":105,"line":25},[103,132632,132340],{"class":162},[103,132634,51427],{"class":113},[103,132636,54754],{"class":162},[103,132638,130397],{"class":113},[103,132640,132349],{"class":172},[103,132642,132643,132645,132647,132649,132651,132653],{"class":105,"line":1168},[103,132644,132354],{"class":162},[103,132646,51427],{"class":113},[103,132648,559],{"class":162},[103,132650,51482],{"class":109},[103,132652,132363],{"class":113},[103,132654,132366],{"class":172},[103,132656,132657,132659,132661,132663,132665,132667],{"class":105,"line":1183},[103,132658,132371],{"class":162},[103,132660,51427],{"class":113},[103,132662,813],{"class":162},[103,132664,51482],{"class":109},[103,132666,132380],{"class":113},[103,132668,132383],{"class":172},[103,132670,132671],{"class":105,"line":1189},[103,132672,1554],{"class":113},[1120,132674,132675,132690,132699,132702],{},[60,132676,132677,132678,132680,132681,132683,132684,132686,132687,132689],{},"绝对定位的特点：",[53706,132679],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53706,132682],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53706,132685],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53706,132688],{},"  (4)固定定位",[60,132691,132692,132694,132695,132698],{},[263,132693,132428],{}," 是元素 ",[263,132696,132697],{},"固定于浏览器可视区的位置"," 。（认死理型）",[60,132700,132701],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[60,132703,132704],{},"语法:",[94,132706,132707],{"className":126534,"code":132327,"language":126536,"meta":24,"style":24},[100,132708,132709,132715,132727,132741,132755],{"__ignoreMap":24},[103,132710,132711,132713],{"class":105,"line":106},[103,132712,130382],{"class":1952},[103,132714,15562],{"class":113},[103,132716,132717,132719,132721,132723,132725],{"class":105,"line":25},[103,132718,132340],{"class":162},[103,132720,51427],{"class":113},[103,132722,54754],{"class":162},[103,132724,130397],{"class":113},[103,132726,132349],{"class":172},[103,132728,132729,132731,132733,132735,132737,132739],{"class":105,"line":1168},[103,132730,132354],{"class":162},[103,132732,51427],{"class":113},[103,132734,559],{"class":162},[103,132736,51482],{"class":109},[103,132738,132363],{"class":113},[103,132740,132366],{"class":172},[103,132742,132743,132745,132747,132749,132751,132753],{"class":105,"line":1183},[103,132744,132371],{"class":162},[103,132746,51427],{"class":113},[103,132748,813],{"class":162},[103,132750,51482],{"class":109},[103,132752,132380],{"class":113},[103,132754,132383],{"class":172},[103,132756,132757],{"class":105,"line":1189},[103,132758,1554],{"class":113},[1120,132760,132761,132770],{},[60,132762,132763,132764,132766,132767,132769],{},"特点:",[53706,132765],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53706,132768],{},"  ②固定定位不再占有原先的位置,完全脱标",[60,132771,132772,132773,132775,132776,132778,132779,132781],{},"固定在版心位置的方法:",[53706,132774],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53706,132777],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53706,132780],{},"  实例：",[94,132783,132784],{"className":126534,"code":132327,"language":126536,"meta":24,"style":24},[100,132785,132786,132792,132804,132818,132832],{"__ignoreMap":24},[103,132787,132788,132790],{"class":105,"line":106},[103,132789,130382],{"class":1952},[103,132791,15562],{"class":113},[103,132793,132794,132796,132798,132800,132802],{"class":105,"line":25},[103,132795,132340],{"class":162},[103,132797,51427],{"class":113},[103,132799,54754],{"class":162},[103,132801,130397],{"class":113},[103,132803,132349],{"class":172},[103,132805,132806,132808,132810,132812,132814,132816],{"class":105,"line":1168},[103,132807,132354],{"class":162},[103,132809,51427],{"class":113},[103,132811,559],{"class":162},[103,132813,51482],{"class":109},[103,132815,132363],{"class":113},[103,132817,132366],{"class":172},[103,132819,132820,132822,132824,132826,132828,132830],{"class":105,"line":1183},[103,132821,132371],{"class":162},[103,132823,51427],{"class":113},[103,132825,813],{"class":162},[103,132827,51482],{"class":109},[103,132829,132380],{"class":113},[103,132831,132383],{"class":172},[103,132833,132834],{"class":105,"line":1189},[103,132835,1554],{"class":113},[1451,132837],{"style":126390,"src":132838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132840,132841],{},"(5)粘性定位",[1120,132843,132844,132847],{},[60,132845,132846],{},"粘性定位可以被认为是相对定位和固定定位的混合",[60,132848,5171],{},[94,132850,132851],{"className":126534,"code":132327,"language":126536,"meta":24,"style":24},[100,132852,132853,132859,132871,132885,132899],{"__ignoreMap":24},[103,132854,132855,132857],{"class":105,"line":106},[103,132856,130382],{"class":1952},[103,132858,15562],{"class":113},[103,132860,132861,132863,132865,132867,132869],{"class":105,"line":25},[103,132862,132340],{"class":162},[103,132864,51427],{"class":113},[103,132866,54754],{"class":162},[103,132868,130397],{"class":113},[103,132870,132349],{"class":172},[103,132872,132873,132875,132877,132879,132881,132883],{"class":105,"line":1168},[103,132874,132354],{"class":162},[103,132876,51427],{"class":113},[103,132878,559],{"class":162},[103,132880,51482],{"class":109},[103,132882,132363],{"class":113},[103,132884,132366],{"class":172},[103,132886,132887,132889,132891,132893,132895,132897],{"class":105,"line":1183},[103,132888,132371],{"class":162},[103,132890,51427],{"class":113},[103,132892,813],{"class":162},[103,132894,51482],{"class":109},[103,132896,132380],{"class":113},[103,132898,132383],{"class":172},[103,132900,132901],{"class":105,"line":1189},[103,132902,1554],{"class":113},[1120,132904,132905],{},[60,132906,132907,132908,132910,132911,132913,132914,132916,132917,132920,132921,132923],{},"粘性定位的特点：",[53706,132909],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53706,132912],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53706,132915],{},"  ③必须添加 top 、left、right、bottom ",[263,132918,132919],{},"其中一个"," 才有效",[53706,132922],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[94,132925,132926],{"className":126534,"code":132327,"language":126536,"meta":24,"style":24},[100,132927,132928,132934,132946,132960,132974],{"__ignoreMap":24},[103,132929,132930,132932],{"class":105,"line":106},[103,132931,130382],{"class":1952},[103,132933,15562],{"class":113},[103,132935,132936,132938,132940,132942,132944],{"class":105,"line":25},[103,132937,132340],{"class":162},[103,132939,51427],{"class":113},[103,132941,54754],{"class":162},[103,132943,130397],{"class":113},[103,132945,132349],{"class":172},[103,132947,132948,132950,132952,132954,132956,132958],{"class":105,"line":1168},[103,132949,132354],{"class":162},[103,132951,51427],{"class":113},[103,132953,559],{"class":162},[103,132955,51482],{"class":109},[103,132957,132363],{"class":113},[103,132959,132366],{"class":172},[103,132961,132962,132964,132966,132968,132970,132972],{"class":105,"line":1183},[103,132963,132371],{"class":162},[103,132965,51427],{"class":113},[103,132967,813],{"class":162},[103,132969,51482],{"class":109},[103,132971,132380],{"class":113},[103,132973,132383],{"class":172},[103,132975,132976],{"class":105,"line":1189},[103,132977,1554],{"class":113},[1451,132979],{"style":126390,"src":132980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,132982,132983],{},"(6)总结",[251,132985,132986,133001],{},[254,132987,132988],{},[257,132989,132990,132992,132995,132998],{},[260,132991,132324],{"align":23726},[260,132993,132994],{"align":23726},"是否脱标",[260,132996,132997],{"align":23726},"移动位置",[260,132999,133000],{"align":23726},"是否常用",[298,133002,133003,133016,133030,133044,133057],{},[257,133004,133005,133008,133010,133013],{},[303,133006,133007],{"align":23726},"Static 静态定位",[303,133009,104668],{"align":23726},[303,133011,133012],{"align":23726},"不能使用边偏移",[303,133014,133015],{"align":23726},"很少",[257,133017,133018,133021,133024,133027],{},[303,133019,133020],{"align":23726},"Relative 相对定位",[303,133022,133023],{"align":23726},"否(占有位置)",[303,133025,133026],{"align":23726},"相对于自身位置移动",[303,133028,133029],{"align":23726},"基本单独使用",[257,133031,133032,133035,133038,133041],{},[303,133033,133034],{"align":23726},"Absolute 绝对定位",[303,133036,133037],{"align":23726},"是(不占有位置)",[303,133039,133040],{"align":23726},"带有定位的父级",[303,133042,133043],{"align":23726},"要和定位父级元素搭配使用",[257,133045,133046,133049,133051,133054],{},[303,133047,133048],{"align":23726},"Fixed 固定定位",[303,133050,133037],{"align":23726},[303,133052,133053],{"align":23726},"浏览器可视区",[303,133055,133056],{"align":23726},"单独使用,不需要父级",[257,133058,133059,133062,133064,133066],{},[303,133060,133061],{"align":23726},"Sticky 粘性定位",[303,133063,133023],{"align":23726},[303,133065,133053],{"align":23726},[303,133067,133068],{"align":23726},"当前阶段少",[57,133070,133071],{"start":25},[60,133072,133073,133076],{},[263,133074,133075],{},"边偏移"," 则决定了该元素的最终位置",[251,133078,133079,133090],{},[254,133080,133081],{},[257,133082,133083,133086,133088],{},[260,133084,133085],{"align":23726},"边偏移属性",[260,133087,27482],{"align":23726},[260,133089,27479],{"align":23726},[298,133091,133092,133103,133114,133124],{},[257,133093,133094,133097,133100],{},[303,133095,133096],{"align":23726},"top",[303,133098,133099],{"align":23726},"top: 80px;",[303,133101,133102],{"align":23726},"顶端偏移量，定义元素相对于父元素上边线的距离",[257,133104,133105,133108,133111],{},[303,133106,133107],{"align":23726},"bottom",[303,133109,133110],{"align":23726},"bottom: 80px ;",[303,133112,133113],{"align":23726},"底部偏移量，定义元素相对于其父元素下边线的距离",[257,133115,133116,133118,133121],{},[303,133117,23726],{"align":23726},[303,133119,133120],{"align":23726},"left: 80px ;",[303,133122,133123],{"align":23726},"左侧偏移量，定义元素相对于其父元素左边线的距离",[257,133125,133126,133128,133131],{},[303,133127,72512],{"align":23726},[303,133129,133130],{"align":23726},"right: 80px ;",[303,133132,133133],{"align":23726},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1120,133135,133136],{},[60,133137,9015,133138,133140,133141,133143,133144,133146,133147,133150,133151,133153,133154,133156],{},[53706,133139],{},"  ① ",[263,133142,133075],{}," 需要和 ",[263,133145,132324],{}," 联合使用， ",[263,133148,133149],{},"单独使用无效"," ；",[53706,133152],{},"  ②top和bottom不要同时使用",[53706,133155],{},"  ③left和right不要同时使用",[21988,133158,133160],{"id":133159},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133162,133163],{},"子级是绝对定位的话，父级要用相对定位",[1120,133165,133166,133169,133172,133175],{},[60,133167,133168],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[60,133170,133171],{},"父盒子需要加定位限制子盒子在父盒子内显示",[60,133173,133174],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[60,133176,133177,133178,133181],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[263,133179,133180],{},"子绝父绝"," 也会遇到",[21988,133183,133185],{"id":133184},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1120,133187,133188,133203],{},[60,133189,133190,133191,133194,133195,133198,133199,133202],{},"在使用 ",[263,133192,133193],{},"定位"," 布局时，可能会 ",[263,133196,133197],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[263,133200,133201],{},"z-index"," 来控制盒子的前后次序 (z轴)",[60,133204,5171],{},[94,133206,133207],{"className":126534,"code":132327,"language":126536,"meta":24,"style":24},[100,133208,133209,133215,133227,133241,133255],{"__ignoreMap":24},[103,133210,133211,133213],{"class":105,"line":106},[103,133212,130382],{"class":1952},[103,133214,15562],{"class":113},[103,133216,133217,133219,133221,133223,133225],{"class":105,"line":25},[103,133218,132340],{"class":162},[103,133220,51427],{"class":113},[103,133222,54754],{"class":162},[103,133224,130397],{"class":113},[103,133226,132349],{"class":172},[103,133228,133229,133231,133233,133235,133237,133239],{"class":105,"line":1168},[103,133230,132354],{"class":162},[103,133232,51427],{"class":113},[103,133234,559],{"class":162},[103,133236,51482],{"class":109},[103,133238,132363],{"class":113},[103,133240,132366],{"class":172},[103,133242,133243,133245,133247,133249,133251,133253],{"class":105,"line":1183},[103,133244,132371],{"class":162},[103,133246,51427],{"class":113},[103,133248,813],{"class":162},[103,133250,51482],{"class":109},[103,133252,132380],{"class":113},[103,133254,132383],{"class":172},[103,133256,133257],{"class":105,"line":1189},[103,133258,1554],{"class":113},[1120,133260,133261],{},[60,133262,133263,133264,133140,133266,133268,133269,127697,133272,82529,133275,133277,133278,133280,133281,133284,133285,133150,133288,133290,133291,133294,133296],{},"z-index的特性",[53706,133265],{},[263,133267,126998],{}," ： ",[263,133270,133271],{},"正整数",[263,133273,133274],{},"负整数",[263,133276,305],{}," ，默认值是 0，数值越大，盒子越靠上；",[53706,133279],{},"  ②如果 ",[263,133282,133283],{},"属性值相同"," ，则按照书写顺序， ",[263,133286,133287],{},"后来居上",[53706,133289],{},"  ③数字后面 ",[263,133292,133293],{},"不能加单位",[53706,133295],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21988,133298,133300],{"id":133299},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133302,133303],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133305,133306],{},"方法:",[1120,133308,133309,133319],{},[60,133310,133311,133312,133315,133316],{},"left: 50%; 让 ",[263,133313,133314],{},"盒子的左侧"," 移动到 ",[263,133317,133318],{},"父级元素的水平中心位置",[60,133320,133321,133322,133325,133326],{},"margin-left: -100px; 让盒子 ",[263,133323,133324],{},"向左"," 移动 ",[263,133327,133328],{},"自身宽度的一半",[21988,133330,133332],{"id":133331},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[57,133334,133335,133338],{},[60,133336,133337],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[60,133339,133340],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133342,133343],{},"也就是说绝对定位和固定定位和浮动类似",[57,133345,133346],{"start":1168},[60,133347,133348],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1120,133350,133351,133354,133357],{},[60,133352,133353],{},"可以用inline-block 转换为行内块",[60,133355,133356],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[60,133358,133359],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133361,133362],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21988,133364,133366],{"id":133365},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[57,133368,133369,133372,133375,133378],{},[60,133370,133371],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[60,133373,133374],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[60,133376,133377],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[60,133379,133380],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[94,133382,133383],{"className":126534,"code":131000,"language":126536,"meta":24,"style":24},[100,133384,133385,133391,133401,133405,133411,133421],{"__ignoreMap":24},[103,133386,133387,133389],{"class":105,"line":106},[103,133388,131007],{"class":1952},[103,133390,15562],{"class":113},[103,133392,133393,133395,133397,133399],{"class":105,"line":25},[103,133394,131014],{"class":162},[103,133396,51427],{"class":113},[103,133398,23726],{"class":162},[103,133400,1279],{"class":113},[103,133402,133403],{"class":105,"line":1168},[103,133404,1554],{"class":113},[103,133406,133407,133409],{"class":105,"line":1183},[103,133408,131029],{"class":1952},[103,133410,15562],{"class":113},[103,133412,133413,133415,133417,133419],{"class":105,"line":1189},[103,133414,131014],{"class":162},[103,133416,51427],{"class":113},[103,133418,72512],{"class":162},[103,133420,1279],{"class":113},[103,133422,133423],{"class":105,"line":1203},[103,133424,1554],{"class":113},[1451,133426],{"style":126390,"src":133427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21988,133429,133431],{"id":133430},"_11138-轮播图","11.1.3.8 轮播图",[1451,133433],{"style":126390,"src":133434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[57,133436,133437],{},[60,133438,133439],{},"制作顺序:",[1120,133441,133442,133445,133448,133457],{},[60,133443,133444],{},"大盒子我们类名为： tb-promo 淘宝广告",[60,133446,133447],{},"里面先放一张图片",[60,133449,133450,133451,133453,133454,133456],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53706,133452],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53706,133455],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[60,133458,133459,133460,133462,133463,133465],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53706,133461],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53706,133464],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[57,133467,133468],{"start":25},[60,133469,133470],{},"代码模块",[94,133472,133474],{"className":126534,"code":133473,"language":126536,"meta":24,"style":24},"\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",[100,133475,133476,133481,133488,133498,133508,133518,133522,133527,133534,133544],{"__ignoreMap":24},[103,133477,133478],{"class":105,"line":106},[103,133479,133480],{"class":172},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[103,133482,133483,133486],{"class":105,"line":25},[103,133484,133485],{"class":1952},".son",[103,133487,15562],{"class":113},[103,133489,133490,133492,133494,133496],{"class":105,"line":1168},[103,133491,132340],{"class":162},[103,133493,51427],{"class":113},[103,133495,54821],{"class":162},[103,133497,1279],{"class":113},[103,133499,133500,133502,133504,133506],{"class":105,"line":1183},[103,133501,132354],{"class":162},[103,133503,51427],{"class":113},[103,133505,305],{"class":162},[103,133507,1279],{"class":113},[103,133509,133510,133512,133514,133516],{"class":105,"line":1189},[103,133511,132371],{"class":162},[103,133513,51427],{"class":113},[103,133515,305],{"class":162},[103,133517,1279],{"class":113},[103,133519,133520],{"class":105,"line":1203},[103,133521,1554],{"class":113},[103,133523,133524],{"class":105,"line":1209},[103,133525,133526],{"class":172},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[103,133528,133529,133532],{"class":105,"line":1300},[103,133530,133531],{"class":1952},".father",[103,133533,15562],{"class":113},[103,133535,133536,133538,133540,133542],{"class":105,"line":1306},[103,133537,132340],{"class":162},[103,133539,51427],{"class":113},[103,133541,54754],{"class":162},[103,133543,1279],{"class":113},[103,133545,133546],{"class":105,"line":1318},[103,133547,1554],{"class":113},[14,133549,133550],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[74,133552,133554],{"id":133553},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1451,133556],{"style":126390,"src":133557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133559,133560],{},"✨ 黄金口诀：",[14,133562,133563],{},"\"TOP正下负上，LEFT正右负左\"",[14,133565,133566],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133568,133569],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133571,133572],{},"✨ 简单记：",[14,133574,133575],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5116,133577,133578],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":24,"searchDepth":25,"depth":25,"links":133580},[133581],{"id":132108,"depth":25,"text":132109,"children":133582},[133583,133584,133585,133586],{"id":132112,"depth":1168,"text":132113},{"id":132127,"depth":1168,"text":132128},{"id":132295,"depth":1168,"text":132296},{"id":133553,"depth":1168,"text":133554},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132100,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133593,"title":133594,"body":133595,"description":27,"extension":28,"meta":135018,"navigation":30,"path":135019,"seo":135020,"stem":135021,"__hash__":135022},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133596,"toc":134997},[133597,133600,133604,133612,133616,133621,133629,133641,133645,133650,133658,133669,133673,133678,133719,133727,133731,133734,133737,133740,133834,133837,133931,133934,134028,134031,134034,134069,134072,134075,134105,134108,134111,134114,134117,134120,134123,134126,134196,134199,134203,134207,134248,134252,134258,134261,134264,134268,134271,134274,134277,134358,134361,134364,134368,134372,134375,134378,134381,134384,134387,134393,134402,134406,134425,134429,134439,134442,134445,134448,134451,134454,134457,134460,134463,134472,134476,134485,134488,134493,134546,134551,134717,134720,134723,134728,134731,134734,134737,134740,134745,134893,134896,134899,134904,134907,134912,134946,134949,134952,134956,134959,134966,134969,134972,134975,134978,134981,134984,134987,134991,134994],[10,133598,133594],{"id":133599},"_12-显示隐藏与图形资源",[45,133601,133603],{"id":133602},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1120,133605,133606,133609],{},[60,133607,133608],{},"目的:让一个元素在页面中消失或者显示出来",[60,133610,133611],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[74,133613,133615],{"id":133614},"_1211-display-显示","12.1.1 display 显示",[57,133617,133618],{},[60,133619,133620],{},"display 设置或检索对象是否及如何显示",[1120,133622,133623,133626],{},[60,133624,133625],{},"display: none;隐藏对象",[60,133627,133628],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[57,133630,133631,133638],{"start":25},[60,133632,133633,133634,133637],{},"特点： display 隐藏元素后， ",[263,133635,133636],{},"不再占"," 有原来的位置",[60,133639,133640],{},"在js中使用非常的广泛",[74,133642,133644],{"id":133643},"_1212-visibility可见性","12.1.2 visibility可见性",[57,133646,133647],{},[60,133648,133649],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1120,133651,133652,133655],{},[60,133653,133654],{},"visibility： visible；元素可见",[60,133656,133657],{},"visibility：hidden；元素隐藏",[57,133659,133660,133663,133666],{"start":25},[60,133661,133662],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[60,133664,133665],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[60,133667,133668],{},"隐藏后继续占有原有位置",[74,133670,133672],{"id":133671},"_1213-overflow溢出","12.1.3 overflow溢出",[1120,133674,133675],{},[60,133676,133677],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[251,133679,133680,133688],{},[254,133681,133682],{},[257,133683,133684,133686],{},[260,133685,126998],{"align":23726},[260,133687,27479],{"align":23726},[298,133689,133690,133698,133705,133712],{},[257,133691,133692,133695],{},[303,133693,133694],{"align":23726},"visible",[303,133696,133697],{"align":23726},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[257,133699,133700,133702],{},[303,133701,61704],{"align":23726},[303,133703,133704],{"align":23726},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[257,133706,133707,133709],{},[303,133708,128954],{"align":23726},[303,133710,133711],{"align":23726},"不管超出内容否，总是显示滚动条",[257,133713,133714,133716],{},[303,133715,72653],{"align":23726},[303,133717,133718],{"align":23726},"超出自动显示滚动条，不超出不显示滚动条",[1120,133720,133721,133724],{},[60,133722,133723],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[60,133725,133726],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[74,133728,133730],{"id":133729},"_1214-案例收获","12.1.4 案例收获",[1451,133732],{"style":126390,"src":133733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133735,133736],{},"问题：没做出来动态效果，使用hover没实现",[14,133738,133739],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[94,133741,133742],{"className":126534,"code":131966,"language":126536,"meta":24,"style":24},[100,133743,133744,133748,133762,133766,133780,133784,133798,133802,133816,133820],{"__ignoreMap":24},[103,133745,133746],{"class":105,"line":106},[103,133747,131973],{"class":172},[103,133749,133750,133752,133754,133756,133758,133760],{"class":105,"line":25},[103,133751,131978],{"class":1952},[103,133753,79797],{"class":113},[103,133755,128894],{"class":162},[103,133757,51427],{"class":113},[103,133759,131987],{"class":162},[103,133761,129464],{"class":113},[103,133763,133764],{"class":105,"line":1168},[103,133765,131994],{"class":172},[103,133767,133768,133770,133772,133774,133776,133778],{"class":105,"line":1183},[103,133769,131999],{"class":1952},[103,133771,79797],{"class":113},[103,133773,128894],{"class":162},[103,133775,51427],{"class":113},[103,133777,54754],{"class":162},[103,133779,129464],{"class":113},[103,133781,133782],{"class":105,"line":1189},[103,133783,132014],{"class":172},[103,133785,133786,133788,133790,133792,133794,133796],{"class":105,"line":1203},[103,133787,132019],{"class":1952},[103,133789,79797],{"class":113},[103,133791,128894],{"class":162},[103,133793,51427],{"class":113},[103,133795,54821],{"class":162},[103,133797,129464],{"class":113},[103,133799,133800],{"class":105,"line":1209},[103,133801,132034],{"class":172},[103,133803,133804,133806,133808,133810,133812,133814],{"class":105,"line":1300},[103,133805,132039],{"class":1952},[103,133807,79797],{"class":113},[103,133809,128894],{"class":162},[103,133811,51427],{"class":113},[103,133813,86223],{"class":162},[103,133815,129464],{"class":113},[103,133817,133818],{"class":105,"line":1306},[103,133819,132054],{"class":172},[103,133821,133822,133824,133826,133828,133830,133832],{"class":105,"line":1318},[103,133823,132059],{"class":1952},[103,133825,79797],{"class":113},[103,133827,128894],{"class":162},[103,133829,51427],{"class":113},[103,133831,132068],{"class":162},[103,133833,129464],{"class":113},[14,133835,133836],{},"完整代码：",[94,133838,133839],{"className":126534,"code":131966,"language":126536,"meta":24,"style":24},[100,133840,133841,133845,133859,133863,133877,133881,133895,133899,133913,133917],{"__ignoreMap":24},[103,133842,133843],{"class":105,"line":106},[103,133844,131973],{"class":172},[103,133846,133847,133849,133851,133853,133855,133857],{"class":105,"line":25},[103,133848,131978],{"class":1952},[103,133850,79797],{"class":113},[103,133852,128894],{"class":162},[103,133854,51427],{"class":113},[103,133856,131987],{"class":162},[103,133858,129464],{"class":113},[103,133860,133861],{"class":105,"line":1168},[103,133862,131994],{"class":172},[103,133864,133865,133867,133869,133871,133873,133875],{"class":105,"line":1183},[103,133866,131999],{"class":1952},[103,133868,79797],{"class":113},[103,133870,128894],{"class":162},[103,133872,51427],{"class":113},[103,133874,54754],{"class":162},[103,133876,129464],{"class":113},[103,133878,133879],{"class":105,"line":1189},[103,133880,132014],{"class":172},[103,133882,133883,133885,133887,133889,133891,133893],{"class":105,"line":1203},[103,133884,132019],{"class":1952},[103,133886,79797],{"class":113},[103,133888,128894],{"class":162},[103,133890,51427],{"class":113},[103,133892,54821],{"class":162},[103,133894,129464],{"class":113},[103,133896,133897],{"class":105,"line":1209},[103,133898,132034],{"class":172},[103,133900,133901,133903,133905,133907,133909,133911],{"class":105,"line":1300},[103,133902,132039],{"class":1952},[103,133904,79797],{"class":113},[103,133906,128894],{"class":162},[103,133908,51427],{"class":113},[103,133910,86223],{"class":162},[103,133912,129464],{"class":113},[103,133914,133915],{"class":105,"line":1306},[103,133916,132054],{"class":172},[103,133918,133919,133921,133923,133925,133927,133929],{"class":105,"line":1318},[103,133920,132059],{"class":1952},[103,133922,79797],{"class":113},[103,133924,128894],{"class":162},[103,133926,51427],{"class":113},[103,133928,132068],{"class":162},[103,133930,129464],{"class":113},[14,133932,133933],{},"分布思路重点详解：",[94,133935,133936],{"className":126534,"code":131966,"language":126536,"meta":24,"style":24},[100,133937,133938,133942,133956,133960,133974,133978,133992,133996,134010,134014],{"__ignoreMap":24},[103,133939,133940],{"class":105,"line":106},[103,133941,131973],{"class":172},[103,133943,133944,133946,133948,133950,133952,133954],{"class":105,"line":25},[103,133945,131978],{"class":1952},[103,133947,79797],{"class":113},[103,133949,128894],{"class":162},[103,133951,51427],{"class":113},[103,133953,131987],{"class":162},[103,133955,129464],{"class":113},[103,133957,133958],{"class":105,"line":1168},[103,133959,131994],{"class":172},[103,133961,133962,133964,133966,133968,133970,133972],{"class":105,"line":1183},[103,133963,131999],{"class":1952},[103,133965,79797],{"class":113},[103,133967,128894],{"class":162},[103,133969,51427],{"class":113},[103,133971,54754],{"class":162},[103,133973,129464],{"class":113},[103,133975,133976],{"class":105,"line":1189},[103,133977,132014],{"class":172},[103,133979,133980,133982,133984,133986,133988,133990],{"class":105,"line":1203},[103,133981,132019],{"class":1952},[103,133983,79797],{"class":113},[103,133985,128894],{"class":162},[103,133987,51427],{"class":113},[103,133989,54821],{"class":162},[103,133991,129464],{"class":113},[103,133993,133994],{"class":105,"line":1209},[103,133995,132034],{"class":172},[103,133997,133998,134000,134002,134004,134006,134008],{"class":105,"line":1300},[103,133999,132039],{"class":1952},[103,134001,79797],{"class":113},[103,134003,128894],{"class":162},[103,134005,51427],{"class":113},[103,134007,86223],{"class":162},[103,134009,129464],{"class":113},[103,134011,134012],{"class":105,"line":1306},[103,134013,132054],{"class":172},[103,134015,134016,134018,134020,134022,134024,134026],{"class":105,"line":1318},[103,134017,132059],{"class":1952},[103,134019,79797],{"class":113},[103,134021,128894],{"class":162},[103,134023,51427],{"class":113},[103,134025,132068],{"class":162},[103,134027,129464],{"class":113},[1451,134029],{"style":126390,"src":134030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134032,134033],{},"图片太大，盒子太小，此时需要修改图片的大小",[94,134035,134037],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[100,134038,134039],{"__ignoreMap":24},[103,134040,134041,134043,134045,134047,134049,134052,134054,134056,134059,134062,134064,134067],{"class":105,"line":106},[103,134042,1023],{"class":113},[103,134044,1451],{"class":51290},[103,134046,55229],{"class":1952},[103,134048,159],{"class":113},[103,134050,134051],{"class":218},"\"images\u002Fpic.jpg\"",[103,134053,55237],{"class":1952},[103,134055,159],{"class":113},[103,134057,134058],{"class":218},"\"描述文字\"",[103,134060,134061],{"class":1952}," title",[103,134063,159],{"class":113},[103,134065,134066],{"class":218},"\"悬停提示\"",[103,134068,51297],{"class":113},[1451,134070],{"style":126390,"src":134071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134073,134074],{},"制造遮罩层",[94,134076,134077],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,134078,134079],{"__ignoreMap":24},[103,134080,134081,134083,134085,134087,134089,134091,134093,134095,134097,134099,134101,134103],{"class":105,"line":106},[103,134082,1023],{"class":113},[103,134084,1451],{"class":51290},[103,134086,55229],{"class":1952},[103,134088,159],{"class":113},[103,134090,134051],{"class":218},[103,134092,55237],{"class":1952},[103,134094,159],{"class":113},[103,134096,134058],{"class":218},[103,134098,134061],{"class":1952},[103,134100,159],{"class":113},[103,134102,134066],{"class":218},[103,134104,51297],{"class":113},[14,134106,134107],{},"此时是这样的为标准流",[1451,134109],{"style":126390,"src":134110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134112,134113],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134115,134116],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134118,134119],{},"让他在中间，用center(background-position)",[14,134121,134122],{},"将需要变的尽可能放到一个盒子中",[14,134124,134125],{},"放大盒子上内部盒子发生变化",[94,134127,134129],{"className":126534,"code":134128,"language":126536,"meta":24,"style":24},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[100,134130,134131,134137,134147,134151,134158,134168,134180,134192],{"__ignoreMap":24},[103,134132,134133,134135],{"class":105,"line":106},[103,134134,127601],{"class":1952},[103,134136,15562],{"class":113},[103,134138,134139,134141,134143,134145],{"class":105,"line":25},[103,134140,132340],{"class":162},[103,134142,51427],{"class":113},[103,134144,54754],{"class":162},[103,134146,1279],{"class":113},[103,134148,134149],{"class":105,"line":1168},[103,134150,1554],{"class":113},[103,134152,134153,134156],{"class":105,"line":1183},[103,134154,134155],{"class":1952},".child",[103,134157,15562],{"class":113},[103,134159,134160,134162,134164,134166],{"class":105,"line":1189},[103,134161,132340],{"class":162},[103,134163,51427],{"class":113},[103,134165,54821],{"class":162},[103,134167,1279],{"class":113},[103,134169,134170,134172,134174,134176,134178],{"class":105,"line":1203},[103,134171,132354],{"class":162},[103,134173,51427],{"class":113},[103,134175,769],{"class":162},[103,134177,441],{"class":109},[103,134179,1279],{"class":113},[103,134181,134182,134184,134186,134188,134190],{"class":105,"line":1209},[103,134183,132371],{"class":162},[103,134185,51427],{"class":113},[103,134187,769],{"class":162},[103,134189,441],{"class":109},[103,134191,1279],{"class":113},[103,134193,134194],{"class":105,"line":1300},[103,134195,1554],{"class":113},[14,134197,134198],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[45,134200,134202],{"id":134201},"_122-精灵图","12.2 精灵图",[74,134204,134206],{"id":134205},"_1221-理解","12.2.1 理解",[57,134208,134209,134227],{},[60,134210,134211,134212,132440,134215,134218,134219,134222,134223,134226],{},"目的： ",[263,134213,134214],{},"为了有效地减少服务器接收和发送请求的次数",[263,134216,134217],{},"提高"," 页面的 ",[263,134220,134221],{},"加载速度"," ，出现了 ",[263,134224,134225],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[60,134228,134229,134230,134232,134233,134235,134236,134238,134239,134241,134242,134244,134245,134247],{},"使用精灵图核心：",[53706,134231],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53706,134234],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53706,134237],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53706,134240],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53706,134243],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53706,134246],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[74,134249,134251],{"id":134250},"_1222-扒图","12.2.2 扒图",[94,134253,134256],{"className":134254,"code":134255,"language":5177},[5175],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[100,134257,134255],{"__ignoreMap":24},[1451,134259],{"style":126390,"src":134260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1451,134262],{"style":126390,"src":134263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[74,134265,134267],{"id":134266},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1451,134269],{"style":126390,"src":134270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134272,134273],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1451,134275],{"style":126390,"src":134276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[94,134278,134280],{"className":126534,"code":134279,"language":126536,"meta":24,"style":24},"\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",[100,134281,134282,134287,134294,134306,134318,134337,134354],{"__ignoreMap":24},[103,134283,134284],{"class":105,"line":106},[103,134285,134286],{"class":172},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[103,134288,134289,134292],{"class":105,"line":25},[103,134290,134291],{"class":1952},".icon",[103,134293,15562],{"class":113},[103,134295,134296,134298,134300,134302,134304],{"class":105,"line":1168},[103,134297,70558],{"class":162},[103,134299,51427],{"class":113},[103,134301,813],{"class":162},[103,134303,51482],{"class":109},[103,134305,1279],{"class":113},[103,134307,134308,134310,134312,134314,134316],{"class":105,"line":1183},[103,134309,70778],{"class":162},[103,134311,51427],{"class":113},[103,134313,813],{"class":162},[103,134315,51482],{"class":109},[103,134317,1279],{"class":113},[103,134319,134320,134322,134324,134326,134328,134331,134333,134335],{"class":105,"line":1189},[103,134321,70601],{"class":162},[103,134323,51427],{"class":113},[103,134325,61716],{"class":162},[103,134327,114],{"class":113},[103,134329,134330],{"class":5206},"sprites.png",[103,134332,13704],{"class":113},[103,134334,61726],{"class":162},[103,134336,1279],{"class":113},[103,134338,134339,134341,134343,134345,134347,134350,134352],{"class":105,"line":1203},[103,134340,128794],{"class":162},[103,134342,51427],{"class":113},[103,134344,51753],{"class":162},[103,134346,51482],{"class":109},[103,134348,134349],{"class":162}," -20",[103,134351,51482],{"class":109},[103,134353,1279],{"class":113},[103,134355,134356],{"class":105,"line":1209},[103,134357,1554],{"class":113},[1451,134359],{"style":126390,"src":134360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134362,134363],{},"在前端中坐标轴的正方向是右和下",[45,134365,134367],{"id":134366},"_123-字体图标","12.3 字体图标",[74,134369,134371],{"id":134370},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134373,134374],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134376,134377],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134379,134380],{},"1.图片文件还是比较大的。",[14,134382,134383],{},"2.图片本身放大和缩小会失真。",[14,134385,134386],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134388,134389,134390,25730],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[263,134391,134392],{},"字体图标 iconfont",[14,134394,134395,134398,134399,28375],{},[263,134396,134397],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[263,134400,134401],{},"展示的是图标，本质属于字体",[74,134403,134405],{"id":134404},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1120,134407,134408,134413,134416,134419,134422],{},[60,134409,134410,134412],{},[263,134411,25866],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[60,134414,134415],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[60,134417,134418],{},"兼容性：几乎支持所有的浏览器，请放心使用",[60,134420,134421],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[60,134423,134424],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[74,134426,134428],{"id":134427},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1120,134430,134431],{},[60,134432,134433,134434],{},"icomoon字体库：",[17,134435,134438],{"href":134436,"rel":134437},"http:\u002F\u002Ficomoon.io\u002F",[21],"http:\u002F\u002Ficomoon.io",[14,134440,134441],{},"进去之后点icomoon app",[1451,134443],{"style":126390,"src":134444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134446,134447],{},"可以对其编辑：",[1451,134449],{"style":126390,"src":134450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134452,134453],{},"生成字体：",[1451,134455],{"style":126390,"src":134456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134458,134459],{},"下载：",[1451,134461],{"style":126390,"src":134462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1120,134464,134465],{},[60,134466,134467,134468],{},"阿里iconfont字体库： ",[17,134469,134470],{"href":134470,"rel":134471},"http:\u002F\u002Fwww.iconfont.cn\u002F",[21],[74,134473,134475],{"id":134474},"_1234-字体图标的引入","12.3.4 字体图标的引入",[57,134477,134478],{},[60,134479,134480,134481,134484],{},"把下载包里面的 ",[263,134482,134483],{},"fonts"," 文件夹放入页面根目录下",[1451,134486],{"style":126390,"src":134487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[57,134489,134490],{"start":25},[60,134491,134492],{},"字体文件格式",[251,134494,134495,134504],{},[254,134496,134497],{},[257,134498,134499,134502],{},[260,134500,134501],{"align":23726},"格式",[260,134503,23730],{"align":23726},[298,134505,134506,134516,134526,134536],{},[257,134507,134508,134513],{},[303,134509,134510],{"align":23726},[263,134511,134512],{},".ttf",[303,134514,134515],{"align":23726},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[257,134517,134518,134523],{},[303,134519,134520],{"align":23726},[263,134521,134522],{},".woff",[303,134524,134525],{"align":23726},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[257,134527,134528,134533],{},[303,134529,134530],{"align":23726},[263,134531,134532],{},".eot",[303,134534,134535],{"align":23726},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[257,134537,134538,134543],{},[303,134539,134540],{"align":23726},[263,134541,134542],{},"svg",[303,134544,134545],{"align":23726},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[57,134547,134548],{"start":1168},[60,134549,134550],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[94,134552,134554],{"className":126534,"code":134553,"language":126536,"meta":24,"style":24},"\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",[100,134555,134556,134561,134568,134580,134596,134621,134642,134662,134682,134686,134692,134702,134713],{"__ignoreMap":24},[103,134557,134558],{"class":105,"line":106},[103,134559,134560],{"class":172},"\u002F* 引入字体图标 *\u002F\n",[103,134562,134563,134566],{"class":105,"line":25},[103,134564,134565],{"class":109},"@font-face",[103,134567,15562],{"class":113},[103,134569,134570,134573,134575,134578],{"class":105,"line":1168},[103,134571,134572],{"class":162},"  font-family",[103,134574,51427],{"class":113},[103,134576,134577],{"class":218},"'icomoon'",[103,134579,1279],{"class":113},[103,134581,134582,134585,134587,134589,134591,134594],{"class":105,"line":1183},[103,134583,134584],{"class":162},"  src",[103,134586,51427],{"class":113},[103,134588,61716],{"class":162},[103,134590,114],{"class":113},[103,134592,134593],{"class":218},"'fonts\u002Ficomoon.eot'",[103,134595,2708],{"class":113},[103,134597,134598,134600,134602,134604,134606,134609,134611,134614,134616,134619],{"class":105,"line":1189},[103,134599,134584],{"class":162},[103,134601,51427],{"class":113},[103,134603,61716],{"class":162},[103,134605,114],{"class":113},[103,134607,134608],{"class":218},"'fonts\u002Ficomoon.eot?#iefix'",[103,134610,13704],{"class":113},[103,134612,134613],{"class":162},"format",[103,134615,114],{"class":113},[103,134617,134618],{"class":218},"'embedded-opentype'",[103,134620,38037],{"class":113},[103,134622,134623,134626,134628,134631,134633,134635,134637,134640],{"class":105,"line":1203},[103,134624,134625],{"class":162},"       url",[103,134627,114],{"class":113},[103,134629,134630],{"class":218},"'fonts\u002Ficomoon.woff'",[103,134632,13704],{"class":113},[103,134634,134613],{"class":162},[103,134636,114],{"class":113},[103,134638,134639],{"class":218},"'woff'",[103,134641,38037],{"class":113},[103,134643,134644,134646,134648,134651,134653,134655,134657,134660],{"class":105,"line":1209},[103,134645,134625],{"class":162},[103,134647,114],{"class":113},[103,134649,134650],{"class":218},"'fonts\u002Ficomoon.ttf'",[103,134652,13704],{"class":113},[103,134654,134613],{"class":162},[103,134656,114],{"class":113},[103,134658,134659],{"class":218},"'truetype'",[103,134661,38037],{"class":113},[103,134663,134664,134666,134668,134671,134673,134675,134677,134680],{"class":105,"line":1300},[103,134665,134625],{"class":162},[103,134667,114],{"class":113},[103,134669,134670],{"class":218},"'fonts\u002Ficomoon.svg#icomoon'",[103,134672,13704],{"class":113},[103,134674,134613],{"class":162},[103,134676,114],{"class":113},[103,134678,134679],{"class":218},"'svg'",[103,134681,2708],{"class":113},[103,134683,134684],{"class":105,"line":1306},[103,134685,1554],{"class":113},[103,134687,134688,134690],{"class":105,"line":1318},[103,134689,134291],{"class":1952},[103,134691,15562],{"class":113},[103,134693,134694,134696,134698,134700],{"class":105,"line":1601},[103,134695,134572],{"class":162},[103,134697,51427],{"class":113},[103,134699,134577],{"class":218},[103,134701,1279],{"class":113},[103,134703,134704,134707,134709,134711],{"class":105,"line":1606},[103,134705,134706],{"class":162},"  font-style",[103,134708,51427],{"class":113},[103,134710,63831],{"class":162},[103,134712,1279],{"class":113},[103,134714,134715],{"class":105,"line":1612},[103,134716,1554],{"class":113},[14,134718,134719],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1451,134721],{"style":126390,"src":134722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[57,134724,134725],{"start":1183},[60,134726,134727],{},"添加字体",[1451,134729],{"style":126390,"src":134730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134732,134733],{},"复制：",[1451,134735],{"style":126390,"src":134736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134738,134739],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[57,134741,134742],{"start":1189},[60,134743,134744],{},"代码展示：",[94,134746,134747],{"className":126534,"code":134553,"language":126536,"meta":24,"style":24},[100,134748,134749,134753,134759,134769,134783,134805,134823,134841,134859,134863,134869,134879,134889],{"__ignoreMap":24},[103,134750,134751],{"class":105,"line":106},[103,134752,134560],{"class":172},[103,134754,134755,134757],{"class":105,"line":25},[103,134756,134565],{"class":109},[103,134758,15562],{"class":113},[103,134760,134761,134763,134765,134767],{"class":105,"line":1168},[103,134762,134572],{"class":162},[103,134764,51427],{"class":113},[103,134766,134577],{"class":218},[103,134768,1279],{"class":113},[103,134770,134771,134773,134775,134777,134779,134781],{"class":105,"line":1183},[103,134772,134584],{"class":162},[103,134774,51427],{"class":113},[103,134776,61716],{"class":162},[103,134778,114],{"class":113},[103,134780,134593],{"class":218},[103,134782,2708],{"class":113},[103,134784,134785,134787,134789,134791,134793,134795,134797,134799,134801,134803],{"class":105,"line":1189},[103,134786,134584],{"class":162},[103,134788,51427],{"class":113},[103,134790,61716],{"class":162},[103,134792,114],{"class":113},[103,134794,134608],{"class":218},[103,134796,13704],{"class":113},[103,134798,134613],{"class":162},[103,134800,114],{"class":113},[103,134802,134618],{"class":218},[103,134804,38037],{"class":113},[103,134806,134807,134809,134811,134813,134815,134817,134819,134821],{"class":105,"line":1203},[103,134808,134625],{"class":162},[103,134810,114],{"class":113},[103,134812,134630],{"class":218},[103,134814,13704],{"class":113},[103,134816,134613],{"class":162},[103,134818,114],{"class":113},[103,134820,134639],{"class":218},[103,134822,38037],{"class":113},[103,134824,134825,134827,134829,134831,134833,134835,134837,134839],{"class":105,"line":1209},[103,134826,134625],{"class":162},[103,134828,114],{"class":113},[103,134830,134650],{"class":218},[103,134832,13704],{"class":113},[103,134834,134613],{"class":162},[103,134836,114],{"class":113},[103,134838,134659],{"class":218},[103,134840,38037],{"class":113},[103,134842,134843,134845,134847,134849,134851,134853,134855,134857],{"class":105,"line":1300},[103,134844,134625],{"class":162},[103,134846,114],{"class":113},[103,134848,134670],{"class":218},[103,134850,13704],{"class":113},[103,134852,134613],{"class":162},[103,134854,114],{"class":113},[103,134856,134679],{"class":218},[103,134858,2708],{"class":113},[103,134860,134861],{"class":105,"line":1306},[103,134862,1554],{"class":113},[103,134864,134865,134867],{"class":105,"line":1318},[103,134866,134291],{"class":1952},[103,134868,15562],{"class":113},[103,134870,134871,134873,134875,134877],{"class":105,"line":1601},[103,134872,134572],{"class":162},[103,134874,51427],{"class":113},[103,134876,134577],{"class":218},[103,134878,1279],{"class":113},[103,134880,134881,134883,134885,134887],{"class":105,"line":1606},[103,134882,134706],{"class":162},[103,134884,51427],{"class":113},[103,134886,63831],{"class":162},[103,134888,1279],{"class":113},[103,134890,134891],{"class":105,"line":1612},[103,134892,1554],{"class":113},[1451,134894],{"style":126390,"src":134895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134897,134898],{},"更加细节展示：",[57,134900,134901],{},[60,134902,134903],{},"html 标签内添加小图标",[1451,134905],{"style":126390,"src":134906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[57,134908,134909],{"start":25},[60,134910,134911],{},"给标签定义字体",[94,134913,134914],{"className":127281,"code":130638,"language":127283,"meta":24,"style":24},[100,134915,134916,134920,134934,134938],{"__ignoreMap":24},[103,134917,134918],{"class":105,"line":106},[103,134919,130645],{"class":172},[103,134921,134922,134924,134926,134928,134930,134932],{"class":105,"line":25},[103,134923,1023],{"class":113},[103,134925,51601],{"class":51290},[103,134927,53476],{"class":1952},[103,134929,159],{"class":113},[103,134931,130658],{"class":218},[103,134933,51297],{"class":113},[103,134935,134936],{"class":105,"line":1168},[103,134937,130665],{"class":113},[103,134939,134940,134942,134944],{"class":105,"line":1183},[103,134941,51775],{"class":113},[103,134943,51601],{"class":51290},[103,134945,51297],{"class":113},[14,134947,134948],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1451,134950],{"style":126390,"src":134951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[74,134953,134955],{"id":134954},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,134957,134958],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,134960,134961,134962,134965],{},"把压缩包里面的 ",[263,134963,134964],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,134967,134968],{},"打开网站，点下方：",[1451,134970],{"style":126390,"src":134971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1451,134973],{"style":126390,"src":134974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1451,134976],{"style":126390,"src":134977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,134979,134980],{},"点yes重新加载",[14,134982,134983],{},"然后重复之前的操作就可以实现了",[14,134985,134986],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[74,134988,134990],{"id":134989},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1451,134992],{"style":126390,"src":134993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5116,134995,134996],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":24,"searchDepth":25,"depth":25,"links":134998},[134999,135005,135010],{"id":133602,"depth":25,"text":133603,"children":135000},[135001,135002,135003,135004],{"id":133614,"depth":1168,"text":133615},{"id":133643,"depth":1168,"text":133644},{"id":133671,"depth":1168,"text":133672},{"id":133729,"depth":1168,"text":133730},{"id":134201,"depth":25,"text":134202,"children":135006},[135007,135008,135009],{"id":134205,"depth":1168,"text":134206},{"id":134250,"depth":1168,"text":134251},{"id":134266,"depth":1168,"text":134267},{"id":134366,"depth":25,"text":134367,"children":135011},[135012,135013,135014,135015,135016,135017],{"id":134370,"depth":1168,"text":134371},{"id":134404,"depth":1168,"text":134405},{"id":134427,"depth":1168,"text":134428},{"id":134474,"depth":1168,"text":134475},{"id":134954,"depth":1168,"text":134955},{"id":134989,"depth":1168,"text":134990},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133594,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135024,"title":135025,"body":135026,"description":27,"extension":28,"meta":136253,"navigation":30,"path":136254,"seo":136255,"stem":136256,"__hash__":136257},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135027,"toc":136234},[135028,135031,135035,135038,135052,135120,135150,135153,135157,135161,135263,135310,135314,135317,135320,135354,135357,135360,135363,135366,135369,135372,135375,135377,135380,135383,135386,135389,135392,135395,135398,135426,135429,135433,135436,135443,135446,135449,135475,135478,135482,135485,135488,135495,135499,135502,135504,135536,135539,135542,135554,135560,135563,135566,135569,135571,135575,135578,135581,135584,135629,135633,135635,135638,135645,135687,135690,135694,135699,135713,135717,135720,135723,135726,135729,135732,135766,135769,135772,135826,135829,135832,135835,135838,135890,135893,135896,135945,135949,135951,135954,135957,135960,135963,135966,136024,136027,136033,136036,136039,136071,136074,136078,136082,136085,136117,136121,136124,136168,136172,136175,136178,136181,136184,136187,136190,136193,136195,136198,136200,136203,136206,136209,136212,136217,136220,136222,136225,136228,136231],[10,135029,135025],{"id":135030},"_13-界面样式与布局技巧",[45,135032,135034],{"id":135033},"_131-css三角","13.1 css三角",[14,135036,135037],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1120,135039,135040,135043,135046,135049],{},[60,135041,135042],{},"用css 边框可以模拟三角效果",[60,135044,135045],{},"宽度高度为0",[60,135047,135048],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[60,135050,135051],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[94,135053,135055],{"className":126534,"code":135054,"language":126536,"meta":24,"style":24},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[100,135056,135057,135062,135069,135079,135089,135105,135116],{"__ignoreMap":24},[103,135058,135059],{"class":105,"line":106},[103,135060,135061],{"class":172},"\u002F* CSS 实现三角形 *\u002F\n",[103,135063,135064,135067],{"class":105,"line":25},[103,135065,135066],{"class":1952},".triangle",[103,135068,15562],{"class":113},[103,135070,135071,135073,135075,135077],{"class":105,"line":1168},[103,135072,70558],{"class":162},[103,135074,51427],{"class":113},[103,135076,305],{"class":162},[103,135078,1279],{"class":113},[103,135080,135081,135083,135085,135087],{"class":105,"line":1183},[103,135082,70778],{"class":162},[103,135084,51427],{"class":113},[103,135086,305],{"class":162},[103,135088,1279],{"class":113},[103,135090,135091,135093,135095,135097,135099,135101,135103],{"class":105,"line":1189},[103,135092,70886],{"class":162},[103,135094,51427],{"class":113},[103,135096,559],{"class":162},[103,135098,51482],{"class":109},[103,135100,51511],{"class":162},[103,135102,63981],{"class":162},[103,135104,1279],{"class":113},[103,135106,135107,135110,135112,135114],{"class":105,"line":1203},[103,135108,135109],{"class":162},"  border-bottom-color",[103,135111,51427],{"class":113},[103,135113,62359],{"class":162},[103,135115,1279],{"class":113},[103,135117,135118],{"class":105,"line":1209},[103,135119,1554],{"class":113},[94,135121,135122],{"className":126534,"code":130691,"language":126536,"meta":24,"style":24},[100,135123,135124,135130,135146],{"__ignoreMap":24},[103,135125,135126,135128],{"class":105,"line":106},[103,135127,51601],{"class":51290},[103,135129,15562],{"class":113},[103,135131,135132,135134,135136,135138,135140,135142,135144],{"class":105,"line":25},[103,135133,70886],{"class":162},[103,135135,51427],{"class":113},[103,135137,331],{"class":162},[103,135139,51482],{"class":109},[103,135141,51511],{"class":162},[103,135143,129926],{"class":162},[103,135145,1279],{"class":113},[103,135147,135148],{"class":105,"line":1168},[103,135149,1554],{"class":113},[1451,135151],{"style":126390,"src":135152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[45,135154,135156],{"id":135155},"_132-css用户界面样式","13.2 css用户界面样式",[74,135158,135160],{"id":135159},"_1321-鼠标样式","13.2.1 鼠标样式",[94,135162,135164],{"className":126534,"code":135163,"language":126536,"meta":24,"style":24},"\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",[100,135165,135166,135171,135190,135208,135227,135244],{"__ignoreMap":24},[103,135167,135168],{"class":105,"line":106},[103,135169,135170],{"class":172},"\u002F* 鼠标样式 *\u002F\n",[103,135172,135173,135175,135177,135180,135182,135184,135187],{"class":105,"line":25},[103,135174,51601],{"class":51290},[103,135176,79797],{"class":113},[103,135178,135179],{"class":162},"cursor",[103,135181,51427],{"class":113},[103,135183,62020],{"class":162},[103,135185,135186],{"class":113},"; }   ",[103,135188,135189],{"class":172},"\u002F* 手型 *\u002F\n",[103,135191,135192,135194,135196,135198,135200,135203,135205],{"class":105,"line":1168},[103,135193,51601],{"class":51290},[103,135195,79797],{"class":113},[103,135197,135179],{"class":162},[103,135199,51427],{"class":113},[103,135201,135202],{"class":162},"default",[103,135204,135186],{"class":113},[103,135206,135207],{"class":172},"\u002F* 默认 *\u002F\n",[103,135209,135210,135212,135214,135216,135218,135221,135224],{"class":105,"line":1183},[103,135211,51601],{"class":51290},[103,135213,79797],{"class":113},[103,135215,135179],{"class":162},[103,135217,51427],{"class":113},[103,135219,135220],{"class":162},"move",[103,135222,135223],{"class":113},"; }      ",[103,135225,135226],{"class":172},"\u002F* 移动 *\u002F\n",[103,135228,135229,135231,135233,135235,135237,135239,135241],{"class":105,"line":1189},[103,135230,51601],{"class":51290},[103,135232,79797],{"class":113},[103,135234,135179],{"class":162},[103,135236,51427],{"class":113},[103,135238,5177],{"class":162},[103,135240,135223],{"class":113},[103,135242,135243],{"class":172},"\u002F* 文本 *\u002F\n",[103,135245,135246,135248,135250,135252,135254,135257,135260],{"class":105,"line":1203},[103,135247,51601],{"class":51290},[103,135249,79797],{"class":113},[103,135251,135179],{"class":162},[103,135253,51427],{"class":113},[103,135255,135256],{"class":162},"not-allowed",[103,135258,135259],{"class":113},"; } ",[103,135261,135262],{"class":172},"\u002F* 禁止 *\u002F\n",[251,135264,135265,135273],{},[254,135266,135267],{},[257,135268,135269,135271],{},[260,135270,126998],{"align":23726},[260,135272,27479],{"align":23726},[298,135274,135275,135282,135289,135296,135303],{},[257,135276,135277,135279],{},[303,135278,135202],{"align":23726},[303,135280,135281],{"align":23726},"小白 默认",[257,135283,135284,135286],{},[303,135285,62020],{"align":23726},[303,135287,135288],{"align":23726},"小手",[257,135290,135291,135293],{},[303,135292,135220],{"align":23726},[303,135294,135295],{"align":23726},"移动",[257,135297,135298,135300],{},[303,135299,5177],{"align":23726},[303,135301,135302],{"align":23726},"文本",[257,135304,135305,135307],{},[303,135306,135256],{"align":23726},[303,135308,135309],{"align":23726},"禁止",[74,135311,135313],{"id":135312},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135315,135316],{},"去除表单轮廓线",[14,135318,135319],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[94,135321,135322],{"className":126534,"code":129898,"language":126536,"meta":24,"style":24},[100,135323,135324,135328,135334,135350],{"__ignoreMap":24},[103,135325,135326],{"class":105,"line":106},[103,135327,129905],{"class":172},[103,135329,135330,135332],{"class":105,"line":25},[103,135331,51601],{"class":51290},[103,135333,15562],{"class":113},[103,135335,135336,135338,135340,135342,135344,135346,135348],{"class":105,"line":1168},[103,135337,70886],{"class":162},[103,135339,51427],{"class":113},[103,135341,331],{"class":162},[103,135343,51482],{"class":109},[103,135345,51511],{"class":162},[103,135347,129926],{"class":162},[103,135349,1279],{"class":113},[103,135351,135352],{"class":105,"line":1183},[103,135353,1554],{"class":113},[14,135355,135356],{},"文本域：",[1451,135358],{"style":126390,"src":135359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135361,135362],{},"此时会有一个空白区域",[1451,135364],{"style":126390,"src":135365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135367,135368],{},"写在同一行就不会出现这个问题",[1451,135370],{"style":126390,"src":135371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135373,135374],{},"文本域是行内块元素，一定记住！！！",[14,135376,98223],{},[1451,135378],{"style":126390,"src":135379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135381,135382],{},"文本域尽量放在一行",[14,135384,135385],{},"知识回顾：cols是列，rols是行",[1451,135387],{"style":126390,"src":135388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135390,135391],{},"它可以进行拖动，显然这是我们不愿意看到的",[1451,135393],{"style":126390,"src":135394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135396,135397],{},"使用resize进行解决",[94,135399,135401],{"className":126534,"code":135400,"language":126536,"meta":24,"style":24},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[100,135402,135403,135409,135422],{"__ignoreMap":24},[103,135404,135405,135407],{"class":105,"line":106},[103,135406,53811],{"class":51290},[103,135408,15562],{"class":113},[103,135410,135411,135413,135415,135417,135419],{"class":105,"line":25},[103,135412,70788],{"class":162},[103,135414,51427],{"class":113},[103,135416,54727],{"class":162},[103,135418,130397],{"class":113},[103,135420,135421],{"class":172},"\u002F* 取消表单轮廓线 *\u002F\n",[103,135423,135424],{"class":105,"line":1168},[103,135425,1554],{"class":113},[14,135427,135428],{},"此时就无法通过右下方实现拖动了",[74,135430,135432],{"id":135431},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135434,135435],{},"实现一个盒子中的文字和图片对齐",[14,135437,135438,135439,135442],{},"用于设置一个元素的 ",[263,135440,135441],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135444,135445],{},"图片和文字默认是基线对齐",[1451,135447],{"style":126390,"src":135448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[94,135450,135451],{"className":126534,"code":135400,"language":126536,"meta":24,"style":24},[100,135452,135453,135459,135471],{"__ignoreMap":24},[103,135454,135455,135457],{"class":105,"line":106},[103,135456,53811],{"class":51290},[103,135458,15562],{"class":113},[103,135460,135461,135463,135465,135467,135469],{"class":105,"line":25},[103,135462,70788],{"class":162},[103,135464,51427],{"class":113},[103,135466,54727],{"class":162},[103,135468,130397],{"class":113},[103,135470,135421],{"class":172},[103,135472,135473],{"class":105,"line":1168},[103,135474,1554],{"class":113},[1451,135476],{"style":126390,"src":135477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21988,135479,135481],{"id":135480},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135483,135484],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1451,135486],{"style":126390,"src":135487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135489,135490,135491,135494],{},"此时可以给图片、表单这些行内块元素的 ",[263,135492,135493],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21988,135496,135498],{"id":135497},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135500,135501],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135503,14623],{},[94,135505,135507],{"className":126534,"code":135506,"language":126536,"meta":24,"style":24},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[100,135508,135509,135514,135520,135532],{"__ignoreMap":24},[103,135510,135511],{"class":105,"line":106},[103,135512,135513],{"class":172},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[103,135515,135516,135518],{"class":105,"line":25},[103,135517,1451],{"class":51290},[103,135519,15562],{"class":113},[103,135521,135522,135525,135527,135530],{"class":105,"line":1168},[103,135523,135524],{"class":162},"  vertical-align",[103,135526,51427],{"class":113},[103,135528,135529],{"class":162},"middle",[103,135531,1279],{"class":113},[103,135533,135534],{"class":105,"line":1183},[103,135535,1554],{"class":113},[1451,135537],{"style":126390,"src":135538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135540,135541],{},"主要解决方法有两种：",[57,135543,135544],{},[60,135545,135546,135549,135550,135553],{},[263,135547,135548],{},"给图片"," 添加 ",[263,135551,135552],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135555,135556,135557],{},"2.把图片转换为块级元素 ",[263,135558,135559],{},"display: block",[14,135561,135562],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135564,135565],{},"img {",[14,135567,135568],{},"vertical-align:middle;",[14,135570,1059],{},[74,135572,135574],{"id":135573},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135576,135577],{},"效果：",[1451,135579],{"style":126390,"src":135580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135582,135583],{},"单行文本溢出显示省略号--必须满足三个条件：",[94,135585,135587],{"className":126534,"code":135586,"language":126536,"meta":24,"style":24},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[100,135588,135589,135594,135600,135610,135615,135625],{"__ignoreMap":24},[103,135590,135591],{"class":105,"line":106},[103,135592,135593],{"class":172},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[103,135595,135596,135598],{"class":105,"line":25},[103,135597,1451],{"class":51290},[103,135599,15562],{"class":113},[103,135601,135602,135604,135606,135608],{"class":105,"line":1168},[103,135603,135524],{"class":162},[103,135605,51427],{"class":113},[103,135607,135529],{"class":162},[103,135609,1279],{"class":113},[103,135611,135612],{"class":105,"line":1183},[103,135613,135614],{"class":172},"  \u002F* 或 *\u002F\n",[103,135616,135617,135619,135621,135623],{"class":105,"line":1189},[103,135618,128150],{"class":162},[103,135620,51427],{"class":113},[103,135622,60859],{"class":162},[103,135624,1279],{"class":113},[103,135626,135627],{"class":105,"line":1203},[103,135628,1554],{"class":113},[74,135630,135632],{"id":135631},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135634,135577],{},[1451,135636],{"style":126390,"src":135637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135639,135640,135641,135644],{},"多行文本溢出显示省略号， ",[263,135642,135643],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[94,135646,135647],{"className":126534,"code":135586,"language":126536,"meta":24,"style":24},[100,135648,135649,135653,135659,135669,135673,135683],{"__ignoreMap":24},[103,135650,135651],{"class":105,"line":106},[103,135652,135593],{"class":172},[103,135654,135655,135657],{"class":105,"line":25},[103,135656,1451],{"class":51290},[103,135658,15562],{"class":113},[103,135660,135661,135663,135665,135667],{"class":105,"line":1168},[103,135662,135524],{"class":162},[103,135664,51427],{"class":113},[103,135666,135529],{"class":162},[103,135668,1279],{"class":113},[103,135670,135671],{"class":105,"line":1183},[103,135672,135614],{"class":172},[103,135674,135675,135677,135679,135681],{"class":105,"line":1189},[103,135676,128150],{"class":162},[103,135678,51427],{"class":113},[103,135680,60859],{"class":162},[103,135682,1279],{"class":113},[103,135684,135685],{"class":105,"line":1203},[103,135686,1554],{"class":113},[14,135688,135689],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[45,135691,135693],{"id":135692},"_133-常见布局技巧","13.3 常见布局技巧",[14,135695,135696],{},[263,135697,135698],{},"巧妙利用一个技术更快更好的布局：",[57,135700,135701,135704,135707,135710],{},[60,135702,135703],{},"margin负值的运用",[60,135705,135706],{},"文字围绕浮动元素",[60,135708,135709],{},"行内块的巧妙运用",[60,135711,135712],{},"CSS三角强化",[74,135714,135716],{"id":135715},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135718,135719],{},"应用场景：",[1451,135721],{"style":126390,"src":135722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1451,135724],{"style":126390,"src":135725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135727,135728],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135730,135731],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[94,135733,135734],{"className":126534,"code":129898,"language":126536,"meta":24,"style":24},[100,135735,135736,135740,135746,135762],{"__ignoreMap":24},[103,135737,135738],{"class":105,"line":106},[103,135739,129905],{"class":172},[103,135741,135742,135744],{"class":105,"line":25},[103,135743,51601],{"class":51290},[103,135745,15562],{"class":113},[103,135747,135748,135750,135752,135754,135756,135758,135760],{"class":105,"line":1168},[103,135749,70886],{"class":162},[103,135751,51427],{"class":113},[103,135753,331],{"class":162},[103,135755,51482],{"class":109},[103,135757,51511],{"class":162},[103,135759,129926],{"class":162},[103,135761,1279],{"class":113},[103,135763,135764],{"class":105,"line":1183},[103,135765,1554],{"class":113},[1451,135767],{"style":126390,"src":135768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135770,135771],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[94,135773,135775],{"className":126534,"code":135774,"language":126536,"meta":24,"style":24},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[100,135776,135777,135782,135788,135798,135810,135822],{"__ignoreMap":24},[103,135778,135779],{"class":105,"line":106},[103,135780,135781],{"class":172},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[103,135783,135784,135786],{"class":105,"line":25},[103,135785,130382],{"class":1952},[103,135787,15562],{"class":113},[103,135789,135790,135792,135794,135796],{"class":105,"line":1168},[103,135791,132340],{"class":162},[103,135793,51427],{"class":113},[103,135795,54754],{"class":162},[103,135797,1279],{"class":113},[103,135799,135800,135802,135804,135806,135808],{"class":105,"line":1183},[103,135801,132354],{"class":162},[103,135803,51427],{"class":113},[103,135805,559],{"class":162},[103,135807,51482],{"class":109},[103,135809,1279],{"class":113},[103,135811,135812,135814,135816,135818,135820],{"class":105,"line":1189},[103,135813,132371],{"class":162},[103,135815,51427],{"class":113},[103,135817,813],{"class":162},[103,135819,51482],{"class":109},[103,135821,1279],{"class":113},[103,135823,135824],{"class":105,"line":1203},[103,135825,1554],{"class":113},[14,135827,135828],{},"加上上述代码会发现：",[1451,135830],{"style":126390,"src":135831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135833,135834],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135836,135837],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[94,135839,135840],{"className":126534,"code":135774,"language":126536,"meta":24,"style":24},[100,135841,135842,135846,135852,135862,135874,135886],{"__ignoreMap":24},[103,135843,135844],{"class":105,"line":106},[103,135845,135781],{"class":172},[103,135847,135848,135850],{"class":105,"line":25},[103,135849,130382],{"class":1952},[103,135851,15562],{"class":113},[103,135853,135854,135856,135858,135860],{"class":105,"line":1168},[103,135855,132340],{"class":162},[103,135857,51427],{"class":113},[103,135859,54754],{"class":162},[103,135861,1279],{"class":113},[103,135863,135864,135866,135868,135870,135872],{"class":105,"line":1183},[103,135865,132354],{"class":162},[103,135867,51427],{"class":113},[103,135869,559],{"class":162},[103,135871,51482],{"class":109},[103,135873,1279],{"class":113},[103,135875,135876,135878,135880,135882,135884],{"class":105,"line":1189},[103,135877,132371],{"class":162},[103,135879,51427],{"class":113},[103,135881,813],{"class":162},[103,135883,51482],{"class":109},[103,135885,1279],{"class":113},[103,135887,135888],{"class":105,"line":1203},[103,135889,1554],{"class":113},[14,135891,135892],{},"解决方式2：",[14,135894,135895],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[94,135897,135899],{"className":126534,"code":135898,"language":126536,"meta":24,"style":24},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[100,135900,135901,135907,135917,135929,135941],{"__ignoreMap":24},[103,135902,135903,135905],{"class":105,"line":106},[103,135904,51601],{"class":51290},[103,135906,15562],{"class":113},[103,135908,135909,135911,135913,135915],{"class":105,"line":25},[103,135910,132340],{"class":162},[103,135912,51427],{"class":113},[103,135914,54754],{"class":162},[103,135916,1279],{"class":113},[103,135918,135919,135921,135923,135925,135927],{"class":105,"line":1168},[103,135920,132354],{"class":162},[103,135922,51427],{"class":113},[103,135924,559],{"class":162},[103,135926,51482],{"class":109},[103,135928,1279],{"class":113},[103,135930,135931,135933,135935,135937,135939],{"class":105,"line":1183},[103,135932,132371],{"class":162},[103,135934,51427],{"class":113},[103,135936,813],{"class":162},[103,135938,51482],{"class":109},[103,135940,1279],{"class":113},[103,135942,135943],{"class":105,"line":1189},[103,135944,1554],{"class":113},[74,135946,135948],{"id":135947},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,135950,135719],{},[1451,135952],{"style":126390,"src":135953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,135955,135956],{},"实现结构图：",[1451,135958],{"style":126390,"src":135959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,135961,135962],{},"巧妙运用浮动元素不会压住文字的特性",[14,135964,135965],{},"代码显示：",[94,135967,135969],{"className":126534,"code":135968,"language":126536,"meta":24,"style":24},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[100,135970,135971,135977,135987,135991,135996,136000,136006,136020],{"__ignoreMap":24},[103,135972,135973,135975],{"class":105,"line":106},[103,135974,130382],{"class":1952},[103,135976,15562],{"class":113},[103,135978,135979,135981,135983,135985],{"class":105,"line":25},[103,135980,131014],{"class":162},[103,135982,51427],{"class":113},[103,135984,23726],{"class":162},[103,135986,1279],{"class":113},[103,135988,135989],{"class":105,"line":1168},[103,135990,1554],{"class":113},[103,135992,135993],{"class":105,"line":1183},[103,135994,135995],{"class":113},"```Css\n",[103,135997,135998],{"class":105,"line":1189},[103,135999,130377],{"class":172},[103,136001,136002,136004],{"class":105,"line":1203},[103,136003,130382],{"class":1952},[103,136005,15562],{"class":113},[103,136007,136008,136010,136012,136014,136016,136018],{"class":105,"line":1209},[103,136009,70460],{"class":162},[103,136011,51427],{"class":113},[103,136013,305],{"class":162},[103,136015,51546],{"class":162},[103,136017,130397],{"class":113},[103,136019,130400],{"class":172},[103,136021,136022],{"class":105,"line":1300},[103,136023,1554],{"class":113},[14,136025,136026],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[94,136028,136031],{"className":136029,"code":136030,"language":5177},[5175],"\n对行内元素转换为行内块元素之后，就可以设置宽和高了\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-107.png\">\n\n此时要实现整体居中可以使用text-align:center\n\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[100,136032,136030],{"__ignoreMap":24},[1451,136034],{"style":126390,"src":136035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136037,136038],{},"最终展示结果：",[94,136040,136041],{"className":126534,"code":130370,"language":126536,"meta":24,"style":24},[100,136042,136043,136047,136053,136067],{"__ignoreMap":24},[103,136044,136045],{"class":105,"line":106},[103,136046,130377],{"class":172},[103,136048,136049,136051],{"class":105,"line":25},[103,136050,130382],{"class":1952},[103,136052,15562],{"class":113},[103,136054,136055,136057,136059,136061,136063,136065],{"class":105,"line":1168},[103,136056,70460],{"class":162},[103,136058,51427],{"class":113},[103,136060,305],{"class":162},[103,136062,51546],{"class":162},[103,136064,130397],{"class":113},[103,136066,130400],{"class":172},[103,136068,136069],{"class":105,"line":1183},[103,136070,1554],{"class":113},[1451,136072],{"style":126390,"src":136073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[45,136075,136077],{"id":136076},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[74,136079,136081],{"id":136080},"_1341-原理","13.4.1 原理",[1451,136083],{"style":126390,"src":136084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[94,136086,136087],{"className":126534,"code":130370,"language":126536,"meta":24,"style":24},[100,136088,136089,136093,136099,136113],{"__ignoreMap":24},[103,136090,136091],{"class":105,"line":106},[103,136092,130377],{"class":172},[103,136094,136095,136097],{"class":105,"line":25},[103,136096,130382],{"class":1952},[103,136098,15562],{"class":113},[103,136100,136101,136103,136105,136107,136109,136111],{"class":105,"line":1168},[103,136102,70460],{"class":162},[103,136104,51427],{"class":113},[103,136106,305],{"class":162},[103,136108,51546],{"class":162},[103,136110,130397],{"class":113},[103,136112,130400],{"class":172},[103,136114,136115],{"class":105,"line":1183},[103,136116,1554],{"class":113},[74,136118,136120],{"id":136119},"_1342-实例","13.4.2 实例",[1451,136122],{"style":126390,"src":136123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[94,136125,136126],{"className":126534,"code":131000,"language":126536,"meta":24,"style":24},[100,136127,136128,136134,136144,136148,136154,136164],{"__ignoreMap":24},[103,136129,136130,136132],{"class":105,"line":106},[103,136131,131007],{"class":1952},[103,136133,15562],{"class":113},[103,136135,136136,136138,136140,136142],{"class":105,"line":25},[103,136137,131014],{"class":162},[103,136139,51427],{"class":113},[103,136141,23726],{"class":162},[103,136143,1279],{"class":113},[103,136145,136146],{"class":105,"line":1168},[103,136147,1554],{"class":113},[103,136149,136150,136152],{"class":105,"line":1183},[103,136151,131029],{"class":1952},[103,136153,15562],{"class":113},[103,136155,136156,136158,136160,136162],{"class":105,"line":1189},[103,136157,131014],{"class":162},[103,136159,51427],{"class":113},[103,136161,72512],{"class":162},[103,136163,1279],{"class":113},[103,136165,136166],{"class":105,"line":1203},[103,136167,1554],{"class":113},[45,136169,136171],{"id":136170},"_135-css的初始化","13.5 css的初始化",[14,136173,136174],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136176,136177],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136179,136180],{},"每个网页都必须首先进行 CSS初始化。",[14,136182,136183],{},"这里我们以 京东CSS初始化代码为例。",[14,136185,136186],{},"在网页右键查看网页源代码",[14,136188,136189],{},"找到css的link引入语句",[14,136191,136192],{},"然后ctrl+f 输入body",[14,136194,77216],{},[1451,136196],{"style":126390,"src":136197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136199,77239],{},[1451,136201],{"style":126390,"src":136202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136204,136205],{},"③打开了网页上传压缩的代码",[1451,136207],{"style":126390,"src":136208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136210,136211],{},"④从body前可以查看这个网页的初始化代码",[14,136213,136214],{},[263,136215,136216],{},"Unicode编码字体：",[14,136218,136219],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136221,83197],{},[14,136223,136224],{},"黑体 \\9ED1\\4F53",[14,136226,136227],{},"宋体 \\5B8B\\4F53",[14,136229,136230],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5116,136232,136233],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":24,"searchDepth":25,"depth":25,"links":136235},[136236,136237,136244,136248,136252],{"id":135033,"depth":25,"text":135034},{"id":135155,"depth":25,"text":135156,"children":136238},[136239,136240,136241,136242,136243],{"id":135159,"depth":1168,"text":135160},{"id":135312,"depth":1168,"text":135313},{"id":135431,"depth":1168,"text":135432},{"id":135573,"depth":1168,"text":135574},{"id":135631,"depth":1168,"text":135632},{"id":135692,"depth":25,"text":135693,"children":136245},[136246,136247],{"id":135715,"depth":1168,"text":135716},{"id":135947,"depth":1168,"text":135948},{"id":136076,"depth":25,"text":136077,"children":136249},[136250,136251],{"id":136080,"depth":1168,"text":136081},{"id":136119,"depth":1168,"text":136120},{"id":136170,"depth":25,"text":136171},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135025,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136259,"title":136260,"body":136261,"description":27,"extension":28,"meta":137947,"navigation":30,"path":137948,"seo":137949,"stem":137950,"__hash__":137951},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136262,"toc":137936},[136263,136266,136270,136274,136277,136284,136287,136290,136328,136331,136333,136347,136351,136360,136364,136369,136372,136375,136378,136413,136418,136421,136451,136454,136459,136462,136465,136495,136498,136552,136555,136559,136564,136576,136579,136583,136613,136616,136621,136624,136654,136657,136661,136678,136682,136686,136689,136722,136725,136729,136732,136735,136738,136741,136744,136855,136858,136861,136864,136966,136969,136973,136977,136981,136984,137024,137027,137029,137045,137049,137052,137057,137138,137141,137144,137270,137275,137278,137286,137289,137294,137379,137382,137386,137389,137392,137396,137416,137421,137505,137508,137513,137516,137519,137597,137600,137603,137606,137609,137612,137617,137620,137623,137695,137698,137703,137706,137803,137806,137812,137815,137818,137821,137824,137827,137830,137833,137836,137840,137845,137848,137881,137886,137889,137930,137933],[10,136264,136260],{"id":136265},"_14-html5与css3新特性",[45,136267,136269],{"id":136268},"_141-html5的新特性","14.1 HTML5的新特性",[74,136271,136273],{"id":136272},"_1411-基本标签","14.1.1 基本标签",[14,136275,136276],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136278,136279,136280,136283],{},"这些新特性都有兼容性问题，基本是 ",[263,136281,136282],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136285,136286],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136288,136289],{},"现在使用的是新特性：",[1120,136291,136292,136298,136304,136310,136316,136322],{},[60,136293,136294,136297],{},[100,136295,136296],{},"\u003Cheader>"," 头部标签",[60,136299,136300,136303],{},[100,136301,136302],{},"\u003Cnav>"," 导航标签",[60,136305,136306,136309],{},[100,136307,136308],{},"\u003Carticle>"," 内容标签",[60,136311,136312,136315],{},[100,136313,136314],{},"\u003Csection>"," 定义文档某个区域",[60,136317,136318,136321],{},[100,136319,136320],{},"\u003Caside>"," 侧边栏标签",[60,136323,136324,136327],{},[100,136325,136326],{},"\u003Cfooter>"," 尾部标签",[1451,136329],{"style":126390,"src":136330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136332,143],{},[1120,136334,136335,136338,136341,136344],{},[60,136336,136337],{},"这种语义化标准主要是针对搜索引擎的",[60,136339,136340],{},"这些标签页面中可以经常使用",[60,136342,136343],{},"在IE9中，需要把这些元素转换为块级元素",[60,136345,136346],{},"移动端更喜欢使用这些标签",[74,136348,136350],{"id":136349},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136352,136353,136354,136356,136357,136359],{},"音频 ",[263,136355,28164],{}," 和视频 ",[263,136358,28173],{}," 两个标签",[21988,136361,136363],{"id":136362},"_14121-视频标签-video","14.1.2.1 视频标签- video",[57,136365,136366],{},[60,136367,136368],{},"支持格式：",[1451,136370],{"style":126390,"src":136371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136373,136374],{},"尽量使用MP4，兼容性好",[14,136376,136377],{},"用MP4就可以",[94,136379,136381],{"className":127281,"code":136380,"language":127283,"meta":24,"style":24},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[100,136382,136383],{"__ignoreMap":24},[103,136384,136385,136387,136389,136391,136393,136396,136398,136401,136404,136407,136409,136411],{"class":105,"line":106},[103,136386,1023],{"class":113},[103,136388,28173],{"class":51290},[103,136390,55229],{"class":1952},[103,136392,159],{"class":113},[103,136394,136395],{"class":218},"\"movie.mp4\"",[103,136397,92413],{"class":1952},[103,136399,136400],{"class":1952}," autoplay",[103,136402,136403],{"class":1952}," muted",[103,136405,136406],{"class":1952}," loop",[103,136408,55304],{"class":113},[103,136410,28173],{"class":51290},[103,136412,51297],{"class":113},[57,136414,136415],{"start":25},[60,136416,136417],{},"兼容写法",[14,136419,136420],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[94,136422,136423],{"className":127281,"code":136380,"language":127283,"meta":24,"style":24},[100,136424,136425],{"__ignoreMap":24},[103,136426,136427,136429,136431,136433,136435,136437,136439,136441,136443,136445,136447,136449],{"class":105,"line":106},[103,136428,1023],{"class":113},[103,136430,28173],{"class":51290},[103,136432,55229],{"class":1952},[103,136434,159],{"class":113},[103,136436,136395],{"class":218},[103,136438,92413],{"class":1952},[103,136440,136400],{"class":1952},[103,136442,136403],{"class":1952},[103,136444,136406],{"class":1952},[103,136446,55304],{"class":113},[103,136448,28173],{"class":51290},[103,136450,51297],{"class":113},[14,136452,136453],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[57,136455,136456],{"start":1168},[60,136457,136458],{},"video常用属性",[1451,136460],{"style":126390,"src":136461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136463,136464],{},"poster属性后面是跟的等待加载图片的地址",[94,136466,136467],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,136468,136469],{"__ignoreMap":24},[103,136470,136471,136473,136475,136477,136479,136481,136483,136485,136487,136489,136491,136493],{"class":105,"line":106},[103,136472,1023],{"class":113},[103,136474,1451],{"class":51290},[103,136476,55229],{"class":1952},[103,136478,159],{"class":113},[103,136480,134051],{"class":218},[103,136482,55237],{"class":1952},[103,136484,159],{"class":113},[103,136486,134058],{"class":218},[103,136488,134061],{"class":1952},[103,136490,159],{"class":113},[103,136492,134066],{"class":218},[103,136494,51297],{"class":113},[14,136496,136497],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[94,136499,136501],{"className":126534,"code":136500,"language":126536,"meta":24,"style":24},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[100,136502,136503,136508,136514,136538,136543,136548],{"__ignoreMap":24},[103,136504,136505],{"class":105,"line":106},[103,136506,136507],{"class":172},"\u002F* 2D 位移 *\u002F\n",[103,136509,136510,136512],{"class":105,"line":25},[103,136511,51601],{"class":51290},[103,136513,15562],{"class":113},[103,136515,136516,136519,136521,136524,136526,136528,136530,136532,136534,136536],{"class":105,"line":1168},[103,136517,136518],{"class":162},"  transform",[103,136520,51427],{"class":113},[103,136522,136523],{"class":162},"translate",[103,136525,114],{"class":113},[103,136527,424],{"class":162},[103,136529,51482],{"class":109},[103,136531,12425],{"class":113},[103,136533,769],{"class":162},[103,136535,51482],{"class":109},[103,136537,2708],{"class":113},[103,136539,136540],{"class":105,"line":1183},[103,136541,136542],{"class":172},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[103,136544,136545],{"class":105,"line":1189},[103,136546,136547],{"class":172},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[103,136549,136550],{"class":105,"line":1203},[103,136551,1554],{"class":113},[14,136553,136554],{},"muted:自动静音属性",[21988,136556,136558],{"id":136557},"_14122-音频标签audio","14.1.2.2 音频标签audio",[57,136560,136561],{},[60,136562,136563],{},"基本使用",[14,136565,136566,136567,136572,136573],{},"当前 ",[263,136568,136569],{},[100,136570,136571],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[263,136574,136575],{},"mp3格式",[1451,136577],{"style":126390,"src":136578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[57,136580,136581],{"start":25},[60,136582,136417],{},[94,136584,136585],{"className":127281,"code":136380,"language":127283,"meta":24,"style":24},[100,136586,136587],{"__ignoreMap":24},[103,136588,136589,136591,136593,136595,136597,136599,136601,136603,136605,136607,136609,136611],{"class":105,"line":106},[103,136590,1023],{"class":113},[103,136592,28173],{"class":51290},[103,136594,55229],{"class":1952},[103,136596,159],{"class":113},[103,136598,136395],{"class":218},[103,136600,92413],{"class":1952},[103,136602,136400],{"class":1952},[103,136604,136403],{"class":1952},[103,136606,136406],{"class":1952},[103,136608,55304],{"class":113},[103,136610,28173],{"class":51290},[103,136612,51297],{"class":113},[14,136614,136615],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[57,136617,136618],{"start":1168},[60,136619,136620],{},"常用属性",[1451,136622],{"style":126390,"src":136623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[94,136625,136626],{"className":127281,"code":136380,"language":127283,"meta":24,"style":24},[100,136627,136628],{"__ignoreMap":24},[103,136629,136630,136632,136634,136636,136638,136640,136642,136644,136646,136648,136650,136652],{"class":105,"line":106},[103,136631,1023],{"class":113},[103,136633,28173],{"class":51290},[103,136635,55229],{"class":1952},[103,136637,159],{"class":113},[103,136639,136395],{"class":218},[103,136641,92413],{"class":1952},[103,136643,136400],{"class":1952},[103,136645,136403],{"class":1952},[103,136647,136406],{"class":1952},[103,136649,55304],{"class":113},[103,136651,28173],{"class":51290},[103,136653,51297],{"class":113},[14,136655,136656],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21988,136658,136660],{"id":136659},"_14123-总结","14.1.2.3 总结",[1120,136662,136663,136666,136669,136672,136675],{},[60,136664,136665],{},"音频标签和视频标签使用方式基本一致",[60,136667,136668],{},"浏览器支持情况不同",[60,136670,136671],{},"谷歌浏览器把音频和视频自动播放禁止了",[60,136673,136674],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[60,136676,136677],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[74,136679,136681],{"id":136680},"_1413-表单元素","14.1.3 表单元素",[21988,136683,136685],{"id":136684},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1451,136687],{"style":126390,"src":136688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[94,136690,136692],{"className":127281,"code":136691,"language":127283,"meta":24,"style":24},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[100,136693,136694],{"__ignoreMap":24},[103,136695,136696,136698,136700,136702,136704,136706,136708,136710,136713,136715,136717,136720],{"class":105,"line":106},[103,136697,1023],{"class":113},[103,136699,53811],{"class":51290},[103,136701,53814],{"class":1952},[103,136703,159],{"class":113},[103,136705,62689],{"class":218},[103,136707,14910],{"class":1952},[103,136709,159],{"class":113},[103,136711,136712],{"class":218},"\"username\"",[103,136714,61010],{"class":1952},[103,136716,159],{"class":113},[103,136718,136719],{"class":218},"\"请输入用户名\"",[103,136721,51297],{"class":113},[1451,136723],{"style":126390,"src":136724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21988,136726,136728],{"id":136727},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1451,136730],{"style":126390,"src":136731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136733,136734],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136736,136737],{},"快捷操作：",[1451,136739],{"style":126390,"src":136740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136742,136743],{},"例子1：",[94,136745,136747],{"className":127281,"code":136746,"language":127283,"meta":24,"style":24},"\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",[100,136748,136749,136772,136799,136828,136847],{"__ignoreMap":24},[103,136750,136751,136753,136755,136757,136759,136762,136765,136767,136770],{"class":105,"line":106},[103,136752,1023],{"class":113},[103,136754,66615],{"class":51290},[103,136756,66618],{"class":1952},[103,136758,159],{"class":113},[103,136760,136761],{"class":218},"\"\u002Fsubmit\"",[103,136763,136764],{"class":1952}," method",[103,136766,159],{"class":113},[103,136768,136769],{"class":218},"\"post\"",[103,136771,51297],{"class":113},[103,136773,136774,136776,136778,136780,136782,136784,136786,136788,136790,136792,136794,136797],{"class":105,"line":25},[103,136775,52134],{"class":113},[103,136777,53811],{"class":51290},[103,136779,53814],{"class":1952},[103,136781,159],{"class":113},[103,136783,62689],{"class":218},[103,136785,14910],{"class":1952},[103,136787,159],{"class":113},[103,136789,136712],{"class":218},[103,136791,61010],{"class":1952},[103,136793,159],{"class":113},[103,136795,136796],{"class":218},"\"用户名\"",[103,136798,51297],{"class":113},[103,136800,136801,136803,136805,136807,136809,136812,136814,136816,136819,136821,136823,136826],{"class":105,"line":1168},[103,136802,52134],{"class":113},[103,136804,53811],{"class":51290},[103,136806,53814],{"class":1952},[103,136808,159],{"class":113},[103,136810,136811],{"class":218},"\"password\"",[103,136813,14910],{"class":1952},[103,136815,159],{"class":113},[103,136817,136818],{"class":218},"\"pwd\"",[103,136820,61010],{"class":1952},[103,136822,159],{"class":113},[103,136824,136825],{"class":218},"\"密码\"",[103,136827,51297],{"class":113},[103,136829,136830,136832,136834,136836,136838,136840,136843,136845],{"class":105,"line":1183},[103,136831,52134],{"class":113},[103,136833,53877],{"class":51290},[103,136835,53814],{"class":1952},[103,136837,159],{"class":113},[103,136839,66638],{"class":218},[103,136841,136842],{"class":113},">提交\u003C\u002F",[103,136844,53877],{"class":51290},[103,136846,51297],{"class":113},[103,136848,136849,136851,136853],{"class":105,"line":1189},[103,136850,51775],{"class":113},[103,136852,66615],{"class":51290},[103,136854,51297],{"class":113},[1451,136856],{"style":126390,"src":136857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136859,136860],{},"value是表单域的内容",[14,136862,136863],{},"例子2：",[94,136865,136866],{"className":127281,"code":136746,"language":127283,"meta":24,"style":24},[100,136867,136868,136888,136914,136940,136958],{"__ignoreMap":24},[103,136869,136870,136872,136874,136876,136878,136880,136882,136884,136886],{"class":105,"line":106},[103,136871,1023],{"class":113},[103,136873,66615],{"class":51290},[103,136875,66618],{"class":1952},[103,136877,159],{"class":113},[103,136879,136761],{"class":218},[103,136881,136764],{"class":1952},[103,136883,159],{"class":113},[103,136885,136769],{"class":218},[103,136887,51297],{"class":113},[103,136889,136890,136892,136894,136896,136898,136900,136902,136904,136906,136908,136910,136912],{"class":105,"line":25},[103,136891,52134],{"class":113},[103,136893,53811],{"class":51290},[103,136895,53814],{"class":1952},[103,136897,159],{"class":113},[103,136899,62689],{"class":218},[103,136901,14910],{"class":1952},[103,136903,159],{"class":113},[103,136905,136712],{"class":218},[103,136907,61010],{"class":1952},[103,136909,159],{"class":113},[103,136911,136796],{"class":218},[103,136913,51297],{"class":113},[103,136915,136916,136918,136920,136922,136924,136926,136928,136930,136932,136934,136936,136938],{"class":105,"line":1168},[103,136917,52134],{"class":113},[103,136919,53811],{"class":51290},[103,136921,53814],{"class":1952},[103,136923,159],{"class":113},[103,136925,136811],{"class":218},[103,136927,14910],{"class":1952},[103,136929,159],{"class":113},[103,136931,136818],{"class":218},[103,136933,61010],{"class":1952},[103,136935,159],{"class":113},[103,136937,136825],{"class":218},[103,136939,51297],{"class":113},[103,136941,136942,136944,136946,136948,136950,136952,136954,136956],{"class":105,"line":1183},[103,136943,52134],{"class":113},[103,136945,53877],{"class":51290},[103,136947,53814],{"class":1952},[103,136949,159],{"class":113},[103,136951,66638],{"class":218},[103,136953,136842],{"class":113},[103,136955,53877],{"class":51290},[103,136957,51297],{"class":113},[103,136959,136960,136962,136964],{"class":105,"line":1189},[103,136961,51775],{"class":113},[103,136963,66615],{"class":51290},[103,136965,51297],{"class":113},[1451,136967],{"style":126390,"src":136968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[45,136970,136972],{"id":136971},"_142-css新特性","14.2 CSS新特性",[74,136974,136976],{"id":136975},"_1421-新增选择器","14.2.1 新增选择器",[21988,136978,136980],{"id":136979},"_14211-属性选择器","14.2.1.1 属性选择器",[1451,136982],{"style":126390,"src":136983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[94,136985,136987],{"className":126534,"code":136986,"language":126536,"meta":24,"style":24},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[100,136988,136989,137004,137020],{"__ignoreMap":24},[103,136990,136991,136993,136995,136997,136999,137001],{"class":105,"line":106},[103,136992,53811],{"class":51290},[103,136994,1003],{"class":113},[103,136996,103097],{"class":1952},[103,136998,159],{"class":109},[103,137000,62689],{"class":218},[103,137002,137003],{"class":113},"] {\n",[103,137005,137006,137008,137010,137012,137014,137016,137018],{"class":105,"line":25},[103,137007,70886],{"class":162},[103,137009,51427],{"class":113},[103,137011,331],{"class":162},[103,137013,51482],{"class":109},[103,137015,51511],{"class":162},[103,137017,130114],{"class":162},[103,137019,1279],{"class":113},[103,137021,137022],{"class":105,"line":1168},[103,137023,1554],{"class":113},[1451,137025],{"style":126390,"src":137026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137028,143],{},[1120,137030,137031,137034,137037,137040],{},[60,137032,137033],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[60,137035,137036],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[60,137038,137039],{},"属性选择器也可以选择出来自定义的属性",[60,137041,137042,137044],{},[263,137043,9015],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21988,137046,137048],{"id":137047},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1451,137050],{"style":126390,"src":137051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[57,137053,137054],{},[60,137055,137056],{},"fist-child",[94,137058,137060],{"className":126534,"code":137059,"language":126536,"meta":24,"style":24},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[100,137061,137062,137067,137082,137102,137120],{"__ignoreMap":24},[103,137063,137064],{"class":105,"line":106},[103,137065,137066],{"class":172},"\u002F* 属性选择器 *\u002F\n",[103,137068,137069,137071,137073,137075,137077,137079],{"class":105,"line":25},[103,137070,53811],{"class":51290},[103,137072,1003],{"class":113},[103,137074,103097],{"class":1952},[103,137076,159],{"class":109},[103,137078,62689],{"class":218},[103,137080,137081],{"class":113},"] { }\n",[103,137083,137084,137086,137088,137090,137093,137096,137099],{"class":105,"line":1168},[103,137085,53811],{"class":51290},[103,137087,1003],{"class":113},[103,137089,14684],{"class":1952},[103,137091,137092],{"class":109},"^=",[103,137094,137095],{"class":218},"\"icon\"",[103,137097,137098],{"class":113},"] { }  ",[103,137100,137101],{"class":172},"\u002F* 以 icon 开头 *\u002F\n",[103,137103,137104,137106,137108,137110,137113,137115,137117],{"class":105,"line":1183},[103,137105,53811],{"class":51290},[103,137107,1003],{"class":113},[103,137109,14684],{"class":1952},[103,137111,137112],{"class":109},"$=",[103,137114,137095],{"class":218},[103,137116,137098],{"class":113},[103,137118,137119],{"class":172},"\u002F* 以 icon 结尾 *\u002F\n",[103,137121,137122,137124,137126,137128,137131,137133,137135],{"class":105,"line":1189},[103,137123,53811],{"class":51290},[103,137125,1003],{"class":113},[103,137127,14684],{"class":1952},[103,137129,137130],{"class":109},"*=",[103,137132,137095],{"class":218},[103,137134,137098],{"class":113},[103,137136,137137],{"class":172},"\u002F* 包含 icon *\u002F\n",[14,137139,137140],{},"ul的第一个儿子文本为红色",[14,137142,137143],{},"一定要在冒号前加空格，不然就是选中所有的了",[94,137145,137147],{"className":126534,"code":137146,"language":126536,"meta":24,"style":24},".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",[100,137148,137149,137155,137165,137169,137173,137178,137191,137204,137220,137237,137254],{"__ignoreMap":24},[103,137150,137151,137153],{"class":105,"line":106},[103,137152,126825],{"class":1952},[103,137154,15562],{"class":113},[103,137156,137157,137159,137161,137163],{"class":105,"line":25},[103,137158,70895],{"class":162},[103,137160,51427],{"class":113},[103,137162,57411],{"class":162},[103,137164,1279],{"class":113},[103,137166,137167],{"class":105,"line":1168},[103,137168,1554],{"class":113},[103,137170,137171],{"class":105,"line":1183},[103,137172,135995],{"class":113},[103,137174,137175],{"class":105,"line":1189},[103,137176,137177],{"class":172},"\u002F* 结构伪类选择器 *\u002F\n",[103,137179,137180,137182,137185,137188],{"class":105,"line":1203},[103,137181,60],{"class":51290},[103,137183,137184],{"class":1952},":first-child",[103,137186,137187],{"class":113}," { }           ",[103,137189,137190],{"class":172},"\u002F* 第一个 *\u002F\n",[103,137192,137193,137195,137198,137201],{"class":105,"line":1209},[103,137194,60],{"class":51290},[103,137196,137197],{"class":1952},":last-child",[103,137199,137200],{"class":113}," { }            ",[103,137202,137203],{"class":172},"\u002F* 最后一个 *\u002F\n",[103,137205,137206,137208,137210,137212,137214,137217],{"class":105,"line":1300},[103,137207,60],{"class":51290},[103,137209,129448],{"class":1952},[103,137211,114],{"class":113},[103,137213,191],{"class":162},[103,137215,137216],{"class":113},") { }          ",[103,137218,137219],{"class":172},"\u002F* 第2个 *\u002F\n",[103,137221,137222,137224,137226,137228,137231,137234],{"class":105,"line":1306},[103,137223,60],{"class":51290},[103,137225,129448],{"class":1952},[103,137227,114],{"class":113},[103,137229,137230],{"class":162},"2n",[103,137232,137233],{"class":113},") { }         ",[103,137235,137236],{"class":172},"\u002F* 偶数 *\u002F\n",[103,137238,137239,137241,137243,137245,137248,137251],{"class":105,"line":1318},[103,137240,60],{"class":51290},[103,137242,129448],{"class":1952},[103,137244,114],{"class":113},[103,137246,137247],{"class":162},"2n+1",[103,137249,137250],{"class":113},") { }       ",[103,137252,137253],{"class":172},"\u002F* 奇数 *\u002F\n",[103,137255,137256,137258,137260,137262,137265,137267],{"class":105,"line":1601},[103,137257,60],{"class":51290},[103,137259,129448],{"class":1952},[103,137261,114],{"class":113},[103,137263,137264],{"class":162},"-n+3",[103,137266,137250],{"class":113},[103,137268,137269],{"class":172},"\u002F* 前3个 *\u002F\n",[51601,137271,137274],{"className":137272},[137273],"example","\n  示例内容\n",[14,137276,137277],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1120,137279,137280],{},[60,137281,137282,137285],{},[100,137283,137284],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137287,137288],{},"也就是说它选择的是熊大",[57,137290,137291],{"start":1203},[60,137292,137293],{},"权重",[94,137295,137297],{"className":126534,"code":137296,"language":126536,"meta":24,"style":24},"\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",[100,137298,137299,137303,137313,137323,137337,137351,137365],{"__ignoreMap":24},[103,137300,137301],{"class":105,"line":106},[103,137302,137177],{"class":172},[103,137304,137305,137307,137309,137311],{"class":105,"line":25},[103,137306,60],{"class":51290},[103,137308,137184],{"class":1952},[103,137310,137187],{"class":113},[103,137312,137190],{"class":172},[103,137314,137315,137317,137319,137321],{"class":105,"line":1168},[103,137316,60],{"class":51290},[103,137318,137197],{"class":1952},[103,137320,137200],{"class":113},[103,137322,137203],{"class":172},[103,137324,137325,137327,137329,137331,137333,137335],{"class":105,"line":1183},[103,137326,60],{"class":51290},[103,137328,129448],{"class":1952},[103,137330,114],{"class":113},[103,137332,191],{"class":162},[103,137334,137216],{"class":113},[103,137336,137219],{"class":172},[103,137338,137339,137341,137343,137345,137347,137349],{"class":105,"line":1189},[103,137340,60],{"class":51290},[103,137342,129448],{"class":1952},[103,137344,114],{"class":113},[103,137346,137230],{"class":162},[103,137348,137233],{"class":113},[103,137350,137236],{"class":172},[103,137352,137353,137355,137357,137359,137361,137363],{"class":105,"line":1203},[103,137354,60],{"class":51290},[103,137356,129448],{"class":1952},[103,137358,114],{"class":113},[103,137360,137247],{"class":162},[103,137362,137250],{"class":113},[103,137364,137253],{"class":172},[103,137366,137367,137369,137371,137373,137375,137377],{"class":105,"line":1209},[103,137368,60],{"class":51290},[103,137370,129448],{"class":1952},[103,137372,114],{"class":113},[103,137374,137264],{"class":162},[103,137376,137250],{"class":113},[103,137378,137269],{"class":172},[14,137380,137381],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21988,137383,137385],{"id":137384},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137387,137388],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1451,137390],{"style":126390,"src":137391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[57,137393,137394],{},[60,137395,143],{},[1120,137397,137398,137401,137404,137407,137410,137413],{},[60,137399,137400],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[60,137402,137403],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[60,137405,137406],{},"语法： element::before {}",[60,137408,137409],{},"before 和 after 必须有 content 属性",[60,137411,137412],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[60,137414,137415],{},"伪元素选择器和标签选择器一样，权重为 1",[57,137417,137418],{"start":25},[60,137419,137420],{},"实例",[94,137422,137423],{"className":126534,"code":137296,"language":126536,"meta":24,"style":24},[100,137424,137425,137429,137439,137449,137463,137477,137491],{"__ignoreMap":24},[103,137426,137427],{"class":105,"line":106},[103,137428,137177],{"class":172},[103,137430,137431,137433,137435,137437],{"class":105,"line":25},[103,137432,60],{"class":51290},[103,137434,137184],{"class":1952},[103,137436,137187],{"class":113},[103,137438,137190],{"class":172},[103,137440,137441,137443,137445,137447],{"class":105,"line":1168},[103,137442,60],{"class":51290},[103,137444,137197],{"class":1952},[103,137446,137200],{"class":113},[103,137448,137203],{"class":172},[103,137450,137451,137453,137455,137457,137459,137461],{"class":105,"line":1183},[103,137452,60],{"class":51290},[103,137454,129448],{"class":1952},[103,137456,114],{"class":113},[103,137458,191],{"class":162},[103,137460,137216],{"class":113},[103,137462,137219],{"class":172},[103,137464,137465,137467,137469,137471,137473,137475],{"class":105,"line":1189},[103,137466,60],{"class":51290},[103,137468,129448],{"class":1952},[103,137470,114],{"class":113},[103,137472,137230],{"class":162},[103,137474,137233],{"class":113},[103,137476,137236],{"class":172},[103,137478,137479,137481,137483,137485,137487,137489],{"class":105,"line":1203},[103,137480,60],{"class":51290},[103,137482,129448],{"class":1952},[103,137484,114],{"class":113},[103,137486,137247],{"class":162},[103,137488,137250],{"class":113},[103,137490,137253],{"class":172},[103,137492,137493,137495,137497,137499,137501,137503],{"class":105,"line":1209},[103,137494,60],{"class":51290},[103,137496,129448],{"class":1952},[103,137498,114],{"class":113},[103,137500,137264],{"class":162},[103,137502,137250],{"class":113},[103,137504,137269],{"class":172},[1451,137506],{"style":126390,"src":137507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[57,137509,137510],{"start":1168},[60,137511,137512],{},"使用场景1",[1451,137514],{"style":126390,"src":137515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137517,137518],{},"不需要再加盒子来整红色那部分了",[94,137520,137522],{"className":126534,"code":137521,"language":126536,"meta":24,"style":24},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[100,137523,137524,137529,137538,137549,137559,137563,137572,137583,137593],{"__ignoreMap":24},[103,137525,137526],{"class":105,"line":106},[103,137527,137528],{"class":172},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[103,137530,137531,137533,137536],{"class":105,"line":25},[103,137532,51601],{"class":51290},[103,137534,137535],{"class":1952},"::before",[103,137537,15562],{"class":113},[103,137539,137540,137543,137545,137547],{"class":105,"line":1168},[103,137541,137542],{"class":162},"  content",[103,137544,51427],{"class":113},[103,137546,7642],{"class":218},[103,137548,1279],{"class":113},[103,137550,137551,137553,137555,137557],{"class":105,"line":1183},[103,137552,128150],{"class":162},[103,137554,51427],{"class":113},[103,137556,60859],{"class":162},[103,137558,1279],{"class":113},[103,137560,137561],{"class":105,"line":1189},[103,137562,1554],{"class":113},[103,137564,137565,137567,137570],{"class":105,"line":1203},[103,137566,51601],{"class":51290},[103,137568,137569],{"class":1952},"::after",[103,137571,15562],{"class":113},[103,137573,137574,137576,137578,137581],{"class":105,"line":1209},[103,137575,137542],{"class":162},[103,137577,51427],{"class":113},[103,137579,137580],{"class":218},"\"→\"",[103,137582,1279],{"class":113},[103,137584,137585,137587,137589,137591],{"class":105,"line":1300},[103,137586,70895],{"class":162},[103,137588,51427],{"class":113},[103,137590,62060],{"class":162},[103,137592,1279],{"class":113},[103,137594,137595],{"class":105,"line":1306},[103,137596,1554],{"class":113},[1451,137598],{"style":126390,"src":137599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137601,137602],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1451,137604],{"style":126390,"src":137605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137607,137608],{},"但是在引用时需要先转义一下",[14,137610,137611],{},"content='\\e930'",[57,137613,137614],{"start":1183},[60,137615,137616],{},"使用场景2",[14,137618,137619],{},"仿土豆效果",[14,137621,137622],{},"通过使用伪元素选择器可以减少body中盒子的数量",[94,137624,137625],{"className":126534,"code":137521,"language":126536,"meta":24,"style":24},[100,137626,137627,137631,137639,137649,137659,137663,137671,137681,137691],{"__ignoreMap":24},[103,137628,137629],{"class":105,"line":106},[103,137630,137528],{"class":172},[103,137632,137633,137635,137637],{"class":105,"line":25},[103,137634,51601],{"class":51290},[103,137636,137535],{"class":1952},[103,137638,15562],{"class":113},[103,137640,137641,137643,137645,137647],{"class":105,"line":1168},[103,137642,137542],{"class":162},[103,137644,51427],{"class":113},[103,137646,7642],{"class":218},[103,137648,1279],{"class":113},[103,137650,137651,137653,137655,137657],{"class":105,"line":1183},[103,137652,128150],{"class":162},[103,137654,51427],{"class":113},[103,137656,60859],{"class":162},[103,137658,1279],{"class":113},[103,137660,137661],{"class":105,"line":1189},[103,137662,1554],{"class":113},[103,137664,137665,137667,137669],{"class":105,"line":1203},[103,137666,51601],{"class":51290},[103,137668,137569],{"class":1952},[103,137670,15562],{"class":113},[103,137672,137673,137675,137677,137679],{"class":105,"line":1209},[103,137674,137542],{"class":162},[103,137676,51427],{"class":113},[103,137678,137580],{"class":218},[103,137680,1279],{"class":113},[103,137682,137683,137685,137687,137689],{"class":105,"line":1300},[103,137684,70895],{"class":162},[103,137686,51427],{"class":113},[103,137688,62060],{"class":162},[103,137690,1279],{"class":113},[103,137692,137693],{"class":105,"line":1306},[103,137694,1554],{"class":113},[1451,137696],{"style":126390,"src":137697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[57,137699,137700],{"start":1189},[60,137701,137702],{},"使用场景3",[14,137704,137705],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[94,137707,137709],{"className":126534,"code":137708,"language":126536,"meta":24,"style":24},".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",[100,137710,137711,137717,137727,137731,137735,137739,137747,137757,137767,137771,137779,137789,137799],{"__ignoreMap":24},[103,137712,137713,137715],{"class":105,"line":106},[103,137714,130382],{"class":1952},[103,137716,15562],{"class":113},[103,137718,137719,137721,137723,137725],{"class":105,"line":25},[103,137720,131014],{"class":162},[103,137722,51427],{"class":113},[103,137724,23726],{"class":162},[103,137726,1279],{"class":113},[103,137728,137729],{"class":105,"line":1168},[103,137730,1554],{"class":113},[103,137732,137733],{"class":105,"line":1183},[103,137734,135995],{"class":113},[103,137736,137737],{"class":105,"line":1189},[103,137738,137528],{"class":172},[103,137740,137741,137743,137745],{"class":105,"line":1203},[103,137742,51601],{"class":51290},[103,137744,137535],{"class":1952},[103,137746,15562],{"class":113},[103,137748,137749,137751,137753,137755],{"class":105,"line":1209},[103,137750,137542],{"class":162},[103,137752,51427],{"class":113},[103,137754,7642],{"class":218},[103,137756,1279],{"class":113},[103,137758,137759,137761,137763,137765],{"class":105,"line":1300},[103,137760,128150],{"class":162},[103,137762,51427],{"class":113},[103,137764,60859],{"class":162},[103,137766,1279],{"class":113},[103,137768,137769],{"class":105,"line":1306},[103,137770,1554],{"class":113},[103,137772,137773,137775,137777],{"class":105,"line":1318},[103,137774,51601],{"class":51290},[103,137776,137569],{"class":1952},[103,137778,15562],{"class":113},[103,137780,137781,137783,137785,137787],{"class":105,"line":1601},[103,137782,137542],{"class":162},[103,137784,51427],{"class":113},[103,137786,137580],{"class":218},[103,137788,1279],{"class":113},[103,137790,137791,137793,137795,137797],{"class":105,"line":1606},[103,137792,70895],{"class":162},[103,137794,51427],{"class":113},[103,137796,62060],{"class":162},[103,137798,1279],{"class":113},[103,137800,137801],{"class":105,"line":1612},[103,137802,1554],{"class":113},[14,137804,137805],{},"div {\nmargin: 0 auto;\n}",[94,137807,137810],{"className":137808,"code":137809,"language":5177},[5175],"\n### 14.2.3 CSS3图片变模糊\n\nfilter CSS属性将模糊或颜色偏移等图形效果应用于元素\n\n`filter: 函数();`，例如：`filter: blur(5px);`，`blur` 表示模糊处理，数值越大越模糊。\n\n### 14.2.4 计算盒子宽度\n\ncalc() 此CSS函数让你在声明CSS属性值时执行一些计算\n\nwidth: calc(100% - 80px);\n\n括号里面可以使用 + - \\* \u002F 来进行计算\n\n运算符前后要加空格，不然显示不出来\n\n要求子盒子宽度永远比父盒子小30像素\n\n### 14.2.5 CSS3 过渡\n\n过渡（transition)是CSS3中具有颠覆性的特征之一，我们可以在不使用 Flash 动画或 JavaScript 的情况下，当元素从一种样式变换为另一种样式时为元素添加效果\n\n**过渡动画：** 是从一个状态 渐渐的过渡到另外一个状态\n\n可以让我们页面更好看，更动感十足，虽然 低版本浏览器不支持（ie9以下版本） 但是不会影响页面布局。\n\n我们现在经常和 :hover 一起 搭配使用\n\n语法：\n\ntransition: 要过渡的属性 花费时间 运动曲线 何时开始;\n\n*   属性 ： 想要变化的 css 属性， 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡， 写一个all 就可以\n    \n*   花费时间： 单位是 秒（必须写单位） 比如 0.5s\n    \n*   运动曲线： 默认是 ease （可以省略）\n    \n*   何时开始：单位是 秒（必须写单位）可以设置延迟触发时间 默认是 0s （可以省略）\n    \n*   **后面两个属性可以省略**\n    \n*   **记住过渡的使用口诀： 谁做过渡给谁加**\n    \n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-140.png\">\n\n代码案例\n\n```Css\ndiv {\n  transition: all 0.3s ease;\n}\n",[100,137811,137809],{"__ignoreMap":24},[14,137813,137814],{},"如果想让多个元素都发生变化",[14,137816,137817],{},"不能如下操作：",[14,137819,137820],{},"transition: width 2s ease 0.5s;",[14,137822,137823],{},"transition: height 2s ease 0.5s;不对！！！",[14,137825,137826],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137828,137829],{},"使用如下：加逗号隔开",[14,137831,137832],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137834,137835],{},"transition all 2s ease;",[74,137837,137839],{"id":137838},"_1426-过渡练习","14.2.6 过渡练习",[57,137841,137842],{},[60,137843,137844],{},"进度条",[1451,137846],{"style":126390,"src":137847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[94,137849,137851],{"className":126534,"code":137850,"language":126536,"meta":24,"style":24},"div {\n  transition: all 0.3s ease;\n}\n",[100,137852,137853,137859,137877],{"__ignoreMap":24},[103,137854,137855,137857],{"class":105,"line":106},[103,137856,51601],{"class":51290},[103,137858,15562],{"class":113},[103,137860,137861,137864,137866,137868,137871,137873,137875],{"class":105,"line":25},[103,137862,137863],{"class":162},"  transition",[103,137865,51427],{"class":113},[103,137867,28111],{"class":162},[103,137869,137870],{"class":162}," 0.3",[103,137872,808],{"class":109},[103,137874,78670],{"class":162},[103,137876,1279],{"class":113},[103,137878,137879],{"class":105,"line":1168},[103,137880,1554],{"class":113},[57,137882,137883],{"start":25},[60,137884,137885],{},"小米logo",[14,137887,137888],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[94,137890,137892],{"className":126534,"code":137891,"language":126536,"meta":24,"style":24},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[100,137893,137894,137899,137905,137921,137926],{"__ignoreMap":24},[103,137895,137896],{"class":105,"line":106},[103,137897,137898],{"class":172},"\u002F* CSS3 过渡 *\u002F\n",[103,137900,137901,137903],{"class":105,"line":25},[103,137902,51601],{"class":51290},[103,137904,15562],{"class":113},[103,137906,137907,137909,137911,137913,137915,137917,137919],{"class":105,"line":1168},[103,137908,137863],{"class":162},[103,137910,51427],{"class":113},[103,137912,28111],{"class":162},[103,137914,137870],{"class":162},[103,137916,808],{"class":109},[103,137918,78670],{"class":162},[103,137920,1279],{"class":113},[103,137922,137923],{"class":105,"line":1183},[103,137924,137925],{"class":172},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[103,137927,137928],{"class":105,"line":1189},[103,137929,1554],{"class":113},[14,137931,137932],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5116,137934,137935],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":24,"searchDepth":25,"depth":25,"links":137937},[137938,137943],{"id":136268,"depth":25,"text":136269,"children":137939},[137940,137941,137942],{"id":136272,"depth":1168,"text":136273},{"id":136349,"depth":1168,"text":136350},{"id":136680,"depth":1168,"text":136681},{"id":136971,"depth":25,"text":136972,"children":137944},[137945,137946],{"id":136975,"depth":1168,"text":136976},{"id":137838,"depth":1168,"text":137839},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136260,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137953,"title":137954,"body":137955,"description":27,"extension":28,"meta":139699,"navigation":30,"path":139700,"seo":139701,"stem":139702,"__hash__":139703},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137956,"toc":139680},[137957,137960,137964,137967,137973,137979,137983,137985,137988,137991,137994,137997,138000,138003,138006,138010,138014,138017,138020,138023,138027,138030,138033,138038,138041,138044,138047,138051,138054,138063,138066,138069,138073,138076,138079,138084,138091,138105,138113,138120,138125,138128,138131,138134,138141,138145,138151,138157,138160,138163,138168,138174,138176,138184,138189,138192,138198,138200,138205,138210,138213,138215,138220,138223,138228,138233,138267,138271,138275,138278,138282,138285,138371,138374,138411,138414,138450,138454,138459,138472,138526,138528,138556,138558,138586,138592,138606,138608,138652,138654,138698,138701,138708,138719,138721,138748,138750,138776,138783,138799,138801,138895,138897,138991,138998,139001,139006,139012,139086,139089,139091,139127,139129,139165,139168,139175,139194,139197,139200,139202,139227,139229,139253,139256,139259,139289,139293,139296,139359,139361,139427,139429,139493,139496,139528,139530,139556,139558,139584,139587,139618,139620,139646,139648,139674,139677],[10,137958,137954],{"id":137959},"_15-品优购项目上篇-搭建与公共模块",[45,137961,137963],{"id":137962},"_151-项目规划","15.1 项目规划",[1451,137965],{"style":126390,"src":137966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,137968,137969,137972],{},[263,137970,137971],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,137974,137975,137978],{},[263,137976,137977],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[45,137980,137982],{"id":137981},"_152-项目介绍","15.2 项目介绍",[14,137984,137971],{},[1451,137986],{"style":126390,"src":137987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,137989,137990],{},"主页：",[1451,137992],{"style":126390,"src":137993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,137995,137996],{},"列表页：",[1451,137998],{"style":126390,"src":137999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138001,138002],{},"注册页：",[1451,138004],{"style":126390,"src":138005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[45,138007,138009],{"id":138008},"_153-项目搭建工作","15.3 项目搭建工作",[74,138011,138013],{"id":138012},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1451,138015],{"style":126390,"src":138016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138018,138019],{},"经常更换的图片要放到upload文件夹中",[14,138021,138022],{},"不经常换的放到images文件夹中",[74,138024,138026],{"id":138025},"_1532-创建文件如下","15.3.2 创建文件如下",[1451,138028],{"style":126390,"src":138029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1451,138031],{"style":126390,"src":138032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138034,138035],{},[263,138036,138037],{},"初始化样式：",[14,138039,138040],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138042,138043],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138045,138046],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[74,138048,138050],{"id":138049},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138052,138053],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138055,138056,138057,138062],{},"这里最典型的应用就是 ",[263,138058,138059],{},[100,138060,138061],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1451,138064],{"style":126390,"src":138065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138067,138068],{},"通过link方法来引入",[74,138070,138072],{"id":138071},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1451,138074],{"style":126390,"src":138075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138077,138078],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[57,138080,138081],{},[60,138082,138083],{},"制作favicon图标",[14,138085,138086,138087,138090],{},"①把品优购图标切成 ",[100,138088,138089],{},"png"," 图片",[14,138092,138093,138094,138096,138097,138100,138101],{},"②把 ",[100,138095,138089],{}," 图片转换为 ",[100,138098,138099],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[17,138102,138103],{"href":138103,"rel":138104},"http:\u002F\u002Fwww.bitbug.net\u002F",[21],[57,138106,138107,138110],{"start":25},[60,138108,138109],{},"favicon图标放到网站根目录下",[60,138111,138112],{},"HTML页面引入favicon",[14,138114,138115,138116,138119],{},"在html 页面里面的 ",[100,138117,138118],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138121,138122],{},[100,138123,138124],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138126,138127],{},"复制这行代码或者在生成这个的网站进行复制",[1451,138129],{"style":126390,"src":138130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138132,138133],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138135,138136,138137],{},"例如:",[17,138138,138139],{"href":138139,"rel":138140},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[21],[74,138142,138144],{"id":138143},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138146,138147,138150],{},[263,138148,138149],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138152,138153,138156],{},[263,138154,138155],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138158,138159],{},"页面必须有三个标签用来符合 SEO 优化",[1451,138161],{"style":126390,"src":138162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[57,138164,138165],{},[60,138166,138167],{},"title网站标题",[14,138169,138170,138173],{},[263,138171,138172],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138175,68780],{},[1120,138177,138178,138181],{},[60,138179,138180],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[60,138182,138183],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[57,138185,138186],{"start":25},[60,138187,138188],{},"description网站描述",[14,138190,138191],{},"简要说明我们网站主要是做什么的",[14,138193,138194,138197],{},[263,138195,138196],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138199,68780],{},[14,138201,138202],{},[100,138203,138204],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[57,138206,138207],{"start":1168},[60,138208,138209],{},"keywords关键词",[14,138211,138212],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138214,68780],{},[14,138216,138217],{},[100,138218,138219],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138221,138222],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138224,138225],{},[263,138226,138227],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[57,138229,138230],{"start":1183},[60,138231,138232],{},"代码总结",[94,138234,138235],{"className":127281,"code":130638,"language":127283,"meta":24,"style":24},[100,138236,138237,138241,138255,138259],{"__ignoreMap":24},[103,138238,138239],{"class":105,"line":106},[103,138240,130645],{"class":172},[103,138242,138243,138245,138247,138249,138251,138253],{"class":105,"line":25},[103,138244,1023],{"class":113},[103,138246,51601],{"class":51290},[103,138248,53476],{"class":1952},[103,138250,159],{"class":113},[103,138252,130658],{"class":218},[103,138254,51297],{"class":113},[103,138256,138257],{"class":105,"line":1168},[103,138258,130665],{"class":113},[103,138260,138261,138263,138265],{"class":105,"line":1183},[103,138262,51775],{"class":113},[103,138264,51601],{"class":51290},[103,138266,51297],{"class":113},[45,138268,138270],{"id":138269},"_154-项目公共部分制作","15.4 项目公共部分制作",[74,138272,138274],{"id":138273},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1451,138276],{"style":126390,"src":138277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[74,138279,138281],{"id":138280},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138283,138284],{},"布局思路：",[1120,138286,138287,138290,138293,138315,138348],{},[60,138288,138289],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[60,138291,138292],{},"里面包含版心的盒子",[60,138294,138295,138296],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1120,138297,138298,138306,138312],{},[60,138299,138300,138301,21490,138303,138305],{},"1 号盒子 里面包含一个",[100,138302,1120],{},[100,138304,1120],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[60,138307,138308,138309,138311],{},"里面的内容是水平排列，所以需要给",[100,138310,60],{},"设置浮动",[60,138313,138314],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[60,138316,138317,138318],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1120,138319,138320,138334,138339],{},[60,138321,138322,138323,21490,138325,138327,138328,138330,138331,138333],{},"2 号盒子 里面包含一个",[100,138324,1120],{},[100,138326,1120],{},"包裹",[100,138329,60],{},"，中间的",[100,138332,1034],{},"可以用样式去设置，也可以用字符 |",[60,138335,138336,138337,138311],{},"里面内容水平排列，给",[100,138338,60],{},[60,138340,138341,138342,138344,138345,138347],{},"找到里面所有偶数的 ",[100,138343,60],{}," 设置样式（偶数的 ",[100,138346,60],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[60,138349,138350,138351],{},"需要用到字体图标",[1120,138352,138353,138359,138362,138365,138368],{},[60,138354,138355,138356],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[100,138357,138358],{},"arrow-icon",[60,138360,138361],{},"先要引入字体图片的资源",[60,138363,138364],{},"在样式里面利用 font-face 来进行声明",[60,138366,138367],{},"在伪元素的 content属性设置 图标的编码",[60,138369,138370],{},"给伪元素设置font-family属性",[14,138372,138373],{},"结构实例代码：",[94,138375,138377],{"className":126534,"code":138376,"language":126536,"meta":24,"style":24},"div::before {\n  content: \"\";\n  display: block;\n}\n",[100,138378,138379,138387,138397,138407],{"__ignoreMap":24},[103,138380,138381,138383,138385],{"class":105,"line":106},[103,138382,51601],{"class":51290},[103,138384,137535],{"class":1952},[103,138386,15562],{"class":113},[103,138388,138389,138391,138393,138395],{"class":105,"line":25},[103,138390,137542],{"class":162},[103,138392,51427],{"class":113},[103,138394,7642],{"class":218},[103,138396,1279],{"class":113},[103,138398,138399,138401,138403,138405],{"class":105,"line":1168},[103,138400,128150],{"class":162},[103,138402,51427],{"class":113},[103,138404,60859],{"class":162},[103,138406,1279],{"class":113},[103,138408,138409],{"class":105,"line":1183},[103,138410,1554],{"class":113},[14,138412,138413],{},"样式实例代码：",[94,138415,138416],{"className":126534,"code":138376,"language":126536,"meta":24,"style":24},[100,138417,138418,138426,138436,138446],{"__ignoreMap":24},[103,138419,138420,138422,138424],{"class":105,"line":106},[103,138421,51601],{"class":51290},[103,138423,137535],{"class":1952},[103,138425,15562],{"class":113},[103,138427,138428,138430,138432,138434],{"class":105,"line":25},[103,138429,137542],{"class":162},[103,138431,51427],{"class":113},[103,138433,7642],{"class":218},[103,138435,1279],{"class":113},[103,138437,138438,138440,138442,138444],{"class":105,"line":1168},[103,138439,128150],{"class":162},[103,138441,51427],{"class":113},[103,138443,60859],{"class":162},[103,138445,1279],{"class":113},[103,138447,138448],{"class":105,"line":1183},[103,138449,1554],{"class":113},[74,138451,138453],{"id":138452},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1120,138455,138456],{},[60,138457,138458],{},"header 盒子必须要有高度",[14,138460,138461,138462,138464,138465],{},"1 号盒子是 ",[100,138463,131546],{}," 标志定位，在正常开发过程中， ",[263,138466,138467,138468,138471],{},"logo的布局其实是有讲究的，需要进行 ",[100,138469,138470],{},"logoSEO","的优化 （★★★）",[1120,138473,138474,138482,138490,138517],{},[60,138475,138476,138478,138479,138481],{},[100,138477,131546],{}," 里面首先放一个 ",[100,138480,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[60,138483,138484,138486,138487,138489],{},[100,138485,10],{}," 里面再放一个链接，可以返回首页的，把 ",[100,138488,131546],{}," 的背景图片给链接即可",[60,138491,138492,138493],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1120,138494,138495,138510],{},[60,138496,138497,138498,138501,138502,138505,138506,138509],{},"方法1：",[100,138499,138500],{},"text-indent"," 移到盒子外面（",[100,138503,138504],{},"text-indent: -9999px",") ，然后 ",[100,138507,138508],{},"overflow:hidden"," ，淘宝的做法",[60,138511,138512,138513,138516],{},"方法2：直接给 ",[100,138514,138515],{},"font-size: 0;"," 就看不到文字了，京东的做法",[60,138518,138519,138520,138522,138523,138525],{},"最后给链接一个 ",[100,138521,51397],{}," 属性，这样鼠标放到 ",[100,138524,131546],{}," 上就可以看到提示文字了",[14,138527,138373],{},[94,138529,138530],{"className":127281,"code":131767,"language":127283,"meta":24,"style":24},[100,138531,138532],{"__ignoreMap":24},[103,138533,138534,138536,138538,138540,138542,138544,138546,138548,138550,138552,138554],{"class":105,"line":106},[103,138535,1023],{"class":113},[103,138537,17],{"class":51290},[103,138539,61047],{"class":1952},[103,138541,159],{"class":113},[103,138543,131782],{"class":218},[103,138545,131785],{"class":1952},[103,138547,159],{"class":113},[103,138549,131790],{"class":218},[103,138551,131793],{"class":113},[103,138553,17],{"class":51290},[103,138555,51297],{"class":113},[14,138557,138413],{},[94,138559,138560],{"className":127281,"code":131767,"language":127283,"meta":24,"style":24},[100,138561,138562],{"__ignoreMap":24},[103,138563,138564,138566,138568,138570,138572,138574,138576,138578,138580,138582,138584],{"class":105,"line":106},[103,138565,1023],{"class":113},[103,138567,17],{"class":51290},[103,138569,61047],{"class":1952},[103,138571,159],{"class":113},[103,138573,131782],{"class":218},[103,138575,131785],{"class":1952},[103,138577,159],{"class":113},[103,138579,131790],{"class":218},[103,138581,131793],{"class":113},[103,138583,17],{"class":51290},[103,138585,51297],{"class":113},[14,138587,138588,138589,138591],{},"2 号盒子是 ",[100,138590,131559],{}," 搜索模块定位",[1120,138593,138594,138597,138600,138603],{},[60,138595,138596],{},"search盒子利用定位的方式放在对应的位置",[60,138598,138599],{},"search盒子设置绝对定位，header盒子设置相对定位",[60,138601,138602],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[60,138604,138605],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138607,138373],{},[94,138609,138610],{"className":126534,"code":131854,"language":126536,"meta":24,"style":24},[100,138611,138612,138634,138638,138648],{"__ignoreMap":24},[103,138613,138614,138616,138618,138620,138622,138624,138626,138628,138630,138632],{"class":105,"line":106},[103,138615,51601],{"class":51290},[103,138617,12425],{"class":113},[103,138619,14],{"class":51290},[103,138621,12425],{"class":113},[103,138623,10],{"class":51290},[103,138625,12425],{"class":113},[103,138627,1120],{"class":51290},[103,138629,12425],{"class":113},[103,138631,60],{"class":51290},[103,138633,15562],{"class":113},[103,138635,138636],{"class":105,"line":25},[103,138637,131883],{"class":172},[103,138639,138640,138642,138644,138646],{"class":105,"line":1168},[103,138641,128150],{"class":162},[103,138643,51427],{"class":113},[103,138645,60859],{"class":162},[103,138647,1279],{"class":113},[103,138649,138650],{"class":105,"line":1183},[103,138651,1554],{"class":113},[14,138653,138413],{},[94,138655,138656],{"className":126534,"code":131854,"language":126536,"meta":24,"style":24},[100,138657,138658,138680,138684,138694],{"__ignoreMap":24},[103,138659,138660,138662,138664,138666,138668,138670,138672,138674,138676,138678],{"class":105,"line":106},[103,138661,51601],{"class":51290},[103,138663,12425],{"class":113},[103,138665,14],{"class":51290},[103,138667,12425],{"class":113},[103,138669,10],{"class":51290},[103,138671,12425],{"class":113},[103,138673,1120],{"class":51290},[103,138675,12425],{"class":113},[103,138677,60],{"class":51290},[103,138679,15562],{"class":113},[103,138681,138682],{"class":105,"line":25},[103,138683,131883],{"class":172},[103,138685,138686,138688,138690,138692],{"class":105,"line":1168},[103,138687,128150],{"class":162},[103,138689,51427],{"class":113},[103,138691,60859],{"class":162},[103,138693,1279],{"class":113},[103,138695,138696],{"class":105,"line":1183},[103,138697,1554],{"class":113},[14,138699,138700],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138702,138703,138704,138707],{},"3 号盒子是 ",[100,138705,138706],{},"hotwords"," 热词模块定位",[1120,138709,138710,138713,138716],{},[60,138711,138712],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[60,138714,138715],{},"给里面所有的a标签设置 左右10px的外边距",[60,138717,138718],{},"给第一个a标签设置文字变红色（#c81623）",[14,138720,138373],{},[94,138722,138724],{"className":126534,"code":138723,"language":126536,"meta":24,"style":24},"div {\n  margin: 0 auto;\n}\n",[100,138725,138726,138732,138744],{"__ignoreMap":24},[103,138727,138728,138730],{"class":105,"line":106},[103,138729,51601],{"class":51290},[103,138731,15562],{"class":113},[103,138733,138734,138736,138738,138740,138742],{"class":105,"line":25},[103,138735,70460],{"class":162},[103,138737,51427],{"class":113},[103,138739,305],{"class":162},[103,138741,51546],{"class":162},[103,138743,1279],{"class":113},[103,138745,138746],{"class":105,"line":1168},[103,138747,1554],{"class":113},[14,138749,138413],{},[94,138751,138752],{"className":126534,"code":138723,"language":126536,"meta":24,"style":24},[100,138753,138754,138760,138772],{"__ignoreMap":24},[103,138755,138756,138758],{"class":105,"line":106},[103,138757,51601],{"class":51290},[103,138759,15562],{"class":113},[103,138761,138762,138764,138766,138768,138770],{"class":105,"line":25},[103,138763,70460],{"class":162},[103,138765,51427],{"class":113},[103,138767,305],{"class":162},[103,138769,51546],{"class":162},[103,138771,1279],{"class":113},[103,138773,138774],{"class":105,"line":1168},[103,138775,1554],{"class":113},[14,138777,138778,138779,138782],{},"4 号盒子是 ",[100,138780,138781],{},"shopcar"," 购物车模块",[1120,138784,138785,138790,138793,138796],{},[60,138786,123317,138787,138789],{},[100,138788,138781],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[60,138791,138792],{},"count 统计部分用绝对定位做",[60,138794,138795],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[60,138797,138798],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138800,138373],{},[94,138802,138803],{"className":126534,"code":131966,"language":126536,"meta":24,"style":24},[100,138804,138805,138809,138823,138827,138841,138845,138859,138863,138877,138881],{"__ignoreMap":24},[103,138806,138807],{"class":105,"line":106},[103,138808,131973],{"class":172},[103,138810,138811,138813,138815,138817,138819,138821],{"class":105,"line":25},[103,138812,131978],{"class":1952},[103,138814,79797],{"class":113},[103,138816,128894],{"class":162},[103,138818,51427],{"class":113},[103,138820,131987],{"class":162},[103,138822,129464],{"class":113},[103,138824,138825],{"class":105,"line":1168},[103,138826,131994],{"class":172},[103,138828,138829,138831,138833,138835,138837,138839],{"class":105,"line":1183},[103,138830,131999],{"class":1952},[103,138832,79797],{"class":113},[103,138834,128894],{"class":162},[103,138836,51427],{"class":113},[103,138838,54754],{"class":162},[103,138840,129464],{"class":113},[103,138842,138843],{"class":105,"line":1189},[103,138844,132014],{"class":172},[103,138846,138847,138849,138851,138853,138855,138857],{"class":105,"line":1203},[103,138848,132019],{"class":1952},[103,138850,79797],{"class":113},[103,138852,128894],{"class":162},[103,138854,51427],{"class":113},[103,138856,54821],{"class":162},[103,138858,129464],{"class":113},[103,138860,138861],{"class":105,"line":1209},[103,138862,132034],{"class":172},[103,138864,138865,138867,138869,138871,138873,138875],{"class":105,"line":1300},[103,138866,132039],{"class":1952},[103,138868,79797],{"class":113},[103,138870,128894],{"class":162},[103,138872,51427],{"class":113},[103,138874,86223],{"class":162},[103,138876,129464],{"class":113},[103,138878,138879],{"class":105,"line":1306},[103,138880,132054],{"class":172},[103,138882,138883,138885,138887,138889,138891,138893],{"class":105,"line":1318},[103,138884,132059],{"class":1952},[103,138886,79797],{"class":113},[103,138888,128894],{"class":162},[103,138890,51427],{"class":113},[103,138892,132068],{"class":162},[103,138894,129464],{"class":113},[14,138896,138413],{},[94,138898,138899],{"className":126534,"code":131966,"language":126536,"meta":24,"style":24},[100,138900,138901,138905,138919,138923,138937,138941,138955,138959,138973,138977],{"__ignoreMap":24},[103,138902,138903],{"class":105,"line":106},[103,138904,131973],{"class":172},[103,138906,138907,138909,138911,138913,138915,138917],{"class":105,"line":25},[103,138908,131978],{"class":1952},[103,138910,79797],{"class":113},[103,138912,128894],{"class":162},[103,138914,51427],{"class":113},[103,138916,131987],{"class":162},[103,138918,129464],{"class":113},[103,138920,138921],{"class":105,"line":1168},[103,138922,131994],{"class":172},[103,138924,138925,138927,138929,138931,138933,138935],{"class":105,"line":1183},[103,138926,131999],{"class":1952},[103,138928,79797],{"class":113},[103,138930,128894],{"class":162},[103,138932,51427],{"class":113},[103,138934,54754],{"class":162},[103,138936,129464],{"class":113},[103,138938,138939],{"class":105,"line":1189},[103,138940,132014],{"class":172},[103,138942,138943,138945,138947,138949,138951,138953],{"class":105,"line":1203},[103,138944,132019],{"class":1952},[103,138946,79797],{"class":113},[103,138948,128894],{"class":162},[103,138950,51427],{"class":113},[103,138952,54821],{"class":162},[103,138954,129464],{"class":113},[103,138956,138957],{"class":105,"line":1209},[103,138958,132034],{"class":172},[103,138960,138961,138963,138965,138967,138969,138971],{"class":105,"line":1300},[103,138962,132039],{"class":1952},[103,138964,79797],{"class":113},[103,138966,128894],{"class":162},[103,138968,51427],{"class":113},[103,138970,86223],{"class":162},[103,138972,129464],{"class":113},[103,138974,138975],{"class":105,"line":1306},[103,138976,132054],{"class":172},[103,138978,138979,138981,138983,138985,138987,138989],{"class":105,"line":1318},[103,138980,132059],{"class":1952},[103,138982,79797],{"class":113},[103,138984,128894],{"class":162},[103,138986,51427],{"class":113},[103,138988,132068],{"class":162},[103,138990,129464],{"class":113},[74,138992,138994,138995,138997],{"id":138993},"_1544-nav导航模块制作","15.4.4 ",[100,138996,53703],{},"导航模块制作",[1451,138999],{"style":126390,"src":139000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139002,139003,139005],{},[100,139004,53703],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139007,139008,139009],{},"1 号盒子左侧浮动，",[100,139010,139011],{},"dropdown",[1120,139013,139014,139024,139032,139038,139046,139056,139064,139075],{},[60,139015,139016,139017,101008,139020,139023],{},"1号盒子有讲究，根据相关性 里面包含 ",[100,139018,139019],{},".dt",[100,139021,139022],{},".dd"," 两个盒子",[60,139025,139026,139028,139029,139031],{},[100,139027,139019],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[100,139030,139022],{}," 挤到下面去了",[60,139033,139034,139035,139037],{},"给 ",[100,139036,139022],{}," 盒子设置宽度 和 高度，以及背景颜色",[60,139039,139034,139040,139042,139043,120227],{},[100,139041,139022],{}," 盒子里面定义 无序列表 （",[100,139044,139045],{},"ul > li > a",[60,139047,139048,139049,139051,139052,139055],{},"每个 ",[100,139050,60],{}," 都有一个高度（",[100,139053,139054],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[60,139057,139034,139058,139060,139061,120227],{},[100,139059,60],{}," 里面的a设置文字大小（",[100,139062,139063],{},"14px",[60,139065,139034,139066,139068,139069,139071,139072,139074],{},[100,139067,60],{}," 设置 ",[100,139070,127695],{},"，当鼠标移入的时候，让",[100,139073,60],{},"的背景变成白色，让里面的文字变成红色",[60,139076,139077,139079,139080,139082,139083,139085],{},[100,139078,60],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[100,139081,60],{},"的右侧，那么给",[100,139084,60],{},"设置相对定位",[14,139087,139088],{},"一定要注意相关性",[14,139090,138373],{},[94,139092,139093],{"className":126534,"code":138376,"language":126536,"meta":24,"style":24},[100,139094,139095,139103,139113,139123],{"__ignoreMap":24},[103,139096,139097,139099,139101],{"class":105,"line":106},[103,139098,51601],{"class":51290},[103,139100,137535],{"class":1952},[103,139102,15562],{"class":113},[103,139104,139105,139107,139109,139111],{"class":105,"line":25},[103,139106,137542],{"class":162},[103,139108,51427],{"class":113},[103,139110,7642],{"class":218},[103,139112,1279],{"class":113},[103,139114,139115,139117,139119,139121],{"class":105,"line":1168},[103,139116,128150],{"class":162},[103,139118,51427],{"class":113},[103,139120,60859],{"class":162},[103,139122,1279],{"class":113},[103,139124,139125],{"class":105,"line":1183},[103,139126,1554],{"class":113},[14,139128,138413],{},[94,139130,139131],{"className":126534,"code":138376,"language":126536,"meta":24,"style":24},[100,139132,139133,139141,139151,139161],{"__ignoreMap":24},[103,139134,139135,139137,139139],{"class":105,"line":106},[103,139136,51601],{"class":51290},[103,139138,137535],{"class":1952},[103,139140,15562],{"class":113},[103,139142,139143,139145,139147,139149],{"class":105,"line":25},[103,139144,137542],{"class":162},[103,139146,51427],{"class":113},[103,139148,7642],{"class":218},[103,139150,1279],{"class":113},[103,139152,139153,139155,139157,139159],{"class":105,"line":1168},[103,139154,128150],{"class":162},[103,139156,51427],{"class":113},[103,139158,60859],{"class":162},[103,139160,1279],{"class":113},[103,139162,139163],{"class":105,"line":1183},[103,139164,1554],{"class":113},[14,139166,139167],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139169,139170,139171,139174],{},"2 号盒子左侧浮动，",[100,139172,139173],{},"navitems"," 导航栏组",[1120,139176,139177,139182,139191],{},[60,139178,139179,139180],{},"里面结构是 ",[100,139181,139045],{},[60,139183,139184,139185,139187,139188,139190],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[100,139186,17],{},"左右的",[100,139189,30873],{},"把两侧撑开",[60,139192,139193],{},"让文字垂直居中（行高等于高度）",[1451,139195],{"style":126390,"src":139196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139198,139199],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139201,138373],{},[94,139203,139205],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},".box {\n  float: left;\n}\n",[100,139206,139207,139213,139223],{"__ignoreMap":24},[103,139208,139209,139211],{"class":105,"line":106},[103,139210,130382],{"class":1952},[103,139212,15562],{"class":113},[103,139214,139215,139217,139219,139221],{"class":105,"line":25},[103,139216,131014],{"class":162},[103,139218,51427],{"class":113},[103,139220,23726],{"class":162},[103,139222,1279],{"class":113},[103,139224,139225],{"class":105,"line":1168},[103,139226,1554],{"class":113},[14,139228,138413],{},[94,139230,139231],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,139232,139233,139239,139249],{"__ignoreMap":24},[103,139234,139235,139237],{"class":105,"line":106},[103,139236,130382],{"class":1952},[103,139238,15562],{"class":113},[103,139240,139241,139243,139245,139247],{"class":105,"line":25},[103,139242,131014],{"class":162},[103,139244,51427],{"class":113},[103,139246,23726],{"class":162},[103,139248,1279],{"class":113},[103,139250,139251],{"class":105,"line":1168},[103,139252,1554],{"class":113},[14,139254,139255],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1451,139257],{"style":126390,"src":139258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[94,139260,139261],{"className":126534,"code":130691,"language":126536,"meta":24,"style":24},[100,139262,139263,139269,139285],{"__ignoreMap":24},[103,139264,139265,139267],{"class":105,"line":106},[103,139266,51601],{"class":51290},[103,139268,15562],{"class":113},[103,139270,139271,139273,139275,139277,139279,139281,139283],{"class":105,"line":25},[103,139272,70886],{"class":162},[103,139274,51427],{"class":113},[103,139276,331],{"class":162},[103,139278,51482],{"class":109},[103,139280,51511],{"class":162},[103,139282,129926],{"class":162},[103,139284,1279],{"class":113},[103,139286,139287],{"class":105,"line":1168},[103,139288,1554],{"class":113},[74,139290,139292],{"id":139291},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1451,139294],{"style":126390,"src":139295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1120,139297,139298,139303,139308],{},[60,139299,139300,139302],{},[100,139301,131737],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[60,139304,139305,139307],{},[100,139306,131737],{}," 里面有一个大的版心",[60,139309,139310,139311,139314,139315],{},"版心里面包含 1 号盒子，",[100,139312,139313],{},"mod_service"," 是服务模块，mod 是模块的意思",[1120,139316,139317,139322,139335,139351,139356],{},[60,139318,139034,139319,139321],{},[100,139320,139313],{}," 设置高度（80px）和下边框",[60,139323,139324,139325,139328,139329,139331,139332,139334],{},"在里面定义 ",[100,139326,139327],{},"ul > li"," ,每个",[100,139330,60],{}," 宽度是300px 高度是 50px，给每个",[100,139333,60],{},"设置35px的左内边距",[60,139336,139337,139338,139340,139341,139343,139344,139346,139347,18400,139349,120227],{},"在每个",[100,139339,60],{},"里面，放一个 ",[100,139342,22900],{},"（里面放图标），一个",[100,139345,51601],{},"（里面放",[100,139348,51601],{},[100,139350,14],{},[60,139352,139034,139353,139355],{},[100,139354,22900],{},"设置浮动，让h5与这个div左右排列",[60,139357,139358],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139360,138373],{},[94,139362,139364],{"className":126534,"code":139363,"language":126536,"meta":24,"style":24},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[100,139365,139366,139372,139384,139396,139423],{"__ignoreMap":24},[103,139367,139368,139370],{"class":105,"line":106},[103,139369,134291],{"class":1952},[103,139371,15562],{"class":113},[103,139373,139374,139376,139378,139380,139382],{"class":105,"line":25},[103,139375,70558],{"class":162},[103,139377,51427],{"class":113},[103,139379,813],{"class":162},[103,139381,51482],{"class":109},[103,139383,1279],{"class":113},[103,139385,139386,139388,139390,139392,139394],{"class":105,"line":1168},[103,139387,70778],{"class":162},[103,139389,51427],{"class":113},[103,139391,813],{"class":162},[103,139393,51482],{"class":109},[103,139395,1279],{"class":113},[103,139397,139398,139400,139402,139404,139406,139408,139410,139412,139415,139417,139419,139421],{"class":105,"line":1183},[103,139399,70601],{"class":162},[103,139401,51427],{"class":113},[103,139403,61716],{"class":162},[103,139405,114],{"class":113},[103,139407,134330],{"class":5206},[103,139409,13704],{"class":113},[103,139411,61726],{"class":162},[103,139413,139414],{"class":162}," -10",[103,139416,51482],{"class":109},[103,139418,134349],{"class":162},[103,139420,51482],{"class":109},[103,139422,1279],{"class":113},[103,139424,139425],{"class":105,"line":1189},[103,139426,1554],{"class":113},[14,139428,138413],{},[94,139430,139431],{"className":126534,"code":139363,"language":126536,"meta":24,"style":24},[100,139432,139433,139439,139451,139463,139489],{"__ignoreMap":24},[103,139434,139435,139437],{"class":105,"line":106},[103,139436,134291],{"class":1952},[103,139438,15562],{"class":113},[103,139440,139441,139443,139445,139447,139449],{"class":105,"line":25},[103,139442,70558],{"class":162},[103,139444,51427],{"class":113},[103,139446,813],{"class":162},[103,139448,51482],{"class":109},[103,139450,1279],{"class":113},[103,139452,139453,139455,139457,139459,139461],{"class":105,"line":1168},[103,139454,70778],{"class":162},[103,139456,51427],{"class":113},[103,139458,813],{"class":162},[103,139460,51482],{"class":109},[103,139462,1279],{"class":113},[103,139464,139465,139467,139469,139471,139473,139475,139477,139479,139481,139483,139485,139487],{"class":105,"line":1183},[103,139466,70601],{"class":162},[103,139468,51427],{"class":113},[103,139470,61716],{"class":162},[103,139472,114],{"class":113},[103,139474,134330],{"class":5206},[103,139476,13704],{"class":113},[103,139478,61726],{"class":162},[103,139480,139414],{"class":162},[103,139482,51482],{"class":109},[103,139484,134349],{"class":162},[103,139486,51482],{"class":109},[103,139488,1279],{"class":113},[103,139490,139491],{"class":105,"line":1189},[103,139492,1554],{"class":113},[14,139494,139495],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1120,139497,139498,139501,139507,139513,139525],{},[60,139499,139500],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[60,139502,139503,139504,120227],{},"里面的布局利用 自定义列表来实现（",[100,139505,139506],{},"dl > dt + dd",[60,139508,139034,139509,139512],{},[100,139510,139511],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[60,139514,139034,139515,139518,139519,18400,139521,139524],{},[100,139516,139517],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[100,139520,139517],{},[100,139522,139523],{},"dd","之间有些距离",[60,139526,139527],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139529,138373],{},[94,139531,139532],{"className":126534,"code":138723,"language":126536,"meta":24,"style":24},[100,139533,139534,139540,139552],{"__ignoreMap":24},[103,139535,139536,139538],{"class":105,"line":106},[103,139537,51601],{"class":51290},[103,139539,15562],{"class":113},[103,139541,139542,139544,139546,139548,139550],{"class":105,"line":25},[103,139543,70460],{"class":162},[103,139545,51427],{"class":113},[103,139547,305],{"class":162},[103,139549,51546],{"class":162},[103,139551,1279],{"class":113},[103,139553,139554],{"class":105,"line":1168},[103,139555,1554],{"class":113},[14,139557,138413],{},[94,139559,139560],{"className":126534,"code":138723,"language":126536,"meta":24,"style":24},[100,139561,139562,139568,139580],{"__ignoreMap":24},[103,139563,139564,139566],{"class":105,"line":106},[103,139565,51601],{"class":51290},[103,139567,15562],{"class":113},[103,139569,139570,139572,139574,139576,139578],{"class":105,"line":25},[103,139571,70460],{"class":162},[103,139573,51427],{"class":113},[103,139575,305],{"class":162},[103,139577,51546],{"class":162},[103,139579,1279],{"class":113},[103,139581,139582],{"class":105,"line":1168},[103,139583,1554],{"class":113},[14,139585,139586],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1120,139588,139589,139598,139601,139612],{},[60,139590,139591,139592,139594,139595,139597],{},"分为上下两块，上面是 ",[100,139593,131754],{}," 友情链接，下面是 ",[100,139596,131747],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[60,139599,139600],{},"把内容分别复制到相应模块中",[60,139602,139034,139603,139605,139606,139608,139609,139611],{},[100,139604,131754],{}," 设置 15px 的下外边距，给",[100,139607,131754],{}," 里面 的 ",[100,139610,17],{}," 标签设置 左右 3px 的外边距",[60,139613,139614,139615,139617],{},"给",[100,139616,131747],{}," 设置 20px 的行高",[14,139619,138373],{},[94,139621,139622],{"className":126534,"code":138723,"language":126536,"meta":24,"style":24},[100,139623,139624,139630,139642],{"__ignoreMap":24},[103,139625,139626,139628],{"class":105,"line":106},[103,139627,51601],{"class":51290},[103,139629,15562],{"class":113},[103,139631,139632,139634,139636,139638,139640],{"class":105,"line":25},[103,139633,70460],{"class":162},[103,139635,51427],{"class":113},[103,139637,305],{"class":162},[103,139639,51546],{"class":162},[103,139641,1279],{"class":113},[103,139643,139644],{"class":105,"line":1168},[103,139645,1554],{"class":113},[14,139647,138413],{},[94,139649,139650],{"className":126534,"code":138723,"language":126536,"meta":24,"style":24},[100,139651,139652,139658,139670],{"__ignoreMap":24},[103,139653,139654,139656],{"class":105,"line":106},[103,139655,51601],{"class":51290},[103,139657,15562],{"class":113},[103,139659,139660,139662,139664,139666,139668],{"class":105,"line":25},[103,139661,70460],{"class":162},[103,139663,51427],{"class":113},[103,139665,305],{"class":162},[103,139667,51546],{"class":162},[103,139669,1279],{"class":113},[103,139671,139672],{"class":105,"line":1168},[103,139673,1554],{"class":113},[14,139675,139676],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5116,139678,139679],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":24,"searchDepth":25,"depth":25,"links":139681},[139682,139683,139684,139691],{"id":137962,"depth":25,"text":137963},{"id":137981,"depth":25,"text":137982},{"id":138008,"depth":25,"text":138009,"children":139685},[139686,139687,139688,139689,139690],{"id":138012,"depth":1168,"text":138013},{"id":138025,"depth":1168,"text":138026},{"id":138049,"depth":1168,"text":138050},{"id":138071,"depth":1168,"text":138072},{"id":138143,"depth":1168,"text":138144},{"id":138269,"depth":25,"text":138270,"children":139692},[139693,139694,139695,139696,139698],{"id":138273,"depth":1168,"text":138274},{"id":138280,"depth":1168,"text":138281},{"id":138452,"depth":1168,"text":138453},{"id":138993,"depth":1168,"text":139697},"15.4.4 nav导航模块制作",{"id":139291,"depth":1168,"text":139292},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137954,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139705,"title":139706,"body":139707,"description":27,"extension":28,"meta":142109,"navigation":30,"path":142110,"seo":142111,"stem":142112,"__hash__":142113},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139708,"toc":142086},[139709,139712,139716,139720,139732,139735,139738,139741,139752,139754,139778,139780,139804,139809,139812,139814,139850,139852,139888,139891,139896,139899,139902,139905,139935,139942,139945,139955,139957,139991,139994,140028,140034,140051,140053,140089,140091,140127,140132,140157,140159,140185,140187,140211,140218,140221,140285,140287,140329,140331,140371,140378,140383,140385,140415,140417,140447,140451,140454,140461,140473,140475,140501,140503,140527,140530,140532,140556,140562,140572,140574,140604,140606,140636,140643,140684,140686,140722,140724,140760,140764,140767,140770,140773,140779,140784,140787,140810,140813,140837,140840,140864,140869,140872,140875,140878,140881,140884,140958,140960,140990,140992,141022,141025,141028,141060,141064,141068,141082,141091,141094,141099,141101,141195,141197,141291,141314,141316,141340,141342,141366,141373,141376,141386,141388,141412,141417,141425,141427,141457,141462,141502,141504,141530,141532,141558,141562,141565,141570,141573,141577,141585,141592,141600,141602,141632,141634,141664,141672,141675,141678,141680,141710,141712,141742,141745,141750,141752,141776,141778,141802,141805,141890,141892,141916,141918,141942,141946,141948,141972,141974,142008,142012,142026,142029,142034,142037,142042,142045,142075,142083],[10,139710,139706],{"id":139711},"_16-品优购项目下篇-主体与页面开发",[45,139713,139715],{"id":139714},"_161-项目主体模块制作","16.1 项目主体模块制作",[74,139717,139719],{"id":139718},"_1611-首页制作","16.1.1 首页制作",[14,139721,139722,139724,139725,139727,139728,139731],{},[263,139723,102048],{}," 主体模块是 ",[263,139726,74048],{}," 里面专有的，注意需要新的样式文件 ",[263,139729,139730],{},"index.css，"," 就不要写在common.css中了",[1451,139733],{"style":126390,"src":139734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1451,139736],{"style":126390,"src":139737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139739,139740],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1120,139742,139743,139746,139749],{},[60,139744,139745],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[60,139747,139748],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[60,139750,139751],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139753,138373],{},[94,139755,139756],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,139757,139758,139764,139774],{"__ignoreMap":24},[103,139759,139760,139762],{"class":105,"line":106},[103,139761,130382],{"class":1952},[103,139763,15562],{"class":113},[103,139765,139766,139768,139770,139772],{"class":105,"line":25},[103,139767,131014],{"class":162},[103,139769,51427],{"class":113},[103,139771,23726],{"class":162},[103,139773,1279],{"class":113},[103,139775,139776],{"class":105,"line":1168},[103,139777,1554],{"class":113},[14,139779,138413],{},[94,139781,139782],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,139783,139784,139790,139800],{"__ignoreMap":24},[103,139785,139786,139788],{"class":105,"line":106},[103,139787,130382],{"class":1952},[103,139789,15562],{"class":113},[103,139791,139792,139794,139796,139798],{"class":105,"line":25},[103,139793,131014],{"class":162},[103,139795,51427],{"class":113},[103,139797,23726],{"class":162},[103,139799,1279],{"class":113},[103,139801,139802],{"class":105,"line":1168},[103,139803,1554],{"class":113},[57,139805,139806],{},[60,139807,139808],{},"左侧focus模块制作",[1451,139810],{"style":126390,"src":139811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139813,138373],{},[94,139815,139816],{"className":126534,"code":127857,"language":126536,"meta":24,"style":24},[100,139817,139818,139826,139836,139846],{"__ignoreMap":24},[103,139819,139820,139822,139824],{"class":105,"line":106},[103,139821,53811],{"class":51290},[103,139823,61890],{"class":1952},[103,139825,15562],{"class":113},[103,139827,139828,139830,139832,139834],{"class":105,"line":25},[103,139829,127872],{"class":162},[103,139831,51427],{"class":113},[103,139833,54879],{"class":162},[103,139835,1279],{"class":113},[103,139837,139838,139840,139842,139844],{"class":105,"line":1168},[103,139839,70788],{"class":162},[103,139841,51427],{"class":113},[103,139843,54727],{"class":162},[103,139845,1279],{"class":113},[103,139847,139848],{"class":105,"line":1183},[103,139849,1554],{"class":113},[14,139851,138413],{},[94,139853,139854],{"className":126534,"code":127857,"language":126536,"meta":24,"style":24},[100,139855,139856,139864,139874,139884],{"__ignoreMap":24},[103,139857,139858,139860,139862],{"class":105,"line":106},[103,139859,53811],{"class":51290},[103,139861,61890],{"class":1952},[103,139863,15562],{"class":113},[103,139865,139866,139868,139870,139872],{"class":105,"line":25},[103,139867,127872],{"class":162},[103,139869,51427],{"class":113},[103,139871,54879],{"class":162},[103,139873,1279],{"class":113},[103,139875,139876,139878,139880,139882],{"class":105,"line":1168},[103,139877,70788],{"class":162},[103,139879,51427],{"class":113},[103,139881,54727],{"class":162},[103,139883,1279],{"class":113},[103,139885,139886],{"class":105,"line":1183},[103,139887,1554],{"class":113},[14,139889,139890],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[57,139892,139893],{"start":25},[60,139894,139895],{},"右侧newsflash模块制作",[1451,139897],{"style":126390,"src":139898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139900,139901],{},"右侧的模块 分为上中下三个盒子",[14,139903,139904],{},"结构代码：",[94,139906,139907],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,139908,139909],{"__ignoreMap":24},[103,139910,139911,139913,139915,139917,139919,139921,139923,139925,139927,139929,139931,139933],{"class":105,"line":106},[103,139912,1023],{"class":113},[103,139914,1451],{"class":51290},[103,139916,55229],{"class":1952},[103,139918,159],{"class":113},[103,139920,134051],{"class":218},[103,139922,55237],{"class":1952},[103,139924,159],{"class":113},[103,139926,134058],{"class":218},[103,139928,134061],{"class":1952},[103,139930,159],{"class":113},[103,139932,134066],{"class":218},[103,139934,51297],{"class":113},[14,139936,139937,139938,139941],{},"1 号盒子为 ",[100,139939,139940],{},"news"," 新闻模块 高度为 165px",[1451,139943],{"style":126390,"src":139944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,139946,139947,139948,139951,139952],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[100,139949,139950],{},"news-hd","，下面是 ",[100,139953,139954],{},"news-bd",[14,139956,139904],{},[94,139958,139959],{"className":127281,"code":130638,"language":127283,"meta":24,"style":24},[100,139960,139961,139965,139979,139983],{"__ignoreMap":24},[103,139962,139963],{"class":105,"line":106},[103,139964,130645],{"class":172},[103,139966,139967,139969,139971,139973,139975,139977],{"class":105,"line":25},[103,139968,1023],{"class":113},[103,139970,51601],{"class":51290},[103,139972,53476],{"class":1952},[103,139974,159],{"class":113},[103,139976,130658],{"class":218},[103,139978,51297],{"class":113},[103,139980,139981],{"class":105,"line":1168},[103,139982,130665],{"class":113},[103,139984,139985,139987,139989],{"class":105,"line":1183},[103,139986,51775],{"class":113},[103,139988,51601],{"class":51290},[103,139990,51297],{"class":113},[14,139992,139993],{},"样式代码：",[94,139995,139996],{"className":127281,"code":130638,"language":127283,"meta":24,"style":24},[100,139997,139998,140002,140016,140020],{"__ignoreMap":24},[103,139999,140000],{"class":105,"line":106},[103,140001,130645],{"class":172},[103,140003,140004,140006,140008,140010,140012,140014],{"class":105,"line":25},[103,140005,1023],{"class":113},[103,140007,51601],{"class":51290},[103,140009,53476],{"class":1952},[103,140011,159],{"class":113},[103,140013,130658],{"class":218},[103,140015,51297],{"class":113},[103,140017,140018],{"class":105,"line":1168},[103,140019,130665],{"class":113},[103,140021,140022,140024,140026],{"class":105,"line":1183},[103,140023,51775],{"class":113},[103,140025,51601],{"class":51290},[103,140027,51297],{"class":113},[14,140029,140030,140031,140033],{},"上面是",[100,140032,139950],{},"，设置高度是 33px，设置下边框",[1120,140035,140036,140042],{},[60,140037,140038,140039,140041],{},"里面放一个",[100,140040,22900],{}," 标题",[60,140043,140044,140045,140047,140048,140050],{},"放一个a",[100,140046,102683],{},"，内容是 更多，然后让 ",[100,140049,17],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140052,139904],{},[94,140054,140055],{"className":126534,"code":138376,"language":126536,"meta":24,"style":24},[100,140056,140057,140065,140075,140085],{"__ignoreMap":24},[103,140058,140059,140061,140063],{"class":105,"line":106},[103,140060,51601],{"class":51290},[103,140062,137535],{"class":1952},[103,140064,15562],{"class":113},[103,140066,140067,140069,140071,140073],{"class":105,"line":25},[103,140068,137542],{"class":162},[103,140070,51427],{"class":113},[103,140072,7642],{"class":218},[103,140074,1279],{"class":113},[103,140076,140077,140079,140081,140083],{"class":105,"line":1168},[103,140078,128150],{"class":162},[103,140080,51427],{"class":113},[103,140082,60859],{"class":162},[103,140084,1279],{"class":113},[103,140086,140087],{"class":105,"line":1183},[103,140088,1554],{"class":113},[14,140090,139993],{},[94,140092,140093],{"className":126534,"code":138376,"language":126536,"meta":24,"style":24},[100,140094,140095,140103,140113,140123],{"__ignoreMap":24},[103,140096,140097,140099,140101],{"class":105,"line":106},[103,140098,51601],{"class":51290},[103,140100,137535],{"class":1952},[103,140102,15562],{"class":113},[103,140104,140105,140107,140109,140111],{"class":105,"line":25},[103,140106,137542],{"class":162},[103,140108,51427],{"class":113},[103,140110,7642],{"class":218},[103,140112,1279],{"class":113},[103,140114,140115,140117,140119,140121],{"class":105,"line":1168},[103,140116,128150],{"class":162},[103,140118,51427],{"class":113},[103,140120,60859],{"class":162},[103,140122,1279],{"class":113},[103,140124,140125],{"class":105,"line":1183},[103,140126,1554],{"class":113},[14,140128,140129,140130],{},"下面是",[100,140131,139954],{},[1120,140133,140134,140142],{},[60,140135,140136,140137,101008,140139,140141],{},"里面包含 ",[100,140138,1120],{},[100,140140,60],{}," 还有链接",[60,140143,139614,140144,140146,140147,140149,140150,140153,140154],{},[100,140145,60],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[100,140148,131200],{}," 2.设置 ",[100,140151,140152],{},"white-space: nowrap;"," 3. 设置 ",[100,140155,140156],{},"text-overflow: ellipsis;",[14,140158,139904],{},[94,140160,140162],{"className":126534,"code":140161,"language":126536,"meta":24,"style":24},"div {\n  overflow: hidden;\n}\n",[100,140163,140164,140170,140181],{"__ignoreMap":24},[103,140165,140166,140168],{"class":105,"line":106},[103,140167,51601],{"class":51290},[103,140169,15562],{"class":113},[103,140171,140172,140175,140177,140179],{"class":105,"line":25},[103,140173,140174],{"class":162},"  overflow",[103,140176,51427],{"class":113},[103,140178,61704],{"class":162},[103,140180,1279],{"class":113},[103,140182,140183],{"class":105,"line":1168},[103,140184,1554],{"class":113},[14,140186,139993],{},[94,140188,140189],{"className":126534,"code":140161,"language":126536,"meta":24,"style":24},[100,140190,140191,140197,140207],{"__ignoreMap":24},[103,140192,140193,140195],{"class":105,"line":106},[103,140194,51601],{"class":51290},[103,140196,15562],{"class":113},[103,140198,140199,140201,140203,140205],{"class":105,"line":25},[103,140200,140174],{"class":162},[103,140202,51427],{"class":113},[103,140204,61704],{"class":162},[103,140206,1279],{"class":113},[103,140208,140209],{"class":105,"line":1168},[103,140210,1554],{"class":113},[14,140212,140213,140214,140217],{},"2 号盒子为 ",[100,140215,140216],{},"lifeservice"," 生活服务模块 高度为 209px",[1451,140219],{"style":126390,"src":140220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1120,140222,140223,140226,140236,140260,140271],{},[60,140224,140225],{},"设置边框（左右下边框）",[60,140227,140228,140229,140232,140233,140235],{},"里面的内容 是 ",[100,140230,140231],{},"ul > 12*li","，给",[100,140234,60],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[60,140237,140238,140239],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1120,140240,140241,140246,140255],{},[60,140242,140243,140245],{},[100,140244,140216],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[60,140247,140248,140249,140251,140252,140254],{},"可以让 ",[100,140250,140216],{}," 里面的 ",[100,140253,1120],{}," 宽度为 252，就可以装的下 4 个 小 li",[60,140256,140257,140259],{},[100,140258,140216],{}," 盒子 overflow 隐藏多余的部分就可以了",[60,140261,116457,140262,140264,140265,140267,140268,140270],{},[100,140263,60],{}," 里面放一个 ",[100,140266,554],{},"（里面放图标），下面的文本用 ",[100,140269,14],{}," 标签包裹",[60,140272,139034,140273,140275,140276,140278,140279,139068,140281,140284],{},[100,140274,554],{}," 设置 24px宽和28px的高（注意 ",[100,140277,554],{}," 是行内元素， 转成行内块），给 ",[100,140280,60],{},[100,140282,140283],{},"text-align:center"," 让里面内容居中显示",[14,140286,139904],{},[94,140288,140290],{"className":126534,"code":140289,"language":126536,"meta":24,"style":24},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[100,140291,140292,140310,140315,140325],{"__ignoreMap":24},[103,140293,140294,140296,140298,140300,140302,140304,140306,140308],{"class":105,"line":106},[103,140295,103],{"class":51290},[103,140297,12425],{"class":113},[103,140299,17],{"class":51290},[103,140301,12425],{"class":113},[103,140303,23543],{"class":51290},[103,140305,12425],{"class":113},[103,140307,263],{"class":51290},[103,140309,15562],{"class":113},[103,140311,140312],{"class":105,"line":25},[103,140313,140314],{"class":172},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[103,140316,140317,140319,140321,140323],{"class":105,"line":1168},[103,140318,128150],{"class":162},[103,140320,51427],{"class":113},[103,140322,128212],{"class":162},[103,140324,1279],{"class":113},[103,140326,140327],{"class":105,"line":1183},[103,140328,1554],{"class":113},[14,140330,139993],{},[94,140332,140333],{"className":126534,"code":140289,"language":126536,"meta":24,"style":24},[100,140334,140335,140353,140357,140367],{"__ignoreMap":24},[103,140336,140337,140339,140341,140343,140345,140347,140349,140351],{"class":105,"line":106},[103,140338,103],{"class":51290},[103,140340,12425],{"class":113},[103,140342,17],{"class":51290},[103,140344,12425],{"class":113},[103,140346,23543],{"class":51290},[103,140348,12425],{"class":113},[103,140350,263],{"class":51290},[103,140352,15562],{"class":113},[103,140354,140355],{"class":105,"line":25},[103,140356,140314],{"class":172},[103,140358,140359,140361,140363,140365],{"class":105,"line":1168},[103,140360,128150],{"class":162},[103,140362,51427],{"class":113},[103,140364,128212],{"class":162},[103,140366,1279],{"class":113},[103,140368,140369],{"class":105,"line":1183},[103,140370,1554],{"class":113},[14,140372,140373,140374,140377],{},"3 号盒子为 ",[100,140375,140376],{},"bargain"," 特价商品",[1120,140379,140380],{},[60,140381,140382],{},"这个比较简单，直接插入一张图片即可",[14,140384,139904],{},[94,140386,140387],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,140388,140389],{"__ignoreMap":24},[103,140390,140391,140393,140395,140397,140399,140401,140403,140405,140407,140409,140411,140413],{"class":105,"line":106},[103,140392,1023],{"class":113},[103,140394,1451],{"class":51290},[103,140396,55229],{"class":1952},[103,140398,159],{"class":113},[103,140400,134051],{"class":218},[103,140402,55237],{"class":1952},[103,140404,159],{"class":113},[103,140406,134058],{"class":218},[103,140408,134061],{"class":1952},[103,140410,159],{"class":113},[103,140412,134066],{"class":218},[103,140414,51297],{"class":113},[14,140416,139993],{},[94,140418,140419],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,140420,140421],{"__ignoreMap":24},[103,140422,140423,140425,140427,140429,140431,140433,140435,140437,140439,140441,140443,140445],{"class":105,"line":106},[103,140424,1023],{"class":113},[103,140426,1451],{"class":51290},[103,140428,55229],{"class":1952},[103,140430,159],{"class":113},[103,140432,134051],{"class":218},[103,140434,55237],{"class":1952},[103,140436,159],{"class":113},[103,140438,134058],{"class":218},[103,140440,134061],{"class":1952},[103,140442,159],{"class":113},[103,140444,134066],{"class":218},[103,140446,51297],{"class":113},[74,140448,140450],{"id":140449},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1451,140452],{"style":126390,"src":140453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140455,140456,140457,140460],{},"大盒子 ",[100,140458,140459],{},"recom"," 推荐模块 recommend",[1120,140462,140463],{},[60,140464,140465,140466,140468,140469,140472],{},"给这个 ",[100,140467,140459],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[100,140470,140471],{},"#ebebeb","），设置距离上边 12px",[14,140474,139904],{},[94,140476,140478],{"className":126534,"code":140477,"language":126536,"meta":24,"style":24},"div {\n  background-color: #f0f0f0;\n}\n",[100,140479,140480,140486,140497],{"__ignoreMap":24},[103,140481,140482,140484],{"class":105,"line":106},[103,140483,51601],{"class":51290},[103,140485,15562],{"class":113},[103,140487,140488,140490,140492,140495],{"class":105,"line":25},[103,140489,70868],{"class":162},[103,140491,51427],{"class":113},[103,140493,140494],{"class":162},"#f0f0f0",[103,140496,1279],{"class":113},[103,140498,140499],{"class":105,"line":1168},[103,140500,1554],{"class":113},[14,140502,139993],{},[94,140504,140505],{"className":126534,"code":140477,"language":126536,"meta":24,"style":24},[100,140506,140507,140513,140523],{"__ignoreMap":24},[103,140508,140509,140511],{"class":105,"line":106},[103,140510,51601],{"class":51290},[103,140512,15562],{"class":113},[103,140514,140515,140517,140519,140521],{"class":105,"line":25},[103,140516,70868],{"class":162},[103,140518,51427],{"class":113},[103,140520,140494],{"class":162},[103,140522,1279],{"class":113},[103,140524,140525],{"class":105,"line":1168},[103,140526,1554],{"class":113},[14,140528,140529],{},"里面包含 2 个盒子， 浮动即可",[14,140531,139904],{},[94,140533,140534],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,140535,140536,140542,140552],{"__ignoreMap":24},[103,140537,140538,140540],{"class":105,"line":106},[103,140539,130382],{"class":1952},[103,140541,15562],{"class":113},[103,140543,140544,140546,140548,140550],{"class":105,"line":25},[103,140545,131014],{"class":162},[103,140547,51427],{"class":113},[103,140549,23726],{"class":162},[103,140551,1279],{"class":113},[103,140553,140554],{"class":105,"line":1168},[103,140555,1554],{"class":113},[14,140557,140558,140559],{},"1 号盒子 ",[100,140560,140561],{},"recom_hd",[1120,140563,140564,140567],{},[60,140565,140566],{},"设置宽度205px，高度163px",[60,140568,140038,140569,140571],{},[100,140570,1451],{},"标签，插入图片即可",[14,140573,139904],{},[94,140575,140576],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,140577,140578],{"__ignoreMap":24},[103,140579,140580,140582,140584,140586,140588,140590,140592,140594,140596,140598,140600,140602],{"class":105,"line":106},[103,140581,1023],{"class":113},[103,140583,1451],{"class":51290},[103,140585,55229],{"class":1952},[103,140587,159],{"class":113},[103,140589,134051],{"class":218},[103,140591,55237],{"class":1952},[103,140593,159],{"class":113},[103,140595,134058],{"class":218},[103,140597,134061],{"class":1952},[103,140599,159],{"class":113},[103,140601,134066],{"class":218},[103,140603,51297],{"class":113},[14,140605,139993],{},[94,140607,140608],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,140609,140610],{"__ignoreMap":24},[103,140611,140612,140614,140616,140618,140620,140622,140624,140626,140628,140630,140632,140634],{"class":105,"line":106},[103,140613,1023],{"class":113},[103,140615,1451],{"class":51290},[103,140617,55229],{"class":1952},[103,140619,159],{"class":113},[103,140621,134051],{"class":218},[103,140623,55237],{"class":1952},[103,140625,159],{"class":113},[103,140627,134058],{"class":218},[103,140629,134061],{"class":1952},[103,140631,159],{"class":113},[103,140633,134066],{"class":218},[103,140635,51297],{"class":113},[14,140637,140638,140639,140642],{},"2 号盒子 ",[100,140640,140641],{},"recom_bd"," ，注意里面的小竖线",[1120,140644,140645,140656,140659,140664,140669],{},[60,140646,140647,140648,140650,140651,140653,140654],{},"右侧结构里面放 ",[100,140649,1120],{}," 包含 4个 ",[100,140652,60],{},"，每个li里面包含一个",[100,140655,1451],{},[60,140657,140658],{},"直接利用切片工具把里面的内容当成一张图片",[60,140660,139034,140661,140663],{},[100,140662,60],{}," 设置浮动",[60,140665,139034,140666,140668],{},[100,140667,1451],{}," 设置宽高，宽度 248px，高度 163px",[60,140670,140671,140672,140232,140675,140677,140678,140680,140681],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[100,140673,140674],{},"top 10px",[100,140676,60],{},"设置相对定位（注意，最后一个",[100,140679,60],{},"不用设置伪元素），可以利用 ",[100,140682,140683],{},"nth-child(-n+3){...}",[14,140685,139904],{},[94,140687,140688],{"className":126534,"code":138376,"language":126536,"meta":24,"style":24},[100,140689,140690,140698,140708,140718],{"__ignoreMap":24},[103,140691,140692,140694,140696],{"class":105,"line":106},[103,140693,51601],{"class":51290},[103,140695,137535],{"class":1952},[103,140697,15562],{"class":113},[103,140699,140700,140702,140704,140706],{"class":105,"line":25},[103,140701,137542],{"class":162},[103,140703,51427],{"class":113},[103,140705,7642],{"class":218},[103,140707,1279],{"class":113},[103,140709,140710,140712,140714,140716],{"class":105,"line":1168},[103,140711,128150],{"class":162},[103,140713,51427],{"class":113},[103,140715,60859],{"class":162},[103,140717,1279],{"class":113},[103,140719,140720],{"class":105,"line":1183},[103,140721,1554],{"class":113},[14,140723,139993],{},[94,140725,140726],{"className":126534,"code":138376,"language":126536,"meta":24,"style":24},[100,140727,140728,140736,140746,140756],{"__ignoreMap":24},[103,140729,140730,140732,140734],{"class":105,"line":106},[103,140731,51601],{"class":51290},[103,140733,137535],{"class":1952},[103,140735,15562],{"class":113},[103,140737,140738,140740,140742,140744],{"class":105,"line":25},[103,140739,137542],{"class":162},[103,140741,51427],{"class":113},[103,140743,7642],{"class":218},[103,140745,1279],{"class":113},[103,140747,140748,140750,140752,140754],{"class":105,"line":1168},[103,140749,128150],{"class":162},[103,140751,51427],{"class":113},[103,140753,60859],{"class":162},[103,140755,1279],{"class":113},[103,140757,140758],{"class":105,"line":1183},[103,140759,1554],{"class":113},[74,140761,140763],{"id":140762},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1451,140765],{"style":126390,"src":140766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140768,140769],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140771,140772],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140774,140775,140778],{},[100,140776,140777],{},"box_hd"," 制作",[14,140780,140558,140781,140783],{},[100,140782,140777],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1451,140785],{"style":126390,"src":140786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1120,140788,140789,140794,140799,140802],{},[60,140790,140791,140793],{},[100,140792,140777],{}," 给 30px 的高度，2个像素的下边框",[60,140795,140796,140797],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[100,140798,139045],{},[60,140800,140801],{},"左侧盒左浮动，右侧盒子右浮动",[60,140803,140804,140806,140807,140809],{},[100,140805,17],{},"标签之间的距离用左右的",[100,140808,30873],{},"撑开即可",[14,140811,140812],{},"结构代码",[94,140814,140815],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,140816,140817,140823,140833],{"__ignoreMap":24},[103,140818,140819,140821],{"class":105,"line":106},[103,140820,130382],{"class":1952},[103,140822,15562],{"class":113},[103,140824,140825,140827,140829,140831],{"class":105,"line":25},[103,140826,131014],{"class":162},[103,140828,51427],{"class":113},[103,140830,23726],{"class":162},[103,140832,1279],{"class":113},[103,140834,140835],{"class":105,"line":1168},[103,140836,1554],{"class":113},[14,140838,140839],{},"样式代码",[94,140841,140842],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,140843,140844,140850,140860],{"__ignoreMap":24},[103,140845,140846,140848],{"class":105,"line":106},[103,140847,130382],{"class":1952},[103,140849,15562],{"class":113},[103,140851,140852,140854,140856,140858],{"class":105,"line":25},[103,140853,131014],{"class":162},[103,140855,51427],{"class":113},[103,140857,23726],{"class":162},[103,140859,1279],{"class":113},[103,140861,140862],{"class":105,"line":1168},[103,140863,1554],{"class":113},[14,140865,140866,140778],{},[100,140867,140868],{},"box_bd",[14,140870,140871],{},"2 号盒子 box_bd，不要给高度",[1451,140873],{"style":126390,"src":140874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140876,140877],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140879,140880],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140882,140883],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1120,140885,140886,140898,140914],{},[60,140887,140888,140890,140891,140894,140895,140897],{},[100,140889,140868],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[100,140892,140893],{},"tab_content","，在",[100,140896,140893],{}," 里面包裹tab选项卡对应的内容",[60,140899,140900,140901,140904,140905,140907,140908,140910,140911,140913],{},"内容被一个大盒子包裹（",[100,140902,140903],{},"tab_list_item","），里面是 ",[100,140906,1120],{}," 包裹 5个 ",[100,140909,60],{},"，每个",[100,140912,60],{},"设置对应的宽度，然后设置浮动",[60,140915,140916,140917,140919,140920,140922,140923],{},"而这5个",[100,140918,60],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[100,140921,60],{},"设置",[1120,140924,140925,140943,140946],{},[60,140926,140927,140928,140930,140931,140933,140934,140936,140937,140939,140940,140942],{},"第一个小 ",[100,140929,60],{}," 分为上下结构，上面是 ",[100,140932,1120],{}," 包裹 ",[100,140935,60],{}," ，",[100,140938,60],{},"里面包裹 ",[100,140941,17],{},"，下面插入一张图片",[60,140944,140945],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[60,140947,140948,140949,140951,140952,140954,140955,140957],{},"后面的小 ",[100,140950,60],{}," 里面先放一个",[100,140953,17],{},"标签，然后在",[100,140956,17],{},"标签里面插入图片即可",[14,140959,140812],{},[94,140961,140962],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,140963,140964],{"__ignoreMap":24},[103,140965,140966,140968,140970,140972,140974,140976,140978,140980,140982,140984,140986,140988],{"class":105,"line":106},[103,140967,1023],{"class":113},[103,140969,1451],{"class":51290},[103,140971,55229],{"class":1952},[103,140973,159],{"class":113},[103,140975,134051],{"class":218},[103,140977,55237],{"class":1952},[103,140979,159],{"class":113},[103,140981,134058],{"class":218},[103,140983,134061],{"class":1952},[103,140985,159],{"class":113},[103,140987,134066],{"class":218},[103,140989,51297],{"class":113},[14,140991,140839],{},[94,140993,140994],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,140995,140996],{"__ignoreMap":24},[103,140997,140998,141000,141002,141004,141006,141008,141010,141012,141014,141016,141018,141020],{"class":105,"line":106},[103,140999,1023],{"class":113},[103,141001,1451],{"class":51290},[103,141003,55229],{"class":1952},[103,141005,159],{"class":113},[103,141007,134051],{"class":218},[103,141009,55237],{"class":1952},[103,141011,159],{"class":113},[103,141013,134058],{"class":218},[103,141015,134061],{"class":1952},[103,141017,159],{"class":113},[103,141019,134066],{"class":218},[103,141021,51297],{"class":113},[14,141023,141024],{},"tab栏切换需求！！！！！！介绍：",[1451,141026],{"style":126390,"src":141027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1120,141029,141030,141038,141044,141047],{},[60,141031,141032,141035,141036],{},[100,141033,141034],{},"tab","栏的布局是 ",[100,141037,139045],{},[60,141039,141040,141041,141043],{},"有多少个",[100,141042,141034],{},"选项卡，那么对应就有多少个内容",[60,141045,141046],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[60,141048,141049,141050,141053,141054,141056,141057,141059],{},"等后面我们学习了",[100,141051,141052],{},"js","之后，我们就会配合",[100,141055,141052],{},"来实现，",[100,141058,141034],{},"栏的切换",[45,141061,141063],{"id":141062},"_162-列表制作","16.2 列表制作",[74,141065,141067],{"id":141066},"_1621-准备工作","16.2.1 准备工作",[1120,141069,141070,141073,141076,141079],{},[60,141071,141072],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[60,141074,141075],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[60,141077,141078],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[60,141080,141081],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[74,141083,141085,141086,101008,141088,141090],{"id":141084},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[100,141087,131539],{},[100,141089,53703],{}," 修改",[1451,141092],{"style":126390,"src":141093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1120,141095,141096],{},[60,141097,141098],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141100,139904],{},[94,141102,141103],{"className":126534,"code":131966,"language":126536,"meta":24,"style":24},[100,141104,141105,141109,141123,141127,141141,141145,141159,141163,141177,141181],{"__ignoreMap":24},[103,141106,141107],{"class":105,"line":106},[103,141108,131973],{"class":172},[103,141110,141111,141113,141115,141117,141119,141121],{"class":105,"line":25},[103,141112,131978],{"class":1952},[103,141114,79797],{"class":113},[103,141116,128894],{"class":162},[103,141118,51427],{"class":113},[103,141120,131987],{"class":162},[103,141122,129464],{"class":113},[103,141124,141125],{"class":105,"line":1168},[103,141126,131994],{"class":172},[103,141128,141129,141131,141133,141135,141137,141139],{"class":105,"line":1183},[103,141130,131999],{"class":1952},[103,141132,79797],{"class":113},[103,141134,128894],{"class":162},[103,141136,51427],{"class":113},[103,141138,54754],{"class":162},[103,141140,129464],{"class":113},[103,141142,141143],{"class":105,"line":1189},[103,141144,132014],{"class":172},[103,141146,141147,141149,141151,141153,141155,141157],{"class":105,"line":1203},[103,141148,132019],{"class":1952},[103,141150,79797],{"class":113},[103,141152,128894],{"class":162},[103,141154,51427],{"class":113},[103,141156,54821],{"class":162},[103,141158,129464],{"class":113},[103,141160,141161],{"class":105,"line":1209},[103,141162,132034],{"class":172},[103,141164,141165,141167,141169,141171,141173,141175],{"class":105,"line":1300},[103,141166,132039],{"class":1952},[103,141168,79797],{"class":113},[103,141170,128894],{"class":162},[103,141172,51427],{"class":113},[103,141174,86223],{"class":162},[103,141176,129464],{"class":113},[103,141178,141179],{"class":105,"line":1306},[103,141180,132054],{"class":172},[103,141182,141183,141185,141187,141189,141191,141193],{"class":105,"line":1318},[103,141184,132059],{"class":1952},[103,141186,79797],{"class":113},[103,141188,128894],{"class":162},[103,141190,51427],{"class":113},[103,141192,132068],{"class":162},[103,141194,129464],{"class":113},[14,141196,139993],{},[94,141198,141199],{"className":126534,"code":131966,"language":126536,"meta":24,"style":24},[100,141200,141201,141205,141219,141223,141237,141241,141255,141259,141273,141277],{"__ignoreMap":24},[103,141202,141203],{"class":105,"line":106},[103,141204,131973],{"class":172},[103,141206,141207,141209,141211,141213,141215,141217],{"class":105,"line":25},[103,141208,131978],{"class":1952},[103,141210,79797],{"class":113},[103,141212,128894],{"class":162},[103,141214,51427],{"class":113},[103,141216,131987],{"class":162},[103,141218,129464],{"class":113},[103,141220,141221],{"class":105,"line":1168},[103,141222,131994],{"class":172},[103,141224,141225,141227,141229,141231,141233,141235],{"class":105,"line":1183},[103,141226,131999],{"class":1952},[103,141228,79797],{"class":113},[103,141230,128894],{"class":162},[103,141232,51427],{"class":113},[103,141234,54754],{"class":162},[103,141236,129464],{"class":113},[103,141238,141239],{"class":105,"line":1189},[103,141240,132014],{"class":172},[103,141242,141243,141245,141247,141249,141251,141253],{"class":105,"line":1203},[103,141244,132019],{"class":1952},[103,141246,79797],{"class":113},[103,141248,128894],{"class":162},[103,141250,51427],{"class":113},[103,141252,54821],{"class":162},[103,141254,129464],{"class":113},[103,141256,141257],{"class":105,"line":1209},[103,141258,132034],{"class":172},[103,141260,141261,141263,141265,141267,141269,141271],{"class":105,"line":1300},[103,141262,132039],{"class":1952},[103,141264,79797],{"class":113},[103,141266,128894],{"class":162},[103,141268,51427],{"class":113},[103,141270,86223],{"class":162},[103,141272,129464],{"class":113},[103,141274,141275],{"class":105,"line":1306},[103,141276,132054],{"class":172},[103,141278,141279,141281,141283,141285,141287,141289],{"class":105,"line":1318},[103,141280,132059],{"class":1952},[103,141282,79797],{"class":113},[103,141284,128894],{"class":162},[103,141286,51427],{"class":113},[103,141288,132068],{"class":162},[103,141290,129464],{"class":113},[1120,141292,141293,141304],{},[60,141294,141295,141296,141299,141300,101008,141302],{},"1 号盒子左侧浮动 ",[100,141297,141298],{},"sk_list"," 里面包含 ",[100,141301,1120],{},[100,141303,60],{},[60,141305,141306,141307,141299,141310,101008,141312],{},"2 号盒子左侧浮动 ",[100,141308,141309],{},"sk_con",[100,141311,1120],{},[100,141313,60],{},[14,141315,139904],{},[94,141317,141318],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,141319,141320,141326,141336],{"__ignoreMap":24},[103,141321,141322,141324],{"class":105,"line":106},[103,141323,130382],{"class":1952},[103,141325,15562],{"class":113},[103,141327,141328,141330,141332,141334],{"class":105,"line":25},[103,141329,131014],{"class":162},[103,141331,51427],{"class":113},[103,141333,23726],{"class":162},[103,141335,1279],{"class":113},[103,141337,141338],{"class":105,"line":1168},[103,141339,1554],{"class":113},[14,141341,139993],{},[94,141343,141344],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,141345,141346,141352,141362],{"__ignoreMap":24},[103,141347,141348,141350],{"class":105,"line":106},[103,141349,130382],{"class":1952},[103,141351,15562],{"class":113},[103,141353,141354,141356,141358,141360],{"class":105,"line":25},[103,141355,131014],{"class":162},[103,141357,51427],{"class":113},[103,141359,23726],{"class":162},[103,141361,1279],{"class":113},[103,141363,141364],{"class":105,"line":1168},[103,141365,1554],{"class":113},[74,141367,141369,141370],{"id":141368},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[100,141371,141372],{},"sk_container",[1451,141374],{"style":126390,"src":141375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1120,141377,141378,141383],{},[60,141379,140558,141380,141382],{},[100,141381,141372],{}," 给宽度 1200，不要给高度",[60,141384,141385],{},"一定不要忘记清除浮动",[14,141387,139904],{},[94,141389,141390],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,141391,141392,141398,141408],{"__ignoreMap":24},[103,141393,141394,141396],{"class":105,"line":106},[103,141395,130382],{"class":1952},[103,141397,15562],{"class":113},[103,141399,141400,141402,141404,141406],{"class":105,"line":25},[103,141401,131014],{"class":162},[103,141403,51427],{"class":113},[103,141405,23726],{"class":162},[103,141407,1279],{"class":113},[103,141409,141410],{"class":105,"line":1168},[103,141411,1554],{"class":113},[57,141413,141414],{},[60,141415,141416],{},"sk_hd制作",[1120,141418,141419],{},[60,141420,140638,141421,141424],{},[100,141422,141423],{},"sk_hd"," ，插入图片即可",[14,141426,139904],{},[94,141428,141429],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,141430,141431],{"__ignoreMap":24},[103,141432,141433,141435,141437,141439,141441,141443,141445,141447,141449,141451,141453,141455],{"class":105,"line":106},[103,141434,1023],{"class":113},[103,141436,1451],{"class":51290},[103,141438,55229],{"class":1952},[103,141440,159],{"class":113},[103,141442,134051],{"class":218},[103,141444,55237],{"class":1952},[103,141446,159],{"class":113},[103,141448,134058],{"class":218},[103,141450,134061],{"class":1952},[103,141452,159],{"class":113},[103,141454,134066],{"class":218},[103,141456,51297],{"class":113},[57,141458,141459],{"start":25},[60,141460,141461],{},"sk_bd制作",[1120,141463,141464],{},[60,141465,141466,141467,141470,141471,101008,141473,141475],{},"3 号盒子 ",[100,141468,141469],{},"sk_bd"," ，里面包含很多的 ",[100,141472,1120],{},[100,141474,60],{},[1120,141476,141477,141486],{},[60,141478,141479,141480,141482,141483,141485],{},"当鼠标移入到 ",[100,141481,60],{}," 上面的时候显示红色的边框，在这里先给 ",[100,141484,60],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[60,141487,141488,141489,141491,141492,141494,141495,141498,141499,141501],{},"由于给每个 ",[100,141490,60],{}," 都设置了外边距，导致一行的最后一个 ",[100,141493,60],{}," 掉了下来，在这里我们利用 ",[100,141496,141497],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[100,141500,60],{},"，去掉外边距就好了",[14,141503,139904],{},[94,141505,141506],{"className":126534,"code":138723,"language":126536,"meta":24,"style":24},[100,141507,141508,141514,141526],{"__ignoreMap":24},[103,141509,141510,141512],{"class":105,"line":106},[103,141511,51601],{"class":51290},[103,141513,15562],{"class":113},[103,141515,141516,141518,141520,141522,141524],{"class":105,"line":25},[103,141517,70460],{"class":162},[103,141519,51427],{"class":113},[103,141521,305],{"class":162},[103,141523,51546],{"class":162},[103,141525,1279],{"class":113},[103,141527,141528],{"class":105,"line":1168},[103,141529,1554],{"class":113},[14,141531,139993],{},[94,141533,141534],{"className":126534,"code":138723,"language":126536,"meta":24,"style":24},[100,141535,141536,141542,141554],{"__ignoreMap":24},[103,141537,141538,141540],{"class":105,"line":106},[103,141539,51601],{"class":51290},[103,141541,15562],{"class":113},[103,141543,141544,141546,141548,141550,141552],{"class":105,"line":25},[103,141545,70460],{"class":162},[103,141547,51427],{"class":113},[103,141549,305],{"class":162},[103,141551,51546],{"class":162},[103,141553,1279],{"class":113},[103,141555,141556],{"class":105,"line":1168},[103,141557,1554],{"class":113},[45,141559,141561],{"id":141560},"_163-注册页面制作","16.3 注册页面制作",[1451,141563],{"style":126390,"src":141564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141566,141567,141569],{},[263,141568,9015],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1451,141571],{"style":126390,"src":141572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[74,141574,141576],{"id":141575},"_1631-准备工作","16.3.1 准备工作",[1120,141578,141579,141582],{},[60,141580,141581],{},"创建register.html，引入 base.css，引入favicon图标",[60,141583,141584],{},"创建register.css ，在html页面进行引入",[74,141586,141588,141589,141591],{"id":141587},"_1632-header-头部实现","16.3.2 ",[100,141590,131539],{}," 头部实现",[1120,141593,141594,141597],{},[60,141595,141596],{},"整个内容用 版心 进行包裹",[60,141598,141599],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141601,139904],{},[94,141603,141604],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,141605,141606],{"__ignoreMap":24},[103,141607,141608,141610,141612,141614,141616,141618,141620,141622,141624,141626,141628,141630],{"class":105,"line":106},[103,141609,1023],{"class":113},[103,141611,1451],{"class":51290},[103,141613,55229],{"class":1952},[103,141615,159],{"class":113},[103,141617,134051],{"class":218},[103,141619,55237],{"class":1952},[103,141621,159],{"class":113},[103,141623,134058],{"class":218},[103,141625,134061],{"class":1952},[103,141627,159],{"class":113},[103,141629,134066],{"class":218},[103,141631,51297],{"class":113},[14,141633,139993],{},[94,141635,141636],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,141637,141638],{"__ignoreMap":24},[103,141639,141640,141642,141644,141646,141648,141650,141652,141654,141656,141658,141660,141662],{"class":105,"line":106},[103,141641,1023],{"class":113},[103,141643,1451],{"class":51290},[103,141645,55229],{"class":1952},[103,141647,159],{"class":113},[103,141649,134051],{"class":218},[103,141651,55237],{"class":1952},[103,141653,159],{"class":113},[103,141655,134058],{"class":218},[103,141657,134061],{"class":1952},[103,141659,159],{"class":113},[103,141661,134066],{"class":218},[103,141663,51297],{"class":113},[74,141665,141667,141668,141671],{"id":141666},"_1633-registerarea-主体模块实现","16.3.3 ",[100,141669,141670],{},"registerarea"," 主体模块实现",[1451,141673],{"style":126390,"src":141674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141676,141677],{},"整个大盒子 高度为 522px，设置4个边框",[14,141679,139904],{},[94,141681,141682],{"className":126534,"code":130691,"language":126536,"meta":24,"style":24},[100,141683,141684,141690,141706],{"__ignoreMap":24},[103,141685,141686,141688],{"class":105,"line":106},[103,141687,51601],{"class":51290},[103,141689,15562],{"class":113},[103,141691,141692,141694,141696,141698,141700,141702,141704],{"class":105,"line":25},[103,141693,70886],{"class":162},[103,141695,51427],{"class":113},[103,141697,331],{"class":162},[103,141699,51482],{"class":109},[103,141701,51511],{"class":162},[103,141703,129926],{"class":162},[103,141705,1279],{"class":113},[103,141707,141708],{"class":105,"line":1168},[103,141709,1554],{"class":113},[14,141711,139993],{},[94,141713,141714],{"className":126534,"code":130691,"language":126536,"meta":24,"style":24},[100,141715,141716,141722,141738],{"__ignoreMap":24},[103,141717,141718,141720],{"class":105,"line":106},[103,141719,51601],{"class":51290},[103,141721,15562],{"class":113},[103,141723,141724,141726,141728,141730,141732,141734,141736],{"class":105,"line":25},[103,141725,70886],{"class":162},[103,141727,51427],{"class":113},[103,141729,331],{"class":162},[103,141731,51482],{"class":109},[103,141733,51511],{"class":162},[103,141735,129926],{"class":162},[103,141737,1279],{"class":113},[103,141739,141740],{"class":105,"line":1168},[103,141741,1554],{"class":113},[14,141743,141744],{},"1号盒子 是一个 h3 标签，放标题",[1120,141746,141747],{},[60,141748,141749],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141751,139904],{},[94,141753,141754],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,141755,141756,141762,141772],{"__ignoreMap":24},[103,141757,141758,141760],{"class":105,"line":106},[103,141759,130382],{"class":1952},[103,141761,15562],{"class":113},[103,141763,141764,141766,141768,141770],{"class":105,"line":25},[103,141765,131014],{"class":162},[103,141767,51427],{"class":113},[103,141769,23726],{"class":162},[103,141771,1279],{"class":113},[103,141773,141774],{"class":105,"line":1168},[103,141775,1554],{"class":113},[14,141777,139993],{},[94,141779,141780],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,141781,141782,141788,141798],{"__ignoreMap":24},[103,141783,141784,141786],{"class":105,"line":106},[103,141785,130382],{"class":1952},[103,141787,15562],{"class":113},[103,141789,141790,141792,141794,141796],{"class":105,"line":25},[103,141791,131014],{"class":162},[103,141793,51427],{"class":113},[103,141795,23726],{"class":162},[103,141797,1279],{"class":113},[103,141799,141800],{"class":105,"line":1168},[103,141801,1554],{"class":113},[14,141803,141804],{},"2号盒子 里面放注册的内容",[1120,141806,141807,141810,141819,141833,141846,141849,141852,141870,141884],{},[60,141808,141809],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[60,141811,141812,141813,141815,141816,141818],{},"里面的内容利用 ",[100,141814,1120],{}," 包含 ",[100,141817,60],{}," 来实现的（不需要用表格）",[60,141820,139048,141821,141823,141824,141826,141827,141829,141830,141832],{},[100,141822,60],{}," 里面，左侧放 ",[100,141825,33598],{}," 标签， 中间放",[100,141828,53811],{}," 标签， 右侧放 ",[100,141831,103],{}," 提示信息",[60,141834,141835,141836,141838,141839,141841,141842,141845],{},"左侧 ",[100,141837,33598],{},"里面的文字都是右对齐，我们可以给",[100,141840,33598],{},"设置一个宽度（88px），然后利用",[100,141843,141844],{},"text-align"," 来设置右对齐",[60,141847,141848],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[60,141850,141851],{},"右侧 span修饰一下文字颜色",[60,141853,141854,141855],{},"提示信息的样式优化",[1120,141856,141857,141860,141863],{},[60,141858,141859],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[60,141861,141862],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[60,141864,141865,141866,141869],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[100,141867,141868],{},"vertical-algin"," 来设置 图片与文字对齐方式",[60,141871,141872,141873],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1120,141874,141875,141881],{},[60,141876,141877,141878,141880],{},"设置 ",[100,141879,23543],{}," 的 左右 12px 的内边距，设置一下文字颜色",[60,141882,141883],{},"分别设置 背景颜色",[60,141885,141886,141887,141889],{},"同意协议 和 完成注册 都是用 ",[100,141888,60],{}," 进行包裹",[14,141891,139904],{},[94,141893,141894],{"className":126534,"code":140477,"language":126536,"meta":24,"style":24},[100,141895,141896,141902,141912],{"__ignoreMap":24},[103,141897,141898,141900],{"class":105,"line":106},[103,141899,51601],{"class":51290},[103,141901,15562],{"class":113},[103,141903,141904,141906,141908,141910],{"class":105,"line":25},[103,141905,70868],{"class":162},[103,141907,51427],{"class":113},[103,141909,140494],{"class":162},[103,141911,1279],{"class":113},[103,141913,141914],{"class":105,"line":1168},[103,141915,1554],{"class":113},[14,141917,139993],{},[94,141919,141920],{"className":126534,"code":140477,"language":126536,"meta":24,"style":24},[100,141921,141922,141928,141938],{"__ignoreMap":24},[103,141923,141924,141926],{"class":105,"line":106},[103,141925,51601],{"class":51290},[103,141927,15562],{"class":113},[103,141929,141930,141932,141934,141936],{"class":105,"line":25},[103,141931,70868],{"class":162},[103,141933,51427],{"class":113},[103,141935,140494],{"class":162},[103,141937,1279],{"class":113},[103,141939,141940],{"class":105,"line":1168},[103,141941,1554],{"class":113},[74,141943,141945],{"id":141944},"_1634-底部实现","16.3.4 底部实现",[14,141947,139904],{},[94,141949,141950],{"className":126534,"code":140477,"language":126536,"meta":24,"style":24},[100,141951,141952,141958,141968],{"__ignoreMap":24},[103,141953,141954,141956],{"class":105,"line":106},[103,141955,51601],{"class":51290},[103,141957,15562],{"class":113},[103,141959,141960,141962,141964,141966],{"class":105,"line":25},[103,141961,70868],{"class":162},[103,141963,51427],{"class":113},[103,141965,140494],{"class":162},[103,141967,1279],{"class":113},[103,141969,141970],{"class":105,"line":1168},[103,141971,1554],{"class":113},[14,141973,139993],{},[94,141975,141976],{"className":127281,"code":130638,"language":127283,"meta":24,"style":24},[100,141977,141978,141982,141996,142000],{"__ignoreMap":24},[103,141979,141980],{"class":105,"line":106},[103,141981,130645],{"class":172},[103,141983,141984,141986,141988,141990,141992,141994],{"class":105,"line":25},[103,141985,1023],{"class":113},[103,141987,51601],{"class":51290},[103,141989,53476],{"class":1952},[103,141991,159],{"class":113},[103,141993,130658],{"class":218},[103,141995,51297],{"class":113},[103,141997,141998],{"class":105,"line":1168},[103,141999,130665],{"class":113},[103,142001,142002,142004,142006],{"class":105,"line":1183},[103,142003,51775],{"class":113},[103,142005,51601],{"class":51290},[103,142007,51297],{"class":113},[45,142009,142011],{"id":142010},"_164-项目总结","16.4 项目总结",[57,142013,142014,142017,142020,142023],{},[60,142015,142016],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[60,142018,142019],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[60,142021,142022],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[60,142024,142025],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1451,142027],{"style":126390,"src":142028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[57,142030,142031],{"start":1189},[60,142032,142033],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1451,142035],{"style":126390,"src":142036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[57,142038,142039],{"start":1203},[60,142040,142041],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1451,142043],{"style":126390,"src":142044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[94,142046,142047],{"className":127281,"code":136691,"language":127283,"meta":24,"style":24},[100,142048,142049],{"__ignoreMap":24},[103,142050,142051,142053,142055,142057,142059,142061,142063,142065,142067,142069,142071,142073],{"class":105,"line":106},[103,142052,1023],{"class":113},[103,142054,53811],{"class":51290},[103,142056,53814],{"class":1952},[103,142058,159],{"class":113},[103,142060,62689],{"class":218},[103,142062,14910],{"class":1952},[103,142064,159],{"class":113},[103,142066,136712],{"class":218},[103,142068,61010],{"class":1952},[103,142070,159],{"class":113},[103,142072,136719],{"class":218},[103,142074,51297],{"class":113},[57,142076,142077,142080],{"start":1209},[60,142078,142079],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[60,142081,142082],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5116,142084,142085],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":24,"searchDepth":25,"depth":25,"links":142087},[142088,142093,142100,142108],{"id":139714,"depth":25,"text":139715,"children":142089},[142090,142091,142092],{"id":139718,"depth":1168,"text":139719},{"id":140449,"depth":1168,"text":140450},{"id":140762,"depth":1168,"text":140763},{"id":141062,"depth":25,"text":141063,"children":142094},[142095,142096,142098],{"id":141066,"depth":1168,"text":141067},{"id":141084,"depth":1168,"text":142097},"16.2.2 列表页 header 和 nav 修改",{"id":141368,"depth":1168,"text":142099},"16.2.3 列表页主体 sk_container",{"id":141560,"depth":25,"text":141561,"children":142101},[142102,142103,142105,142107],{"id":141575,"depth":1168,"text":141576},{"id":141587,"depth":1168,"text":142104},"16.3.2 header 头部实现",{"id":141666,"depth":1168,"text":142106},"16.3.3 registerarea 主体模块实现",{"id":141944,"depth":1168,"text":141945},{"id":142010,"depth":25,"text":142011},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139706,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142115,"title":142116,"body":142117,"description":27,"extension":28,"meta":142225,"navigation":30,"path":142226,"seo":142227,"stem":142228,"__hash__":142229},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142118,"toc":142220},[142119,142122,142126,142129,142132,142141,142150,142154,142159,142166,142184,142187,142190,142193,142196,142199,142202,142205,142208,142211,142214,142217],[10,142120,142116],{"id":142121},"_17-web服务器与网站发布",[45,142123,142125],{"id":142124},"_171-web服务器","17.1 Web服务器",[14,142127,142128],{},"把自己网站上传到服务器上，可以让其他人访问",[1451,142130],{"style":126390,"src":142131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142133,142134,142137,142138],{},[263,142135,142136],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[263,142139,142140],{},"Web 服务器等",[14,142142,142143,142144,101008,142147,25730],{},"根据服务器在网络中所在的位置不同，又可分为 ",[263,142145,142146],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[263,142148,142149],{},"远程服务器",[74,142151,142153],{"id":142152},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142155,142156],{},[263,142157,142158],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142160,142161,142162],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[17,142163,142164],{"href":142164,"rel":142165},"http:\u002F\u002Ffree.3v.do\u002F",[21],[1120,142167,142168,142171,142174,142181],{},[60,142169,142170],{},"去免费空间网站注册账号。",[60,142172,142173],{},"记录下主机名、用户名、密码、域名。",[60,142175,142176,142177,142180],{},"利用 ",[100,142178,142179],{},"utftp"," 软件 上传网站到远程服务器",[60,142182,142183],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142185,142186],{},"使用软件上传，对上传软件文件进行解压",[1451,142188],{"style":126390,"src":142189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1451,142191],{"style":126390,"src":142192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142194,142195],{},"输入刚刚申请的服务器账号信息：",[1451,142197],{"style":126390,"src":142198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1451,142200],{"style":126390,"src":142201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1451,142203],{"style":126390,"src":142204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1451,142206],{"style":126390,"src":142207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142209,142210],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1451,142212],{"style":126390,"src":142213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142215,142216],{},"浏览器输入域名即可访问",[14,142218,142219],{},"首页一定必须是index",{"title":24,"searchDepth":25,"depth":25,"links":142221},[142222],{"id":142124,"depth":25,"text":142125,"children":142223},[142224],{"id":142152,"depth":1168,"text":142153},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142116,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142231,"title":142232,"body":142233,"description":27,"extension":28,"meta":143160,"navigation":30,"path":143161,"seo":143162,"stem":143163,"__hash__":143164},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142234,"toc":143143},[142235,142238,142242,142245,142248,142259,142262,142266,142270,142275,142278,142281,142284,142287,142291,142317,142321,142325,142328,142331,142335,142368,142372,142375,142378,142442,142446,142450,142453,142456,142459,142463,142508,142512,142515,142545,142549,142553,142556,142559,142563,142566,142635,142638,142746,142748,142754,142758,142761,142764,142860,142863,142867,142891,142895,142898,142902,142905,142909,142912,142915,142918,142921,142925,142928,142931,142935,142939,142942,142945,142948,142951,142955,142958,142962,142965,142968,143013,143017,143021,143024,143027,143030,143062,143066,143069,143103,143107,143110,143140],[10,142236,142232],{"id":142237},"_18-2d动画与3d转换",[45,142239,142241],{"id":142240},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142243,142244],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142246,142247],{},"转换（transform）你可以简单理解为变形",[1120,142249,142250,142253,142256],{},[60,142251,142252],{},"移动：translate",[60,142254,142255],{},"旋转：rotate",[60,142257,142258],{},"缩放：scale",[1451,142260],{"style":126390,"src":142261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[74,142263,142265],{"id":142264},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21988,142267,142269],{"id":142268},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142271,142272,142273],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[263,142274,133193],{},[1451,142276],{"style":126390,"src":142277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142279,142280],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142282,142283],{},"对于行内元素无效",[14,142285,142286],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21988,142288,142290],{"id":142289},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[94,142292,142293],{"className":126534,"code":138723,"language":126536,"meta":24,"style":24},[100,142294,142295,142301,142313],{"__ignoreMap":24},[103,142296,142297,142299],{"class":105,"line":106},[103,142298,51601],{"class":51290},[103,142300,15562],{"class":113},[103,142302,142303,142305,142307,142309,142311],{"class":105,"line":25},[103,142304,70460],{"class":162},[103,142306,51427],{"class":113},[103,142308,305],{"class":162},[103,142310,51546],{"class":162},[103,142312,1279],{"class":113},[103,142314,142315],{"class":105,"line":1168},[103,142316,1554],{"class":113},[74,142318,142320],{"id":142319},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21988,142322,142324],{"id":142323},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142326,142327],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1451,142329],{"style":126390,"src":142330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21988,142332,142334],{"id":142333},"_18122-旋转效果","18.1.2.2 旋转效果",[94,142336,142338],{"className":126534,"code":142337,"language":126536,"meta":24,"style":24},"div {\n  transform: rotate(45deg);\n}\n",[100,142339,142340,142346,142364],{"__ignoreMap":24},[103,142341,142342,142344],{"class":105,"line":106},[103,142343,51601],{"class":51290},[103,142345,15562],{"class":113},[103,142347,142348,142350,142352,142355,142357,142359,142362],{"class":105,"line":25},[103,142349,136518],{"class":162},[103,142351,51427],{"class":113},[103,142353,142354],{"class":162},"rotate",[103,142356,114],{"class":113},[103,142358,642],{"class":162},[103,142360,142361],{"class":109},"deg",[103,142363,2708],{"class":113},[103,142365,142366],{"class":105,"line":1168},[103,142367,1554],{"class":113},[21988,142369,142371],{"id":142370},"_18123-三角做法","18.1.2.3 三角做法",[14,142373,142374],{},"该下标当经过最外层大盒子时会实现向上反转",[1451,142376],{"style":126390,"src":142377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[94,142379,142380],{"className":126534,"code":135054,"language":126536,"meta":24,"style":24},[100,142381,142382,142386,142392,142402,142412,142428,142438],{"__ignoreMap":24},[103,142383,142384],{"class":105,"line":106},[103,142385,135061],{"class":172},[103,142387,142388,142390],{"class":105,"line":25},[103,142389,135066],{"class":1952},[103,142391,15562],{"class":113},[103,142393,142394,142396,142398,142400],{"class":105,"line":1168},[103,142395,70558],{"class":162},[103,142397,51427],{"class":113},[103,142399,305],{"class":162},[103,142401,1279],{"class":113},[103,142403,142404,142406,142408,142410],{"class":105,"line":1183},[103,142405,70778],{"class":162},[103,142407,51427],{"class":113},[103,142409,305],{"class":162},[103,142411,1279],{"class":113},[103,142413,142414,142416,142418,142420,142422,142424,142426],{"class":105,"line":1189},[103,142415,70886],{"class":162},[103,142417,51427],{"class":113},[103,142419,559],{"class":162},[103,142421,51482],{"class":109},[103,142423,51511],{"class":162},[103,142425,63981],{"class":162},[103,142427,1279],{"class":113},[103,142429,142430,142432,142434,142436],{"class":105,"line":1203},[103,142431,135109],{"class":162},[103,142433,51427],{"class":113},[103,142435,62359],{"class":162},[103,142437,1279],{"class":113},[103,142439,142440],{"class":105,"line":1209},[103,142441,1554],{"class":113},[74,142443,142445],{"id":142444},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21988,142447,142449],{"id":142448},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142451,142452],{},"设置中心点",[1451,142454],{"style":126390,"src":142455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142457,142458],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21988,142460,142462],{"id":142461},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[94,142464,142466],{"className":126534,"code":142465,"language":126536,"meta":24,"style":24},"\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",[100,142467,142468,142473,142479,142494,142499,142504],{"__ignoreMap":24},[103,142469,142470],{"class":105,"line":106},[103,142471,142472],{"class":172},"\u002F* 转换中心点 *\u002F\n",[103,142474,142475,142477],{"class":105,"line":25},[103,142476,51601],{"class":51290},[103,142478,15562],{"class":113},[103,142480,142481,142484,142486,142488,142490,142492],{"class":105,"line":1168},[103,142482,142483],{"class":162},"  transform-origin",[103,142485,51427],{"class":113},[103,142487,51582],{"class":162},[103,142489,17134],{"class":162},[103,142491,130397],{"class":113},[103,142493,135207],{"class":172},[103,142495,142496],{"class":105,"line":1183},[103,142497,142498],{"class":172},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[103,142500,142501],{"class":105,"line":1189},[103,142502,142503],{"class":172},"  \u002F* transform-origin: left top; *\u002F\n",[103,142505,142506],{"class":105,"line":1203},[103,142507,1554],{"class":113},[21988,142509,142511],{"id":142510},"_18133-旋转案例","18.1.3.3 旋转案例",[1451,142513],{"style":126390,"src":142514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[94,142516,142517],{"className":126534,"code":142337,"language":126536,"meta":24,"style":24},[100,142518,142519,142525,142541],{"__ignoreMap":24},[103,142520,142521,142523],{"class":105,"line":106},[103,142522,51601],{"class":51290},[103,142524,15562],{"class":113},[103,142526,142527,142529,142531,142533,142535,142537,142539],{"class":105,"line":25},[103,142528,136518],{"class":162},[103,142530,51427],{"class":113},[103,142532,142354],{"class":162},[103,142534,114],{"class":113},[103,142536,642],{"class":162},[103,142538,142361],{"class":109},[103,142540,2708],{"class":113},[103,142542,142543],{"class":105,"line":1168},[103,142544,1554],{"class":113},[74,142546,142548],{"id":142547},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21988,142550,142552],{"id":142551},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142554,142555],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1451,142557],{"style":126390,"src":142558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21988,142560,142562],{"id":142561},"_18142-分页按钮","18.1.4.2 分页按钮",[1451,142564],{"style":126390,"src":142565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[94,142567,142569],{"className":126534,"code":142568,"language":126536,"meta":24,"style":24},"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",[100,142570,142571,142577,142593,142597,142601,142606,142612,142626,142631],{"__ignoreMap":24},[103,142572,142573,142575],{"class":105,"line":106},[103,142574,51601],{"class":51290},[103,142576,15562],{"class":113},[103,142578,142579,142581,142583,142586,142588,142591],{"class":105,"line":25},[103,142580,136518],{"class":162},[103,142582,51427],{"class":113},[103,142584,142585],{"class":162},"scale",[103,142587,114],{"class":113},[103,142589,142590],{"class":162},"1.2",[103,142592,2708],{"class":113},[103,142594,142595],{"class":105,"line":1168},[103,142596,1554],{"class":113},[103,142598,142599],{"class":105,"line":1183},[103,142600,135995],{"class":113},[103,142602,142603],{"class":105,"line":1189},[103,142604,142605],{"class":172},"\u002F* 2D 缩放 *\u002F\n",[103,142607,142608,142610],{"class":105,"line":1203},[103,142609,51601],{"class":51290},[103,142611,15562],{"class":113},[103,142613,142614,142616,142618,142620,142622,142624],{"class":105,"line":1209},[103,142615,136518],{"class":162},[103,142617,51427],{"class":113},[103,142619,142585],{"class":162},[103,142621,114],{"class":113},[103,142623,142590],{"class":162},[103,142625,2708],{"class":113},[103,142627,142628],{"class":105,"line":1300},[103,142629,142630],{"class":172},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[103,142632,142633],{"class":105,"line":1306},[103,142634,1554],{"class":113},[14,142636,142637],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[94,142639,142641],{"className":126534,"code":142640,"language":126536,"meta":24,"style":24},"\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",[100,142642,142643,142648,142658,142679,142700,142704,142709,142715,142742],{"__ignoreMap":24},[103,142644,142645],{"class":105,"line":106},[103,142646,142647],{"class":172},"\u002F* 定义动画 *\u002F\n",[103,142649,142650,142653,142656],{"class":105,"line":25},[103,142651,142652],{"class":109},"@keyframes",[103,142654,142655],{"class":5206}," move",[103,142657,15562],{"class":113},[103,142659,142660,142663,142665,142667,142669,142672,142674,142676],{"class":105,"line":1168},[103,142661,142662],{"class":1952},"  0%",[103,142664,79797],{"class":113},[103,142666,48124],{"class":162},[103,142668,51427],{"class":113},[103,142670,142671],{"class":162},"translateX",[103,142673,114],{"class":113},[103,142675,305],{"class":162},[103,142677,142678],{"class":113},"); }\n",[103,142680,142681,142684,142686,142688,142690,142692,142694,142696,142698],{"class":105,"line":1183},[103,142682,142683],{"class":1952},"  100%",[103,142685,79797],{"class":113},[103,142687,48124],{"class":162},[103,142689,51427],{"class":113},[103,142691,142671],{"class":162},[103,142693,114],{"class":113},[103,142695,424],{"class":162},[103,142697,51482],{"class":109},[103,142699,142678],{"class":113},[103,142701,142702],{"class":105,"line":1189},[103,142703,1554],{"class":113},[103,142705,142706],{"class":105,"line":1203},[103,142707,142708],{"class":172},"\u002F* 调用动画 *\u002F\n",[103,142710,142711,142713],{"class":105,"line":1209},[103,142712,51601],{"class":51290},[103,142714,15562],{"class":113},[103,142716,142717,142720,142722,142724,142726,142728,142730,142732,142734,142737,142740],{"class":105,"line":1300},[103,142718,142719],{"class":162},"  animation",[103,142721,51427],{"class":113},[103,142723,135220],{"class":162},[103,142725,25108],{"class":162},[103,142727,808],{"class":109},[103,142729,78670],{"class":162},[103,142731,4082],{"class":162},[103,142733,808],{"class":109},[103,142735,142736],{"class":162}," infinite",[103,142738,142739],{"class":162}," alternate",[103,142741,1279],{"class":113},[103,142743,142744],{"class":105,"line":1306},[103,142745,1554],{"class":113},[14,142747,142637],{},[94,142749,142752],{"className":142750,"code":142751,"language":5177},[5175],"\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-200.png\">\n\n#### 18.2.1.5 动画简写\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-201.png\">\n\nname,duration这两个属性必须写！\n\n### 18.2.2 案例\n\n#### 18.2.2.1 热点图\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-202.png\">\n\n```Css\n@keyframes slide {\n  from { transform: translateX(0); }\n  to { transform: translateX(100px); }\n}\ndiv {\n  animation: slide 1s ease infinite;\n}\n",[100,142753,142751],{"__ignoreMap":24},[21988,142755,142757],{"id":142756},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142759,142760],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1451,142762],{"style":126390,"src":142763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[94,142765,142766],{"className":126534,"code":142640,"language":126536,"meta":24,"style":24},[100,142767,142768,142772,142780,142798,142818,142822,142826,142832,142856],{"__ignoreMap":24},[103,142769,142770],{"class":105,"line":106},[103,142771,142647],{"class":172},[103,142773,142774,142776,142778],{"class":105,"line":25},[103,142775,142652],{"class":109},[103,142777,142655],{"class":5206},[103,142779,15562],{"class":113},[103,142781,142782,142784,142786,142788,142790,142792,142794,142796],{"class":105,"line":1168},[103,142783,142662],{"class":1952},[103,142785,79797],{"class":113},[103,142787,48124],{"class":162},[103,142789,51427],{"class":113},[103,142791,142671],{"class":162},[103,142793,114],{"class":113},[103,142795,305],{"class":162},[103,142797,142678],{"class":113},[103,142799,142800,142802,142804,142806,142808,142810,142812,142814,142816],{"class":105,"line":1183},[103,142801,142683],{"class":1952},[103,142803,79797],{"class":113},[103,142805,48124],{"class":162},[103,142807,51427],{"class":113},[103,142809,142671],{"class":162},[103,142811,114],{"class":113},[103,142813,424],{"class":162},[103,142815,51482],{"class":109},[103,142817,142678],{"class":113},[103,142819,142820],{"class":105,"line":1189},[103,142821,1554],{"class":113},[103,142823,142824],{"class":105,"line":1203},[103,142825,142708],{"class":172},[103,142827,142828,142830],{"class":105,"line":1209},[103,142829,51601],{"class":51290},[103,142831,15562],{"class":113},[103,142833,142834,142836,142838,142840,142842,142844,142846,142848,142850,142852,142854],{"class":105,"line":1300},[103,142835,142719],{"class":162},[103,142837,51427],{"class":113},[103,142839,135220],{"class":162},[103,142841,25108],{"class":162},[103,142843,808],{"class":109},[103,142845,78670],{"class":162},[103,142847,4082],{"class":162},[103,142849,808],{"class":109},[103,142851,142736],{"class":162},[103,142853,142739],{"class":162},[103,142855,1279],{"class":113},[103,142857,142858],{"class":105,"line":1306},[103,142859,1554],{"class":113},[14,142861,142862],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[74,142864,142866],{"id":142865},"_1823-知识点回顾","18.2.3 知识点回顾",[94,142868,142869],{"className":126534,"code":128703,"language":126536,"meta":24,"style":24},[100,142870,142871,142877,142887],{"__ignoreMap":24},[103,142872,142873,142875],{"class":105,"line":106},[103,142874,51601],{"class":51290},[103,142876,15562],{"class":113},[103,142878,142879,142881,142883,142885],{"class":105,"line":25},[103,142880,128716],{"class":162},[103,142882,51427],{"class":113},[103,142884,61726],{"class":162},[103,142886,1279],{"class":113},[103,142888,142889],{"class":105,"line":1168},[103,142890,1554],{"class":113},[45,142892,142894],{"id":142893},"_183-3d-转换","18.3 3D 转换",[14,142896,142897],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[74,142899,142901],{"id":142900},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1451,142903],{"style":126390,"src":142904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[74,142906,142908],{"id":142907},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1451,142910],{"style":126390,"src":142911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142913,142914],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142916,142917],{},"translate3d的效果需要搭配透视perspective来使用",[1451,142919],{"style":126390,"src":142920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[74,142922,142924],{"id":142923},"_1833-透视-perspective","18.3.3 透视 perspective",[1451,142926],{"style":126390,"src":142927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142929,142930],{},"透视写在父盒子上，单位为像素",[74,142932,142934],{"id":142933},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21988,142936,142938],{"id":142937},"_18341-分开解释","18.3.4.1 分开解释",[1451,142940],{"style":126390,"src":142941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1451,142943],{"style":126390,"src":142944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1451,142946],{"style":126390,"src":142947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,142949,142950],{},"总结来说就是左手原则",[21988,142952,142954],{"id":142953},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1451,142956],{"style":126390,"src":142957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[74,142959,142961],{"id":142960},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1451,142963],{"style":126390,"src":142964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1451,142966],{"style":126390,"src":142967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[94,142969,142971],{"className":126534,"code":142970,"language":126536,"meta":24,"style":24},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[100,142972,142973,142979,142992,143009],{"__ignoreMap":24},[103,142974,142975,142977],{"class":105,"line":106},[103,142976,51601],{"class":51290},[103,142978,15562],{"class":113},[103,142980,142981,142984,142986,142988,142990],{"class":105,"line":25},[103,142982,142983],{"class":162},"  perspective",[103,142985,51427],{"class":113},[103,142987,65064],{"class":162},[103,142989,51482],{"class":109},[103,142991,1279],{"class":113},[103,142993,142994,142996,142998,143001,143003,143005,143007],{"class":105,"line":1168},[103,142995,136518],{"class":162},[103,142997,51427],{"class":113},[103,142999,143000],{"class":162},"rotateX",[103,143002,114],{"class":113},[103,143004,642],{"class":162},[103,143006,142361],{"class":109},[103,143008,2708],{"class":113},[103,143010,143011],{"class":105,"line":1183},[103,143012,1554],{"class":113},[74,143014,143016],{"id":143015},"_1836-案例","18.3.6 案例",[21988,143018,143020],{"id":143019},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1451,143022],{"style":126390,"src":143023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1451,143025],{"style":126390,"src":143026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1451,143028],{"style":126390,"src":143029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[94,143031,143033],{"className":126534,"code":143032,"language":126536,"meta":24,"style":24},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[100,143034,143035,143040,143046,143058],{"__ignoreMap":24},[103,143036,143037],{"class":105,"line":106},[103,143038,143039],{"class":172},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[103,143041,143042,143044],{"class":105,"line":25},[103,143043,133531],{"class":1952},[103,143045,15562],{"class":113},[103,143047,143048,143050,143052,143054,143056],{"class":105,"line":1168},[103,143049,142983],{"class":162},[103,143051,51427],{"class":113},[103,143053,65064],{"class":162},[103,143055,51482],{"class":109},[103,143057,1279],{"class":113},[103,143059,143060],{"class":105,"line":1183},[103,143061,1554],{"class":113},[21988,143063,143065],{"id":143064},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1451,143067],{"style":126390,"src":143068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[94,143070,143071],{"className":127281,"code":130638,"language":127283,"meta":24,"style":24},[100,143072,143073,143077,143091,143095],{"__ignoreMap":24},[103,143074,143075],{"class":105,"line":106},[103,143076,130645],{"class":172},[103,143078,143079,143081,143083,143085,143087,143089],{"class":105,"line":25},[103,143080,1023],{"class":113},[103,143082,51601],{"class":51290},[103,143084,53476],{"class":1952},[103,143086,159],{"class":113},[103,143088,130658],{"class":218},[103,143090,51297],{"class":113},[103,143092,143093],{"class":105,"line":1168},[103,143094,130665],{"class":113},[103,143096,143097,143099,143101],{"class":105,"line":1183},[103,143098,51775],{"class":113},[103,143100,51601],{"class":51290},[103,143102,51297],{"class":113},[21988,143104,143106],{"id":143105},"_18363-旋转木马","18.3.6.3 旋转木马",[1451,143108],{"style":126390,"src":143109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[94,143111,143112],{"className":126534,"code":142337,"language":126536,"meta":24,"style":24},[100,143113,143114,143120,143136],{"__ignoreMap":24},[103,143115,143116,143118],{"class":105,"line":106},[103,143117,51601],{"class":51290},[103,143119,15562],{"class":113},[103,143121,143122,143124,143126,143128,143130,143132,143134],{"class":105,"line":25},[103,143123,136518],{"class":162},[103,143125,51427],{"class":113},[103,143127,142354],{"class":162},[103,143129,114],{"class":113},[103,143131,642],{"class":162},[103,143133,142361],{"class":109},[103,143135,2708],{"class":113},[103,143137,143138],{"class":105,"line":1168},[103,143139,1554],{"class":113},[5116,143141,143142],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":24,"searchDepth":25,"depth":25,"links":143144},[143145,143152],{"id":142240,"depth":25,"text":142241,"children":143146},[143147,143148,143149,143150,143151],{"id":142264,"depth":1168,"text":142265},{"id":142319,"depth":1168,"text":142320},{"id":142444,"depth":1168,"text":142445},{"id":142547,"depth":1168,"text":142548},{"id":142865,"depth":1168,"text":142866},{"id":142893,"depth":25,"text":142894,"children":143153},[143154,143155,143156,143157,143158,143159],{"id":142900,"depth":1168,"text":142901},{"id":142907,"depth":1168,"text":142908},{"id":142923,"depth":1168,"text":142924},{"id":142933,"depth":1168,"text":142934},{"id":142960,"depth":1168,"text":142961},{"id":143015,"depth":1168,"text":143016},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142232,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143166,"title":143167,"body":143168,"description":27,"extension":28,"meta":143371,"navigation":30,"path":143372,"seo":143373,"stem":143374,"__hash__":143375},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143169,"toc":143360},[143170,143173,143177,143180,143183,143187,143190,143193,143196,143200,143203,143207,143210,143214,143217,143221,143235,143239,143264,143267,143270,143287,143291,143295,143298,143301,143305,143308,143311,143329,143333,143336,143350,143354,143357],[10,143171,143167],{"id":143172},"_19-移动端基础-前缀现状与视口",[45,143174,143176],{"id":143175},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1451,143178],{"style":126390,"src":143179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143181,143182],{},"意思就是加个前缀，增加兼容性",[45,143184,143186],{"id":143185},"_192-移动端现状认识","19.2 移动端现状认识",[1451,143188],{"style":126390,"src":143189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143191,143192],{},"调试方法：",[1451,143194],{"style":126390,"src":143195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[45,143197,143199],{"id":143198},"_193-视口","19.3 视口",[14,143201,143202],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[74,143204,143206],{"id":143205},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1451,143208],{"style":126390,"src":143209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[74,143211,143213],{"id":143212},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1451,143215],{"style":126390,"src":143216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[74,143218,143220],{"id":143219},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1120,143222,143223,143226,143229,143232],{},[60,143224,143225],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[60,143227,143228],{},"理想视口，对设备来讲，是最理想的视口尺寸",[60,143230,143231],{},"需要手动添写meta视口标签通知浏览器操作",[60,143233,143234],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[74,143236,143238],{"id":143237},"_1934-meta视口标签","19.3.4 meta视口标签",[94,143240,143242],{"className":127281,"code":143241,"language":127283,"meta":24,"style":24},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[100,143243,143244],{"__ignoreMap":24},[103,143245,143246,143248,143250,143252,143254,143256,143258,143260,143262],{"class":105,"line":106},[103,143247,1023],{"class":113},[103,143249,51334],{"class":51290},[103,143251,14910],{"class":1952},[103,143253,159],{"class":113},[103,143255,51381],{"class":218},[103,143257,51361],{"class":1952},[103,143259,159],{"class":113},[103,143261,51388],{"class":218},[103,143263,51297],{"class":113},[1451,143265],{"style":126390,"src":143266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143268,143269],{},"标准视口设置：",[57,143271,143272,143275,143278,143281,143284],{},[60,143273,143274],{},"视口宽度和设备保持一致",[60,143276,143277],{},"视口的默认缩放比例1.0",[60,143279,143280],{},"不允许用户自行缩放",[60,143282,143283],{},"最大允许的缩放比例1.0",[60,143285,143286],{},"最小允许的缩放比例1.0",[74,143288,143290],{"id":143289},"_1935-二倍图","19.3.5 二倍图",[21988,143292,143294],{"id":143293},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1451,143296],{"style":126390,"src":143297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1451,143299],{"style":126390,"src":143300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21988,143302,143304],{"id":143303},"_19352-多倍图","19.3.5.2 多倍图",[1451,143306],{"style":126390,"src":143307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143309,143310],{},"二倍图法，代码如下：",[94,143312,143314],{"className":126534,"code":143313,"language":126536,"meta":24,"style":24},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[100,143315,143316,143321],{"__ignoreMap":24},[103,143317,143318],{"class":105,"line":106},[103,143319,143320],{"class":172},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[103,143322,143323,143326],{"class":105,"line":25},[103,143324,143325],{"class":51290},"background-size",[103,143327,143328],{"class":113},": 50% 50%;\n",[21988,143330,143332],{"id":143331},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1451,143334],{"style":126390,"src":143335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[57,143337,143338,143341,143344,143347],{},[60,143339,143340],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[60,143342,143343],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[60,143345,143346],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[60,143348,143349],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21988,143351,143353],{"id":143352},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1451,143355],{"style":126390,"src":143356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5116,143358,143359],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":24,"searchDepth":25,"depth":25,"links":143361},[143362,143363,143364],{"id":143175,"depth":25,"text":143176},{"id":143185,"depth":25,"text":143186},{"id":143198,"depth":25,"text":143199,"children":143365},[143366,143367,143368,143369,143370],{"id":143205,"depth":1168,"text":143206},{"id":143212,"depth":1168,"text":143213},{"id":143219,"depth":1168,"text":143220},{"id":143237,"depth":1168,"text":143238},{"id":143289,"depth":1168,"text":143290},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143167,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143377,"title":143378,"body":143379,"description":27,"extension":28,"meta":144256,"navigation":30,"path":144257,"seo":144258,"stem":144259,"__hash__":144260},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143380,"toc":144240},[143381,143384,143388,143395,143398,143405,143408,143413,143416,143420,143424,143431,143434,143437,143441,143444,143447,143450,143453,143456,143460,143463,143467,143469,143472,143475,143478,143481,143483,143486,143488,143518,143520,143550,143554,143557,143561,143564,143581,143584,143587,143663,143665,143668,143671,143674,143677,143679,143682,143685,143689,143711,143714,143717,143721,143724,143730,143733,143737,143740,143743,143747,143750,143753,143756,143760,143763,143766,143769,143772,143776,143779,143783,143790,143793,143796,143799,143802,143812,143815,143818,143825,143828,143832,143835,143838,143842,143845,143848,143851,143896,143899,143902,143905,143907,144036,144038,144076,144079,144082,144084,144202,144204,144238],[10,143382,143378],{"id":143383},"_20-移动端布局实战上篇",[45,143385,143387],{"id":143386},"_201-移动端主流方案","20.1 移动端主流方案",[57,143389,143390],{},[60,143391,143392],{},[263,143393,143394],{},"单独移动端页面（主流）",[1451,143396],{"style":126390,"src":143397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[57,143399,143400],{"start":25},[60,143401,143402],{},[263,143403,143404],{},"响应式兼容PC移动端",[1451,143406],{"style":126390,"src":143407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[57,143409,143410],{"start":1168},[60,143411,143412],{},"两种页面选型布局方式",[1451,143414],{"style":126390,"src":143415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[45,143417,143419],{"id":143418},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[74,143421,143423],{"id":143422},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143425,143426,143427],{},"官网地址： ",[17,143428,143429],{"href":143429,"rel":143430},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[21],[1451,143432],{"style":126390,"src":143433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1451,143435],{"style":126390,"src":143436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[74,143438,143440],{"id":143439},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1451,143442],{"style":126390,"src":143443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1451,143445],{"style":126390,"src":143446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143448,143449],{},"去除高亮：",[14,143451,143452],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143454,143455],{},"-webkit- tap-highlight-color: transparent;",[45,143457,143459],{"id":143458},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1451,143461],{"style":126390,"src":143462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[45,143464,143466],{"id":143465},"_204-流式布局案例","20.4 流式布局案例",[14,143468,143],{},[14,143470,143471],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143473,143474],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143476,143477],{},"图片格式：",[1451,143479],{"style":126390,"src":143480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143482,135577],{},[1451,143484],{"style":126390,"src":143485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143487,139904],{},[94,143489,143490],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,143491,143492],{"__ignoreMap":24},[103,143493,143494,143496,143498,143500,143502,143504,143506,143508,143510,143512,143514,143516],{"class":105,"line":106},[103,143495,1023],{"class":113},[103,143497,1451],{"class":51290},[103,143499,55229],{"class":1952},[103,143501,159],{"class":113},[103,143503,134051],{"class":218},[103,143505,55237],{"class":1952},[103,143507,159],{"class":113},[103,143509,134058],{"class":218},[103,143511,134061],{"class":1952},[103,143513,159],{"class":113},[103,143515,134066],{"class":218},[103,143517,51297],{"class":113},[14,143519,139993],{},[94,143521,143522],{"className":127281,"code":134036,"language":127283,"meta":24,"style":24},[100,143523,143524],{"__ignoreMap":24},[103,143525,143526,143528,143530,143532,143534,143536,143538,143540,143542,143544,143546,143548],{"class":105,"line":106},[103,143527,1023],{"class":113},[103,143529,1451],{"class":51290},[103,143531,55229],{"class":1952},[103,143533,159],{"class":113},[103,143535,134051],{"class":218},[103,143537,55237],{"class":1952},[103,143539,159],{"class":113},[103,143541,134058],{"class":218},[103,143543,134061],{"class":1952},[103,143545,159],{"class":113},[103,143547,134066],{"class":218},[103,143549,51297],{"class":113},[45,143551,143553],{"id":143552},"_205-flex布局","20.5 flex布局",[1451,143555],{"style":126390,"src":143556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[74,143558,143560],{"id":143559},"_2051-布局原理","20.5.1 布局原理",[14,143562,143563],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1120,143565,143566,143569,143572,143575,143578],{},[60,143567,143568],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[60,143570,143571],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[60,143573,143574],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[60,143576,143577],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[60,143579,143580],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143582,143583],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143585,143586],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[94,143588,143590],{"className":126534,"code":143589,"language":126536,"meta":24,"style":24},"\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",[100,143591,143592,143597,143604,143614,143626,143637,143648,143659],{"__ignoreMap":24},[103,143593,143594],{"class":105,"line":106},[103,143595,143596],{"class":172},"\u002F* Flex 弹性布局 *\u002F\n",[103,143598,143599,143602],{"class":105,"line":25},[103,143600,143601],{"class":1952},".container",[103,143603,15562],{"class":113},[103,143605,143606,143608,143610,143612],{"class":105,"line":1168},[103,143607,128150],{"class":162},[103,143609,51427],{"class":113},[103,143611,51467],{"class":162},[103,143613,1279],{"class":113},[103,143615,143616,143619,143621,143624],{"class":105,"line":1183},[103,143617,143618],{"class":162},"  flex-direction",[103,143620,51427],{"class":113},[103,143622,143623],{"class":162},"row",[103,143625,1279],{"class":113},[103,143627,143628,143631,143633,143635],{"class":105,"line":1189},[103,143629,143630],{"class":162},"  justify-content",[103,143632,51427],{"class":113},[103,143634,51658],{"class":162},[103,143636,1279],{"class":113},[103,143638,143639,143642,143644,143646],{"class":105,"line":1203},[103,143640,143641],{"class":162},"  align-items",[103,143643,51427],{"class":113},[103,143645,51582],{"class":162},[103,143647,1279],{"class":113},[103,143649,143650,143653,143655,143657],{"class":105,"line":1209},[103,143651,143652],{"class":162},"  flex-wrap",[103,143654,51427],{"class":113},[103,143656,78600],{"class":162},[103,143658,1279],{"class":113},[103,143660,143661],{"class":105,"line":1300},[103,143662,1554],{"class":113},[14,143664,70443],{},[14,143666,143667],{},".form-item .male-label {",[14,143669,143670],{},"   margin-right: 20px;",[14,143672,143673],{},"   display: inline-flex;",[14,143675,143676],{},"   align-items: center;",[14,143678,1059],{},[1451,143680],{"style":126390,"src":143681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1451,143683],{"style":126390,"src":143684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[74,143686,143688],{"id":143687},"_2052-常见父项属性","20.5.2 常见父项属性",[57,143690,143691,143694,143697,143700,143703,143706,143709],{},[60,143692,143693],{},"flex-direction：设置主轴的方向",[60,143695,143696],{},"justify-content：设置主轴上的子元素排列方式",[60,143698,143699],{},"flex-wrap：设置子元素是否换行",[60,143701,143702],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[60,143704,143705],{},"align-items：设置侧轴上的子元素排列方式（单行）",[60,143707,143708],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[60,143710,143693],{},[1451,143712],{"style":126390,"src":143713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1451,143715],{"style":126390,"src":143716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[57,143718,143719],{"start":25},[60,143720,143696],{},[1451,143722],{"style":126390,"src":143723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143725,143726,143729],{},[100,143727,143728],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143731,143732],{},"跟着主轴走",[57,143734,143735],{"start":1168},[60,143736,143699],{},[1451,143738],{"style":126390,"src":143739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143741,143742],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[57,143744,143745],{"start":1183},[60,143746,143702],{},[1451,143748],{"style":126390,"src":143749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143751,143752],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143754,143755],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[57,143757,143758],{"start":1189},[60,143759,143705],{},[1451,143761],{"style":126390,"src":143762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143764,143765],{},"align-items与align-content之间的区别：",[14,143767,143768],{},"单找items，多找content",[1451,143770],{"style":126390,"src":143771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[57,143773,143774],{"start":1203},[60,143775,143708],{},[1451,143777],{"style":126390,"src":143778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[74,143780,143782],{"id":143781},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[57,143784,143785],{},[60,143786,143787],{},[263,143788,143789],{},"flex 属性",[14,143791,143792],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1451,143794],{"style":126390,"src":143795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143797,143798],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143800,143801],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[57,143803,143804],{"start":25},[60,143805,143806,13785,143809],{},[263,143807,143808],{},"align-self",[263,143810,143811],{},"控制子项自己在侧轴上的排列方式",[1451,143813],{"style":126390,"src":143814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143816,143817],{},"单个子盒子在父盒子侧轴上的排列方式",[57,143819,143820],{"start":1168},[60,143821,143822,143824],{},[263,143823,95287],{}," 属性定义项目的排列顺序",[1451,143826],{"style":126390,"src":143827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[74,143829,143831],{"id":143830},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1451,143833],{"style":126390,"src":143834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143836,143837],{},"必须要添加浏览器的私有前缀",[74,143839,143841],{"id":143840},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143843,143844],{},"学到最重要的知识：",[14,143846,143847],{},"flex处理这样的布局思路",[1451,143849],{"style":126390,"src":143850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[94,143852,143854],{"className":126534,"code":143853,"language":126536,"meta":24,"style":24},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[100,143855,143856,143862,143872,143882,143892],{"__ignoreMap":24},[103,143857,143858,143860],{"class":105,"line":106},[103,143859,143601],{"class":1952},[103,143861,15562],{"class":113},[103,143863,143864,143866,143868,143870],{"class":105,"line":25},[103,143865,128150],{"class":162},[103,143867,51427],{"class":113},[103,143869,51467],{"class":162},[103,143871,1279],{"class":113},[103,143873,143874,143876,143878,143880],{"class":105,"line":1168},[103,143875,143630],{"class":162},[103,143877,51427],{"class":113},[103,143879,51582],{"class":162},[103,143881,1279],{"class":113},[103,143883,143884,143886,143888,143890],{"class":105,"line":1183},[103,143885,143641],{"class":162},[103,143887,51427],{"class":113},[103,143889,51582],{"class":162},[103,143891,1279],{"class":113},[103,143893,143894],{"class":105,"line":1189},[103,143895,1554],{"class":113},[14,143897,143898],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143900,143901],{},"使用属性选择器",[1451,143903],{"style":126390,"src":143904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143906,68879],{},[94,143908,143910],{"className":127281,"code":143909,"language":127283,"meta":24,"style":24},"\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",[100,143911,143912,143917,143931,143936,143956,143961,143980,143985,144004,144009,144028],{"__ignoreMap":24},[103,143913,143914],{"class":105,"line":106},[103,143915,143916],{"class":172},"\u003C!-- 携程网移动端案例结构 -->\n",[103,143918,143919,143921,143923,143925,143927,143929],{"class":105,"line":25},[103,143920,1023],{"class":113},[103,143922,51601],{"class":51290},[103,143924,53476],{"class":1952},[103,143926,159],{"class":113},[103,143928,92313],{"class":218},[103,143930,51297],{"class":113},[103,143932,143933],{"class":105,"line":1168},[103,143934,143935],{"class":172},"  \u003C!-- 搜索栏 -->\n",[103,143937,143938,143940,143942,143944,143946,143949,143952,143954],{"class":105,"line":1183},[103,143939,52134],{"class":113},[103,143941,51601],{"class":51290},[103,143943,53476],{"class":1952},[103,143945,159],{"class":113},[103,143947,143948],{"class":218},"\"search-index\"",[103,143950,143951],{"class":113},">...\u003C\u002F",[103,143953,51601],{"class":51290},[103,143955,51297],{"class":113},[103,143957,143958],{"class":105,"line":1189},[103,143959,143960],{"class":172},"  \u003C!-- 焦点图 -->\n",[103,143962,143963,143965,143967,143969,143971,143974,143976,143978],{"class":105,"line":1203},[103,143964,52134],{"class":113},[103,143966,51601],{"class":51290},[103,143968,53476],{"class":1952},[103,143970,159],{"class":113},[103,143972,143973],{"class":218},"\"focus\"",[103,143975,143951],{"class":113},[103,143977,51601],{"class":51290},[103,143979,51297],{"class":113},[103,143981,143982],{"class":105,"line":1209},[103,143983,143984],{"class":172},"  \u003C!-- 主导航 -->\n",[103,143986,143987,143989,143991,143993,143995,143998,144000,144002],{"class":105,"line":1300},[103,143988,52134],{"class":113},[103,143990,51601],{"class":51290},[103,143992,53476],{"class":1952},[103,143994,159],{"class":113},[103,143996,143997],{"class":218},"\"local-nav\"",[103,143999,143951],{"class":113},[103,144001,51601],{"class":51290},[103,144003,51297],{"class":113},[103,144005,144006],{"class":105,"line":1306},[103,144007,144008],{"class":172},"  \u003C!-- 子导航 -->\n",[103,144010,144011,144013,144015,144017,144019,144022,144024,144026],{"class":105,"line":1318},[103,144012,52134],{"class":113},[103,144014,51601],{"class":51290},[103,144016,53476],{"class":1952},[103,144018,159],{"class":113},[103,144020,144021],{"class":218},"\"nav-common\"",[103,144023,143951],{"class":113},[103,144025,51601],{"class":51290},[103,144027,51297],{"class":113},[103,144029,144030,144032,144034],{"class":105,"line":1601},[103,144031,51775],{"class":113},[103,144033,51601],{"class":51290},[103,144035,51297],{"class":113},[14,144037,70443],{},[94,144039,144040],{"className":126534,"code":136986,"language":126536,"meta":24,"style":24},[100,144041,144042,144056,144072],{"__ignoreMap":24},[103,144043,144044,144046,144048,144050,144052,144054],{"class":105,"line":106},[103,144045,53811],{"class":51290},[103,144047,1003],{"class":113},[103,144049,103097],{"class":1952},[103,144051,159],{"class":109},[103,144053,62689],{"class":218},[103,144055,137003],{"class":113},[103,144057,144058,144060,144062,144064,144066,144068,144070],{"class":105,"line":25},[103,144059,70886],{"class":162},[103,144061,51427],{"class":113},[103,144063,331],{"class":162},[103,144065,51482],{"class":109},[103,144067,51511],{"class":162},[103,144069,130114],{"class":162},[103,144071,1279],{"class":113},[103,144073,144074],{"class":105,"line":1168},[103,144075,1554],{"class":113},[14,144077,144078],{},"总代码和效果展示：",[1451,144080],{"style":126390,"src":144081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144083,68879],{},[94,144085,144086],{"className":127281,"code":143909,"language":127283,"meta":24,"style":24},[100,144087,144088,144092,144106,144110,144128,144132,144150,144154,144172,144176,144194],{"__ignoreMap":24},[103,144089,144090],{"class":105,"line":106},[103,144091,143916],{"class":172},[103,144093,144094,144096,144098,144100,144102,144104],{"class":105,"line":25},[103,144095,1023],{"class":113},[103,144097,51601],{"class":51290},[103,144099,53476],{"class":1952},[103,144101,159],{"class":113},[103,144103,92313],{"class":218},[103,144105,51297],{"class":113},[103,144107,144108],{"class":105,"line":1168},[103,144109,143935],{"class":172},[103,144111,144112,144114,144116,144118,144120,144122,144124,144126],{"class":105,"line":1183},[103,144113,52134],{"class":113},[103,144115,51601],{"class":51290},[103,144117,53476],{"class":1952},[103,144119,159],{"class":113},[103,144121,143948],{"class":218},[103,144123,143951],{"class":113},[103,144125,51601],{"class":51290},[103,144127,51297],{"class":113},[103,144129,144130],{"class":105,"line":1189},[103,144131,143960],{"class":172},[103,144133,144134,144136,144138,144140,144142,144144,144146,144148],{"class":105,"line":1203},[103,144135,52134],{"class":113},[103,144137,51601],{"class":51290},[103,144139,53476],{"class":1952},[103,144141,159],{"class":113},[103,144143,143973],{"class":218},[103,144145,143951],{"class":113},[103,144147,51601],{"class":51290},[103,144149,51297],{"class":113},[103,144151,144152],{"class":105,"line":1209},[103,144153,143984],{"class":172},[103,144155,144156,144158,144160,144162,144164,144166,144168,144170],{"class":105,"line":1300},[103,144157,52134],{"class":113},[103,144159,51601],{"class":51290},[103,144161,53476],{"class":1952},[103,144163,159],{"class":113},[103,144165,143997],{"class":218},[103,144167,143951],{"class":113},[103,144169,51601],{"class":51290},[103,144171,51297],{"class":113},[103,144173,144174],{"class":105,"line":1306},[103,144175,144008],{"class":172},[103,144177,144178,144180,144182,144184,144186,144188,144190,144192],{"class":105,"line":1318},[103,144179,52134],{"class":113},[103,144181,51601],{"class":51290},[103,144183,53476],{"class":1952},[103,144185,159],{"class":113},[103,144187,144021],{"class":218},[103,144189,143951],{"class":113},[103,144191,51601],{"class":51290},[103,144193,51297],{"class":113},[103,144195,144196,144198,144200],{"class":105,"line":1601},[103,144197,51775],{"class":113},[103,144199,51601],{"class":51290},[103,144201,51297],{"class":113},[14,144203,70443],{},[94,144205,144206],{"className":127281,"code":130638,"language":127283,"meta":24,"style":24},[100,144207,144208,144212,144226,144230],{"__ignoreMap":24},[103,144209,144210],{"class":105,"line":106},[103,144211,130645],{"class":172},[103,144213,144214,144216,144218,144220,144222,144224],{"class":105,"line":25},[103,144215,1023],{"class":113},[103,144217,51601],{"class":51290},[103,144219,53476],{"class":1952},[103,144221,159],{"class":113},[103,144223,130658],{"class":218},[103,144225,51297],{"class":113},[103,144227,144228],{"class":105,"line":1168},[103,144229,130665],{"class":113},[103,144231,144232,144234,144236],{"class":105,"line":1183},[103,144233,51775],{"class":113},[103,144235,51601],{"class":51290},[103,144237,51297],{"class":113},[5116,144239,137935],{},{"title":24,"searchDepth":25,"depth":25,"links":144241},[144242,144243,144247,144248,144249],{"id":143386,"depth":25,"text":143387},{"id":143418,"depth":25,"text":143419,"children":144244},[144245,144246],{"id":143422,"depth":1168,"text":143423},{"id":143439,"depth":1168,"text":143440},{"id":143458,"depth":25,"text":143459},{"id":143465,"depth":25,"text":143466},{"id":143552,"depth":25,"text":143553,"children":144250},[144251,144252,144253,144254,144255],{"id":143559,"depth":1168,"text":143560},{"id":143687,"depth":1168,"text":143688},{"id":143781,"depth":1168,"text":143782},{"id":143830,"depth":1168,"text":143831},{"id":143840,"depth":1168,"text":143841},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143378,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144262,"title":144263,"body":144264,"description":27,"extension":28,"meta":145491,"navigation":30,"path":145492,"seo":145493,"stem":145494,"__hash__":145495},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144265,"toc":145469},[144266,144269,144273,144277,144280,144283,144287,144292,144295,144298,144301,144304,144307,144364,144367,144372,144375,144378,144382,144393,144397,144400,144403,144410,144415,144419,144422,144428,144431,144435,144438,144445,144448,144451,144458,144461,144468,144471,144474,144481,144484,144487,144489,144506,144510,144513,144516,144519,144523,144526,144529,144532,144535,144538,144541,144543,144546,144549,144611,144614,144724,144731,144737,144740,144743,144747,144750,144754,144759,144762,144769,144772,144778,144783,144786,144789,144792,144795,144798,144801,144804,144807,144863,144865,144891,144895,144898,144901,144904,144912,144915,144918,144922,144978,144981,144985,144991,145002,145005,145010,145013,145016,145022,145025,145028,145031,145034,145037,145040,145043,145046,145071,145077,145080,145083,145086,145089,145092,145095,145100,145103,145106,145109,145117,145120,145127,145130,145133,145135,145159,145161,145164,145167,145170,145173,145176,145179,145182,145216,145219,145222,145256,145263,145266,145269,145272,145275,145278,145281,145288,145291,145294,145297,145300,145307,145310,145313,145320,145323,145326,145330,145333,145336,145339,145342,145345,145348,145351,145354,145356,145380,145382,145406,145410,145421,145424,145427,145430,145433,145436,145439,145442,145445,145448,145451,145454,145457,145460,145463,145466],[10,144267,144263],{"id":144268},"_21-移动端布局实战下篇",[45,144270,144272],{"id":144271},"_211-rem适配布局","21.1 rem适配布局",[74,144274,144276],{"id":144275},"_2111-rem单位","21.1.1 rem单位",[1451,144278],{"style":126390,"src":144279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144281,144282],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[74,144284,144286],{"id":144285},"_2112-媒体查询","21.1.2 媒体查询",[57,144288,144289],{},[60,144290,144291],{},"参数介绍",[1451,144293],{"style":126390,"src":144294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1451,144296],{"style":126390,"src":144297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1451,144299],{"style":126390,"src":144300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1451,144302],{"style":126390,"src":144303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1451,144305],{"style":126390,"src":144306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[94,144308,144310],{"className":126534,"code":144309,"language":126536,"meta":24,"style":24},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[100,144311,144312,144317,144336,144343,144356,144360],{"__ignoreMap":24},[103,144313,144314],{"class":105,"line":106},[103,144315,144316],{"class":172},"\u002F* 媒体查询 *\u002F\n",[103,144318,144319,144322,144324,144327,144329,144332,144334],{"class":105,"line":25},[103,144320,144321],{"class":109},"@media",[103,144323,1647],{"class":113},[103,144325,144326],{"class":162},"max-width",[103,144328,51427],{"class":113},[103,144330,144331],{"class":162},"768",[103,144333,51482],{"class":109},[103,144335,12432],{"class":113},[103,144337,144338,144341],{"class":105,"line":1168},[103,144339,144340],{"class":1952},"  .container",[103,144342,15562],{"class":113},[103,144344,144345,144348,144350,144352,144354],{"class":105,"line":1183},[103,144346,144347],{"class":162},"    width",[103,144349,51427],{"class":113},[103,144351,424],{"class":162},[103,144353,441],{"class":109},[103,144355,1279],{"class":113},[103,144357,144358],{"class":105,"line":1189},[103,144359,127330],{"class":113},[103,144361,144362],{"class":105,"line":1203},[103,144363,1554],{"class":113},[14,144365,144366],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[57,144368,144369],{"start":25},[60,144370,144371],{},"引入资源",[1451,144373],{"style":126390,"src":144374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144376,144377],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[74,144379,144381],{"id":144380},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1120,144383,144384,144387,144390],{},[60,144385,144386],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[60,144388,144389],{},"媒体查询可以根据不同设备宽度来修改样式",[60,144391,144392],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[45,144394,144396],{"id":144395},"_212-less基础","21.2 Less基础",[14,144398,144399],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144401,144402],{},"Less可以解决该问题，它是css的扩展语言",[14,144404,144405,144406],{},"Less中文网址： ",[17,144407,144408],{"href":144408,"rel":144409},"http:\u002F\u002Flesscss.cn\u002F",[21],[14,144411,144412],{},[263,144413,144414],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[74,144416,144418],{"id":144417},"_2121-less安装","21.2.1 less安装",[14,144420,144421],{},"如果使用vscode，则无需进行下方安装步骤",[14,144423,144424],{},[17,144425,144426],{"href":144426,"rel":144427},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[21],[1451,144429],{"style":126390,"src":144430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[74,144432,144434],{"id":144433},"_2122-less使用","21.2.2 less使用",[14,144436,144437],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[57,144439,144440],{},[60,144441,144442],{},[263,144443,144444],{},"Less 变量",[1451,144446],{"style":126390,"src":144447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1451,144449],{"style":126390,"src":144450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[57,144452,144453],{"start":25},[60,144454,144455],{},[263,144456,144457],{},"Less 编译",[1451,144459],{"style":126390,"src":144460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[57,144462,144463],{"start":1168},[60,144464,144465],{},[263,144466,144467],{},"Less 嵌套",[1451,144469],{"style":126390,"src":144470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1451,144472],{"style":126390,"src":144473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[57,144475,144476],{"start":1183},[60,144477,144478],{},[263,144479,144480],{},"Less 运算",[1451,144482],{"style":126390,"src":144483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144485,144486],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144488,143],{},[1120,144490,144491,144494,144497,144500,144503],{},[60,144492,144493],{},"乘号（*）和除号（\u002F）的写法",[60,144495,144496],{},"运算符中间左右有个空格隔开 1px + 5",[60,144498,144499],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[60,144501,144502],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[60,144504,144505],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[45,144507,144509],{"id":144508},"_213-rem-适配方案","21.3 rem 适配方案",[14,144511,144512],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144514,144515],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1451,144517],{"style":126390,"src":144518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[74,144520,144522],{"id":144521},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144524,144525],{},"rem + 媒体查询 + less 技术",[1451,144527],{"style":126390,"src":144528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144530,144531],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144533,144534],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1451,144536],{"style":126390,"src":144537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144539,144540],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144542,14623],{},[1451,144544],{"style":126390,"src":144545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144547,144548],{},"index.html:",[94,144550,144552],{"className":126534,"code":144551,"language":126536,"meta":24,"style":24},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[100,144553,144554,144559,144565,144581,144585,144591,144607],{"__ignoreMap":24},[103,144555,144556],{"class":105,"line":106},[103,144557,144558],{"class":172},"\u002F* rem 适配方案 *\u002F\n",[103,144560,144561,144563],{"class":105,"line":25},[103,144562,50625],{"class":51290},[103,144564,15562],{"class":113},[103,144566,144567,144569,144571,144574,144576,144578],{"class":105,"line":1168},[103,144568,70616],{"class":162},[103,144570,51427],{"class":113},[103,144572,144573],{"class":162},"62.5",[103,144575,441],{"class":109},[103,144577,130397],{"class":113},[103,144579,144580],{"class":172},"\u002F* 1rem = 10px *\u002F\n",[103,144582,144583],{"class":105,"line":1183},[103,144584,1554],{"class":113},[103,144586,144587,144589],{"class":105,"line":1189},[103,144588,130382],{"class":1952},[103,144590,15562],{"class":113},[103,144592,144593,144595,144597,144599,144602,144604],{"class":105,"line":1203},[103,144594,70558],{"class":162},[103,144596,51427],{"class":113},[103,144598,559],{"class":162},[103,144600,144601],{"class":109},"rem",[103,144603,130397],{"class":113},[103,144605,144606],{"class":172},"\u002F* 100px *\u002F\n",[103,144608,144609],{"class":105,"line":1209},[103,144610,1554],{"class":113},[14,144612,144613],{},"common.less",[94,144615,144617],{"className":126534,"code":144616,"language":126536,"meta":24,"style":24},"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",[100,144618,144619,144625,144640,144644,144650,144664,144668,144672,144676,144682,144696,144700,144706,144720],{"__ignoreMap":24},[103,144620,144621,144623],{"class":105,"line":106},[103,144622,50625],{"class":51290},[103,144624,15562],{"class":113},[103,144626,144627,144629,144631,144633,144635,144637],{"class":105,"line":25},[103,144628,70616],{"class":162},[103,144630,51427],{"class":113},[103,144632,144573],{"class":162},[103,144634,441],{"class":109},[103,144636,26057],{"class":113},[103,144638,144639],{"class":172},"\u002F* 10px *\u002F\n",[103,144641,144642],{"class":105,"line":1168},[103,144643,1554],{"class":113},[103,144645,144646,144648],{"class":105,"line":1183},[103,144647,51601],{"class":51290},[103,144649,15562],{"class":113},[103,144651,144652,144654,144656,144658,144660,144662],{"class":105,"line":1189},[103,144653,70558],{"class":162},[103,144655,51427],{"class":113},[103,144657,559],{"class":162},[103,144659,144601],{"class":109},[103,144661,26057],{"class":113},[103,144663,144606],{"class":172},[103,144665,144666],{"class":105,"line":1203},[103,144667,1554],{"class":113},[103,144669,144670],{"class":105,"line":1209},[103,144671,135995],{"class":113},[103,144673,144674],{"class":105,"line":1300},[103,144675,144558],{"class":172},[103,144677,144678,144680],{"class":105,"line":1306},[103,144679,50625],{"class":51290},[103,144681,15562],{"class":113},[103,144683,144684,144686,144688,144690,144692,144694],{"class":105,"line":1318},[103,144685,70616],{"class":162},[103,144687,51427],{"class":113},[103,144689,144573],{"class":162},[103,144691,441],{"class":109},[103,144693,130397],{"class":113},[103,144695,144580],{"class":172},[103,144697,144698],{"class":105,"line":1601},[103,144699,1554],{"class":113},[103,144701,144702,144704],{"class":105,"line":1606},[103,144703,130382],{"class":1952},[103,144705,15562],{"class":113},[103,144707,144708,144710,144712,144714,144716,144718],{"class":105,"line":1612},[103,144709,70558],{"class":162},[103,144711,51427],{"class":113},[103,144713,559],{"class":162},[103,144715,144601],{"class":109},[103,144717,130397],{"class":113},[103,144719,144606],{"class":172},[103,144721,144722],{"class":105,"line":1617},[103,144723,1554],{"class":113},[14,144725,144726,144727,144730],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23543,144728,144729],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[94,144732,144735],{"className":144733,"code":144734,"language":5177},[5175],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[100,144736,144734],{"__ignoreMap":24},[14,144738,144739],{},"less保存时会自动变成.css文件",[14,144741,144742],{},"好好搞懂上述代码写法",[74,144744,144746],{"id":144745},"_2132-样式导入样式","21.3.2 样式导入样式",[1451,144748],{"style":126390,"src":144749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[74,144751,144753],{"id":144752},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[57,144755,144756],{},[60,144757,144758],{},"准备工作",[1451,144760],{"style":126390,"src":144761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144763,144764,144765],{},"github地址：",[17,144766,144767],{"href":144767,"rel":144768},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[21],[14,144770,144771],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144773,144774,144775],{},"js文件引入到index.html中使用的是",[100,144776,144777],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[57,144779,144780],{"start":25},[60,144781,144782],{},"vscode插件",[1451,144784],{"style":126390,"src":144785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144787,144788],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144790,144791],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1451,144793],{"style":126390,"src":144794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144796,144797],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1451,144799],{"style":126390,"src":144800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144802,144803],{},"修改成75就可以，alt+z为快捷键",[14,144805,144806],{},"index.css：",[94,144808,144809],{"className":126534,"code":144551,"language":126536,"meta":24,"style":24},[100,144810,144811,144815,144821,144835,144839,144845,144859],{"__ignoreMap":24},[103,144812,144813],{"class":105,"line":106},[103,144814,144558],{"class":172},[103,144816,144817,144819],{"class":105,"line":25},[103,144818,50625],{"class":51290},[103,144820,15562],{"class":113},[103,144822,144823,144825,144827,144829,144831,144833],{"class":105,"line":1168},[103,144824,70616],{"class":162},[103,144826,51427],{"class":113},[103,144828,144573],{"class":162},[103,144830,441],{"class":109},[103,144832,130397],{"class":113},[103,144834,144580],{"class":172},[103,144836,144837],{"class":105,"line":1183},[103,144838,1554],{"class":113},[103,144840,144841,144843],{"class":105,"line":1189},[103,144842,130382],{"class":1952},[103,144844,15562],{"class":113},[103,144846,144847,144849,144851,144853,144855,144857],{"class":105,"line":1203},[103,144848,70558],{"class":162},[103,144850,51427],{"class":113},[103,144852,559],{"class":162},[103,144854,144601],{"class":109},[103,144856,130397],{"class":113},[103,144858,144606],{"class":172},[103,144860,144861],{"class":105,"line":1209},[103,144862,1554],{"class":113},[14,144864,144548],{},[94,144866,144867],{"className":126534,"code":126938,"language":126536,"meta":24,"style":24},[100,144868,144869,144875,144887],{"__ignoreMap":24},[103,144870,144871,144873],{"class":105,"line":106},[103,144872,51790],{"class":51290},[103,144874,15562],{"class":113},[103,144876,144877,144879,144881,144883,144885],{"class":105,"line":25},[103,144878,70616],{"class":162},[103,144880,51427],{"class":113},[103,144882,714],{"class":162},[103,144884,51482],{"class":109},[103,144886,1279],{"class":113},[103,144888,144889],{"class":105,"line":1168},[103,144890,1554],{"class":113},[45,144892,144894],{"id":144893},"_214-响应式开发","21.4 响应式开发",[14,144896,144897],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1451,144899],{"style":126390,"src":144900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144902,144903],{},"做法：",[1120,144905,144906,144909],{},[60,144907,144908],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[60,144910,144911],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1451,144913],{"style":126390,"src":144914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144916,144917],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[74,144919,144921],{"id":144920},"_2141-简单代码示范","21.4.1 简单代码示范",[94,144923,144924],{"className":126534,"code":144551,"language":126536,"meta":24,"style":24},[100,144925,144926,144930,144936,144950,144954,144960,144974],{"__ignoreMap":24},[103,144927,144928],{"class":105,"line":106},[103,144929,144558],{"class":172},[103,144931,144932,144934],{"class":105,"line":25},[103,144933,50625],{"class":51290},[103,144935,15562],{"class":113},[103,144937,144938,144940,144942,144944,144946,144948],{"class":105,"line":1168},[103,144939,70616],{"class":162},[103,144941,51427],{"class":113},[103,144943,144573],{"class":162},[103,144945,441],{"class":109},[103,144947,130397],{"class":113},[103,144949,144580],{"class":172},[103,144951,144952],{"class":105,"line":1183},[103,144953,1554],{"class":113},[103,144955,144956,144958],{"class":105,"line":1189},[103,144957,130382],{"class":1952},[103,144959,15562],{"class":113},[103,144961,144962,144964,144966,144968,144970,144972],{"class":105,"line":1203},[103,144963,70558],{"class":162},[103,144965,51427],{"class":113},[103,144967,559],{"class":162},[103,144969,144601],{"class":109},[103,144971,130397],{"class":113},[103,144973,144606],{"class":172},[103,144975,144976],{"class":105,"line":1209},[103,144977,1554],{"class":113},[14,144979,144980],{},"父盒子一般命名为container",[74,144982,144984],{"id":144983},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,144986,144987,144988],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[263,144989,144990],{},"使得 Web 开发更加快捷",[1120,144992,144993],{},[60,144994,144995,144996],{},"官网：",[263,144997,144998],{},[17,144999,145000],{"href":145000,"rel":145001},"http:\u002F\u002Fgetbootstrap.com\u002F",[21],[14,145003,145004],{},"可以直接去官网拿现成的东西",[57,145006,145007],{},[60,145008,145009],{},"Bootstrap的使用",[14,145011,145012],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145014,145015],{},"Bootstrap 使用四步曲：",[14,145017,145018,145021],{},[263,145019,145020],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1451,145023],{"style":126390,"src":145024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145026,145027],{},"打开Bootstrap官网，然后下载",[1451,145029],{"style":126390,"src":145030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1451,145032],{"style":126390,"src":145033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145035,145036],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145038,145039],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145041,145042],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1451,145044],{"style":126390,"src":145045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[94,145047,145049],{"className":126534,"code":145048,"language":126536,"meta":24,"style":24},".center {\n  color: red;\n}\n",[100,145050,145051,145057,145067],{"__ignoreMap":24},[103,145052,145053,145055],{"class":105,"line":106},[103,145054,126825],{"class":1952},[103,145056,15562],{"class":113},[103,145058,145059,145061,145063,145065],{"class":105,"line":25},[103,145060,70895],{"class":162},[103,145062,51427],{"class":113},[103,145064,57411],{"class":162},[103,145066,1279],{"class":113},[103,145068,145069],{"class":105,"line":1168},[103,145070,1554],{"class":113},[14,145072,145073,145076],{},[100,145074,145075],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1451,145078],{"style":126390,"src":145079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1451,145081],{"style":126390,"src":145082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1451,145084],{"style":126390,"src":145085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145087,145088],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1451,145090],{"style":126390,"src":145091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145093,145094],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[57,145096,145097],{"start":25},[60,145098,145099],{},"布局容器",[1451,145101],{"style":126390,"src":145102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145104,145105],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145107,145108],{},"container-fluid用于移动式布局比较方便",[57,145110,145111],{"start":1168},[60,145112,145113,145114],{},"bootstrap ",[263,145115,145116],{},"栅格系统原理",[1451,145118],{"style":126390,"src":145119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[57,145121,145122],{"start":1183},[60,145123,145124],{},[263,145125,145126],{},"栅格选项参数",[1451,145128],{"style":126390,"src":145129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145131,145132],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145134,14623],{},[94,145136,145137],{"className":126534,"code":145048,"language":126536,"meta":24,"style":24},[100,145138,145139,145145,145155],{"__ignoreMap":24},[103,145140,145141,145143],{"class":105,"line":106},[103,145142,126825],{"class":1952},[103,145144,15562],{"class":113},[103,145146,145147,145149,145151,145153],{"class":105,"line":25},[103,145148,70895],{"class":162},[103,145150,51427],{"class":113},[103,145152,57411],{"class":162},[103,145154,1279],{"class":113},[103,145156,145157],{"class":105,"line":1168},[103,145158,1554],{"class":113},[14,145160,135577],{},[1451,145162],{"style":126390,"src":145163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145165,145166],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145168,145169],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145171,145172],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145174,145175],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145177,145178],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145180,145181],{},"汇总展示说明：",[94,145183,145184],{"className":127281,"code":130638,"language":127283,"meta":24,"style":24},[100,145185,145186,145190,145204,145208],{"__ignoreMap":24},[103,145187,145188],{"class":105,"line":106},[103,145189,130645],{"class":172},[103,145191,145192,145194,145196,145198,145200,145202],{"class":105,"line":25},[103,145193,1023],{"class":113},[103,145195,51601],{"class":51290},[103,145197,53476],{"class":1952},[103,145199,159],{"class":113},[103,145201,130658],{"class":218},[103,145203,51297],{"class":113},[103,145205,145206],{"class":105,"line":1168},[103,145207,130665],{"class":113},[103,145209,145210,145212,145214],{"class":105,"line":1183},[103,145211,51775],{"class":113},[103,145213,51601],{"class":51290},[103,145215,51297],{"class":113},[1451,145217],{"style":126390,"src":145218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145220,145221],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[94,145223,145224],{"className":127281,"code":130638,"language":127283,"meta":24,"style":24},[100,145225,145226,145230,145244,145248],{"__ignoreMap":24},[103,145227,145228],{"class":105,"line":106},[103,145229,130645],{"class":172},[103,145231,145232,145234,145236,145238,145240,145242],{"class":105,"line":25},[103,145233,1023],{"class":113},[103,145235,51601],{"class":51290},[103,145237,53476],{"class":1952},[103,145239,159],{"class":113},[103,145241,130658],{"class":218},[103,145243,51297],{"class":113},[103,145245,145246],{"class":105,"line":1168},[103,145247,130665],{"class":113},[103,145249,145250,145252,145254],{"class":105,"line":1183},[103,145251,51775],{"class":113},[103,145253,51601],{"class":51290},[103,145255,51297],{"class":113},[57,145257,145258],{"start":1189},[60,145259,145260],{},[263,145261,145262],{},"列嵌套",[1451,145264],{"style":126390,"src":145265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145267,145268],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145270,145271],{},"没加row内部这样：",[1451,145273],{"style":126390,"src":145274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145276,145277],{},"加上row之后内部为：",[1451,145279],{"style":126390,"src":145280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[57,145282,145283],{"start":1203},[60,145284,145285],{},[263,145286,145287],{},"列偏移",[1451,145289],{"style":126390,"src":145290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145292,145293],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145295,145296],{},"要加偏移量，即偏移份数",[14,145298,145299],{},"偏移的份数=12-两个盒子的份数",[57,145301,145302],{"start":1209},[60,145303,145304],{},[263,145305,145306],{},"列排序",[1451,145308],{"style":126390,"src":145309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145311,145312],{},"pull拉左；push推右",[57,145314,145315],{"start":1300},[60,145316,145317],{},[263,145318,145319],{},"响应式工具",[1451,145321],{"style":126390,"src":145322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145324,145325],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[74,145327,145329],{"id":145328},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145331,145332],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145334,145335],{},"ul {",[14,145337,145338],{},"list-style: none;",[14,145340,145341],{},"margin:0;",[14,145343,145344],{},"padding:0; }",[1451,145346],{"style":126390,"src":145347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1451,145349],{"style":126390,"src":145350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145352,145353],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145355,68879],{},[94,145357,145358],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,145359,145360,145366,145376],{"__ignoreMap":24},[103,145361,145362,145364],{"class":105,"line":106},[103,145363,130382],{"class":1952},[103,145365,15562],{"class":113},[103,145367,145368,145370,145372,145374],{"class":105,"line":25},[103,145369,131014],{"class":162},[103,145371,51427],{"class":113},[103,145373,23726],{"class":162},[103,145375,1279],{"class":113},[103,145377,145378],{"class":105,"line":1168},[103,145379,1554],{"class":113},[14,145381,70443],{},[94,145383,145384],{"className":126534,"code":139204,"language":126536,"meta":24,"style":24},[100,145385,145386,145392,145402],{"__ignoreMap":24},[103,145387,145388,145390],{"class":105,"line":106},[103,145389,130382],{"class":1952},[103,145391,15562],{"class":113},[103,145393,145394,145396,145398,145400],{"class":105,"line":25},[103,145395,131014],{"class":162},[103,145397,51427],{"class":113},[103,145399,23726],{"class":162},[103,145401,1279],{"class":113},[103,145403,145404],{"class":105,"line":1168},[103,145405,1554],{"class":113},[45,145407,145409],{"id":145408},"_215-swiper-插件使用","21.5 swiper 插件使用",[1120,145411,145412,145415,145418],{},[60,145413,145414],{},"下载需要的css和js文件html页面中 引入相关文件",[60,145416,145417],{},"官网找到类似案例，复制html结构，css样式 js 语法",[60,145419,145420],{},"根据需求定制修改模块",[1451,145422],{"style":126390,"src":145423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145425,145426],{},"解压后将这两部分放到项目中",[1451,145428],{"style":126390,"src":145429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145431,145432],{},"这个插件可以帮助我们实现轮播图效果",[14,145434,145435],{},"用法：",[1451,145437],{"style":126390,"src":145438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145440,145441],{},"找到自己喜欢的",[1451,145443],{"style":126390,"src":145444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145446,145447],{},"右键，查看网页源代码",[1451,145449],{"style":126390,"src":145450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145452,145453],{},"复制人家的结构内容",[14,145455,145456],{},"然后去看API文档：",[1451,145458],{"style":126390,"src":145459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145461,145462],{},"可以看看如何修改样式",[14,145464,145465],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5116,145467,145468],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":24,"searchDepth":25,"depth":25,"links":145470},[145471,145476,145480,145485,145490],{"id":144271,"depth":25,"text":144272,"children":145472},[145473,145474,145475],{"id":144275,"depth":1168,"text":144276},{"id":144285,"depth":1168,"text":144286},{"id":144380,"depth":1168,"text":144381},{"id":144395,"depth":25,"text":144396,"children":145477},[145478,145479],{"id":144417,"depth":1168,"text":144418},{"id":144433,"depth":1168,"text":144434},{"id":144508,"depth":25,"text":144509,"children":145481},[145482,145483,145484],{"id":144521,"depth":1168,"text":144522},{"id":144745,"depth":1168,"text":144746},{"id":144752,"depth":1168,"text":144753},{"id":144893,"depth":25,"text":144894,"children":145486},[145487,145488,145489],{"id":144920,"depth":1168,"text":144921},{"id":144983,"depth":1168,"text":144984},{"id":145328,"depth":1168,"text":145329},{"id":145408,"depth":25,"text":145409},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144263,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145497,"title":145498,"body":145499,"description":27,"extension":28,"meta":145719,"navigation":30,"path":145720,"seo":145721,"stem":145722,"__hash__":145723},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145500,"toc":145715},[145501,145504,145508,145511,145526,145531,145534,145539,145574,145579,145591,145596,145609,145614,145631,145636,145656,145661,145679,145682,145685,145688,145691,145695,145698,145701,145704,145707,145710,145713],[10,145502,145498],{"id":145503},"_22-代码提交与新型相对单位",[45,145505,145507],{"id":145506},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145509,145510],{},"法1：",[57,145512,145513,145520,145523],{},[60,145514,145515,145516],{},"登录网站注册：",[17,145517,145518],{"href":145518,"rel":145519},"https:\u002F\u002Fgitee.com\u002F",[21],[60,145521,145522],{},"码云创建新的仓库",[60,145524,145525],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1120,145527,145528],{},[60,145529,145530],{},"在网站根目录右键-- Git Bash Here",[1451,145532],{"style":126390,"src":145533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1120,145535,145536],{},[60,145537,145538],{},"如果是第一次利用git提交，请配置好全局选项",[94,145540,145542],{"className":117286,"code":145541,"language":117288,"meta":24,"style":24},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[100,145543,145544,145560],{"__ignoreMap":24},[103,145545,145546,145549,145551,145554,145557],{"class":105,"line":106},[103,145547,145548],{"class":1952},"git",[103,145550,119709],{"class":218},[103,145552,145553],{"class":162}," --global",[103,145555,145556],{"class":218}," user.name",[103,145558,145559],{"class":218}," \"你的名字\"\n",[103,145561,145562,145564,145566,145568,145571],{"class":105,"line":25},[103,145563,145548],{"class":1952},[103,145565,119709],{"class":218},[103,145567,145553],{"class":162},[103,145569,145570],{"class":218}," user.email",[103,145572,145573],{"class":218}," \"你的邮箱\"\n",[1120,145575,145576],{},[60,145577,145578],{},"初始化仓库",[94,145580,145582],{"className":117286,"code":145581,"language":117288,"meta":24,"style":24},"git init\n",[100,145583,145584],{"__ignoreMap":24},[103,145585,145586,145588],{"class":105,"line":106},[103,145587,145548],{"class":1952},[103,145589,145590],{"class":218}," init\n",[1120,145592,145593],{},[60,145594,145595],{},"把本地文件放到暂存区",[94,145597,145599],{"className":117286,"code":145598,"language":117288,"meta":24,"style":24},"git add .\n",[100,145600,145601],{"__ignoreMap":24},[103,145602,145603,145605,145607],{"class":105,"line":106},[103,145604,145548],{"class":1952},[103,145606,5199],{"class":218},[103,145608,28731],{"class":218},[1120,145610,145611],{},[60,145612,145613],{},"把本地文件放到本地仓库里面",[94,145615,145617],{"className":117286,"code":145616,"language":117288,"meta":24,"style":24},"git commit -m \"first commit\"\n",[100,145618,145619],{"__ignoreMap":24},[103,145620,145621,145623,145626,145628],{"class":105,"line":106},[103,145622,145548],{"class":1952},[103,145624,145625],{"class":218}," commit",[103,145627,100872],{"class":162},[103,145629,145630],{"class":218}," \"first commit\"\n",[1120,145632,145633],{},[60,145634,145635],{},"链接远程仓库",[94,145637,145639],{"className":117286,"code":145638,"language":117288,"meta":24,"style":24},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[100,145640,145641],{"__ignoreMap":24},[103,145642,145643,145645,145648,145650,145653],{"class":105,"line":106},[103,145644,145548],{"class":1952},[103,145646,145647],{"class":218}," remote",[103,145649,5199],{"class":218},[103,145651,145652],{"class":218}," origin",[103,145654,145655],{"class":218}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1120,145657,145658],{},[60,145659,145660],{},"把本地仓库的文件推送到远程仓库 push",[94,145662,145664],{"className":117286,"code":145663,"language":117288,"meta":24,"style":24},"git push -u origin master\n",[100,145665,145666],{"__ignoreMap":24},[103,145667,145668,145670,145672,145674,145676],{"class":105,"line":106},[103,145669,145548],{"class":1952},[103,145671,29006],{"class":218},[103,145673,28280],{"class":162},[103,145675,145652],{"class":218},[103,145677,145678],{"class":218}," master\n",[1451,145680],{"style":126390,"src":145681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145683,145684],{},"上方方法暂未实现，后边学完git后在整",[14,145686,145687],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1451,145689],{"style":126390,"src":145690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[45,145692,145694],{"id":145693},"_222-新型相对单位","22.2 新型相对单位",[1451,145696],{"style":126390,"src":145697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1451,145699],{"style":126390,"src":145700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145702,145703],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145705,145706],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1451,145708],{"style":126390,"src":145709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145711,145712],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5116,145714,23947],{},{"title":24,"searchDepth":25,"depth":25,"links":145716},[145717,145718],{"id":145506,"depth":25,"text":145507},{"id":145693,"depth":25,"text":145694},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145498,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145725,"title":145726,"body":145727,"description":145731,"extension":28,"meta":145732,"navigation":30,"path":145733,"seo":145734,"stem":145735,"__hash__":145736},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145728,"toc":145729},[],{"title":24,"searchDepth":25,"depth":25,"links":145730},[],"自己正经开始学编程的第一门语言！",{"category":92829},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145726,"description":145731},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145738,"title":145739,"body":145740,"description":27,"extension":28,"meta":146887,"navigation":30,"path":146888,"seo":146889,"stem":146890,"__hash__":146891},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145741,"toc":146863},[145742,145745,145749,145752,145755,145780,145783,145789,145793,145796,145823,145826,145866,145869,145881,145884,145890,145894,145898,145925,145942,145949,145953,145956,145982,145985,145989,145992,146032,146035,146052,146058,146062,146067,146111,146114,146132,146135,146203,146207,146214,146217,146232,146235,146244,146247,146258,146261,146270,146273,146290,146293,146308,146312,146316,146319,146321,146341,146345,146348,146351,146362,146365,146371,146375,146381,146408,146411,146423,146426,146437,146440,146446,146450,146456,146506,146509,146551,146554,146587,146590,146624,146628,146631,146651,146654,146690,146693,146706,146710,146714,146720,146723,146736,146740,146743,146749,146752,146756,146759,146762,146811,146815,146831,146837,146844,146850,146860],[10,145743,145739],{"id":145744},"_1-python环境与第一个程序",[45,145746,145748],{"id":145747},"_11-什么是python","1.1 什么是Python",[14,145750,145751],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145753,145754],{},"理解 Python 时抓住三个关键词：",[57,145756,145757,145760,145763],{},[60,145758,145759],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[60,145761,145762],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[60,145764,145765,145766,326,145769,326,145772,326,145775,326,145777,28375],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[100,145767,145768],{},"os",[100,145770,145771],{},"sys",[100,145773,145774],{},"json",[100,145776,57850],{},[100,145778,145779],{},"datetime",[14,145781,145782],{},"Python 程序的运行链路：",[94,145784,145787],{"className":145785,"code":145786,"language":5177,"meta":24},[5175],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[100,145788,145786],{"__ignoreMap":24},[45,145790,145792],{"id":145791},"_12-python解释器","1.2 Python解释器",[14,145794,145795],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[94,145797,145799],{"className":23812,"code":145798,"language":23814,"meta":24,"style":24},"python --version\npython3 --version\npython\npython3\n",[100,145800,145801,145807,145813,145818],{"__ignoreMap":24},[103,145802,145803,145805],{"class":105,"line":106},[103,145804,30370],{"class":1952},[103,145806,26283],{"class":162},[103,145808,145809,145811],{"class":105,"line":25},[103,145810,100869],{"class":1952},[103,145812,26283],{"class":162},[103,145814,145815],{"class":105,"line":1168},[103,145816,145817],{"class":1952},"python\n",[103,145819,145820],{"class":105,"line":1183},[103,145821,145822],{"class":1952},"python3\n",[14,145824,145825],{},"进入交互模式后，可以直接输入表达式：",[94,145827,145829],{"className":30368,"code":145828,"language":30370,"meta":24,"style":24},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[100,145830,145831,145842,145847,145861],{"__ignoreMap":24},[103,145832,145833,145836,145838,145840],{"class":105,"line":106},[103,145834,145835],{"class":109},">>>",[103,145837,25108],{"class":162},[103,145839,45556],{"class":109},[103,145841,47713],{"class":162},[103,145843,145844],{"class":105,"line":25},[103,145845,145846],{"class":162},"3\n",[103,145848,145849,145851,145854,145856,145859],{"class":105,"line":1168},[103,145850,145835],{"class":109},[103,145852,145853],{"class":162}," print",[103,145855,114],{"class":113},[103,145857,145858],{"class":218},"\"hello python\"",[103,145860,120],{"class":113},[103,145862,145863],{"class":105,"line":1183},[103,145864,145865],{"class":113},"hello python\n",[14,145867,145868],{},"退出交互模式：",[94,145870,145872],{"className":30368,"code":145871,"language":30370,"meta":24,"style":24},"exit()\n",[100,145873,145874],{"__ignoreMap":24},[103,145875,145876,145879],{"class":105,"line":106},[103,145877,145878],{"class":162},"exit",[103,145880,1965],{"class":113},[14,145882,145883],{},"或使用快捷键：",[94,145885,145888],{"className":145886,"code":145887,"language":5177,"meta":24},[5175],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[100,145889,145887],{"__ignoreMap":24},[45,145891,145893],{"id":145892},"_13-安装python","1.3 安装Python",[74,145895,145897],{"id":145896},"_131-windows安装","1.3.1 Windows安装",[57,145899,145900,145907,145910,145916,145922],{},[60,145901,145902,145903],{},"打开 Python 官网：",[17,145904,145905],{"href":145905,"rel":145906},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[21],[60,145908,145909],{},"下载 Windows Installer。",[60,145911,145912,145913,28375],{},"安装时勾选 ",[100,145914,145915],{},"Add Python to PATH",[60,145917,145918,145919,28375],{},"点击 ",[100,145920,145921],{},"Install Now",[60,145923,145924],{},"安装完成后打开命令提示符验证：",[94,145926,145928],{"className":23812,"code":145927,"language":23814,"meta":24,"style":24},"python --version\npip --version\n",[100,145929,145930,145936],{"__ignoreMap":24},[103,145931,145932,145934],{"class":105,"line":106},[103,145933,30370],{"class":1952},[103,145935,26283],{"class":162},[103,145937,145938,145940],{"class":105,"line":25},[103,145939,23821],{"class":1952},[103,145941,26283],{"class":162},[14,145943,145944,145945,145948],{},"如果提示 ",[100,145946,145947],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[74,145950,145952],{"id":145951},"_132-macos安装","1.3.2 macOS安装",[14,145954,145955],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[94,145957,145959],{"className":23812,"code":145958,"language":23814,"meta":24,"style":24},"brew install python\npython3 --version\npip3 --version\n",[100,145960,145961,145970,145976],{"__ignoreMap":24},[103,145962,145963,145966,145968],{"class":105,"line":106},[103,145964,145965],{"class":1952},"brew",[103,145967,23824],{"class":218},[103,145969,124300],{"class":218},[103,145971,145972,145974],{"class":105,"line":25},[103,145973,100869],{"class":1952},[103,145975,26283],{"class":162},[103,145977,145978,145980],{"class":105,"line":1168},[103,145979,119690],{"class":1952},[103,145981,26283],{"class":162},[14,145983,145984],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[74,145986,145988],{"id":145987},"_133-linux安装","1.3.3 Linux安装",[14,145990,145991],{},"Ubuntu\u002FDebian：",[94,145993,145995],{"className":23812,"code":145994,"language":23814,"meta":24,"style":24},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[100,145996,145997,146005,146020,146026],{"__ignoreMap":24},[103,145998,145999,146001,146003],{"class":105,"line":106},[103,146000,24566],{"class":1952},[103,146002,117307],{"class":218},[103,146004,26232],{"class":218},[103,146006,146007,146009,146011,146013,146015,146017],{"class":105,"line":25},[103,146008,24566],{"class":1952},[103,146010,117307],{"class":218},[103,146012,23824],{"class":218},[103,146014,104393],{"class":218},[103,146016,100788],{"class":218},[103,146018,146019],{"class":218}," python3-venv\n",[103,146021,146022,146024],{"class":105,"line":1168},[103,146023,100869],{"class":1952},[103,146025,26283],{"class":162},[103,146027,146028,146030],{"class":105,"line":1183},[103,146029,119690],{"class":1952},[103,146031,26283],{"class":162},[14,146033,146034],{},"Fedora：",[94,146036,146038],{"className":23812,"code":146037,"language":23814,"meta":24,"style":24},"sudo dnf install python3 python3-pip\n",[100,146039,146040],{"__ignoreMap":24},[103,146041,146042,146044,146046,146048,146050],{"class":105,"line":106},[103,146043,24566],{"class":1952},[103,146045,26305],{"class":218},[103,146047,23824],{"class":218},[103,146049,104393],{"class":218},[103,146051,119755],{"class":218},[14,146053,146054,146055,146057],{},"Linux 上通常使用 ",[100,146056,100869],{}," 命令，避免和系统旧版本 Python 冲突。",[45,146059,146061],{"id":146060},"_14-pip包管理器","1.4 pip包管理器",[14,146063,146064,146066],{},[100,146065,23821],{}," 用来安装第三方库。",[94,146068,146070],{"className":23812,"code":146069,"language":23814,"meta":24,"style":24},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[100,146071,146072,146081,146090,146098,146104],{"__ignoreMap":24},[103,146073,146074,146076,146078],{"class":105,"line":106},[103,146075,23821],{"class":1952},[103,146077,23824],{"class":218},[103,146079,146080],{"class":218}," requests\n",[103,146082,146083,146085,146088],{"class":105,"line":25},[103,146084,23821],{"class":1952},[103,146086,146087],{"class":218}," uninstall",[103,146089,146080],{"class":218},[103,146091,146092,146094,146096],{"class":105,"line":1168},[103,146093,23821],{"class":1952},[103,146095,117564],{"class":218},[103,146097,146080],{"class":218},[103,146099,146100,146102],{"class":105,"line":1183},[103,146101,23821],{"class":1952},[103,146103,118945],{"class":218},[103,146105,146106,146108],{"class":105,"line":1189},[103,146107,23821],{"class":1952},[103,146109,146110],{"class":218}," freeze\n",[14,146112,146113],{},"国内网络较慢时可以临时使用镜像：",[94,146115,146117],{"className":23812,"code":146116,"language":23814,"meta":24,"style":24},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[100,146118,146119],{"__ignoreMap":24},[103,146120,146121,146123,146125,146128,146130],{"class":105,"line":106},[103,146122,23821],{"class":1952},[103,146124,23824],{"class":218},[103,146126,146127],{"class":218}," requests",[103,146129,26420],{"class":162},[103,146131,119718],{"class":218},[14,146133,146134],{},"常见第三方库：",[251,146136,146137,146146],{},[254,146138,146139],{},[257,146140,146141,146144],{},[260,146142,146143],{},"库",[260,146145,102686],{},[298,146147,146148,146156,146163,146171,146179,146187,146195],{},[257,146149,146150,146153],{},[303,146151,146152],{},"requests",[303,146154,146155],{},"网络请求",[257,146157,146158,146160],{},[303,146159,100616],{},[303,146161,146162],{},"数值计算",[257,146164,146165,146168],{},[303,146166,146167],{},"pandas",[303,146169,146170],{},"表格数据处理",[257,146172,146173,146176],{},[303,146174,146175],{},"matplotlib",[303,146177,146178],{},"绘图",[257,146180,146181,146184],{},[303,146182,146183],{},"pyecharts",[303,146185,146186],{},"ECharts 图表",[257,146188,146189,146192],{},[303,146190,146191],{},"flask",[303,146193,146194],{},"Web 后端",[257,146196,146197,146200],{},[303,146198,146199],{},"pytest",[303,146201,146202],{},"自动化测试",[45,146204,146206],{"id":146205},"_15-虚拟环境","1.5 虚拟环境",[14,146208,146209,146210,146213],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[100,146211,146212],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146215,146216],{},"创建虚拟环境：",[94,146218,146220],{"className":23812,"code":146219,"language":23814,"meta":24,"style":24},"python -m venv .venv\n",[100,146221,146222],{"__ignoreMap":24},[103,146223,146224,146226,146228,146230],{"class":105,"line":106},[103,146225,30370],{"class":1952},[103,146227,100872],{"class":162},[103,146229,100875],{"class":218},[103,146231,100878],{"class":218},[14,146233,146234],{},"Windows 激活：",[94,146236,146238],{"className":23812,"code":146237,"language":23814,"meta":24,"style":24},".venv\\Scripts\\activate\n",[100,146239,146240],{"__ignoreMap":24},[103,146241,146242],{"class":105,"line":106},[103,146243,146237],{"class":1952},[14,146245,146246],{},"macOS\u002FLinux 激活：",[94,146248,146250],{"className":23812,"code":146249,"language":23814,"meta":24,"style":24},"source .venv\u002Fbin\u002Factivate\n",[100,146251,146252],{"__ignoreMap":24},[103,146253,146254,146256],{"class":105,"line":106},[103,146255,100883],{"class":162},[103,146257,100886],{"class":218},[14,146259,146260],{},"退出虚拟环境：",[94,146262,146264],{"className":23812,"code":146263,"language":23814,"meta":24,"style":24},"deactivate\n",[100,146265,146266],{"__ignoreMap":24},[103,146267,146268],{"class":105,"line":106},[103,146269,146263],{"class":1952},[14,146271,146272],{},"保存依赖：",[94,146274,146276],{"className":23812,"code":146275,"language":23814,"meta":24,"style":24},"pip freeze > requirements.txt\n",[100,146277,146278],{"__ignoreMap":24},[103,146279,146280,146282,146285,146287],{"class":105,"line":106},[103,146281,23821],{"class":1952},[103,146283,146284],{"class":218}," freeze",[103,146286,26212],{"class":109},[103,146288,146289],{"class":218}," requirements.txt\n",[14,146291,146292],{},"安装依赖：",[94,146294,146296],{"className":23812,"code":146295,"language":23814,"meta":24,"style":24},"pip install -r requirements.txt\n",[100,146297,146298],{"__ignoreMap":24},[103,146299,146300,146302,146304,146306],{"class":105,"line":106},[103,146301,23821],{"class":1952},[103,146303,23824],{"class":218},[103,146305,119629],{"class":162},[103,146307,146289],{"class":218},[45,146309,146311],{"id":146310},"_16-开发工具","1.6 开发工具",[74,146313,146315],{"id":146314},"_161-pycharm","1.6.1 PyCharm",[14,146317,146318],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146320,122044],{},[57,146322,146323,146326,146329,146335,146338],{},[60,146324,146325],{},"New Project：创建项目。",[60,146327,146328],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[60,146330,146331,146332,125965],{},"New Python File：创建 ",[100,146333,146334],{},".py",[60,146336,146337],{},"Run：运行当前文件。",[60,146339,146340],{},"Debug：断点调试。",[74,146342,146344],{"id":146343},"_162-vs-code","1.6.2 VS Code",[14,146346,146347],{},"VS Code 轻量，适合后续多语言开发。",[14,146349,146350],{},"建议安装插件：",[57,146352,146353,146356,146359],{},[60,146354,146355],{},"Python。",[60,146357,146358],{},"Pylance。",[60,146360,146361],{},"Jupyter。",[14,146363,146364],{},"选择解释器：",[94,146366,146369],{"className":146367,"code":146368,"language":5177,"meta":24},[5175],"Ctrl + Shift + P -> Python: Select Interpreter\n",[100,146370,146368],{"__ignoreMap":24},[45,146372,146374],{"id":146373},"_17-第一个python程序","1.7 第一个Python程序",[14,146376,146377,146378,24608],{},"创建文件 ",[100,146379,146380],{},"hello.py",[94,146382,146384],{"className":30368,"code":146383,"language":30370,"meta":24,"style":24},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[100,146385,146386,146397],{"__ignoreMap":24},[103,146387,146388,146390,146392,146395],{"class":105,"line":106},[103,146389,30405],{"class":162},[103,146391,114],{"class":113},[103,146393,146394],{"class":218},"\"Hello World\"",[103,146396,120],{"class":113},[103,146398,146399,146401,146403,146406],{"class":105,"line":25},[103,146400,30405],{"class":162},[103,146402,114],{"class":113},[103,146404,146405],{"class":218},"\"你好，Python\"",[103,146407,120],{"class":113},[14,146409,146410],{},"在终端运行：",[94,146412,146414],{"className":23812,"code":146413,"language":23814,"meta":24,"style":24},"python hello.py\n",[100,146415,146416],{"__ignoreMap":24},[103,146417,146418,146420],{"class":105,"line":106},[103,146419,30370],{"class":1952},[103,146421,146422],{"class":218}," hello.py\n",[14,146424,146425],{},"或：",[94,146427,146429],{"className":23812,"code":146428,"language":23814,"meta":24,"style":24},"python3 hello.py\n",[100,146430,146431],{"__ignoreMap":24},[103,146432,146433,146435],{"class":105,"line":106},[103,146434,100869],{"class":1952},[103,146436,146422],{"class":218},[14,146438,146439],{},"输出：",[94,146441,146444],{"className":146442,"code":146443,"language":5177,"meta":24},[5175],"Hello World\n你好，Python\n",[100,146445,146443],{"__ignoreMap":24},[45,146447,146449],{"id":146448},"_18-print函数","1.8 print函数",[14,146451,146452,146455],{},[100,146453,146454],{},"print()"," 用来输出内容。",[94,146457,146459],{"className":30368,"code":146458,"language":30370,"meta":24,"style":24},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[100,146460,146461,146471,146481,146491],{"__ignoreMap":24},[103,146462,146463,146465,146467,146469],{"class":105,"line":106},[103,146464,30405],{"class":162},[103,146466,114],{"class":113},[103,146468,5834],{"class":218},[103,146470,120],{"class":113},[103,146472,146473,146475,146477,146479],{"class":105,"line":25},[103,146474,30405],{"class":162},[103,146476,114],{"class":113},[103,146478,424],{"class":162},[103,146480,120],{"class":113},[103,146482,146483,146485,146487,146489],{"class":105,"line":1168},[103,146484,30405],{"class":162},[103,146486,114],{"class":113},[103,146488,163],{"class":162},[103,146490,120],{"class":113},[103,146492,146493,146495,146497,146500,146502,146504],{"class":105,"line":1183},[103,146494,30405],{"class":162},[103,146496,114],{"class":113},[103,146498,146499],{"class":218},"\"年龄:\"",[103,146501,12425],{"class":113},[103,146503,763],{"class":162},[103,146505,120],{"class":113},[14,146507,146508],{},"多个内容用逗号隔开，默认中间加空格：",[94,146510,146512],{"className":30368,"code":146511,"language":30370,"meta":24,"style":24},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[100,146513,146514,146524,146534],{"__ignoreMap":24},[103,146515,146516,146519,146521],{"class":105,"line":106},[103,146517,146518],{"class":113},"name ",[103,146520,159],{"class":109},[103,146522,146523],{"class":218}," \"张三\"\n",[103,146525,146526,146529,146531],{"class":105,"line":25},[103,146527,146528],{"class":113},"age ",[103,146530,159],{"class":109},[103,146532,146533],{"class":162}," 18\n",[103,146535,146536,146538,146540,146543,146546,146548],{"class":105,"line":1168},[103,146537,30405],{"class":162},[103,146539,114],{"class":113},[103,146541,146542],{"class":218},"\"姓名:\"",[103,146544,146545],{"class":113},", name, ",[103,146547,146499],{"class":218},[103,146549,146550],{"class":113},", age)\n",[14,146552,146553],{},"修改分隔符：",[94,146555,146557],{"className":30368,"code":146556,"language":30370,"meta":24,"style":24},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[100,146558,146559],{"__ignoreMap":24},[103,146560,146561,146563,146565,146568,146570,146572,146574,146576,146578,146581,146583,146585],{"class":105,"line":106},[103,146562,30405],{"class":162},[103,146564,114],{"class":113},[103,146566,146567],{"class":218},"\"2024\"",[103,146569,12425],{"class":113},[103,146571,54306],{"class":218},[103,146573,12425],{"class":113},[103,146575,54306],{"class":218},[103,146577,12425],{"class":113},[103,146579,146580],{"class":5206},"sep",[103,146582,159],{"class":109},[103,146584,32473],{"class":218},[103,146586,120],{"class":113},[14,146588,146589],{},"修改结尾符：",[94,146591,146593],{"className":30368,"code":146592,"language":30370,"meta":24,"style":24},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[100,146594,146595,146613],{"__ignoreMap":24},[103,146596,146597,146599,146601,146603,146605,146607,146609,146611],{"class":105,"line":106},[103,146598,30405],{"class":162},[103,146600,114],{"class":113},[103,146602,5834],{"class":218},[103,146604,12425],{"class":113},[103,146606,45791],{"class":5206},[103,146608,159],{"class":109},[103,146610,4348],{"class":218},[103,146612,120],{"class":113},[103,146614,146615,146617,146619,146622],{"class":105,"line":25},[103,146616,30405],{"class":162},[103,146618,114],{"class":113},[103,146620,146621],{"class":218},"\"python\"",[103,146623,120],{"class":113},[45,146625,146627],{"id":146626},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146629,146630],{},"交互运行适合临时验证：",[94,146632,146634],{"className":30368,"code":146633,"language":30370,"meta":24,"style":24},">>> 10 * 3\n30\n",[100,146635,146636,146646],{"__ignoreMap":24},[103,146637,146638,146640,146642,146644],{"class":105,"line":106},[103,146639,145835],{"class":109},[103,146641,2027],{"class":162},[103,146643,6508],{"class":109},[103,146645,120026],{"class":162},[103,146647,146648],{"class":105,"line":25},[103,146649,146650],{"class":162},"30\n",[14,146652,146653],{},"脚本运行适合保存程序：",[94,146655,146657],{"className":30368,"code":146656,"language":30370,"meta":24,"style":24},"price = 8\ncount = 5\nprint(price * count)\n",[100,146658,146659,146669,146678],{"__ignoreMap":24},[103,146660,146661,146664,146666],{"class":105,"line":106},[103,146662,146663],{"class":113},"price ",[103,146665,159],{"class":109},[103,146667,146668],{"class":162}," 8\n",[103,146670,146671,146674,146676],{"class":105,"line":25},[103,146672,146673],{"class":113},"count ",[103,146675,159],{"class":109},[103,146677,54417],{"class":162},[103,146679,146680,146682,146685,146687],{"class":105,"line":1168},[103,146681,30405],{"class":162},[103,146683,146684],{"class":113},"(price ",[103,146686,568],{"class":109},[103,146688,146689],{"class":113}," count)\n",[14,146691,146692],{},"实际学习中推荐：",[57,146694,146695,146698,146703],{},[60,146696,146697],{},"临时试一个语法，用交互模式。",[60,146699,146700,146701,125965],{},"写完整练习，用 ",[100,146702,146334],{},[60,146704,146705],{},"写项目，用独立目录和虚拟环境。",[45,146707,146709],{"id":146708},"_110-常见错误","1.10 常见错误",[74,146711,146713],{"id":146712},"_1101-命令找不到","1.10.1 命令找不到",[94,146715,146718],{"className":146716,"code":146717,"language":5177,"meta":24},[5175],"python: command not found\n",[100,146719,146717],{"__ignoreMap":24},[14,146721,146722],{},"原因：",[57,146724,146725,146728,146731],{},[60,146726,146727],{},"没安装 Python。",[60,146729,146730],{},"PATH 没配置。",[60,146732,146733,146734,28375],{},"Linux\u002FmacOS 应该使用 ",[100,146735,100869],{},[74,146737,146739],{"id":146738},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146741,146742],{},"不要把文件命名为：",[94,146744,146747],{"className":146745,"code":146746,"language":5177,"meta":24},[5175],"random.py\njson.py\ntime.py\nrequests.py\n",[100,146748,146746],{"__ignoreMap":24},[14,146750,146751],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[74,146753,146755],{"id":146754},"_1103-中文乱码","1.10.3 中文乱码",[14,146757,146758],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146760,146761],{},"如果读写文件出现乱码，要明确指定编码：",[94,146763,146765],{"className":30368,"code":146764,"language":30370,"meta":24,"style":24},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[100,146766,146767,146801],{"__ignoreMap":24},[103,146768,146769,146771,146774,146776,146779,146781,146784,146786,146789,146791,146794,146796,146798],{"class":105,"line":106},[103,146770,107823],{"class":109},[103,146772,146773],{"class":162}," open",[103,146775,114],{"class":113},[103,146777,146778],{"class":218},"\"data.txt\"",[103,146780,12425],{"class":113},[103,146782,146783],{"class":218},"\"r\"",[103,146785,12425],{"class":113},[103,146787,146788],{"class":5206},"encoding",[103,146790,159],{"class":109},[103,146792,146793],{"class":218},"\"utf-8\"",[103,146795,13704],{"class":113},[103,146797,31373],{"class":109},[103,146799,146800],{"class":113}," f:\n",[103,146802,146803,146806,146808],{"class":105,"line":25},[103,146804,146805],{"class":113},"    content ",[103,146807,159],{"class":109},[103,146809,146810],{"class":113}," f.read()\n",[45,146812,146814],{"id":146813},"_111-本章练习","1.11 本章练习",[57,146816,146817,146820,146826],{},[60,146818,146819],{},"安装 Python，并在终端输出版本号。",[60,146821,146822,146823,146825],{},"新建 ",[100,146824,146380],{},"，输出自己的姓名、年龄、学习目标。",[60,146827,104356,146828,146830],{},[100,146829,146454],{}," 输出下面格式：",[94,146832,146835],{"className":146833,"code":146834,"language":5177,"meta":24},[5175],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[100,146836,146834],{"__ignoreMap":24},[57,146838,146839],{"start":1183},[60,146840,104356,146841,146843],{},[100,146842,146580],{}," 输出日期：",[94,146845,146848],{"className":146846,"code":146847,"language":5177,"meta":24},[5175],"2024-10-10\n",[100,146849,146847],{"__ignoreMap":24},[57,146851,146852],{"start":1189},[60,146853,104356,146854,146856,146857,146859],{},[100,146855,45791],{}," 让两次 ",[100,146858,146454],{}," 输出在同一行。",[5116,146861,146862],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":24,"searchDepth":25,"depth":25,"links":146864},[146865,146866,146867,146872,146873,146874,146878,146879,146880,146881,146886],{"id":145747,"depth":25,"text":145748},{"id":145791,"depth":25,"text":145792},{"id":145892,"depth":25,"text":145893,"children":146868},[146869,146870,146871],{"id":145896,"depth":1168,"text":145897},{"id":145951,"depth":1168,"text":145952},{"id":145987,"depth":1168,"text":145988},{"id":146060,"depth":25,"text":146061},{"id":146205,"depth":25,"text":146206},{"id":146310,"depth":25,"text":146311,"children":146875},[146876,146877],{"id":146314,"depth":1168,"text":146315},{"id":146343,"depth":1168,"text":146344},{"id":146373,"depth":25,"text":146374},{"id":146448,"depth":25,"text":146449},{"id":146626,"depth":25,"text":146627},{"id":146708,"depth":25,"text":146709,"children":146882},[146883,146884,146885],{"id":146712,"depth":1168,"text":146713},{"id":146738,"depth":1168,"text":146739},{"id":146754,"depth":1168,"text":146755},{"id":146813,"depth":25,"text":146814},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145739,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146893,"title":146894,"body":146895,"description":27,"extension":28,"meta":149299,"navigation":30,"path":149300,"seo":149301,"stem":149302,"__hash__":149303},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146896,"toc":149284},[146897,146900,146904,146907,146910,146927,146930,146972,146975,146979,146982,146985,147022,147025,147059,147062,147154,147158,147172,147175,147202,147205,147209,147312,147319,147322,147339,147343,147350,147539,147542,147615,147619,147622,147706,147709,147741,147745,147949,147952,147956,147962,148064,148067,148323,148327,148330,148333,148347,148349,148535,148539,148901,148907,148911,148914,149038,149041,149220,149223,149227,149260,149264,149281],[10,146898,146894],{"id":146899},"_10-json与pyecharts折线图",[45,146901,146903],{"id":146902},"_101-数据可视化","10.1 数据可视化",[14,146905,146906],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146908,146909],{},"常见图表：",[57,146911,146912,146915,146918,146921,146924],{},[60,146913,146914],{},"折线图：看趋势。",[60,146916,146917],{},"柱状图：看分类对比。",[60,146919,146920],{},"饼图：看占比。",[60,146922,146923],{},"地图：看地域分布。",[60,146925,146926],{},"散点图：看两个变量之间的关系。",[14,146928,146929],{},"Python 可视化常用库：",[251,146931,146932,146940],{},[254,146933,146934],{},[257,146935,146936,146938],{},[260,146937,146143],{},[260,146939,23730],{},[298,146941,146942,146949,146957,146964],{},[257,146943,146944,146946],{},[303,146945,146175],{},[303,146947,146948],{},"基础、经典、可定制",[257,146950,146951,146954],{},[303,146952,146953],{},"seaborn",[303,146955,146956],{},"统计图表更美观",[257,146958,146959,146961],{},[303,146960,146183],{},[303,146962,146963],{},"生成交互式网页图表",[257,146965,146966,146969],{},[303,146967,146968],{},"plotly",[303,146970,146971],{},"交互图表能力强",[14,146973,146974],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[45,146976,146978],{"id":146977},"_102-json回顾","10.2 JSON回顾",[14,146980,146981],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,146983,146984],{},"Python 字典：",[94,146986,146988],{"className":30368,"code":146987,"language":30370,"meta":24,"style":24},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[100,146989,146990,146998,147009,147018],{"__ignoreMap":24},[103,146991,146992,146994,146996],{"class":105,"line":106},[103,146993,101648],{"class":113},[103,146995,159],{"class":109},[103,146997,15562],{"class":113},[103,146999,147000,147003,147005,147007],{"class":105,"line":25},[103,147001,147002],{"class":218},"    \"name\"",[103,147004,51427],{"class":113},[103,147006,69259],{"class":218},[103,147008,31456],{"class":113},[103,147010,147011,147014,147016],{"class":105,"line":1168},[103,147012,147013],{"class":218},"    \"value\"",[103,147015,51427],{"class":113},[103,147017,97448],{"class":162},[103,147019,147020],{"class":105,"line":1183},[103,147021,1554],{"class":113},[14,147023,147024],{},"JSON 字符串：",[94,147026,147029],{"className":147027,"code":147028,"language":145774,"meta":24,"style":24},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[100,147030,147031,147035,147046,147055],{"__ignoreMap":24},[103,147032,147033],{"class":105,"line":106},[103,147034,1535],{"class":113},[103,147036,147037,147040,147042,147044],{"class":105,"line":25},[103,147038,147039],{"class":162},"  \"name\"",[103,147041,51427],{"class":113},[103,147043,69259],{"class":218},[103,147045,31456],{"class":113},[103,147047,147048,147051,147053],{"class":105,"line":1168},[103,147049,147050],{"class":162},"  \"value\"",[103,147052,51427],{"class":113},[103,147054,97448],{"class":162},[103,147056,147057],{"class":105,"line":1183},[103,147058,1554],{"class":113},[14,147060,147061],{},"Python 与 JSON 的转换：",[94,147063,147065],{"className":30368,"code":147064,"language":30370,"meta":24,"style":24},"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",[100,147066,147067,147074,147078,147103,147107,147126,147133,147137,147147],{"__ignoreMap":24},[103,147068,147069,147071],{"class":105,"line":106},[103,147070,30382],{"class":109},[103,147072,147073],{"class":113}," json\n",[103,147075,147076],{"class":105,"line":25},[103,147077,2389],{"emptyLinePlaceholder":30},[103,147079,147080,147082,147084,147086,147088,147090,147092,147094,147097,147099,147101],{"class":105,"line":1168},[103,147081,101648],{"class":113},[103,147083,159],{"class":109},[103,147085,4437],{"class":113},[103,147087,62669],{"class":218},[103,147089,51427],{"class":113},[103,147091,69259],{"class":218},[103,147093,12425],{"class":113},[103,147095,147096],{"class":218},"\"value\"",[103,147098,51427],{"class":113},[103,147100,424],{"class":162},[103,147102,1554],{"class":113},[103,147104,147105],{"class":105,"line":1183},[103,147106,2389],{"emptyLinePlaceholder":30},[103,147108,147109,147112,147114,147117,147120,147122,147124],{"class":105,"line":1189},[103,147110,147111],{"class":113},"json_text ",[103,147113,159],{"class":109},[103,147115,147116],{"class":113}," json.dumps(data, ",[103,147118,147119],{"class":5206},"ensure_ascii",[103,147121,159],{"class":109},[103,147123,33977],{"class":162},[103,147125,120],{"class":113},[103,147127,147128,147130],{"class":105,"line":1203},[103,147129,30405],{"class":162},[103,147131,147132],{"class":113},"(json_text)\n",[103,147134,147135],{"class":105,"line":1209},[103,147136,2389],{"emptyLinePlaceholder":30},[103,147138,147139,147142,147144],{"class":105,"line":1300},[103,147140,147141],{"class":113},"new_data ",[103,147143,159],{"class":109},[103,147145,147146],{"class":113}," json.loads(json_text)\n",[103,147148,147149,147151],{"class":105,"line":1306},[103,147150,30405],{"class":162},[103,147152,147153],{"class":113},"(new_data)\n",[45,147155,147157],{"id":147156},"_103-安装pyecharts","10.3 安装pyecharts",[94,147159,147161],{"className":23812,"code":147160,"language":23814,"meta":24,"style":24},"pip install pyecharts\n",[100,147162,147163],{"__ignoreMap":24},[103,147164,147165,147167,147169],{"class":105,"line":106},[103,147166,23821],{"class":1952},[103,147168,23824],{"class":218},[103,147170,147171],{"class":218}," pyecharts\n",[14,147173,147174],{},"验证：",[94,147176,147178],{"className":30368,"code":147177,"language":30370,"meta":24,"style":24},"import pyecharts\n\nprint(pyecharts.__version__)\n",[100,147179,147180,147186,147190],{"__ignoreMap":24},[103,147181,147182,147184],{"class":105,"line":106},[103,147183,30382],{"class":109},[103,147185,147171],{"class":113},[103,147187,147188],{"class":105,"line":25},[103,147189,2389],{"emptyLinePlaceholder":30},[103,147191,147192,147194,147197,147200],{"class":105,"line":1168},[103,147193,30405],{"class":162},[103,147195,147196],{"class":113},"(pyecharts.",[103,147198,147199],{"class":162},"__version__",[103,147201,120],{"class":113},[14,147203,147204],{},"如果使用虚拟环境，要先激活环境再安装。",[45,147206,147208],{"id":147207},"_104-第一个折线图","10.4 第一个折线图",[94,147210,147212],{"className":30368,"code":147211,"language":30370,"meta":24,"style":24},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[100,147213,147214,147226,147230,147240,147270,147302],{"__ignoreMap":24},[103,147215,147216,147218,147221,147223],{"class":105,"line":106},[103,147217,30727],{"class":109},[103,147219,147220],{"class":113}," pyecharts.charts ",[103,147222,30382],{"class":109},[103,147224,147225],{"class":113}," Line\n",[103,147227,147228],{"class":105,"line":25},[103,147229,2389],{"emptyLinePlaceholder":30},[103,147231,147232,147235,147237],{"class":105,"line":1168},[103,147233,147234],{"class":113},"line ",[103,147236,159],{"class":109},[103,147238,147239],{"class":113}," Line()\n",[103,147241,147242,147245,147248,147250,147253,147255,147258,147260,147263,147265,147268],{"class":105,"line":1183},[103,147243,147244],{"class":113},"line.add_xaxis([",[103,147246,147247],{"class":218},"\"周一\"",[103,147249,12425],{"class":113},[103,147251,147252],{"class":218},"\"周二\"",[103,147254,12425],{"class":113},[103,147256,147257],{"class":218},"\"周三\"",[103,147259,12425],{"class":113},[103,147261,147262],{"class":218},"\"周四\"",[103,147264,12425],{"class":113},[103,147266,147267],{"class":218},"\"周五\"",[103,147269,4646],{"class":113},[103,147271,147272,147275,147278,147280,147282,147284,147286,147288,147290,147292,147295,147297,147300],{"class":105,"line":1189},[103,147273,147274],{"class":113},"line.add_yaxis(",[103,147276,147277],{"class":218},"\"销售额\"",[103,147279,77508],{"class":113},[103,147281,424],{"class":162},[103,147283,12425],{"class":113},[103,147285,930],{"class":162},[103,147287,12425],{"class":113},[103,147289,975],{"class":162},[103,147291,12425],{"class":113},[103,147293,147294],{"class":162},"150",[103,147296,12425],{"class":113},[103,147298,147299],{"class":162},"180",[103,147301,4646],{"class":113},[103,147303,147304,147307,147310],{"class":105,"line":1203},[103,147305,147306],{"class":113},"line.render(",[103,147308,147309],{"class":218},"\"line.html\"",[103,147311,120],{"class":113},[14,147313,147314,147315,147318],{},"运行后会生成 ",[100,147316,147317],{},"line.html","，用浏览器打开即可看到图表。",[14,147320,147321],{},"核心步骤：",[57,147323,147324,147327,147330,147333,147336],{},[60,147325,147326],{},"导入图表类。",[60,147328,147329],{},"创建图表对象。",[60,147331,147332],{},"添加 x 轴数据。",[60,147334,147335],{},"添加 y 轴数据。",[60,147337,147338],{},"渲染为 HTML。",[45,147340,147342],{"id":147341},"_105-全局配置","10.5 全局配置",[14,147344,147345,147346,147349],{},"常用配置在 ",[100,147347,147348],{},"pyecharts.options"," 中。",[94,147351,147353],{"className":30368,"code":147352,"language":30370,"meta":24,"style":24},"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",[100,147354,147355,147372,147382,147386,147394,147418,147446,147451,147470,147489,147507,147527,147531],{"__ignoreMap":24},[103,147356,147357,147359,147362,147364,147367,147369],{"class":105,"line":106},[103,147358,30727],{"class":109},[103,147360,147361],{"class":113}," pyecharts ",[103,147363,30382],{"class":109},[103,147365,147366],{"class":113}," options ",[103,147368,31373],{"class":109},[103,147370,147371],{"class":113}," opts\n",[103,147373,147374,147376,147378,147380],{"class":105,"line":25},[103,147375,30727],{"class":109},[103,147377,147220],{"class":113},[103,147379,30382],{"class":109},[103,147381,147225],{"class":113},[103,147383,147384],{"class":105,"line":1168},[103,147385,2389],{"emptyLinePlaceholder":30},[103,147387,147388,147390,147392],{"class":105,"line":1183},[103,147389,147234],{"class":113},[103,147391,159],{"class":109},[103,147393,147239],{"class":113},[103,147395,147396,147398,147400,147402,147404,147406,147408,147410,147412,147414,147416],{"class":105,"line":1189},[103,147397,147244],{"class":113},[103,147399,147247],{"class":218},[103,147401,12425],{"class":113},[103,147403,147252],{"class":218},[103,147405,12425],{"class":113},[103,147407,147257],{"class":218},[103,147409,12425],{"class":113},[103,147411,147262],{"class":218},[103,147413,12425],{"class":113},[103,147415,147267],{"class":218},[103,147417,4646],{"class":113},[103,147419,147420,147422,147424,147426,147428,147430,147432,147434,147436,147438,147440,147442,147444],{"class":105,"line":1203},[103,147421,147274],{"class":113},[103,147423,147277],{"class":218},[103,147425,77508],{"class":113},[103,147427,424],{"class":162},[103,147429,12425],{"class":113},[103,147431,930],{"class":162},[103,147433,12425],{"class":113},[103,147435,975],{"class":162},[103,147437,12425],{"class":113},[103,147439,147294],{"class":162},[103,147441,12425],{"class":113},[103,147443,147299],{"class":162},[103,147445,4646],{"class":113},[103,147447,147448],{"class":105,"line":1209},[103,147449,147450],{"class":113},"line.set_global_opts(\n",[103,147452,147453,147456,147458,147461,147463,147465,147468],{"class":105,"line":1300},[103,147454,147455],{"class":5206},"    title_opts",[103,147457,159],{"class":109},[103,147459,147460],{"class":113},"opts.TitleOpts(",[103,147462,51397],{"class":5206},[103,147464,159],{"class":109},[103,147466,147467],{"class":218},"\"一周销售额\"",[103,147469,38037],{"class":113},[103,147471,147472,147475,147477,147480,147482,147484,147487],{"class":105,"line":1306},[103,147473,147474],{"class":5206},"    xaxis_opts",[103,147476,159],{"class":109},[103,147478,147479],{"class":113},"opts.AxisOpts(",[103,147481,79800],{"class":5206},[103,147483,159],{"class":109},[103,147485,147486],{"class":218},"\"日期\"",[103,147488,38037],{"class":113},[103,147490,147491,147494,147496,147498,147500,147502,147505],{"class":105,"line":1318},[103,147492,147493],{"class":5206},"    yaxis_opts",[103,147495,159],{"class":109},[103,147497,147479],{"class":113},[103,147499,79800],{"class":5206},[103,147501,159],{"class":109},[103,147503,147504],{"class":218},"\"金额\"",[103,147506,38037],{"class":113},[103,147508,147509,147512,147514,147517,147520,147522,147525],{"class":105,"line":1601},[103,147510,147511],{"class":5206},"    tooltip_opts",[103,147513,159],{"class":109},[103,147515,147516],{"class":113},"opts.TooltipOpts(",[103,147518,147519],{"class":5206},"trigger",[103,147521,159],{"class":109},[103,147523,147524],{"class":218},"\"axis\"",[103,147526,38037],{"class":113},[103,147528,147529],{"class":105,"line":1606},[103,147530,120],{"class":113},[103,147532,147533,147535,147537],{"class":105,"line":1612},[103,147534,147306],{"class":113},[103,147536,147309],{"class":218},[103,147538,120],{"class":113},[14,147540,147541],{},"常见全局配置：",[251,147543,147544,147553],{},[254,147545,147546],{},[257,147547,147548,147551],{},[260,147549,147550],{},"配置",[260,147552,102686],{},[298,147554,147555,147565,147575,147585,147595,147605],{},[257,147556,147557,147562],{},[303,147558,147559],{},[100,147560,147561],{},"TitleOpts",[303,147563,147564],{},"标题",[257,147566,147567,147572],{},[303,147568,147569],{},[100,147570,147571],{},"LegendOpts",[303,147573,147574],{},"图例",[257,147576,147577,147582],{},[303,147578,147579],{},[100,147580,147581],{},"TooltipOpts",[303,147583,147584],{},"提示框",[257,147586,147587,147592],{},[303,147588,147589],{},[100,147590,147591],{},"AxisOpts",[303,147593,147594],{},"坐标轴",[257,147596,147597,147602],{},[303,147598,147599],{},[100,147600,147601],{},"VisualMapOpts",[303,147603,147604],{},"视觉映射",[257,147606,147607,147612],{},[303,147608,147609],{},[100,147610,147611],{},"DataZoomOpts",[303,147613,147614],{},"区域缩放",[45,147616,147618],{"id":147617},"_106-系列配置","10.6 系列配置",[14,147620,147621],{},"系列配置作用于某一组数据。",[94,147623,147625],{"className":30368,"code":147624,"language":30370,"meta":24,"style":24},"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",[100,147626,147627,147632,147643,147672,147683,147702],{"__ignoreMap":24},[103,147628,147629],{"class":105,"line":106},[103,147630,147631],{"class":113},"line.add_yaxis(\n",[103,147633,147634,147637,147639,147641],{"class":105,"line":25},[103,147635,147636],{"class":5206},"    series_name",[103,147638,159],{"class":109},[103,147640,147277],{"class":218},[103,147642,31456],{"class":113},[103,147644,147645,147648,147650,147652,147654,147656,147658,147660,147662,147664,147666,147668,147670],{"class":105,"line":1168},[103,147646,147647],{"class":5206},"    y_axis",[103,147649,159],{"class":109},[103,147651,1003],{"class":113},[103,147653,424],{"class":162},[103,147655,12425],{"class":113},[103,147657,930],{"class":162},[103,147659,12425],{"class":113},[103,147661,975],{"class":162},[103,147663,12425],{"class":113},[103,147665,147294],{"class":162},[103,147667,12425],{"class":113},[103,147669,147299],{"class":162},[103,147671,87826],{"class":113},[103,147673,147674,147677,147679,147681],{"class":105,"line":1183},[103,147675,147676],{"class":5206},"    is_smooth",[103,147678,159],{"class":109},[103,147680,31466],{"class":162},[103,147682,31456],{"class":113},[103,147684,147685,147688,147690,147693,147696,147698,147700],{"class":105,"line":1189},[103,147686,147687],{"class":5206},"    label_opts",[103,147689,159],{"class":109},[103,147691,147692],{"class":113},"opts.LabelOpts(",[103,147694,147695],{"class":5206},"is_show",[103,147697,159],{"class":109},[103,147699,31466],{"class":162},[103,147701,38037],{"class":113},[103,147703,147704],{"class":105,"line":1203},[103,147705,120],{"class":113},[14,147707,147708],{},"常用参数：",[57,147710,147711,147717,147723,147729,147735],{},[60,147712,147713,147716],{},[100,147714,147715],{},"series_name","：系列名称。",[60,147718,147719,147722],{},[100,147720,147721],{},"y_axis","：y 轴数据。",[60,147724,147725,147728],{},[100,147726,147727],{},"is_smooth","：是否平滑曲线。",[60,147730,147731,147734],{},[100,147732,147733],{},"label_opts","：标签配置。",[60,147736,147737,147740],{},[100,147738,147739],{},"symbol_size","：标记点大小。",[45,147742,147744],{"id":147743},"_107-多条折线","10.7 多条折线",[94,147746,147748],{"className":30368,"code":147747,"language":30370,"meta":24,"style":24},"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",[100,147749,147750,147764,147774,147778,147807,147811,147819,147824,147862,147899,147903,147920,147936,147940],{"__ignoreMap":24},[103,147751,147752,147754,147756,147758,147760,147762],{"class":105,"line":106},[103,147753,30727],{"class":109},[103,147755,147361],{"class":113},[103,147757,30382],{"class":109},[103,147759,147366],{"class":113},[103,147761,31373],{"class":109},[103,147763,147371],{"class":113},[103,147765,147766,147768,147770,147772],{"class":105,"line":25},[103,147767,30727],{"class":109},[103,147769,147220],{"class":113},[103,147771,30382],{"class":109},[103,147773,147225],{"class":113},[103,147775,147776],{"class":105,"line":1168},[103,147777,2389],{"emptyLinePlaceholder":30},[103,147779,147780,147783,147785,147787,147789,147791,147793,147795,147797,147799,147801,147803,147805],{"class":105,"line":1183},[103,147781,147782],{"class":113},"dates ",[103,147784,159],{"class":109},[103,147786,52216],{"class":113},[103,147788,147247],{"class":218},[103,147790,12425],{"class":113},[103,147792,147252],{"class":218},[103,147794,12425],{"class":113},[103,147796,147257],{"class":218},[103,147798,12425],{"class":113},[103,147800,147262],{"class":218},[103,147802,12425],{"class":113},[103,147804,147267],{"class":218},[103,147806,33236],{"class":113},[103,147808,147809],{"class":105,"line":1189},[103,147810,2389],{"emptyLinePlaceholder":30},[103,147812,147813,147815,147817],{"class":105,"line":1203},[103,147814,147234],{"class":113},[103,147816,159],{"class":109},[103,147818,147239],{"class":113},[103,147820,147821],{"class":105,"line":1209},[103,147822,147823],{"class":113},"line.add_xaxis(dates)\n",[103,147825,147826,147828,147831,147833,147835,147837,147840,147842,147844,147846,147848,147850,147852,147854,147856,147858,147860],{"class":105,"line":1300},[103,147827,147274],{"class":113},[103,147829,147830],{"class":218},"\"线上销售\"",[103,147832,77508],{"class":113},[103,147834,424],{"class":162},[103,147836,12425],{"class":113},[103,147838,147839],{"class":162},"130",[103,147841,12425],{"class":113},[103,147843,930],{"class":162},[103,147845,12425],{"class":113},[103,147847,21038],{"class":162},[103,147849,12425],{"class":113},[103,147851,1711],{"class":162},[103,147853,112192],{"class":113},[103,147855,147727],{"class":5206},[103,147857,159],{"class":109},[103,147859,31466],{"class":162},[103,147861,120],{"class":113},[103,147863,147864,147866,147869,147871,147873,147875,147877,147879,147881,147883,147885,147887,147889,147891,147893,147895,147897],{"class":105,"line":1306},[103,147865,147274],{"class":113},[103,147867,147868],{"class":218},"\"线下销售\"",[103,147870,77508],{"class":113},[103,147872,725],{"class":162},[103,147874,12425],{"class":113},[103,147876,975],{"class":162},[103,147878,12425],{"class":113},[103,147880,424],{"class":162},[103,147882,12425],{"class":113},[103,147884,930],{"class":162},[103,147886,12425],{"class":113},[103,147888,147294],{"class":162},[103,147890,112192],{"class":113},[103,147892,147727],{"class":5206},[103,147894,159],{"class":109},[103,147896,31466],{"class":162},[103,147898,120],{"class":113},[103,147900,147901],{"class":105,"line":1318},[103,147902,147450],{"class":113},[103,147904,147905,147907,147909,147911,147913,147915,147918],{"class":105,"line":1601},[103,147906,147455],{"class":5206},[103,147908,159],{"class":109},[103,147910,147460],{"class":113},[103,147912,51397],{"class":5206},[103,147914,159],{"class":109},[103,147916,147917],{"class":218},"\"线上线下销售趋势\"",[103,147919,38037],{"class":113},[103,147921,147922,147924,147926,147928,147930,147932,147934],{"class":105,"line":1606},[103,147923,147511],{"class":5206},[103,147925,159],{"class":109},[103,147927,147516],{"class":113},[103,147929,147519],{"class":5206},[103,147931,159],{"class":109},[103,147933,147524],{"class":218},[103,147935,38037],{"class":113},[103,147937,147938],{"class":105,"line":1612},[103,147939,120],{"class":113},[103,147941,147942,147944,147947],{"class":105,"line":1617},[103,147943,147306],{"class":113},[103,147945,147946],{"class":218},"\"sales.html\"",[103,147948,120],{"class":113},[14,147950,147951],{},"多条折线适合比较不同指标或不同地区。",[45,147953,147955],{"id":147954},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,147957,147958,147959,24608],{},"假设 ",[100,147960,147961],{},"sales.json",[94,147963,147965],{"className":147027,"code":147964,"language":145774,"meta":24,"style":24},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[100,147966,147967,147972,148004,148032,148060],{"__ignoreMap":24},[103,147968,147969],{"class":105,"line":106},[103,147970,147971],{"class":113},"[\n",[103,147973,147974,147977,147980,147982,147984,147986,147989,147991,147993,147995,147998,148000,148002],{"class":105,"line":25},[103,147975,147976],{"class":113},"  {",[103,147978,147979],{"class":162},"\"date\"",[103,147981,51427],{"class":113},[103,147983,147247],{"class":218},[103,147985,12425],{"class":113},[103,147987,147988],{"class":162},"\"online\"",[103,147990,51427],{"class":113},[103,147992,424],{"class":162},[103,147994,12425],{"class":113},[103,147996,147997],{"class":162},"\"offline\"",[103,147999,51427],{"class":113},[103,148001,725],{"class":162},[103,148003,4919],{"class":113},[103,148005,148006,148008,148010,148012,148014,148016,148018,148020,148022,148024,148026,148028,148030],{"class":105,"line":1168},[103,148007,147976],{"class":113},[103,148009,147979],{"class":162},[103,148011,51427],{"class":113},[103,148013,147252],{"class":218},[103,148015,12425],{"class":113},[103,148017,147988],{"class":162},[103,148019,51427],{"class":113},[103,148021,147839],{"class":162},[103,148023,12425],{"class":113},[103,148025,147997],{"class":162},[103,148027,51427],{"class":113},[103,148029,975],{"class":162},[103,148031,4919],{"class":113},[103,148033,148034,148036,148038,148040,148042,148044,148046,148048,148050,148052,148054,148056,148058],{"class":105,"line":1183},[103,148035,147976],{"class":113},[103,148037,147979],{"class":162},[103,148039,51427],{"class":113},[103,148041,147257],{"class":218},[103,148043,12425],{"class":113},[103,148045,147988],{"class":162},[103,148047,51427],{"class":113},[103,148049,930],{"class":162},[103,148051,12425],{"class":113},[103,148053,147997],{"class":162},[103,148055,51427],{"class":113},[103,148057,424],{"class":162},[103,148059,1554],{"class":113},[103,148061,148062],{"class":105,"line":1189},[103,148063,33236],{"class":113},[14,148065,148066],{},"读取并绘图：",[94,148068,148070],{"className":30368,"code":148069,"language":30370,"meta":24,"style":24},"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",[100,148071,148072,148078,148092,148102,148106,148138,148151,148155,148163,148172,148181,148185,148197,148206,148215,148224,148228,148236,148240,148257,148274,148278,148295,148311,148315],{"__ignoreMap":24},[103,148073,148074,148076],{"class":105,"line":106},[103,148075,30382],{"class":109},[103,148077,147073],{"class":113},[103,148079,148080,148082,148084,148086,148088,148090],{"class":105,"line":25},[103,148081,30727],{"class":109},[103,148083,147361],{"class":113},[103,148085,30382],{"class":109},[103,148087,147366],{"class":113},[103,148089,31373],{"class":109},[103,148091,147371],{"class":113},[103,148093,148094,148096,148098,148100],{"class":105,"line":1168},[103,148095,30727],{"class":109},[103,148097,147220],{"class":113},[103,148099,30382],{"class":109},[103,148101,147225],{"class":113},[103,148103,148104],{"class":105,"line":1183},[103,148105,2389],{"emptyLinePlaceholder":30},[103,148107,148108,148110,148112,148114,148117,148119,148121,148123,148125,148127,148129,148131,148133,148136],{"class":105,"line":1189},[103,148109,107823],{"class":109},[103,148111,146773],{"class":162},[103,148113,114],{"class":113},[103,148115,148116],{"class":218},"\"sales.json\"",[103,148118,12425],{"class":113},[103,148120,146783],{"class":218},[103,148122,12425],{"class":113},[103,148124,146788],{"class":5206},[103,148126,159],{"class":109},[103,148128,146793],{"class":218},[103,148130,13704],{"class":113},[103,148132,31373],{"class":109},[103,148134,148135],{"class":5206}," file",[103,148137,3728],{"class":113},[103,148139,148140,148142,148144,148147,148149],{"class":105,"line":1203},[103,148141,101411],{"class":113},[103,148143,159],{"class":109},[103,148145,148146],{"class":113}," json.load(",[103,148148,45344],{"class":5206},[103,148150,120],{"class":113},[103,148152,148153],{"class":105,"line":1209},[103,148154,2389],{"emptyLinePlaceholder":30},[103,148156,148157,148159,148161],{"class":105,"line":1300},[103,148158,147782],{"class":113},[103,148160,159],{"class":109},[103,148162,51828],{"class":113},[103,148164,148165,148168,148170],{"class":105,"line":1306},[103,148166,148167],{"class":113},"online_sales ",[103,148169,159],{"class":109},[103,148171,51828],{"class":113},[103,148173,148174,148177,148179],{"class":105,"line":1318},[103,148175,148176],{"class":113},"offline_sales ",[103,148178,159],{"class":109},[103,148180,51828],{"class":113},[103,148182,148183],{"class":105,"line":1601},[103,148184,2389],{"emptyLinePlaceholder":30},[103,148186,148187,148189,148192,148194],{"class":105,"line":1606},[103,148188,3014],{"class":109},[103,148190,148191],{"class":113}," item ",[103,148193,26033],{"class":109},[103,148195,148196],{"class":113}," data:\n",[103,148198,148199,148202,148204],{"class":105,"line":1612},[103,148200,148201],{"class":113},"    dates.append(item[",[103,148203,147979],{"class":218},[103,148205,4646],{"class":113},[103,148207,148208,148211,148213],{"class":105,"line":1617},[103,148209,148210],{"class":113},"    online_sales.append(item[",[103,148212,147988],{"class":218},[103,148214,4646],{"class":113},[103,148216,148217,148220,148222],{"class":105,"line":1631},[103,148218,148219],{"class":113},"    offline_sales.append(item[",[103,148221,147997],{"class":218},[103,148223,4646],{"class":113},[103,148225,148226],{"class":105,"line":1636},[103,148227,2389],{"emptyLinePlaceholder":30},[103,148229,148230,148232,148234],{"class":105,"line":1642},[103,148231,147234],{"class":113},[103,148233,159],{"class":109},[103,148235,147239],{"class":113},[103,148237,148238],{"class":105,"line":1663},[103,148239,147823],{"class":113},[103,148241,148242,148244,148246,148249,148251,148253,148255],{"class":105,"line":1668},[103,148243,147274],{"class":113},[103,148245,147830],{"class":218},[103,148247,148248],{"class":113},", online_sales, ",[103,148250,147727],{"class":5206},[103,148252,159],{"class":109},[103,148254,31466],{"class":162},[103,148256,120],{"class":113},[103,148258,148259,148261,148263,148266,148268,148270,148272],{"class":105,"line":1682},[103,148260,147274],{"class":113},[103,148262,147868],{"class":218},[103,148264,148265],{"class":113},", offline_sales, ",[103,148267,147727],{"class":5206},[103,148269,159],{"class":109},[103,148271,31466],{"class":162},[103,148273,120],{"class":113},[103,148275,148276],{"class":105,"line":1687},[103,148277,147450],{"class":113},[103,148279,148280,148282,148284,148286,148288,148290,148293],{"class":105,"line":1716},[103,148281,147455],{"class":5206},[103,148283,159],{"class":109},[103,148285,147460],{"class":113},[103,148287,51397],{"class":5206},[103,148289,159],{"class":109},[103,148291,148292],{"class":218},"\"销售趋势\"",[103,148294,38037],{"class":113},[103,148296,148297,148299,148301,148303,148305,148307,148309],{"class":105,"line":1721},[103,148298,147511],{"class":5206},[103,148300,159],{"class":109},[103,148302,147516],{"class":113},[103,148304,147519],{"class":5206},[103,148306,159],{"class":109},[103,148308,147524],{"class":218},[103,148310,38037],{"class":113},[103,148312,148313],{"class":105,"line":1738},[103,148314,120],{"class":113},[103,148316,148317,148319,148321],{"class":105,"line":1743},[103,148318,147306],{"class":113},[103,148320,147946],{"class":218},[103,148322,120],{"class":113},[45,148324,148326],{"id":148325},"_109-数据清洗","10.9 数据清洗",[14,148328,148329],{},"真实数据经常不整齐，需要清洗。",[14,148331,148332],{},"常见问题：",[57,148334,148335,148338,148341,148344],{},[60,148336,148337],{},"数字是字符串。",[60,148339,148340],{},"字段缺失。",[60,148342,148343],{},"空值。",[60,148345,148346],{},"日期格式不统一。",[14,148348,15125],{},[94,148350,148352],{"className":30368,"code":148351,"language":30370,"meta":24,"style":24},"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",[100,148353,148354,148363,148386,148406,148427,148431,148435,148443,148452,148456,148467,148481,148490,148495,148499,148507,148517,148521,148528],{"__ignoreMap":24},[103,148355,148356,148359,148361],{"class":105,"line":106},[103,148357,148358],{"class":113},"raw_data ",[103,148360,159],{"class":109},[103,148362,55437],{"class":113},[103,148364,148365,148368,148370,148372,148374,148376,148379,148381,148384],{"class":105,"line":25},[103,148366,148367],{"class":113},"    {",[103,148369,147979],{"class":218},[103,148371,51427],{"class":113},[103,148373,147247],{"class":218},[103,148375,12425],{"class":113},[103,148377,148378],{"class":218},"\"sales\"",[103,148380,51427],{"class":113},[103,148382,148383],{"class":218},"\"100\"",[103,148385,4919],{"class":113},[103,148387,148388,148390,148392,148394,148396,148398,148400,148402,148404],{"class":105,"line":1168},[103,148389,148367],{"class":113},[103,148391,147979],{"class":218},[103,148393,51427],{"class":113},[103,148395,147252],{"class":218},[103,148397,12425],{"class":113},[103,148399,148378],{"class":218},[103,148401,51427],{"class":113},[103,148403,7642],{"class":218},[103,148405,4919],{"class":113},[103,148407,148408,148410,148412,148414,148416,148418,148420,148422,148425],{"class":105,"line":1183},[103,148409,148367],{"class":113},[103,148411,147979],{"class":218},[103,148413,51427],{"class":113},[103,148415,147257],{"class":218},[103,148417,12425],{"class":113},[103,148419,148378],{"class":218},[103,148421,51427],{"class":113},[103,148423,148424],{"class":218},"\"120\"",[103,148426,4919],{"class":113},[103,148428,148429],{"class":105,"line":1189},[103,148430,33236],{"class":113},[103,148432,148433],{"class":105,"line":1203},[103,148434,2389],{"emptyLinePlaceholder":30},[103,148436,148437,148439,148441],{"class":105,"line":1209},[103,148438,147782],{"class":113},[103,148440,159],{"class":109},[103,148442,51828],{"class":113},[103,148444,148445,148448,148450],{"class":105,"line":1300},[103,148446,148447],{"class":113},"sales ",[103,148449,159],{"class":109},[103,148451,51828],{"class":113},[103,148453,148454],{"class":105,"line":1306},[103,148455,2389],{"emptyLinePlaceholder":30},[103,148457,148458,148460,148462,148464],{"class":105,"line":1318},[103,148459,3014],{"class":109},[103,148461,148191],{"class":113},[103,148463,26033],{"class":109},[103,148465,148466],{"class":113}," raw_data:\n",[103,148468,148469,148472,148474,148477,148479],{"class":105,"line":1601},[103,148470,148471],{"class":113},"    value ",[103,148473,159],{"class":109},[103,148475,148476],{"class":113}," item.get(",[103,148478,148378],{"class":218},[103,148480,120],{"class":113},[103,148482,148483,148485,148487],{"class":105,"line":1606},[103,148484,3090],{"class":109},[103,148486,38920],{"class":109},[103,148488,148489],{"class":113}," value:\n",[103,148491,148492],{"class":105,"line":1612},[103,148493,148494],{"class":109},"        continue\n",[103,148496,148497],{"class":105,"line":1617},[103,148498,2389],{"emptyLinePlaceholder":30},[103,148500,148501,148503,148505],{"class":105,"line":1631},[103,148502,148201],{"class":113},[103,148504,147979],{"class":218},[103,148506,4646],{"class":113},[103,148508,148509,148512,148514],{"class":105,"line":1636},[103,148510,148511],{"class":113},"    sales.append(",[103,148513,117],{"class":162},[103,148515,148516],{"class":113},"(value))\n",[103,148518,148519],{"class":105,"line":1642},[103,148520,2389],{"emptyLinePlaceholder":30},[103,148522,148523,148525],{"class":105,"line":1663},[103,148524,30405],{"class":162},[103,148526,148527],{"class":113},"(dates)\n",[103,148529,148530,148532],{"class":105,"line":1668},[103,148531,30405],{"class":162},[103,148533,148534],{"class":113},"(sales)\n",[45,148536,148538],{"id":148537},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[94,148540,148542],{"className":30368,"code":148541,"language":30370,"meta":24,"style":24},"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",[100,148543,148544,148558,148568,148572,148580,148601,148623,148645,148667,148689,148693,148697,148719,148740,148744,148752,148756,148760,148770,148779,148789,148805,148809,148813,148830,148846,148862,148878,148888,148892],{"__ignoreMap":24},[103,148545,148546,148548,148550,148552,148554,148556],{"class":105,"line":106},[103,148547,30727],{"class":109},[103,148549,147361],{"class":113},[103,148551,30382],{"class":109},[103,148553,147366],{"class":113},[103,148555,31373],{"class":109},[103,148557,147371],{"class":113},[103,148559,148560,148562,148564,148566],{"class":105,"line":25},[103,148561,30727],{"class":109},[103,148563,147220],{"class":113},[103,148565,30382],{"class":109},[103,148567,147225],{"class":113},[103,148569,148570],{"class":105,"line":1168},[103,148571,2389],{"emptyLinePlaceholder":30},[103,148573,148574,148576,148578],{"class":105,"line":1183},[103,148575,148447],{"class":113},[103,148577,159],{"class":109},[103,148579,55437],{"class":113},[103,148581,148582,148584,148586,148588,148591,148593,148595,148597,148599],{"class":105,"line":1189},[103,148583,148367],{"class":113},[103,148585,147979],{"class":218},[103,148587,51427],{"class":113},[103,148589,148590],{"class":218},"\"2024-10-01\"",[103,148592,12425],{"class":113},[103,148594,84074],{"class":218},[103,148596,51427],{"class":113},[103,148598,92013],{"class":162},[103,148600,4919],{"class":113},[103,148602,148603,148605,148607,148609,148612,148614,148616,148618,148621],{"class":105,"line":1203},[103,148604,148367],{"class":113},[103,148606,147979],{"class":218},[103,148608,51427],{"class":113},[103,148610,148611],{"class":218},"\"2024-10-02\"",[103,148613,12425],{"class":113},[103,148615,84074],{"class":218},[103,148617,51427],{"class":113},[103,148619,148620],{"class":162},"1800",[103,148622,4919],{"class":113},[103,148624,148625,148627,148629,148631,148634,148636,148638,148640,148643],{"class":105,"line":1209},[103,148626,148367],{"class":113},[103,148628,147979],{"class":218},[103,148630,51427],{"class":113},[103,148632,148633],{"class":218},"\"2024-10-03\"",[103,148635,12425],{"class":113},[103,148637,84074],{"class":218},[103,148639,51427],{"class":113},[103,148641,148642],{"class":162},"1500",[103,148644,4919],{"class":113},[103,148646,148647,148649,148651,148653,148656,148658,148660,148662,148665],{"class":105,"line":1300},[103,148648,148367],{"class":113},[103,148650,147979],{"class":218},[103,148652,51427],{"class":113},[103,148654,148655],{"class":218},"\"2024-10-04\"",[103,148657,12425],{"class":113},[103,148659,84074],{"class":218},[103,148661,51427],{"class":113},[103,148663,148664],{"class":162},"2100",[103,148666,4919],{"class":113},[103,148668,148669,148671,148673,148675,148678,148680,148682,148684,148687],{"class":105,"line":1306},[103,148670,148367],{"class":113},[103,148672,147979],{"class":218},[103,148674,51427],{"class":113},[103,148676,148677],{"class":218},"\"2024-10-05\"",[103,148679,12425],{"class":113},[103,148681,84074],{"class":218},[103,148683,51427],{"class":113},[103,148685,148686],{"class":162},"2600",[103,148688,4919],{"class":113},[103,148690,148691],{"class":105,"line":1318},[103,148692,33236],{"class":113},[103,148694,148695],{"class":105,"line":1601},[103,148696,2389],{"emptyLinePlaceholder":30},[103,148698,148699,148701,148703,148706,148708,148710,148712,148714,148716],{"class":105,"line":1606},[103,148700,147782],{"class":113},[103,148702,159],{"class":109},[103,148704,148705],{"class":113}," [item[",[103,148707,147979],{"class":218},[103,148709,4432],{"class":113},[103,148711,3014],{"class":109},[103,148713,148191],{"class":113},[103,148715,26033],{"class":109},[103,148717,148718],{"class":113}," sales]\n",[103,148720,148721,148724,148726,148728,148730,148732,148734,148736,148738],{"class":105,"line":1612},[103,148722,148723],{"class":113},"amounts ",[103,148725,159],{"class":109},[103,148727,148705],{"class":113},[103,148729,84074],{"class":218},[103,148731,4432],{"class":113},[103,148733,3014],{"class":109},[103,148735,148191],{"class":113},[103,148737,26033],{"class":109},[103,148739,148718],{"class":113},[103,148741,148742],{"class":105,"line":1617},[103,148743,2389],{"emptyLinePlaceholder":30},[103,148745,148746,148748,148750],{"class":105,"line":1631},[103,148747,147234],{"class":113},[103,148749,159],{"class":109},[103,148751,147239],{"class":113},[103,148753,148754],{"class":105,"line":1636},[103,148755,147823],{"class":113},[103,148757,148758],{"class":105,"line":1642},[103,148759,147631],{"class":113},[103,148761,148762,148764,148766,148768],{"class":105,"line":1663},[103,148763,147636],{"class":5206},[103,148765,159],{"class":109},[103,148767,147277],{"class":218},[103,148769,31456],{"class":113},[103,148771,148772,148774,148776],{"class":105,"line":1668},[103,148773,147647],{"class":5206},[103,148775,159],{"class":109},[103,148777,148778],{"class":113},"amounts,\n",[103,148780,148781,148783,148785,148787],{"class":105,"line":1682},[103,148782,147676],{"class":5206},[103,148784,159],{"class":109},[103,148786,31466],{"class":162},[103,148788,31456],{"class":113},[103,148790,148791,148793,148795,148797,148799,148801,148803],{"class":105,"line":1687},[103,148792,147687],{"class":5206},[103,148794,159],{"class":109},[103,148796,147692],{"class":113},[103,148798,147695],{"class":5206},[103,148800,159],{"class":109},[103,148802,31466],{"class":162},[103,148804,38037],{"class":113},[103,148806,148807],{"class":105,"line":1716},[103,148808,120],{"class":113},[103,148810,148811],{"class":105,"line":1721},[103,148812,147450],{"class":113},[103,148814,148815,148817,148819,148821,148823,148825,148828],{"class":105,"line":1738},[103,148816,147455],{"class":5206},[103,148818,159],{"class":109},[103,148820,147460],{"class":113},[103,148822,51397],{"class":5206},[103,148824,159],{"class":109},[103,148826,148827],{"class":218},"\"每日销售额\"",[103,148829,38037],{"class":113},[103,148831,148832,148834,148836,148838,148840,148842,148844],{"class":105,"line":1743},[103,148833,147474],{"class":5206},[103,148835,159],{"class":109},[103,148837,147479],{"class":113},[103,148839,79800],{"class":5206},[103,148841,159],{"class":109},[103,148843,147486],{"class":218},[103,148845,38037],{"class":113},[103,148847,148848,148850,148852,148854,148856,148858,148860],{"class":105,"line":1748},[103,148849,147493],{"class":5206},[103,148851,159],{"class":109},[103,148853,147479],{"class":113},[103,148855,79800],{"class":5206},[103,148857,159],{"class":109},[103,148859,147504],{"class":218},[103,148861,38037],{"class":113},[103,148863,148864,148866,148868,148870,148872,148874,148876],{"class":105,"line":1753},[103,148865,147511],{"class":5206},[103,148867,159],{"class":109},[103,148869,147516],{"class":113},[103,148871,147519],{"class":5206},[103,148873,159],{"class":109},[103,148875,147524],{"class":218},[103,148877,38037],{"class":113},[103,148879,148880,148883,148885],{"class":105,"line":1767},[103,148881,148882],{"class":5206},"    datazoom_opts",[103,148884,159],{"class":109},[103,148886,148887],{"class":113},"[opts.DataZoomOpts()],\n",[103,148889,148890],{"class":105,"line":1772},[103,148891,120],{"class":113},[103,148893,148894,148896,148899],{"class":105,"line":2566},[103,148895,147306],{"class":113},[103,148897,148898],{"class":218},"\"daily_sales.html\"",[103,148900,120],{"class":113},[14,148902,148903,148906],{},[100,148904,148905],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[45,148908,148910],{"id":148909},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148912,148913],{},"如果数据结构如下：",[94,148915,148917],{"className":30368,"code":148916,"language":30370,"meta":24,"style":24},"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",[100,148918,148919,148927,148935,148957,148978,148983,148990,149010,149030,149034],{"__ignoreMap":24},[103,148920,148921,148923,148925],{"class":105,"line":106},[103,148922,101648],{"class":113},[103,148924,159],{"class":109},[103,148926,15562],{"class":113},[103,148928,148929,148932],{"class":105,"line":25},[103,148930,148931],{"class":218},"    \"北京\"",[103,148933,148934],{"class":113},": [\n",[103,148936,148937,148939,148941,148943,148946,148948,148951,148953,148955],{"class":105,"line":1168},[103,148938,4906],{"class":113},[103,148940,147979],{"class":218},[103,148942,51427],{"class":113},[103,148944,148945],{"class":218},"\"2024-01-01\"",[103,148947,12425],{"class":113},[103,148949,148950],{"class":218},"\"confirm\"",[103,148952,51427],{"class":113},[103,148954,559],{"class":162},[103,148956,4919],{"class":113},[103,148958,148959,148961,148963,148965,148968,148970,148972,148974,148976],{"class":105,"line":1183},[103,148960,4906],{"class":113},[103,148962,147979],{"class":218},[103,148964,51427],{"class":113},[103,148966,148967],{"class":218},"\"2024-01-02\"",[103,148969,12425],{"class":113},[103,148971,148950],{"class":218},[103,148973,51427],{"class":113},[103,148975,611],{"class":162},[103,148977,4919],{"class":113},[103,148979,148980],{"class":105,"line":1189},[103,148981,148982],{"class":113},"    ],\n",[103,148984,148985,148988],{"class":105,"line":1203},[103,148986,148987],{"class":218},"    \"上海\"",[103,148989,148934],{"class":113},[103,148991,148992,148994,148996,148998,149000,149002,149004,149006,149008],{"class":105,"line":1209},[103,148993,4906],{"class":113},[103,148995,147979],{"class":218},[103,148997,51427],{"class":113},[103,148999,148945],{"class":218},[103,149001,12425],{"class":113},[103,149003,148950],{"class":218},[103,149005,51427],{"class":113},[103,149007,508],{"class":162},[103,149009,4919],{"class":113},[103,149011,149012,149014,149016,149018,149020,149022,149024,149026,149028],{"class":105,"line":1300},[103,149013,4906],{"class":113},[103,149015,147979],{"class":218},[103,149017,51427],{"class":113},[103,149019,148967],{"class":218},[103,149021,12425],{"class":113},[103,149023,148950],{"class":218},[103,149025,51427],{"class":113},[103,149027,636],{"class":162},[103,149029,4919],{"class":113},[103,149031,149032],{"class":105,"line":1306},[103,149033,148982],{"class":113},[103,149035,149036],{"class":105,"line":1318},[103,149037,1554],{"class":113},[14,149039,149040],{},"绘制多地区趋势：",[94,149042,149044],{"className":30368,"code":149043,"language":30370,"meta":24,"style":24},"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",[100,149045,149046,149060,149070,149074,149099,149103,149111,149115,149119,149131,149153,149166,149170,149174,149191,149207,149211],{"__ignoreMap":24},[103,149047,149048,149050,149052,149054,149056,149058],{"class":105,"line":106},[103,149049,30727],{"class":109},[103,149051,147361],{"class":113},[103,149053,30382],{"class":109},[103,149055,147366],{"class":113},[103,149057,31373],{"class":109},[103,149059,147371],{"class":113},[103,149061,149062,149064,149066,149068],{"class":105,"line":25},[103,149063,30727],{"class":109},[103,149065,147220],{"class":113},[103,149067,30382],{"class":109},[103,149069,147225],{"class":113},[103,149071,149072],{"class":105,"line":1168},[103,149073,2389],{"emptyLinePlaceholder":30},[103,149075,149076,149078,149080,149082,149084,149086,149088,149090,149092,149095,149097],{"class":105,"line":1183},[103,149077,147782],{"class":113},[103,149079,159],{"class":109},[103,149081,148705],{"class":113},[103,149083,147979],{"class":218},[103,149085,4432],{"class":113},[103,149087,3014],{"class":109},[103,149089,148191],{"class":113},[103,149091,26033],{"class":109},[103,149093,149094],{"class":113}," data[",[103,149096,69259],{"class":218},[103,149098,77517],{"class":113},[103,149100,149101],{"class":105,"line":1189},[103,149102,2389],{"emptyLinePlaceholder":30},[103,149104,149105,149107,149109],{"class":105,"line":1203},[103,149106,147234],{"class":113},[103,149108,159],{"class":109},[103,149110,147239],{"class":113},[103,149112,149113],{"class":105,"line":1209},[103,149114,147823],{"class":113},[103,149116,149117],{"class":105,"line":1300},[103,149118,2389],{"emptyLinePlaceholder":30},[103,149120,149121,149123,149126,149128],{"class":105,"line":1306},[103,149122,3014],{"class":109},[103,149124,149125],{"class":113}," city, records ",[103,149127,26033],{"class":109},[103,149129,149130],{"class":113}," data.items():\n",[103,149132,149133,149136,149138,149140,149142,149144,149146,149148,149150],{"class":105,"line":1318},[103,149134,149135],{"class":113},"    values ",[103,149137,159],{"class":109},[103,149139,148705],{"class":113},[103,149141,148950],{"class":218},[103,149143,4432],{"class":113},[103,149145,3014],{"class":109},[103,149147,148191],{"class":113},[103,149149,26033],{"class":109},[103,149151,149152],{"class":113}," records]\n",[103,149154,149155,149158,149160,149162,149164],{"class":105,"line":1601},[103,149156,149157],{"class":113},"    line.add_yaxis(city, values, ",[103,149159,147727],{"class":5206},[103,149161,159],{"class":109},[103,149163,31466],{"class":162},[103,149165,120],{"class":113},[103,149167,149168],{"class":105,"line":1606},[103,149169,2389],{"emptyLinePlaceholder":30},[103,149171,149172],{"class":105,"line":1612},[103,149173,147450],{"class":113},[103,149175,149176,149178,149180,149182,149184,149186,149189],{"class":105,"line":1617},[103,149177,147455],{"class":5206},[103,149179,159],{"class":109},[103,149181,147460],{"class":113},[103,149183,51397],{"class":5206},[103,149185,159],{"class":109},[103,149187,149188],{"class":218},"\"多地区趋势图\"",[103,149190,38037],{"class":113},[103,149192,149193,149195,149197,149199,149201,149203,149205],{"class":105,"line":1631},[103,149194,147511],{"class":5206},[103,149196,159],{"class":109},[103,149198,147516],{"class":113},[103,149200,147519],{"class":5206},[103,149202,159],{"class":109},[103,149204,147524],{"class":218},[103,149206,38037],{"class":113},[103,149208,149209],{"class":105,"line":1636},[103,149210,120],{"class":113},[103,149212,149213,149215,149218],{"class":105,"line":1642},[103,149214,147306],{"class":113},[103,149216,149217],{"class":218},"\"trend.html\"",[103,149219,120],{"class":113},[14,149221,149222],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[45,149224,149226],{"id":149225},"_1012-易错点","10.12 易错点",[57,149228,149229,149235,149241,149251,149257],{},[60,149230,149231,149234],{},[100,149232,149233],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[60,149236,149237,149240],{},[100,149238,149239],{},"render()"," 生成的是 HTML，不是图片。",[60,149242,149243,149244,149247,149248,28375],{},"JSON 字符串用 ",[100,149245,149246],{},"json.loads()","，JSON 文件用 ",[100,149249,149250],{},"json.load()",[60,149252,149253,149254,28375],{},"中文 JSON 保存时加 ",[100,149255,149256],{},"ensure_ascii=False",[60,149258,149259],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[45,149261,149263],{"id":149262},"_1013-本章练习","10.13 本章练习",[57,149265,149266,149269,149272,149275,149278],{},[60,149267,149268],{},"安装 pyecharts 并生成第一个折线图。",[60,149270,149271],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[60,149273,149274],{},"绘制两条折线，对比线上和线下销售额。",[60,149276,149277],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[60,149279,149280],{},"对含有空值的销售数据进行清洗后再绘图。",[5116,149282,149283],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":24,"searchDepth":25,"depth":25,"links":149285},[149286,149287,149288,149289,149290,149291,149292,149293,149294,149295,149296,149297,149298],{"id":146902,"depth":25,"text":146903},{"id":146977,"depth":25,"text":146978},{"id":147156,"depth":25,"text":147157},{"id":147207,"depth":25,"text":147208},{"id":147341,"depth":25,"text":147342},{"id":147617,"depth":25,"text":147618},{"id":147743,"depth":25,"text":147744},{"id":147954,"depth":25,"text":147955},{"id":148325,"depth":25,"text":148326},{"id":148537,"depth":25,"text":148538},{"id":148909,"depth":25,"text":148910},{"id":149225,"depth":25,"text":149226},{"id":149262,"depth":25,"text":149263},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146894,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149305,"title":149306,"body":149307,"description":27,"extension":28,"meta":151667,"navigation":30,"path":151668,"seo":151669,"stem":151670,"__hash__":151671},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149308,"toc":151644},[149309,149312,149316,149319,149322,149398,149401,149492,149495,149499,149502,149546,149559,149563,149566,149633,149636,149640,149643,149727,149735,149739,149744,149885,149888,149899,149905,149911,150025,150029,150032,150035,150288,150291,150295,150298,150402,150405,150409,150560,150564,150571,150684,150688,150691,150797,150800,150804,150807,150838,150841,150946,150949,150953,150957,150967,151035,151039,151046,151110,151113,151117,151123,151219,151228,151232,151556,151565,151569,151597,151601,151641],[10,149310,149306],{"id":149311},"_11-面向对象基础",[45,149313,149315],{"id":149314},"_111-什么是面向对象","11.1 什么是面向对象",[14,149317,149318],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149320,149321],{},"面向过程：",[94,149323,149325],{"className":30368,"code":149324,"language":30370,"meta":24,"style":24},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[100,149326,149327,149336,149344,149348,149358,149389,149393],{"__ignoreMap":24},[103,149328,149329,149331,149333],{"class":105,"line":106},[103,149330,146518],{"class":113},[103,149332,159],{"class":109},[103,149334,149335],{"class":218}," \"小明\"\n",[103,149337,149338,149340,149342],{"class":105,"line":25},[103,149339,146528],{"class":113},[103,149341,159],{"class":109},[103,149343,146533],{"class":162},[103,149345,149346],{"class":105,"line":1168},[103,149347,2389],{"emptyLinePlaceholder":30},[103,149349,149350,149352,149355],{"class":105,"line":1183},[103,149351,31937],{"class":109},[103,149353,149354],{"class":1952}," introduce",[103,149356,149357],{"class":113},"(name, age):\n",[103,149359,149360,149362,149364,149366,149369,149371,149373,149375,149378,149380,149382,149384,149387],{"class":105,"line":1189},[103,149361,31289],{"class":162},[103,149363,114],{"class":113},[103,149365,166],{"class":109},[103,149367,149368],{"class":218},"\"我叫",[103,149370,1009],{"class":162},[103,149372,79800],{"class":113},[103,149374,1059],{"class":162},[103,149376,149377],{"class":218},"，今年",[103,149379,1009],{"class":162},[103,149381,70211],{"class":113},[103,149383,1059],{"class":162},[103,149385,149386],{"class":218},"岁\"",[103,149388,120],{"class":113},[103,149390,149391],{"class":105,"line":1203},[103,149392,2389],{"emptyLinePlaceholder":30},[103,149394,149395],{"class":105,"line":1209},[103,149396,149397],{"class":113},"introduce(name, age)\n",[14,149399,149400],{},"面向对象：",[94,149402,149404],{"className":30368,"code":149403,"language":30370,"meta":24,"style":24},"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",[100,149405,149406,149414,149422,149451,149455,149459,149469,149478,149487],{"__ignoreMap":24},[103,149407,149408,149410,149412],{"class":105,"line":106},[103,149409,14684],{"class":109},[103,149411,7888],{"class":1952},[103,149413,3728],{"class":113},[103,149415,149416,149418,149420],{"class":105,"line":25},[103,149417,30791],{"class":109},[103,149419,149354],{"class":1952},[103,149421,30797],{"class":113},[103,149423,149424,149426,149428,149430,149432,149435,149437,149439,149441,149443,149445,149447,149449],{"class":105,"line":1168},[103,149425,32441],{"class":162},[103,149427,114],{"class":113},[103,149429,166],{"class":109},[103,149431,149368],{"class":218},[103,149433,149434],{"class":162},"{self",[103,149436,80291],{"class":113},[103,149438,1059],{"class":162},[103,149440,149377],{"class":218},[103,149442,149434],{"class":162},[103,149444,80303],{"class":113},[103,149446,1059],{"class":162},[103,149448,149386],{"class":218},[103,149450,120],{"class":113},[103,149452,149453],{"class":105,"line":1183},[103,149454,2389],{"emptyLinePlaceholder":30},[103,149456,149457],{"class":105,"line":1189},[103,149458,2389],{"emptyLinePlaceholder":30},[103,149460,149461,149464,149466],{"class":105,"line":1203},[103,149462,149463],{"class":113},"student ",[103,149465,159],{"class":109},[103,149467,149468],{"class":113}," Student()\n",[103,149470,149471,149474,149476],{"class":105,"line":1209},[103,149472,149473],{"class":113},"student.name ",[103,149475,159],{"class":109},[103,149477,149335],{"class":218},[103,149479,149480,149483,149485],{"class":105,"line":1300},[103,149481,149482],{"class":113},"student.age ",[103,149484,159],{"class":109},[103,149486,146533],{"class":162},[103,149488,149489],{"class":105,"line":1306},[103,149490,149491],{"class":113},"student.introduce()\n",[14,149493,149494],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[45,149496,149498],{"id":149497},"_112-类和对象","11.2 类和对象",[14,149500,149501],{},"类是模板，对象是根据模板创建出来的具体实例。",[94,149503,149505],{"className":30368,"code":149504,"language":30370,"meta":24,"style":24},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[100,149506,149507,149515,149520,149524,149528,149537],{"__ignoreMap":24},[103,149508,149509,149511,149513],{"class":105,"line":106},[103,149510,14684],{"class":109},[103,149512,7888],{"class":1952},[103,149514,3728],{"class":113},[103,149516,149517],{"class":105,"line":25},[103,149518,149519],{"class":109},"    pass\n",[103,149521,149522],{"class":105,"line":1168},[103,149523,2389],{"emptyLinePlaceholder":30},[103,149525,149526],{"class":105,"line":1183},[103,149527,2389],{"emptyLinePlaceholder":30},[103,149529,149530,149533,149535],{"class":105,"line":1189},[103,149531,149532],{"class":113},"student1 ",[103,149534,159],{"class":109},[103,149536,149468],{"class":113},[103,149538,149539,149542,149544],{"class":105,"line":1203},[103,149540,149541],{"class":113},"student2 ",[103,149543,159],{"class":109},[103,149545,149468],{"class":113},[14,149547,149548,149551,149552,101008,149555,149558],{},[100,149549,149550],{},"Student"," 是类，",[100,149553,149554],{},"student1",[100,149556,149557],{},"student2"," 是对象。",[45,149560,149562],{"id":149561},"_113-属性","11.3 属性",[14,149564,149565],{},"属性是对象保存的数据。",[94,149567,149569],{"className":30368,"code":149568,"language":30370,"meta":24,"style":24},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[100,149570,149571,149579,149583,149587,149591,149599,149607,149615,149619,149626],{"__ignoreMap":24},[103,149572,149573,149575,149577],{"class":105,"line":106},[103,149574,14684],{"class":109},[103,149576,7888],{"class":1952},[103,149578,3728],{"class":113},[103,149580,149581],{"class":105,"line":25},[103,149582,149519],{"class":109},[103,149584,149585],{"class":105,"line":1168},[103,149586,2389],{"emptyLinePlaceholder":30},[103,149588,149589],{"class":105,"line":1183},[103,149590,2389],{"emptyLinePlaceholder":30},[103,149592,149593,149595,149597],{"class":105,"line":1189},[103,149594,149463],{"class":113},[103,149596,159],{"class":109},[103,149598,149468],{"class":113},[103,149600,149601,149603,149605],{"class":105,"line":1203},[103,149602,149473],{"class":113},[103,149604,159],{"class":109},[103,149606,149335],{"class":218},[103,149608,149609,149611,149613],{"class":105,"line":1209},[103,149610,149482],{"class":113},[103,149612,159],{"class":109},[103,149614,146533],{"class":162},[103,149616,149617],{"class":105,"line":1300},[103,149618,2389],{"emptyLinePlaceholder":30},[103,149620,149621,149623],{"class":105,"line":1306},[103,149622,30405],{"class":162},[103,149624,149625],{"class":113},"(student.name)\n",[103,149627,149628,149630],{"class":105,"line":1318},[103,149629,30405],{"class":162},[103,149631,149632],{"class":113},"(student.age)\n",[14,149634,149635],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[45,149637,149639],{"id":149638},"_114-方法","11.4 方法",[14,149641,149642],{},"类中的函数叫方法。",[94,149644,149645],{"className":30368,"code":149403,"language":30370,"meta":24,"style":24},[100,149646,149647,149655,149663,149691,149695,149699,149707,149715,149723],{"__ignoreMap":24},[103,149648,149649,149651,149653],{"class":105,"line":106},[103,149650,14684],{"class":109},[103,149652,7888],{"class":1952},[103,149654,3728],{"class":113},[103,149656,149657,149659,149661],{"class":105,"line":25},[103,149658,30791],{"class":109},[103,149660,149354],{"class":1952},[103,149662,30797],{"class":113},[103,149664,149665,149667,149669,149671,149673,149675,149677,149679,149681,149683,149685,149687,149689],{"class":105,"line":1168},[103,149666,32441],{"class":162},[103,149668,114],{"class":113},[103,149670,166],{"class":109},[103,149672,149368],{"class":218},[103,149674,149434],{"class":162},[103,149676,80291],{"class":113},[103,149678,1059],{"class":162},[103,149680,149377],{"class":218},[103,149682,149434],{"class":162},[103,149684,80303],{"class":113},[103,149686,1059],{"class":162},[103,149688,149386],{"class":218},[103,149690,120],{"class":113},[103,149692,149693],{"class":105,"line":1183},[103,149694,2389],{"emptyLinePlaceholder":30},[103,149696,149697],{"class":105,"line":1189},[103,149698,2389],{"emptyLinePlaceholder":30},[103,149700,149701,149703,149705],{"class":105,"line":1203},[103,149702,149463],{"class":113},[103,149704,159],{"class":109},[103,149706,149468],{"class":113},[103,149708,149709,149711,149713],{"class":105,"line":1209},[103,149710,149473],{"class":113},[103,149712,159],{"class":109},[103,149714,149335],{"class":218},[103,149716,149717,149719,149721],{"class":105,"line":1300},[103,149718,149482],{"class":113},[103,149720,159],{"class":109},[103,149722,146533],{"class":162},[103,149724,149725],{"class":105,"line":1306},[103,149726,149491],{"class":113},[14,149728,149729,149731,149732,149734],{},[100,149730,30813],{}," 表示当前对象。调用方法时不需要手动传入 ",[100,149733,30813],{},"，Python 会自动传。",[45,149736,149738],{"id":149737},"_115-构造方法__init__","11.5 构造方法__init__",[14,149740,149741,149743],{},[100,149742,30819],{}," 在对象创建时自动执行，用于初始化属性。",[94,149745,149747],{"className":30368,"code":149746,"language":30370,"meta":24,"style":24},"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",[100,149748,149749,149757,149766,149778,149790,149801,149805,149813,149851,149855,149859,149881],{"__ignoreMap":24},[103,149750,149751,149753,149755],{"class":105,"line":106},[103,149752,14684],{"class":109},[103,149754,7888],{"class":1952},[103,149756,3728],{"class":113},[103,149758,149759,149761,149763],{"class":105,"line":25},[103,149760,30791],{"class":109},[103,149762,30794],{"class":162},[103,149764,149765],{"class":113},"(self, name, age, score):\n",[103,149767,149768,149770,149773,149775],{"class":105,"line":1168},[103,149769,30835],{"class":162},[103,149771,149772],{"class":113},".name ",[103,149774,159],{"class":109},[103,149776,149777],{"class":113}," name\n",[103,149779,149780,149782,149785,149787],{"class":105,"line":1183},[103,149781,30835],{"class":162},[103,149783,149784],{"class":113},".age ",[103,149786,159],{"class":109},[103,149788,149789],{"class":113}," age\n",[103,149791,149792,149794,149797,149799],{"class":105,"line":1189},[103,149793,30835],{"class":162},[103,149795,149796],{"class":113},".score ",[103,149798,159],{"class":109},[103,149800,1568],{"class":113},[103,149802,149803],{"class":105,"line":1203},[103,149804,2389],{"emptyLinePlaceholder":30},[103,149806,149807,149809,149811],{"class":105,"line":1209},[103,149808,30791],{"class":109},[103,149810,149354],{"class":1952},[103,149812,30797],{"class":113},[103,149814,149815,149817,149819,149821,149823,149825,149827,149829,149831,149833,149835,149837,149840,149842,149845,149847,149849],{"class":105,"line":1300},[103,149816,32441],{"class":162},[103,149818,114],{"class":113},[103,149820,166],{"class":109},[103,149822,149368],{"class":218},[103,149824,149434],{"class":162},[103,149826,80291],{"class":113},[103,149828,1059],{"class":162},[103,149830,149377],{"class":218},[103,149832,149434],{"class":162},[103,149834,80303],{"class":113},[103,149836,1059],{"class":162},[103,149838,149839],{"class":218},"岁，成绩",[103,149841,149434],{"class":162},[103,149843,149844],{"class":113},".score",[103,149846,1059],{"class":162},[103,149848,364],{"class":218},[103,149850,120],{"class":113},[103,149852,149853],{"class":105,"line":1306},[103,149854,2389],{"emptyLinePlaceholder":30},[103,149856,149857],{"class":105,"line":1318},[103,149858,2389],{"emptyLinePlaceholder":30},[103,149860,149861,149863,149865,149868,149871,149873,149875,149877,149879],{"class":105,"line":1601},[103,149862,149463],{"class":113},[103,149864,159],{"class":109},[103,149866,149867],{"class":113}," Student(",[103,149869,149870],{"class":218},"\"小明\"",[103,149872,12425],{"class":113},[103,149874,763],{"class":162},[103,149876,12425],{"class":113},[103,149878,1102],{"class":162},[103,149880,120],{"class":113},[103,149882,149883],{"class":105,"line":1606},[103,149884,149491],{"class":113},[14,149886,149887],{},"构造方法的好处：",[57,149889,149890,149893,149896],{},[60,149891,149892],{},"创建对象时必须提供必要数据。",[60,149894,149895],{},"属性初始化集中，不容易漏。",[60,149897,149898],{},"对象状态更完整。",[45,149900,149902,149903],{"id":149901},"_116-str","11.6 ",[263,149904,1288],{},[14,149906,149907,149908,28375],{},"直接打印对象时，默认输出不直观。可以定义 ",[100,149909,149910],{},"__str__",[94,149912,149914],{"className":30368,"code":149913,"language":30370,"meta":24,"style":24},"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",[100,149915,149916,149924,149933,149943,149953,149957,149966,149994,149998,150002,150018],{"__ignoreMap":24},[103,149917,149918,149920,149922],{"class":105,"line":106},[103,149919,14684],{"class":109},[103,149921,7888],{"class":1952},[103,149923,3728],{"class":113},[103,149925,149926,149928,149930],{"class":105,"line":25},[103,149927,30791],{"class":109},[103,149929,30794],{"class":162},[103,149931,149932],{"class":113},"(self, name, age):\n",[103,149934,149935,149937,149939,149941],{"class":105,"line":1168},[103,149936,30835],{"class":162},[103,149938,149772],{"class":113},[103,149940,159],{"class":109},[103,149942,149777],{"class":113},[103,149944,149945,149947,149949,149951],{"class":105,"line":1183},[103,149946,30835],{"class":162},[103,149948,149784],{"class":113},[103,149950,159],{"class":109},[103,149952,149789],{"class":113},[103,149954,149955],{"class":105,"line":1189},[103,149956,2389],{"emptyLinePlaceholder":30},[103,149958,149959,149961,149964],{"class":105,"line":1203},[103,149960,30791],{"class":109},[103,149962,149963],{"class":162}," __str__",[103,149965,30797],{"class":113},[103,149967,149968,149970,149973,149976,149978,149980,149982,149985,149987,149989,149991],{"class":105,"line":1209},[103,149969,14742],{"class":109},[103,149971,149972],{"class":109}," f",[103,149974,149975],{"class":218},"\"Student(name=",[103,149977,149434],{"class":162},[103,149979,80291],{"class":113},[103,149981,1059],{"class":162},[103,149983,149984],{"class":218},", age=",[103,149986,149434],{"class":162},[103,149988,80303],{"class":113},[103,149990,1059],{"class":162},[103,149992,149993],{"class":218},")\"\n",[103,149995,149996],{"class":105,"line":1300},[103,149997,2389],{"emptyLinePlaceholder":30},[103,149999,150000],{"class":105,"line":1306},[103,150001,2389],{"emptyLinePlaceholder":30},[103,150003,150004,150006,150008,150010,150012,150014,150016],{"class":105,"line":1318},[103,150005,149463],{"class":113},[103,150007,159],{"class":109},[103,150009,149867],{"class":113},[103,150011,149870],{"class":218},[103,150013,12425],{"class":113},[103,150015,763],{"class":162},[103,150017,120],{"class":113},[103,150019,150020,150022],{"class":105,"line":1601},[103,150021,30405],{"class":162},[103,150023,150024],{"class":113},"(student)\n",[45,150026,150028],{"id":150027},"_117-封装","11.7 封装",[14,150030,150031],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150033,150034],{},"Python 中以双下划线开头的属性通常视为私有属性。",[94,150036,150038],{"className":30368,"code":150037,"language":30370,"meta":24,"style":24},"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",[100,150039,150040,150049,150058,150070,150082,150086,150095,150104,150108,150118,150131,150142,150147,150158,150162,150171,150183,150194,150198,150211,150222,150226,150237,150241,150245,150263,150272,150281],{"__ignoreMap":24},[103,150041,150042,150044,150047],{"class":105,"line":106},[103,150043,14684],{"class":109},[103,150045,150046],{"class":1952}," Account",[103,150048,3728],{"class":113},[103,150050,150051,150053,150055],{"class":105,"line":25},[103,150052,30791],{"class":109},[103,150054,30794],{"class":162},[103,150056,150057],{"class":113},"(self, owner, balance):\n",[103,150059,150060,150062,150065,150067],{"class":105,"line":1168},[103,150061,30835],{"class":162},[103,150063,150064],{"class":113},".owner ",[103,150066,159],{"class":109},[103,150068,150069],{"class":113}," owner\n",[103,150071,150072,150074,150077,150079],{"class":105,"line":1183},[103,150073,30835],{"class":162},[103,150075,150076],{"class":113},".__balance ",[103,150078,159],{"class":109},[103,150080,150081],{"class":113}," balance\n",[103,150083,150084],{"class":105,"line":1189},[103,150085,2389],{"emptyLinePlaceholder":30},[103,150087,150088,150090,150093],{"class":105,"line":1203},[103,150089,30791],{"class":109},[103,150091,150092],{"class":1952}," get_balance",[103,150094,30797],{"class":113},[103,150096,150097,150099,150101],{"class":105,"line":1209},[103,150098,14742],{"class":109},[103,150100,38863],{"class":162},[103,150102,150103],{"class":113},".__balance\n",[103,150105,150106],{"class":105,"line":1300},[103,150107,2389],{"emptyLinePlaceholder":30},[103,150109,150110,150112,150115],{"class":105,"line":1306},[103,150111,30791],{"class":109},[103,150113,150114],{"class":1952}," deposit",[103,150116,150117],{"class":113},"(self, money):\n",[103,150119,150120,150122,150125,150127,150129],{"class":105,"line":1318},[103,150121,2486],{"class":109},[103,150123,150124],{"class":113}," money ",[103,150126,1577],{"class":109},[103,150128,4082],{"class":162},[103,150130,3728],{"class":113},[103,150132,150133,150135,150137,150140],{"class":105,"line":1601},[103,150134,34640],{"class":162},[103,150136,114],{"class":113},[103,150138,150139],{"class":218},"\"存款金额必须大于0\"",[103,150141,120],{"class":113},[103,150143,150144],{"class":105,"line":1606},[103,150145,150146],{"class":109},"            return\n",[103,150148,150149,150151,150153,150155],{"class":105,"line":1612},[103,150150,30835],{"class":162},[103,150152,150076],{"class":113},[103,150154,9467],{"class":109},[103,150156,150157],{"class":113}," money\n",[103,150159,150160],{"class":105,"line":1617},[103,150161,2389],{"emptyLinePlaceholder":30},[103,150163,150164,150166,150169],{"class":105,"line":1631},[103,150165,30791],{"class":109},[103,150167,150168],{"class":1952}," withdraw",[103,150170,150117],{"class":113},[103,150172,150173,150175,150177,150179,150181],{"class":105,"line":1636},[103,150174,2486],{"class":109},[103,150176,150124],{"class":113},[103,150178,1577],{"class":109},[103,150180,4082],{"class":162},[103,150182,3728],{"class":113},[103,150184,150185,150187,150189,150192],{"class":105,"line":1642},[103,150186,34640],{"class":162},[103,150188,114],{"class":113},[103,150190,150191],{"class":218},"\"取款金额必须大于0\"",[103,150193,120],{"class":113},[103,150195,150196],{"class":105,"line":1663},[103,150197,150146],{"class":109},[103,150199,150200,150202,150204,150206,150208],{"class":105,"line":1668},[103,150201,2486],{"class":109},[103,150203,150124],{"class":113},[103,150205,1073],{"class":109},[103,150207,38863],{"class":162},[103,150209,150210],{"class":113},".__balance:\n",[103,150212,150213,150215,150217,150220],{"class":105,"line":1682},[103,150214,34640],{"class":162},[103,150216,114],{"class":113},[103,150218,150219],{"class":218},"\"余额不足\"",[103,150221,120],{"class":113},[103,150223,150224],{"class":105,"line":1687},[103,150225,150146],{"class":109},[103,150227,150228,150230,150232,150235],{"class":105,"line":1716},[103,150229,30835],{"class":162},[103,150231,150076],{"class":113},[103,150233,150234],{"class":109},"-=",[103,150236,150157],{"class":113},[103,150238,150239],{"class":105,"line":1721},[103,150240,2389],{"emptyLinePlaceholder":30},[103,150242,150243],{"class":105,"line":1738},[103,150244,2389],{"emptyLinePlaceholder":30},[103,150246,150247,150250,150252,150255,150257,150259,150261],{"class":105,"line":1743},[103,150248,150249],{"class":113},"account ",[103,150251,159],{"class":109},[103,150253,150254],{"class":113}," Account(",[103,150256,149870],{"class":218},[103,150258,12425],{"class":113},[103,150260,6400],{"class":162},[103,150262,120],{"class":113},[103,150264,150265,150268,150270],{"class":105,"line":1748},[103,150266,150267],{"class":113},"account.deposit(",[103,150269,1711],{"class":162},[103,150271,120],{"class":113},[103,150273,150274,150277,150279],{"class":105,"line":1753},[103,150275,150276],{"class":113},"account.withdraw(",[103,150278,424],{"class":162},[103,150280,120],{"class":113},[103,150282,150283,150285],{"class":105,"line":1767},[103,150284,30405],{"class":162},[103,150286,150287],{"class":113},"(account.get_balance())\n",[14,150289,150290],{},"封装的意义是避免外部随意修改内部状态。",[45,150292,150294],{"id":150293},"_118-继承","11.8 继承",[14,150296,150297],{},"继承可以让子类复用父类的属性和方法。",[94,150299,150301],{"className":30368,"code":150300,"language":30370,"meta":24,"style":24},"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",[100,150302,150303,150312,150321,150332,150336,150340,150354,150363,150374,150378,150382,150392,150397],{"__ignoreMap":24},[103,150304,150305,150307,150310],{"class":105,"line":106},[103,150306,14684],{"class":109},[103,150308,150309],{"class":1952}," Animal",[103,150311,3728],{"class":113},[103,150313,150314,150316,150319],{"class":105,"line":25},[103,150315,30791],{"class":109},[103,150317,150318],{"class":1952}," eat",[103,150320,30797],{"class":113},[103,150322,150323,150325,150327,150330],{"class":105,"line":1168},[103,150324,32441],{"class":162},[103,150326,114],{"class":113},[103,150328,150329],{"class":218},"\"吃东西\"",[103,150331,120],{"class":113},[103,150333,150334],{"class":105,"line":1183},[103,150335,2389],{"emptyLinePlaceholder":30},[103,150337,150338],{"class":105,"line":1189},[103,150339,2389],{"emptyLinePlaceholder":30},[103,150341,150342,150344,150347,150349,150352],{"class":105,"line":1203},[103,150343,14684],{"class":109},[103,150345,150346],{"class":1952}," Dog",[103,150348,114],{"class":113},[103,150350,150351],{"class":1952},"Animal",[103,150353,30776],{"class":113},[103,150355,150356,150358,150361],{"class":105,"line":1209},[103,150357,30791],{"class":109},[103,150359,150360],{"class":1952}," bark",[103,150362,30797],{"class":113},[103,150364,150365,150367,150369,150372],{"class":105,"line":1300},[103,150366,32441],{"class":162},[103,150368,114],{"class":113},[103,150370,150371],{"class":218},"\"汪汪\"",[103,150373,120],{"class":113},[103,150375,150376],{"class":105,"line":1306},[103,150377,2389],{"emptyLinePlaceholder":30},[103,150379,150380],{"class":105,"line":1318},[103,150381,2389],{"emptyLinePlaceholder":30},[103,150383,150384,150387,150389],{"class":105,"line":1601},[103,150385,150386],{"class":113},"dog ",[103,150388,159],{"class":109},[103,150390,150391],{"class":113}," Dog()\n",[103,150393,150394],{"class":105,"line":1606},[103,150395,150396],{"class":113},"dog.eat()\n",[103,150398,150399],{"class":105,"line":1612},[103,150400,150401],{"class":113},"dog.bark()\n",[14,150403,150404],{},"子类可以扩展新方法，也可以重写父类方法。",[45,150406,150408],{"id":150407},"_119-方法重写","11.9 方法重写",[94,150410,150412],{"className":30368,"code":150411,"language":30370,"meta":24,"style":24},"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",[100,150413,150414,150422,150431,150442,150446,150450,150462,150470,150480,150484,150488,150501,150509,150520,150524,150528,150536,150546,150550,150555],{"__ignoreMap":24},[103,150415,150416,150418,150420],{"class":105,"line":106},[103,150417,14684],{"class":109},[103,150419,150309],{"class":1952},[103,150421,3728],{"class":113},[103,150423,150424,150426,150429],{"class":105,"line":25},[103,150425,30791],{"class":109},[103,150427,150428],{"class":1952}," speak",[103,150430,30797],{"class":113},[103,150432,150433,150435,150437,150440],{"class":105,"line":1168},[103,150434,32441],{"class":162},[103,150436,114],{"class":113},[103,150438,150439],{"class":218},"\"动物叫\"",[103,150441,120],{"class":113},[103,150443,150444],{"class":105,"line":1183},[103,150445,2389],{"emptyLinePlaceholder":30},[103,150447,150448],{"class":105,"line":1189},[103,150449,2389],{"emptyLinePlaceholder":30},[103,150451,150452,150454,150456,150458,150460],{"class":105,"line":1203},[103,150453,14684],{"class":109},[103,150455,150346],{"class":1952},[103,150457,114],{"class":113},[103,150459,150351],{"class":1952},[103,150461,30776],{"class":113},[103,150463,150464,150466,150468],{"class":105,"line":1209},[103,150465,30791],{"class":109},[103,150467,150428],{"class":1952},[103,150469,30797],{"class":113},[103,150471,150472,150474,150476,150478],{"class":105,"line":1300},[103,150473,32441],{"class":162},[103,150475,114],{"class":113},[103,150477,150371],{"class":218},[103,150479,120],{"class":113},[103,150481,150482],{"class":105,"line":1306},[103,150483,2389],{"emptyLinePlaceholder":30},[103,150485,150486],{"class":105,"line":1318},[103,150487,2389],{"emptyLinePlaceholder":30},[103,150489,150490,150492,150495,150497,150499],{"class":105,"line":1601},[103,150491,14684],{"class":109},[103,150493,150494],{"class":1952}," Cat",[103,150496,114],{"class":113},[103,150498,150351],{"class":1952},[103,150500,30776],{"class":113},[103,150502,150503,150505,150507],{"class":105,"line":1606},[103,150504,30791],{"class":109},[103,150506,150428],{"class":1952},[103,150508,30797],{"class":113},[103,150510,150511,150513,150515,150518],{"class":105,"line":1612},[103,150512,32441],{"class":162},[103,150514,114],{"class":113},[103,150516,150517],{"class":218},"\"喵喵\"",[103,150519,120],{"class":113},[103,150521,150522],{"class":105,"line":1617},[103,150523,2389],{"emptyLinePlaceholder":30},[103,150525,150526],{"class":105,"line":1631},[103,150527,2389],{"emptyLinePlaceholder":30},[103,150529,150530,150532,150534],{"class":105,"line":1636},[103,150531,150386],{"class":113},[103,150533,159],{"class":109},[103,150535,150391],{"class":113},[103,150537,150538,150541,150543],{"class":105,"line":1642},[103,150539,150540],{"class":113},"cat ",[103,150542,159],{"class":109},[103,150544,150545],{"class":113}," Cat()\n",[103,150547,150548],{"class":105,"line":1663},[103,150549,2389],{"emptyLinePlaceholder":30},[103,150551,150552],{"class":105,"line":1668},[103,150553,150554],{"class":113},"dog.speak()\n",[103,150556,150557],{"class":105,"line":1682},[103,150558,150559],{"class":113},"cat.speak()\n",[45,150561,150563],{"id":150562},"_1110-super","11.10 super",[14,150565,150566,150567,150570],{},"子类可以通过 ",[100,150568,150569],{},"super()"," 调用父类方法。",[94,150572,150574],{"className":30368,"code":150573,"language":30370,"meta":24,"style":24},"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",[100,150575,150576,150584,150593,150603,150607,150611,150623,150632,150643,150653,150657,150661,150677],{"__ignoreMap":24},[103,150577,150578,150580,150582],{"class":105,"line":106},[103,150579,14684],{"class":109},[103,150581,15559],{"class":1952},[103,150583,3728],{"class":113},[103,150585,150586,150588,150590],{"class":105,"line":25},[103,150587,30791],{"class":109},[103,150589,30794],{"class":162},[103,150591,150592],{"class":113},"(self, name):\n",[103,150594,150595,150597,150599,150601],{"class":105,"line":1168},[103,150596,30835],{"class":162},[103,150598,149772],{"class":113},[103,150600,159],{"class":109},[103,150602,149777],{"class":113},[103,150604,150605],{"class":105,"line":1183},[103,150606,2389],{"emptyLinePlaceholder":30},[103,150608,150609],{"class":105,"line":1189},[103,150610,2389],{"emptyLinePlaceholder":30},[103,150612,150613,150615,150617,150619,150621],{"class":105,"line":1203},[103,150614,14684],{"class":109},[103,150616,7888],{"class":1952},[103,150618,114],{"class":113},[103,150620,19036],{"class":1952},[103,150622,30776],{"class":113},[103,150624,150625,150627,150629],{"class":105,"line":1209},[103,150626,30791],{"class":109},[103,150628,30794],{"class":162},[103,150630,150631],{"class":113},"(self, name, score):\n",[103,150633,150634,150636,150638,150640],{"class":105,"line":1300},[103,150635,30807],{"class":162},[103,150637,17251],{"class":113},[103,150639,30819],{"class":162},[103,150641,150642],{"class":113},"(name)\n",[103,150644,150645,150647,150649,150651],{"class":105,"line":1306},[103,150646,30835],{"class":162},[103,150648,149796],{"class":113},[103,150650,159],{"class":109},[103,150652,1568],{"class":113},[103,150654,150655],{"class":105,"line":1318},[103,150656,2389],{"emptyLinePlaceholder":30},[103,150658,150659],{"class":105,"line":1601},[103,150660,2389],{"emptyLinePlaceholder":30},[103,150662,150663,150665,150667,150669,150671,150673,150675],{"class":105,"line":1606},[103,150664,149463],{"class":113},[103,150666,159],{"class":109},[103,150668,149867],{"class":113},[103,150670,149870],{"class":218},[103,150672,12425],{"class":113},[103,150674,1102],{"class":162},[103,150676,120],{"class":113},[103,150678,150679,150681],{"class":105,"line":1612},[103,150680,30405],{"class":162},[103,150682,150683],{"class":113},"(student.name, student.score)\n",[45,150685,150687],{"id":150686},"_1111-多态","11.11 多态",[14,150689,150690],{},"多态指不同对象响应同一个方法，表现出不同结果。",[94,150692,150694],{"className":30368,"code":150693,"language":30370,"meta":24,"style":24},"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",[100,150695,150696,150704,150712,150722,150726,150730,150738,150746,150756,150760,150764,150774,150779,150783,150787,150792],{"__ignoreMap":24},[103,150697,150698,150700,150702],{"class":105,"line":106},[103,150699,14684],{"class":109},[103,150701,150346],{"class":1952},[103,150703,3728],{"class":113},[103,150705,150706,150708,150710],{"class":105,"line":25},[103,150707,30791],{"class":109},[103,150709,150428],{"class":1952},[103,150711,30797],{"class":113},[103,150713,150714,150716,150718,150720],{"class":105,"line":1168},[103,150715,32441],{"class":162},[103,150717,114],{"class":113},[103,150719,150371],{"class":218},[103,150721,120],{"class":113},[103,150723,150724],{"class":105,"line":1183},[103,150725,2389],{"emptyLinePlaceholder":30},[103,150727,150728],{"class":105,"line":1189},[103,150729,2389],{"emptyLinePlaceholder":30},[103,150731,150732,150734,150736],{"class":105,"line":1203},[103,150733,14684],{"class":109},[103,150735,150494],{"class":1952},[103,150737,3728],{"class":113},[103,150739,150740,150742,150744],{"class":105,"line":1209},[103,150741,30791],{"class":109},[103,150743,150428],{"class":1952},[103,150745,30797],{"class":113},[103,150747,150748,150750,150752,150754],{"class":105,"line":1300},[103,150749,32441],{"class":162},[103,150751,114],{"class":113},[103,150753,150517],{"class":218},[103,150755,120],{"class":113},[103,150757,150758],{"class":105,"line":1306},[103,150759,2389],{"emptyLinePlaceholder":30},[103,150761,150762],{"class":105,"line":1318},[103,150763,2389],{"emptyLinePlaceholder":30},[103,150765,150766,150768,150771],{"class":105,"line":1601},[103,150767,31937],{"class":109},[103,150769,150770],{"class":1952}," make_sound",[103,150772,150773],{"class":113},"(animal):\n",[103,150775,150776],{"class":105,"line":1606},[103,150777,150778],{"class":113},"    animal.speak()\n",[103,150780,150781],{"class":105,"line":1612},[103,150782,2389],{"emptyLinePlaceholder":30},[103,150784,150785],{"class":105,"line":1617},[103,150786,2389],{"emptyLinePlaceholder":30},[103,150788,150789],{"class":105,"line":1631},[103,150790,150791],{"class":113},"make_sound(Dog())\n",[103,150793,150794],{"class":105,"line":1636},[103,150795,150796],{"class":113},"make_sound(Cat())\n",[14,150798,150799],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[45,150801,150803],{"id":150802},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150805,150806],{},"实例属性属于对象：",[94,150808,150810],{"className":30368,"code":150809,"language":30370,"meta":24,"style":24},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[100,150811,150812,150820,150828],{"__ignoreMap":24},[103,150813,150814,150816,150818],{"class":105,"line":106},[103,150815,14684],{"class":109},[103,150817,7888],{"class":1952},[103,150819,3728],{"class":113},[103,150821,150822,150824,150826],{"class":105,"line":25},[103,150823,30791],{"class":109},[103,150825,30794],{"class":162},[103,150827,150592],{"class":113},[103,150829,150830,150832,150834,150836],{"class":105,"line":1168},[103,150831,30835],{"class":162},[103,150833,149772],{"class":113},[103,150835,159],{"class":109},[103,150837,149777],{"class":113},[14,150839,150840],{},"类属性属于类，所有对象共享：",[94,150842,150844],{"className":30368,"code":150843,"language":30370,"meta":24,"style":24},"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",[100,150845,150846,150854,150864,150868,150876,150886,150890,150894,150907,150921,150925,150932,150939],{"__ignoreMap":24},[103,150847,150848,150850,150852],{"class":105,"line":106},[103,150849,14684],{"class":109},[103,150851,7888],{"class":1952},[103,150853,3728],{"class":113},[103,150855,150856,150859,150861],{"class":105,"line":25},[103,150857,150858],{"class":113},"    school ",[103,150860,159],{"class":109},[103,150862,150863],{"class":218}," \"黑马学校\"\n",[103,150865,150866],{"class":105,"line":1168},[103,150867,2389],{"emptyLinePlaceholder":30},[103,150869,150870,150872,150874],{"class":105,"line":1183},[103,150871,30791],{"class":109},[103,150873,30794],{"class":162},[103,150875,150592],{"class":113},[103,150877,150878,150880,150882,150884],{"class":105,"line":1189},[103,150879,30835],{"class":162},[103,150881,149772],{"class":113},[103,150883,159],{"class":109},[103,150885,149777],{"class":113},[103,150887,150888],{"class":105,"line":1203},[103,150889,2389],{"emptyLinePlaceholder":30},[103,150891,150892],{"class":105,"line":1209},[103,150893,2389],{"emptyLinePlaceholder":30},[103,150895,150896,150899,150901,150903,150905],{"class":105,"line":1300},[103,150897,150898],{"class":113},"s1 ",[103,150900,159],{"class":109},[103,150902,149867],{"class":113},[103,150904,149870],{"class":218},[103,150906,120],{"class":113},[103,150908,150909,150912,150914,150916,150919],{"class":105,"line":1306},[103,150910,150911],{"class":113},"s2 ",[103,150913,159],{"class":109},[103,150915,149867],{"class":113},[103,150917,150918],{"class":218},"\"小红\"",[103,150920,120],{"class":113},[103,150922,150923],{"class":105,"line":1318},[103,150924,2389],{"emptyLinePlaceholder":30},[103,150926,150927,150929],{"class":105,"line":1601},[103,150928,30405],{"class":162},[103,150930,150931],{"class":113},"(s1.school)\n",[103,150933,150934,150936],{"class":105,"line":1606},[103,150935,30405],{"class":162},[103,150937,150938],{"class":113},"(s2.school)\n",[103,150940,150941,150943],{"class":105,"line":1612},[103,150942,30405],{"class":162},[103,150944,150945],{"class":113},"(Student.school)\n",[14,150947,150948],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[45,150950,150952],{"id":150951},"_1113-类方法和静态方法","11.13 类方法和静态方法",[74,150954,150956],{"id":150955},"_11131-类方法","11.13.1 类方法",[14,150958,150959,150960,150963,150964,28375],{},"类方法使用 ",[100,150961,150962],{},"@classmethod","，第一个参数通常是 ",[100,150965,150966],{},"cls",[94,150968,150970],{"className":30368,"code":150969,"language":30370,"meta":24,"style":24},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[100,150971,150972,150980,150988,150992,151000,151010,151020,151024,151028],{"__ignoreMap":24},[103,150973,150974,150976,150978],{"class":105,"line":106},[103,150975,14684],{"class":109},[103,150977,7888],{"class":1952},[103,150979,3728],{"class":113},[103,150981,150982,150984,150986],{"class":105,"line":25},[103,150983,150858],{"class":113},[103,150985,159],{"class":109},[103,150987,150863],{"class":218},[103,150989,150990],{"class":105,"line":1168},[103,150991,2389],{"emptyLinePlaceholder":30},[103,150993,150994,150997],{"class":105,"line":1183},[103,150995,150996],{"class":1952},"    @",[103,150998,150999],{"class":162},"classmethod\n",[103,151001,151002,151004,151007],{"class":105,"line":1189},[103,151003,30791],{"class":109},[103,151005,151006],{"class":1952}," get_school",[103,151008,151009],{"class":113},"(cls):\n",[103,151011,151012,151014,151017],{"class":105,"line":1203},[103,151013,14742],{"class":109},[103,151015,151016],{"class":162}," cls",[103,151018,151019],{"class":113},".school\n",[103,151021,151022],{"class":105,"line":1209},[103,151023,2389],{"emptyLinePlaceholder":30},[103,151025,151026],{"class":105,"line":1300},[103,151027,2389],{"emptyLinePlaceholder":30},[103,151029,151030,151032],{"class":105,"line":1306},[103,151031,30405],{"class":162},[103,151033,151034],{"class":113},"(Student.get_school())\n",[74,151036,151038],{"id":151037},"_11132-静态方法","11.13.2 静态方法",[14,151040,151041,151042,151045],{},"静态方法使用 ",[100,151043,151044],{},"@staticmethod","，不需要访问实例和类。",[94,151047,151049],{"className":30368,"code":151048,"language":30370,"meta":24,"style":24},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[100,151050,151051,151060,151067,151076,151087,151091,151095],{"__ignoreMap":24},[103,151052,151053,151055,151058],{"class":105,"line":106},[103,151054,14684],{"class":109},[103,151056,151057],{"class":1952}," MathUtils",[103,151059,3728],{"class":113},[103,151061,151062,151064],{"class":105,"line":25},[103,151063,150996],{"class":1952},[103,151065,151066],{"class":162},"staticmethod\n",[103,151068,151069,151071,151073],{"class":105,"line":1168},[103,151070,30791],{"class":109},[103,151072,5199],{"class":1952},[103,151074,151075],{"class":113},"(a, b):\n",[103,151077,151078,151080,151082,151084],{"class":105,"line":1183},[103,151079,14742],{"class":109},[103,151081,10859],{"class":113},[103,151083,594],{"class":109},[103,151085,151086],{"class":113}," b\n",[103,151088,151089],{"class":105,"line":1189},[103,151090,2389],{"emptyLinePlaceholder":30},[103,151092,151093],{"class":105,"line":1203},[103,151094,2389],{"emptyLinePlaceholder":30},[103,151096,151097,151099,151102,151104,151106,151108],{"class":105,"line":1209},[103,151098,30405],{"class":162},[103,151100,151101],{"class":113},"(MathUtils.add(",[103,151103,331],{"class":162},[103,151105,12425],{"class":113},[103,151107,191],{"class":162},[103,151109,30487],{"class":113},[14,151111,151112],{},"静态方法本质上是放在类命名空间里的普通函数。",[45,151114,151116],{"id":151115},"_1114-dataclass","11.14 dataclass",[14,151118,151119,151122],{},[100,151120,151121],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[94,151124,151126],{"className":30368,"code":151125,"language":30370,"meta":24,"style":24},"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",[100,151127,151128,151140,151144,151148,151153,151161,151169,151177,151185,151189,151193,151213],{"__ignoreMap":24},[103,151129,151130,151132,151135,151137],{"class":105,"line":106},[103,151131,30727],{"class":109},[103,151133,151134],{"class":113}," dataclasses ",[103,151136,30382],{"class":109},[103,151138,151139],{"class":113}," dataclass\n",[103,151141,151142],{"class":105,"line":25},[103,151143,2389],{"emptyLinePlaceholder":30},[103,151145,151146],{"class":105,"line":1168},[103,151147,2389],{"emptyLinePlaceholder":30},[103,151149,151150],{"class":105,"line":1183},[103,151151,151152],{"class":1952},"@dataclass\n",[103,151154,151155,151157,151159],{"class":105,"line":1189},[103,151156,14684],{"class":109},[103,151158,7888],{"class":1952},[103,151160,3728],{"class":113},[103,151162,151163,151166],{"class":105,"line":1203},[103,151164,151165],{"class":113},"    name: ",[103,151167,151168],{"class":162},"str\n",[103,151170,151171,151174],{"class":105,"line":1209},[103,151172,151173],{"class":113},"    age: ",[103,151175,151176],{"class":162},"int\n",[103,151178,151179,151182],{"class":105,"line":1300},[103,151180,151181],{"class":113},"    score: ",[103,151183,151184],{"class":162},"float\n",[103,151186,151187],{"class":105,"line":1306},[103,151188,2389],{"emptyLinePlaceholder":30},[103,151190,151191],{"class":105,"line":1318},[103,151192,2389],{"emptyLinePlaceholder":30},[103,151194,151195,151197,151199,151201,151203,151205,151207,151209,151211],{"class":105,"line":1601},[103,151196,149463],{"class":113},[103,151198,159],{"class":109},[103,151200,149867],{"class":113},[103,151202,149870],{"class":218},[103,151204,12425],{"class":113},[103,151206,763],{"class":162},[103,151208,12425],{"class":113},[103,151210,1102],{"class":162},[103,151212,120],{"class":113},[103,151214,151215,151217],{"class":105,"line":1606},[103,151216,30405],{"class":162},[103,151218,150024],{"class":113},[14,151220,151221,151222,326,151224,151227],{},"它会自动生成 ",[100,151223,30819],{},[100,151225,151226],{},"__repr__"," 等方法。适合数据模型类。",[45,151229,151231],{"id":151230},"_1115-小案例学生类","11.15 小案例：学生类",[94,151233,151235],{"className":30368,"code":151234,"language":30370,"meta":24,"style":24},"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",[100,151236,151237,151245,151254,151266,151276,151286,151296,151300,151309,151322,151326,151335,151341,151353,151365,151377,151389,151393,151397,151403,151413,151422,151432,151440,151448,151457,151461,151465,151473,151509,151513,151517,151542,151549],{"__ignoreMap":24},[103,151238,151239,151241,151243],{"class":105,"line":106},[103,151240,14684],{"class":109},[103,151242,7888],{"class":1952},[103,151244,3728],{"class":113},[103,151246,151247,151249,151251],{"class":105,"line":25},[103,151248,30791],{"class":109},[103,151250,30794],{"class":162},[103,151252,151253],{"class":113},"(self, student_id, name, age, score):\n",[103,151255,151256,151258,151261,151263],{"class":105,"line":1168},[103,151257,30835],{"class":162},[103,151259,151260],{"class":113},".student_id ",[103,151262,159],{"class":109},[103,151264,151265],{"class":113}," student_id\n",[103,151267,151268,151270,151272,151274],{"class":105,"line":1183},[103,151269,30835],{"class":162},[103,151271,149772],{"class":113},[103,151273,159],{"class":109},[103,151275,149777],{"class":113},[103,151277,151278,151280,151282,151284],{"class":105,"line":1189},[103,151279,30835],{"class":162},[103,151281,149784],{"class":113},[103,151283,159],{"class":109},[103,151285,149789],{"class":113},[103,151287,151288,151290,151292,151294],{"class":105,"line":1203},[103,151289,30835],{"class":162},[103,151291,149796],{"class":113},[103,151293,159],{"class":109},[103,151295,1568],{"class":113},[103,151297,151298],{"class":105,"line":1209},[103,151299,2389],{"emptyLinePlaceholder":30},[103,151301,151302,151304,151307],{"class":105,"line":1300},[103,151303,30791],{"class":109},[103,151305,151306],{"class":1952}," is_passed",[103,151308,30797],{"class":113},[103,151310,151311,151313,151315,151317,151319],{"class":105,"line":1306},[103,151312,14742],{"class":109},[103,151314,38863],{"class":162},[103,151316,149796],{"class":113},[103,151318,1699],{"class":109},[103,151320,151321],{"class":162}," 60\n",[103,151323,151324],{"class":105,"line":1318},[103,151325,2389],{"emptyLinePlaceholder":30},[103,151327,151328,151330,151333],{"class":105,"line":1601},[103,151329,30791],{"class":109},[103,151331,151332],{"class":1952}," to_dict",[103,151334,30797],{"class":113},[103,151336,151337,151339],{"class":105,"line":1606},[103,151338,14742],{"class":109},[103,151340,15562],{"class":113},[103,151342,151343,151346,151348,151350],{"class":105,"line":1612},[103,151344,151345],{"class":218},"            \"student_id\"",[103,151347,51427],{"class":113},[103,151349,30813],{"class":162},[103,151351,151352],{"class":113},".student_id,\n",[103,151354,151355,151358,151360,151362],{"class":105,"line":1617},[103,151356,151357],{"class":218},"            \"name\"",[103,151359,51427],{"class":113},[103,151361,30813],{"class":162},[103,151363,151364],{"class":113},".name,\n",[103,151366,151367,151370,151372,151374],{"class":105,"line":1631},[103,151368,151369],{"class":218},"            \"age\"",[103,151371,51427],{"class":113},[103,151373,30813],{"class":162},[103,151375,151376],{"class":113},".age,\n",[103,151378,151379,151382,151384,151386],{"class":105,"line":1636},[103,151380,151381],{"class":218},"            \"score\"",[103,151383,51427],{"class":113},[103,151385,30813],{"class":162},[103,151387,151388],{"class":113},".score,\n",[103,151390,151391],{"class":105,"line":1642},[103,151392,2518],{"class":113},[103,151394,151395],{"class":105,"line":1663},[103,151396,2389],{"emptyLinePlaceholder":30},[103,151398,151399,151401],{"class":105,"line":1668},[103,151400,150996],{"class":1952},[103,151402,150999],{"class":162},[103,151404,151405,151407,151410],{"class":105,"line":1682},[103,151406,30791],{"class":109},[103,151408,151409],{"class":1952}," from_dict",[103,151411,151412],{"class":113},"(cls, data):\n",[103,151414,151415,151417,151419],{"class":105,"line":1687},[103,151416,14742],{"class":109},[103,151418,151016],{"class":162},[103,151420,151421],{"class":113},"(\n",[103,151423,151424,151427,151430],{"class":105,"line":1716},[103,151425,151426],{"class":113},"            data[",[103,151428,151429],{"class":218},"\"student_id\"",[103,151431,87826],{"class":113},[103,151433,151434,151436,151438],{"class":105,"line":1721},[103,151435,151426],{"class":113},[103,151437,62669],{"class":218},[103,151439,87826],{"class":113},[103,151441,151442,151444,151446],{"class":105,"line":1738},[103,151443,151426],{"class":113},[103,151445,69114],{"class":218},[103,151447,87826],{"class":113},[103,151449,151450,151452,151455],{"class":105,"line":1743},[103,151451,151426],{"class":113},[103,151453,151454],{"class":218},"\"score\"",[103,151456,87826],{"class":113},[103,151458,151459],{"class":105,"line":1748},[103,151460,38116],{"class":113},[103,151462,151463],{"class":105,"line":1753},[103,151464,2389],{"emptyLinePlaceholder":30},[103,151466,151467,151469,151471],{"class":105,"line":1767},[103,151468,30791],{"class":109},[103,151470,149963],{"class":162},[103,151472,30797],{"class":113},[103,151474,151475,151477,151479,151481,151483,151486,151488,151491,151493,151495,151497,151499,151501,151503,151505,151507],{"class":105,"line":1772},[103,151476,14742],{"class":109},[103,151478,149972],{"class":109},[103,151480,364],{"class":218},[103,151482,149434],{"class":162},[103,151484,151485],{"class":113},".student_id",[103,151487,1059],{"class":162},[103,151489,151490],{"class":162}," {self",[103,151492,80291],{"class":113},[103,151494,1059],{"class":162},[103,151496,151490],{"class":162},[103,151498,80303],{"class":113},[103,151500,1059],{"class":162},[103,151502,151490],{"class":162},[103,151504,149844],{"class":113},[103,151506,1059],{"class":162},[103,151508,25123],{"class":218},[103,151510,151511],{"class":105,"line":2566},[103,151512,2389],{"emptyLinePlaceholder":30},[103,151514,151515],{"class":105,"line":2580},[103,151516,2389],{"emptyLinePlaceholder":30},[103,151518,151519,151521,151523,151525,151528,151530,151532,151534,151536,151538,151540],{"class":105,"line":2588},[103,151520,149463],{"class":113},[103,151522,159],{"class":109},[103,151524,149867],{"class":113},[103,151526,151527],{"class":218},"\"001\"",[103,151529,12425],{"class":113},[103,151531,149870],{"class":218},[103,151533,12425],{"class":113},[103,151535,763],{"class":162},[103,151537,12425],{"class":113},[103,151539,1102],{"class":162},[103,151541,120],{"class":113},[103,151543,151544,151546],{"class":105,"line":2593},[103,151545,30405],{"class":162},[103,151547,151548],{"class":113},"(student.is_passed())\n",[103,151550,151551,151553],{"class":105,"line":2599},[103,151552,30405],{"class":162},[103,151554,151555],{"class":113},"(student.to_dict())\n",[14,151557,151558,101008,151561,151564],{},[100,151559,151560],{},"to_dict()",[100,151562,151563],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[45,151566,151568],{"id":151567},"_1116-易错点","11.16 易错点",[57,151570,151571,151577,151583,151588,151591,151594],{},[60,151572,151573,151574,28375],{},"类名推荐使用大驼峰，如 ",[100,151575,151576],{},"StudentManager",[60,151578,151579,151580,151582],{},"方法第一个参数必须写 ",[100,151581,30813],{},"，调用时不用传。",[60,151584,151585,151587],{},[100,151586,30819],{}," 不是普通方法，它在创建对象时自动执行。",[60,151589,151590],{},"私有属性不是绝对安全，只是约定和名称改写。",[60,151592,151593],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[60,151595,151596],{},"类中方法太多时，说明职责可能过重。",[45,151598,151600],{"id":151599},"_1117-本章练习","11.17 本章练习",[57,151602,151603,151609,151615,151620,151633],{},[60,151604,151605,151606,151608],{},"定义 ",[100,151607,149550],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[60,151610,151605,151611,151614],{},[100,151612,151613],{},"Account"," 类，实现存款、取款、查询余额。",[60,151616,151605,151617,151619],{},[100,151618,17216],{}," 类，计算圆的周长和面积。",[60,151621,151605,151622,326,151625,151628,151629,151632],{},[100,151623,151624],{},"Dog",[100,151626,151627],{},"Cat"," 类，并用同一个函数调用它们的 ",[100,151630,151631],{},"speak()"," 方法。",[60,151634,104356,151635,151637,151638,28375],{},[100,151636,151121],{}," 定义一个商品类 ",[100,151639,151640],{},"Product",[5116,151642,151643],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":24,"searchDepth":25,"depth":25,"links":151645},[151646,151647,151648,151649,151650,151651,151653,151654,151655,151656,151657,151658,151659,151663,151664,151665,151666],{"id":149314,"depth":25,"text":149315},{"id":149497,"depth":25,"text":149498},{"id":149561,"depth":25,"text":149562},{"id":149638,"depth":25,"text":149639},{"id":149737,"depth":25,"text":149738},{"id":149901,"depth":25,"text":151652},"11.6 str",{"id":150027,"depth":25,"text":150028},{"id":150293,"depth":25,"text":150294},{"id":150407,"depth":25,"text":150408},{"id":150562,"depth":25,"text":150563},{"id":150686,"depth":25,"text":150687},{"id":150802,"depth":25,"text":150803},{"id":150951,"depth":25,"text":150952,"children":151660},[151661,151662],{"id":150955,"depth":1168,"text":150956},{"id":151037,"depth":1168,"text":151038},{"id":151115,"depth":25,"text":151116},{"id":151230,"depth":25,"text":151231},{"id":151567,"depth":25,"text":151568},{"id":151599,"depth":25,"text":151600},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149306,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151673,"title":151674,"body":151675,"description":27,"extension":28,"meta":154988,"navigation":30,"path":154989,"seo":154990,"stem":154991,"__hash__":154992},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151676,"toc":154964},[151677,151680,151684,151687,151690,151719,151722,151730,151734,151738,151741,151764,151767,151773,151777,153223,153226,153247,153251,153254,153266,153269,153453,153456,153582,153585,153589,153593,153729,153733,153819,153823,153905,153909,153946,153950,154139,154143,154146,154376,154380,154383,154564,154567,154571,154574,154580,154583,154609,154613,154616,154630,154633,154658,154661,154675,154678,154695,154698,154715,154718,154735,154739,154765,154769,154792,154796,154799,154801,154807,154809,154830,154833,154839,154845,154849,154852,154928,154931,154935,154961],[10,151678,151674],{"id":151679},"_12-综合案例与复习路线",[45,151681,151683],{"id":151682},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151685,151686],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151688,151689],{},"一个合格的入门综合项目最好覆盖：",[57,151691,151692,151695,151698,151701,151704,151707,151710,151713,151716],{},[60,151693,151694],{},"输入输出。",[60,151696,151697],{},"判断和循环。",[60,151699,151700],{},"函数拆分。",[60,151702,151703],{},"列表、字典等容器。",[60,151705,151706],{},"文件持久化。",[60,151708,151709],{},"异常处理。",[60,151711,151712],{},"模块拆分。",[60,151714,151715],{},"可选：面向对象。",[60,151717,151718],{},"可选：数据可视化。",[14,151720,151721],{},"本章整理两个方向：",[57,151723,151724,151727],{},[60,151725,151726],{},"学生管理系统。",[60,151728,151729],{},"销售数据统计和可视化。",[45,151731,151733],{"id":151732},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[74,151735,151737],{"id":151736},"_1221-需求","12.2.1 需求",[14,151739,151740],{},"实现一个命令行学生管理系统：",[57,151742,151743,151746,151749,151752,151755,151758,151761],{},[60,151744,151745],{},"添加学生。",[60,151747,151748],{},"删除学生。",[60,151750,151751],{},"修改学生。",[60,151753,151754],{},"查询学生。",[60,151756,151757],{},"显示所有学生。",[60,151759,151760],{},"保存到 JSON 文件。",[60,151762,151763],{},"程序启动时自动读取 JSON 文件。",[14,151765,151766],{},"学生字段：",[94,151768,151771],{"className":151769,"code":151770,"language":5177,"meta":24},[5175],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[100,151772,151770],{"__ignoreMap":24},[45,151774,151776],{"id":151775},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[94,151778,151780],{"className":30368,"code":151779,"language":30370,"meta":24,"style":24},"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",[100,151781,151782,151788,151798,151802,151816,151820,151824,151833,151845,151851,151855,151861,151892,151902,151909,151920,151926,151930,151934,151944,151975,152001,152005,152009,152018,152029,152040,152051,152062,152073,152084,152095,152099,152103,152113,152125,152141,152148,152155,152159,152163,152173,152181,152188,152201,152211,152222,152226,152230,152239,152247,152253,152265,152273,152284,152288,152292,152301,152317,152321,152328,152339,152344,152348,152364,152379,152394,152398,152403,152411,152419,152427,152435,152439,152444,152455,152459,152463,152472,152487,152497,152501,152513,152524,152528,152532,152537,152541,152552,152556,152560,152569,152584,152592,152596,152608,152618,152622,152626,152641,152654,152667,152671,152684,152696,152708,152712,152716,152727,152731,152735,152744,152759,152767,152771,152783,152793,152797,152801,152806,152810,152814,152824,152830,152852,152871,152890,152909,152914,152918,152922,152931,152939,152950,152954,152958,152984,152994,152999,153003,153007,153015,153025,153029,153037,153042,153058,153062,153076,153081,153095,153100,153113,153118,153131,153136,153149,153154,153167,153178,153182,153188,153199,153203,153207,153219],{"__ignoreMap":24},[103,151783,151784,151786],{"class":105,"line":106},[103,151785,30382],{"class":109},[103,151787,147073],{"class":113},[103,151789,151790,151792,151794,151796],{"class":105,"line":25},[103,151791,30727],{"class":109},[103,151793,108301],{"class":113},[103,151795,30382],{"class":109},[103,151797,108306],{"class":113},[103,151799,151800],{"class":105,"line":1168},[103,151801,2389],{"emptyLinePlaceholder":30},[103,151803,151804,151807,151809,151811,151814],{"class":105,"line":1183},[103,151805,151806],{"class":162},"DATA_FILE",[103,151808,13554],{"class":109},[103,151810,108535],{"class":113},[103,151812,151813],{"class":218},"\"students.json\"",[103,151815,120],{"class":113},[103,151817,151818],{"class":105,"line":1189},[103,151819,2389],{"emptyLinePlaceholder":30},[103,151821,151822],{"class":105,"line":1203},[103,151823,2389],{"emptyLinePlaceholder":30},[103,151825,151826,151828,151831],{"class":105,"line":1209},[103,151827,31937],{"class":109},[103,151829,151830],{"class":1952}," load_students",[103,151832,31943],{"class":113},[103,151834,151835,151837,151839,151842],{"class":105,"line":1300},[103,151836,3090],{"class":109},[103,151838,38920],{"class":109},[103,151840,151841],{"class":162}," DATA_FILE",[103,151843,151844],{"class":113},".exists():\n",[103,151846,151847,151849],{"class":105,"line":1306},[103,151848,14742],{"class":109},[103,151850,51828],{"class":113},[103,151852,151853],{"class":105,"line":1318},[103,151854,2389],{"emptyLinePlaceholder":30},[103,151856,151857,151859],{"class":105,"line":1601},[103,151858,125766],{"class":109},[103,151860,3728],{"class":113},[103,151862,151863,151866,151868,151870,151872,151874,151876,151878,151880,151882,151884,151886,151888,151890],{"class":105,"line":1606},[103,151864,151865],{"class":109},"        with",[103,151867,146773],{"class":162},[103,151869,114],{"class":113},[103,151871,151806],{"class":162},[103,151873,12425],{"class":113},[103,151875,146783],{"class":218},[103,151877,12425],{"class":113},[103,151879,146788],{"class":5206},[103,151881,159],{"class":109},[103,151883,146793],{"class":218},[103,151885,13704],{"class":113},[103,151887,31373],{"class":109},[103,151889,148135],{"class":5206},[103,151891,3728],{"class":113},[103,151893,151894,151896,151898,151900],{"class":105,"line":1612},[103,151895,15722],{"class":109},[103,151897,148146],{"class":113},[103,151899,45344],{"class":5206},[103,151901,120],{"class":113},[103,151903,151904,151906],{"class":105,"line":1617},[103,151905,125794],{"class":109},[103,151907,151908],{"class":113}," json.JSONDecodeError:\n",[103,151910,151911,151913,151915,151918],{"class":105,"line":1631},[103,151912,32441],{"class":162},[103,151914,114],{"class":113},[103,151916,151917],{"class":218},"\"数据文件格式错误，已使用空数据启动\"",[103,151919,120],{"class":113},[103,151921,151922,151924],{"class":105,"line":1636},[103,151923,14742],{"class":109},[103,151925,51828],{"class":113},[103,151927,151928],{"class":105,"line":1642},[103,151929,2389],{"emptyLinePlaceholder":30},[103,151931,151932],{"class":105,"line":1663},[103,151933,2389],{"emptyLinePlaceholder":30},[103,151935,151936,151938,151941],{"class":105,"line":1668},[103,151937,31937],{"class":109},[103,151939,151940],{"class":1952}," save_students",[103,151942,151943],{"class":113},"(students):\n",[103,151945,151946,151948,151950,151952,151954,151956,151959,151961,151963,151965,151967,151969,151971,151973],{"class":105,"line":1682},[103,151947,34168],{"class":109},[103,151949,146773],{"class":162},[103,151951,114],{"class":113},[103,151953,151806],{"class":162},[103,151955,12425],{"class":113},[103,151957,151958],{"class":218},"\"w\"",[103,151960,12425],{"class":113},[103,151962,146788],{"class":5206},[103,151964,159],{"class":109},[103,151966,146793],{"class":218},[103,151968,13704],{"class":113},[103,151970,31373],{"class":109},[103,151972,148135],{"class":5206},[103,151974,3728],{"class":113},[103,151976,151977,151980,151982,151984,151986,151988,151990,151992,151995,151997,151999],{"class":105,"line":1687},[103,151978,151979],{"class":113},"        json.dump(students, ",[103,151981,45344],{"class":5206},[103,151983,12425],{"class":113},[103,151985,147119],{"class":5206},[103,151987,159],{"class":109},[103,151989,33977],{"class":162},[103,151991,12425],{"class":113},[103,151993,151994],{"class":5206},"indent",[103,151996,159],{"class":109},[103,151998,191],{"class":162},[103,152000,120],{"class":113},[103,152002,152003],{"class":105,"line":1716},[103,152004,2389],{"emptyLinePlaceholder":30},[103,152006,152007],{"class":105,"line":1721},[103,152008,2389],{"emptyLinePlaceholder":30},[103,152010,152011,152013,152016],{"class":105,"line":1738},[103,152012,31937],{"class":109},[103,152014,152015],{"class":1952}," show_menu",[103,152017,31943],{"class":113},[103,152019,152020,152022,152024,152027],{"class":105,"line":1743},[103,152021,31289],{"class":162},[103,152023,114],{"class":113},[103,152025,152026],{"class":218},"\"====== 学生管理系统 ======\"",[103,152028,120],{"class":113},[103,152030,152031,152033,152035,152038],{"class":105,"line":1748},[103,152032,31289],{"class":162},[103,152034,114],{"class":113},[103,152036,152037],{"class":218},"\"1. 添加学生\"",[103,152039,120],{"class":113},[103,152041,152042,152044,152046,152049],{"class":105,"line":1753},[103,152043,31289],{"class":162},[103,152045,114],{"class":113},[103,152047,152048],{"class":218},"\"2. 删除学生\"",[103,152050,120],{"class":113},[103,152052,152053,152055,152057,152060],{"class":105,"line":1767},[103,152054,31289],{"class":162},[103,152056,114],{"class":113},[103,152058,152059],{"class":218},"\"3. 修改学生\"",[103,152061,120],{"class":113},[103,152063,152064,152066,152068,152071],{"class":105,"line":1772},[103,152065,31289],{"class":162},[103,152067,114],{"class":113},[103,152069,152070],{"class":218},"\"4. 查询学生\"",[103,152072,120],{"class":113},[103,152074,152075,152077,152079,152082],{"class":105,"line":2566},[103,152076,31289],{"class":162},[103,152078,114],{"class":113},[103,152080,152081],{"class":218},"\"5. 显示所有学生\"",[103,152083,120],{"class":113},[103,152085,152086,152088,152090,152093],{"class":105,"line":2580},[103,152087,31289],{"class":162},[103,152089,114],{"class":113},[103,152091,152092],{"class":218},"\"0. 退出系统\"",[103,152094,120],{"class":113},[103,152096,152097],{"class":105,"line":2588},[103,152098,2389],{"emptyLinePlaceholder":30},[103,152100,152101],{"class":105,"line":2593},[103,152102,2389],{"emptyLinePlaceholder":30},[103,152104,152105,152107,152110],{"class":105,"line":2599},[103,152106,31937],{"class":109},[103,152108,152109],{"class":1952}," find_student",[103,152111,152112],{"class":113},"(students, student_id):\n",[103,152114,152115,152117,152120,152122],{"class":105,"line":2605},[103,152116,3190],{"class":109},[103,152118,152119],{"class":113}," student ",[103,152121,26033],{"class":109},[103,152123,152124],{"class":113}," students:\n",[103,152126,152127,152129,152132,152134,152136,152138],{"class":105,"line":2610},[103,152128,2486],{"class":109},[103,152130,152131],{"class":113}," student[",[103,152133,151429],{"class":218},[103,152135,4432],{"class":113},[103,152137,2938],{"class":109},[103,152139,152140],{"class":113}," student_id:\n",[103,152142,152143,152145],{"class":105,"line":7938},[103,152144,15722],{"class":109},[103,152146,152147],{"class":113}," student\n",[103,152149,152150,152152],{"class":105,"line":7962},[103,152151,4079],{"class":109},[103,152153,152154],{"class":162}," None\n",[103,152156,152157],{"class":105,"line":7967},[103,152158,2389],{"emptyLinePlaceholder":30},[103,152160,152161],{"class":105,"line":7973},[103,152162,2389],{"emptyLinePlaceholder":30},[103,152164,152165,152167,152170],{"class":105,"line":8000},[103,152166,31937],{"class":109},[103,152168,152169],{"class":1952}," input_int",[103,152171,152172],{"class":113},"(prompt):\n",[103,152174,152175,152177,152179],{"class":105,"line":8005},[103,152176,2240],{"class":109},[103,152178,95282],{"class":162},[103,152180,3728],{"class":113},[103,152182,152183,152186],{"class":105,"line":8011},[103,152184,152185],{"class":109},"        try",[103,152187,3728],{"class":113},[103,152189,152190,152192,152194,152196,152198],{"class":105,"line":8023},[103,152191,15722],{"class":109},[103,152193,2371],{"class":162},[103,152195,114],{"class":113},[103,152197,53811],{"class":162},[103,152199,152200],{"class":113},"(prompt))\n",[103,152202,152203,152206,152209],{"class":105,"line":8035},[103,152204,152205],{"class":109},"        except",[103,152207,152208],{"class":162}," ValueError",[103,152210,3728],{"class":113},[103,152212,152213,152215,152217,152220],{"class":105,"line":8047},[103,152214,34640],{"class":162},[103,152216,114],{"class":113},[103,152218,152219],{"class":218},"\"请输入整数\"",[103,152221,120],{"class":113},[103,152223,152224],{"class":105,"line":9706},[103,152225,2389],{"emptyLinePlaceholder":30},[103,152227,152228],{"class":105,"line":9731},[103,152229,2389],{"emptyLinePlaceholder":30},[103,152231,152232,152234,152237],{"class":105,"line":9754},[103,152233,31937],{"class":109},[103,152235,152236],{"class":1952}," input_float",[103,152238,152172],{"class":113},[103,152240,152241,152243,152245],{"class":105,"line":9778},[103,152242,2240],{"class":109},[103,152244,95282],{"class":162},[103,152246,3728],{"class":113},[103,152248,152249,152251],{"class":105,"line":9783},[103,152250,152185],{"class":109},[103,152252,3728],{"class":113},[103,152254,152255,152257,152259,152261,152263],{"class":105,"line":9788},[103,152256,15722],{"class":109},[103,152258,109787],{"class":162},[103,152260,114],{"class":113},[103,152262,53811],{"class":162},[103,152264,152200],{"class":113},[103,152266,152267,152269,152271],{"class":105,"line":9793},[103,152268,152205],{"class":109},[103,152270,152208],{"class":162},[103,152272,3728],{"class":113},[103,152274,152275,152277,152279,152282],{"class":105,"line":9802},[103,152276,34640],{"class":162},[103,152278,114],{"class":113},[103,152280,152281],{"class":218},"\"请输入数字\"",[103,152283,120],{"class":113},[103,152285,152286],{"class":105,"line":9807},[103,152287,2389],{"emptyLinePlaceholder":30},[103,152289,152290],{"class":105,"line":9813},[103,152291,2389],{"emptyLinePlaceholder":30},[103,152293,152294,152296,152299],{"class":105,"line":9834},[103,152295,31937],{"class":109},[103,152297,152298],{"class":1952}," add_student",[103,152300,151943],{"class":113},[103,152302,152303,152306,152308,152310,152312,152315],{"class":105,"line":9840},[103,152304,152305],{"class":113},"    student_id ",[103,152307,159],{"class":109},[103,152309,60595],{"class":162},[103,152311,114],{"class":113},[103,152313,152314],{"class":218},"\"请输入学号:\"",[103,152316,120],{"class":113},[103,152318,152319],{"class":105,"line":9854},[103,152320,2389],{"emptyLinePlaceholder":30},[103,152322,152323,152325],{"class":105,"line":9860},[103,152324,3090],{"class":109},[103,152326,152327],{"class":113}," find_student(students, student_id):\n",[103,152329,152330,152332,152334,152337],{"class":105,"line":9887},[103,152331,32441],{"class":162},[103,152333,114],{"class":113},[103,152335,152336],{"class":218},"\"学号已存在\"",[103,152338,120],{"class":113},[103,152340,152341],{"class":105,"line":9896},[103,152342,152343],{"class":109},"        return\n",[103,152345,152346],{"class":105,"line":9902},[103,152347,2389],{"emptyLinePlaceholder":30},[103,152349,152350,152353,152355,152357,152359,152362],{"class":105,"line":9910},[103,152351,152352],{"class":113},"    name ",[103,152354,159],{"class":109},[103,152356,60595],{"class":162},[103,152358,114],{"class":113},[103,152360,152361],{"class":218},"\"请输入姓名:\"",[103,152363,120],{"class":113},[103,152365,152366,152369,152371,152374,152377],{"class":105,"line":9915},[103,152367,152368],{"class":113},"    age ",[103,152370,159],{"class":109},[103,152372,152373],{"class":113}," input_int(",[103,152375,152376],{"class":218},"\"请输入年龄:\"",[103,152378,120],{"class":113},[103,152380,152381,152384,152386,152389,152392],{"class":105,"line":16594},[103,152382,152383],{"class":113},"    score ",[103,152385,159],{"class":109},[103,152387,152388],{"class":113}," input_float(",[103,152390,152391],{"class":218},"\"请输入成绩:\"",[103,152393,120],{"class":113},[103,152395,152396],{"class":105,"line":16600},[103,152397,2389],{"emptyLinePlaceholder":30},[103,152399,152400],{"class":105,"line":16623},[103,152401,152402],{"class":113},"    students.append({\n",[103,152404,152405,152408],{"class":105,"line":16629},[103,152406,152407],{"class":218},"        \"student_id\"",[103,152409,152410],{"class":113},": student_id,\n",[103,152412,152413,152416],{"class":105,"line":16652},[103,152414,152415],{"class":218},"        \"name\"",[103,152417,152418],{"class":113},": name,\n",[103,152420,152421,152424],{"class":105,"line":16666},[103,152422,152423],{"class":218},"        \"age\"",[103,152425,152426],{"class":113},": age,\n",[103,152428,152429,152432],{"class":105,"line":16686},[103,152430,152431],{"class":218},"        \"score\"",[103,152433,152434],{"class":113},": score,\n",[103,152436,152437],{"class":105,"line":16692},[103,152438,33451],{"class":113},[103,152440,152441],{"class":105,"line":16703},[103,152442,152443],{"class":113},"    save_students(students)\n",[103,152445,152446,152448,152450,152453],{"class":105,"line":16726},[103,152447,31289],{"class":162},[103,152449,114],{"class":113},[103,152451,152452],{"class":218},"\"添加成功\"",[103,152454,120],{"class":113},[103,152456,152457],{"class":105,"line":16748},[103,152458,2389],{"emptyLinePlaceholder":30},[103,152460,152461],{"class":105,"line":16753},[103,152462,2389],{"emptyLinePlaceholder":30},[103,152464,152465,152467,152470],{"class":105,"line":16759},[103,152466,31937],{"class":109},[103,152468,152469],{"class":1952}," delete_student",[103,152471,151943],{"class":113},[103,152473,152474,152476,152478,152480,152482,152485],{"class":105,"line":16773},[103,152475,152305],{"class":113},[103,152477,159],{"class":109},[103,152479,60595],{"class":162},[103,152481,114],{"class":113},[103,152483,152484],{"class":218},"\"请输入要删除的学号:\"",[103,152486,120],{"class":113},[103,152488,152489,152492,152494],{"class":105,"line":16786},[103,152490,152491],{"class":113},"    student ",[103,152493,159],{"class":109},[103,152495,152496],{"class":113}," find_student(students, student_id)\n",[103,152498,152499],{"class":105,"line":16791},[103,152500,2389],{"emptyLinePlaceholder":30},[103,152502,152503,152505,152507,152509,152511],{"class":105,"line":16805},[103,152504,3090],{"class":109},[103,152506,152119],{"class":113},[103,152508,38917],{"class":109},[103,152510,38923],{"class":162},[103,152512,3728],{"class":113},[103,152514,152515,152517,152519,152522],{"class":105,"line":16810},[103,152516,32441],{"class":162},[103,152518,114],{"class":113},[103,152520,152521],{"class":218},"\"学生不存在\"",[103,152523,120],{"class":113},[103,152525,152526],{"class":105,"line":16816},[103,152527,152343],{"class":109},[103,152529,152530],{"class":105,"line":16821},[103,152531,2389],{"emptyLinePlaceholder":30},[103,152533,152534],{"class":105,"line":16835},[103,152535,152536],{"class":113},"    students.remove(student)\n",[103,152538,152539],{"class":105,"line":16840},[103,152540,152443],{"class":113},[103,152542,152543,152545,152547,152550],{"class":105,"line":16845},[103,152544,31289],{"class":162},[103,152546,114],{"class":113},[103,152548,152549],{"class":218},"\"删除成功\"",[103,152551,120],{"class":113},[103,152553,152554],{"class":105,"line":16859},[103,152555,2389],{"emptyLinePlaceholder":30},[103,152557,152558],{"class":105,"line":16871},[103,152559,2389],{"emptyLinePlaceholder":30},[103,152561,152562,152564,152567],{"class":105,"line":16876},[103,152563,31937],{"class":109},[103,152565,152566],{"class":1952}," update_student",[103,152568,151943],{"class":113},[103,152570,152571,152573,152575,152577,152579,152582],{"class":105,"line":16889},[103,152572,152305],{"class":113},[103,152574,159],{"class":109},[103,152576,60595],{"class":162},[103,152578,114],{"class":113},[103,152580,152581],{"class":218},"\"请输入要修改的学号:\"",[103,152583,120],{"class":113},[103,152585,152586,152588,152590],{"class":105,"line":16894},[103,152587,152491],{"class":113},[103,152589,159],{"class":109},[103,152591,152496],{"class":113},[103,152593,152594],{"class":105,"line":16899},[103,152595,2389],{"emptyLinePlaceholder":30},[103,152597,152598,152600,152602,152604,152606],{"class":105,"line":16904},[103,152599,3090],{"class":109},[103,152601,152119],{"class":113},[103,152603,38917],{"class":109},[103,152605,38923],{"class":162},[103,152607,3728],{"class":113},[103,152609,152610,152612,152614,152616],{"class":105,"line":16917},[103,152611,32441],{"class":162},[103,152613,114],{"class":113},[103,152615,152521],{"class":218},[103,152617,120],{"class":113},[103,152619,152620],{"class":105,"line":16922},[103,152621,152343],{"class":109},[103,152623,152624],{"class":105,"line":32623},[103,152625,2389],{"emptyLinePlaceholder":30},[103,152627,152628,152630,152632,152634,152636,152639],{"class":105,"line":32629},[103,152629,152352],{"class":113},[103,152631,159],{"class":109},[103,152633,60595],{"class":162},[103,152635,114],{"class":113},[103,152637,152638],{"class":218},"\"请输入新姓名:\"",[103,152640,120],{"class":113},[103,152642,152643,152645,152647,152649,152652],{"class":105,"line":32635},[103,152644,152368],{"class":113},[103,152646,159],{"class":109},[103,152648,152373],{"class":113},[103,152650,152651],{"class":218},"\"请输入新年龄:\"",[103,152653,120],{"class":113},[103,152655,152656,152658,152660,152662,152665],{"class":105,"line":32641},[103,152657,152383],{"class":113},[103,152659,159],{"class":109},[103,152661,152388],{"class":113},[103,152663,152664],{"class":218},"\"请输入新成绩:\"",[103,152666,120],{"class":113},[103,152668,152669],{"class":105,"line":32647},[103,152670,2389],{"emptyLinePlaceholder":30},[103,152672,152673,152676,152678,152680,152682],{"class":105,"line":32658},[103,152674,152675],{"class":113},"    student[",[103,152677,62669],{"class":218},[103,152679,4432],{"class":113},[103,152681,159],{"class":109},[103,152683,149777],{"class":113},[103,152685,152686,152688,152690,152692,152694],{"class":105,"line":32664},[103,152687,152675],{"class":113},[103,152689,69114],{"class":218},[103,152691,4432],{"class":113},[103,152693,159],{"class":109},[103,152695,149789],{"class":113},[103,152697,152698,152700,152702,152704,152706],{"class":105,"line":32684},[103,152699,152675],{"class":113},[103,152701,151454],{"class":218},[103,152703,4432],{"class":113},[103,152705,159],{"class":109},[103,152707,1568],{"class":113},[103,152709,152710],{"class":105,"line":32690},[103,152711,2389],{"emptyLinePlaceholder":30},[103,152713,152714],{"class":105,"line":32701},[103,152715,152443],{"class":113},[103,152717,152718,152720,152722,152725],{"class":105,"line":32707},[103,152719,31289],{"class":162},[103,152721,114],{"class":113},[103,152723,152724],{"class":218},"\"修改成功\"",[103,152726,120],{"class":113},[103,152728,152729],{"class":105,"line":32713},[103,152730,2389],{"emptyLinePlaceholder":30},[103,152732,152733],{"class":105,"line":32719},[103,152734,2389],{"emptyLinePlaceholder":30},[103,152736,152737,152739,152742],{"class":105,"line":32725},[103,152738,31937],{"class":109},[103,152740,152741],{"class":1952}," query_student",[103,152743,151943],{"class":113},[103,152745,152746,152748,152750,152752,152754,152757],{"class":105,"line":32731},[103,152747,152305],{"class":113},[103,152749,159],{"class":109},[103,152751,60595],{"class":162},[103,152753,114],{"class":113},[103,152755,152756],{"class":218},"\"请输入要查询的学号:\"",[103,152758,120],{"class":113},[103,152760,152761,152763,152765],{"class":105,"line":32737},[103,152762,152491],{"class":113},[103,152764,159],{"class":109},[103,152766,152496],{"class":113},[103,152768,152769],{"class":105,"line":32743},[103,152770,2389],{"emptyLinePlaceholder":30},[103,152772,152773,152775,152777,152779,152781],{"class":105,"line":32763},[103,152774,3090],{"class":109},[103,152776,152119],{"class":113},[103,152778,38917],{"class":109},[103,152780,38923],{"class":162},[103,152782,3728],{"class":113},[103,152784,152785,152787,152789,152791],{"class":105,"line":32769},[103,152786,32441],{"class":162},[103,152788,114],{"class":113},[103,152790,152521],{"class":218},[103,152792,120],{"class":113},[103,152794,152795],{"class":105,"line":32785},[103,152796,152343],{"class":109},[103,152798,152799],{"class":105,"line":32791},[103,152800,2389],{"emptyLinePlaceholder":30},[103,152802,152803],{"class":105,"line":32805},[103,152804,152805],{"class":113},"    print_student(student)\n",[103,152807,152808],{"class":105,"line":32811},[103,152809,2389],{"emptyLinePlaceholder":30},[103,152811,152812],{"class":105,"line":32826},[103,152813,2389],{"emptyLinePlaceholder":30},[103,152815,152816,152818,152821],{"class":105,"line":32832},[103,152817,31937],{"class":109},[103,152819,152820],{"class":1952}," print_student",[103,152822,152823],{"class":113},"(student):\n",[103,152825,152826,152828],{"class":105,"line":32841},[103,152827,31289],{"class":162},[103,152829,151421],{"class":113},[103,152831,152832,152835,152837,152839,152842,152845,152847,152850],{"class":105,"line":32847},[103,152833,152834],{"class":109},"        f",[103,152836,364],{"class":218},[103,152838,1009],{"class":162},[103,152840,152841],{"class":113},"student[",[103,152843,152844],{"class":218},"'student_id'",[103,152846,1053],{"class":113},[103,152848,152849],{"class":162},"}\\t",[103,152851,25123],{"class":218},[103,152853,152854,152856,152858,152860,152862,152865,152867,152869],{"class":105,"line":32856},[103,152855,152834],{"class":109},[103,152857,364],{"class":218},[103,152859,1009],{"class":162},[103,152861,152841],{"class":113},[103,152863,152864],{"class":218},"'name'",[103,152866,1053],{"class":113},[103,152868,152849],{"class":162},[103,152870,25123],{"class":218},[103,152872,152873,152875,152877,152879,152881,152884,152886,152888],{"class":105,"line":32862},[103,152874,152834],{"class":109},[103,152876,364],{"class":218},[103,152878,1009],{"class":162},[103,152880,152841],{"class":113},[103,152882,152883],{"class":218},"'age'",[103,152885,1053],{"class":113},[103,152887,152849],{"class":162},[103,152889,25123],{"class":218},[103,152891,152892,152894,152896,152898,152900,152903,152905,152907],{"class":105,"line":32868},[103,152893,152834],{"class":109},[103,152895,364],{"class":218},[103,152897,1009],{"class":162},[103,152899,152841],{"class":113},[103,152901,152902],{"class":218},"'score'",[103,152904,1053],{"class":113},[103,152906,1059],{"class":162},[103,152908,25123],{"class":218},[103,152910,152911],{"class":105,"line":32877},[103,152912,152913],{"class":113},"    )\n",[103,152915,152916],{"class":105,"line":32883},[103,152917,2389],{"emptyLinePlaceholder":30},[103,152919,152920],{"class":105,"line":32894},[103,152921,2389],{"emptyLinePlaceholder":30},[103,152923,152924,152926,152929],{"class":105,"line":32900},[103,152925,31937],{"class":109},[103,152927,152928],{"class":1952}," show_all_students",[103,152930,151943],{"class":113},[103,152932,152933,152935,152937],{"class":105,"line":32919},[103,152934,3090],{"class":109},[103,152936,38920],{"class":109},[103,152938,152124],{"class":113},[103,152940,152941,152943,152945,152948],{"class":105,"line":32925},[103,152942,32441],{"class":162},[103,152944,114],{"class":113},[103,152946,152947],{"class":218},"\"暂无学生\"",[103,152949,120],{"class":113},[103,152951,152952],{"class":105,"line":32936},[103,152953,152343],{"class":109},[103,152955,152956],{"class":105,"line":32942},[103,152957,2389],{"emptyLinePlaceholder":30},[103,152959,152960,152962,152964,152967,152969,152972,152974,152977,152979,152982],{"class":105,"line":32962},[103,152961,31289],{"class":162},[103,152963,114],{"class":113},[103,152965,152966],{"class":218},"\"学号",[103,152968,1219],{"class":162},[103,152970,152971],{"class":218},"姓名",[103,152973,1219],{"class":162},[103,152975,152976],{"class":218},"年龄",[103,152978,1219],{"class":162},[103,152980,152981],{"class":218},"成绩\"",[103,152983,120],{"class":113},[103,152985,152986,152988,152990,152992],{"class":105,"line":32978},[103,152987,3190],{"class":109},[103,152989,152119],{"class":113},[103,152991,26033],{"class":109},[103,152993,152124],{"class":113},[103,152995,152996],{"class":105,"line":32984},[103,152997,152998],{"class":113},"        print_student(student)\n",[103,153000,153001],{"class":105,"line":32998},[103,153002,2389],{"emptyLinePlaceholder":30},[103,153004,153005],{"class":105,"line":33004},[103,153006,2389],{"emptyLinePlaceholder":30},[103,153008,153009,153011,153013],{"class":105,"line":33010},[103,153010,31937],{"class":109},[103,153012,1962],{"class":1952},[103,153014,31943],{"class":113},[103,153016,153017,153020,153022],{"class":105,"line":33021},[103,153018,153019],{"class":113},"    students ",[103,153021,159],{"class":109},[103,153023,153024],{"class":113}," load_students()\n",[103,153026,153027],{"class":105,"line":33027},[103,153028,2389],{"emptyLinePlaceholder":30},[103,153030,153031,153033,153035],{"class":105,"line":33033},[103,153032,2240],{"class":109},[103,153034,95282],{"class":162},[103,153036,3728],{"class":113},[103,153038,153039],{"class":105,"line":33043},[103,153040,153041],{"class":113},"        show_menu()\n",[103,153043,153044,153047,153049,153051,153053,153056],{"class":105,"line":33049},[103,153045,153046],{"class":113},"        choice ",[103,153048,159],{"class":109},[103,153050,60595],{"class":162},[103,153052,114],{"class":113},[103,153054,153055],{"class":218},"\"请输入操作:\"",[103,153057,120],{"class":113},[103,153059,153060],{"class":105,"line":33060},[103,153061,2389],{"emptyLinePlaceholder":30},[103,153063,153064,153066,153069,153071,153074],{"class":105,"line":33066},[103,153065,2486],{"class":109},[103,153067,153068],{"class":113}," choice ",[103,153070,2938],{"class":109},[103,153072,153073],{"class":218}," \"1\"",[103,153075,3728],{"class":113},[103,153077,153078],{"class":105,"line":33076},[103,153079,153080],{"class":113},"            add_student(students)\n",[103,153082,153083,153086,153088,153090,153093],{"class":105,"line":33081},[103,153084,153085],{"class":109},"        elif",[103,153087,153068],{"class":113},[103,153089,2938],{"class":109},[103,153091,153092],{"class":218}," \"2\"",[103,153094,3728],{"class":113},[103,153096,153097],{"class":105,"line":33087},[103,153098,153099],{"class":113},"            delete_student(students)\n",[103,153101,153102,153104,153106,153108,153111],{"class":105,"line":33136},[103,153103,153085],{"class":109},[103,153105,153068],{"class":113},[103,153107,2938],{"class":109},[103,153109,153110],{"class":218}," \"3\"",[103,153112,3728],{"class":113},[103,153114,153115],{"class":105,"line":33183},[103,153116,153117],{"class":113},"            update_student(students)\n",[103,153119,153120,153122,153124,153126,153129],{"class":105,"line":33188},[103,153121,153085],{"class":109},[103,153123,153068],{"class":113},[103,153125,2938],{"class":109},[103,153127,153128],{"class":218}," \"4\"",[103,153130,3728],{"class":113},[103,153132,153133],{"class":105,"line":33194},[103,153134,153135],{"class":113},"            query_student(students)\n",[103,153137,153138,153140,153142,153144,153147],{"class":105,"line":33213},[103,153139,153085],{"class":109},[103,153141,153068],{"class":113},[103,153143,2938],{"class":109},[103,153145,153146],{"class":218}," \"5\"",[103,153148,3728],{"class":113},[103,153150,153151],{"class":105,"line":33219},[103,153152,153153],{"class":113},"            show_all_students(students)\n",[103,153155,153156,153158,153160,153162,153165],{"class":105,"line":33239},[103,153157,153085],{"class":109},[103,153159,153068],{"class":113},[103,153161,2938],{"class":109},[103,153163,153164],{"class":218}," \"0\"",[103,153166,3728],{"class":113},[103,153168,153169,153171,153173,153176],{"class":105,"line":33245},[103,153170,34640],{"class":162},[103,153172,114],{"class":113},[103,153174,153175],{"class":218},"\"退出系统\"",[103,153177,120],{"class":113},[103,153179,153180],{"class":105,"line":33251},[103,153181,115088],{"class":109},[103,153183,153184,153186],{"class":105,"line":33261},[103,153185,2523],{"class":109},[103,153187,3728],{"class":113},[103,153189,153190,153192,153194,153197],{"class":105,"line":33266},[103,153191,34640],{"class":162},[103,153193,114],{"class":113},[103,153195,153196],{"class":218},"\"输入错误\"",[103,153198,120],{"class":113},[103,153200,153201],{"class":105,"line":33272},[103,153202,2389],{"emptyLinePlaceholder":30},[103,153204,153205],{"class":105,"line":33288},[103,153206,2389],{"emptyLinePlaceholder":30},[103,153208,153209,153211,153213,153215,153217],{"class":105,"line":33333},[103,153210,1520],{"class":109},[103,153212,31210],{"class":162},[103,153214,101549],{"class":109},[103,153216,101552],{"class":218},[103,153218,3728],{"class":113},[103,153220,153221],{"class":105,"line":33339},[103,153222,101559],{"class":113},[14,153224,153225],{},"这个项目串联了：",[57,153227,153228,153231,153234,153237,153240,153242],{},[60,153229,153230],{},"菜单循环。",[60,153232,153233],{},"函数封装。",[60,153235,153236],{},"列表字典。",[60,153238,153239],{},"JSON 读写。",[60,153241,151709],{},[60,153243,153244,28375],{},[100,153245,153246],{},"if __name__ == \"__main__\"",[45,153248,153250],{"id":153249},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153252,153253],{},"可以进一步拆成两个类：",[57,153255,153256,153261],{},[60,153257,153258,153260],{},[100,153259,149550],{},"：表示单个学生。",[60,153262,153263,153265],{},[100,153264,151576],{},"：负责学生增删改查和文件保存。",[14,153267,153268],{},"示意代码：",[94,153270,153272],{"className":30368,"code":153271,"language":30370,"meta":24,"style":24},"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",[100,153273,153274,153284,153288,153292,153296,153304,153311,153317,153323,153329,153333,153341,153347,153357,153367,153377,153387,153391,153395,153401,153409,153417,153425,153433,153441,153449],{"__ignoreMap":24},[103,153275,153276,153278,153280,153282],{"class":105,"line":106},[103,153277,30727],{"class":109},[103,153279,151134],{"class":113},[103,153281,30382],{"class":109},[103,153283,151139],{"class":113},[103,153285,153286],{"class":105,"line":25},[103,153287,2389],{"emptyLinePlaceholder":30},[103,153289,153290],{"class":105,"line":1168},[103,153291,2389],{"emptyLinePlaceholder":30},[103,153293,153294],{"class":105,"line":1183},[103,153295,151152],{"class":1952},[103,153297,153298,153300,153302],{"class":105,"line":1189},[103,153299,14684],{"class":109},[103,153301,7888],{"class":1952},[103,153303,3728],{"class":113},[103,153305,153306,153309],{"class":105,"line":1203},[103,153307,153308],{"class":113},"    student_id: ",[103,153310,151168],{"class":162},[103,153312,153313,153315],{"class":105,"line":1209},[103,153314,151165],{"class":113},[103,153316,151168],{"class":162},[103,153318,153319,153321],{"class":105,"line":1300},[103,153320,151173],{"class":113},[103,153322,151176],{"class":162},[103,153324,153325,153327],{"class":105,"line":1306},[103,153326,151181],{"class":113},[103,153328,151184],{"class":162},[103,153330,153331],{"class":105,"line":1318},[103,153332,2389],{"emptyLinePlaceholder":30},[103,153334,153335,153337,153339],{"class":105,"line":1601},[103,153336,30791],{"class":109},[103,153338,151332],{"class":1952},[103,153340,30797],{"class":113},[103,153342,153343,153345],{"class":105,"line":1606},[103,153344,14742],{"class":109},[103,153346,15562],{"class":113},[103,153348,153349,153351,153353,153355],{"class":105,"line":1612},[103,153350,151345],{"class":218},[103,153352,51427],{"class":113},[103,153354,30813],{"class":162},[103,153356,151352],{"class":113},[103,153358,153359,153361,153363,153365],{"class":105,"line":1617},[103,153360,151357],{"class":218},[103,153362,51427],{"class":113},[103,153364,30813],{"class":162},[103,153366,151364],{"class":113},[103,153368,153369,153371,153373,153375],{"class":105,"line":1631},[103,153370,151369],{"class":218},[103,153372,51427],{"class":113},[103,153374,30813],{"class":162},[103,153376,151376],{"class":113},[103,153378,153379,153381,153383,153385],{"class":105,"line":1636},[103,153380,151381],{"class":218},[103,153382,51427],{"class":113},[103,153384,30813],{"class":162},[103,153386,151388],{"class":113},[103,153388,153389],{"class":105,"line":1642},[103,153390,2518],{"class":113},[103,153392,153393],{"class":105,"line":1663},[103,153394,2389],{"emptyLinePlaceholder":30},[103,153396,153397,153399],{"class":105,"line":1668},[103,153398,150996],{"class":1952},[103,153400,150999],{"class":162},[103,153402,153403,153405,153407],{"class":105,"line":1682},[103,153404,30791],{"class":109},[103,153406,151409],{"class":1952},[103,153408,151412],{"class":113},[103,153410,153411,153413,153415],{"class":105,"line":1687},[103,153412,14742],{"class":109},[103,153414,151016],{"class":162},[103,153416,151421],{"class":113},[103,153418,153419,153421,153423],{"class":105,"line":1716},[103,153420,151426],{"class":113},[103,153422,151429],{"class":218},[103,153424,87826],{"class":113},[103,153426,153427,153429,153431],{"class":105,"line":1721},[103,153428,151426],{"class":113},[103,153430,62669],{"class":218},[103,153432,87826],{"class":113},[103,153434,153435,153437,153439],{"class":105,"line":1738},[103,153436,151426],{"class":113},[103,153438,69114],{"class":218},[103,153440,87826],{"class":113},[103,153442,153443,153445,153447],{"class":105,"line":1743},[103,153444,151426],{"class":113},[103,153446,151454],{"class":218},[103,153448,87826],{"class":113},[103,153450,153451],{"class":105,"line":1748},[103,153452,38116],{"class":113},[14,153454,153455],{},"管理器示意：",[94,153457,153459],{"className":30368,"code":153458,"language":30370,"meta":24,"style":24},"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",[100,153460,153461,153470,153478,153489,153493,153503,153516,153527,153534,153540,153544,153553,153562,153568,153575],{"__ignoreMap":24},[103,153462,153463,153465,153468],{"class":105,"line":106},[103,153464,14684],{"class":109},[103,153466,153467],{"class":1952}," StudentManager",[103,153469,3728],{"class":113},[103,153471,153472,153474,153476],{"class":105,"line":25},[103,153473,30791],{"class":109},[103,153475,30794],{"class":162},[103,153477,30797],{"class":113},[103,153479,153480,153482,153485,153487],{"class":105,"line":1168},[103,153481,30835],{"class":162},[103,153483,153484],{"class":113},".students ",[103,153486,159],{"class":109},[103,153488,51828],{"class":113},[103,153490,153491],{"class":105,"line":1183},[103,153492,2389],{"emptyLinePlaceholder":30},[103,153494,153495,153497,153500],{"class":105,"line":1189},[103,153496,30791],{"class":109},[103,153498,153499],{"class":1952}," find_by_id",[103,153501,153502],{"class":113},"(self, student_id):\n",[103,153504,153505,153507,153509,153511,153513],{"class":105,"line":1203},[103,153506,3392],{"class":109},[103,153508,152119],{"class":113},[103,153510,26033],{"class":109},[103,153512,38863],{"class":162},[103,153514,153515],{"class":113},".students:\n",[103,153517,153518,153520,153523,153525],{"class":105,"line":1209},[103,153519,4631],{"class":109},[103,153521,153522],{"class":113}," student.student_id ",[103,153524,2938],{"class":109},[103,153526,152140],{"class":113},[103,153528,153529,153532],{"class":105,"line":1300},[103,153530,153531],{"class":109},"                return",[103,153533,152147],{"class":113},[103,153535,153536,153538],{"class":105,"line":1306},[103,153537,14742],{"class":109},[103,153539,152154],{"class":162},[103,153541,153542],{"class":105,"line":1318},[103,153543,2389],{"emptyLinePlaceholder":30},[103,153545,153546,153548,153550],{"class":105,"line":1601},[103,153547,30791],{"class":109},[103,153549,5199],{"class":1952},[103,153551,153552],{"class":113},"(self, student):\n",[103,153554,153555,153557,153559],{"class":105,"line":1606},[103,153556,2486],{"class":109},[103,153558,38863],{"class":162},[103,153560,153561],{"class":113},".find_by_id(student.student_id):\n",[103,153563,153564,153566],{"class":105,"line":1612},[103,153565,15722],{"class":109},[103,153567,125789],{"class":162},[103,153569,153570,153572],{"class":105,"line":1617},[103,153571,30835],{"class":162},[103,153573,153574],{"class":113},".students.append(student)\n",[103,153576,153577,153579],{"class":105,"line":1631},[103,153578,14742],{"class":109},[103,153580,153581],{"class":162}," True\n",[14,153583,153584],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[45,153586,153588],{"id":153587},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[74,153590,153592],{"id":153591},"_1251-数据结构","12.5.1 数据结构",[94,153594,153596],{"className":30368,"code":153595,"language":30370,"meta":24,"style":24},"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",[100,153597,153598,153606,153637,153667,153696,153725],{"__ignoreMap":24},[103,153599,153600,153602,153604],{"class":105,"line":106},[103,153601,148447],{"class":113},[103,153603,159],{"class":109},[103,153605,55437],{"class":113},[103,153607,153608,153610,153612,153614,153616,153618,153621,153623,153626,153628,153630,153632,153635],{"class":105,"line":25},[103,153609,148367],{"class":113},[103,153611,147979],{"class":218},[103,153613,51427],{"class":113},[103,153615,148590],{"class":218},[103,153617,12425],{"class":113},[103,153619,153620],{"class":218},"\"category\"",[103,153622,51427],{"class":113},[103,153624,153625],{"class":218},"\"手机\"",[103,153627,12425],{"class":113},[103,153629,84074],{"class":218},[103,153631,51427],{"class":113},[103,153633,153634],{"class":162},"12000",[103,153636,4919],{"class":113},[103,153638,153639,153641,153643,153645,153647,153649,153651,153653,153656,153658,153660,153662,153665],{"class":105,"line":1168},[103,153640,148367],{"class":113},[103,153642,147979],{"class":218},[103,153644,51427],{"class":113},[103,153646,148590],{"class":218},[103,153648,12425],{"class":113},[103,153650,153620],{"class":218},[103,153652,51427],{"class":113},[103,153654,153655],{"class":218},"\"电脑\"",[103,153657,12425],{"class":113},[103,153659,84074],{"class":218},[103,153661,51427],{"class":113},[103,153663,153664],{"class":162},"18000",[103,153666,4919],{"class":113},[103,153668,153669,153671,153673,153675,153677,153679,153681,153683,153685,153687,153689,153691,153694],{"class":105,"line":1183},[103,153670,148367],{"class":113},[103,153672,147979],{"class":218},[103,153674,51427],{"class":113},[103,153676,148611],{"class":218},[103,153678,12425],{"class":113},[103,153680,153620],{"class":218},[103,153682,51427],{"class":113},[103,153684,153625],{"class":218},[103,153686,12425],{"class":113},[103,153688,84074],{"class":218},[103,153690,51427],{"class":113},[103,153692,153693],{"class":162},"15000",[103,153695,4919],{"class":113},[103,153697,153698,153700,153702,153704,153706,153708,153710,153712,153714,153716,153718,153720,153723],{"class":105,"line":1189},[103,153699,148367],{"class":113},[103,153701,147979],{"class":218},[103,153703,51427],{"class":113},[103,153705,148611],{"class":218},[103,153707,12425],{"class":113},[103,153709,153620],{"class":218},[103,153711,51427],{"class":113},[103,153713,153655],{"class":218},[103,153715,12425],{"class":113},[103,153717,84074],{"class":218},[103,153719,51427],{"class":113},[103,153721,153722],{"class":162},"16000",[103,153724,4919],{"class":113},[103,153726,153727],{"class":105,"line":1203},[103,153728,33236],{"class":113},[74,153730,153732],{"id":153731},"_1252-按日期统计","12.5.2 按日期统计",[94,153734,153736],{"className":30368,"code":153735,"language":30370,"meta":24,"style":24},"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",[100,153737,153738,153747,153751,153762,153776,153789,153808,153812],{"__ignoreMap":24},[103,153739,153740,153743,153745],{"class":105,"line":106},[103,153741,153742],{"class":113},"daily_total ",[103,153744,159],{"class":109},[103,153746,87858],{"class":113},[103,153748,153749],{"class":105,"line":25},[103,153750,2389],{"emptyLinePlaceholder":30},[103,153752,153753,153755,153757,153759],{"class":105,"line":1168},[103,153754,3014],{"class":109},[103,153756,148191],{"class":113},[103,153758,26033],{"class":109},[103,153760,153761],{"class":113}," sales:\n",[103,153763,153764,153767,153769,153772,153774],{"class":105,"line":1183},[103,153765,153766],{"class":113},"    date ",[103,153768,159],{"class":109},[103,153770,153771],{"class":113}," item[",[103,153773,147979],{"class":218},[103,153775,33236],{"class":113},[103,153777,153778,153781,153783,153785,153787],{"class":105,"line":1189},[103,153779,153780],{"class":113},"    amount ",[103,153782,159],{"class":109},[103,153784,153771],{"class":113},[103,153786,84074],{"class":218},[103,153788,33236],{"class":113},[103,153790,153791,153794,153796,153799,153801,153803,153805],{"class":105,"line":1203},[103,153792,153793],{"class":113},"    daily_total[date] ",[103,153795,159],{"class":109},[103,153797,153798],{"class":113}," daily_total.get(date, ",[103,153800,305],{"class":162},[103,153802,13704],{"class":113},[103,153804,594],{"class":109},[103,153806,153807],{"class":113}," amount\n",[103,153809,153810],{"class":105,"line":1209},[103,153811,2389],{"emptyLinePlaceholder":30},[103,153813,153814,153816],{"class":105,"line":1300},[103,153815,30405],{"class":162},[103,153817,153818],{"class":113},"(daily_total)\n",[74,153820,153822],{"id":153821},"_1253-按类别统计","12.5.3 按类别统计",[94,153824,153826],{"className":30368,"code":153825,"language":30370,"meta":24,"style":24},"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",[100,153827,153828,153837,153841,153851,153864,153876,153894,153898],{"__ignoreMap":24},[103,153829,153830,153833,153835],{"class":105,"line":106},[103,153831,153832],{"class":113},"category_total ",[103,153834,159],{"class":109},[103,153836,87858],{"class":113},[103,153838,153839],{"class":105,"line":25},[103,153840,2389],{"emptyLinePlaceholder":30},[103,153842,153843,153845,153847,153849],{"class":105,"line":1168},[103,153844,3014],{"class":109},[103,153846,148191],{"class":113},[103,153848,26033],{"class":109},[103,153850,153761],{"class":113},[103,153852,153853,153856,153858,153860,153862],{"class":105,"line":1183},[103,153854,153855],{"class":113},"    category ",[103,153857,159],{"class":109},[103,153859,153771],{"class":113},[103,153861,153620],{"class":218},[103,153863,33236],{"class":113},[103,153865,153866,153868,153870,153872,153874],{"class":105,"line":1189},[103,153867,153780],{"class":113},[103,153869,159],{"class":109},[103,153871,153771],{"class":113},[103,153873,84074],{"class":218},[103,153875,33236],{"class":113},[103,153877,153878,153881,153883,153886,153888,153890,153892],{"class":105,"line":1203},[103,153879,153880],{"class":113},"    category_total[category] ",[103,153882,159],{"class":109},[103,153884,153885],{"class":113}," category_total.get(category, ",[103,153887,305],{"class":162},[103,153889,13704],{"class":113},[103,153891,594],{"class":109},[103,153893,153807],{"class":113},[103,153895,153896],{"class":105,"line":1209},[103,153897,2389],{"emptyLinePlaceholder":30},[103,153899,153900,153902],{"class":105,"line":1300},[103,153901,30405],{"class":162},[103,153903,153904],{"class":113},"(category_total)\n",[74,153906,153908],{"id":153907},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[94,153910,153912],{"className":30368,"code":153911,"language":30370,"meta":24,"style":24},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[100,153913,153914,153939],{"__ignoreMap":24},[103,153915,153916,153919,153921,153923,153926,153929,153932,153935,153937],{"class":105,"line":106},[103,153917,153918],{"class":113},"top_date, top_amount ",[103,153920,159],{"class":109},[103,153922,5941],{"class":162},[103,153924,153925],{"class":113},"(daily_total.items(), ",[103,153927,153928],{"class":5206},"key",[103,153930,153931],{"class":109},"=lambda",[103,153933,153934],{"class":113}," item: item[",[103,153936,331],{"class":162},[103,153938,4646],{"class":113},[103,153940,153941,153943],{"class":105,"line":25},[103,153942,30405],{"class":162},[103,153944,153945],{"class":113},"(top_date, top_amount)\n",[45,153947,153949],{"id":153948},"_126-绘制柱状图","12.6 绘制柱状图",[94,153951,153953],{"className":30368,"code":153952,"language":30370,"meta":24,"style":24},"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",[100,153954,153955,153969,153980,153984,153992,154004,154016,154027,154031,154035,154045,154056,154070,154075,154092,154109,154125,154129],{"__ignoreMap":24},[103,153956,153957,153959,153961,153963,153965,153967],{"class":105,"line":106},[103,153958,30727],{"class":109},[103,153960,147361],{"class":113},[103,153962,30382],{"class":109},[103,153964,147366],{"class":113},[103,153966,31373],{"class":109},[103,153968,147371],{"class":113},[103,153970,153971,153973,153975,153977],{"class":105,"line":25},[103,153972,30727],{"class":109},[103,153974,147220],{"class":113},[103,153976,30382],{"class":109},[103,153978,153979],{"class":113}," Bar\n",[103,153981,153982],{"class":105,"line":1168},[103,153983,2389],{"emptyLinePlaceholder":30},[103,153985,153986,153988,153990],{"class":105,"line":1183},[103,153987,153832],{"class":113},[103,153989,159],{"class":109},[103,153991,15562],{"class":113},[103,153993,153994,153997,153999,154002],{"class":105,"line":1189},[103,153995,153996],{"class":218},"    \"手机\"",[103,153998,51427],{"class":113},[103,154000,154001],{"class":162},"27000",[103,154003,31456],{"class":113},[103,154005,154006,154009,154011,154014],{"class":105,"line":1203},[103,154007,154008],{"class":218},"    \"电脑\"",[103,154010,51427],{"class":113},[103,154012,154013],{"class":162},"34000",[103,154015,31456],{"class":113},[103,154017,154018,154021,154023,154025],{"class":105,"line":1209},[103,154019,154020],{"class":218},"    \"耳机\"",[103,154022,51427],{"class":113},[103,154024,124381],{"class":162},[103,154026,31456],{"class":113},[103,154028,154029],{"class":105,"line":1300},[103,154030,1554],{"class":113},[103,154032,154033],{"class":105,"line":1306},[103,154034,2389],{"emptyLinePlaceholder":30},[103,154036,154037,154040,154042],{"class":105,"line":1318},[103,154038,154039],{"class":113},"bar ",[103,154041,159],{"class":109},[103,154043,154044],{"class":113}," Bar()\n",[103,154046,154047,154050,154053],{"class":105,"line":1601},[103,154048,154049],{"class":113},"bar.add_xaxis(",[103,154051,154052],{"class":162},"list",[103,154054,154055],{"class":113},"(category_total.keys()))\n",[103,154057,154058,154061,154063,154065,154067],{"class":105,"line":1606},[103,154059,154060],{"class":113},"bar.add_yaxis(",[103,154062,147277],{"class":218},[103,154064,12425],{"class":113},[103,154066,154052],{"class":162},[103,154068,154069],{"class":113},"(category_total.values()))\n",[103,154071,154072],{"class":105,"line":1612},[103,154073,154074],{"class":113},"bar.set_global_opts(\n",[103,154076,154077,154079,154081,154083,154085,154087,154090],{"class":105,"line":1617},[103,154078,147455],{"class":5206},[103,154080,159],{"class":109},[103,154082,147460],{"class":113},[103,154084,51397],{"class":5206},[103,154086,159],{"class":109},[103,154088,154089],{"class":218},"\"品类销售额\"",[103,154091,38037],{"class":113},[103,154093,154094,154096,154098,154100,154102,154104,154107],{"class":105,"line":1631},[103,154095,147474],{"class":5206},[103,154097,159],{"class":109},[103,154099,147479],{"class":113},[103,154101,79800],{"class":5206},[103,154103,159],{"class":109},[103,154105,154106],{"class":218},"\"品类\"",[103,154108,38037],{"class":113},[103,154110,154111,154113,154115,154117,154119,154121,154123],{"class":105,"line":1636},[103,154112,147493],{"class":5206},[103,154114,159],{"class":109},[103,154116,147479],{"class":113},[103,154118,79800],{"class":5206},[103,154120,159],{"class":109},[103,154122,147277],{"class":218},[103,154124,38037],{"class":113},[103,154126,154127],{"class":105,"line":1642},[103,154128,120],{"class":113},[103,154130,154131,154134,154137],{"class":105,"line":1663},[103,154132,154133],{"class":113},"bar.render(",[103,154135,154136],{"class":218},"\"category_sales.html\"",[103,154138,120],{"class":113},[45,154140,154142],{"id":154141},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154144,154145],{},"时间线适合展示不同日期、月份、年份的数据变化。",[94,154147,154149],{"className":30368,"code":154148,"language":30370,"meta":24,"style":24},"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",[100,154150,154151,154165,154176,154180,154188,154212,154235,154260,154264,154268,154278,154282,154293,154302,154312,154326,154357,154362,154366],{"__ignoreMap":24},[103,154152,154153,154155,154157,154159,154161,154163],{"class":105,"line":106},[103,154154,30727],{"class":109},[103,154156,147361],{"class":113},[103,154158,30382],{"class":109},[103,154160,147366],{"class":113},[103,154162,31373],{"class":109},[103,154164,147371],{"class":113},[103,154166,154167,154169,154171,154173],{"class":105,"line":25},[103,154168,30727],{"class":109},[103,154170,147220],{"class":113},[103,154172,30382],{"class":109},[103,154174,154175],{"class":113}," Bar, Timeline\n",[103,154177,154178],{"class":105,"line":1168},[103,154179,2389],{"emptyLinePlaceholder":30},[103,154181,154182,154184,154186],{"class":105,"line":1183},[103,154183,101648],{"class":113},[103,154185,159],{"class":109},[103,154187,15562],{"class":113},[103,154189,154190,154193,154196,154198,154200,154202,154204,154206,154208,154210],{"class":105,"line":1189},[103,154191,154192],{"class":218},"    \"2024-10-01\"",[103,154194,154195],{"class":113},": {",[103,154197,153625],{"class":218},[103,154199,51427],{"class":113},[103,154201,153634],{"class":162},[103,154203,12425],{"class":113},[103,154205,153655],{"class":218},[103,154207,51427],{"class":113},[103,154209,153664],{"class":162},[103,154211,4919],{"class":113},[103,154213,154214,154217,154219,154221,154223,154225,154227,154229,154231,154233],{"class":105,"line":1203},[103,154215,154216],{"class":218},"    \"2024-10-02\"",[103,154218,154195],{"class":113},[103,154220,153625],{"class":218},[103,154222,51427],{"class":113},[103,154224,153693],{"class":162},[103,154226,12425],{"class":113},[103,154228,153655],{"class":218},[103,154230,51427],{"class":113},[103,154232,153722],{"class":162},[103,154234,4919],{"class":113},[103,154236,154237,154240,154242,154244,154246,154249,154251,154253,154255,154258],{"class":105,"line":1209},[103,154238,154239],{"class":218},"    \"2024-10-03\"",[103,154241,154195],{"class":113},[103,154243,153625],{"class":218},[103,154245,51427],{"class":113},[103,154247,154248],{"class":162},"17000",[103,154250,12425],{"class":113},[103,154252,153655],{"class":218},[103,154254,51427],{"class":113},[103,154256,154257],{"class":162},"19000",[103,154259,4919],{"class":113},[103,154261,154262],{"class":105,"line":1300},[103,154263,1554],{"class":113},[103,154265,154266],{"class":105,"line":1306},[103,154267,2389],{"emptyLinePlaceholder":30},[103,154269,154270,154273,154275],{"class":105,"line":1318},[103,154271,154272],{"class":113},"timeline ",[103,154274,159],{"class":109},[103,154276,154277],{"class":113}," Timeline()\n",[103,154279,154280],{"class":105,"line":1601},[103,154281,2389],{"emptyLinePlaceholder":30},[103,154283,154284,154286,154289,154291],{"class":105,"line":1606},[103,154285,3014],{"class":109},[103,154287,154288],{"class":113}," date, category_data ",[103,154290,26033],{"class":109},[103,154292,149130],{"class":113},[103,154294,154295,154298,154300],{"class":105,"line":1612},[103,154296,154297],{"class":113},"    bar ",[103,154299,159],{"class":109},[103,154301,154044],{"class":113},[103,154303,154304,154307,154309],{"class":105,"line":1617},[103,154305,154306],{"class":113},"    bar.add_xaxis(",[103,154308,154052],{"class":162},[103,154310,154311],{"class":113},"(category_data.keys()))\n",[103,154313,154314,154317,154319,154321,154323],{"class":105,"line":1631},[103,154315,154316],{"class":113},"    bar.add_yaxis(",[103,154318,147277],{"class":218},[103,154320,12425],{"class":113},[103,154322,154052],{"class":162},[103,154324,154325],{"class":113},"(category_data.values()))\n",[103,154327,154328,154331,154334,154336,154338,154340,154342,154344,154346,154348,154350,154352,154355],{"class":105,"line":1636},[103,154329,154330],{"class":113},"    bar.set_global_opts(",[103,154332,154333],{"class":5206},"title_opts",[103,154335,159],{"class":109},[103,154337,147460],{"class":113},[103,154339,51397],{"class":5206},[103,154341,159],{"class":109},[103,154343,166],{"class":109},[103,154345,364],{"class":218},[103,154347,1009],{"class":162},[103,154349,73916],{"class":113},[103,154351,1059],{"class":162},[103,154353,154354],{"class":218},"销售额\"",[103,154356,30487],{"class":113},[103,154358,154359],{"class":105,"line":1642},[103,154360,154361],{"class":113},"    timeline.add(bar, date)\n",[103,154363,154364],{"class":105,"line":1663},[103,154365,2389],{"emptyLinePlaceholder":30},[103,154367,154368,154371,154374],{"class":105,"line":1668},[103,154369,154370],{"class":113},"timeline.render(",[103,154372,154373],{"class":218},"\"timeline_sales.html\"",[103,154375,120],{"class":113},[45,154377,154379],{"id":154378},"_128-绘制地图","12.8 绘制地图",[14,154381,154382],{},"地图适合展示地区数据。",[94,154384,154386],{"className":30368,"code":154385,"language":30370,"meta":24,"style":24},"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",[100,154387,154388,154402,154413,154417,154425,154438,154450,154463,154476,154480,154484,154494,154509,154514,154531,154550,154554],{"__ignoreMap":24},[103,154389,154390,154392,154394,154396,154398,154400],{"class":105,"line":106},[103,154391,30727],{"class":109},[103,154393,147361],{"class":113},[103,154395,30382],{"class":109},[103,154397,147366],{"class":113},[103,154399,31373],{"class":109},[103,154401,147371],{"class":113},[103,154403,154404,154406,154408,154410],{"class":105,"line":25},[103,154405,30727],{"class":109},[103,154407,147220],{"class":113},[103,154409,30382],{"class":109},[103,154411,154412],{"class":113}," Map\n",[103,154414,154415],{"class":105,"line":1168},[103,154416,2389],{"emptyLinePlaceholder":30},[103,154418,154419,154421,154423],{"class":105,"line":1183},[103,154420,101648],{"class":113},[103,154422,159],{"class":109},[103,154424,55437],{"class":113},[103,154426,154427,154430,154432,154434,154436],{"class":105,"line":1189},[103,154428,154429],{"class":113},"    (",[103,154431,69259],{"class":218},[103,154433,12425],{"class":113},[103,154435,930],{"class":162},[103,154437,38037],{"class":113},[103,154439,154440,154442,154444,154446,154448],{"class":105,"line":1203},[103,154441,154429],{"class":113},[103,154443,69279],{"class":218},[103,154445,12425],{"class":113},[103,154447,147294],{"class":162},[103,154449,38037],{"class":113},[103,154451,154452,154454,154457,154459,154461],{"class":105,"line":1209},[103,154453,154429],{"class":113},[103,154455,154456],{"class":218},"\"广东\"",[103,154458,12425],{"class":113},[103,154460,1711],{"class":162},[103,154462,38037],{"class":113},[103,154464,154465,154467,154470,154472,154474],{"class":105,"line":1300},[103,154466,154429],{"class":113},[103,154468,154469],{"class":218},"\"浙江\"",[103,154471,12425],{"class":113},[103,154473,147299],{"class":162},[103,154475,38037],{"class":113},[103,154477,154478],{"class":105,"line":1306},[103,154479,33236],{"class":113},[103,154481,154482],{"class":105,"line":1318},[103,154483,2389],{"emptyLinePlaceholder":30},[103,154485,154486,154489,154491],{"class":105,"line":1601},[103,154487,154488],{"class":113},"map_chart ",[103,154490,159],{"class":109},[103,154492,154493],{"class":113}," Map()\n",[103,154495,154496,154499,154501,154504,154507],{"class":105,"line":1606},[103,154497,154498],{"class":113},"map_chart.add(",[103,154500,147277],{"class":218},[103,154502,154503],{"class":113},", data, ",[103,154505,154506],{"class":218},"\"china\"",[103,154508,120],{"class":113},[103,154510,154511],{"class":105,"line":1612},[103,154512,154513],{"class":113},"map_chart.set_global_opts(\n",[103,154515,154516,154518,154520,154522,154524,154526,154529],{"class":105,"line":1617},[103,154517,147455],{"class":5206},[103,154519,159],{"class":109},[103,154521,147460],{"class":113},[103,154523,51397],{"class":5206},[103,154525,159],{"class":109},[103,154527,154528],{"class":218},"\"地区销售额\"",[103,154530,38037],{"class":113},[103,154532,154533,154536,154538,154541,154544,154546,154548],{"class":105,"line":1631},[103,154534,154535],{"class":5206},"    visualmap_opts",[103,154537,159],{"class":109},[103,154539,154540],{"class":113},"opts.VisualMapOpts(",[103,154542,154543],{"class":5206},"max_",[103,154545,159],{"class":109},[103,154547,1711],{"class":162},[103,154549,38037],{"class":113},[103,154551,154552],{"class":105,"line":1636},[103,154553,120],{"class":113},[103,154555,154556,154559,154562],{"class":105,"line":1642},[103,154557,154558],{"class":113},"map_chart.render(",[103,154560,154561],{"class":218},"\"map_sales.html\"",[103,154563,120],{"class":113},[14,154565,154566],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[45,154568,154570],{"id":154569},"_129-项目拆分建议","12.9 项目拆分建议",[14,154572,154573],{},"当代码超过一个文件时，可以这样组织：",[94,154575,154578],{"className":154576,"code":154577,"language":5177,"meta":24},[5175],"sales_project\u002F\n  main.py\n  data\u002F\n    sales.json\n  services\u002F\n    __init__.py\n    sales_service.py\n  charts\u002F\n    __init__.py\n    chart_builder.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[100,154579,154577],{"__ignoreMap":24},[14,154581,154582],{},"职责：",[57,154584,154585,154591,154597,154603],{},[60,154586,154587,154590],{},[100,154588,154589],{},"main.py","：程序入口。",[60,154592,154593,154596],{},[100,154594,154595],{},"file_utils.py","：读写 JSON。",[60,154598,154599,154602],{},[100,154600,154601],{},"sales_service.py","：统计销售数据。",[60,154604,154605,154608],{},[100,154606,154607],{},"chart_builder.py","：生成图表。",[45,154610,154612],{"id":154611},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154614,154615],{},"语法基础：",[57,154617,154618,154621,154624,154627],{},[60,154619,154620],{},"会写变量、注释、输入输出。",[60,154622,154623],{},"会使用 int、float、str、bool。",[60,154625,154626],{},"会做类型转换。",[60,154628,154629],{},"会使用 f-string 格式化输出。",[14,154631,154632],{},"流程控制：",[57,154634,154635,154641,154647,154655],{},[60,154636,154637,154638,28375],{},"会写 ",[100,154639,154640],{},"if elif else",[60,154642,154637,154643,101008,154645,28375],{},[100,154644,108653],{},[100,154646,3014],{},[60,154648,154649,154650,101008,154652,28375],{},"理解 ",[100,154651,2042],{},[100,154653,154654],{},"continue",[60,154656,154657],{},"能写嵌套循环。",[14,154659,154660],{},"函数：",[57,154662,154663,154666,154669,154672],{},[60,154664,154665],{},"会定义和调用函数。",[60,154667,154668],{},"理解参数和返回值。",[60,154670,154671],{},"知道局部变量和全局变量。",[60,154673,154674],{},"会使用默认参数、关键字参数、不定长参数。",[14,154676,154677],{},"容器：",[57,154679,154680,154683,154686,154689,154692],{},[60,154681,154682],{},"会使用列表增删改查。",[60,154684,154685],{},"会遍历列表、字典。",[60,154687,154688],{},"会使用切片。",[60,154690,154691],{},"会用集合去重。",[60,154693,154694],{},"会处理列表嵌套字典。",[14,154696,154697],{},"文件和模块：",[57,154699,154700,154703,154706,154709,154712],{},[60,154701,154702],{},"会读写文本文件。",[60,154704,154705],{},"会读写 JSON。",[60,154707,154708],{},"会捕获常见异常。",[60,154710,154711],{},"会导入模块和第三方包。",[60,154713,154714],{},"会创建简单包结构。",[14,154716,154717],{},"项目能力：",[57,154719,154720,154723,154726,154729,154732],{},[60,154721,154722],{},"能把代码拆成函数。",[60,154724,154725],{},"能把数据保存到文件。",[60,154727,154728],{},"能处理用户输入错误。",[60,154730,154731],{},"能写一个完整菜单程序。",[60,154733,154734],{},"能用 pyecharts 生成图表。",[45,154736,154738],{"id":154737},"_1211-推荐练习顺序","12.11 推荐练习顺序",[57,154740,154741,154744,154747,154750,154753,154756,154759,154762],{},[60,154742,154743],{},"猜数字游戏。",[60,154745,154746],{},"ATM 菜单程序。",[60,154748,154749],{},"学生成绩统计。",[60,154751,154752],{},"学生管理系统函数版。",[60,154754,154755],{},"学生管理系统文件持久化版。",[60,154757,154758],{},"学生管理系统面向对象版。",[60,154760,154761],{},"销售数据统计。",[60,154763,154764],{},"销售数据可视化。",[45,154766,154768],{"id":154767},"_1212-常见学习误区","12.12 常见学习误区",[57,154770,154771,154774,154777,154780,154783,154786,154789],{},[60,154772,154773],{},"只看视频不敲代码。",[60,154775,154776],{},"一报错就复制错误去搜，不先读报错位置。",[60,154778,154779],{},"变量名随便写，后续自己看不懂。",[60,154781,154782],{},"所有代码都写在一个文件一个函数里。",[60,154784,154785],{},"不保存练习代码，复习时没有材料。",[60,154787,154788],{},"还没掌握列表字典就急着学框架。",[60,154790,154791],{},"不会读官方文档，只依赖教程。",[45,154793,154795],{"id":154794},"_1213-如何读报错","12.13 如何读报错",[14,154797,154798],{},"报错通常从下往上看最后几行。",[14,154800,15125],{},[94,154802,154805],{"className":154803,"code":154804,"language":5177,"meta":24},[5175],"ValueError: invalid literal for int() with base 10: 'abc'\n",[100,154806,154804],{"__ignoreMap":24},[14,154808,24589],{},[57,154810,154811,154817,154827],{},[60,154812,154813,154814,28375],{},"异常类型是 ",[100,154815,154816],{},"ValueError",[60,154818,107335,154819,154822,154823,154826],{},[100,154820,154821],{},"int()"," 无法把 ",[100,154824,154825],{},"'abc'"," 转成整数。",[60,154828,154829],{},"应该检查输入内容或增加异常处理。",[14,154831,154832],{},"再看文件名和行号：",[94,154834,154837],{"className":154835,"code":154836,"language":5177,"meta":24},[5175],"File \"main.py\", line 10, in \u003Cmodule>\n",[100,154838,154836],{"__ignoreMap":24},[14,154840,154841,154842,154844],{},"表示错误发生在 ",[100,154843,154589],{}," 第 10 行。",[45,154846,154848],{"id":154847},"_1214-后续学习方向","12.14 后续学习方向",[14,154850,154851],{},"Python 基础完成后，可以按兴趣选择方向：",[57,154853,154854,154866,154875,154887,154898,154907,154917],{},[60,154855,154856,154857,326,154860,326,154863,28375],{},"自动化办公：",[100,154858,154859],{},"openpyxl",[100,154861,154862],{},"python-docx",[100,154864,154865],{},"pdfplumber",[60,154867,154868,154869,326,154871,326,154873,28375],{},"数据分析：",[100,154870,100616],{},[100,154872,146167],{},[100,154874,146175],{},[60,154876,154877,154878,326,154881,326,154884,28375],{},"Web 后端：",[100,154879,154880],{},"Flask",[100,154882,154883],{},"FastAPI",[100,154885,154886],{},"Django",[60,154888,154889,154890,326,154892,326,154895,28375],{},"爬虫：",[100,154891,146152],{},[100,154893,154894],{},"BeautifulSoup",[100,154896,154897],{},"Scrapy",[60,154899,154900,154901,326,154903,154906],{},"测试开发：",[100,154902,146199],{},[100,154904,154905],{},"selenium","、接口测试。",[60,154908,154909,154910,326,154912,326,154914,28375],{},"人工智能：",[100,154911,100616],{},[100,154913,146167],{},[100,154915,154916],{},"pytorch",[60,154918,154919,154920,326,154922,326,154925,28375],{},"运维脚本：",[100,154921,145768],{},[100,154923,154924],{},"subprocess",[100,154926,154927],{},"paramiko",[14,154929,154930],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[45,154932,154934],{"id":154933},"_1215-结课练习","12.15 结课练习",[57,154936,154937,154940,154943,154946,154949,154952,154955,154958],{},[60,154938,154939],{},"完成函数版学生管理系统。",[60,154941,154942],{},"给学生管理系统增加 JSON 持久化。",[60,154944,154945],{},"给学生管理系统增加异常处理。",[60,154947,154948],{},"把学生管理系统改成面向对象版。",[60,154950,154951],{},"使用 pyecharts 绘制学生成绩柱状图。",[60,154953,154954],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[60,154956,154957],{},"按品类统计销售额并绘制柱状图。",[60,154959,154960],{},"写一份自己的 Python 学习路线图。",[5116,154962,154963],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":24,"searchDepth":25,"depth":25,"links":154965},[154966,154967,154970,154971,154972,154978,154979,154980,154981,154982,154983,154984,154985,154986,154987],{"id":151682,"depth":25,"text":151683},{"id":151732,"depth":25,"text":151733,"children":154968},[154969],{"id":151736,"depth":1168,"text":151737},{"id":151775,"depth":25,"text":151776},{"id":153249,"depth":25,"text":153250},{"id":153587,"depth":25,"text":153588,"children":154973},[154974,154975,154976,154977],{"id":153591,"depth":1168,"text":153592},{"id":153731,"depth":1168,"text":153732},{"id":153821,"depth":1168,"text":153822},{"id":153907,"depth":1168,"text":153908},{"id":153948,"depth":25,"text":153949},{"id":154141,"depth":25,"text":154142},{"id":154378,"depth":25,"text":154379},{"id":154569,"depth":25,"text":154570},{"id":154611,"depth":25,"text":154612},{"id":154737,"depth":25,"text":154738},{"id":154767,"depth":25,"text":154768},{"id":154794,"depth":25,"text":154795},{"id":154847,"depth":25,"text":154848},{"id":154933,"depth":25,"text":154934},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151674,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154994,"title":154995,"body":154996,"description":27,"extension":28,"meta":157465,"navigation":30,"path":157466,"seo":157467,"stem":157468,"__hash__":157469},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":154997,"toc":157440},[154998,155001,155005,155008,155011,155031,155034,155057,155060,155063,155085,155088,155110,155114,155117,155157,155160,155281,155285,155288,155328,155331,155355,155358,155362,155365,155379,155412,155415,155450,155453,155476,155479,155512,155515,155517,155523,155598,155601,155607,155624,155664,155668,155671,155717,155719,155757,155760,155795,155798,155833,155836,155868,155871,155890,155894,155898,156011,156013,156088,156092,156138,156141,156167,156176,156180,156183,156246,156254,156282,156286,156326,156391,156395,156398,156437,156440,156485,156488,156549,156553,156580,156583,156611,156614,156618,156622,156687,156690,156728,156731,156763,156767,156866,156870,156873,156946,156949,156997,157001,157007,157047,157050,157097,157100,157149,157153,157155,157169,157171,157352,157356,157383,157403,157410,157414,157431,157437],[10,154999,154995],{"id":155000},"_2-基础语法变量与字符串",[45,155002,155004],{"id":155003},"_21-注释","2.1 注释",[14,155006,155007],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155009,155010],{},"单行注释：",[94,155012,155014],{"className":30368,"code":155013,"language":30370,"meta":24,"style":24},"# 这是单行注释\nprint(\"hello\")\n",[100,155015,155016,155021],{"__ignoreMap":24},[103,155017,155018],{"class":105,"line":106},[103,155019,155020],{"class":172},"# 这是单行注释\n",[103,155022,155023,155025,155027,155029],{"class":105,"line":25},[103,155024,30405],{"class":162},[103,155026,114],{"class":113},[103,155028,5834],{"class":218},[103,155030,120],{"class":113},[14,155032,155033],{},"多行说明常用三引号：",[94,155035,155037],{"className":30368,"code":155036,"language":30370,"meta":24,"style":24},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[100,155038,155039,155043,155048,155053],{"__ignoreMap":24},[103,155040,155041],{"class":105,"line":106},[103,155042,95688],{"class":218},[103,155044,155045],{"class":105,"line":25},[103,155046,155047],{"class":218},"这是多行说明。\n",[103,155049,155050],{"class":105,"line":1168},[103,155051,155052],{"class":218},"常用于文件顶部说明、函数说明等。\n",[103,155054,155055],{"class":105,"line":1183},[103,155056,95688],{"class":218},[14,155058,155059],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155061,155062],{},"不好：",[94,155064,155066],{"className":30368,"code":155065,"language":30370,"meta":24,"style":24},"# age 加 1\nage = age + 1\n",[100,155067,155068,155073],{"__ignoreMap":24},[103,155069,155070],{"class":105,"line":106},[103,155071,155072],{"class":172},"# age 加 1\n",[103,155074,155075,155077,155079,155081,155083],{"class":105,"line":25},[103,155076,146528],{"class":113},[103,155078,159],{"class":109},[103,155080,15697],{"class":113},[103,155082,594],{"class":109},[103,155084,55689],{"class":162},[14,155086,155087],{},"较好：",[94,155089,155091],{"className":30368,"code":155090,"language":30370,"meta":24,"style":24},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[100,155092,155093,155098],{"__ignoreMap":24},[103,155094,155095],{"class":105,"line":106},[103,155096,155097],{"class":172},"# 用户过完生日后，年龄增加一岁\n",[103,155099,155100,155102,155104,155106,155108],{"class":105,"line":25},[103,155101,146528],{"class":113},[103,155103,159],{"class":109},[103,155105,15697],{"class":113},[103,155107,594],{"class":109},[103,155109,55689],{"class":162},[45,155111,155113],{"id":155112},"_22-字面量","2.2 字面量",[14,155115,155116],{},"字面量就是代码中直接写出来的数据。",[94,155118,155120],{"className":30368,"code":155119,"language":30370,"meta":24,"style":24},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[100,155121,155122,155129,155136,155143,155150],{"__ignoreMap":24},[103,155123,155124,155126],{"class":105,"line":106},[103,155125,424],{"class":162},[103,155127,155128],{"class":172},"          # 整数\n",[103,155130,155131,155133],{"class":105,"line":25},[103,155132,163],{"class":162},[103,155134,155135],{"class":172},"         # 小数\n",[103,155137,155138,155140],{"class":105,"line":1168},[103,155139,5834],{"class":218},[103,155141,155142],{"class":172},"      # 字符串\n",[103,155144,155145,155147],{"class":105,"line":1183},[103,155146,31466],{"class":162},[103,155148,155149],{"class":172},"         # 布尔值\n",[103,155151,155152,155154],{"class":105,"line":1189},[103,155153,95676],{"class":162},[103,155155,155156],{"class":172},"         # 空值\n",[14,155158,155159],{},"常见字面量类型：",[251,155161,155162,155172],{},[254,155163,155164],{},[257,155165,155166,155168,155170],{},[260,155167,23727],{},[260,155169,27482],{},[260,155171,25859],{},[298,155173,155174,155185,155196,155207,155219,155231,155243,155256,155268],{},[257,155175,155176,155178,155182],{},[303,155177,117],{},[303,155179,155180],{},[100,155181,424],{},[303,155183,155184],{},"整数",[257,155186,155187,155189,155193],{},[303,155188,153],{},[303,155190,155191],{},[100,155192,163],{},[303,155194,155195],{},"浮点数",[257,155197,155198,155200,155204],{},[303,155199,1288],{},[303,155201,155202],{},[100,155203,5834],{},[303,155205,155206],{},"字符串",[257,155208,155209,155211,155217],{},[303,155210,1343],{},[303,155212,155213,326,155215],{},[100,155214,31466],{},[100,155216,33977],{},[303,155218,66005],{},[257,155220,155221,155224,155228],{},[303,155222,155223],{},"NoneType",[303,155225,155226],{},[100,155227,95676],{},[303,155229,155230],{},"空值",[257,155232,155233,155235,155240],{},[303,155234,154052],{},[303,155236,155237],{},[100,155238,155239],{},"[1, 2, 3]",[303,155241,155242],{},"列表",[257,155244,155245,155248,155253],{},[303,155246,155247],{},"tuple",[303,155249,155250],{},[100,155251,155252],{},"(1, 2, 3)",[303,155254,155255],{},"元组",[257,155257,155258,155260,155265],{},[303,155259,114536],{},[303,155261,155262],{},[100,155263,155264],{},"{\"name\": \"张三\"}",[303,155266,155267],{},"字典",[257,155269,155270,155273,155278],{},[303,155271,155272],{},"set",[303,155274,155275],{},[100,155276,155277],{},"{1, 2, 3}",[303,155279,155280],{},"集合",[45,155282,155284],{"id":155283},"_23-变量","2.3 变量",[14,155286,155287],{},"变量是保存数据的名字。",[94,155289,155291],{"className":30368,"code":155290,"language":30370,"meta":24,"style":24},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[100,155292,155293,155301,155309,155319],{"__ignoreMap":24},[103,155294,155295,155297,155299],{"class":105,"line":106},[103,155296,146518],{"class":113},[103,155298,159],{"class":109},[103,155300,149335],{"class":218},[103,155302,155303,155305,155307],{"class":105,"line":25},[103,155304,146528],{"class":113},[103,155306,159],{"class":109},[103,155308,146533],{"class":162},[103,155310,155311,155314,155316],{"class":105,"line":1168},[103,155312,155313],{"class":113},"height ",[103,155315,159],{"class":109},[103,155317,155318],{"class":162}," 1.75\n",[103,155320,155321,155324,155326],{"class":105,"line":1183},[103,155322,155323],{"class":113},"is_student ",[103,155325,159],{"class":109},[103,155327,153581],{"class":162},[14,155329,155330],{},"Python 的变量不需要提前声明类型：",[94,155332,155334],{"className":30368,"code":155333,"language":30370,"meta":24,"style":24},"score = 100\nscore = \"满分\"\n",[100,155335,155336,155346],{"__ignoreMap":24},[103,155337,155338,155341,155343],{"class":105,"line":106},[103,155339,155340],{"class":113},"score ",[103,155342,159],{"class":109},[103,155344,155345],{"class":162}," 100\n",[103,155347,155348,155350,155352],{"class":105,"line":25},[103,155349,155340],{"class":113},[103,155351,159],{"class":109},[103,155353,155354],{"class":218}," \"满分\"\n",[14,155356,155357],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[45,155359,155361],{"id":155360},"_24-变量命名规则","2.4 变量命名规则",[14,155363,155364],{},"硬性规则：",[57,155366,155367,155370,155373,155376],{},[60,155368,155369],{},"只能由字母、数字、下划线组成。",[60,155371,155372],{},"不能以数字开头。",[60,155374,155375],{},"不能使用 Python 关键字。",[60,155377,155378],{},"区分大小写。",[94,155380,155382],{"className":30368,"code":155381,"language":30370,"meta":24,"style":24},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[100,155383,155384,155393,155402],{"__ignoreMap":24},[103,155385,155386,155389,155391],{"class":105,"line":106},[103,155387,155388],{"class":113},"user_name ",[103,155390,159],{"class":109},[103,155392,146523],{"class":218},[103,155394,155395,155398,155400],{"class":105,"line":25},[103,155396,155397],{"class":113},"age2 ",[103,155399,159],{"class":109},[103,155401,146533],{"class":162},[103,155403,155404,155407,155409],{"class":105,"line":1168},[103,155405,155406],{"class":113},"_token ",[103,155408,159],{"class":109},[103,155410,155411],{"class":218}," \"abc\"\n",[14,155413,155414],{},"错误写法：",[94,155416,155418],{"className":30368,"code":155417,"language":30370,"meta":24,"style":24},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[100,155419,155420,155429,155441],{"__ignoreMap":24},[103,155421,155422,155425,155427],{"class":105,"line":106},[103,155423,155424],{"class":77393},"2age",[103,155426,13554],{"class":109},[103,155428,146533],{"class":162},[103,155430,155431,155433,155435,155437,155439],{"class":105,"line":25},[103,155432,131566],{"class":113},[103,155434,645],{"class":109},[103,155436,146518],{"class":113},[103,155438,159],{"class":109},[103,155440,146523],{"class":218},[103,155442,155443,155445,155447],{"class":105,"line":1168},[103,155444,14684],{"class":109},[103,155446,13554],{"class":109},[103,155448,155449],{"class":218}," \"一班\"\n",[14,155451,155452],{},"查看关键字：",[94,155454,155456],{"className":30368,"code":155455,"language":30370,"meta":24,"style":24},"import keyword\n\nprint(keyword.kwlist)\n",[100,155457,155458,155465,155469],{"__ignoreMap":24},[103,155459,155460,155462],{"class":105,"line":106},[103,155461,30382],{"class":109},[103,155463,155464],{"class":113}," keyword\n",[103,155466,155467],{"class":105,"line":25},[103,155468,2389],{"emptyLinePlaceholder":30},[103,155470,155471,155473],{"class":105,"line":1168},[103,155472,30405],{"class":162},[103,155474,155475],{"class":113},"(keyword.kwlist)\n",[14,155477,155478],{},"推荐命名风格：",[94,155480,155482],{"className":30368,"code":155481,"language":30370,"meta":24,"style":24},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[100,155483,155484,155493,155503],{"__ignoreMap":24},[103,155485,155486,155489,155491],{"class":105,"line":106},[103,155487,155488],{"class":113},"student_name ",[103,155490,159],{"class":109},[103,155492,149335],{"class":218},[103,155494,155495,155498,155500],{"class":105,"line":25},[103,155496,155497],{"class":113},"total_price ",[103,155499,159],{"class":109},[103,155501,155502],{"class":162}," 99.8\n",[103,155504,155505,155508,155510],{"class":105,"line":1168},[103,155506,155507],{"class":113},"is_finished ",[103,155509,159],{"class":109},[103,155511,125789],{"class":162},[14,155513,155514],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[45,155516,50722],{"id":50721},[14,155518,104356,155519,155522],{},[100,155520,155521],{},"type()"," 查看数据类型：",[94,155524,155526],{"className":30368,"code":155525,"language":30370,"meta":24,"style":24},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[100,155527,155528,155542,155556,155570,155584],{"__ignoreMap":24},[103,155529,155530,155532,155534,155536,155538,155540],{"class":105,"line":106},[103,155531,30405],{"class":162},[103,155533,114],{"class":113},[103,155535,103097],{"class":162},[103,155537,114],{"class":113},[103,155539,424],{"class":162},[103,155541,30487],{"class":113},[103,155543,155544,155546,155548,155550,155552,155554],{"class":105,"line":25},[103,155545,30405],{"class":162},[103,155547,114],{"class":113},[103,155549,103097],{"class":162},[103,155551,114],{"class":113},[103,155553,163],{"class":162},[103,155555,30487],{"class":113},[103,155557,155558,155560,155562,155564,155566,155568],{"class":105,"line":1168},[103,155559,30405],{"class":162},[103,155561,114],{"class":113},[103,155563,103097],{"class":162},[103,155565,114],{"class":113},[103,155567,5834],{"class":218},[103,155569,30487],{"class":113},[103,155571,155572,155574,155576,155578,155580,155582],{"class":105,"line":1183},[103,155573,30405],{"class":162},[103,155575,114],{"class":113},[103,155577,103097],{"class":162},[103,155579,114],{"class":113},[103,155581,31466],{"class":162},[103,155583,30487],{"class":113},[103,155585,155586,155588,155590,155592,155594,155596],{"class":105,"line":1189},[103,155587,30405],{"class":162},[103,155589,114],{"class":113},[103,155591,103097],{"class":162},[103,155593,114],{"class":113},[103,155595,95676],{"class":162},[103,155597,30487],{"class":113},[14,155599,155600],{},"输出类似：",[94,155602,155605],{"className":155603,"code":155604,"language":5177,"meta":24},[5175],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[100,155606,155604],{"__ignoreMap":24},[14,155608,9015,155609,107273,155611,155613,155614,155616,155617,21490,155619,155616,155621,155623],{},[100,155610,1343],{},[100,155612,117],{}," 的子类，",[100,155615,31466],{}," 可以当作 ",[100,155618,331],{},[100,155620,33977],{},[100,155622,305],{},"，但业务代码中不要滥用。",[94,155625,155627],{"className":30368,"code":155626,"language":30370,"meta":24,"style":24},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[100,155628,155629,155647],{"__ignoreMap":24},[103,155630,155631,155633,155635,155637,155639,155641,155644],{"class":105,"line":106},[103,155632,30405],{"class":162},[103,155634,114],{"class":113},[103,155636,31466],{"class":162},[103,155638,45556],{"class":109},[103,155640,25108],{"class":162},[103,155642,155643],{"class":113},")   ",[103,155645,155646],{"class":172},"# 2\n",[103,155648,155649,155651,155653,155655,155657,155659,155661],{"class":105,"line":25},[103,155650,30405],{"class":162},[103,155652,114],{"class":113},[103,155654,33977],{"class":162},[103,155656,45556],{"class":109},[103,155658,25108],{"class":162},[103,155660,45798],{"class":113},[103,155662,155663],{"class":172},"# 1\n",[45,155665,155667],{"id":155666},"_26-类型转换","2.6 类型转换",[14,155669,155670],{},"常用转换函数：",[94,155672,155674],{"className":30368,"code":155673,"language":30370,"meta":24,"style":24},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[100,155675,155676,155686,155697,155707],{"__ignoreMap":24},[103,155677,155678,155680,155682,155684],{"class":105,"line":106},[103,155679,117],{"class":162},[103,155681,114],{"class":113},[103,155683,54306],{"class":218},[103,155685,120],{"class":113},[103,155687,155688,155690,155692,155695],{"class":105,"line":25},[103,155689,153],{"class":162},[103,155691,114],{"class":113},[103,155693,155694],{"class":218},"\"3.14\"",[103,155696,120],{"class":113},[103,155698,155699,155701,155703,155705],{"class":105,"line":1168},[103,155700,1288],{"class":162},[103,155702,114],{"class":113},[103,155704,424],{"class":162},[103,155706,120],{"class":113},[103,155708,155709,155711,155713,155715],{"class":105,"line":1183},[103,155710,1343],{"class":162},[103,155712,114],{"class":113},[103,155714,331],{"class":162},[103,155716,120],{"class":113},[14,155718,15125],{},[94,155720,155722],{"className":30368,"code":155721,"language":30370,"meta":24,"style":24},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[100,155723,155724,155733,155744],{"__ignoreMap":24},[103,155725,155726,155728,155730],{"class":105,"line":106},[103,155727,146528],{"class":113},[103,155729,159],{"class":109},[103,155731,155732],{"class":218}," \"18\"\n",[103,155734,155735,155737,155739,155741],{"class":105,"line":25},[103,155736,146528],{"class":113},[103,155738,159],{"class":109},[103,155740,2371],{"class":162},[103,155742,155743],{"class":113},"(age)\n",[103,155745,155746,155748,155751,155753,155755],{"class":105,"line":1168},[103,155747,30405],{"class":162},[103,155749,155750],{"class":113},"(age ",[103,155752,594],{"class":109},[103,155754,25108],{"class":162},[103,155756,120],{"class":113},[14,155758,155759],{},"输入得到的内容永远是字符串：",[94,155761,155763],{"className":30368,"code":155762,"language":30370,"meta":24,"style":24},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[100,155764,155765,155781],{"__ignoreMap":24},[103,155766,155767,155770,155772,155774,155776,155779],{"class":105,"line":106},[103,155768,155769],{"class":113},"num ",[103,155771,159],{"class":109},[103,155773,60595],{"class":162},[103,155775,114],{"class":113},[103,155777,155778],{"class":218},"\"请输入数字:\"",[103,155780,120],{"class":113},[103,155782,155783,155785,155787,155789,155792],{"class":105,"line":25},[103,155784,30405],{"class":162},[103,155786,114],{"class":113},[103,155788,103097],{"class":162},[103,155790,155791],{"class":113},"(num))  ",[103,155793,155794],{"class":172},"# str\n",[14,155796,155797],{},"如果要做数学运算，必须转换：",[94,155799,155801],{"className":30368,"code":155800,"language":30370,"meta":24,"style":24},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[100,155802,155803,155821],{"__ignoreMap":24},[103,155804,155805,155807,155809,155811,155813,155815,155817,155819],{"class":105,"line":106},[103,155806,155769],{"class":113},[103,155808,159],{"class":109},[103,155810,2371],{"class":162},[103,155812,114],{"class":113},[103,155814,53811],{"class":162},[103,155816,114],{"class":113},[103,155818,155778],{"class":218},[103,155820,30487],{"class":113},[103,155822,155823,155825,155827,155829,155831],{"class":105,"line":25},[103,155824,30405],{"class":162},[103,155826,45609],{"class":113},[103,155828,594],{"class":109},[103,155830,2027],{"class":162},[103,155832,120],{"class":113},[14,155834,155835],{},"常见错误：",[94,155837,155839],{"className":30368,"code":155838,"language":30370,"meta":24,"style":24},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[100,155840,155841,155854],{"__ignoreMap":24},[103,155842,155843,155845,155847,155849,155851],{"class":105,"line":106},[103,155844,117],{"class":162},[103,155846,114],{"class":113},[103,155848,155694],{"class":218},[103,155850,155643],{"class":113},[103,155852,155853],{"class":172},"# 错误\n",[103,155855,155856,155858,155860,155863,155866],{"class":105,"line":25},[103,155857,117],{"class":162},[103,155859,114],{"class":113},[103,155861,155862],{"class":218},"\"abc\"",[103,155864,155865],{"class":113},")    ",[103,155867,155853],{"class":172},[14,155869,155870],{},"正确写法：",[94,155872,155874],{"className":30368,"code":155873,"language":30370,"meta":24,"style":24},"num = float(\"3.14\")\n",[100,155875,155876],{"__ignoreMap":24},[103,155877,155878,155880,155882,155884,155886,155888],{"class":105,"line":106},[103,155879,155769],{"class":113},[103,155881,159],{"class":109},[103,155883,109787],{"class":162},[103,155885,114],{"class":113},[103,155887,155694],{"class":218},[103,155889,120],{"class":113},[45,155891,155893],{"id":155892},"_27-运算符","2.7 运算符",[74,155895,155897],{"id":155896},"_271-算术运算符","2.7.1 算术运算符",[251,155899,155900,155911],{},[254,155901,155902],{},[257,155903,155904,155907,155909],{},[260,155905,155906],{},"运算符",[260,155908,25859],{},[260,155910,27482],{},[298,155912,155913,155927,155941,155955,155969,155983,155997],{},[257,155914,155915,155919,155922],{},[303,155916,155917],{},[100,155918,594],{},[303,155920,155921],{},"加法",[303,155923,155924],{},[100,155925,155926],{},"1 + 2",[257,155928,155929,155933,155936],{},[303,155930,155931],{},[100,155932,645],{},[303,155934,155935],{},"减法",[303,155937,155938],{},[100,155939,155940],{},"5 - 3",[257,155942,155943,155947,155950],{},[303,155944,155945],{},[100,155946,568],{},[303,155948,155949],{},"乘法",[303,155951,155952],{},[100,155953,155954],{},"2 * 3",[257,155956,155957,155961,155964],{},[303,155958,155959],{},[100,155960,697],{},[303,155962,155963],{},"除法，结果是浮点数",[303,155965,155966],{},[100,155967,155968],{},"5 \u002F 2",[257,155970,155971,155975,155978],{},[303,155972,155973],{},[100,155974,33319],{},[303,155976,155977],{},"整除",[303,155979,155980],{},[100,155981,155982],{},"5 \u002F\u002F 2",[257,155984,155985,155989,155992],{},[303,155986,155987],{},[100,155988,441],{},[303,155990,155991],{},"取余",[303,155993,155994],{},[100,155995,155996],{},"5 % 2",[257,155998,155999,156003,156006],{},[303,156000,156001],{},[100,156002,10651],{},[303,156004,156005],{},"幂运算",[303,156007,156008],{},[100,156009,156010],{},"2 ** 3",[14,156012,15125],{},[94,156014,156016],{"className":30368,"code":156015,"language":30370,"meta":24,"style":24},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[100,156017,156018,156036,156053,156070],{"__ignoreMap":24},[103,156019,156020,156022,156024,156026,156029,156031,156033],{"class":105,"line":106},[103,156021,30405],{"class":162},[103,156023,114],{"class":113},[103,156025,432],{"class":162},[103,156027,156028],{"class":109}," \u002F",[103,156030,14745],{"class":162},[103,156032,155643],{"class":113},[103,156034,156035],{"class":172},"# 2.5\n",[103,156037,156038,156040,156042,156044,156047,156049,156051],{"class":105,"line":25},[103,156039,30405],{"class":162},[103,156041,114],{"class":113},[103,156043,432],{"class":162},[103,156045,156046],{"class":109}," \u002F\u002F",[103,156048,14745],{"class":162},[103,156050,45798],{"class":113},[103,156052,155646],{"class":172},[103,156054,156055,156057,156059,156061,156064,156066,156068],{"class":105,"line":1168},[103,156056,30405],{"class":162},[103,156058,114],{"class":113},[103,156060,432],{"class":162},[103,156062,156063],{"class":109}," %",[103,156065,14745],{"class":162},[103,156067,155643],{"class":113},[103,156069,155663],{"class":172},[103,156071,156072,156074,156076,156078,156081,156083,156085],{"class":105,"line":1183},[103,156073,30405],{"class":162},[103,156075,114],{"class":113},[103,156077,191],{"class":162},[103,156079,156080],{"class":109}," **",[103,156082,78060],{"class":162},[103,156084,45798],{"class":113},[103,156086,156087],{"class":172},"# 8\n",[74,156089,156091],{"id":156090},"_272-赋值运算符","2.7.2 赋值运算符",[94,156093,156095],{"className":30368,"code":156094,"language":30370,"meta":24,"style":24},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[100,156096,156097,156105,156113,156121,156129],{"__ignoreMap":24},[103,156098,156099,156101,156103],{"class":105,"line":106},[103,156100,155769],{"class":113},[103,156102,159],{"class":109},[103,156104,58418],{"class":162},[103,156106,156107,156109,156111],{"class":105,"line":25},[103,156108,155769],{"class":113},[103,156110,9467],{"class":109},[103,156112,54417],{"class":162},[103,156114,156115,156117,156119],{"class":105,"line":1168},[103,156116,155769],{"class":113},[103,156118,150234],{"class":109},[103,156120,47713],{"class":162},[103,156122,156123,156125,156127],{"class":105,"line":1183},[103,156124,155769],{"class":113},[103,156126,137130],{"class":109},[103,156128,120026],{"class":162},[103,156130,156131,156133,156136],{"class":105,"line":1189},[103,156132,155769],{"class":113},[103,156134,156135],{"class":109},"\u002F=",[103,156137,47713],{"class":162},[14,156139,156140],{},"等价关系：",[94,156142,156144],{"className":30368,"code":156143,"language":30370,"meta":24,"style":24},"num += 1\nnum = num + 1\n",[100,156145,156146,156154],{"__ignoreMap":24},[103,156147,156148,156150,156152],{"class":105,"line":106},[103,156149,155769],{"class":113},[103,156151,9467],{"class":109},[103,156153,55689],{"class":162},[103,156155,156156,156158,156160,156163,156165],{"class":105,"line":25},[103,156157,155769],{"class":113},[103,156159,159],{"class":109},[103,156161,156162],{"class":113}," num ",[103,156164,594],{"class":109},[103,156166,55689],{"class":162},[14,156168,156169,156170,101008,156173,28375],{},"Python 没有 ",[100,156171,156172],{},"num++",[100,156174,156175],{},"num--",[74,156177,156179],{"id":156178},"_273-比较运算符","2.7.3 比较运算符",[14,156181,156182],{},"比较运算结果是布尔值。",[94,156184,156186],{"className":30368,"code":156185,"language":30370,"meta":24,"style":24},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[100,156187,156188,156202,156217,156231],{"__ignoreMap":24},[103,156189,156190,156192,156194,156196,156198,156200],{"class":105,"line":106},[103,156191,30405],{"class":162},[103,156193,114],{"class":113},[103,156195,559],{"class":162},[103,156197,26212],{"class":109},[103,156199,2137],{"class":162},[103,156201,120],{"class":113},[103,156203,156204,156206,156208,156210,156213,156215],{"class":105,"line":25},[103,156205,30405],{"class":162},[103,156207,114],{"class":113},[103,156209,559],{"class":162},[103,156211,156212],{"class":109}," >=",[103,156214,2027],{"class":162},[103,156216,120],{"class":113},[103,156218,156219,156221,156223,156225,156227,156229],{"class":105,"line":1168},[103,156220,30405],{"class":162},[103,156222,114],{"class":113},[103,156224,559],{"class":162},[103,156226,101549],{"class":109},[103,156228,2072],{"class":162},[103,156230,120],{"class":113},[103,156232,156233,156235,156237,156239,156242,156244],{"class":105,"line":1183},[103,156234,30405],{"class":162},[103,156236,114],{"class":113},[103,156238,559],{"class":162},[103,156240,156241],{"class":109}," !=",[103,156243,2072],{"class":162},[103,156245,120],{"class":113},[14,156247,156248,156249,156251,156252,28375],{},"注意：判断相等用 ",[100,156250,2938],{},"，赋值用 ",[100,156253,159],{},[94,156255,156257],{"className":30368,"code":156256,"language":30370,"meta":24,"style":24},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[100,156258,156259,156271],{"__ignoreMap":24},[103,156260,156261,156263,156265,156268],{"class":105,"line":106},[103,156262,146528],{"class":113},[103,156264,159],{"class":109},[103,156266,156267],{"class":162}," 18",[103,156269,156270],{"class":172},"       # 赋值\n",[103,156272,156273,156275,156277,156279],{"class":105,"line":25},[103,156274,146528],{"class":113},[103,156276,2938],{"class":109},[103,156278,156267],{"class":162},[103,156280,156281],{"class":172},"      # 判断是否相等\n",[74,156283,156285],{"id":156284},"_274-逻辑运算符","2.7.4 逻辑运算符",[251,156287,156288,156296],{},[254,156289,156290],{},[257,156291,156292,156294],{},[260,156293,155906],{},[260,156295,25859],{},[298,156297,156298,156307,156316],{},[257,156299,156300,156304],{},[303,156301,156302],{},[100,156303,30452],{},[303,156305,156306],{},"并且",[257,156308,156309,156313],{},[303,156310,156311],{},[100,156312,115080],{},[303,156314,156315],{},"或者",[257,156317,156318,156323],{},[303,156319,156320],{},[100,156321,156322],{},"not",[303,156324,156325],{},"取反",[94,156327,156329],{"className":30368,"code":156328,"language":30370,"meta":24,"style":24},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[100,156330,156331,156339,156348,156352,156367,156381],{"__ignoreMap":24},[103,156332,156333,156335,156337],{"class":105,"line":106},[103,156334,146528],{"class":113},[103,156336,159],{"class":109},[103,156338,88055],{"class":162},[103,156340,156341,156344,156346],{"class":105,"line":25},[103,156342,156343],{"class":113},"has_ticket ",[103,156345,159],{"class":109},[103,156347,153581],{"class":162},[103,156349,156350],{"class":105,"line":1168},[103,156351,2389],{"emptyLinePlaceholder":30},[103,156353,156354,156356,156358,156360,156362,156364],{"class":105,"line":1183},[103,156355,30405],{"class":162},[103,156357,155750],{"class":113},[103,156359,1699],{"class":109},[103,156361,156267],{"class":162},[103,156363,120419],{"class":109},[103,156365,156366],{"class":113}," has_ticket)\n",[103,156368,156369,156371,156373,156375,156377,156379],{"class":105,"line":1189},[103,156370,30405],{"class":162},[103,156372,155750],{"class":113},[103,156374,1023],{"class":109},[103,156376,156267],{"class":162},[103,156378,114191],{"class":109},[103,156380,156366],{"class":113},[103,156382,156383,156385,156387,156389],{"class":105,"line":1203},[103,156384,30405],{"class":162},[103,156386,114],{"class":113},[103,156388,156322],{"class":109},[103,156390,156366],{"class":113},[45,156392,156394],{"id":156393},"_28-字符串定义","2.8 字符串定义",[14,156396,156397],{},"三种常见写法：",[94,156399,156401],{"className":30368,"code":156400,"language":30370,"meta":24,"style":24},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[100,156402,156403,156413,156422,156432],{"__ignoreMap":24},[103,156404,156405,156408,156410],{"class":105,"line":106},[103,156406,156407],{"class":113},"name1 ",[103,156409,159],{"class":109},[103,156411,156412],{"class":218}," '小明'\n",[103,156414,156415,156418,156420],{"class":105,"line":25},[103,156416,156417],{"class":113},"name2 ",[103,156419,159],{"class":109},[103,156421,149335],{"class":218},[103,156423,156424,156427,156429],{"class":105,"line":1168},[103,156425,156426],{"class":113},"text ",[103,156428,159],{"class":109},[103,156430,156431],{"class":218}," \"\"\"这是多行字符串\n",[103,156433,156434],{"class":105,"line":1183},[103,156435,156436],{"class":218},"可以换行\"\"\"\n",[14,156438,156439],{},"字符串中包含引号：",[94,156441,156443],{"className":30368,"code":156442,"language":30370,"meta":24,"style":24},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[100,156444,156445,156455,156465],{"__ignoreMap":24},[103,156446,156447,156450,156452],{"class":105,"line":106},[103,156448,156449],{"class":113},"msg ",[103,156451,159],{"class":109},[103,156453,156454],{"class":218}," \"他说:'你好'\"\n",[103,156456,156457,156460,156462],{"class":105,"line":25},[103,156458,156459],{"class":113},"msg2 ",[103,156461,159],{"class":109},[103,156463,156464],{"class":218}," '他说:\"你好\"'\n",[103,156466,156467,156470,156472,156475,156478,156481,156483],{"class":105,"line":1168},[103,156468,156469],{"class":113},"msg3 ",[103,156471,159],{"class":109},[103,156473,156474],{"class":218}," \"他说:",[103,156476,156477],{"class":162},"\\\"",[103,156479,156480],{"class":218},"你好",[103,156482,156477],{"class":162},[103,156484,25123],{"class":218},[14,156486,156487],{},"常见转义字符：",[251,156489,156490,156499],{},[254,156491,156492],{},[257,156493,156494,156497],{},[260,156495,156496],{},"写法",[260,156498,100690],{},[298,156500,156501,156511,156520,156530,156539],{},[257,156502,156503,156508],{},[303,156504,156505],{},[100,156506,156507],{},"\\n",[303,156509,156510],{},"换行",[257,156512,156513,156517],{},[303,156514,156515],{},[100,156516,1219],{},[303,156518,156519],{},"制表符",[257,156521,156522,156527],{},[303,156523,156524],{},[100,156525,156526],{},"\\\\",[303,156528,156529],{},"反斜杠",[257,156531,156532,156536],{},[303,156533,156534],{},[100,156535,156477],{},[303,156537,156538],{},"双引号",[257,156540,156541,156546],{},[303,156542,156543],{},[100,156544,156545],{},"\\'",[303,156547,156548],{},"单引号",[45,156550,156552],{"id":156551},"_29-字符串拼接","2.9 字符串拼接",[94,156554,156556],{"className":30368,"code":156555,"language":30370,"meta":24,"style":24},"name = \"小明\"\nprint(\"你好，\" + name)\n",[100,156557,156558,156566],{"__ignoreMap":24},[103,156559,156560,156562,156564],{"class":105,"line":106},[103,156561,146518],{"class":113},[103,156563,159],{"class":109},[103,156565,149335],{"class":218},[103,156567,156568,156570,156572,156575,156577],{"class":105,"line":25},[103,156569,30405],{"class":162},[103,156571,114],{"class":113},[103,156573,156574],{"class":218},"\"你好，\"",[103,156576,45556],{"class":109},[103,156578,156579],{"class":113}," name)\n",[14,156581,156582],{},"字符串只能和字符串拼接：",[94,156584,156586],{"className":30368,"code":156585,"language":30370,"meta":24,"style":24},"age = 18\nprint(\"年龄:\" + str(age))\n",[100,156587,156588,156596],{"__ignoreMap":24},[103,156589,156590,156592,156594],{"class":105,"line":106},[103,156591,146528],{"class":113},[103,156593,159],{"class":109},[103,156595,146533],{"class":162},[103,156597,156598,156600,156602,156604,156606,156608],{"class":105,"line":25},[103,156599,30405],{"class":162},[103,156601,114],{"class":113},[103,156603,146499],{"class":218},[103,156605,45556],{"class":109},[103,156607,73909],{"class":162},[103,156609,156610],{"class":113},"(age))\n",[14,156612,156613],{},"更推荐使用格式化字符串。",[45,156615,156617],{"id":156616},"_210-字符串格式化","2.10 字符串格式化",[74,156619,156621],{"id":156620},"_2101-百分号格式化","2.10.1 百分号格式化",[94,156623,156625],{"className":30368,"code":156624,"language":30370,"meta":24,"style":24},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[100,156626,156627,156635,156643,156652,156656],{"__ignoreMap":24},[103,156628,156629,156631,156633],{"class":105,"line":106},[103,156630,146518],{"class":113},[103,156632,159],{"class":109},[103,156634,149335],{"class":218},[103,156636,156637,156639,156641],{"class":105,"line":25},[103,156638,146528],{"class":113},[103,156640,159],{"class":109},[103,156642,146533],{"class":162},[103,156644,156645,156647,156649],{"class":105,"line":1168},[103,156646,155340],{"class":113},[103,156648,159],{"class":109},[103,156650,156651],{"class":162}," 95.5\n",[103,156653,156654],{"class":105,"line":1183},[103,156655,2389],{"emptyLinePlaceholder":30},[103,156657,156658,156660,156662,156665,156668,156671,156674,156677,156680,156682,156684],{"class":105,"line":1189},[103,156659,30405],{"class":162},[103,156661,114],{"class":113},[103,156663,156664],{"class":218},"\"姓名:",[103,156666,156667],{"class":162},"%s",[103,156669,156670],{"class":218}," 年龄:",[103,156672,156673],{"class":162},"%d",[103,156675,156676],{"class":218}," 分数:",[103,156678,156679],{"class":162},"%.1f",[103,156681,364],{"class":218},[103,156683,156063],{"class":109},[103,156685,156686],{"class":113}," (name, age, score))\n",[14,156688,156689],{},"常用占位符：",[251,156691,156692,156701],{},[254,156693,156694],{},[257,156695,156696,156699],{},[260,156697,156698],{},"占位符",[260,156700,25859],{},[298,156702,156703,156711,156719],{},[257,156704,156705,156709],{},[303,156706,156707],{},[100,156708,156667],{},[303,156710,155206],{},[257,156712,156713,156717],{},[303,156714,156715],{},[100,156716,156673],{},[303,156718,155184],{},[257,156720,156721,156726],{},[303,156722,156723],{},[100,156724,156725],{},"%f",[303,156727,155195],{},[14,156729,156730],{},"精度控制：",[94,156732,156734],{"className":30368,"code":156733,"language":30370,"meta":24,"style":24},"price = 12.3456\nprint(\"%.2f\" % price)\n",[100,156735,156736,156745],{"__ignoreMap":24},[103,156737,156738,156740,156742],{"class":105,"line":106},[103,156739,146663],{"class":113},[103,156741,159],{"class":109},[103,156743,156744],{"class":162}," 12.3456\n",[103,156746,156747,156749,156751,156753,156756,156758,156760],{"class":105,"line":25},[103,156748,30405],{"class":162},[103,156750,114],{"class":113},[103,156752,364],{"class":218},[103,156754,156755],{"class":162},"%.2f",[103,156757,364],{"class":218},[103,156759,156063],{"class":109},[103,156761,156762],{"class":113}," price)\n",[74,156764,156766],{"id":156765},"_2102-format方法","2.10.2 format方法",[94,156768,156770],{"className":30368,"code":156769,"language":30370,"meta":24,"style":24},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[100,156771,156772,156780,156788,156792,156811,156831],{"__ignoreMap":24},[103,156773,156774,156776,156778],{"class":105,"line":106},[103,156775,146518],{"class":113},[103,156777,159],{"class":109},[103,156779,149335],{"class":218},[103,156781,156782,156784,156786],{"class":105,"line":25},[103,156783,146528],{"class":113},[103,156785,159],{"class":109},[103,156787,146533],{"class":162},[103,156789,156790],{"class":105,"line":1168},[103,156791,2389],{"emptyLinePlaceholder":30},[103,156793,156794,156796,156798,156800,156802,156804,156806,156808],{"class":105,"line":1183},[103,156795,30405],{"class":162},[103,156797,114],{"class":113},[103,156799,156664],{"class":218},[103,156801,32449],{"class":162},[103,156803,156670],{"class":218},[103,156805,32449],{"class":162},[103,156807,364],{"class":218},[103,156809,156810],{"class":113},".format(name, age))\n",[103,156812,156813,156815,156817,156819,156822,156824,156827,156829],{"class":105,"line":1189},[103,156814,30405],{"class":162},[103,156816,114],{"class":113},[103,156818,156664],{"class":218},[103,156820,156821],{"class":162},"{0}",[103,156823,156670],{"class":218},[103,156825,156826],{"class":162},"{1}",[103,156828,364],{"class":218},[103,156830,156810],{"class":113},[103,156832,156833,156835,156837,156839,156842,156844,156847,156849,156852,156854,156856,156859,156861,156863],{"class":105,"line":1203},[103,156834,30405],{"class":162},[103,156836,114],{"class":113},[103,156838,156664],{"class":218},[103,156840,156841],{"class":162},"{name}",[103,156843,156670],{"class":218},[103,156845,156846],{"class":162},"{age}",[103,156848,364],{"class":218},[103,156850,156851],{"class":113},".format(",[103,156853,79800],{"class":5206},[103,156855,159],{"class":109},[103,156857,156858],{"class":113},"name, ",[103,156860,70211],{"class":5206},[103,156862,159],{"class":109},[103,156864,156865],{"class":113},"age))\n",[74,156867,156869],{"id":156868},"_2103-f-string","2.10.3 f-string",[14,156871,156872],{},"推荐写法：",[94,156874,156876],{"className":30368,"code":156875,"language":30370,"meta":24,"style":24},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[100,156877,156878,156886,156894,156902,156906],{"__ignoreMap":24},[103,156879,156880,156882,156884],{"class":105,"line":106},[103,156881,146518],{"class":113},[103,156883,159],{"class":109},[103,156885,149335],{"class":218},[103,156887,156888,156890,156892],{"class":105,"line":25},[103,156889,146528],{"class":113},[103,156891,159],{"class":109},[103,156893,146533],{"class":162},[103,156895,156896,156898,156900],{"class":105,"line":1168},[103,156897,155340],{"class":113},[103,156899,159],{"class":109},[103,156901,156651],{"class":162},[103,156903,156904],{"class":105,"line":1183},[103,156905,2389],{"emptyLinePlaceholder":30},[103,156907,156908,156910,156912,156914,156916,156918,156920,156922,156924,156926,156928,156930,156932,156934,156937,156940,156942,156944],{"class":105,"line":1189},[103,156909,30405],{"class":162},[103,156911,114],{"class":113},[103,156913,166],{"class":109},[103,156915,156664],{"class":218},[103,156917,1009],{"class":162},[103,156919,79800],{"class":113},[103,156921,1059],{"class":162},[103,156923,156670],{"class":218},[103,156925,1009],{"class":162},[103,156927,70211],{"class":113},[103,156929,1059],{"class":162},[103,156931,156676],{"class":218},[103,156933,1009],{"class":162},[103,156935,156936],{"class":113},"score",[103,156938,156939],{"class":109},":.1f",[103,156941,1059],{"class":162},[103,156943,364],{"class":218},[103,156945,120],{"class":113},[14,156947,156948],{},"表达式也可以放进去：",[94,156950,156952],{"className":30368,"code":156951,"language":30370,"meta":24,"style":24},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[100,156953,156954,156962,156970],{"__ignoreMap":24},[103,156955,156956,156958,156960],{"class":105,"line":106},[103,156957,146663],{"class":113},[103,156959,159],{"class":109},[103,156961,146668],{"class":162},[103,156963,156964,156966,156968],{"class":105,"line":25},[103,156965,146673],{"class":113},[103,156967,159],{"class":109},[103,156969,54417],{"class":162},[103,156971,156972,156974,156976,156978,156981,156983,156985,156987,156990,156992,156995],{"class":105,"line":1168},[103,156973,30405],{"class":162},[103,156975,114],{"class":113},[103,156977,166],{"class":109},[103,156979,156980],{"class":218},"\"总价:",[103,156982,1009],{"class":162},[103,156984,146663],{"class":113},[103,156986,568],{"class":109},[103,156988,156989],{"class":113}," count",[103,156991,1059],{"class":162},[103,156993,156994],{"class":218},"元\"",[103,156996,120],{"class":113},[45,156998,157000],{"id":156999},"_211-input输入","2.11 input输入",[14,157002,157003,157006],{},[100,157004,157005],{},"input()"," 会暂停程序，等待用户输入。",[94,157008,157010],{"className":30368,"code":157009,"language":30370,"meta":24,"style":24},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[100,157011,157012,157026],{"__ignoreMap":24},[103,157013,157014,157016,157018,157020,157022,157024],{"class":105,"line":106},[103,157015,146518],{"class":113},[103,157017,159],{"class":109},[103,157019,60595],{"class":162},[103,157021,114],{"class":113},[103,157023,152361],{"class":218},[103,157025,120],{"class":113},[103,157027,157028,157030,157032,157034,157037,157039,157041,157043,157045],{"class":105,"line":25},[103,157029,30405],{"class":162},[103,157031,114],{"class":113},[103,157033,166],{"class":109},[103,157035,157036],{"class":218},"\"你好，",[103,157038,1009],{"class":162},[103,157040,79800],{"class":113},[103,157042,1059],{"class":162},[103,157044,364],{"class":218},[103,157046,120],{"class":113},[14,157048,157049],{},"输入整数：",[94,157051,157053],{"className":30368,"code":157052,"language":30370,"meta":24,"style":24},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[100,157054,157055,157073],{"__ignoreMap":24},[103,157056,157057,157059,157061,157063,157065,157067,157069,157071],{"class":105,"line":106},[103,157058,146528],{"class":113},[103,157060,159],{"class":109},[103,157062,2371],{"class":162},[103,157064,114],{"class":113},[103,157066,53811],{"class":162},[103,157068,114],{"class":113},[103,157070,152376],{"class":218},[103,157072,30487],{"class":113},[103,157074,157075,157077,157079,157081,157084,157086,157088,157090,157093,157095],{"class":105,"line":25},[103,157076,30405],{"class":162},[103,157078,114],{"class":113},[103,157080,166],{"class":109},[103,157082,157083],{"class":218},"\"明年你",[103,157085,1009],{"class":162},[103,157087,146528],{"class":113},[103,157089,594],{"class":109},[103,157091,157092],{"class":162}," 1}",[103,157094,149386],{"class":218},[103,157096,120],{"class":113},[14,157098,157099],{},"输入小数：",[94,157101,157103],{"className":30368,"code":157102,"language":30370,"meta":24,"style":24},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[100,157104,157105,157124],{"__ignoreMap":24},[103,157106,157107,157109,157111,157113,157115,157117,157119,157122],{"class":105,"line":106},[103,157108,155313],{"class":113},[103,157110,159],{"class":109},[103,157112,109787],{"class":162},[103,157114,114],{"class":113},[103,157116,53811],{"class":162},[103,157118,114],{"class":113},[103,157120,157121],{"class":218},"\"请输入身高:\"",[103,157123,30487],{"class":113},[103,157125,157126,157128,157130,157132,157135,157137,157139,157142,157144,157147],{"class":105,"line":25},[103,157127,30405],{"class":162},[103,157129,114],{"class":113},[103,157131,166],{"class":109},[103,157133,157134],{"class":218},"\"身高:",[103,157136,1009],{"class":162},[103,157138,24971],{"class":113},[103,157140,157141],{"class":109},":.2f",[103,157143,1059],{"class":162},[103,157145,157146],{"class":218},"米\"",[103,157148,120],{"class":113},[45,157150,157152],{"id":157151},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157154,123274],{},[57,157156,157157,157160,157163,157166],{},[60,157158,157159],{},"输入商品单价。",[60,157161,157162],{},"输入购买数量。",[60,157164,157165],{},"输入折扣，例如 0.8 表示八折。",[60,157167,157168],{},"输出最终金额，保留两位小数。",[14,157170,10025],{},[94,157172,157174],{"className":30368,"code":157173,"language":30370,"meta":24,"style":24},"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",[100,157175,157176,157195,157214,157234,157238,157258,157262,157285,157306,157328],{"__ignoreMap":24},[103,157177,157178,157180,157182,157184,157186,157188,157190,157193],{"class":105,"line":106},[103,157179,146663],{"class":113},[103,157181,159],{"class":109},[103,157183,109787],{"class":162},[103,157185,114],{"class":113},[103,157187,53811],{"class":162},[103,157189,114],{"class":113},[103,157191,157192],{"class":218},"\"请输入商品单价:\"",[103,157194,30487],{"class":113},[103,157196,157197,157199,157201,157203,157205,157207,157209,157212],{"class":105,"line":25},[103,157198,146673],{"class":113},[103,157200,159],{"class":109},[103,157202,2371],{"class":162},[103,157204,114],{"class":113},[103,157206,53811],{"class":162},[103,157208,114],{"class":113},[103,157210,157211],{"class":218},"\"请输入购买数量:\"",[103,157213,30487],{"class":113},[103,157215,157216,157219,157221,157223,157225,157227,157229,157232],{"class":105,"line":1168},[103,157217,157218],{"class":113},"discount ",[103,157220,159],{"class":109},[103,157222,109787],{"class":162},[103,157224,114],{"class":113},[103,157226,53811],{"class":162},[103,157228,114],{"class":113},[103,157230,157231],{"class":218},"\"请输入折扣:\"",[103,157233,30487],{"class":113},[103,157235,157236],{"class":105,"line":1183},[103,157237,2389],{"emptyLinePlaceholder":30},[103,157239,157240,157243,157245,157248,157250,157253,157255],{"class":105,"line":1189},[103,157241,157242],{"class":113},"total ",[103,157244,159],{"class":109},[103,157246,157247],{"class":113}," price ",[103,157249,568],{"class":109},[103,157251,157252],{"class":113}," count ",[103,157254,568],{"class":109},[103,157256,157257],{"class":113}," discount\n",[103,157259,157260],{"class":105,"line":1203},[103,157261,2389],{"emptyLinePlaceholder":30},[103,157263,157264,157266,157268,157270,157273,157275,157277,157279,157281,157283],{"class":105,"line":1209},[103,157265,30405],{"class":162},[103,157267,114],{"class":113},[103,157269,166],{"class":109},[103,157271,157272],{"class":218},"\"商品单价:",[103,157274,1009],{"class":162},[103,157276,79805],{"class":113},[103,157278,157141],{"class":109},[103,157280,1059],{"class":162},[103,157282,364],{"class":218},[103,157284,120],{"class":113},[103,157286,157287,157289,157291,157293,157296,157298,157300,157302,157304],{"class":105,"line":1300},[103,157288,30405],{"class":162},[103,157290,114],{"class":113},[103,157292,166],{"class":109},[103,157294,157295],{"class":218},"\"购买数量:",[103,157297,1009],{"class":162},[103,157299,84424],{"class":113},[103,157301,1059],{"class":162},[103,157303,364],{"class":218},[103,157305,120],{"class":113},[103,157307,157308,157310,157312,157314,157317,157319,157322,157324,157326],{"class":105,"line":1306},[103,157309,30405],{"class":162},[103,157311,114],{"class":113},[103,157313,166],{"class":109},[103,157315,157316],{"class":218},"\"折扣:",[103,157318,1009],{"class":162},[103,157320,157321],{"class":113},"discount",[103,157323,1059],{"class":162},[103,157325,364],{"class":218},[103,157327,120],{"class":113},[103,157329,157330,157332,157334,157336,157339,157341,157344,157346,157348,157350],{"class":105,"line":1318},[103,157331,30405],{"class":162},[103,157333,114],{"class":113},[103,157335,166],{"class":109},[103,157337,157338],{"class":218},"\"应付金额:",[103,157340,1009],{"class":162},[103,157342,157343],{"class":113},"total",[103,157345,157141],{"class":109},[103,157347,1059],{"class":162},[103,157349,156994],{"class":218},[103,157351,120],{"class":113},[45,157353,157355],{"id":157354},"_213-易错点","2.13 易错点",[57,157357,157358,157363,157369,157377,157380],{},[60,157359,157360,157362],{},[100,157361,157005],{}," 的结果是字符串，做运算前要转换。",[60,157364,157365,157366,28375],{},"字符串拼接时，数字要先 ",[100,157367,157368],{},"str()",[60,157370,157371,157373,157374,157376],{},[100,157372,159],{}," 是赋值，",[100,157375,2938],{}," 是比较。",[60,157378,157379],{},"Python 没有自增自减运算符。",[60,157381,157382],{},"浮点数计算可能有精度误差：",[94,157384,157386],{"className":30368,"code":157385,"language":30370,"meta":24,"style":24},"print(0.1 + 0.2)\n",[100,157387,157388],{"__ignoreMap":24},[103,157389,157390,157392,157394,157396,157398,157401],{"class":105,"line":106},[103,157391,30405],{"class":162},[103,157393,114],{"class":113},[103,157395,86200],{"class":162},[103,157397,45556],{"class":109},[103,157399,157400],{"class":162}," 0.2",[103,157402,120],{"class":113},[14,157404,157405,157406,157409],{},"金额计算如果要求严格，可以后续学习 ",[100,157407,157408],{},"decimal"," 模块。",[45,157411,157413],{"id":157412},"_214-本章练习","2.14 本章练习",[57,157415,157416,157419,157422,157425,157428],{},[60,157417,157418],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[60,157420,157421],{},"输入圆的半径，计算面积，保留两位小数。",[60,157423,157424],{},"输入工资和奖金，计算总收入。",[60,157426,157427],{},"输入摄氏温度，转换为华氏温度。",[60,157429,157430],{},"写一个 BMI 计算程序：",[94,157432,157435],{"className":157433,"code":157434,"language":5177,"meta":24},[5175],"BMI = 体重kg \u002F 身高m ** 2\n",[100,157436,157434],{"__ignoreMap":24},[5116,157438,157439],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":24,"searchDepth":25,"depth":25,"links":157441},[157442,157443,157444,157445,157446,157447,157448,157454,157455,157456,157461,157462,157463,157464],{"id":155003,"depth":25,"text":155004},{"id":155112,"depth":25,"text":155113},{"id":155283,"depth":25,"text":155284},{"id":155360,"depth":25,"text":155361},{"id":50721,"depth":25,"text":50722},{"id":155666,"depth":25,"text":155667},{"id":155892,"depth":25,"text":155893,"children":157449},[157450,157451,157452,157453],{"id":155896,"depth":1168,"text":155897},{"id":156090,"depth":1168,"text":156091},{"id":156178,"depth":1168,"text":156179},{"id":156284,"depth":1168,"text":156285},{"id":156393,"depth":25,"text":156394},{"id":156551,"depth":25,"text":156552},{"id":156616,"depth":25,"text":156617,"children":157457},[157458,157459,157460],{"id":156620,"depth":1168,"text":156621},{"id":156765,"depth":1168,"text":156766},{"id":156868,"depth":1168,"text":156869},{"id":156999,"depth":25,"text":157000},{"id":157151,"depth":25,"text":157152},{"id":157354,"depth":25,"text":157355},{"id":157412,"depth":25,"text":157413},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":154995,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157471,"title":157472,"body":157473,"description":27,"extension":28,"meta":159109,"navigation":30,"path":159110,"seo":159111,"stem":159112,"__hash__":159113},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157474,"toc":159090},[157475,157478,157482,157485,157500,157503,157531,157535,157585,157587,157603,157606,157632,157635,157639,157706,157709,157725,157729,157732,157850,157853,157860,157909,157915,157919,157922,158035,158038,158042,158046,158049,158099,158103,158106,158156,158160,158163,158201,158205,158208,158254,158257,158292,158296,158301,158304,158350,158352,158419,158423,158429,158540,158549,158553,158555,158566,158568,158734,158738,158740,158754,158756,158970,158974,158993,159010,159013,159059,159063,159087],[10,157476,157472],{"id":157477},"_3-判断语句",[45,157479,157481],{"id":157480},"_31-布尔值","3.1 布尔值",[14,157483,157484],{},"判断语句依赖布尔值：",[94,157486,157488],{"className":30368,"code":157487,"language":30370,"meta":24,"style":24},"True\nFalse\n",[100,157489,157490,157495],{"__ignoreMap":24},[103,157491,157492],{"class":105,"line":106},[103,157493,157494],{"class":162},"True\n",[103,157496,157497],{"class":105,"line":25},[103,157498,157499],{"class":162},"False\n",[14,157501,157502],{},"比较表达式会产生布尔值：",[94,157504,157506],{"className":30368,"code":157505,"language":30370,"meta":24,"style":24},"age = 18\nprint(age >= 18)  # True\n",[100,157507,157508,157516],{"__ignoreMap":24},[103,157509,157510,157512,157514],{"class":105,"line":106},[103,157511,146528],{"class":113},[103,157513,159],{"class":109},[103,157515,146533],{"class":162},[103,157517,157518,157520,157522,157524,157526,157528],{"class":105,"line":25},[103,157519,30405],{"class":162},[103,157521,155750],{"class":113},[103,157523,1699],{"class":109},[103,157525,156267],{"class":162},[103,157527,45798],{"class":113},[103,157529,157530],{"class":172},"# True\n",[45,157532,157534],{"id":157533},"_32-if基础语法","3.2 if基础语法",[94,157536,157538],{"className":30368,"code":157537,"language":30370,"meta":24,"style":24},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[100,157539,157540,157558,157562,157574],{"__ignoreMap":24},[103,157541,157542,157544,157546,157548,157550,157552,157554,157556],{"class":105,"line":106},[103,157543,146528],{"class":113},[103,157545,159],{"class":109},[103,157547,2371],{"class":162},[103,157549,114],{"class":113},[103,157551,53811],{"class":162},[103,157553,114],{"class":113},[103,157555,152376],{"class":218},[103,157557,30487],{"class":113},[103,157559,157560],{"class":105,"line":25},[103,157561,2389],{"emptyLinePlaceholder":30},[103,157563,157564,157566,157568,157570,157572],{"class":105,"line":1168},[103,157565,1520],{"class":109},[103,157567,15697],{"class":113},[103,157569,1699],{"class":109},[103,157571,156267],{"class":162},[103,157573,3728],{"class":113},[103,157575,157576,157578,157580,157583],{"class":105,"line":1183},[103,157577,31289],{"class":162},[103,157579,114],{"class":113},[103,157581,157582],{"class":218},"\"可以进入网吧\"",[103,157584,120],{"class":113},[14,157586,9015],{},[57,157588,157589,157594,157597,157600],{},[60,157590,157591,157593],{},[100,157592,1520],{}," 后面是条件表达式。",[60,157595,157596],{},"条件后面必须写冒号。",[60,157598,157599],{},"条件成立时执行缩进代码块。",[60,157601,157602],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157604,157605],{},"错误示例：",[94,157607,157609],{"className":30368,"code":157608,"language":30370,"meta":24,"style":24},"if age >= 18\n    print(\"可以进入\")\n",[100,157610,157611,157621],{"__ignoreMap":24},[103,157612,157613,157615,157617,157619],{"class":105,"line":106},[103,157614,1520],{"class":109},[103,157616,15697],{"class":113},[103,157618,1699],{"class":109},[103,157620,146533],{"class":162},[103,157622,157623,157625,157627,157630],{"class":105,"line":25},[103,157624,31289],{"class":162},[103,157626,114],{"class":113},[103,157628,157629],{"class":218},"\"可以进入\"",[103,157631,120],{"class":113},[14,157633,157634],{},"缺少冒号。",[45,157636,157638],{"id":157637},"_33-if-else","3.3 if else",[94,157640,157642],{"className":30368,"code":157641,"language":30370,"meta":24,"style":24},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[100,157643,157644,157662,157666,157678,157689,157695],{"__ignoreMap":24},[103,157645,157646,157648,157650,157652,157654,157656,157658,157660],{"class":105,"line":106},[103,157647,146528],{"class":113},[103,157649,159],{"class":109},[103,157651,2371],{"class":162},[103,157653,114],{"class":113},[103,157655,53811],{"class":162},[103,157657,114],{"class":113},[103,157659,152376],{"class":218},[103,157661,30487],{"class":113},[103,157663,157664],{"class":105,"line":25},[103,157665,2389],{"emptyLinePlaceholder":30},[103,157667,157668,157670,157672,157674,157676],{"class":105,"line":1168},[103,157669,1520],{"class":109},[103,157671,15697],{"class":113},[103,157673,1699],{"class":109},[103,157675,156267],{"class":162},[103,157677,3728],{"class":113},[103,157679,157680,157682,157684,157687],{"class":105,"line":1183},[103,157681,31289],{"class":162},[103,157683,114],{"class":113},[103,157685,157686],{"class":218},"\"成年人\"",[103,157688,120],{"class":113},[103,157690,157691,157693],{"class":105,"line":1189},[103,157692,1690],{"class":109},[103,157694,3728],{"class":113},[103,157696,157697,157699,157701,157704],{"class":105,"line":1203},[103,157698,31289],{"class":162},[103,157700,114],{"class":113},[103,157702,157703],{"class":218},"\"未成年人\"",[103,157705,120],{"class":113},[14,157707,157708],{},"执行逻辑：",[57,157710,157711,157717,157722],{},[60,157712,157713,157714,157716],{},"条件成立，执行 ",[100,157715,1520],{}," 代码块。",[60,157718,157719,157720,157716],{},"条件不成立，执行 ",[100,157721,1690],{},[60,157723,157724],{},"两个代码块只会执行其中一个。",[45,157726,157728],{"id":157727},"_34-if-elif-else","3.4 if elif else",[14,157730,157731],{},"多条件判断：",[94,157733,157735],{"className":30368,"code":157734,"language":30370,"meta":24,"style":24},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[100,157736,157737,157755,157759,157773,157784,157798,157809,157822,157833,157839],{"__ignoreMap":24},[103,157738,157739,157741,157743,157745,157747,157749,157751,157753],{"class":105,"line":106},[103,157740,155340],{"class":113},[103,157742,159],{"class":109},[103,157744,2371],{"class":162},[103,157746,114],{"class":113},[103,157748,53811],{"class":162},[103,157750,114],{"class":113},[103,157752,152391],{"class":218},[103,157754,30487],{"class":113},[103,157756,157757],{"class":105,"line":25},[103,157758,2389],{"emptyLinePlaceholder":30},[103,157760,157761,157763,157766,157768,157771],{"class":105,"line":1168},[103,157762,1520],{"class":109},[103,157764,157765],{"class":113}," score ",[103,157767,1699],{"class":109},[103,157769,157770],{"class":162}," 90",[103,157772,3728],{"class":113},[103,157774,157775,157777,157779,157782],{"class":105,"line":1183},[103,157776,31289],{"class":162},[103,157778,114],{"class":113},[103,157780,157781],{"class":218},"\"优秀\"",[103,157783,120],{"class":113},[103,157785,157786,157789,157791,157793,157796],{"class":105,"line":1189},[103,157787,157788],{"class":109},"elif",[103,157790,157765],{"class":113},[103,157792,1699],{"class":109},[103,157794,157795],{"class":162}," 80",[103,157797,3728],{"class":113},[103,157799,157800,157802,157804,157807],{"class":105,"line":1203},[103,157801,31289],{"class":162},[103,157803,114],{"class":113},[103,157805,157806],{"class":218},"\"良好\"",[103,157808,120],{"class":113},[103,157810,157811,157813,157815,157817,157820],{"class":105,"line":1209},[103,157812,157788],{"class":109},[103,157814,157765],{"class":113},[103,157816,1699],{"class":109},[103,157818,157819],{"class":162}," 60",[103,157821,3728],{"class":113},[103,157823,157824,157826,157828,157831],{"class":105,"line":1300},[103,157825,31289],{"class":162},[103,157827,114],{"class":113},[103,157829,157830],{"class":218},"\"及格\"",[103,157832,120],{"class":113},[103,157834,157835,157837],{"class":105,"line":1306},[103,157836,1690],{"class":109},[103,157838,3728],{"class":113},[103,157840,157841,157843,157845,157848],{"class":105,"line":1318},[103,157842,31289],{"class":162},[103,157844,114],{"class":113},[103,157846,157847],{"class":218},"\"不及格\"",[103,157849,120],{"class":113},[14,157851,157852],{},"注意判断顺序很重要。",[14,157854,157855,157856,157859],{},"如果把 ",[100,157857,157858],{},"score >= 60"," 放在最前面：",[94,157861,157863],{"className":30368,"code":157862,"language":30370,"meta":24,"style":24},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[100,157864,157865,157877,157887,157899],{"__ignoreMap":24},[103,157866,157867,157869,157871,157873,157875],{"class":105,"line":106},[103,157868,1520],{"class":109},[103,157870,157765],{"class":113},[103,157872,1699],{"class":109},[103,157874,157819],{"class":162},[103,157876,3728],{"class":113},[103,157878,157879,157881,157883,157885],{"class":105,"line":25},[103,157880,31289],{"class":162},[103,157882,114],{"class":113},[103,157884,157830],{"class":218},[103,157886,120],{"class":113},[103,157888,157889,157891,157893,157895,157897],{"class":105,"line":1168},[103,157890,157788],{"class":109},[103,157892,157765],{"class":113},[103,157894,1699],{"class":109},[103,157896,157770],{"class":162},[103,157898,3728],{"class":113},[103,157900,157901,157903,157905,157907],{"class":105,"line":1183},[103,157902,31289],{"class":162},[103,157904,114],{"class":113},[103,157906,157781],{"class":218},[103,157908,120],{"class":113},[14,157910,157911,157912,157914],{},"成绩 95 会先满足 ",[100,157913,157858],{},"，后面的优秀分支就不会执行。",[45,157916,157918],{"id":157917},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157920,157921],{},"嵌套判断就是在一个判断内部再写判断。",[94,157923,157925],{"className":30368,"code":157924,"language":30370,"meta":24,"style":24},"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",[100,157926,157927,157945,157960,157964,157976,157990,158000,158007,158018,158024],{"__ignoreMap":24},[103,157928,157929,157931,157933,157935,157937,157939,157941,157943],{"class":105,"line":106},[103,157930,146528],{"class":113},[103,157932,159],{"class":109},[103,157934,2371],{"class":162},[103,157936,114],{"class":113},[103,157938,53811],{"class":162},[103,157940,114],{"class":113},[103,157942,152376],{"class":218},[103,157944,30487],{"class":113},[103,157946,157947,157949,157951,157953,157955,157958],{"class":105,"line":25},[103,157948,156343],{"class":113},[103,157950,159],{"class":109},[103,157952,60595],{"class":162},[103,157954,114],{"class":113},[103,157956,157957],{"class":218},"\"是否有票(y\u002Fn):\"",[103,157959,120],{"class":113},[103,157961,157962],{"class":105,"line":1168},[103,157963,2389],{"emptyLinePlaceholder":30},[103,157965,157966,157968,157970,157972,157974],{"class":105,"line":1183},[103,157967,1520],{"class":109},[103,157969,15697],{"class":113},[103,157971,1699],{"class":109},[103,157973,156267],{"class":162},[103,157975,3728],{"class":113},[103,157977,157978,157980,157983,157985,157988],{"class":105,"line":1189},[103,157979,3090],{"class":109},[103,157981,157982],{"class":113}," has_ticket ",[103,157984,2938],{"class":109},[103,157986,157987],{"class":218}," \"y\"",[103,157989,3728],{"class":113},[103,157991,157992,157994,157996,157998],{"class":105,"line":1203},[103,157993,32441],{"class":162},[103,157995,114],{"class":113},[103,157997,157629],{"class":218},[103,157999,120],{"class":113},[103,158001,158002,158005],{"class":105,"line":1209},[103,158003,158004],{"class":109},"    else",[103,158006,3728],{"class":113},[103,158008,158009,158011,158013,158016],{"class":105,"line":1300},[103,158010,32441],{"class":162},[103,158012,114],{"class":113},[103,158014,158015],{"class":218},"\"请先买票\"",[103,158017,120],{"class":113},[103,158019,158020,158022],{"class":105,"line":1306},[103,158021,1690],{"class":109},[103,158023,3728],{"class":113},[103,158025,158026,158028,158030,158033],{"class":105,"line":1318},[103,158027,31289],{"class":162},[103,158029,114],{"class":113},[103,158031,158032],{"class":218},"\"未成年人禁止进入\"",[103,158034,120],{"class":113},[14,158036,158037],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[45,158039,158041],{"id":158040},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[74,158043,158045],{"id":158044},"_361-and","3.6.1 and",[14,158047,158048],{},"两个条件都成立才成立。",[94,158050,158052],{"className":30368,"code":158051,"language":30370,"meta":24,"style":24},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[100,158053,158054,158062,158070,158074,158089],{"__ignoreMap":24},[103,158055,158056,158058,158060],{"class":105,"line":106},[103,158057,146528],{"class":113},[103,158059,159],{"class":109},[103,158061,88055],{"class":162},[103,158063,158064,158066,158068],{"class":105,"line":25},[103,158065,156343],{"class":113},[103,158067,159],{"class":109},[103,158069,153581],{"class":162},[103,158071,158072],{"class":105,"line":1168},[103,158073,2389],{"emptyLinePlaceholder":30},[103,158075,158076,158078,158080,158082,158084,158086],{"class":105,"line":1183},[103,158077,1520],{"class":109},[103,158079,15697],{"class":113},[103,158081,1699],{"class":109},[103,158083,156267],{"class":162},[103,158085,120419],{"class":109},[103,158087,158088],{"class":113}," has_ticket:\n",[103,158090,158091,158093,158095,158097],{"class":105,"line":1189},[103,158092,31289],{"class":162},[103,158094,114],{"class":113},[103,158096,157629],{"class":218},[103,158098,120],{"class":113},[74,158100,158102],{"id":158101},"_362-or","3.6.2 or",[14,158104,158105],{},"只要一个条件成立就成立。",[94,158107,158109],{"className":30368,"code":158108,"language":30370,"meta":24,"style":24},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[100,158110,158111,158120,158129,158133,158145],{"__ignoreMap":24},[103,158112,158113,158116,158118],{"class":105,"line":106},[103,158114,158115],{"class":113},"is_vip ",[103,158117,159],{"class":109},[103,158119,125789],{"class":162},[103,158121,158122,158125,158127],{"class":105,"line":25},[103,158123,158124],{"class":113},"coupon ",[103,158126,159],{"class":109},[103,158128,153581],{"class":162},[103,158130,158131],{"class":105,"line":1168},[103,158132,2389],{"emptyLinePlaceholder":30},[103,158134,158135,158137,158140,158142],{"class":105,"line":1183},[103,158136,1520],{"class":109},[103,158138,158139],{"class":113}," is_vip ",[103,158141,115080],{"class":109},[103,158143,158144],{"class":113}," coupon:\n",[103,158146,158147,158149,158151,158154],{"class":105,"line":1189},[103,158148,31289],{"class":162},[103,158150,114],{"class":113},[103,158152,158153],{"class":218},"\"可以享受优惠\"",[103,158155,120],{"class":113},[74,158157,158159],{"id":158158},"_363-not","3.6.3 not",[14,158161,158162],{},"取反。",[94,158164,158166],{"className":30368,"code":158165,"language":30370,"meta":24,"style":24},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[100,158167,158168,158177,158181,158190],{"__ignoreMap":24},[103,158169,158170,158173,158175],{"class":105,"line":106},[103,158171,158172],{"class":113},"is_closed ",[103,158174,159],{"class":109},[103,158176,125789],{"class":162},[103,158178,158179],{"class":105,"line":25},[103,158180,2389],{"emptyLinePlaceholder":30},[103,158182,158183,158185,158187],{"class":105,"line":1168},[103,158184,1520],{"class":109},[103,158186,38920],{"class":109},[103,158188,158189],{"class":113}," is_closed:\n",[103,158191,158192,158194,158196,158199],{"class":105,"line":1183},[103,158193,31289],{"class":162},[103,158195,114],{"class":113},[103,158197,158198],{"class":218},"\"店铺营业中\"",[103,158200,120],{"class":113},[45,158202,158204],{"id":158203},"_37-链式比较","3.7 链式比较",[14,158206,158207],{},"Python 支持链式比较：",[94,158209,158211],{"className":30368,"code":158210,"language":30370,"meta":24,"style":24},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[100,158212,158213,158222,158226,158243],{"__ignoreMap":24},[103,158214,158215,158217,158219],{"class":105,"line":106},[103,158216,155340],{"class":113},[103,158218,159],{"class":109},[103,158220,158221],{"class":162}," 85\n",[103,158223,158224],{"class":105,"line":25},[103,158225,2389],{"emptyLinePlaceholder":30},[103,158227,158228,158230,158232,158235,158237,158239,158241],{"class":105,"line":1168},[103,158229,1520],{"class":109},[103,158231,4082],{"class":162},[103,158233,158234],{"class":109}," \u003C=",[103,158236,157765],{"class":113},[103,158238,1577],{"class":109},[103,158240,5744],{"class":162},[103,158242,3728],{"class":113},[103,158244,158245,158247,158249,158252],{"class":105,"line":1183},[103,158246,31289],{"class":162},[103,158248,114],{"class":113},[103,158250,158251],{"class":218},"\"成绩合法\"",[103,158253,120],{"class":113},[14,158255,158256],{},"等价于：",[94,158258,158260],{"className":30368,"code":158259,"language":30370,"meta":24,"style":24},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[100,158261,158262,158282],{"__ignoreMap":24},[103,158263,158264,158266,158268,158270,158272,158274,158276,158278,158280],{"class":105,"line":106},[103,158265,1520],{"class":109},[103,158267,157765],{"class":113},[103,158269,1699],{"class":109},[103,158271,4082],{"class":162},[103,158273,120419],{"class":109},[103,158275,157765],{"class":113},[103,158277,1577],{"class":109},[103,158279,5744],{"class":162},[103,158281,3728],{"class":113},[103,158283,158284,158286,158288,158290],{"class":105,"line":25},[103,158285,31289],{"class":162},[103,158287,114],{"class":113},[103,158289,158251],{"class":218},[103,158291,120],{"class":113},[45,158293,158295],{"id":158294},"_38-真值和假值","3.8 真值和假值",[14,158297,116457,158298,158300],{},[100,158299,1520],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158302,158303],{},"假值：",[94,158305,158307],{"className":30368,"code":158306,"language":30370,"meta":24,"style":24},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[100,158308,158309,158313,158318,158322,158326,158331,158335,158339,158344],{"__ignoreMap":24},[103,158310,158311],{"class":105,"line":106},[103,158312,157499],{"class":162},[103,158314,158315],{"class":105,"line":25},[103,158316,158317],{"class":162},"None\n",[103,158319,158320],{"class":105,"line":1168},[103,158321,3074],{"class":162},[103,158323,158324],{"class":105,"line":1183},[103,158325,32332],{"class":162},[103,158327,158328],{"class":105,"line":1189},[103,158329,158330],{"class":218},"\"\"\n",[103,158332,158333],{"class":105,"line":1203},[103,158334,32347],{"class":113},[103,158336,158337],{"class":105,"line":1209},[103,158338,1965],{"class":113},[103,158340,158341],{"class":105,"line":1300},[103,158342,158343],{"class":113},"{}\n",[103,158345,158346,158348],{"class":105,"line":1306},[103,158347,155272],{"class":162},[103,158349,1965],{"class":113},[14,158351,15125],{},[94,158353,158355],{"className":30368,"code":158354,"language":30370,"meta":24,"style":24},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[100,158356,158357,158371,158375,158382,158402,158408],{"__ignoreMap":24},[103,158358,158359,158361,158363,158365,158367,158369],{"class":105,"line":106},[103,158360,146518],{"class":113},[103,158362,159],{"class":109},[103,158364,60595],{"class":162},[103,158366,114],{"class":113},[103,158368,152361],{"class":218},[103,158370,120],{"class":113},[103,158372,158373],{"class":105,"line":25},[103,158374,2389],{"emptyLinePlaceholder":30},[103,158376,158377,158379],{"class":105,"line":1168},[103,158378,1520],{"class":109},[103,158380,158381],{"class":113}," name:\n",[103,158383,158384,158386,158388,158390,158392,158394,158396,158398,158400],{"class":105,"line":1183},[103,158385,31289],{"class":162},[103,158387,114],{"class":113},[103,158389,166],{"class":109},[103,158391,157036],{"class":218},[103,158393,1009],{"class":162},[103,158395,79800],{"class":113},[103,158397,1059],{"class":162},[103,158399,364],{"class":218},[103,158401,120],{"class":113},[103,158403,158404,158406],{"class":105,"line":1189},[103,158405,1690],{"class":109},[103,158407,3728],{"class":113},[103,158409,158410,158412,158414,158417],{"class":105,"line":1203},[103,158411,31289],{"class":162},[103,158413,114],{"class":113},[103,158415,158416],{"class":218},"\"姓名不能为空\"",[103,158418,120],{"class":113},[45,158420,158422],{"id":158421},"_39-match语句","3.9 match语句",[14,158424,158425,158426,158428],{},"Python 3.10 开始支持 ",[100,158427,71255],{},"。它适合处理固定选项。",[94,158430,158432],{"className":30368,"code":158431,"language":30370,"meta":24,"style":24},"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",[100,158433,158434,158450,158454,158461,158471,158482,158491,158502,158511,158522,158529],{"__ignoreMap":24},[103,158435,158436,158439,158441,158443,158445,158448],{"class":105,"line":106},[103,158437,158438],{"class":113},"command ",[103,158440,159],{"class":109},[103,158442,60595],{"class":162},[103,158444,114],{"class":113},[103,158446,158447],{"class":218},"\"请输入命令:\"",[103,158449,120],{"class":113},[103,158451,158452],{"class":105,"line":25},[103,158453,2389],{"emptyLinePlaceholder":30},[103,158455,158456,158458],{"class":105,"line":1168},[103,158457,71255],{"class":109},[103,158459,158460],{"class":113}," command:\n",[103,158462,158463,158466,158469],{"class":105,"line":1183},[103,158464,158465],{"class":109},"    case",[103,158467,158468],{"class":218}," \"start\"",[103,158470,3728],{"class":113},[103,158472,158473,158475,158477,158480],{"class":105,"line":1189},[103,158474,32441],{"class":162},[103,158476,114],{"class":113},[103,158478,158479],{"class":218},"\"启动\"",[103,158481,120],{"class":113},[103,158483,158484,158486,158489],{"class":105,"line":1203},[103,158485,158465],{"class":109},[103,158487,158488],{"class":218}," \"stop\"",[103,158490,3728],{"class":113},[103,158492,158493,158495,158497,158500],{"class":105,"line":1209},[103,158494,32441],{"class":162},[103,158496,114],{"class":113},[103,158498,158499],{"class":218},"\"停止\"",[103,158501,120],{"class":113},[103,158503,158504,158506,158509],{"class":105,"line":1300},[103,158505,158465],{"class":109},[103,158507,158508],{"class":218}," \"restart\"",[103,158510,3728],{"class":113},[103,158512,158513,158515,158517,158520],{"class":105,"line":1306},[103,158514,32441],{"class":162},[103,158516,114],{"class":113},[103,158518,158519],{"class":218},"\"重启\"",[103,158521,120],{"class":113},[103,158523,158524,158526],{"class":105,"line":1318},[103,158525,158465],{"class":109},[103,158527,158528],{"class":113}," _:\n",[103,158530,158531,158533,158535,158538],{"class":105,"line":1601},[103,158532,32441],{"class":162},[103,158534,114],{"class":113},[103,158536,158537],{"class":218},"\"未知命令\"",[103,158539,120],{"class":113},[14,158541,158542,158543,158545,158546,158548],{},"入门阶段掌握 ",[100,158544,154640],{}," 更重要，",[100,158547,71255],{}," 可以作为补充。",[45,158550,158552],{"id":158551},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158554,123274],{},[57,158556,158557,158560,158563],{},[60,158558,158559],{},"输入成绩。",[60,158561,158562],{},"判断成绩是否合法。",[60,158564,158565],{},"输出等级。",[14,158567,10025],{},[94,158569,158571],{"className":30368,"code":158570,"language":30370,"meta":24,"style":24},"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",[100,158572,158573,158591,158595,158613,158624,158636,158647,158659,158670,158683,158694,158706,158717,158723],{"__ignoreMap":24},[103,158574,158575,158577,158579,158581,158583,158585,158587,158589],{"class":105,"line":106},[103,158576,155340],{"class":113},[103,158578,159],{"class":109},[103,158580,109787],{"class":162},[103,158582,114],{"class":113},[103,158584,53811],{"class":162},[103,158586,114],{"class":113},[103,158588,152391],{"class":218},[103,158590,30487],{"class":113},[103,158592,158593],{"class":105,"line":25},[103,158594,2389],{"emptyLinePlaceholder":30},[103,158596,158597,158599,158601,158603,158605,158607,158609,158611],{"class":105,"line":1168},[103,158598,1520],{"class":109},[103,158600,38920],{"class":109},[103,158602,4082],{"class":162},[103,158604,158234],{"class":109},[103,158606,157765],{"class":113},[103,158608,1577],{"class":109},[103,158610,5744],{"class":162},[103,158612,3728],{"class":113},[103,158614,158615,158617,158619,158622],{"class":105,"line":1183},[103,158616,31289],{"class":162},[103,158618,114],{"class":113},[103,158620,158621],{"class":218},"\"成绩不合法\"",[103,158623,120],{"class":113},[103,158625,158626,158628,158630,158632,158634],{"class":105,"line":1189},[103,158627,157788],{"class":109},[103,158629,157765],{"class":113},[103,158631,1699],{"class":109},[103,158633,157770],{"class":162},[103,158635,3728],{"class":113},[103,158637,158638,158640,158642,158645],{"class":105,"line":1203},[103,158639,31289],{"class":162},[103,158641,114],{"class":113},[103,158643,158644],{"class":218},"\"等级:A\"",[103,158646,120],{"class":113},[103,158648,158649,158651,158653,158655,158657],{"class":105,"line":1209},[103,158650,157788],{"class":109},[103,158652,157765],{"class":113},[103,158654,1699],{"class":109},[103,158656,157795],{"class":162},[103,158658,3728],{"class":113},[103,158660,158661,158663,158665,158668],{"class":105,"line":1300},[103,158662,31289],{"class":162},[103,158664,114],{"class":113},[103,158666,158667],{"class":218},"\"等级:B\"",[103,158669,120],{"class":113},[103,158671,158672,158674,158676,158678,158681],{"class":105,"line":1306},[103,158673,157788],{"class":109},[103,158675,157765],{"class":113},[103,158677,1699],{"class":109},[103,158679,158680],{"class":162}," 70",[103,158682,3728],{"class":113},[103,158684,158685,158687,158689,158692],{"class":105,"line":1318},[103,158686,31289],{"class":162},[103,158688,114],{"class":113},[103,158690,158691],{"class":218},"\"等级:C\"",[103,158693,120],{"class":113},[103,158695,158696,158698,158700,158702,158704],{"class":105,"line":1601},[103,158697,157788],{"class":109},[103,158699,157765],{"class":113},[103,158701,1699],{"class":109},[103,158703,157819],{"class":162},[103,158705,3728],{"class":113},[103,158707,158708,158710,158712,158715],{"class":105,"line":1606},[103,158709,31289],{"class":162},[103,158711,114],{"class":113},[103,158713,158714],{"class":218},"\"等级:D\"",[103,158716,120],{"class":113},[103,158718,158719,158721],{"class":105,"line":1612},[103,158720,1690],{"class":109},[103,158722,3728],{"class":113},[103,158724,158725,158727,158729,158732],{"class":105,"line":1617},[103,158726,31289],{"class":162},[103,158728,114],{"class":113},[103,158730,158731],{"class":218},"\"等级:E\"",[103,158733,120],{"class":113},[45,158735,158737],{"id":158736},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158739,123274],{},[57,158741,158742,158745,158748,158751],{},[60,158743,158744],{},"输入消费金额。",[60,158746,158747],{},"输入会员等级，普通、银卡、金卡。",[60,158749,158750],{},"普通不打折，银卡 9 折，金卡 8 折。",[60,158752,158753],{},"满 500 再减 50。",[14,158755,10025],{},[94,158757,158759],{"className":30368,"code":158758,"language":30370,"meta":24,"style":24},"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",[100,158760,158761,158781,158797,158801,158809,158813,158827,158837,158850,158859,158872,158880,158886,158897,158901,158915,158919,158933,158943,158947],{"__ignoreMap":24},[103,158762,158763,158766,158768,158770,158772,158774,158776,158779],{"class":105,"line":106},[103,158764,158765],{"class":113},"amount ",[103,158767,159],{"class":109},[103,158769,109787],{"class":162},[103,158771,114],{"class":113},[103,158773,53811],{"class":162},[103,158775,114],{"class":113},[103,158777,158778],{"class":218},"\"请输入消费金额:\"",[103,158780,30487],{"class":113},[103,158782,158783,158786,158788,158790,158792,158795],{"class":105,"line":25},[103,158784,158785],{"class":113},"level ",[103,158787,159],{"class":109},[103,158789,60595],{"class":162},[103,158791,114],{"class":113},[103,158793,158794],{"class":218},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[103,158796,120],{"class":113},[103,158798,158799],{"class":105,"line":1168},[103,158800,2389],{"emptyLinePlaceholder":30},[103,158802,158803,158805,158807],{"class":105,"line":1183},[103,158804,157218],{"class":113},[103,158806,159],{"class":109},[103,158808,55689],{"class":162},[103,158810,158811],{"class":105,"line":1189},[103,158812,2389],{"emptyLinePlaceholder":30},[103,158814,158815,158817,158820,158822,158825],{"class":105,"line":1203},[103,158816,1520],{"class":109},[103,158818,158819],{"class":113}," level ",[103,158821,2938],{"class":109},[103,158823,158824],{"class":218}," \"银卡\"",[103,158826,3728],{"class":113},[103,158828,158829,158832,158834],{"class":105,"line":1209},[103,158830,158831],{"class":113},"    discount ",[103,158833,159],{"class":109},[103,158835,158836],{"class":162}," 0.9\n",[103,158838,158839,158841,158843,158845,158848],{"class":105,"line":1300},[103,158840,157788],{"class":109},[103,158842,158819],{"class":113},[103,158844,2938],{"class":109},[103,158846,158847],{"class":218}," \"金卡\"",[103,158849,3728],{"class":113},[103,158851,158852,158854,158856],{"class":105,"line":1306},[103,158853,158831],{"class":113},[103,158855,159],{"class":109},[103,158857,158858],{"class":162}," 0.8\n",[103,158860,158861,158863,158865,158867,158870],{"class":105,"line":1318},[103,158862,157788],{"class":109},[103,158864,158819],{"class":113},[103,158866,2938],{"class":109},[103,158868,158869],{"class":218}," \"普通\"",[103,158871,3728],{"class":113},[103,158873,158874,158876,158878],{"class":105,"line":1601},[103,158875,158831],{"class":113},[103,158877,159],{"class":109},[103,158879,55689],{"class":162},[103,158881,158882,158884],{"class":105,"line":1606},[103,158883,1690],{"class":109},[103,158885,3728],{"class":113},[103,158887,158888,158890,158892,158895],{"class":105,"line":1612},[103,158889,31289],{"class":162},[103,158891,114],{"class":113},[103,158893,158894],{"class":218},"\"会员等级输入错误，按普通会员计算\"",[103,158896,120],{"class":113},[103,158898,158899],{"class":105,"line":1617},[103,158900,2389],{"emptyLinePlaceholder":30},[103,158902,158903,158906,158908,158911,158913],{"class":105,"line":1631},[103,158904,158905],{"class":113},"pay ",[103,158907,159],{"class":109},[103,158909,158910],{"class":113}," amount ",[103,158912,568],{"class":109},[103,158914,157257],{"class":113},[103,158916,158917],{"class":105,"line":1636},[103,158918,2389],{"emptyLinePlaceholder":30},[103,158920,158921,158923,158926,158928,158931],{"class":105,"line":1642},[103,158922,1520],{"class":109},[103,158924,158925],{"class":113}," pay ",[103,158927,1699],{"class":109},[103,158929,158930],{"class":162}," 500",[103,158932,3728],{"class":113},[103,158934,158935,158938,158940],{"class":105,"line":1663},[103,158936,158937],{"class":113},"    pay ",[103,158939,150234],{"class":109},[103,158941,158942],{"class":162}," 50\n",[103,158944,158945],{"class":105,"line":1668},[103,158946,2389],{"emptyLinePlaceholder":30},[103,158948,158949,158951,158953,158955,158957,158959,158962,158964,158966,158968],{"class":105,"line":1682},[103,158950,30405],{"class":162},[103,158952,114],{"class":113},[103,158954,166],{"class":109},[103,158956,157338],{"class":218},[103,158958,1009],{"class":162},[103,158960,158961],{"class":113},"pay",[103,158963,157141],{"class":109},[103,158965,1059],{"class":162},[103,158967,156994],{"class":218},[103,158969,120],{"class":113},[45,158971,158973],{"id":158972},"_312-易错点","3.12 易错点",[57,158975,158976,158979,158982,158985,158990],{},[60,158977,158978],{},"冒号不能漏。",[60,158980,158981],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[60,158983,158984],{},"多分支判断要注意顺序。",[60,158986,158987,158988,28375],{},"判断相等用 ",[100,158989,2938],{},[60,158991,158992],{},"字符串比较区分大小写：",[94,158994,158996],{"className":30368,"code":158995,"language":30370,"meta":24,"style":24},"\"Y\" == \"y\"  # False\n",[100,158997,158998],{"__ignoreMap":24},[103,158999,159000,159003,159005,159007],{"class":105,"line":106},[103,159001,159002],{"class":218},"\"Y\"",[103,159004,101549],{"class":109},[103,159006,157987],{"class":218},[103,159008,159009],{"class":172},"  # False\n",[14,159011,159012],{},"可转换后再判断：",[94,159014,159016],{"className":30368,"code":159015,"language":30370,"meta":24,"style":24},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[100,159017,159018,159035,159048],{"__ignoreMap":24},[103,159019,159020,159023,159025,159027,159029,159032],{"class":105,"line":106},[103,159021,159022],{"class":113},"answer ",[103,159024,159],{"class":109},[103,159026,60595],{"class":162},[103,159028,114],{"class":113},[103,159030,159031],{"class":218},"\"是否继续(y\u002Fn):\"",[103,159033,159034],{"class":113},").lower()\n",[103,159036,159037,159039,159042,159044,159046],{"class":105,"line":25},[103,159038,1520],{"class":109},[103,159040,159041],{"class":113}," answer ",[103,159043,2938],{"class":109},[103,159045,157987],{"class":218},[103,159047,3728],{"class":113},[103,159049,159050,159052,159054,159057],{"class":105,"line":1168},[103,159051,31289],{"class":162},[103,159053,114],{"class":113},[103,159055,159056],{"class":218},"\"继续\"",[103,159058,120],{"class":113},[45,159060,159062],{"id":159061},"_313-本章练习","3.13 本章练习",[57,159064,159065,159068,159071,159074,159084],{},[60,159066,159067],{},"输入年龄，判断是否成年。",[60,159069,159070],{},"输入年份，判断是否为闰年。",[60,159072,159073],{},"输入三个数字，输出最大值。",[60,159075,159076,159077,159080,159081,159083],{},"写登录判断：用户名是 ",[100,159078,159079],{},"admin"," 且密码是 ",[100,159082,15074],{}," 才登录成功。",[60,159085,159086],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5116,159088,159089],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":24,"searchDepth":25,"depth":25,"links":159091},[159092,159093,159094,159095,159096,159097,159102,159103,159104,159105,159106,159107,159108],{"id":157480,"depth":25,"text":157481},{"id":157533,"depth":25,"text":157534},{"id":157637,"depth":25,"text":157638},{"id":157727,"depth":25,"text":157728},{"id":157917,"depth":25,"text":157918},{"id":158040,"depth":25,"text":158041,"children":159098},[159099,159100,159101],{"id":158044,"depth":1168,"text":158045},{"id":158101,"depth":1168,"text":158102},{"id":158158,"depth":1168,"text":158159},{"id":158203,"depth":25,"text":158204},{"id":158294,"depth":25,"text":158295},{"id":158421,"depth":25,"text":158422},{"id":158551,"depth":25,"text":158552},{"id":158736,"depth":25,"text":158737},{"id":158972,"depth":25,"text":158973},{"id":159061,"depth":25,"text":159062},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157472,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159115,"title":159116,"body":159117,"description":27,"extension":28,"meta":160886,"navigation":30,"path":160887,"seo":160888,"stem":160889,"__hash__":160890},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159118,"toc":160866},[159119,159122,159126,159132,159135,159152,159156,159158,159175,159177,159222,159224,159241,159245,159248,159314,159317,159335,159339,159500,159509,159513,159517,159522,159569,159571,159577,159581,159586,159633,159635,159641,159645,159650,159686,159689,159736,159740,159746,159804,159809,159840,159845,159849,159904,159907,159979,159982,160041,160045,160048,160123,160126,160130,160236,160239,160265,160269,160281,160350,160353,160445,160449,160451,160462,160464,160594,160598,160800,160808,160812,160842,160846,160863],[10,159120,159116],{"id":159121},"_4-循环语句",[45,159123,159125],{"id":159124},"_41-为什么需要循环","4.1 为什么需要循环",[14,159127,159128,159129,159131],{},"如果要输出 1 到 100，不应该写 100 行 ",[100,159130,146454],{},"，而应该用循环。",[14,159133,159134],{},"循环适合处理重复任务：",[57,159136,159137,159140,159143,159146,159149],{},[60,159138,159139],{},"重复输出。",[60,159141,159142],{},"重复输入。",[60,159144,159145],{},"遍历数据。",[60,159147,159148],{},"持续执行菜单。",[60,159150,159151],{},"批量处理文件或数据。",[45,159153,159155],{"id":159154},"_42-while循环","4.2 while循环",[14,159157,5171],{},[94,159159,159161],{"className":30368,"code":159160,"language":30370,"meta":24,"style":24},"while 条件:\n    循环体\n",[100,159162,159163,159170],{"__ignoreMap":24},[103,159164,159165,159167],{"class":105,"line":106},[103,159166,108653],{"class":109},[103,159168,159169],{"class":113}," 条件:\n",[103,159171,159172],{"class":105,"line":25},[103,159173,159174],{"class":113},"    循环体\n",[14,159176,15125],{},[94,159178,159180],{"className":30368,"code":159179,"language":30370,"meta":24,"style":24},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[100,159181,159182,159190,159194,159206,159213],{"__ignoreMap":24},[103,159183,159184,159186,159188],{"class":105,"line":106},[103,159185,100138],{"class":113},[103,159187,159],{"class":109},[103,159189,55689],{"class":162},[103,159191,159192],{"class":105,"line":25},[103,159193,2389],{"emptyLinePlaceholder":30},[103,159195,159196,159198,159200,159202,159204],{"class":105,"line":1168},[103,159197,108653],{"class":109},[103,159199,9428],{"class":113},[103,159201,1577],{"class":109},[103,159203,2137],{"class":162},[103,159205,3728],{"class":113},[103,159207,159208,159210],{"class":105,"line":1183},[103,159209,31289],{"class":162},[103,159211,159212],{"class":113},"(i)\n",[103,159214,159215,159218,159220],{"class":105,"line":1189},[103,159216,159217],{"class":113},"    i ",[103,159219,9467],{"class":109},[103,159221,55689],{"class":162},[14,159223,80919],{},[57,159225,159226,159232,159235,159238],{},[60,159227,159228,159229,28375],{},"判断条件 ",[100,159230,159231],{},"i \u003C= 5",[60,159233,159234],{},"条件成立，执行循环体。",[60,159236,159237],{},"执行完后回到条件判断。",[60,159239,159240],{},"条件不成立，退出循环。",[45,159242,159244],{"id":159243},"_43-while累加","4.3 while累加",[14,159246,159247],{},"计算 1 到 100 的和：",[94,159249,159251],{"className":30368,"code":159250,"language":30370,"meta":24,"style":24},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[100,159252,159253,159261,159269,159273,159285,159295,159303,159307],{"__ignoreMap":24},[103,159254,159255,159257,159259],{"class":105,"line":106},[103,159256,100138],{"class":113},[103,159258,159],{"class":109},[103,159260,55689],{"class":162},[103,159262,159263,159265,159267],{"class":105,"line":25},[103,159264,157242],{"class":113},[103,159266,159],{"class":109},[103,159268,47323],{"class":162},[103,159270,159271],{"class":105,"line":1168},[103,159272,2389],{"emptyLinePlaceholder":30},[103,159274,159275,159277,159279,159281,159283],{"class":105,"line":1183},[103,159276,108653],{"class":109},[103,159278,9428],{"class":113},[103,159280,1577],{"class":109},[103,159282,5744],{"class":162},[103,159284,3728],{"class":113},[103,159286,159287,159290,159292],{"class":105,"line":1189},[103,159288,159289],{"class":113},"    total ",[103,159291,9467],{"class":109},[103,159293,159294],{"class":113}," i\n",[103,159296,159297,159299,159301],{"class":105,"line":1203},[103,159298,159217],{"class":113},[103,159300,9467],{"class":109},[103,159302,55689],{"class":162},[103,159304,159305],{"class":105,"line":1209},[103,159306,2389],{"emptyLinePlaceholder":30},[103,159308,159309,159311],{"class":105,"line":1300},[103,159310,30405],{"class":162},[103,159312,159313],{"class":113},"(total)\n",[14,159315,159316],{},"核心思想：",[57,159318,159319,159324,159329],{},[60,159320,159321,159323],{},[100,159322,554],{}," 控制循环次数。",[60,159325,159326,159328],{},[100,159327,157343],{}," 保存累加结果。",[60,159330,159331,159332,159334],{},"每轮循环都要更新 ",[100,159333,554],{},"，否则可能死循环。",[45,159336,159338],{"id":159337},"_44-while猜数字","4.4 while猜数字",[94,159340,159342],{"className":30368,"code":159341,"language":30370,"meta":24,"style":24},"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",[100,159343,159344,159350,159354,159371,159379,159383,159391,159411,159420,159424,159436,159447,159457,159468,159474,159496],{"__ignoreMap":24},[103,159345,159346,159348],{"class":105,"line":106},[103,159347,30382],{"class":109},[103,159349,45318],{"class":113},[103,159351,159352],{"class":105,"line":25},[103,159353,2389],{"emptyLinePlaceholder":30},[103,159355,159356,159358,159360,159363,159365,159367,159369],{"class":105,"line":1168},[103,159357,159022],{"class":113},[103,159359,159],{"class":109},[103,159361,159362],{"class":113}," random.randint(",[103,159364,331],{"class":162},[103,159366,12425],{"class":113},[103,159368,424],{"class":162},[103,159370,120],{"class":113},[103,159372,159373,159375,159377],{"class":105,"line":1183},[103,159374,146673],{"class":113},[103,159376,159],{"class":109},[103,159378,47323],{"class":162},[103,159380,159381],{"class":105,"line":1189},[103,159382,2389],{"emptyLinePlaceholder":30},[103,159384,159385,159387,159389],{"class":105,"line":1203},[103,159386,108653],{"class":109},[103,159388,95282],{"class":162},[103,159390,3728],{"class":113},[103,159392,159393,159396,159398,159400,159402,159404,159406,159409],{"class":105,"line":1209},[103,159394,159395],{"class":113},"    guess ",[103,159397,159],{"class":109},[103,159399,2371],{"class":162},[103,159401,114],{"class":113},[103,159403,53811],{"class":162},[103,159405,114],{"class":113},[103,159407,159408],{"class":218},"\"请输入1到100之间的数字:\"",[103,159410,30487],{"class":113},[103,159412,159413,159416,159418],{"class":105,"line":1300},[103,159414,159415],{"class":113},"    count ",[103,159417,9467],{"class":109},[103,159419,55689],{"class":162},[103,159421,159422],{"class":105,"line":1306},[103,159423,2389],{"emptyLinePlaceholder":30},[103,159425,159426,159428,159431,159433],{"class":105,"line":1318},[103,159427,3090],{"class":109},[103,159429,159430],{"class":113}," guess ",[103,159432,1073],{"class":109},[103,159434,159435],{"class":113}," answer:\n",[103,159437,159438,159440,159442,159445],{"class":105,"line":1601},[103,159439,32441],{"class":162},[103,159441,114],{"class":113},[103,159443,159444],{"class":218},"\"猜大了\"",[103,159446,120],{"class":113},[103,159448,159449,159451,159453,159455],{"class":105,"line":1606},[103,159450,39283],{"class":109},[103,159452,159430],{"class":113},[103,159454,1023],{"class":109},[103,159456,159435],{"class":113},[103,159458,159459,159461,159463,159466],{"class":105,"line":1612},[103,159460,32441],{"class":162},[103,159462,114],{"class":113},[103,159464,159465],{"class":218},"\"猜小了\"",[103,159467,120],{"class":113},[103,159469,159470,159472],{"class":105,"line":1617},[103,159471,158004],{"class":109},[103,159473,3728],{"class":113},[103,159475,159476,159478,159480,159482,159485,159487,159489,159491,159494],{"class":105,"line":1631},[103,159477,32441],{"class":162},[103,159479,114],{"class":113},[103,159481,166],{"class":109},[103,159483,159484],{"class":218},"\"猜对了，一共猜了",[103,159486,1009],{"class":162},[103,159488,84424],{"class":113},[103,159490,1059],{"class":162},[103,159492,159493],{"class":218},"次\"",[103,159495,120],{"class":113},[103,159497,159498],{"class":105,"line":1636},[103,159499,31617],{"class":109},[14,159501,159502,159505,159506,159508],{},[100,159503,159504],{},"while True"," 表示无限循环，通常配合 ",[100,159507,2042],{}," 使用。",[45,159510,159512],{"id":159511},"_45-break和continue","4.5 break和continue",[74,159514,159516],{"id":159515},"_451-break","4.5.1 break",[14,159518,159519,159521],{},[100,159520,2042],{}," 直接结束整个循环。",[94,159523,159525],{"className":30368,"code":159524,"language":30370,"meta":24,"style":24},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[100,159526,159527,159547,159559,159563],{"__ignoreMap":24},[103,159528,159529,159531,159533,159535,159537,159539,159541,159543,159545],{"class":105,"line":106},[103,159530,3014],{"class":109},[103,159532,9428],{"class":113},[103,159534,26033],{"class":109},[103,159536,32433],{"class":162},[103,159538,114],{"class":113},[103,159540,331],{"class":162},[103,159542,12425],{"class":113},[103,159544,457],{"class":162},[103,159546,30776],{"class":113},[103,159548,159549,159551,159553,159555,159557],{"class":105,"line":25},[103,159550,3090],{"class":109},[103,159552,9428],{"class":113},[103,159554,2938],{"class":109},[103,159556,78060],{"class":162},[103,159558,3728],{"class":113},[103,159560,159561],{"class":105,"line":1168},[103,159562,31617],{"class":109},[103,159564,159565,159567],{"class":105,"line":1183},[103,159566,31289],{"class":162},[103,159568,159212],{"class":113},[14,159570,146439],{},[94,159572,159575],{"className":159573,"code":159574,"language":5177,"meta":24},[5175],"1\n2\n",[100,159576,159574],{"__ignoreMap":24},[74,159578,159580],{"id":159579},"_452-continue","4.5.2 continue",[14,159582,159583,159585],{},[100,159584,154654],{}," 跳过本轮剩余代码，进入下一轮循环。",[94,159587,159589],{"className":30368,"code":159588,"language":30370,"meta":24,"style":24},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[100,159590,159591,159611,159623,159627],{"__ignoreMap":24},[103,159592,159593,159595,159597,159599,159601,159603,159605,159607,159609],{"class":105,"line":106},[103,159594,3014],{"class":109},[103,159596,9428],{"class":113},[103,159598,26033],{"class":109},[103,159600,32433],{"class":162},[103,159602,114],{"class":113},[103,159604,331],{"class":162},[103,159606,12425],{"class":113},[103,159608,457],{"class":162},[103,159610,30776],{"class":113},[103,159612,159613,159615,159617,159619,159621],{"class":105,"line":25},[103,159614,3090],{"class":109},[103,159616,9428],{"class":113},[103,159618,2938],{"class":109},[103,159620,78060],{"class":162},[103,159622,3728],{"class":113},[103,159624,159625],{"class":105,"line":1168},[103,159626,148494],{"class":109},[103,159628,159629,159631],{"class":105,"line":1183},[103,159630,31289],{"class":162},[103,159632,159212],{"class":113},[14,159634,146439],{},[94,159636,159639],{"className":159637,"code":159638,"language":5177,"meta":24},[5175],"1\n2\n4\n5\n",[100,159640,159638],{"__ignoreMap":24},[45,159642,159644],{"id":159643},"_46-for循环","4.6 for循环",[14,159646,159647,159649],{},[100,159648,3014],{}," 常用于遍历序列。",[94,159651,159653],{"className":30368,"code":159652,"language":30370,"meta":24,"style":24},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[100,159654,159655,159664,159668,159679],{"__ignoreMap":24},[103,159656,159657,159659,159661],{"class":105,"line":106},[103,159658,146518],{"class":113},[103,159660,159],{"class":109},[103,159662,159663],{"class":218}," \"python\"\n",[103,159665,159666],{"class":105,"line":25},[103,159667,2389],{"emptyLinePlaceholder":30},[103,159669,159670,159672,159675,159677],{"class":105,"line":1168},[103,159671,3014],{"class":109},[103,159673,159674],{"class":113}," ch ",[103,159676,26033],{"class":109},[103,159678,158381],{"class":113},[103,159680,159681,159683],{"class":105,"line":1183},[103,159682,31289],{"class":162},[103,159684,159685],{"class":113},"(ch)\n",[14,159687,159688],{},"遍历列表：",[94,159690,159692],{"className":30368,"code":159691,"language":30370,"meta":24,"style":24},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[100,159693,159694,159716,159720,159730],{"__ignoreMap":24},[103,159695,159696,159699,159701,159703,159705,159707,159709,159711,159714],{"class":105,"line":106},[103,159697,159698],{"class":113},"students ",[103,159700,159],{"class":109},[103,159702,52216],{"class":113},[103,159704,149870],{"class":218},[103,159706,12425],{"class":113},[103,159708,150918],{"class":218},[103,159710,12425],{"class":113},[103,159712,159713],{"class":218},"\"小刚\"",[103,159715,33236],{"class":113},[103,159717,159718],{"class":105,"line":25},[103,159719,2389],{"emptyLinePlaceholder":30},[103,159721,159722,159724,159726,159728],{"class":105,"line":1168},[103,159723,3014],{"class":109},[103,159725,152119],{"class":113},[103,159727,26033],{"class":109},[103,159729,152124],{"class":113},[103,159731,159732,159734],{"class":105,"line":1183},[103,159733,31289],{"class":162},[103,159735,150024],{"class":113},[45,159737,159739],{"id":159738},"_47-range函数","4.7 range函数",[14,159741,159742,159745],{},[100,159743,159744],{},"range()"," 用于生成整数序列。",[94,159747,159749],{"className":30368,"code":159748,"language":30370,"meta":24,"style":24},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[100,159750,159751,159765,159783],{"__ignoreMap":24},[103,159752,159753,159755,159757,159759,159762],{"class":105,"line":106},[103,159754,33406],{"class":162},[103,159756,114],{"class":113},[103,159758,432],{"class":162},[103,159760,159761],{"class":113},")          ",[103,159763,159764],{"class":172},"# 0,1,2,3,4\n",[103,159766,159767,159769,159771,159773,159775,159777,159780],{"class":105,"line":25},[103,159768,33406],{"class":162},[103,159770,114],{"class":113},[103,159772,331],{"class":162},[103,159774,12425],{"class":113},[103,159776,432],{"class":162},[103,159778,159779],{"class":113},")       ",[103,159781,159782],{"class":172},"# 1,2,3,4\n",[103,159784,159785,159787,159789,159791,159793,159795,159797,159799,159801],{"class":105,"line":1168},[103,159786,33406],{"class":162},[103,159788,114],{"class":113},[103,159790,331],{"class":162},[103,159792,12425],{"class":113},[103,159794,559],{"class":162},[103,159796,12425],{"class":113},[103,159798,191],{"class":162},[103,159800,155643],{"class":113},[103,159802,159803],{"class":172},"# 1,3,5,7,9\n",[14,159805,159806,159807,24608],{},"配合 ",[100,159808,3014],{},[94,159810,159812],{"className":30368,"code":159811,"language":30370,"meta":24,"style":24},"for i in range(1, 6):\n    print(i)\n",[100,159813,159814,159834],{"__ignoreMap":24},[103,159815,159816,159818,159820,159822,159824,159826,159828,159830,159832],{"class":105,"line":106},[103,159817,3014],{"class":109},[103,159819,9428],{"class":113},[103,159821,26033],{"class":109},[103,159823,32433],{"class":162},[103,159825,114],{"class":113},[103,159827,331],{"class":162},[103,159829,12425],{"class":113},[103,159831,457],{"class":162},[103,159833,30776],{"class":113},[103,159835,159836,159838],{"class":105,"line":25},[103,159837,31289],{"class":162},[103,159839,159212],{"class":113},[14,159841,9015,159842,159844],{},[100,159843,33406],{}," 的结束值不包含在内。",[45,159846,159848],{"id":159847},"_48-for循环求和","4.8 for循环求和",[94,159850,159852],{"className":30368,"code":159851,"language":30370,"meta":24,"style":24},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[100,159853,159854,159862,159866,159886,159894,159898],{"__ignoreMap":24},[103,159855,159856,159858,159860],{"class":105,"line":106},[103,159857,157242],{"class":113},[103,159859,159],{"class":109},[103,159861,47323],{"class":162},[103,159863,159864],{"class":105,"line":25},[103,159865,2389],{"emptyLinePlaceholder":30},[103,159867,159868,159870,159872,159874,159876,159878,159880,159882,159884],{"class":105,"line":1168},[103,159869,3014],{"class":109},[103,159871,9428],{"class":113},[103,159873,26033],{"class":109},[103,159875,32433],{"class":162},[103,159877,114],{"class":113},[103,159879,331],{"class":162},[103,159881,12425],{"class":113},[103,159883,450],{"class":162},[103,159885,30776],{"class":113},[103,159887,159888,159890,159892],{"class":105,"line":1183},[103,159889,159289],{"class":113},[103,159891,9467],{"class":109},[103,159893,159294],{"class":113},[103,159895,159896],{"class":105,"line":1189},[103,159897,2389],{"emptyLinePlaceholder":30},[103,159899,159900,159902],{"class":105,"line":1203},[103,159901,30405],{"class":162},[103,159903,159313],{"class":113},[14,159905,159906],{},"求偶数和：",[94,159908,159910],{"className":30368,"code":159909,"language":30370,"meta":24,"style":24},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[100,159911,159912,159920,159924,159944,159960,159969,159973],{"__ignoreMap":24},[103,159913,159914,159916,159918],{"class":105,"line":106},[103,159915,157242],{"class":113},[103,159917,159],{"class":109},[103,159919,47323],{"class":162},[103,159921,159922],{"class":105,"line":25},[103,159923,2389],{"emptyLinePlaceholder":30},[103,159925,159926,159928,159930,159932,159934,159936,159938,159940,159942],{"class":105,"line":1168},[103,159927,3014],{"class":109},[103,159929,9428],{"class":113},[103,159931,26033],{"class":109},[103,159933,32433],{"class":162},[103,159935,114],{"class":113},[103,159937,331],{"class":162},[103,159939,12425],{"class":113},[103,159941,450],{"class":162},[103,159943,30776],{"class":113},[103,159945,159946,159948,159950,159952,159954,159956,159958],{"class":105,"line":1183},[103,159947,3090],{"class":109},[103,159949,9428],{"class":113},[103,159951,441],{"class":109},[103,159953,14745],{"class":162},[103,159955,101549],{"class":109},[103,159957,4082],{"class":162},[103,159959,3728],{"class":113},[103,159961,159962,159965,159967],{"class":105,"line":1189},[103,159963,159964],{"class":113},"        total ",[103,159966,9467],{"class":109},[103,159968,159294],{"class":113},[103,159970,159971],{"class":105,"line":1203},[103,159972,2389],{"emptyLinePlaceholder":30},[103,159974,159975,159977],{"class":105,"line":1209},[103,159976,30405],{"class":162},[103,159978,159313],{"class":113},[14,159980,159981],{},"也可以：",[94,159983,159985],{"className":30368,"code":159984,"language":30370,"meta":24,"style":24},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[100,159986,159987,159995,159999,160023,160031,160035],{"__ignoreMap":24},[103,159988,159989,159991,159993],{"class":105,"line":106},[103,159990,157242],{"class":113},[103,159992,159],{"class":109},[103,159994,47323],{"class":162},[103,159996,159997],{"class":105,"line":25},[103,159998,2389],{"emptyLinePlaceholder":30},[103,160000,160001,160003,160005,160007,160009,160011,160013,160015,160017,160019,160021],{"class":105,"line":1168},[103,160002,3014],{"class":109},[103,160004,9428],{"class":113},[103,160006,26033],{"class":109},[103,160008,32433],{"class":162},[103,160010,114],{"class":113},[103,160012,191],{"class":162},[103,160014,12425],{"class":113},[103,160016,450],{"class":162},[103,160018,12425],{"class":113},[103,160020,191],{"class":162},[103,160022,30776],{"class":113},[103,160024,160025,160027,160029],{"class":105,"line":1183},[103,160026,159289],{"class":113},[103,160028,9467],{"class":109},[103,160030,159294],{"class":113},[103,160032,160033],{"class":105,"line":1189},[103,160034,2389],{"emptyLinePlaceholder":30},[103,160036,160037,160039],{"class":105,"line":1203},[103,160038,30405],{"class":162},[103,160040,159313],{"class":113},[45,160042,160044],{"id":160043},"_49-循环嵌套","4.9 循环嵌套",[14,160046,160047],{},"嵌套循环就是循环里面再写循环。",[94,160049,160051],{"className":30368,"code":160050,"language":30370,"meta":24,"style":24},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[100,160052,160053,160073,160093],{"__ignoreMap":24},[103,160054,160055,160057,160059,160061,160063,160065,160067,160069,160071],{"class":105,"line":106},[103,160056,3014],{"class":109},[103,160058,9428],{"class":113},[103,160060,26033],{"class":109},[103,160062,32433],{"class":162},[103,160064,114],{"class":113},[103,160066,331],{"class":162},[103,160068,12425],{"class":113},[103,160070,406],{"class":162},[103,160072,30776],{"class":113},[103,160074,160075,160077,160079,160081,160083,160085,160087,160089,160091],{"class":105,"line":25},[103,160076,3190],{"class":109},[103,160078,9490],{"class":113},[103,160080,26033],{"class":109},[103,160082,32433],{"class":162},[103,160084,114],{"class":113},[103,160086,331],{"class":162},[103,160088,12425],{"class":113},[103,160090,406],{"class":162},[103,160092,30776],{"class":113},[103,160094,160095,160097,160099,160101,160104,160106,160108,160110,160113,160115,160117,160119,160121],{"class":105,"line":1168},[103,160096,32441],{"class":162},[103,160098,114],{"class":113},[103,160100,166],{"class":109},[103,160102,160103],{"class":218},"\"i=",[103,160105,1009],{"class":162},[103,160107,554],{"class":113},[103,160109,1059],{"class":162},[103,160111,160112],{"class":218},", j=",[103,160114,1009],{"class":162},[103,160116,580],{"class":113},[103,160118,1059],{"class":162},[103,160120,364],{"class":218},[103,160122,120],{"class":113},[14,160124,160125],{},"外层循环执行一次，内层循环执行完整一轮。",[45,160127,160129],{"id":160128},"_410-九九乘法表","4.10 九九乘法表",[94,160131,160133],{"className":30368,"code":160132,"language":30370,"meta":24,"style":24},"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",[100,160134,160135,160155,160178,160230],{"__ignoreMap":24},[103,160136,160137,160139,160141,160143,160145,160147,160149,160151,160153],{"class":105,"line":106},[103,160138,3014],{"class":109},[103,160140,9428],{"class":113},[103,160142,26033],{"class":109},[103,160144,32433],{"class":162},[103,160146,114],{"class":113},[103,160148,331],{"class":162},[103,160150,12425],{"class":113},[103,160152,559],{"class":162},[103,160154,30776],{"class":113},[103,160156,160157,160159,160161,160163,160165,160167,160169,160172,160174,160176],{"class":105,"line":25},[103,160158,3190],{"class":109},[103,160160,9490],{"class":113},[103,160162,26033],{"class":109},[103,160164,32433],{"class":162},[103,160166,114],{"class":113},[103,160168,331],{"class":162},[103,160170,160171],{"class":113},", i ",[103,160173,594],{"class":109},[103,160175,25108],{"class":162},[103,160177,30776],{"class":113},[103,160179,160180,160182,160184,160186,160188,160190,160192,160194,160196,160198,160200,160202,160204,160206,160208,160210,160212,160214,160216,160218,160220,160222,160224,160226,160228],{"class":105,"line":1168},[103,160181,32441],{"class":162},[103,160183,114],{"class":113},[103,160185,166],{"class":109},[103,160187,364],{"class":218},[103,160189,1009],{"class":162},[103,160191,580],{"class":113},[103,160193,1059],{"class":162},[103,160195,568],{"class":218},[103,160197,1009],{"class":162},[103,160199,554],{"class":113},[103,160201,1059],{"class":162},[103,160203,159],{"class":218},[103,160205,1009],{"class":162},[103,160207,100138],{"class":113},[103,160209,568],{"class":109},[103,160211,3399],{"class":113},[103,160213,1059],{"class":162},[103,160215,364],{"class":218},[103,160217,12425],{"class":113},[103,160219,45791],{"class":5206},[103,160221,159],{"class":109},[103,160223,364],{"class":218},[103,160225,1219],{"class":162},[103,160227,364],{"class":218},[103,160229,120],{"class":113},[103,160231,160232,160234],{"class":105,"line":1183},[103,160233,31289],{"class":162},[103,160235,1965],{"class":113},[14,160237,160238],{},"关键点：",[57,160240,160241,160247,160253,160259],{},[60,160242,160243,160244,160246],{},"外层 ",[100,160245,554],{}," 控制行。",[60,160248,160249,160250,160252],{},"内层 ",[100,160251,580],{}," 控制列。",[60,160254,160255,160256,160258],{},"每行结束后用 ",[100,160257,146454],{}," 换行。",[60,160260,160261,160264],{},[100,160262,160263],{},"end=\"\\t\""," 让同一行的内容横向排列。",[45,160266,160268],{"id":160267},"_411-循环else","4.11 循环else",[14,160270,160271,160272,160274,160275,160277,160278,160280],{},"Python 的循环可以带 ",[100,160273,1690],{},"。当循环正常结束时执行 ",[100,160276,1690],{},"，如果被 ",[100,160279,2042],{}," 打断，则不执行。",[94,160282,160284],{"className":30368,"code":160283,"language":30370,"meta":24,"style":24},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[100,160285,160286,160306,160318,160329,160333,160339],{"__ignoreMap":24},[103,160287,160288,160290,160292,160294,160296,160298,160300,160302,160304],{"class":105,"line":106},[103,160289,3014],{"class":109},[103,160291,9428],{"class":113},[103,160293,26033],{"class":109},[103,160295,32433],{"class":162},[103,160297,114],{"class":113},[103,160299,331],{"class":162},[103,160301,12425],{"class":113},[103,160303,457],{"class":162},[103,160305,30776],{"class":113},[103,160307,160308,160310,160312,160314,160316],{"class":105,"line":25},[103,160309,3090],{"class":109},[103,160311,9428],{"class":113},[103,160313,2938],{"class":109},[103,160315,2027],{"class":162},[103,160317,3728],{"class":113},[103,160319,160320,160322,160324,160327],{"class":105,"line":1168},[103,160321,32441],{"class":162},[103,160323,114],{"class":113},[103,160325,160326],{"class":218},"\"找到了\"",[103,160328,120],{"class":113},[103,160330,160331],{"class":105,"line":1183},[103,160332,31617],{"class":109},[103,160334,160335,160337],{"class":105,"line":1189},[103,160336,1690],{"class":109},[103,160338,3728],{"class":113},[103,160340,160341,160343,160345,160348],{"class":105,"line":1203},[103,160342,31289],{"class":162},[103,160344,114],{"class":113},[103,160346,160347],{"class":218},"\"没找到\"",[103,160349,120],{"class":113},[14,160351,160352],{},"常用于搜索。",[94,160354,160356],{"className":30368,"code":160355,"language":30370,"meta":24,"style":24},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[100,160357,160358,160379,160388,160392,160404,160415,160425,160429,160435],{"__ignoreMap":24},[103,160359,160360,160363,160365,160367,160369,160371,160373,160375,160377],{"class":105,"line":106},[103,160361,160362],{"class":113},"names ",[103,160364,159],{"class":109},[103,160366,52216],{"class":113},[103,160368,149870],{"class":218},[103,160370,12425],{"class":113},[103,160372,150918],{"class":218},[103,160374,12425],{"class":113},[103,160376,159713],{"class":218},[103,160378,33236],{"class":113},[103,160380,160381,160383,160385],{"class":105,"line":25},[103,160382,111568],{"class":113},[103,160384,159],{"class":109},[103,160386,160387],{"class":218}," \"小李\"\n",[103,160389,160390],{"class":105,"line":1168},[103,160391,2389],{"emptyLinePlaceholder":30},[103,160393,160394,160396,160399,160401],{"class":105,"line":1183},[103,160395,3014],{"class":109},[103,160397,160398],{"class":113}," name ",[103,160400,26033],{"class":109},[103,160402,160403],{"class":113}," names:\n",[103,160405,160406,160408,160410,160412],{"class":105,"line":1189},[103,160407,3090],{"class":109},[103,160409,160398],{"class":113},[103,160411,2938],{"class":109},[103,160413,160414],{"class":113}," target:\n",[103,160416,160417,160419,160421,160423],{"class":105,"line":1203},[103,160418,32441],{"class":162},[103,160420,114],{"class":113},[103,160422,160326],{"class":218},[103,160424,120],{"class":113},[103,160426,160427],{"class":105,"line":1209},[103,160428,31617],{"class":109},[103,160430,160431,160433],{"class":105,"line":1300},[103,160432,1690],{"class":109},[103,160434,3728],{"class":113},[103,160436,160437,160439,160441,160443],{"class":105,"line":1306},[103,160438,31289],{"class":162},[103,160440,114],{"class":113},[103,160442,160347],{"class":218},[103,160444,120],{"class":113},[45,160446,160448],{"id":160447},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160450,123274],{},[57,160452,160453,160456,160459],{},[60,160454,160455],{},"用户最多输入 3 次密码。",[60,160457,160458],{},"密码正确则登录成功。",[60,160460,160461],{},"3 次都错误则锁定账号。",[14,160463,10025],{},[94,160465,160467],{"className":30368,"code":160466,"language":30370,"meta":24,"style":24},"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",[100,160468,160469,160479,160483,160499,160515,160519,160531,160542,160546,160552,160577,160583],{"__ignoreMap":24},[103,160470,160471,160474,160476],{"class":105,"line":106},[103,160472,160473],{"class":113},"password ",[103,160475,159],{"class":109},[103,160477,160478],{"class":218}," \"123456\"\n",[103,160480,160481],{"class":105,"line":25},[103,160482,2389],{"emptyLinePlaceholder":30},[103,160484,160485,160487,160489,160491,160493,160495,160497],{"class":105,"line":1168},[103,160486,3014],{"class":109},[103,160488,9428],{"class":113},[103,160490,26033],{"class":109},[103,160492,32433],{"class":162},[103,160494,114],{"class":113},[103,160496,185],{"class":162},[103,160498,30776],{"class":113},[103,160500,160501,160504,160506,160508,160510,160513],{"class":105,"line":1183},[103,160502,160503],{"class":113},"    user_password ",[103,160505,159],{"class":109},[103,160507,60595],{"class":162},[103,160509,114],{"class":113},[103,160511,160512],{"class":218},"\"请输入密码:\"",[103,160514,120],{"class":113},[103,160516,160517],{"class":105,"line":1189},[103,160518,2389],{"emptyLinePlaceholder":30},[103,160520,160521,160523,160526,160528],{"class":105,"line":1203},[103,160522,3090],{"class":109},[103,160524,160525],{"class":113}," user_password ",[103,160527,2938],{"class":109},[103,160529,160530],{"class":113}," password:\n",[103,160532,160533,160535,160537,160540],{"class":105,"line":1209},[103,160534,32441],{"class":162},[103,160536,114],{"class":113},[103,160538,160539],{"class":218},"\"登录成功\"",[103,160541,120],{"class":113},[103,160543,160544],{"class":105,"line":1300},[103,160545,31617],{"class":109},[103,160547,160548,160550],{"class":105,"line":1306},[103,160549,158004],{"class":109},[103,160551,3728],{"class":113},[103,160553,160554,160556,160558,160560,160563,160566,160568,160570,160572,160575],{"class":105,"line":1318},[103,160555,32441],{"class":162},[103,160557,114],{"class":113},[103,160559,166],{"class":109},[103,160561,160562],{"class":218},"\"密码错误，还剩",[103,160564,160565],{"class":162},"{2",[103,160567,52261],{"class":109},[103,160569,3021],{"class":113},[103,160571,1059],{"class":162},[103,160573,160574],{"class":218},"次机会\"",[103,160576,120],{"class":113},[103,160578,160579,160581],{"class":105,"line":1601},[103,160580,1690],{"class":109},[103,160582,3728],{"class":113},[103,160584,160585,160587,160589,160592],{"class":105,"line":1606},[103,160586,31289],{"class":162},[103,160588,114],{"class":113},[103,160590,160591],{"class":218},"\"账号已锁定\"",[103,160593,120],{"class":113},[45,160595,160597],{"id":160596},"_413-小案例菜单程序","4.13 小案例：菜单程序",[94,160599,160601],{"className":30368,"code":160600,"language":30370,"meta":24,"style":24},"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",[100,160602,160603,160611,160622,160633,160644,160655,160666,160670,160685,160689,160701,160712,160724,160735,160747,160758,160770,160780,160784,160790],{"__ignoreMap":24},[103,160604,160605,160607,160609],{"class":105,"line":106},[103,160606,108653],{"class":109},[103,160608,95282],{"class":162},[103,160610,3728],{"class":113},[103,160612,160613,160615,160617,160620],{"class":105,"line":25},[103,160614,31289],{"class":162},[103,160616,114],{"class":113},[103,160618,160619],{"class":218},"\"====== 菜单 ======\"",[103,160621,120],{"class":113},[103,160623,160624,160626,160628,160631],{"class":105,"line":1168},[103,160625,31289],{"class":162},[103,160627,114],{"class":113},[103,160629,160630],{"class":218},"\"1. 查询余额\"",[103,160632,120],{"class":113},[103,160634,160635,160637,160639,160642],{"class":105,"line":1183},[103,160636,31289],{"class":162},[103,160638,114],{"class":113},[103,160640,160641],{"class":218},"\"2. 存款\"",[103,160643,120],{"class":113},[103,160645,160646,160648,160650,160653],{"class":105,"line":1189},[103,160647,31289],{"class":162},[103,160649,114],{"class":113},[103,160651,160652],{"class":218},"\"3. 取款\"",[103,160654,120],{"class":113},[103,160656,160657,160659,160661,160664],{"class":105,"line":1203},[103,160658,31289],{"class":162},[103,160660,114],{"class":113},[103,160662,160663],{"class":218},"\"0. 退出\"",[103,160665,120],{"class":113},[103,160667,160668],{"class":105,"line":1209},[103,160669,2389],{"emptyLinePlaceholder":30},[103,160671,160672,160675,160677,160679,160681,160683],{"class":105,"line":1300},[103,160673,160674],{"class":113},"    choice ",[103,160676,159],{"class":109},[103,160678,60595],{"class":162},[103,160680,114],{"class":113},[103,160682,153055],{"class":218},[103,160684,120],{"class":113},[103,160686,160687],{"class":105,"line":1306},[103,160688,2389],{"emptyLinePlaceholder":30},[103,160690,160691,160693,160695,160697,160699],{"class":105,"line":1318},[103,160692,3090],{"class":109},[103,160694,153068],{"class":113},[103,160696,2938],{"class":109},[103,160698,153073],{"class":218},[103,160700,3728],{"class":113},[103,160702,160703,160705,160707,160710],{"class":105,"line":1601},[103,160704,32441],{"class":162},[103,160706,114],{"class":113},[103,160708,160709],{"class":218},"\"余额为1000元\"",[103,160711,120],{"class":113},[103,160713,160714,160716,160718,160720,160722],{"class":105,"line":1606},[103,160715,39283],{"class":109},[103,160717,153068],{"class":113},[103,160719,2938],{"class":109},[103,160721,153092],{"class":218},[103,160723,3728],{"class":113},[103,160725,160726,160728,160730,160733],{"class":105,"line":1612},[103,160727,32441],{"class":162},[103,160729,114],{"class":113},[103,160731,160732],{"class":218},"\"存款功能\"",[103,160734,120],{"class":113},[103,160736,160737,160739,160741,160743,160745],{"class":105,"line":1617},[103,160738,39283],{"class":109},[103,160740,153068],{"class":113},[103,160742,2938],{"class":109},[103,160744,153110],{"class":218},[103,160746,3728],{"class":113},[103,160748,160749,160751,160753,160756],{"class":105,"line":1631},[103,160750,32441],{"class":162},[103,160752,114],{"class":113},[103,160754,160755],{"class":218},"\"取款功能\"",[103,160757,120],{"class":113},[103,160759,160760,160762,160764,160766,160768],{"class":105,"line":1636},[103,160761,39283],{"class":109},[103,160763,153068],{"class":113},[103,160765,2938],{"class":109},[103,160767,153164],{"class":218},[103,160769,3728],{"class":113},[103,160771,160772,160774,160776,160778],{"class":105,"line":1642},[103,160773,32441],{"class":162},[103,160775,114],{"class":113},[103,160777,153175],{"class":218},[103,160779,120],{"class":113},[103,160781,160782],{"class":105,"line":1663},[103,160783,31617],{"class":109},[103,160785,160786,160788],{"class":105,"line":1668},[103,160787,158004],{"class":109},[103,160789,3728],{"class":113},[103,160791,160792,160794,160796,160798],{"class":105,"line":1682},[103,160793,32441],{"class":162},[103,160795,114],{"class":113},[103,160797,153196],{"class":218},[103,160799,120],{"class":113},[14,160801,160802,160803,160805,160806,28375],{},"菜单类程序通常使用 ",[100,160804,159504],{},"，用户选择退出时 ",[100,160807,2042],{},[45,160809,160811],{"id":160810},"_414-易错点","4.14 易错点",[57,160813,160814,160819,160825,160833,160839],{},[60,160815,160816,160818],{},[100,160817,108653],{}," 循环必须更新控制变量。",[60,160820,160821,160824],{},[100,160822,160823],{},"range(1, 10)"," 不包含 10。",[60,160826,160827,160829,160830,160832],{},[100,160828,2042],{}," 结束整个循环，",[100,160831,154654],{}," 只跳过本轮。",[60,160834,160835,160836,160838],{},"嵌套循环中，",[100,160837,2042],{}," 只跳出当前所在的一层循环。",[60,160840,160841],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[45,160843,160845],{"id":160844},"_415-本章练习","4.15 本章练习",[57,160847,160848,160851,160854,160857,160860],{},[60,160849,160850],{},"输出 1 到 100。",[60,160852,160853],{},"计算 1 到 100 的偶数和。",[60,160855,160856],{},"输出 100 以内能被 3 和 5 同时整除的数。",[60,160858,160859],{},"编写猜数字游戏，限制最多猜 7 次。",[60,160861,160862],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5116,160864,160865],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":24,"searchDepth":25,"depth":25,"links":160867},[160868,160869,160870,160871,160872,160876,160877,160878,160879,160880,160881,160882,160883,160884,160885],{"id":159124,"depth":25,"text":159125},{"id":159154,"depth":25,"text":159155},{"id":159243,"depth":25,"text":159244},{"id":159337,"depth":25,"text":159338},{"id":159511,"depth":25,"text":159512,"children":160873},[160874,160875],{"id":159515,"depth":1168,"text":159516},{"id":159579,"depth":1168,"text":159580},{"id":159643,"depth":25,"text":159644},{"id":159738,"depth":25,"text":159739},{"id":159847,"depth":25,"text":159848},{"id":160043,"depth":25,"text":160044},{"id":160128,"depth":25,"text":160129},{"id":160267,"depth":25,"text":160268},{"id":160447,"depth":25,"text":160448},{"id":160596,"depth":25,"text":160597},{"id":160810,"depth":25,"text":160811},{"id":160844,"depth":25,"text":160845},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159116,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160892,"title":160893,"body":160894,"description":27,"extension":28,"meta":162899,"navigation":30,"path":162900,"seo":162901,"stem":162902,"__hash__":162903},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160895,"toc":162879},[160896,160899,160903,160906,160909,160923,160926,160940,160944,160946,160965,160967,161014,161016,161030,161034,161108,161111,161115,161118,161177,161185,161188,161241,161244,161248,161253,161308,161316,161366,161370,161375,161383,161482,161488,161492,161497,161500,161511,161552,161565,161569,161572,161608,161611,161624,161627,161687,161691,161695,161698,161749,161753,161756,161803,161809,161875,161878,161882,161885,162001,162004,162008,162011,162117,162121,162124,162162,162165,162207,162210,162270,162273,162277,162741,162744,162748,162775,162781,162842,162846,162876],[10,160897,160893],{"id":160898},"_5-函数基础",[45,160900,160902],{"id":160901},"_51-为什么需要函数","5.1 为什么需要函数",[14,160904,160905],{},"函数用于封装一段可以重复使用的代码。",[14,160907,160908],{},"不使用函数的问题：",[57,160910,160911,160914,160917,160920],{},[60,160912,160913],{},"重复代码多。",[60,160915,160916],{},"修改逻辑时容易漏改。",[60,160918,160919],{},"主流程不清晰。",[60,160921,160922],{},"程序越写越长，难以维护。",[14,160924,160925],{},"使用函数后的好处：",[57,160927,160928,160931,160934,160937],{},[60,160929,160930],{},"提高复用性。",[60,160932,160933],{},"提高可读性。",[60,160935,160936],{},"便于调试。",[60,160938,160939],{},"便于分工。",[45,160941,160943],{"id":160942},"_52-函数定义","5.2 函数定义",[14,160945,5171],{},[94,160947,160949],{"className":30368,"code":160948,"language":30370,"meta":24,"style":24},"def 函数名():\n    函数体\n",[100,160950,160951,160960],{"__ignoreMap":24},[103,160952,160953,160955,160958],{"class":105,"line":106},[103,160954,31937],{"class":109},[103,160956,160957],{"class":1952}," 函数名",[103,160959,31943],{"class":113},[103,160961,160962],{"class":105,"line":25},[103,160963,160964],{"class":113},"    函数体\n",[14,160966,15125],{},[94,160968,160970],{"className":30368,"code":160969,"language":30370,"meta":24,"style":24},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[100,160971,160972,160981,160991,161001,161005,161009],{"__ignoreMap":24},[103,160973,160974,160976,160979],{"class":105,"line":106},[103,160975,31937],{"class":109},[103,160977,160978],{"class":1952}," say_hello",[103,160980,31943],{"class":113},[103,160982,160983,160985,160987,160989],{"class":105,"line":25},[103,160984,31289],{"class":162},[103,160986,114],{"class":113},[103,160988,5834],{"class":218},[103,160990,120],{"class":113},[103,160992,160993,160995,160997,160999],{"class":105,"line":1168},[103,160994,31289],{"class":162},[103,160996,114],{"class":113},[103,160998,146621],{"class":218},[103,161000,120],{"class":113},[103,161002,161003],{"class":105,"line":1183},[103,161004,2389],{"emptyLinePlaceholder":30},[103,161006,161007],{"class":105,"line":1189},[103,161008,2389],{"emptyLinePlaceholder":30},[103,161010,161011],{"class":105,"line":1203},[103,161012,161013],{"class":113},"say_hello()\n",[14,161015,9015],{},[57,161017,161018,161021,161024,161027],{},[60,161019,161020],{},"函数必须先定义，再调用。",[60,161022,161023],{},"函数名遵循变量命名规则。",[60,161025,161026],{},"函数体需要缩进。",[60,161028,161029],{},"函数不调用就不会执行。",[45,161031,161033],{"id":161032},"_53-函数调用","5.3 函数调用",[94,161035,161037],{"className":30368,"code":161036,"language":30370,"meta":24,"style":24},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[100,161038,161039,161048,161059,161070,161081,161091,161095,161099,161104],{"__ignoreMap":24},[103,161040,161041,161043,161046],{"class":105,"line":106},[103,161042,31937],{"class":109},[103,161044,161045],{"class":1952}," print_menu",[103,161047,31943],{"class":113},[103,161049,161050,161052,161054,161057],{"class":105,"line":25},[103,161051,31289],{"class":162},[103,161053,114],{"class":113},[103,161055,161056],{"class":218},"\"1. 查询\"",[103,161058,120],{"class":113},[103,161060,161061,161063,161065,161068],{"class":105,"line":1168},[103,161062,31289],{"class":162},[103,161064,114],{"class":113},[103,161066,161067],{"class":218},"\"2. 添加\"",[103,161069,120],{"class":113},[103,161071,161072,161074,161076,161079],{"class":105,"line":1183},[103,161073,31289],{"class":162},[103,161075,114],{"class":113},[103,161077,161078],{"class":218},"\"3. 删除\"",[103,161080,120],{"class":113},[103,161082,161083,161085,161087,161089],{"class":105,"line":1189},[103,161084,31289],{"class":162},[103,161086,114],{"class":113},[103,161088,160663],{"class":218},[103,161090,120],{"class":113},[103,161092,161093],{"class":105,"line":1203},[103,161094,2389],{"emptyLinePlaceholder":30},[103,161096,161097],{"class":105,"line":1209},[103,161098,2389],{"emptyLinePlaceholder":30},[103,161100,161101],{"class":105,"line":1300},[103,161102,161103],{"class":113},"print_menu()\n",[103,161105,161106],{"class":105,"line":1306},[103,161107,161103],{"class":113},[14,161109,161110],{},"函数可以多次调用，每次调用都会执行函数体。",[45,161112,161114],{"id":161113},"_54-参数","5.4 参数",[14,161116,161117],{},"参数用于向函数传递数据。",[94,161119,161121],{"className":30368,"code":161120,"language":30370,"meta":24,"style":24},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[100,161122,161123,161132,161152,161156,161160,161169],{"__ignoreMap":24},[103,161124,161125,161127,161129],{"class":105,"line":106},[103,161126,31937],{"class":109},[103,161128,160978],{"class":1952},[103,161130,161131],{"class":113},"(name):\n",[103,161133,161134,161136,161138,161140,161142,161144,161146,161148,161150],{"class":105,"line":25},[103,161135,31289],{"class":162},[103,161137,114],{"class":113},[103,161139,166],{"class":109},[103,161141,157036],{"class":218},[103,161143,1009],{"class":162},[103,161145,79800],{"class":113},[103,161147,1059],{"class":162},[103,161149,364],{"class":218},[103,161151,120],{"class":113},[103,161153,161154],{"class":105,"line":1168},[103,161155,2389],{"emptyLinePlaceholder":30},[103,161157,161158],{"class":105,"line":1183},[103,161159,2389],{"emptyLinePlaceholder":30},[103,161161,161162,161165,161167],{"class":105,"line":1189},[103,161163,161164],{"class":113},"say_hello(",[103,161166,149870],{"class":218},[103,161168,120],{"class":113},[103,161170,161171,161173,161175],{"class":105,"line":1203},[103,161172,161164],{"class":113},[103,161174,150918],{"class":218},[103,161176,120],{"class":113},[14,161178,161179,161181,161182,161184],{},[100,161180,79800],{}," 是形参，",[100,161183,149870],{}," 是实参。",[14,161186,161187],{},"多个参数：",[94,161189,161191],{"className":30368,"code":161190,"language":30370,"meta":24,"style":24},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[100,161192,161193,161201,161214,161220,161224,161228],{"__ignoreMap":24},[103,161194,161195,161197,161199],{"class":105,"line":106},[103,161196,31937],{"class":109},[103,161198,5199],{"class":1952},[103,161200,151075],{"class":113},[103,161202,161203,161206,161208,161210,161212],{"class":105,"line":25},[103,161204,161205],{"class":113},"    result ",[103,161207,159],{"class":109},[103,161209,10859],{"class":113},[103,161211,594],{"class":109},[103,161213,151086],{"class":113},[103,161215,161216,161218],{"class":105,"line":1168},[103,161217,31289],{"class":162},[103,161219,76575],{"class":113},[103,161221,161222],{"class":105,"line":1183},[103,161223,2389],{"emptyLinePlaceholder":30},[103,161225,161226],{"class":105,"line":1189},[103,161227,2389],{"emptyLinePlaceholder":30},[103,161229,161230,161233,161235,161237,161239],{"class":105,"line":1203},[103,161231,161232],{"class":113},"add(",[103,161234,559],{"class":162},[103,161236,12425],{"class":113},[103,161238,813],{"class":162},[103,161240,120],{"class":113},[14,161242,161243],{},"调用时参数数量必须匹配。",[45,161245,161247],{"id":161246},"_55-返回值","5.5 返回值",[14,161249,161250,161252],{},[100,161251,17036],{}," 用于把函数内部的结果返回给调用者。",[94,161254,161256],{"className":30368,"code":161255,"language":30370,"meta":24,"style":24},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[100,161257,161258,161266,161276,161280,161284,161302],{"__ignoreMap":24},[103,161259,161260,161262,161264],{"class":105,"line":106},[103,161261,31937],{"class":109},[103,161263,5199],{"class":1952},[103,161265,151075],{"class":113},[103,161267,161268,161270,161272,161274],{"class":105,"line":25},[103,161269,4079],{"class":109},[103,161271,10859],{"class":113},[103,161273,594],{"class":109},[103,161275,151086],{"class":113},[103,161277,161278],{"class":105,"line":1168},[103,161279,2389],{"emptyLinePlaceholder":30},[103,161281,161282],{"class":105,"line":1183},[103,161283,2389],{"emptyLinePlaceholder":30},[103,161285,161286,161289,161291,161294,161296,161298,161300],{"class":105,"line":1189},[103,161287,161288],{"class":113},"result ",[103,161290,159],{"class":109},[103,161292,161293],{"class":113}," add(",[103,161295,559],{"class":162},[103,161297,12425],{"class":113},[103,161299,813],{"class":162},[103,161301,120],{"class":113},[103,161303,161304,161306],{"class":105,"line":1203},[103,161305,30405],{"class":162},[103,161307,76575],{"class":113},[14,161309,161310,161311,161313,161314,28375],{},"如果函数没有写 ",[100,161312,17036],{},"，默认返回 ",[100,161315,95676],{},[94,161317,161319],{"className":30368,"code":161318,"language":30370,"meta":24,"style":24},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[100,161320,161321,161329,161339,161343,161347,161356],{"__ignoreMap":24},[103,161322,161323,161325,161327],{"class":105,"line":106},[103,161324,31937],{"class":109},[103,161326,160978],{"class":1952},[103,161328,31943],{"class":113},[103,161330,161331,161333,161335,161337],{"class":105,"line":25},[103,161332,31289],{"class":162},[103,161334,114],{"class":113},[103,161336,5834],{"class":218},[103,161338,120],{"class":113},[103,161340,161341],{"class":105,"line":1168},[103,161342,2389],{"emptyLinePlaceholder":30},[103,161344,161345],{"class":105,"line":1183},[103,161346,2389],{"emptyLinePlaceholder":30},[103,161348,161349,161351,161353],{"class":105,"line":1189},[103,161350,161288],{"class":113},[103,161352,159],{"class":109},[103,161354,161355],{"class":113}," say_hello()\n",[103,161357,161358,161360,161363],{"class":105,"line":1203},[103,161359,30405],{"class":162},[103,161361,161362],{"class":113},"(result)  ",[103,161364,161365],{"class":172},"# None\n",[45,161367,161369],{"id":161368},"_56-return的作用","5.6 return的作用",[14,161371,161372,161374],{},[100,161373,17036],{}," 有两个作用：",[57,161376,161377,161380],{},[60,161378,161379],{},"返回结果。",[60,161381,161382],{},"结束函数。",[94,161384,161386],{"className":30368,"code":161385,"language":30370,"meta":24,"style":24},"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",[100,161387,161388,161398,161410,161417,161421,161433,161440,161444,161451,161455,161459,161470],{"__ignoreMap":24},[103,161389,161390,161392,161395],{"class":105,"line":106},[103,161391,31937],{"class":109},[103,161393,161394],{"class":1952}," check_age",[103,161396,161397],{"class":113},"(age):\n",[103,161399,161400,161402,161404,161406,161408],{"class":105,"line":25},[103,161401,3090],{"class":109},[103,161403,15697],{"class":113},[103,161405,1023],{"class":109},[103,161407,4082],{"class":162},[103,161409,3728],{"class":113},[103,161411,161412,161414],{"class":105,"line":1168},[103,161413,14742],{"class":109},[103,161415,161416],{"class":218}," \"年龄不合法\"\n",[103,161418,161419],{"class":105,"line":1183},[103,161420,2389],{"emptyLinePlaceholder":30},[103,161422,161423,161425,161427,161429,161431],{"class":105,"line":1189},[103,161424,3090],{"class":109},[103,161426,15697],{"class":113},[103,161428,1699],{"class":109},[103,161430,156267],{"class":162},[103,161432,3728],{"class":113},[103,161434,161435,161437],{"class":105,"line":1203},[103,161436,14742],{"class":109},[103,161438,161439],{"class":218}," \"成年人\"\n",[103,161441,161442],{"class":105,"line":1209},[103,161443,2389],{"emptyLinePlaceholder":30},[103,161445,161446,161448],{"class":105,"line":1300},[103,161447,4079],{"class":109},[103,161449,161450],{"class":218}," \"未成年人\"\n",[103,161452,161453],{"class":105,"line":1306},[103,161454,2389],{"emptyLinePlaceholder":30},[103,161456,161457],{"class":105,"line":1318},[103,161458,2389],{"emptyLinePlaceholder":30},[103,161460,161461,161463,161466,161468],{"class":105,"line":1601},[103,161462,30405],{"class":162},[103,161464,161465],{"class":113},"(check_age(",[103,161467,813],{"class":162},[103,161469,30487],{"class":113},[103,161471,161472,161474,161476,161478,161480],{"class":105,"line":1606},[103,161473,30405],{"class":162},[103,161475,161465],{"class":113},[103,161477,645],{"class":109},[103,161479,331],{"class":162},[103,161481,30487],{"class":113},[14,161483,161484,161485,161487],{},"函数执行到 ",[100,161486,17036],{}," 后，后面的代码不会继续执行。",[45,161489,161491],{"id":161490},"_57-none","5.7 None",[14,161493,161494,161496],{},[100,161495,95676],{}," 表示空值或没有结果。",[14,161498,161499],{},"常见使用场景：",[57,161501,161502,161505,161508],{},[60,161503,161504],{},"函数没有返回值。",[60,161506,161507],{},"变量暂时没有具体值。",[60,161509,161510],{},"表示查询不到结果。",[94,161512,161514],{"className":30368,"code":161513,"language":30370,"meta":24,"style":24},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[100,161515,161516,161524,161528,161541],{"__ignoreMap":24},[103,161517,161518,161520,161522],{"class":105,"line":106},[103,161519,161288],{"class":113},[103,161521,159],{"class":109},[103,161523,152154],{"class":162},[103,161525,161526],{"class":105,"line":25},[103,161527,2389],{"emptyLinePlaceholder":30},[103,161529,161530,161532,161535,161537,161539],{"class":105,"line":1168},[103,161531,1520],{"class":109},[103,161533,161534],{"class":113}," result ",[103,161536,38917],{"class":109},[103,161538,38923],{"class":162},[103,161540,3728],{"class":113},[103,161542,161543,161545,161547,161550],{"class":105,"line":1183},[103,161544,31289],{"class":162},[103,161546,114],{"class":113},[103,161548,161549],{"class":218},"\"没有数据\"",[103,161551,120],{"class":113},[14,161553,161554,161555,161557,161558,161561,161562,28375],{},"判断 ",[100,161556,95676],{}," 推荐使用 ",[100,161559,161560],{},"is None","，不要写成 ",[100,161563,161564],{},"== None",[45,161566,161568],{"id":161567},"_58-函数文档字符串","5.8 函数文档字符串",[14,161570,161571],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[94,161573,161575],{"className":30368,"code":161574,"language":30370,"meta":24,"style":24},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[100,161576,161577,161587,161592],{"__ignoreMap":24},[103,161578,161579,161581,161584],{"class":105,"line":106},[103,161580,31937],{"class":109},[103,161582,161583],{"class":1952}," calculate_bmi",[103,161585,161586],{"class":113},"(weight, height):\n",[103,161588,161589],{"class":105,"line":25},[103,161590,161591],{"class":218},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[103,161593,161594,161596,161599,161601,161604,161606],{"class":105,"line":1168},[103,161595,4079],{"class":109},[103,161597,161598],{"class":113}," weight ",[103,161600,697],{"class":109},[103,161602,161603],{"class":113}," height ",[103,161605,10651],{"class":109},[103,161607,47713],{"class":162},[14,161609,161610],{},"查看说明：",[94,161612,161614],{"className":30368,"code":161613,"language":30370,"meta":24,"style":24},"help(calculate_bmi)\n",[100,161615,161616],{"__ignoreMap":24},[103,161617,161618,161621],{"class":105,"line":106},[103,161619,161620],{"class":162},"help",[103,161622,161623],{"class":113},"(calculate_bmi)\n",[14,161625,161626],{},"较完整的写法：",[94,161628,161630],{"className":30368,"code":161629,"language":30370,"meta":24,"style":24},"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",[100,161631,161632,161640,161645,161650,161654,161659,161664,161669,161673],{"__ignoreMap":24},[103,161633,161634,161636,161638],{"class":105,"line":106},[103,161635,31937],{"class":109},[103,161637,161583],{"class":1952},[103,161639,161586],{"class":113},[103,161641,161642],{"class":105,"line":25},[103,161643,161644],{"class":218},"    \"\"\"\n",[103,161646,161647],{"class":105,"line":1168},[103,161648,161649],{"class":218},"    计算BMI。\n",[103,161651,161652],{"class":105,"line":1183},[103,161653,2389],{"emptyLinePlaceholder":30},[103,161655,161656],{"class":105,"line":1189},[103,161657,161658],{"class":218},"    :param weight: 体重，单位kg\n",[103,161660,161661],{"class":105,"line":1203},[103,161662,161663],{"class":218},"    :param height: 身高，单位m\n",[103,161665,161666],{"class":105,"line":1209},[103,161667,161668],{"class":218},"    :return: BMI数值\n",[103,161670,161671],{"class":105,"line":1300},[103,161672,161644],{"class":218},[103,161674,161675,161677,161679,161681,161683,161685],{"class":105,"line":1306},[103,161676,4079],{"class":109},[103,161678,161598],{"class":113},[103,161680,697],{"class":109},[103,161682,161603],{"class":113},[103,161684,10651],{"class":109},[103,161686,47713],{"class":162},[45,161688,161690],{"id":161689},"_59-变量作用域","5.9 变量作用域",[74,161692,161694],{"id":161693},"_591-局部变量","5.9.1 局部变量",[14,161696,161697],{},"在函数内部定义的变量，只能在函数内部使用。",[94,161699,161701],{"className":30368,"code":161700,"language":30370,"meta":24,"style":24},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[100,161702,161703,161712,161720,161726,161730,161734,161739],{"__ignoreMap":24},[103,161704,161705,161707,161710],{"class":105,"line":106},[103,161706,31937],{"class":109},[103,161708,161709],{"class":1952}," test",[103,161711,31943],{"class":113},[103,161713,161714,161716,161718],{"class":105,"line":25},[103,161715,45583],{"class":113},[103,161717,159],{"class":109},[103,161719,58418],{"class":162},[103,161721,161722,161724],{"class":105,"line":1168},[103,161723,31289],{"class":162},[103,161725,127],{"class":113},[103,161727,161728],{"class":105,"line":1183},[103,161729,2389],{"emptyLinePlaceholder":30},[103,161731,161732],{"class":105,"line":1189},[103,161733,2389],{"emptyLinePlaceholder":30},[103,161735,161736],{"class":105,"line":1203},[103,161737,161738],{"class":113},"test()\n",[103,161740,161741,161743,161746],{"class":105,"line":1209},[103,161742,30405],{"class":162},[103,161744,161745],{"class":113},"(num)  ",[103,161747,161748],{"class":172},"# 报错\n",[74,161750,161752],{"id":161751},"_592-全局变量","5.9.2 全局变量",[14,161754,161755],{},"在函数外部定义的变量，可以在函数内部读取。",[94,161757,161759],{"className":30368,"code":161758,"language":30370,"meta":24,"style":24},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[100,161760,161761,161769,161773,161777,161785,161791,161795,161799],{"__ignoreMap":24},[103,161762,161763,161765,161767],{"class":105,"line":106},[103,161764,146518],{"class":113},[103,161766,159],{"class":109},[103,161768,149335],{"class":218},[103,161770,161771],{"class":105,"line":25},[103,161772,2389],{"emptyLinePlaceholder":30},[103,161774,161775],{"class":105,"line":1168},[103,161776,2389],{"emptyLinePlaceholder":30},[103,161778,161779,161781,161783],{"class":105,"line":1183},[103,161780,31937],{"class":109},[103,161782,160978],{"class":1952},[103,161784,31943],{"class":113},[103,161786,161787,161789],{"class":105,"line":1189},[103,161788,31289],{"class":162},[103,161790,150642],{"class":113},[103,161792,161793],{"class":105,"line":1203},[103,161794,2389],{"emptyLinePlaceholder":30},[103,161796,161797],{"class":105,"line":1209},[103,161798,2389],{"emptyLinePlaceholder":30},[103,161800,161801],{"class":105,"line":1300},[103,161802,161013],{"class":113},[14,161804,161805,161806,28375],{},"如果要在函数内部修改全局变量，需要 ",[100,161807,161808],{},"global",[94,161810,161812],{"className":30368,"code":161811,"language":30370,"meta":24,"style":24},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[100,161813,161814,161822,161826,161830,161839,161847,161855,161859,161863,161868],{"__ignoreMap":24},[103,161815,161816,161818,161820],{"class":105,"line":106},[103,161817,146673],{"class":113},[103,161819,159],{"class":109},[103,161821,47323],{"class":162},[103,161823,161824],{"class":105,"line":25},[103,161825,2389],{"emptyLinePlaceholder":30},[103,161827,161828],{"class":105,"line":1168},[103,161829,2389],{"emptyLinePlaceholder":30},[103,161831,161832,161834,161837],{"class":105,"line":1183},[103,161833,31937],{"class":109},[103,161835,161836],{"class":1952}," add_count",[103,161838,31943],{"class":113},[103,161840,161841,161844],{"class":105,"line":1189},[103,161842,161843],{"class":109},"    global",[103,161845,161846],{"class":113}," count\n",[103,161848,161849,161851,161853],{"class":105,"line":1203},[103,161850,159415],{"class":113},[103,161852,9467],{"class":109},[103,161854,55689],{"class":162},[103,161856,161857],{"class":105,"line":1209},[103,161858,2389],{"emptyLinePlaceholder":30},[103,161860,161861],{"class":105,"line":1300},[103,161862,2389],{"emptyLinePlaceholder":30},[103,161864,161865],{"class":105,"line":1306},[103,161866,161867],{"class":113},"add_count()\n",[103,161869,161870,161872],{"class":105,"line":1318},[103,161871,30405],{"class":162},[103,161873,161874],{"class":113},"(count)\n",[14,161876,161877],{},"不建议大量使用全局变量，项目变大后很难维护。",[45,161879,161881],{"id":161880},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161883,161884],{},"一个函数中可以调用另一个函数。",[94,161886,161888],{"className":30368,"code":161887,"language":30370,"meta":24,"style":24},"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",[100,161889,161890,161899,161913,161917,161921,161930,161935,161955,161976,161980,161984,161988],{"__ignoreMap":24},[103,161891,161892,161894,161897],{"class":105,"line":106},[103,161893,31937],{"class":109},[103,161895,161896],{"class":1952}," print_line",[103,161898,31943],{"class":113},[103,161900,161901,161903,161905,161907,161909,161911],{"class":105,"line":25},[103,161902,31289],{"class":162},[103,161904,114],{"class":113},[103,161906,32473],{"class":218},[103,161908,6508],{"class":109},[103,161910,78655],{"class":162},[103,161912,120],{"class":113},[103,161914,161915],{"class":105,"line":1168},[103,161916,2389],{"emptyLinePlaceholder":30},[103,161918,161919],{"class":105,"line":1183},[103,161920,2389],{"emptyLinePlaceholder":30},[103,161922,161923,161925,161928],{"class":105,"line":1189},[103,161924,31937],{"class":109},[103,161926,161927],{"class":1952}," print_info",[103,161929,149357],{"class":113},[103,161931,161932],{"class":105,"line":1203},[103,161933,161934],{"class":113},"    print_line()\n",[103,161936,161937,161939,161941,161943,161945,161947,161949,161951,161953],{"class":105,"line":1209},[103,161938,31289],{"class":162},[103,161940,114],{"class":113},[103,161942,166],{"class":109},[103,161944,156664],{"class":218},[103,161946,1009],{"class":162},[103,161948,79800],{"class":113},[103,161950,1059],{"class":162},[103,161952,364],{"class":218},[103,161954,120],{"class":113},[103,161956,161957,161959,161961,161963,161966,161968,161970,161972,161974],{"class":105,"line":1300},[103,161958,31289],{"class":162},[103,161960,114],{"class":113},[103,161962,166],{"class":109},[103,161964,161965],{"class":218},"\"年龄:",[103,161967,1009],{"class":162},[103,161969,70211],{"class":113},[103,161971,1059],{"class":162},[103,161973,364],{"class":218},[103,161975,120],{"class":113},[103,161977,161978],{"class":105,"line":1306},[103,161979,161934],{"class":113},[103,161981,161982],{"class":105,"line":1318},[103,161983,2389],{"emptyLinePlaceholder":30},[103,161985,161986],{"class":105,"line":1601},[103,161987,2389],{"emptyLinePlaceholder":30},[103,161989,161990,161993,161995,161997,161999],{"class":105,"line":1606},[103,161991,161992],{"class":113},"print_info(",[103,161994,149870],{"class":218},[103,161996,12425],{"class":113},[103,161998,763],{"class":162},[103,162000,120],{"class":113},[14,162002,162003],{},"这种方式可以把小功能组合成大功能。",[45,162005,162007],{"id":162006},"_511-参数检查","5.11 参数检查",[14,162009,162010],{},"函数内部可以检查参数是否合法。",[94,162012,162014],{"className":30368,"code":162013,"language":30370,"meta":24,"style":24},"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",[100,162015,162016,162025,162037,162043,162053,162057,162061,162078,162082,162094,162105,162111],{"__ignoreMap":24},[103,162017,162018,162020,162023],{"class":105,"line":106},[103,162019,31937],{"class":109},[103,162021,162022],{"class":1952}," divide",[103,162024,151075],{"class":113},[103,162026,162027,162029,162031,162033,162035],{"class":105,"line":25},[103,162028,3090],{"class":109},[103,162030,10872],{"class":113},[103,162032,2938],{"class":109},[103,162034,4082],{"class":162},[103,162036,3728],{"class":113},[103,162038,162039,162041],{"class":105,"line":1168},[103,162040,14742],{"class":109},[103,162042,152154],{"class":162},[103,162044,162045,162047,162049,162051],{"class":105,"line":1183},[103,162046,4079],{"class":109},[103,162048,10859],{"class":113},[103,162050,697],{"class":109},[103,162052,151086],{"class":113},[103,162054,162055],{"class":105,"line":1189},[103,162056,2389],{"emptyLinePlaceholder":30},[103,162058,162059],{"class":105,"line":1203},[103,162060,2389],{"emptyLinePlaceholder":30},[103,162062,162063,162065,162067,162070,162072,162074,162076],{"class":105,"line":1209},[103,162064,161288],{"class":113},[103,162066,159],{"class":109},[103,162068,162069],{"class":113}," divide(",[103,162071,559],{"class":162},[103,162073,12425],{"class":113},[103,162075,305],{"class":162},[103,162077,120],{"class":113},[103,162079,162080],{"class":105,"line":1300},[103,162081,2389],{"emptyLinePlaceholder":30},[103,162083,162084,162086,162088,162090,162092],{"class":105,"line":1306},[103,162085,1520],{"class":109},[103,162087,161534],{"class":113},[103,162089,38917],{"class":109},[103,162091,38923],{"class":162},[103,162093,3728],{"class":113},[103,162095,162096,162098,162100,162103],{"class":105,"line":1318},[103,162097,31289],{"class":162},[103,162099,114],{"class":113},[103,162101,162102],{"class":218},"\"除数不能为0\"",[103,162104,120],{"class":113},[103,162106,162107,162109],{"class":105,"line":1601},[103,162108,1690],{"class":109},[103,162110,3728],{"class":113},[103,162112,162113,162115],{"class":105,"line":1606},[103,162114,31289],{"class":162},[103,162116,76575],{"class":113},[45,162118,162120],{"id":162119},"_512-类型提示","5.12 类型提示",[14,162122,162123],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[94,162125,162127],{"className":30368,"code":162126,"language":30370,"meta":24,"style":24},"def add(a: int, b: int) -> int:\n    return a + b\n",[100,162128,162129,162152],{"__ignoreMap":24},[103,162130,162131,162133,162135,162138,162140,162143,162145,162148,162150],{"class":105,"line":106},[103,162132,31937],{"class":109},[103,162134,5199],{"class":1952},[103,162136,162137],{"class":113},"(a: ",[103,162139,117],{"class":162},[103,162141,162142],{"class":113},", b: ",[103,162144,117],{"class":162},[103,162146,162147],{"class":113},") -> ",[103,162149,117],{"class":162},[103,162151,3728],{"class":113},[103,162153,162154,162156,162158,162160],{"class":105,"line":25},[103,162155,4079],{"class":109},[103,162157,10859],{"class":113},[103,162159,594],{"class":109},[103,162161,151086],{"class":113},[14,162163,162164],{},"字符串参数：",[94,162166,162168],{"className":30368,"code":162167,"language":30370,"meta":24,"style":24},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[100,162169,162170,162187],{"__ignoreMap":24},[103,162171,162172,162174,162176,162179,162181,162183,162185],{"class":105,"line":106},[103,162173,31937],{"class":109},[103,162175,160978],{"class":1952},[103,162177,162178],{"class":113},"(name: ",[103,162180,1288],{"class":162},[103,162182,162147],{"class":113},[103,162184,95676],{"class":162},[103,162186,3728],{"class":113},[103,162188,162189,162191,162193,162195,162197,162199,162201,162203,162205],{"class":105,"line":25},[103,162190,31289],{"class":162},[103,162192,114],{"class":113},[103,162194,166],{"class":109},[103,162196,157036],{"class":218},[103,162198,1009],{"class":162},[103,162200,79800],{"class":113},[103,162202,1059],{"class":162},[103,162204,364],{"class":218},[103,162206,120],{"class":113},[14,162208,162209],{},"列表参数：",[94,162211,162213],{"className":30368,"code":162212,"language":30370,"meta":24,"style":24},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[100,162214,162215,162234,162242,162254,162263],{"__ignoreMap":24},[103,162216,162217,162219,162222,162225,162227,162230,162232],{"class":105,"line":106},[103,162218,31937],{"class":109},[103,162220,162221],{"class":1952}," get_total",[103,162223,162224],{"class":113},"(numbers: list[",[103,162226,117],{"class":162},[103,162228,162229],{"class":113},"]) -> ",[103,162231,117],{"class":162},[103,162233,3728],{"class":113},[103,162235,162236,162238,162240],{"class":105,"line":25},[103,162237,159289],{"class":113},[103,162239,159],{"class":109},[103,162241,47323],{"class":162},[103,162243,162244,162246,162249,162251],{"class":105,"line":1168},[103,162245,3190],{"class":109},[103,162247,162248],{"class":113}," number ",[103,162250,26033],{"class":109},[103,162252,162253],{"class":113}," numbers:\n",[103,162255,162256,162258,162260],{"class":105,"line":1183},[103,162257,159964],{"class":113},[103,162259,9467],{"class":109},[103,162261,162262],{"class":113}," number\n",[103,162264,162265,162267],{"class":105,"line":1189},[103,162266,4079],{"class":109},[103,162268,162269],{"class":113}," total\n",[14,162271,162272],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[45,162274,162276],{"id":162275},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[94,162278,162280],{"className":30368,"code":162279,"language":30370,"meta":24,"style":24},"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",[100,162281,162282,162292,162296,162300,162308,162319,162329,162339,162349,162359,162363,162367,162376,162398,162402,162406,162415,162421,162441,162453,162464,162468,162477,162488,162493,162497,162501,162510,162516,162535,162547,162557,162561,162572,162582,162586,162594,162605,162609,162613,162617,162625,162630,162644,162648,162660,162665,162677,162682,162694,162699,162711,162721,162725,162731],{"__ignoreMap":24},[103,162283,162284,162287,162289],{"class":105,"line":106},[103,162285,162286],{"class":113},"balance ",[103,162288,159],{"class":109},[103,162290,162291],{"class":162}," 1000\n",[103,162293,162294],{"class":105,"line":25},[103,162295,2389],{"emptyLinePlaceholder":30},[103,162297,162298],{"class":105,"line":1168},[103,162299,2389],{"emptyLinePlaceholder":30},[103,162301,162302,162304,162306],{"class":105,"line":1183},[103,162303,31937],{"class":109},[103,162305,152015],{"class":1952},[103,162307,31943],{"class":113},[103,162309,162310,162312,162314,162317],{"class":105,"line":1189},[103,162311,31289],{"class":162},[103,162313,114],{"class":113},[103,162315,162316],{"class":218},"\"====== ATM ======\"",[103,162318,120],{"class":113},[103,162320,162321,162323,162325,162327],{"class":105,"line":1203},[103,162322,31289],{"class":162},[103,162324,114],{"class":113},[103,162326,160630],{"class":218},[103,162328,120],{"class":113},[103,162330,162331,162333,162335,162337],{"class":105,"line":1209},[103,162332,31289],{"class":162},[103,162334,114],{"class":113},[103,162336,160641],{"class":218},[103,162338,120],{"class":113},[103,162340,162341,162343,162345,162347],{"class":105,"line":1300},[103,162342,31289],{"class":162},[103,162344,114],{"class":113},[103,162346,160652],{"class":218},[103,162348,120],{"class":113},[103,162350,162351,162353,162355,162357],{"class":105,"line":1306},[103,162352,31289],{"class":162},[103,162354,114],{"class":113},[103,162356,160663],{"class":218},[103,162358,120],{"class":113},[103,162360,162361],{"class":105,"line":1318},[103,162362,2389],{"emptyLinePlaceholder":30},[103,162364,162365],{"class":105,"line":1601},[103,162366,2389],{"emptyLinePlaceholder":30},[103,162368,162369,162371,162374],{"class":105,"line":1606},[103,162370,31937],{"class":109},[103,162372,162373],{"class":1952}," show_balance",[103,162375,31943],{"class":113},[103,162377,162378,162380,162382,162384,162387,162389,162392,162394,162396],{"class":105,"line":1612},[103,162379,31289],{"class":162},[103,162381,114],{"class":113},[103,162383,166],{"class":109},[103,162385,162386],{"class":218},"\"当前余额:",[103,162388,1009],{"class":162},[103,162390,162391],{"class":113},"balance",[103,162393,1059],{"class":162},[103,162395,156994],{"class":218},[103,162397,120],{"class":113},[103,162399,162400],{"class":105,"line":1617},[103,162401,2389],{"emptyLinePlaceholder":30},[103,162403,162404],{"class":105,"line":1631},[103,162405,2389],{"emptyLinePlaceholder":30},[103,162407,162408,162410,162413],{"class":105,"line":1636},[103,162409,31937],{"class":109},[103,162411,162412],{"class":1952}," save_money",[103,162414,31943],{"class":113},[103,162416,162417,162419],{"class":105,"line":1642},[103,162418,161843],{"class":109},[103,162420,150081],{"class":113},[103,162422,162423,162426,162428,162430,162432,162434,162436,162439],{"class":105,"line":1663},[103,162424,162425],{"class":113},"    money ",[103,162427,159],{"class":109},[103,162429,109787],{"class":162},[103,162431,114],{"class":113},[103,162433,53811],{"class":162},[103,162435,114],{"class":113},[103,162437,162438],{"class":218},"\"请输入存款金额:\"",[103,162440,30487],{"class":113},[103,162442,162443,162445,162447,162449,162451],{"class":105,"line":1668},[103,162444,3090],{"class":109},[103,162446,150124],{"class":113},[103,162448,1577],{"class":109},[103,162450,4082],{"class":162},[103,162452,3728],{"class":113},[103,162454,162455,162457,162459,162462],{"class":105,"line":1682},[103,162456,32441],{"class":162},[103,162458,114],{"class":113},[103,162460,162461],{"class":218},"\"金额必须大于0\"",[103,162463,120],{"class":113},[103,162465,162466],{"class":105,"line":1687},[103,162467,152343],{"class":109},[103,162469,162470,162473,162475],{"class":105,"line":1716},[103,162471,162472],{"class":113},"    balance ",[103,162474,9467],{"class":109},[103,162476,150157],{"class":113},[103,162478,162479,162481,162483,162486],{"class":105,"line":1721},[103,162480,31289],{"class":162},[103,162482,114],{"class":113},[103,162484,162485],{"class":218},"\"存款成功\"",[103,162487,120],{"class":113},[103,162489,162490],{"class":105,"line":1738},[103,162491,162492],{"class":113},"    show_balance()\n",[103,162494,162495],{"class":105,"line":1743},[103,162496,2389],{"emptyLinePlaceholder":30},[103,162498,162499],{"class":105,"line":1748},[103,162500,2389],{"emptyLinePlaceholder":30},[103,162502,162503,162505,162508],{"class":105,"line":1753},[103,162504,31937],{"class":109},[103,162506,162507],{"class":1952}," withdraw_money",[103,162509,31943],{"class":113},[103,162511,162512,162514],{"class":105,"line":1767},[103,162513,161843],{"class":109},[103,162515,150081],{"class":113},[103,162517,162518,162520,162522,162524,162526,162528,162530,162533],{"class":105,"line":1772},[103,162519,162425],{"class":113},[103,162521,159],{"class":109},[103,162523,109787],{"class":162},[103,162525,114],{"class":113},[103,162527,53811],{"class":162},[103,162529,114],{"class":113},[103,162531,162532],{"class":218},"\"请输入取款金额:\"",[103,162534,30487],{"class":113},[103,162536,162537,162539,162541,162543,162545],{"class":105,"line":2566},[103,162538,3090],{"class":109},[103,162540,150124],{"class":113},[103,162542,1577],{"class":109},[103,162544,4082],{"class":162},[103,162546,3728],{"class":113},[103,162548,162549,162551,162553,162555],{"class":105,"line":2580},[103,162550,32441],{"class":162},[103,162552,114],{"class":113},[103,162554,162461],{"class":218},[103,162556,120],{"class":113},[103,162558,162559],{"class":105,"line":2588},[103,162560,152343],{"class":109},[103,162562,162563,162565,162567,162569],{"class":105,"line":2593},[103,162564,3090],{"class":109},[103,162566,150124],{"class":113},[103,162568,1073],{"class":109},[103,162570,162571],{"class":113}," balance:\n",[103,162573,162574,162576,162578,162580],{"class":105,"line":2599},[103,162575,32441],{"class":162},[103,162577,114],{"class":113},[103,162579,150219],{"class":218},[103,162581,120],{"class":113},[103,162583,162584],{"class":105,"line":2605},[103,162585,152343],{"class":109},[103,162587,162588,162590,162592],{"class":105,"line":2610},[103,162589,162472],{"class":113},[103,162591,150234],{"class":109},[103,162593,150157],{"class":113},[103,162595,162596,162598,162600,162603],{"class":105,"line":7938},[103,162597,31289],{"class":162},[103,162599,114],{"class":113},[103,162601,162602],{"class":218},"\"取款成功\"",[103,162604,120],{"class":113},[103,162606,162607],{"class":105,"line":7962},[103,162608,162492],{"class":113},[103,162610,162611],{"class":105,"line":7967},[103,162612,2389],{"emptyLinePlaceholder":30},[103,162614,162615],{"class":105,"line":7973},[103,162616,2389],{"emptyLinePlaceholder":30},[103,162618,162619,162621,162623],{"class":105,"line":8000},[103,162620,108653],{"class":109},[103,162622,95282],{"class":162},[103,162624,3728],{"class":113},[103,162626,162627],{"class":105,"line":8005},[103,162628,162629],{"class":113},"    show_menu()\n",[103,162631,162632,162634,162636,162638,162640,162642],{"class":105,"line":8011},[103,162633,160674],{"class":113},[103,162635,159],{"class":109},[103,162637,60595],{"class":162},[103,162639,114],{"class":113},[103,162641,153055],{"class":218},[103,162643,120],{"class":113},[103,162645,162646],{"class":105,"line":8023},[103,162647,2389],{"emptyLinePlaceholder":30},[103,162649,162650,162652,162654,162656,162658],{"class":105,"line":8035},[103,162651,3090],{"class":109},[103,162653,153068],{"class":113},[103,162655,2938],{"class":109},[103,162657,153073],{"class":218},[103,162659,3728],{"class":113},[103,162661,162662],{"class":105,"line":8047},[103,162663,162664],{"class":113},"        show_balance()\n",[103,162666,162667,162669,162671,162673,162675],{"class":105,"line":9706},[103,162668,39283],{"class":109},[103,162670,153068],{"class":113},[103,162672,2938],{"class":109},[103,162674,153092],{"class":218},[103,162676,3728],{"class":113},[103,162678,162679],{"class":105,"line":9731},[103,162680,162681],{"class":113},"        save_money()\n",[103,162683,162684,162686,162688,162690,162692],{"class":105,"line":9754},[103,162685,39283],{"class":109},[103,162687,153068],{"class":113},[103,162689,2938],{"class":109},[103,162691,153110],{"class":218},[103,162693,3728],{"class":113},[103,162695,162696],{"class":105,"line":9778},[103,162697,162698],{"class":113},"        withdraw_money()\n",[103,162700,162701,162703,162705,162707,162709],{"class":105,"line":9783},[103,162702,39283],{"class":109},[103,162704,153068],{"class":113},[103,162706,2938],{"class":109},[103,162708,153164],{"class":218},[103,162710,3728],{"class":113},[103,162712,162713,162715,162717,162719],{"class":105,"line":9788},[103,162714,32441],{"class":162},[103,162716,114],{"class":113},[103,162718,153175],{"class":218},[103,162720,120],{"class":113},[103,162722,162723],{"class":105,"line":9793},[103,162724,31617],{"class":109},[103,162726,162727,162729],{"class":105,"line":9802},[103,162728,158004],{"class":109},[103,162730,3728],{"class":113},[103,162732,162733,162735,162737,162739],{"class":105,"line":9807},[103,162734,32441],{"class":162},[103,162736,114],{"class":113},[103,162738,153196],{"class":218},[103,162740,120],{"class":113},[14,162742,162743],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[45,162745,162747],{"id":162746},"_514-易错点","5.14 易错点",[57,162749,162750,162753,162756,162761,162766,162769],{},[60,162751,162752],{},"函数定义后必须调用才会执行。",[60,162754,162755],{},"函数名后面有括号才是调用。",[60,162757,162758,162760],{},[100,162759,17036],{}," 后面的代码不会执行。",[60,162762,162763,162764,28375],{},"没有返回值的函数默认返回 ",[100,162765,95676],{},[60,162767,162768],{},"局部变量不能在函数外部访问。",[60,162770,162771,162772,162774],{},"不要滥用 ",[100,162773,161808],{},"，更好的方式是让函数返回新值。",[14,162776,162777,162778,162780],{},"例如不用 ",[100,162779,161808],{}," 改写存款：",[94,162782,162784],{"className":30368,"code":162783,"language":30370,"meta":24,"style":24},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[100,162785,162786,162795,162806,162810,162814,162822,162835],{"__ignoreMap":24},[103,162787,162788,162790,162792],{"class":105,"line":106},[103,162789,31937],{"class":109},[103,162791,162412],{"class":1952},[103,162793,162794],{"class":113},"(balance, money):\n",[103,162796,162797,162799,162802,162804],{"class":105,"line":25},[103,162798,4079],{"class":109},[103,162800,162801],{"class":113}," balance ",[103,162803,594],{"class":109},[103,162805,150157],{"class":113},[103,162807,162808],{"class":105,"line":1168},[103,162809,2389],{"emptyLinePlaceholder":30},[103,162811,162812],{"class":105,"line":1183},[103,162813,2389],{"emptyLinePlaceholder":30},[103,162815,162816,162818,162820],{"class":105,"line":1189},[103,162817,162286],{"class":113},[103,162819,159],{"class":109},[103,162821,162291],{"class":162},[103,162823,162824,162826,162828,162831,162833],{"class":105,"line":1203},[103,162825,162286],{"class":113},[103,162827,159],{"class":109},[103,162829,162830],{"class":113}," save_money(balance, ",[103,162832,1711],{"class":162},[103,162834,120],{"class":113},[103,162836,162837,162839],{"class":105,"line":1209},[103,162838,30405],{"class":162},[103,162840,162841],{"class":113},"(balance)\n",[45,162843,162845],{"id":162844},"_515-本章练习","5.15 本章练习",[57,162847,162848,162855,162861,162867,162873],{},[60,162849,162850,162851,162854],{},"定义函数 ",[100,162852,162853],{},"print_student(name, age)","，输出学生信息。",[60,162856,162850,162857,162860],{},[100,162858,162859],{},"get_max(a, b, c)","，返回三个数中的最大值。",[60,162862,162850,162863,162866],{},[100,162864,162865],{},"is_even(num)","，判断一个数是否为偶数。",[60,162868,162850,162869,162872],{},[100,162870,162871],{},"calculate_bmi(weight, height)","，返回 BMI。",[60,162874,162875],{},"把第 4 章的菜单程序拆分成多个函数。",[5116,162877,162878],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":24,"searchDepth":25,"depth":25,"links":162880},[162881,162882,162883,162884,162885,162886,162887,162888,162889,162893,162894,162895,162896,162897,162898],{"id":160901,"depth":25,"text":160902},{"id":160942,"depth":25,"text":160943},{"id":161032,"depth":25,"text":161033},{"id":161113,"depth":25,"text":161114},{"id":161246,"depth":25,"text":161247},{"id":161368,"depth":25,"text":161369},{"id":161490,"depth":25,"text":161491},{"id":161567,"depth":25,"text":161568},{"id":161689,"depth":25,"text":161690,"children":162890},[162891,162892],{"id":161693,"depth":1168,"text":161694},{"id":161751,"depth":1168,"text":161752},{"id":161880,"depth":25,"text":161881},{"id":162006,"depth":25,"text":162007},{"id":162119,"depth":25,"text":162120},{"id":162275,"depth":25,"text":162276},{"id":162746,"depth":25,"text":162747},{"id":162844,"depth":25,"text":162845},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160893,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162905,"title":162906,"body":162907,"description":27,"extension":28,"meta":165951,"navigation":30,"path":165952,"seo":165953,"stem":165954,"__hash__":165955},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162908,"toc":165932},[162909,162912,162916,162919,162922,163026,163029,163033,163036,163116,163119,163123,163126,163186,163189,163225,163228,163243,163247,163320,163323,163378,163381,163451,163454,163538,163548,163606,163610,163655,163658,163684,163687,163793,163797,163800,163842,163845,163909,163912,163916,163919,163980,163983,164013,164016,164054,164058,164061,164070,164073,164197,164200,164241,164245,164248,164259,164299,164302,164317,164322,164325,164392,164395,164485,164489,164492,164540,164543,164570,164572,164602,164605,164625,164628,164659,164662,164695,164699,164702,164726,164729,164753,164756,164780,164784,164787,164917,164920,165000,165003,165078,165082,165085,165135,165138,165180,165183,165207,165209,165233,165236,165291,165294,165360,165364,165367,165370,165408,165411,165464,165467,165513,165516,165549,165552,165556,165875,165879,165908,165912,165929],[10,162910,162906],{"id":162911},"_6-数据容器",[45,162913,162915],{"id":162914},"_61-什么是数据容器","6.1 什么是数据容器",[14,162917,162918],{},"数据容器用于一次保存多个数据。",[14,162920,162921],{},"常见容器：",[251,162923,162924,162941],{},[254,162925,162926],{},[257,162927,162928,162930,162933,162936,162939],{},[260,162929,25761],{},[260,162931,162932],{},"是否有序",[260,162934,162935],{},"是否可变",[260,162937,162938],{},"是否允许重复",[260,162940,27482],{},[298,162942,162943,162961,162977,162992,163009],{},[257,162944,162945,162948,162951,162954,162957],{},[303,162946,162947],{},"list列表",[303,162949,162950],{},"有序",[303,162952,162953],{},"可变",[303,162955,162956],{},"允许",[303,162958,162959],{},[100,162960,155239],{},[257,162962,162963,162966,162968,162971,162973],{},[303,162964,162965],{},"tuple元组",[303,162967,162950],{},[303,162969,162970],{},"不可变",[303,162972,162956],{},[303,162974,162975],{},[100,162976,155252],{},[257,162978,162979,162982,162984,162986,162988],{},[303,162980,162981],{},"str字符串",[303,162983,162950],{},[303,162985,162970],{},[303,162987,162956],{},[303,162989,162990],{},[100,162991,155862],{},[257,162993,162994,162997,163000,163002,163005],{},[303,162995,162996],{},"set集合",[303,162998,162999],{},"无序",[303,163001,162953],{},[303,163003,163004],{},"不允许",[303,163006,163007],{},[100,163008,155277],{},[257,163010,163011,163014,163016,163018,163021],{},[303,163012,163013],{},"dict字典",[303,163015,162950],{},[303,163017,162953],{},[303,163019,163020],{},"key不允许重复",[303,163022,163023],{},[100,163024,163025],{},"{\"name\": \"小明\"}",[14,163027,163028],{},"Python 3.7 之后，字典保持插入顺序。",[45,163030,163032],{"id":163031},"_62-列表list","6.2 列表list",[14,163034,163035],{},"列表用于保存一组有顺序的数据。",[94,163037,163039],{"className":30368,"code":163038,"language":30370,"meta":24,"style":24},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[100,163040,163041,163061,163086,163107],{"__ignoreMap":24},[103,163042,163043,163045,163047,163049,163051,163053,163055,163057,163059],{"class":105,"line":106},[103,163044,160362],{"class":113},[103,163046,159],{"class":109},[103,163048,52216],{"class":113},[103,163050,149870],{"class":218},[103,163052,12425],{"class":113},[103,163054,150918],{"class":218},[103,163056,12425],{"class":113},[103,163058,159713],{"class":218},[103,163060,33236],{"class":113},[103,163062,163063,163066,163068,163070,163072,163074,163076,163078,163080,163082,163084],{"class":105,"line":25},[103,163064,163065],{"class":113},"numbers ",[103,163067,159],{"class":109},[103,163069,52216],{"class":113},[103,163071,331],{"class":162},[103,163073,12425],{"class":113},[103,163075,191],{"class":162},[103,163077,12425],{"class":113},[103,163079,185],{"class":162},[103,163081,12425],{"class":113},[103,163083,406],{"class":162},[103,163085,33236],{"class":113},[103,163087,163088,163091,163093,163095,163097,163099,163101,163103,163105],{"class":105,"line":1168},[103,163089,163090],{"class":113},"mixed ",[103,163092,159],{"class":109},[103,163094,52216],{"class":113},[103,163096,149870],{"class":218},[103,163098,12425],{"class":113},[103,163100,763],{"class":162},[103,163102,12425],{"class":113},[103,163104,31466],{"class":162},[103,163106,33236],{"class":113},[103,163108,163109,163112,163114],{"class":105,"line":1183},[103,163110,163111],{"class":113},"empty ",[103,163113,159],{"class":109},[103,163115,51828],{"class":113},[14,163117,163118],{},"推荐一个列表中保存同类数据，代码更清晰。",[45,163120,163122],{"id":163121},"_63-列表索引","6.3 列表索引",[14,163124,163125],{},"正向索引从 0 开始：",[94,163127,163129],{"className":30368,"code":163128,"language":30370,"meta":24,"style":24},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[100,163130,163131,163151,163155,163166,163176],{"__ignoreMap":24},[103,163132,163133,163135,163137,163139,163141,163143,163145,163147,163149],{"class":105,"line":106},[103,163134,160362],{"class":113},[103,163136,159],{"class":109},[103,163138,52216],{"class":113},[103,163140,149870],{"class":218},[103,163142,12425],{"class":113},[103,163144,150918],{"class":218},[103,163146,12425],{"class":113},[103,163148,159713],{"class":218},[103,163150,33236],{"class":113},[103,163152,163153],{"class":105,"line":25},[103,163154,2389],{"emptyLinePlaceholder":30},[103,163156,163157,163159,163162,163164],{"class":105,"line":1168},[103,163158,30405],{"class":162},[103,163160,163161],{"class":113},"(names[",[103,163163,305],{"class":162},[103,163165,4646],{"class":113},[103,163167,163168,163170,163172,163174],{"class":105,"line":1183},[103,163169,30405],{"class":162},[103,163171,163161],{"class":113},[103,163173,331],{"class":162},[103,163175,4646],{"class":113},[103,163177,163178,163180,163182,163184],{"class":105,"line":1189},[103,163179,30405],{"class":162},[103,163181,163161],{"class":113},[103,163183,191],{"class":162},[103,163185,4646],{"class":113},[14,163187,163188],{},"反向索引从 -1 开始：",[94,163190,163192],{"className":30368,"code":163191,"language":30370,"meta":24,"style":24},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[100,163193,163194,163210],{"__ignoreMap":24},[103,163195,163196,163198,163200,163202,163204,163207],{"class":105,"line":106},[103,163197,30405],{"class":162},[103,163199,163161],{"class":113},[103,163201,645],{"class":109},[103,163203,331],{"class":162},[103,163205,163206],{"class":113},"])  ",[103,163208,163209],{"class":172},"# 小刚\n",[103,163211,163212,163214,163216,163218,163220,163222],{"class":105,"line":25},[103,163213,30405],{"class":162},[103,163215,163161],{"class":113},[103,163217,645],{"class":109},[103,163219,191],{"class":162},[103,163221,163206],{"class":113},[103,163223,163224],{"class":172},"# 小红\n",[14,163226,163227],{},"索引越界会报错：",[94,163229,163231],{"className":30368,"code":163230,"language":30370,"meta":24,"style":24},"print(names[3])\n",[100,163232,163233],{"__ignoreMap":24},[103,163234,163235,163237,163239,163241],{"class":105,"line":106},[103,163236,30405],{"class":162},[103,163238,163161],{"class":113},[103,163240,185],{"class":162},[103,163242,4646],{"class":113},[45,163244,163246],{"id":163245},"_64-列表常用方法","6.4 列表常用方法",[94,163248,163250],{"className":30368,"code":163249,"language":30370,"meta":24,"style":24},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[100,163251,163252,163268,163272,163281,163295,163309,163313],{"__ignoreMap":24},[103,163253,163254,163256,163258,163260,163262,163264,163266],{"class":105,"line":106},[103,163255,160362],{"class":113},[103,163257,159],{"class":109},[103,163259,52216],{"class":113},[103,163261,149870],{"class":218},[103,163263,12425],{"class":113},[103,163265,150918],{"class":218},[103,163267,33236],{"class":113},[103,163269,163270],{"class":105,"line":25},[103,163271,2389],{"emptyLinePlaceholder":30},[103,163273,163274,163277,163279],{"class":105,"line":1168},[103,163275,163276],{"class":113},"names.append(",[103,163278,159713],{"class":218},[103,163280,120],{"class":113},[103,163282,163283,163286,163288,163290,163293],{"class":105,"line":1183},[103,163284,163285],{"class":113},"names.insert(",[103,163287,331],{"class":162},[103,163289,12425],{"class":113},[103,163291,163292],{"class":218},"\"小李\"",[103,163294,120],{"class":113},[103,163296,163297,163300,163302,163304,163307],{"class":105,"line":1189},[103,163298,163299],{"class":113},"names.extend([",[103,163301,8673],{"class":218},[103,163303,12425],{"class":113},[103,163305,163306],{"class":218},"\"小赵\"",[103,163308,4646],{"class":113},[103,163310,163311],{"class":105,"line":1203},[103,163312,2389],{"emptyLinePlaceholder":30},[103,163314,163315,163317],{"class":105,"line":1209},[103,163316,30405],{"class":162},[103,163318,163319],{"class":113},"(names)\n",[14,163321,163322],{},"删除元素：",[94,163324,163326],{"className":30368,"code":163325,"language":30370,"meta":24,"style":24},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[100,163327,163328,163337,163347,163361,163373],{"__ignoreMap":24},[103,163329,163330,163333,163335],{"class":105,"line":106},[103,163331,163332],{"class":113},"names.remove(",[103,163334,150918],{"class":218},[103,163336,120],{"class":113},[103,163338,163339,163342,163344],{"class":105,"line":25},[103,163340,163341],{"class":113},"last ",[103,163343,159],{"class":109},[103,163345,163346],{"class":113}," names.pop()\n",[103,163348,163349,163352,163354,163357,163359],{"class":105,"line":1168},[103,163350,163351],{"class":113},"first ",[103,163353,159],{"class":109},[103,163355,163356],{"class":113}," names.pop(",[103,163358,305],{"class":162},[103,163360,120],{"class":113},[103,163362,163363,163366,163369,163371],{"class":105,"line":1183},[103,163364,163365],{"class":109},"del",[103,163367,163368],{"class":113}," names[",[103,163370,305],{"class":162},[103,163372,33236],{"class":113},[103,163374,163375],{"class":105,"line":1189},[103,163376,163377],{"class":113},"names.clear()\n",[14,163379,163380],{},"查询和统计：",[94,163382,163384],{"className":30368,"code":163383,"language":30370,"meta":24,"style":24},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[100,163385,163386,163414,163418,163429,163440],{"__ignoreMap":24},[103,163387,163388,163390,163392,163394,163396,163398,163400,163402,163404,163406,163408,163410,163412],{"class":105,"line":106},[103,163389,163065],{"class":113},[103,163391,159],{"class":109},[103,163393,52216],{"class":113},[103,163395,331],{"class":162},[103,163397,12425],{"class":113},[103,163399,191],{"class":162},[103,163401,12425],{"class":113},[103,163403,185],{"class":162},[103,163405,12425],{"class":113},[103,163407,191],{"class":162},[103,163409,12425],{"class":113},[103,163411,406],{"class":162},[103,163413,33236],{"class":113},[103,163415,163416],{"class":105,"line":25},[103,163417,2389],{"emptyLinePlaceholder":30},[103,163419,163420,163422,163425,163427],{"class":105,"line":1168},[103,163421,30405],{"class":162},[103,163423,163424],{"class":113},"(numbers.index(",[103,163426,185],{"class":162},[103,163428,30487],{"class":113},[103,163430,163431,163433,163436,163438],{"class":105,"line":1183},[103,163432,30405],{"class":162},[103,163434,163435],{"class":113},"(numbers.count(",[103,163437,191],{"class":162},[103,163439,30487],{"class":113},[103,163441,163442,163444,163446,163448],{"class":105,"line":1189},[103,163443,30405],{"class":162},[103,163445,114],{"class":113},[103,163447,7348],{"class":162},[103,163449,163450],{"class":113},"(numbers))\n",[14,163452,163453],{},"排序：",[94,163455,163457],{"className":30368,"code":163456,"language":30370,"meta":24,"style":24},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[100,163458,163459,163483,163487,163492,163499,163503,163517,163523,163527,163532],{"__ignoreMap":24},[103,163460,163461,163463,163465,163467,163469,163471,163473,163475,163477,163479,163481],{"class":105,"line":106},[103,163462,163065],{"class":113},[103,163464,159],{"class":109},[103,163466,52216],{"class":113},[103,163468,185],{"class":162},[103,163470,12425],{"class":113},[103,163472,331],{"class":162},[103,163474,12425],{"class":113},[103,163476,432],{"class":162},[103,163478,12425],{"class":113},[103,163480,191],{"class":162},[103,163482,33236],{"class":113},[103,163484,163485],{"class":105,"line":25},[103,163486,2389],{"emptyLinePlaceholder":30},[103,163488,163489],{"class":105,"line":1168},[103,163490,163491],{"class":113},"numbers.sort()\n",[103,163493,163494,163496],{"class":105,"line":1183},[103,163495,30405],{"class":162},[103,163497,163498],{"class":113},"(numbers)\n",[103,163500,163501],{"class":105,"line":1189},[103,163502,2389],{"emptyLinePlaceholder":30},[103,163504,163505,163508,163511,163513,163515],{"class":105,"line":1203},[103,163506,163507],{"class":113},"numbers.sort(",[103,163509,163510],{"class":5206},"reverse",[103,163512,159],{"class":109},[103,163514,31466],{"class":162},[103,163516,120],{"class":113},[103,163518,163519,163521],{"class":105,"line":1209},[103,163520,30405],{"class":162},[103,163522,163498],{"class":113},[103,163524,163525],{"class":105,"line":1300},[103,163526,2389],{"emptyLinePlaceholder":30},[103,163528,163529],{"class":105,"line":1306},[103,163530,163531],{"class":113},"numbers.reverse()\n",[103,163533,163534,163536],{"class":105,"line":1318},[103,163535,30405],{"class":162},[103,163537,163498],{"class":113},[14,163539,163540,163543,163544,163547],{},[100,163541,163542],{},"sort()"," 会修改原列表，",[100,163545,163546],{},"sorted()"," 返回新列表。",[94,163549,163551],{"className":30368,"code":163550,"language":30370,"meta":24,"style":24},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[100,163552,163553,163577,163589,163593,163599],{"__ignoreMap":24},[103,163554,163555,163557,163559,163561,163563,163565,163567,163569,163571,163573,163575],{"class":105,"line":106},[103,163556,163065],{"class":113},[103,163558,159],{"class":109},[103,163560,52216],{"class":113},[103,163562,185],{"class":162},[103,163564,12425],{"class":113},[103,163566,331],{"class":162},[103,163568,12425],{"class":113},[103,163570,432],{"class":162},[103,163572,12425],{"class":113},[103,163574,191],{"class":162},[103,163576,33236],{"class":113},[103,163578,163579,163582,163584,163587],{"class":105,"line":25},[103,163580,163581],{"class":113},"new_numbers ",[103,163583,159],{"class":109},[103,163585,163586],{"class":162}," sorted",[103,163588,163498],{"class":113},[103,163590,163591],{"class":105,"line":1168},[103,163592,2389],{"emptyLinePlaceholder":30},[103,163594,163595,163597],{"class":105,"line":1183},[103,163596,30405],{"class":162},[103,163598,163498],{"class":113},[103,163600,163601,163603],{"class":105,"line":1189},[103,163602,30405],{"class":162},[103,163604,163605],{"class":113},"(new_numbers)\n",[45,163607,163609],{"id":163608},"_65-列表遍历","6.5 列表遍历",[94,163611,163613],{"className":30368,"code":163612,"language":30370,"meta":24,"style":24},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[100,163614,163615,163635,163639,163649],{"__ignoreMap":24},[103,163616,163617,163619,163621,163623,163625,163627,163629,163631,163633],{"class":105,"line":106},[103,163618,160362],{"class":113},[103,163620,159],{"class":109},[103,163622,52216],{"class":113},[103,163624,149870],{"class":218},[103,163626,12425],{"class":113},[103,163628,150918],{"class":218},[103,163630,12425],{"class":113},[103,163632,159713],{"class":218},[103,163634,33236],{"class":113},[103,163636,163637],{"class":105,"line":25},[103,163638,2389],{"emptyLinePlaceholder":30},[103,163640,163641,163643,163645,163647],{"class":105,"line":1168},[103,163642,3014],{"class":109},[103,163644,160398],{"class":113},[103,163646,26033],{"class":109},[103,163648,160403],{"class":113},[103,163650,163651,163653],{"class":105,"line":1183},[103,163652,31289],{"class":162},[103,163654,150642],{"class":113},[14,163656,163657],{},"需要索引时：",[94,163659,163661],{"className":30368,"code":163660,"language":30370,"meta":24,"style":24},"for index, name in enumerate(names):\n    print(index, name)\n",[100,163662,163663,163677],{"__ignoreMap":24},[103,163664,163665,163667,163670,163672,163674],{"class":105,"line":106},[103,163666,3014],{"class":109},[103,163668,163669],{"class":113}," index, name ",[103,163671,26033],{"class":109},[103,163673,31596],{"class":162},[103,163675,163676],{"class":113},"(names):\n",[103,163678,163679,163681],{"class":105,"line":25},[103,163680,31289],{"class":162},[103,163682,163683],{"class":113},"(index, name)\n",[14,163685,163686],{},"统计总分：",[94,163688,163690],{"className":30368,"code":163689,"language":30370,"meta":24,"style":24},"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",[100,163691,163692,163717,163725,163729,163740,163748,163752,163769],{"__ignoreMap":24},[103,163693,163694,163697,163699,163701,163703,163705,163707,163709,163711,163713,163715],{"class":105,"line":106},[103,163695,163696],{"class":113},"scores ",[103,163698,159],{"class":109},[103,163700,52216],{"class":113},[103,163702,975],{"class":162},[103,163704,12425],{"class":113},[103,163706,849],{"class":162},[103,163708,12425],{"class":113},[103,163710,367],{"class":162},[103,163712,12425],{"class":113},[103,163714,674],{"class":162},[103,163716,33236],{"class":113},[103,163718,163719,163721,163723],{"class":105,"line":25},[103,163720,157242],{"class":113},[103,163722,159],{"class":109},[103,163724,47323],{"class":162},[103,163726,163727],{"class":105,"line":1168},[103,163728,2389],{"emptyLinePlaceholder":30},[103,163730,163731,163733,163735,163737],{"class":105,"line":1183},[103,163732,3014],{"class":109},[103,163734,157765],{"class":113},[103,163736,26033],{"class":109},[103,163738,163739],{"class":113}," scores:\n",[103,163741,163742,163744,163746],{"class":105,"line":1189},[103,163743,159289],{"class":113},[103,163745,9467],{"class":109},[103,163747,1568],{"class":113},[103,163749,163750],{"class":105,"line":1203},[103,163751,2389],{"emptyLinePlaceholder":30},[103,163753,163754,163757,163759,163762,163764,163766],{"class":105,"line":1209},[103,163755,163756],{"class":113},"avg ",[103,163758,159],{"class":109},[103,163760,163761],{"class":113}," total ",[103,163763,697],{"class":109},[103,163765,7321],{"class":162},[103,163767,163768],{"class":113},"(scores)\n",[103,163770,163771,163773,163775,163777,163780,163782,163785,163787,163789,163791],{"class":105,"line":1300},[103,163772,30405],{"class":162},[103,163774,114],{"class":113},[103,163776,166],{"class":109},[103,163778,163779],{"class":218},"\"平均分:",[103,163781,1009],{"class":162},[103,163783,163784],{"class":113},"avg",[103,163786,157141],{"class":109},[103,163788,1059],{"class":162},[103,163790,364],{"class":218},[103,163792,120],{"class":113},[45,163794,163796],{"id":163795},"_66-元组tuple","6.6 元组tuple",[14,163798,163799],{},"元组和列表类似，但不可修改。",[94,163801,163803],{"className":30368,"code":163802,"language":30370,"meta":24,"style":24},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[100,163804,163805,163822],{"__ignoreMap":24},[103,163806,163807,163810,163812,163814,163816,163818,163820],{"class":105,"line":106},[103,163808,163809],{"class":113},"point ",[103,163811,159],{"class":109},[103,163813,1647],{"class":113},[103,163815,559],{"class":162},[103,163817,12425],{"class":113},[103,163819,813],{"class":162},[103,163821,120],{"class":113},[103,163823,163824,163826,163828,163830,163832,163834,163836,163838,163840],{"class":105,"line":25},[103,163825,116304],{"class":113},[103,163827,159],{"class":109},[103,163829,1647],{"class":113},[103,163831,149870],{"class":218},[103,163833,12425],{"class":113},[103,163835,763],{"class":162},[103,163837,12425],{"class":113},[103,163839,69259],{"class":218},[103,163841,120],{"class":113},[14,163843,163844],{},"单元素元组必须加逗号：",[94,163846,163848],{"className":30368,"code":163847,"language":30370,"meta":24,"style":24},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[100,163849,163850,163864,163877,163881,163895],{"__ignoreMap":24},[103,163851,163852,163855,163857,163859,163861],{"class":105,"line":106},[103,163853,163854],{"class":113},"t1 ",[103,163856,159],{"class":109},[103,163858,1647],{"class":113},[103,163860,559],{"class":162},[103,163862,163863],{"class":113},",)\n",[103,163865,163866,163869,163871,163873,163875],{"class":105,"line":25},[103,163867,163868],{"class":113},"t2 ",[103,163870,159],{"class":109},[103,163872,1647],{"class":113},[103,163874,559],{"class":162},[103,163876,120],{"class":113},[103,163878,163879],{"class":105,"line":1168},[103,163880,2389],{"emptyLinePlaceholder":30},[103,163882,163883,163885,163887,163889,163892],{"class":105,"line":1183},[103,163884,30405],{"class":162},[103,163886,114],{"class":113},[103,163888,103097],{"class":162},[103,163890,163891],{"class":113},"(t1))  ",[103,163893,163894],{"class":172},"# tuple\n",[103,163896,163897,163899,163901,163903,163906],{"class":105,"line":1189},[103,163898,30405],{"class":162},[103,163900,114],{"class":113},[103,163902,103097],{"class":162},[103,163904,163905],{"class":113},"(t2))  ",[103,163907,163908],{"class":172},"# int\n",[14,163910,163911],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[45,163913,163915],{"id":163914},"_67-字符串str","6.7 字符串str",[14,163917,163918],{},"字符串也是序列，可以索引、切片和遍历。",[94,163920,163922],{"className":30368,"code":163921,"language":30370,"meta":24,"style":24},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[100,163923,163924,163932,163936,163947,163959,163963,163974],{"__ignoreMap":24},[103,163925,163926,163928,163930],{"class":105,"line":106},[103,163927,156426],{"class":113},[103,163929,159],{"class":109},[103,163931,159663],{"class":218},[103,163933,163934],{"class":105,"line":25},[103,163935,2389],{"emptyLinePlaceholder":30},[103,163937,163938,163940,163943,163945],{"class":105,"line":1168},[103,163939,30405],{"class":162},[103,163941,163942],{"class":113},"(text[",[103,163944,305],{"class":162},[103,163946,4646],{"class":113},[103,163948,163949,163951,163953,163955,163957],{"class":105,"line":1183},[103,163950,30405],{"class":162},[103,163952,163942],{"class":113},[103,163954,645],{"class":109},[103,163956,331],{"class":162},[103,163958,4646],{"class":113},[103,163960,163961],{"class":105,"line":1189},[103,163962,2389],{"emptyLinePlaceholder":30},[103,163964,163965,163967,163969,163971],{"class":105,"line":1203},[103,163966,3014],{"class":109},[103,163968,159674],{"class":113},[103,163970,26033],{"class":109},[103,163972,163973],{"class":113}," text:\n",[103,163975,163976,163978],{"class":105,"line":1209},[103,163977,31289],{"class":162},[103,163979,159685],{"class":113},[14,163981,163982],{},"字符串不可变：",[94,163984,163986],{"className":30368,"code":163985,"language":30370,"meta":24,"style":24},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[100,163987,163988,163996],{"__ignoreMap":24},[103,163989,163990,163992,163994],{"class":105,"line":106},[103,163991,156426],{"class":113},[103,163993,159],{"class":109},[103,163995,159663],{"class":218},[103,163997,163998,164001,164003,164005,164007,164010],{"class":105,"line":25},[103,163999,164000],{"class":113},"text[",[103,164002,305],{"class":162},[103,164004,4432],{"class":113},[103,164006,159],{"class":109},[103,164008,164009],{"class":218}," \"P\"",[103,164011,164012],{"class":172},"  # 报错\n",[14,164014,164015],{},"如果要得到新字符串：",[94,164017,164019],{"className":30368,"code":164018,"language":30370,"meta":24,"style":24},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[100,164020,164021,164029,164047],{"__ignoreMap":24},[103,164022,164023,164025,164027],{"class":105,"line":106},[103,164024,156426],{"class":113},[103,164026,159],{"class":109},[103,164028,159663],{"class":218},[103,164030,164031,164033,164035,164037,164039,164042,164044],{"class":105,"line":25},[103,164032,156426],{"class":113},[103,164034,159],{"class":109},[103,164036,164009],{"class":218},[103,164038,45556],{"class":109},[103,164040,164041],{"class":113}," text[",[103,164043,331],{"class":162},[103,164045,164046],{"class":113},":]\n",[103,164048,164049,164051],{"class":105,"line":1168},[103,164050,30405],{"class":162},[103,164052,164053],{"class":113},"(text)\n",[45,164055,164057],{"id":164056},"_68-切片","6.8 切片",[14,164059,164060],{},"切片用于从序列中取一部分。",[94,164062,164064],{"className":30368,"code":164063,"language":30370,"meta":24,"style":24},"序列[开始:结束:步长]\n",[100,164065,164066],{"__ignoreMap":24},[103,164067,164068],{"class":105,"line":106},[103,164069,164063],{"class":113},[14,164071,164072],{},"结束位置不包含。",[94,164074,164076],{"className":30368,"code":164075,"language":30370,"meta":24,"style":24},"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",[100,164077,164078,164115,164119,164138,164153,164167,164181],{"__ignoreMap":24},[103,164079,164080,164083,164085,164087,164089,164091,164093,164095,164097,164099,164101,164103,164105,164107,164109,164111,164113],{"class":105,"line":106},[103,164081,164082],{"class":113},"nums ",[103,164084,159],{"class":109},[103,164086,52216],{"class":113},[103,164088,305],{"class":162},[103,164090,12425],{"class":113},[103,164092,331],{"class":162},[103,164094,12425],{"class":113},[103,164096,191],{"class":162},[103,164098,12425],{"class":113},[103,164100,185],{"class":162},[103,164102,12425],{"class":113},[103,164104,406],{"class":162},[103,164106,12425],{"class":113},[103,164108,432],{"class":162},[103,164110,12425],{"class":113},[103,164112,457],{"class":162},[103,164114,33236],{"class":113},[103,164116,164117],{"class":105,"line":25},[103,164118,2389],{"emptyLinePlaceholder":30},[103,164120,164121,164123,164126,164128,164130,164132,164135],{"class":105,"line":1168},[103,164122,30405],{"class":162},[103,164124,164125],{"class":113},"(nums[",[103,164127,331],{"class":162},[103,164129,972],{"class":113},[103,164131,406],{"class":162},[103,164133,164134],{"class":113},"])    ",[103,164136,164137],{"class":172},"# [1, 2, 3]\n",[103,164139,164140,164142,164145,164147,164150],{"class":105,"line":1183},[103,164141,30405],{"class":162},[103,164143,164144],{"class":113},"(nums[:",[103,164146,185],{"class":162},[103,164148,164149],{"class":113},"])     ",[103,164151,164152],{"class":172},"# [0, 1, 2]\n",[103,164154,164155,164157,164159,164161,164164],{"class":105,"line":1189},[103,164156,30405],{"class":162},[103,164158,164125],{"class":113},[103,164160,185],{"class":162},[103,164162,164163],{"class":113},":])     ",[103,164165,164166],{"class":172},"# [3, 4, 5, 6]\n",[103,164168,164169,164171,164174,164176,164178],{"class":105,"line":1203},[103,164170,30405],{"class":162},[103,164172,164173],{"class":113},"(nums[::",[103,164175,191],{"class":162},[103,164177,164134],{"class":113},[103,164179,164180],{"class":172},"# [0, 2, 4, 6]\n",[103,164182,164183,164185,164187,164189,164191,164194],{"class":105,"line":1209},[103,164184,30405],{"class":162},[103,164186,164173],{"class":113},[103,164188,645],{"class":109},[103,164190,331],{"class":162},[103,164192,164193],{"class":113},"])   ",[103,164195,164196],{"class":172},"# 反转\n",[14,164198,164199],{},"字符串切片：",[94,164201,164203],{"className":30368,"code":164202,"language":30370,"meta":24,"style":24},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[100,164204,164205,164214,164228],{"__ignoreMap":24},[103,164206,164207,164209,164211],{"class":105,"line":106},[103,164208,156426],{"class":113},[103,164210,159],{"class":109},[103,164212,164213],{"class":218}," \"abcdef\"\n",[103,164215,164216,164218,164220,164222,164224,164226],{"class":105,"line":25},[103,164217,30405],{"class":162},[103,164219,163942],{"class":113},[103,164221,331],{"class":162},[103,164223,972],{"class":113},[103,164225,406],{"class":162},[103,164227,4646],{"class":113},[103,164229,164230,164232,164235,164237,164239],{"class":105,"line":1168},[103,164231,30405],{"class":162},[103,164233,164234],{"class":113},"(text[::",[103,164236,645],{"class":109},[103,164238,331],{"class":162},[103,164240,4646],{"class":113},[45,164242,164244],{"id":164243},"_69-集合set","6.9 集合set",[14,164246,164247],{},"集合特点：",[57,164249,164250,164253,164256],{},[60,164251,164252],{},"无序。",[60,164254,164255],{},"元素不重复。",[60,164257,164258],{},"可以做交集、并集、差集。",[94,164260,164262],{"className":30368,"code":164261,"language":30370,"meta":24,"style":24},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[100,164263,164264,164292],{"__ignoreMap":24},[103,164265,164266,164268,164270,164272,164274,164276,164278,164280,164282,164284,164286,164288,164290],{"class":105,"line":106},[103,164267,164082],{"class":113},[103,164269,159],{"class":109},[103,164271,4437],{"class":113},[103,164273,331],{"class":162},[103,164275,12425],{"class":113},[103,164277,191],{"class":162},[103,164279,12425],{"class":113},[103,164281,185],{"class":162},[103,164283,12425],{"class":113},[103,164285,185],{"class":162},[103,164287,12425],{"class":113},[103,164289,406],{"class":162},[103,164291,1554],{"class":113},[103,164293,164294,164296],{"class":105,"line":25},[103,164295,30405],{"class":162},[103,164297,164298],{"class":113},"(nums)\n",[14,164300,164301],{},"创建空集合：",[94,164303,164305],{"className":30368,"code":164304,"language":30370,"meta":24,"style":24},"s = set()\n",[100,164306,164307],{"__ignoreMap":24},[103,164308,164309,164311,164313,164315],{"class":105,"line":106},[103,164310,10569],{"class":113},[103,164312,159],{"class":109},[103,164314,119712],{"class":162},[103,164316,1965],{"class":113},[14,164318,9015,164319,164321],{},[100,164320,32449],{}," 是空字典，不是空集合。",[14,164323,164324],{},"集合常用操作：",[94,164326,164328],{"className":30368,"code":164327,"language":30370,"meta":24,"style":24},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[100,164329,164330,164350,164354,164363,164372,164381],{"__ignoreMap":24},[103,164331,164332,164334,164336,164338,164340,164342,164344,164346,164348],{"class":105,"line":106},[103,164333,10569],{"class":113},[103,164335,159],{"class":109},[103,164337,4437],{"class":113},[103,164339,331],{"class":162},[103,164341,12425],{"class":113},[103,164343,191],{"class":162},[103,164345,12425],{"class":113},[103,164347,185],{"class":162},[103,164349,1554],{"class":113},[103,164351,164352],{"class":105,"line":25},[103,164353,2389],{"emptyLinePlaceholder":30},[103,164355,164356,164359,164361],{"class":105,"line":1168},[103,164357,164358],{"class":113},"s.add(",[103,164360,406],{"class":162},[103,164362,120],{"class":113},[103,164364,164365,164368,164370],{"class":105,"line":1183},[103,164366,164367],{"class":113},"s.remove(",[103,164369,191],{"class":162},[103,164371,120],{"class":113},[103,164373,164374,164377,164379],{"class":105,"line":1189},[103,164375,164376],{"class":113},"s.discard(",[103,164378,559],{"class":162},[103,164380,120],{"class":113},[103,164382,164383,164385,164387,164389],{"class":105,"line":1203},[103,164384,30405],{"class":162},[103,164386,114],{"class":113},[103,164388,7348],{"class":162},[103,164390,164391],{"class":113},"(s))\n",[14,164393,164394],{},"交并差：",[94,164396,164398],{"className":30368,"code":164397,"language":30370,"meta":24,"style":24},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[100,164399,164400,164420,164440,164444,164459,164472],{"__ignoreMap":24},[103,164401,164402,164404,164406,164408,164410,164412,164414,164416,164418],{"class":105,"line":106},[103,164403,10909],{"class":113},[103,164405,159],{"class":109},[103,164407,4437],{"class":113},[103,164409,331],{"class":162},[103,164411,12425],{"class":113},[103,164413,191],{"class":162},[103,164415,12425],{"class":113},[103,164417,185],{"class":162},[103,164419,1554],{"class":113},[103,164421,164422,164424,164426,164428,164430,164432,164434,164436,164438],{"class":105,"line":25},[103,164423,10935],{"class":113},[103,164425,159],{"class":109},[103,164427,4437],{"class":113},[103,164429,185],{"class":162},[103,164431,12425],{"class":113},[103,164433,406],{"class":162},[103,164435,12425],{"class":113},[103,164437,432],{"class":162},[103,164439,1554],{"class":113},[103,164441,164442],{"class":105,"line":1168},[103,164443,2389],{"emptyLinePlaceholder":30},[103,164445,164446,164448,164451,164453,164456],{"class":105,"line":1183},[103,164447,30405],{"class":162},[103,164449,164450],{"class":113},"(a ",[103,164452,466],{"class":109},[103,164454,164455],{"class":113}," b)  ",[103,164457,164458],{"class":172},"# 交集\n",[103,164460,164461,164463,164465,164467,164469],{"class":105,"line":1189},[103,164462,30405],{"class":162},[103,164464,164450],{"class":113},[103,164466,1034],{"class":109},[103,164468,164455],{"class":113},[103,164470,164471],{"class":172},"# 并集\n",[103,164473,164474,164476,164478,164480,164482],{"class":105,"line":1203},[103,164475,30405],{"class":162},[103,164477,164450],{"class":113},[103,164479,645],{"class":109},[103,164481,164455],{"class":113},[103,164483,164484],{"class":172},"# 差集\n",[45,164486,164488],{"id":164487},"_610-字典dict","6.10 字典dict",[14,164490,164491],{},"字典通过 key-value 保存数据。",[94,164493,164495],{"className":30368,"code":164494,"language":30370,"meta":24,"style":24},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[100,164496,164497,164505,164515,164526,164536],{"__ignoreMap":24},[103,164498,164499,164501,164503],{"class":105,"line":106},[103,164500,149463],{"class":113},[103,164502,159],{"class":109},[103,164504,15562],{"class":113},[103,164506,164507,164509,164511,164513],{"class":105,"line":25},[103,164508,147002],{"class":218},[103,164510,51427],{"class":113},[103,164512,149870],{"class":218},[103,164514,31456],{"class":113},[103,164516,164517,164520,164522,164524],{"class":105,"line":1168},[103,164518,164519],{"class":218},"    \"age\"",[103,164521,51427],{"class":113},[103,164523,763],{"class":162},[103,164525,31456],{"class":113},[103,164527,164528,164531,164533],{"class":105,"line":1183},[103,164529,164530],{"class":218},"    \"score\"",[103,164532,51427],{"class":113},[103,164534,164535],{"class":162},"95\n",[103,164537,164538],{"class":105,"line":1189},[103,164539,1554],{"class":113},[14,164541,164542],{},"获取值：",[94,164544,164546],{"className":30368,"code":164545,"language":30370,"meta":24,"style":24},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[100,164547,164548,164559],{"__ignoreMap":24},[103,164549,164550,164552,164555,164557],{"class":105,"line":106},[103,164551,30405],{"class":162},[103,164553,164554],{"class":113},"(student[",[103,164556,62669],{"class":218},[103,164558,4646],{"class":113},[103,164560,164561,164563,164566,164568],{"class":105,"line":25},[103,164562,30405],{"class":162},[103,164564,164565],{"class":113},"(student.get(",[103,164567,62669],{"class":218},[103,164569,30487],{"class":113},[14,164571,15378],{},[94,164573,164575],{"className":30368,"code":164574,"language":30370,"meta":24,"style":24},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[100,164576,164577,164590],{"__ignoreMap":24},[103,164578,164579,164581,164584,164587],{"class":105,"line":106},[103,164580,152841],{"class":113},[103,164582,164583],{"class":218},"\"address\"",[103,164585,164586],{"class":113},"]     ",[103,164588,164589],{"class":172},"# key不存在会报错\n",[103,164591,164592,164595,164597,164599],{"class":105,"line":25},[103,164593,164594],{"class":113},"student.get(",[103,164596,164583],{"class":218},[103,164598,13704],{"class":113},[103,164600,164601],{"class":172},"# key不存在返回None\n",[14,164603,164604],{},"设置默认值：",[94,164606,164608],{"className":30368,"code":164607,"language":30370,"meta":24,"style":24},"print(student.get(\"address\", \"未知\"))\n",[100,164609,164610],{"__ignoreMap":24},[103,164611,164612,164614,164616,164618,164620,164623],{"class":105,"line":106},[103,164613,30405],{"class":162},[103,164615,164565],{"class":113},[103,164617,164583],{"class":218},[103,164619,12425],{"class":113},[103,164621,164622],{"class":218},"\"未知\"",[103,164624,30487],{"class":113},[14,164626,164627],{},"新增和修改：",[94,164629,164631],{"className":30368,"code":164630,"language":30370,"meta":24,"style":24},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[100,164632,164633,164646],{"__ignoreMap":24},[103,164634,164635,164637,164639,164641,164643],{"class":105,"line":106},[103,164636,152841],{"class":113},[103,164638,69114],{"class":218},[103,164640,4432],{"class":113},[103,164642,159],{"class":109},[103,164644,164645],{"class":162}," 19\n",[103,164647,164648,164650,164652,164654,164656],{"class":105,"line":25},[103,164649,152841],{"class":113},[103,164651,164583],{"class":218},[103,164653,4432],{"class":113},[103,164655,159],{"class":109},[103,164657,164658],{"class":218}," \"北京\"\n",[14,164660,164661],{},"删除：",[94,164663,164665],{"className":30368,"code":164664,"language":30370,"meta":24,"style":24},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[100,164666,164667,164680,164690],{"__ignoreMap":24},[103,164668,164669,164671,164673,164676,164678],{"class":105,"line":106},[103,164670,155340],{"class":113},[103,164672,159],{"class":109},[103,164674,164675],{"class":113}," student.pop(",[103,164677,151454],{"class":218},[103,164679,120],{"class":113},[103,164681,164682,164684,164686,164688],{"class":105,"line":25},[103,164683,163365],{"class":109},[103,164685,152131],{"class":113},[103,164687,69114],{"class":218},[103,164689,33236],{"class":113},[103,164691,164692],{"class":105,"line":1168},[103,164693,164694],{"class":113},"student.clear()\n",[45,164696,164698],{"id":164697},"_611-字典遍历","6.11 字典遍历",[14,164700,164701],{},"遍历 key：",[94,164703,164705],{"className":30368,"code":164704,"language":30370,"meta":24,"style":24},"for key in student:\n    print(key, student[key])\n",[100,164706,164707,164719],{"__ignoreMap":24},[103,164708,164709,164711,164714,164716],{"class":105,"line":106},[103,164710,3014],{"class":109},[103,164712,164713],{"class":113}," key ",[103,164715,26033],{"class":109},[103,164717,164718],{"class":113}," student:\n",[103,164720,164721,164723],{"class":105,"line":25},[103,164722,31289],{"class":162},[103,164724,164725],{"class":113},"(key, student[key])\n",[14,164727,164728],{},"遍历 value：",[94,164730,164732],{"className":30368,"code":164731,"language":30370,"meta":24,"style":24},"for value in student.values():\n    print(value)\n",[100,164733,164734,164746],{"__ignoreMap":24},[103,164735,164736,164738,164741,164743],{"class":105,"line":106},[103,164737,3014],{"class":109},[103,164739,164740],{"class":113}," value ",[103,164742,26033],{"class":109},[103,164744,164745],{"class":113}," student.values():\n",[103,164747,164748,164750],{"class":105,"line":25},[103,164749,31289],{"class":162},[103,164751,164752],{"class":113},"(value)\n",[14,164754,164755],{},"遍历 key 和 value：",[94,164757,164759],{"className":30368,"code":164758,"language":30370,"meta":24,"style":24},"for key, value in student.items():\n    print(key, value)\n",[100,164760,164761,164773],{"__ignoreMap":24},[103,164762,164763,164765,164768,164770],{"class":105,"line":106},[103,164764,3014],{"class":109},[103,164766,164767],{"class":113}," key, value ",[103,164769,26033],{"class":109},[103,164771,164772],{"class":113}," student.items():\n",[103,164774,164775,164777],{"class":105,"line":25},[103,164776,31289],{"class":162},[103,164778,164779],{"class":113},"(key, value)\n",[45,164781,164783],{"id":164782},"_612-嵌套容器","6.12 嵌套容器",[14,164785,164786],{},"列表中保存字典，是项目中最常见的结构之一。",[94,164788,164790],{"className":30368,"code":164789,"language":30370,"meta":24,"style":24},"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",[100,164791,164792,164800,164828,164856,164884,164888,164892,164902],{"__ignoreMap":24},[103,164793,164794,164796,164798],{"class":105,"line":106},[103,164795,159698],{"class":113},[103,164797,159],{"class":109},[103,164799,55437],{"class":113},[103,164801,164802,164804,164806,164808,164810,164812,164814,164816,164818,164820,164822,164824,164826],{"class":105,"line":25},[103,164803,148367],{"class":113},[103,164805,62669],{"class":218},[103,164807,51427],{"class":113},[103,164809,149870],{"class":218},[103,164811,12425],{"class":113},[103,164813,69114],{"class":218},[103,164815,51427],{"class":113},[103,164817,763],{"class":162},[103,164819,12425],{"class":113},[103,164821,151454],{"class":218},[103,164823,51427],{"class":113},[103,164825,1102],{"class":162},[103,164827,4919],{"class":113},[103,164829,164830,164832,164834,164836,164838,164840,164842,164844,164846,164848,164850,164852,164854],{"class":105,"line":1168},[103,164831,148367],{"class":113},[103,164833,62669],{"class":218},[103,164835,51427],{"class":113},[103,164837,150918],{"class":218},[103,164839,12425],{"class":113},[103,164841,69114],{"class":218},[103,164843,51427],{"class":113},[103,164845,738],{"class":162},[103,164847,12425],{"class":113},[103,164849,151454],{"class":218},[103,164851,51427],{"class":113},[103,164853,924],{"class":162},[103,164855,4919],{"class":113},[103,164857,164858,164860,164862,164864,164866,164868,164870,164872,164874,164876,164878,164880,164882],{"class":105,"line":1183},[103,164859,148367],{"class":113},[103,164861,62669],{"class":218},[103,164863,51427],{"class":113},[103,164865,159713],{"class":218},[103,164867,12425],{"class":113},[103,164869,69114],{"class":218},[103,164871,51427],{"class":113},[103,164873,788],{"class":162},[103,164875,12425],{"class":113},[103,164877,151454],{"class":218},[103,164879,51427],{"class":113},[103,164881,519],{"class":162},[103,164883,4919],{"class":113},[103,164885,164886],{"class":105,"line":1189},[103,164887,33236],{"class":113},[103,164889,164890],{"class":105,"line":1203},[103,164891,2389],{"emptyLinePlaceholder":30},[103,164893,164894,164896,164898,164900],{"class":105,"line":1209},[103,164895,3014],{"class":109},[103,164897,152119],{"class":113},[103,164899,26033],{"class":109},[103,164901,152124],{"class":113},[103,164903,164904,164906,164908,164910,164913,164915],{"class":105,"line":1300},[103,164905,31289],{"class":162},[103,164907,164554],{"class":113},[103,164909,62669],{"class":218},[103,164911,164912],{"class":113},"], student[",[103,164914,151454],{"class":218},[103,164916,4646],{"class":113},[14,164918,164919],{},"统计平均分：",[94,164921,164923],{"className":30368,"code":164922,"language":30370,"meta":24,"style":24},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[100,164924,164925,164933,164937,164947,164959,164963,164978],{"__ignoreMap":24},[103,164926,164927,164929,164931],{"class":105,"line":106},[103,164928,157242],{"class":113},[103,164930,159],{"class":109},[103,164932,47323],{"class":162},[103,164934,164935],{"class":105,"line":25},[103,164936,2389],{"emptyLinePlaceholder":30},[103,164938,164939,164941,164943,164945],{"class":105,"line":1168},[103,164940,3014],{"class":109},[103,164942,152119],{"class":113},[103,164944,26033],{"class":109},[103,164946,152124],{"class":113},[103,164948,164949,164951,164953,164955,164957],{"class":105,"line":1183},[103,164950,159289],{"class":113},[103,164952,9467],{"class":109},[103,164954,152131],{"class":113},[103,164956,151454],{"class":218},[103,164958,33236],{"class":113},[103,164960,164961],{"class":105,"line":1189},[103,164962,2389],{"emptyLinePlaceholder":30},[103,164964,164965,164967,164969,164971,164973,164975],{"class":105,"line":1203},[103,164966,163756],{"class":113},[103,164968,159],{"class":109},[103,164970,163761],{"class":113},[103,164972,697],{"class":109},[103,164974,7321],{"class":162},[103,164976,164977],{"class":113},"(students)\n",[103,164979,164980,164982,164984,164986,164988,164990,164992,164994,164996,164998],{"class":105,"line":1209},[103,164981,30405],{"class":162},[103,164983,114],{"class":113},[103,164985,166],{"class":109},[103,164987,163779],{"class":218},[103,164989,1009],{"class":162},[103,164991,163784],{"class":113},[103,164993,157141],{"class":109},[103,164995,1059],{"class":162},[103,164997,364],{"class":218},[103,164999,120],{"class":113},[14,165001,165002],{},"查找学生：",[94,165004,165006],{"className":30368,"code":165005,"language":30370,"meta":24,"style":24},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[100,165007,165008,165023,165027,165037,165051,165057,165061,165067],{"__ignoreMap":24},[103,165009,165010,165012,165014,165016,165018,165021],{"class":105,"line":106},[103,165011,111568],{"class":113},[103,165013,159],{"class":109},[103,165015,60595],{"class":162},[103,165017,114],{"class":113},[103,165019,165020],{"class":218},"\"请输入学生姓名:\"",[103,165022,120],{"class":113},[103,165024,165025],{"class":105,"line":25},[103,165026,2389],{"emptyLinePlaceholder":30},[103,165028,165029,165031,165033,165035],{"class":105,"line":1168},[103,165030,3014],{"class":109},[103,165032,152119],{"class":113},[103,165034,26033],{"class":109},[103,165036,152124],{"class":113},[103,165038,165039,165041,165043,165045,165047,165049],{"class":105,"line":1183},[103,165040,3090],{"class":109},[103,165042,152131],{"class":113},[103,165044,62669],{"class":218},[103,165046,4432],{"class":113},[103,165048,2938],{"class":109},[103,165050,160414],{"class":113},[103,165052,165053,165055],{"class":105,"line":1189},[103,165054,32441],{"class":162},[103,165056,150024],{"class":113},[103,165058,165059],{"class":105,"line":1203},[103,165060,31617],{"class":109},[103,165062,165063,165065],{"class":105,"line":1209},[103,165064,1690],{"class":109},[103,165066,3728],{"class":113},[103,165068,165069,165071,165073,165076],{"class":105,"line":1300},[103,165070,31289],{"class":162},[103,165072,114],{"class":113},[103,165074,165075],{"class":218},"\"没有找到\"",[103,165077,120],{"class":113},[45,165079,165081],{"id":165080},"_613-容器通用操作","6.13 容器通用操作",[14,165083,165084],{},"长度：",[94,165086,165088],{"className":30368,"code":165087,"language":30370,"meta":24,"style":24},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[100,165089,165090,165109,165119],{"__ignoreMap":24},[103,165091,165092,165094,165097,165099,165101,165103,165105,165107],{"class":105,"line":106},[103,165093,7348],{"class":162},[103,165095,165096],{"class":113},"([",[103,165098,331],{"class":162},[103,165100,12425],{"class":113},[103,165102,191],{"class":162},[103,165104,12425],{"class":113},[103,165106,185],{"class":162},[103,165108,4646],{"class":113},[103,165110,165111,165113,165115,165117],{"class":105,"line":25},[103,165112,7348],{"class":162},[103,165114,114],{"class":113},[103,165116,155862],{"class":218},[103,165118,120],{"class":113},[103,165120,165121,165123,165126,165128,165130,165132],{"class":105,"line":1168},[103,165122,7348],{"class":162},[103,165124,165125],{"class":113},"({",[103,165127,62669],{"class":218},[103,165129,51427],{"class":113},[103,165131,149870],{"class":218},[103,165133,165134],{"class":113},"})\n",[14,165136,165137],{},"最大最小：",[94,165139,165141],{"className":30368,"code":165140,"language":30370,"meta":24,"style":24},"max([1, 2, 3])\nmin([1, 2, 3])\n",[100,165142,165143,165161],{"__ignoreMap":24},[103,165144,165145,165147,165149,165151,165153,165155,165157,165159],{"class":105,"line":106},[103,165146,6005],{"class":162},[103,165148,165096],{"class":113},[103,165150,331],{"class":162},[103,165152,12425],{"class":113},[103,165154,191],{"class":162},[103,165156,12425],{"class":113},[103,165158,185],{"class":162},[103,165160,4646],{"class":113},[103,165162,165163,165166,165168,165170,165172,165174,165176,165178],{"class":105,"line":25},[103,165164,165165],{"class":162},"min",[103,165167,165096],{"class":113},[103,165169,331],{"class":162},[103,165171,12425],{"class":113},[103,165173,191],{"class":162},[103,165175,12425],{"class":113},[103,165177,185],{"class":162},[103,165179,4646],{"class":113},[14,165181,165182],{},"求和：",[94,165184,165186],{"className":30368,"code":165185,"language":30370,"meta":24,"style":24},"sum([1, 2, 3])\n",[100,165187,165188],{"__ignoreMap":24},[103,165189,165190,165193,165195,165197,165199,165201,165203,165205],{"class":105,"line":106},[103,165191,165192],{"class":162},"sum",[103,165194,165096],{"class":113},[103,165196,331],{"class":162},[103,165198,12425],{"class":113},[103,165200,191],{"class":162},[103,165202,12425],{"class":113},[103,165204,185],{"class":162},[103,165206,4646],{"class":113},[14,165208,163453],{},[94,165210,165212],{"className":30368,"code":165211,"language":30370,"meta":24,"style":24},"sorted([3, 1, 2])\n",[100,165213,165214],{"__ignoreMap":24},[103,165215,165216,165219,165221,165223,165225,165227,165229,165231],{"class":105,"line":106},[103,165217,165218],{"class":162},"sorted",[103,165220,165096],{"class":113},[103,165222,185],{"class":162},[103,165224,12425],{"class":113},[103,165226,331],{"class":162},[103,165228,12425],{"class":113},[103,165230,191],{"class":162},[103,165232,4646],{"class":113},[14,165234,165235],{},"类型转换：",[94,165237,165239],{"className":30368,"code":165238,"language":30370,"meta":24,"style":24},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[100,165240,165241,165251,165269],{"__ignoreMap":24},[103,165242,165243,165245,165247,165249],{"class":105,"line":106},[103,165244,154052],{"class":162},[103,165246,114],{"class":113},[103,165248,155862],{"class":218},[103,165250,120],{"class":113},[103,165252,165253,165255,165257,165259,165261,165263,165265,165267],{"class":105,"line":25},[103,165254,155247],{"class":162},[103,165256,165096],{"class":113},[103,165258,331],{"class":162},[103,165260,12425],{"class":113},[103,165262,191],{"class":162},[103,165264,12425],{"class":113},[103,165266,185],{"class":162},[103,165268,4646],{"class":113},[103,165270,165271,165273,165275,165277,165279,165281,165283,165285,165287,165289],{"class":105,"line":1168},[103,165272,155272],{"class":162},[103,165274,165096],{"class":113},[103,165276,331],{"class":162},[103,165278,12425],{"class":113},[103,165280,331],{"class":162},[103,165282,12425],{"class":113},[103,165284,191],{"class":162},[103,165286,12425],{"class":113},[103,165288,185],{"class":162},[103,165290,4646],{"class":113},[14,165292,165293],{},"成员判断：",[94,165295,165297],{"className":30368,"code":165296,"language":30370,"meta":24,"style":24},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[100,165298,165299,165316,165340],{"__ignoreMap":24},[103,165300,165301,165303,165305,165308,165311,165314],{"class":105,"line":106},[103,165302,30405],{"class":162},[103,165304,114],{"class":113},[103,165306,165307],{"class":218},"\"a\"",[103,165309,165310],{"class":109}," in",[103,165312,165313],{"class":218}," \"abc\"",[103,165315,120],{"class":113},[103,165317,165318,165320,165322,165324,165326,165328,165330,165332,165334,165336,165338],{"class":105,"line":25},[103,165319,30405],{"class":162},[103,165321,114],{"class":113},[103,165323,331],{"class":162},[103,165325,165310],{"class":109},[103,165327,52216],{"class":113},[103,165329,331],{"class":162},[103,165331,12425],{"class":113},[103,165333,191],{"class":162},[103,165335,12425],{"class":113},[103,165337,185],{"class":162},[103,165339,4646],{"class":113},[103,165341,165342,165344,165346,165348,165350,165352,165354,165356,165358],{"class":105,"line":1168},[103,165343,30405],{"class":162},[103,165345,114],{"class":113},[103,165347,62669],{"class":218},[103,165349,165310],{"class":109},[103,165351,4437],{"class":113},[103,165353,62669],{"class":218},[103,165355,51427],{"class":113},[103,165357,149870],{"class":218},[103,165359,165134],{"class":113},[45,165361,165363],{"id":165362},"_614-推导式","6.14 推导式",[14,165365,165366],{},"推导式用于快速生成容器。",[14,165368,165369],{},"列表推导式：",[94,165371,165373],{"className":30368,"code":165372,"language":30370,"meta":24,"style":24},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[100,165374,165375,165402],{"__ignoreMap":24},[103,165376,165377,165379,165381,165384,165386,165388,165390,165392,165394,165396,165398,165400],{"class":105,"line":106},[103,165378,164082],{"class":113},[103,165380,159],{"class":109},[103,165382,165383],{"class":113}," [i ",[103,165385,3014],{"class":109},[103,165387,9428],{"class":113},[103,165389,26033],{"class":109},[103,165391,32433],{"class":162},[103,165393,114],{"class":113},[103,165395,331],{"class":162},[103,165397,12425],{"class":113},[103,165399,457],{"class":162},[103,165401,97290],{"class":113},[103,165403,165404,165406],{"class":105,"line":25},[103,165405,30405],{"class":162},[103,165407,164298],{"class":113},[14,165409,165410],{},"带条件：",[94,165412,165414],{"className":30368,"code":165413,"language":30370,"meta":24,"style":24},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[100,165415,165416,165457],{"__ignoreMap":24},[103,165417,165418,165421,165423,165425,165427,165429,165431,165433,165435,165437,165439,165441,165443,165445,165447,165449,165451,165453,165455],{"class":105,"line":106},[103,165419,165420],{"class":113},"even_nums ",[103,165422,159],{"class":109},[103,165424,165383],{"class":113},[103,165426,3014],{"class":109},[103,165428,9428],{"class":113},[103,165430,26033],{"class":109},[103,165432,32433],{"class":162},[103,165434,114],{"class":113},[103,165436,331],{"class":162},[103,165438,12425],{"class":113},[103,165440,450],{"class":162},[103,165442,13704],{"class":113},[103,165444,1520],{"class":109},[103,165446,9428],{"class":113},[103,165448,441],{"class":109},[103,165450,14745],{"class":162},[103,165452,101549],{"class":109},[103,165454,4082],{"class":162},[103,165456,33236],{"class":113},[103,165458,165459,165461],{"class":105,"line":25},[103,165460,30405],{"class":162},[103,165462,165463],{"class":113},"(even_nums)\n",[14,165465,165466],{},"字典推导式：",[94,165468,165470],{"className":30368,"code":165469,"language":30370,"meta":24,"style":24},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[100,165471,165472,165506],{"__ignoreMap":24},[103,165473,165474,165477,165479,165482,165484,165486,165489,165491,165493,165495,165497,165499,165501,165503],{"class":105,"line":106},[103,165475,165476],{"class":113},"squares ",[103,165478,159],{"class":109},[103,165480,165481],{"class":113}," {i: i ",[103,165483,10651],{"class":109},[103,165485,14745],{"class":162},[103,165487,165488],{"class":109}," for",[103,165490,9428],{"class":113},[103,165492,26033],{"class":109},[103,165494,32433],{"class":162},[103,165496,114],{"class":113},[103,165498,331],{"class":162},[103,165500,12425],{"class":113},[103,165502,457],{"class":162},[103,165504,165505],{"class":113},")}\n",[103,165507,165508,165510],{"class":105,"line":25},[103,165509,30405],{"class":162},[103,165511,165512],{"class":113},"(squares)\n",[14,165514,165515],{},"集合推导式：",[94,165517,165519],{"className":30368,"code":165518,"language":30370,"meta":24,"style":24},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[100,165520,165521,165542],{"__ignoreMap":24},[103,165522,165523,165526,165528,165531,165533,165535,165537,165540],{"class":105,"line":106},[103,165524,165525],{"class":113},"chars ",[103,165527,159],{"class":109},[103,165529,165530],{"class":113}," {ch ",[103,165532,3014],{"class":109},[103,165534,159674],{"class":113},[103,165536,26033],{"class":109},[103,165538,165539],{"class":218}," \"hello\"",[103,165541,1554],{"class":113},[103,165543,165544,165546],{"class":105,"line":25},[103,165545,30405],{"class":162},[103,165547,165548],{"class":113},"(chars)\n",[14,165550,165551],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[45,165553,165555],{"id":165554},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[94,165557,165559],{"className":30368,"code":165558,"language":30370,"meta":24,"style":24},"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",[100,165560,165561,165569,165589,165609,165629,165649,165653,165657,165665,165679,165688,165692,165702,165714,165718,165738,165747,165751,165767,165772,165776,165790,165794,165816,165852],{"__ignoreMap":24},[103,165562,165563,165565,165567],{"class":105,"line":106},[103,165564,159698],{"class":113},[103,165566,159],{"class":109},[103,165568,55437],{"class":113},[103,165570,165571,165573,165575,165577,165579,165581,165583,165585,165587],{"class":105,"line":25},[103,165572,148367],{"class":113},[103,165574,62669],{"class":218},[103,165576,51427],{"class":113},[103,165578,149870],{"class":218},[103,165580,12425],{"class":113},[103,165582,151454],{"class":218},[103,165584,51427],{"class":113},[103,165586,1102],{"class":162},[103,165588,4919],{"class":113},[103,165590,165591,165593,165595,165597,165599,165601,165603,165605,165607],{"class":105,"line":1168},[103,165592,148367],{"class":113},[103,165594,62669],{"class":218},[103,165596,51427],{"class":113},[103,165598,150918],{"class":218},[103,165600,12425],{"class":113},[103,165602,151454],{"class":218},[103,165604,51427],{"class":113},[103,165606,924],{"class":162},[103,165608,4919],{"class":113},[103,165610,165611,165613,165615,165617,165619,165621,165623,165625,165627],{"class":105,"line":1183},[103,165612,148367],{"class":113},[103,165614,62669],{"class":218},[103,165616,51427],{"class":113},[103,165618,159713],{"class":218},[103,165620,12425],{"class":113},[103,165622,151454],{"class":218},[103,165624,51427],{"class":113},[103,165626,519],{"class":162},[103,165628,4919],{"class":113},[103,165630,165631,165633,165635,165637,165639,165641,165643,165645,165647],{"class":105,"line":1189},[103,165632,148367],{"class":113},[103,165634,62669],{"class":218},[103,165636,51427],{"class":113},[103,165638,163292],{"class":218},[103,165640,12425],{"class":113},[103,165642,151454],{"class":218},[103,165644,51427],{"class":113},[103,165646,995],{"class":162},[103,165648,4919],{"class":113},[103,165650,165651],{"class":105,"line":1203},[103,165652,33236],{"class":113},[103,165654,165655],{"class":105,"line":1209},[103,165656,2389],{"emptyLinePlaceholder":30},[103,165658,165659,165661,165663],{"class":105,"line":1300},[103,165660,157242],{"class":113},[103,165662,159],{"class":109},[103,165664,47323],{"class":162},[103,165666,165667,165670,165672,165675,165677],{"class":105,"line":1306},[103,165668,165669],{"class":113},"max_student ",[103,165671,159],{"class":109},[103,165673,165674],{"class":113}," students[",[103,165676,305],{"class":162},[103,165678,33236],{"class":113},[103,165680,165681,165684,165686],{"class":105,"line":1318},[103,165682,165683],{"class":113},"passed ",[103,165685,159],{"class":109},[103,165687,51828],{"class":113},[103,165689,165690],{"class":105,"line":1601},[103,165691,2389],{"emptyLinePlaceholder":30},[103,165693,165694,165696,165698,165700],{"class":105,"line":1606},[103,165695,3014],{"class":109},[103,165697,152119],{"class":113},[103,165699,26033],{"class":109},[103,165701,152124],{"class":113},[103,165703,165704,165706,165708,165710,165712],{"class":105,"line":1612},[103,165705,159289],{"class":113},[103,165707,9467],{"class":109},[103,165709,152131],{"class":113},[103,165711,151454],{"class":218},[103,165713,33236],{"class":113},[103,165715,165716],{"class":105,"line":1617},[103,165717,2389],{"emptyLinePlaceholder":30},[103,165719,165720,165722,165724,165726,165728,165730,165733,165735],{"class":105,"line":1631},[103,165721,3090],{"class":109},[103,165723,152131],{"class":113},[103,165725,151454],{"class":218},[103,165727,4432],{"class":113},[103,165729,1073],{"class":109},[103,165731,165732],{"class":113}," max_student[",[103,165734,151454],{"class":218},[103,165736,165737],{"class":113},"]:\n",[103,165739,165740,165743,165745],{"class":105,"line":1636},[103,165741,165742],{"class":113},"        max_student ",[103,165744,159],{"class":109},[103,165746,152147],{"class":113},[103,165748,165749],{"class":105,"line":1642},[103,165750,2389],{"emptyLinePlaceholder":30},[103,165752,165753,165755,165757,165759,165761,165763,165765],{"class":105,"line":1663},[103,165754,3090],{"class":109},[103,165756,152131],{"class":113},[103,165758,151454],{"class":218},[103,165760,4432],{"class":113},[103,165762,1699],{"class":109},[103,165764,157819],{"class":162},[103,165766,3728],{"class":113},[103,165768,165769],{"class":105,"line":1668},[103,165770,165771],{"class":113},"        passed.append(student)\n",[103,165773,165774],{"class":105,"line":1682},[103,165775,2389],{"emptyLinePlaceholder":30},[103,165777,165778,165780,165782,165784,165786,165788],{"class":105,"line":1687},[103,165779,163756],{"class":113},[103,165781,159],{"class":109},[103,165783,163761],{"class":113},[103,165785,697],{"class":109},[103,165787,7321],{"class":162},[103,165789,164977],{"class":113},[103,165791,165792],{"class":105,"line":1716},[103,165793,2389],{"emptyLinePlaceholder":30},[103,165795,165796,165798,165800,165802,165804,165806,165808,165810,165812,165814],{"class":105,"line":1721},[103,165797,30405],{"class":162},[103,165799,114],{"class":113},[103,165801,166],{"class":109},[103,165803,163779],{"class":218},[103,165805,1009],{"class":162},[103,165807,163784],{"class":113},[103,165809,157141],{"class":109},[103,165811,1059],{"class":162},[103,165813,364],{"class":218},[103,165815,120],{"class":113},[103,165817,165818,165820,165822,165824,165827,165829,165832,165834,165836,165838,165840,165842,165844,165846,165848,165850],{"class":105,"line":1738},[103,165819,30405],{"class":162},[103,165821,114],{"class":113},[103,165823,166],{"class":109},[103,165825,165826],{"class":218},"\"最高分学生:",[103,165828,1009],{"class":162},[103,165830,165831],{"class":113},"max_student[",[103,165833,152864],{"class":218},[103,165835,1053],{"class":113},[103,165837,1059],{"class":162},[103,165839,4437],{"class":162},[103,165841,165831],{"class":113},[103,165843,152902],{"class":218},[103,165845,1053],{"class":113},[103,165847,1059],{"class":162},[103,165849,364],{"class":218},[103,165851,120],{"class":113},[103,165853,165854,165856,165858,165860,165863,165866,165869,165871,165873],{"class":105,"line":1743},[103,165855,30405],{"class":162},[103,165857,114],{"class":113},[103,165859,166],{"class":109},[103,165861,165862],{"class":218},"\"及格人数:",[103,165864,165865],{"class":162},"{len",[103,165867,165868],{"class":113},"(passed)",[103,165870,1059],{"class":162},[103,165872,364],{"class":218},[103,165874,120],{"class":113},[45,165876,165878],{"id":165877},"_616-易错点","6.16 易错点",[57,165880,165881,165884,165887,165890,165896,165905],{},[60,165882,165883],{},"列表可变，元组和字符串不可变。",[60,165885,165886],{},"切片结束位置不包含。",[60,165888,165889],{},"字典通过 key 取值，不是通过索引。",[60,165891,165892,165893,28375],{},"空集合要用 ",[100,165894,165895],{},"set()",[60,165897,104356,165898,165901,165902,28375],{},[100,165899,165900],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[100,165903,165904],{},"get()",[60,165906,165907],{},"嵌套容器要先看清楚每一层是什么类型。",[45,165909,165911],{"id":165910},"_617-本章练习","6.17 本章练习",[57,165913,165914,165917,165920,165923,165926],{},[60,165915,165916],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[60,165918,165919],{},"输入一句话，统计每个字符出现次数。",[60,165921,165922],{},"使用集合去除列表中的重复元素。",[60,165924,165925],{},"使用字典保存一个学生的信息，并实现修改成绩。",[60,165927,165928],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5116,165930,165931],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":24,"searchDepth":25,"depth":25,"links":165933},[165934,165935,165936,165937,165938,165939,165940,165941,165942,165943,165944,165945,165946,165947,165948,165949,165950],{"id":162914,"depth":25,"text":162915},{"id":163031,"depth":25,"text":163032},{"id":163121,"depth":25,"text":163122},{"id":163245,"depth":25,"text":163246},{"id":163608,"depth":25,"text":163609},{"id":163795,"depth":25,"text":163796},{"id":163914,"depth":25,"text":163915},{"id":164056,"depth":25,"text":164057},{"id":164243,"depth":25,"text":164244},{"id":164487,"depth":25,"text":164488},{"id":164697,"depth":25,"text":164698},{"id":164782,"depth":25,"text":164783},{"id":165080,"depth":25,"text":165081},{"id":165362,"depth":25,"text":165363},{"id":165554,"depth":25,"text":165555},{"id":165877,"depth":25,"text":165878},{"id":165910,"depth":25,"text":165911},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162906,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165957,"title":165958,"body":165959,"description":27,"extension":28,"meta":168131,"navigation":30,"path":168132,"seo":168133,"stem":168134,"__hash__":168135},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165960,"toc":168106},[165961,165964,165968,165971,166051,166054,166075,166078,166082,166085,166147,166150,166167,166171,166174,166219,166221,166229,166233,166236,166318,166321,166324,166349,166352,166375,166379,166382,166384,166446,166449,166451,166502,166506,166510,166516,166621,166625,166631,166702,166706,166709,166777,166780,166860,166864,166870,166906,166909,166912,167022,167028,167032,167035,167107,167110,167114,167118,167123,167185,167189,167194,167262,167266,167271,167387,167391,167394,167474,167477,167481,167484,167588,167590,167605,167608,167612,167750,167758,167762,167764,167775,167777,168035,168039,168071,168075,168103],[10,165962,165958],{"id":165963},"_7-函数进阶",[45,165965,165967],{"id":165966},"_71-多返回值","7.1 多返回值",[14,165969,165970],{},"Python 函数可以返回多个值，本质上返回的是元组。",[94,165972,165974],{"className":30368,"code":165973,"language":30370,"meta":24,"style":24},"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",[100,165975,165976,165985,165993,166001,166010,166017,166021,166025,166034,166040],{"__ignoreMap":24},[103,165977,165978,165980,165983],{"class":105,"line":106},[103,165979,31937],{"class":109},[103,165981,165982],{"class":1952}," get_info",[103,165984,31943],{"class":113},[103,165986,165987,165989,165991],{"class":105,"line":25},[103,165988,152352],{"class":113},[103,165990,159],{"class":109},[103,165992,149335],{"class":218},[103,165994,165995,165997,165999],{"class":105,"line":1168},[103,165996,152368],{"class":113},[103,165998,159],{"class":109},[103,166000,146533],{"class":162},[103,166002,166003,166005,166007],{"class":105,"line":1183},[103,166004,152383],{"class":113},[103,166006,159],{"class":109},[103,166008,166009],{"class":162}," 95\n",[103,166011,166012,166014],{"class":105,"line":1189},[103,166013,4079],{"class":109},[103,166015,166016],{"class":113}," name, age, score\n",[103,166018,166019],{"class":105,"line":1203},[103,166020,2389],{"emptyLinePlaceholder":30},[103,166022,166023],{"class":105,"line":1209},[103,166024,2389],{"emptyLinePlaceholder":30},[103,166026,166027,166029,166031],{"class":105,"line":1300},[103,166028,161288],{"class":113},[103,166030,159],{"class":109},[103,166032,166033],{"class":113}," get_info()\n",[103,166035,166036,166038],{"class":105,"line":1306},[103,166037,30405],{"class":162},[103,166039,76575],{"class":113},[103,166041,166042,166044,166046,166048],{"class":105,"line":1318},[103,166043,30405],{"class":162},[103,166045,114],{"class":113},[103,166047,103097],{"class":162},[103,166049,166050],{"class":113},"(result))\n",[14,166052,166053],{},"可以直接解包：",[94,166055,166057],{"className":30368,"code":166056,"language":30370,"meta":24,"style":24},"name, age, score = get_info()\nprint(name, age, score)\n",[100,166058,166059,166068],{"__ignoreMap":24},[103,166060,166061,166064,166066],{"class":105,"line":106},[103,166062,166063],{"class":113},"name, age, score ",[103,166065,159],{"class":109},[103,166067,166033],{"class":113},[103,166069,166070,166072],{"class":105,"line":25},[103,166071,30405],{"class":162},[103,166073,166074],{"class":113},"(name, age, score)\n",[14,166076,166077],{},"返回多个值适合函数需要同时给出多个结果时使用。",[45,166079,166081],{"id":166080},"_72-位置参数","7.2 位置参数",[14,166083,166084],{},"位置参数按顺序传递。",[94,166086,166088],{"className":30368,"code":166087,"language":30370,"meta":24,"style":24},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[100,166089,166090,166098,166126,166130,166134],{"__ignoreMap":24},[103,166091,166092,166094,166096],{"class":105,"line":106},[103,166093,31937],{"class":109},[103,166095,149354],{"class":1952},[103,166097,149357],{"class":113},[103,166099,166100,166102,166104,166106,166108,166110,166112,166114,166116,166118,166120,166122,166124],{"class":105,"line":25},[103,166101,31289],{"class":162},[103,166103,114],{"class":113},[103,166105,166],{"class":109},[103,166107,149368],{"class":218},[103,166109,1009],{"class":162},[103,166111,79800],{"class":113},[103,166113,1059],{"class":162},[103,166115,149377],{"class":218},[103,166117,1009],{"class":162},[103,166119,70211],{"class":113},[103,166121,1059],{"class":162},[103,166123,149386],{"class":218},[103,166125,120],{"class":113},[103,166127,166128],{"class":105,"line":1168},[103,166129,2389],{"emptyLinePlaceholder":30},[103,166131,166132],{"class":105,"line":1183},[103,166133,2389],{"emptyLinePlaceholder":30},[103,166135,166136,166139,166141,166143,166145],{"class":105,"line":1189},[103,166137,166138],{"class":113},"introduce(",[103,166140,149870],{"class":218},[103,166142,12425],{"class":113},[103,166144,763],{"class":162},[103,166146,120],{"class":113},[14,166148,166149],{},"顺序错了就会得到错误含义：",[94,166151,166153],{"className":30368,"code":166152,"language":30370,"meta":24,"style":24},"introduce(18, \"小明\")\n",[100,166154,166155],{"__ignoreMap":24},[103,166156,166157,166159,166161,166163,166165],{"class":105,"line":106},[103,166158,166138],{"class":113},[103,166160,763],{"class":162},[103,166162,12425],{"class":113},[103,166164,149870],{"class":218},[103,166166,120],{"class":113},[45,166168,166170],{"id":166169},"_73-关键字参数","7.3 关键字参数",[14,166172,166173],{},"关键字参数按参数名传递。",[94,166175,166177],{"className":30368,"code":166176,"language":30370,"meta":24,"style":24},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[100,166178,166179,166199],{"__ignoreMap":24},[103,166180,166181,166183,166185,166187,166189,166191,166193,166195,166197],{"class":105,"line":106},[103,166182,166138],{"class":113},[103,166184,79800],{"class":5206},[103,166186,159],{"class":109},[103,166188,149870],{"class":218},[103,166190,12425],{"class":113},[103,166192,70211],{"class":5206},[103,166194,159],{"class":109},[103,166196,763],{"class":162},[103,166198,120],{"class":113},[103,166200,166201,166203,166205,166207,166209,166211,166213,166215,166217],{"class":105,"line":25},[103,166202,166138],{"class":113},[103,166204,70211],{"class":5206},[103,166206,159],{"class":109},[103,166208,763],{"class":162},[103,166210,12425],{"class":113},[103,166212,79800],{"class":5206},[103,166214,159],{"class":109},[103,166216,149870],{"class":218},[103,166218,120],{"class":113},[14,166220,117924],{},[57,166222,166223,166226],{},[60,166224,166225],{},"顺序不容易错。",[60,166227,166228],{},"调用时可读性更强。",[45,166230,166232],{"id":166231},"_74-默认参数","7.4 默认参数",[14,166234,166235],{},"默认参数给参数设置默认值。",[94,166237,166239],{"className":30368,"code":166238,"language":30370,"meta":24,"style":24},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[100,166240,166241,166257,166287,166291,166295,166305],{"__ignoreMap":24},[103,166242,166243,166245,166247,166250,166252,166255],{"class":105,"line":106},[103,166244,31937],{"class":109},[103,166246,122075],{"class":1952},[103,166248,166249],{"class":113},"(host, port",[103,166251,159],{"class":109},[103,166253,166254],{"class":162},"3306",[103,166256,30776],{"class":113},[103,166258,166259,166261,166263,166265,166268,166270,166272,166274,166276,166278,166281,166283,166285],{"class":105,"line":25},[103,166260,31289],{"class":162},[103,166262,114],{"class":113},[103,166264,166],{"class":109},[103,166266,166267],{"class":218},"\"连接",[103,166269,1009],{"class":162},[103,166271,27385],{"class":113},[103,166273,1059],{"class":162},[103,166275,972],{"class":218},[103,166277,1009],{"class":162},[103,166279,166280],{"class":113},"port",[103,166282,1059],{"class":162},[103,166284,364],{"class":218},[103,166286,120],{"class":113},[103,166288,166289],{"class":105,"line":1168},[103,166290,2389],{"emptyLinePlaceholder":30},[103,166292,166293],{"class":105,"line":1183},[103,166294,2389],{"emptyLinePlaceholder":30},[103,166296,166297,166300,166303],{"class":105,"line":1189},[103,166298,166299],{"class":113},"connect(",[103,166301,166302],{"class":218},"\"localhost\"",[103,166304,120],{"class":113},[103,166306,166307,166309,166311,166313,166316],{"class":105,"line":1203},[103,166308,166299],{"class":113},[103,166310,166302],{"class":218},[103,166312,12425],{"class":113},[103,166314,166315],{"class":162},"6379",[103,166317,120],{"class":113},[14,166319,166320],{},"注意：默认参数必须放在非默认参数后面。",[14,166322,166323],{},"错误：",[94,166325,166327],{"className":30368,"code":166326,"language":30370,"meta":24,"style":24},"def connect(port=3306, host):\n    pass\n",[100,166328,166329,166345],{"__ignoreMap":24},[103,166330,166331,166333,166335,166338,166340,166342],{"class":105,"line":106},[103,166332,31937],{"class":109},[103,166334,122075],{"class":1952},[103,166336,166337],{"class":113},"(port",[103,166339,159],{"class":109},[103,166341,166254],{"class":162},[103,166343,166344],{"class":113},", host):\n",[103,166346,166347],{"class":105,"line":25},[103,166348,149519],{"class":109},[14,166350,166351],{},"正确：",[94,166353,166355],{"className":30368,"code":166354,"language":30370,"meta":24,"style":24},"def connect(host, port=3306):\n    pass\n",[100,166356,166357,166371],{"__ignoreMap":24},[103,166358,166359,166361,166363,166365,166367,166369],{"class":105,"line":106},[103,166360,31937],{"class":109},[103,166362,122075],{"class":1952},[103,166364,166249],{"class":113},[103,166366,159],{"class":109},[103,166368,166254],{"class":162},[103,166370,30776],{"class":113},[103,166372,166373],{"class":105,"line":25},[103,166374,149519],{"class":109},[45,166376,166378],{"id":166377},"_75-默认参数的坑","7.5 默认参数的坑",[14,166380,166381],{},"不要使用可变对象作为默认参数。",[14,166383,157605],{},[94,166385,166387],{"className":30368,"code":166386,"language":30370,"meta":24,"style":24},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[100,166388,166389,166404,166409,166416,166420,166424,166435],{"__ignoreMap":24},[103,166390,166391,166393,166396,166399,166401],{"class":105,"line":106},[103,166392,31937],{"class":109},[103,166394,166395],{"class":1952}," add_item",[103,166397,166398],{"class":113},"(item, items",[103,166400,159],{"class":109},[103,166402,166403],{"class":113},"[]):\n",[103,166405,166406],{"class":105,"line":25},[103,166407,166408],{"class":113},"    items.append(item)\n",[103,166410,166411,166413],{"class":105,"line":1168},[103,166412,4079],{"class":109},[103,166414,166415],{"class":113}," items\n",[103,166417,166418],{"class":105,"line":1183},[103,166419,2389],{"emptyLinePlaceholder":30},[103,166421,166422],{"class":105,"line":1189},[103,166423,2389],{"emptyLinePlaceholder":30},[103,166425,166426,166428,166431,166433],{"class":105,"line":1203},[103,166427,30405],{"class":162},[103,166429,166430],{"class":113},"(add_item(",[103,166432,165307],{"class":218},[103,166434,30487],{"class":113},[103,166436,166437,166439,166441,166444],{"class":105,"line":1209},[103,166438,30405],{"class":162},[103,166440,166430],{"class":113},[103,166442,166443],{"class":218},"\"b\"",[103,166445,30487],{"class":113},[14,166447,166448],{},"第二次调用会复用第一次的列表。",[14,166450,155870],{},[94,166452,166454],{"className":30368,"code":166453,"language":30370,"meta":24,"style":24},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[100,166455,166456,166470,166483,166492,166496],{"__ignoreMap":24},[103,166457,166458,166460,166462,166464,166466,166468],{"class":105,"line":106},[103,166459,31937],{"class":109},[103,166461,166395],{"class":1952},[103,166463,166398],{"class":113},[103,166465,159],{"class":109},[103,166467,95676],{"class":162},[103,166469,30776],{"class":113},[103,166471,166472,166474,166477,166479,166481],{"class":105,"line":25},[103,166473,3090],{"class":109},[103,166475,166476],{"class":113}," items ",[103,166478,38917],{"class":109},[103,166480,38923],{"class":162},[103,166482,3728],{"class":113},[103,166484,166485,166488,166490],{"class":105,"line":1168},[103,166486,166487],{"class":113},"        items ",[103,166489,159],{"class":109},[103,166491,51828],{"class":113},[103,166493,166494],{"class":105,"line":1183},[103,166495,166408],{"class":113},[103,166497,166498,166500],{"class":105,"line":1189},[103,166499,4079],{"class":109},[103,166501,166415],{"class":113},[45,166503,166505],{"id":166504},"_76-不定长参数","7.6 不定长参数",[74,166507,166509],{"id":166508},"_761-args","7.6.1 *args",[14,166511,166512,166515],{},[100,166513,166514],{},"*args"," 接收任意数量的位置参数，得到元组。",[94,166517,166519],{"className":30368,"code":166518,"language":30370,"meta":24,"style":24},"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",[100,166520,166521,166534,166542,166553,166562,166568,166572,166576,166595],{"__ignoreMap":24},[103,166522,166523,166525,166527,166529,166531],{"class":105,"line":106},[103,166524,31937],{"class":109},[103,166526,5199],{"class":1952},[103,166528,114],{"class":113},[103,166530,568],{"class":109},[103,166532,166533],{"class":113},"args):\n",[103,166535,166536,166538,166540],{"class":105,"line":25},[103,166537,159289],{"class":113},[103,166539,159],{"class":109},[103,166541,47323],{"class":162},[103,166543,166544,166546,166548,166550],{"class":105,"line":1168},[103,166545,3190],{"class":109},[103,166547,156162],{"class":113},[103,166549,26033],{"class":109},[103,166551,166552],{"class":113}," args:\n",[103,166554,166555,166557,166559],{"class":105,"line":1183},[103,166556,159964],{"class":113},[103,166558,9467],{"class":109},[103,166560,166561],{"class":113}," num\n",[103,166563,166564,166566],{"class":105,"line":1189},[103,166565,4079],{"class":109},[103,166567,162269],{"class":113},[103,166569,166570],{"class":105,"line":1203},[103,166571,2389],{"emptyLinePlaceholder":30},[103,166573,166574],{"class":105,"line":1209},[103,166575,2389],{"emptyLinePlaceholder":30},[103,166577,166578,166580,166583,166585,166587,166589,166591,166593],{"class":105,"line":1300},[103,166579,30405],{"class":162},[103,166581,166582],{"class":113},"(add(",[103,166584,331],{"class":162},[103,166586,12425],{"class":113},[103,166588,191],{"class":162},[103,166590,12425],{"class":113},[103,166592,185],{"class":162},[103,166594,30487],{"class":113},[103,166596,166597,166599,166601,166603,166605,166607,166609,166611,166613,166615,166617,166619],{"class":105,"line":1306},[103,166598,30405],{"class":162},[103,166600,166582],{"class":113},[103,166602,331],{"class":162},[103,166604,12425],{"class":113},[103,166606,191],{"class":162},[103,166608,12425],{"class":113},[103,166610,185],{"class":162},[103,166612,12425],{"class":113},[103,166614,406],{"class":162},[103,166616,12425],{"class":113},[103,166618,432],{"class":162},[103,166620,30487],{"class":113},[74,166622,166624],{"id":166623},"_762-kwargs","7.6.2 **kwargs",[14,166626,166627,166630],{},[100,166628,166629],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[94,166632,166634],{"className":30368,"code":166633,"language":30370,"meta":24,"style":24},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[100,166635,166636,166649,166660,166666,166670,166674],{"__ignoreMap":24},[103,166637,166638,166640,166642,166644,166646],{"class":105,"line":106},[103,166639,31937],{"class":109},[103,166641,161927],{"class":1952},[103,166643,114],{"class":113},[103,166645,10651],{"class":109},[103,166647,166648],{"class":113},"kwargs):\n",[103,166650,166651,166653,166655,166657],{"class":105,"line":25},[103,166652,3190],{"class":109},[103,166654,164767],{"class":113},[103,166656,26033],{"class":109},[103,166658,166659],{"class":113}," kwargs.items():\n",[103,166661,166662,166664],{"class":105,"line":1168},[103,166663,32441],{"class":162},[103,166665,164779],{"class":113},[103,166667,166668],{"class":105,"line":1183},[103,166669,2389],{"emptyLinePlaceholder":30},[103,166671,166672],{"class":105,"line":1189},[103,166673,2389],{"emptyLinePlaceholder":30},[103,166675,166676,166678,166680,166682,166684,166686,166688,166690,166692,166694,166696,166698,166700],{"class":105,"line":1203},[103,166677,161992],{"class":113},[103,166679,79800],{"class":5206},[103,166681,159],{"class":109},[103,166683,149870],{"class":218},[103,166685,12425],{"class":113},[103,166687,70211],{"class":5206},[103,166689,159],{"class":109},[103,166691,763],{"class":162},[103,166693,12425],{"class":113},[103,166695,70262],{"class":5206},[103,166697,159],{"class":109},[103,166699,69259],{"class":218},[103,166701,120],{"class":113},[45,166703,166705],{"id":166704},"_77-参数解包","7.7 参数解包",[14,166707,166708],{},"列表或元组解包为位置参数：",[94,166710,166712],{"className":30368,"code":166711,"language":30370,"meta":24,"style":24},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[100,166713,166714,166723,166738,166742,166746,166766],{"__ignoreMap":24},[103,166715,166716,166718,166720],{"class":105,"line":106},[103,166717,31937],{"class":109},[103,166719,5199],{"class":1952},[103,166721,166722],{"class":113},"(a, b, c):\n",[103,166724,166725,166727,166729,166731,166733,166735],{"class":105,"line":25},[103,166726,4079],{"class":109},[103,166728,10859],{"class":113},[103,166730,594],{"class":109},[103,166732,10872],{"class":113},[103,166734,594],{"class":109},[103,166736,166737],{"class":113}," c\n",[103,166739,166740],{"class":105,"line":1168},[103,166741,2389],{"emptyLinePlaceholder":30},[103,166743,166744],{"class":105,"line":1183},[103,166745,2389],{"emptyLinePlaceholder":30},[103,166747,166748,166750,166752,166754,166756,166758,166760,166762,166764],{"class":105,"line":1189},[103,166749,164082],{"class":113},[103,166751,159],{"class":109},[103,166753,52216],{"class":113},[103,166755,331],{"class":162},[103,166757,12425],{"class":113},[103,166759,191],{"class":162},[103,166761,12425],{"class":113},[103,166763,185],{"class":162},[103,166765,33236],{"class":113},[103,166767,166768,166770,166772,166774],{"class":105,"line":1203},[103,166769,30405],{"class":162},[103,166771,166582],{"class":113},[103,166773,568],{"class":109},[103,166775,166776],{"class":113},"nums))\n",[14,166778,166779],{},"字典解包为关键字参数：",[94,166781,166783],{"className":30368,"code":166782,"language":30370,"meta":24,"style":24},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[100,166784,166785,166793,166819,166823,166827,166851],{"__ignoreMap":24},[103,166786,166787,166789,166791],{"class":105,"line":106},[103,166788,31937],{"class":109},[103,166790,149354],{"class":1952},[103,166792,149357],{"class":113},[103,166794,166795,166797,166799,166801,166803,166805,166807,166809,166811,166813,166815,166817],{"class":105,"line":25},[103,166796,31289],{"class":162},[103,166798,114],{"class":113},[103,166800,166],{"class":109},[103,166802,364],{"class":218},[103,166804,1009],{"class":162},[103,166806,79800],{"class":113},[103,166808,1059],{"class":162},[103,166810,4437],{"class":162},[103,166812,70211],{"class":113},[103,166814,1059],{"class":162},[103,166816,364],{"class":218},[103,166818,120],{"class":113},[103,166820,166821],{"class":105,"line":1168},[103,166822,2389],{"emptyLinePlaceholder":30},[103,166824,166825],{"class":105,"line":1183},[103,166826,2389],{"emptyLinePlaceholder":30},[103,166828,166829,166831,166833,166835,166837,166839,166841,166843,166845,166847,166849],{"class":105,"line":1189},[103,166830,116304],{"class":113},[103,166832,159],{"class":109},[103,166834,4437],{"class":113},[103,166836,62669],{"class":218},[103,166838,51427],{"class":113},[103,166840,149870],{"class":218},[103,166842,12425],{"class":113},[103,166844,69114],{"class":218},[103,166846,51427],{"class":113},[103,166848,763],{"class":162},[103,166850,1554],{"class":113},[103,166852,166853,166855,166857],{"class":105,"line":1203},[103,166854,166138],{"class":113},[103,166856,10651],{"class":109},[103,166858,166859],{"class":113},"info)\n",[45,166861,166863],{"id":166862},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166865,166866,166869],{},[100,166867,166868],{},"lambda"," 用于定义简单匿名函数。",[94,166871,166873],{"className":30368,"code":166872,"language":30370,"meta":24,"style":24},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[100,166874,166875,166892],{"__ignoreMap":24},[103,166876,166877,166880,166882,166885,166888,166890],{"class":105,"line":106},[103,166878,166879],{"class":113},"add ",[103,166881,159],{"class":109},[103,166883,166884],{"class":109}," lambda",[103,166886,166887],{"class":113}," a, b: a ",[103,166889,594],{"class":109},[103,166891,151086],{"class":113},[103,166893,166894,166896,166898,166900,166902,166904],{"class":105,"line":25},[103,166895,30405],{"class":162},[103,166897,166582],{"class":113},[103,166899,331],{"class":162},[103,166901,12425],{"class":113},[103,166903,191],{"class":162},[103,166905,30487],{"class":113},[14,166907,166908],{},"常和排序、过滤等函数一起使用。",[14,166910,166911],{},"按分数排序：",[94,166913,166915],{"className":30368,"code":166914,"language":30370,"meta":24,"style":24},"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",[100,166916,166917,166925,166945,166965,166985,166989,166993,167016],{"__ignoreMap":24},[103,166918,166919,166921,166923],{"class":105,"line":106},[103,166920,159698],{"class":113},[103,166922,159],{"class":109},[103,166924,55437],{"class":113},[103,166926,166927,166929,166931,166933,166935,166937,166939,166941,166943],{"class":105,"line":25},[103,166928,148367],{"class":113},[103,166930,62669],{"class":218},[103,166932,51427],{"class":113},[103,166934,149870],{"class":218},[103,166936,12425],{"class":113},[103,166938,151454],{"class":218},[103,166940,51427],{"class":113},[103,166942,1102],{"class":162},[103,166944,4919],{"class":113},[103,166946,166947,166949,166951,166953,166955,166957,166959,166961,166963],{"class":105,"line":1168},[103,166948,148367],{"class":113},[103,166950,62669],{"class":218},[103,166952,51427],{"class":113},[103,166954,150918],{"class":218},[103,166956,12425],{"class":113},[103,166958,151454],{"class":218},[103,166960,51427],{"class":113},[103,166962,924],{"class":162},[103,166964,4919],{"class":113},[103,166966,166967,166969,166971,166973,166975,166977,166979,166981,166983],{"class":105,"line":1183},[103,166968,148367],{"class":113},[103,166970,62669],{"class":218},[103,166972,51427],{"class":113},[103,166974,159713],{"class":218},[103,166976,12425],{"class":113},[103,166978,151454],{"class":218},[103,166980,51427],{"class":113},[103,166982,519],{"class":162},[103,166984,4919],{"class":113},[103,166986,166987],{"class":105,"line":1189},[103,166988,33236],{"class":113},[103,166990,166991],{"class":105,"line":1203},[103,166992,2389],{"emptyLinePlaceholder":30},[103,166994,166995,166998,167000,167002,167004,167006,167008,167010,167012,167014],{"class":105,"line":1209},[103,166996,166997],{"class":113},"students.sort(",[103,166999,153928],{"class":5206},[103,167001,153931],{"class":109},[103,167003,153934],{"class":113},[103,167005,151454],{"class":218},[103,167007,112192],{"class":113},[103,167009,163510],{"class":5206},[103,167011,159],{"class":109},[103,167013,31466],{"class":162},[103,167015,120],{"class":113},[103,167017,167018,167020],{"class":105,"line":1300},[103,167019,30405],{"class":162},[103,167021,164977],{"class":113},[14,167023,167024,167025,167027],{},"如果逻辑复杂，不要硬写 ",[100,167026,166868],{},"，定义普通函数更清晰。",[45,167029,167031],{"id":167030},"_79-函数作为参数","7.9 函数作为参数",[14,167033,167034],{},"函数可以作为参数传给另一个函数。",[94,167036,167038],{"className":30368,"code":167037,"language":30370,"meta":24,"style":24},"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",[100,167039,167040,167048,167058,167062,167066,167076,167083,167087,167091],{"__ignoreMap":24},[103,167041,167042,167044,167046],{"class":105,"line":106},[103,167043,31937],{"class":109},[103,167045,5199],{"class":1952},[103,167047,151075],{"class":113},[103,167049,167050,167052,167054,167056],{"class":105,"line":25},[103,167051,4079],{"class":109},[103,167053,10859],{"class":113},[103,167055,594],{"class":109},[103,167057,151086],{"class":113},[103,167059,167060],{"class":105,"line":1168},[103,167061,2389],{"emptyLinePlaceholder":30},[103,167063,167064],{"class":105,"line":1183},[103,167065,2389],{"emptyLinePlaceholder":30},[103,167067,167068,167070,167073],{"class":105,"line":1189},[103,167069,31937],{"class":109},[103,167071,167072],{"class":1952}," calculate",[103,167074,167075],{"class":113},"(a, b, func):\n",[103,167077,167078,167080],{"class":105,"line":1203},[103,167079,4079],{"class":109},[103,167081,167082],{"class":113}," func(a, b)\n",[103,167084,167085],{"class":105,"line":1209},[103,167086,2389],{"emptyLinePlaceholder":30},[103,167088,167089],{"class":105,"line":1300},[103,167090,2389],{"emptyLinePlaceholder":30},[103,167092,167093,167095,167098,167100,167102,167104],{"class":105,"line":1306},[103,167094,30405],{"class":162},[103,167096,167097],{"class":113},"(calculate(",[103,167099,559],{"class":162},[103,167101,12425],{"class":113},[103,167103,813],{"class":162},[103,167105,167106],{"class":113},", add))\n",[14,167108,167109],{},"这种思想在排序、回调、框架中经常出现。",[45,167111,167113],{"id":167112},"_710-mapfiltersorted","7.10 map、filter、sorted",[74,167115,167117],{"id":167116},"_7101-map","7.10.1 map",[14,167119,167120,167122],{},[100,167121,74034],{}," 对每个元素执行函数。",[94,167124,167126],{"className":30368,"code":167125,"language":30370,"meta":24,"style":24},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[100,167127,167128,167152,167175],{"__ignoreMap":24},[103,167129,167130,167132,167134,167136,167138,167140,167142,167144,167146,167148,167150],{"class":105,"line":106},[103,167131,164082],{"class":113},[103,167133,159],{"class":109},[103,167135,52216],{"class":113},[103,167137,331],{"class":162},[103,167139,12425],{"class":113},[103,167141,191],{"class":162},[103,167143,12425],{"class":113},[103,167145,185],{"class":162},[103,167147,12425],{"class":113},[103,167149,406],{"class":162},[103,167151,33236],{"class":113},[103,167153,167154,167156,167158,167161,167163,167165,167168,167170,167172],{"class":105,"line":25},[103,167155,161288],{"class":113},[103,167157,159],{"class":109},[103,167159,167160],{"class":162}," map",[103,167162,114],{"class":113},[103,167164,166868],{"class":109},[103,167166,167167],{"class":113}," x: x ",[103,167169,568],{"class":109},[103,167171,14745],{"class":162},[103,167173,167174],{"class":113},", nums)\n",[103,167176,167177,167179,167181,167183],{"class":105,"line":1168},[103,167178,30405],{"class":162},[103,167180,114],{"class":113},[103,167182,154052],{"class":162},[103,167184,166050],{"class":113},[74,167186,167188],{"id":167187},"_7102-filter","7.10.2 filter",[14,167190,167191,167193],{},[100,167192,80041],{}," 保留满足条件的元素。",[94,167195,167197],{"className":30368,"code":167196,"language":30370,"meta":24,"style":24},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[100,167198,167199,167227,167252],{"__ignoreMap":24},[103,167200,167201,167203,167205,167207,167209,167211,167213,167215,167217,167219,167221,167223,167225],{"class":105,"line":106},[103,167202,164082],{"class":113},[103,167204,159],{"class":109},[103,167206,52216],{"class":113},[103,167208,331],{"class":162},[103,167210,12425],{"class":113},[103,167212,191],{"class":162},[103,167214,12425],{"class":113},[103,167216,185],{"class":162},[103,167218,12425],{"class":113},[103,167220,406],{"class":162},[103,167222,12425],{"class":113},[103,167224,432],{"class":162},[103,167226,33236],{"class":113},[103,167228,167229,167231,167233,167236,167238,167240,167242,167244,167246,167248,167250],{"class":105,"line":25},[103,167230,161288],{"class":113},[103,167232,159],{"class":109},[103,167234,167235],{"class":162}," filter",[103,167237,114],{"class":113},[103,167239,166868],{"class":109},[103,167241,167167],{"class":113},[103,167243,441],{"class":109},[103,167245,14745],{"class":162},[103,167247,101549],{"class":109},[103,167249,4082],{"class":162},[103,167251,167174],{"class":113},[103,167253,167254,167256,167258,167260],{"class":105,"line":1168},[103,167255,30405],{"class":162},[103,167257,114],{"class":113},[103,167259,154052],{"class":162},[103,167261,166050],{"class":113},[74,167263,167265],{"id":167264},"_7103-sorted","7.10.3 sorted",[14,167267,167268,167270],{},[100,167269,165218],{}," 返回排序后的新列表。",[94,167272,167274],{"className":30368,"code":167273,"language":30370,"meta":24,"style":24},"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",[100,167275,167276,167284,167304,167324,167344,167348,167352,167381],{"__ignoreMap":24},[103,167277,167278,167280,167282],{"class":105,"line":106},[103,167279,159698],{"class":113},[103,167281,159],{"class":109},[103,167283,55437],{"class":113},[103,167285,167286,167288,167290,167292,167294,167296,167298,167300,167302],{"class":105,"line":25},[103,167287,148367],{"class":113},[103,167289,62669],{"class":218},[103,167291,51427],{"class":113},[103,167293,149870],{"class":218},[103,167295,12425],{"class":113},[103,167297,151454],{"class":218},[103,167299,51427],{"class":113},[103,167301,1102],{"class":162},[103,167303,4919],{"class":113},[103,167305,167306,167308,167310,167312,167314,167316,167318,167320,167322],{"class":105,"line":1168},[103,167307,148367],{"class":113},[103,167309,62669],{"class":218},[103,167311,51427],{"class":113},[103,167313,150918],{"class":218},[103,167315,12425],{"class":113},[103,167317,151454],{"class":218},[103,167319,51427],{"class":113},[103,167321,924],{"class":162},[103,167323,4919],{"class":113},[103,167325,167326,167328,167330,167332,167334,167336,167338,167340,167342],{"class":105,"line":1183},[103,167327,148367],{"class":113},[103,167329,62669],{"class":218},[103,167331,51427],{"class":113},[103,167333,159713],{"class":218},[103,167335,12425],{"class":113},[103,167337,151454],{"class":218},[103,167339,51427],{"class":113},[103,167341,519],{"class":162},[103,167343,4919],{"class":113},[103,167345,167346],{"class":105,"line":1189},[103,167347,33236],{"class":113},[103,167349,167350],{"class":105,"line":1203},[103,167351,2389],{"emptyLinePlaceholder":30},[103,167353,167354,167356,167358,167360,167363,167365,167367,167369,167371,167373,167375,167377,167379],{"class":105,"line":1209},[103,167355,161288],{"class":113},[103,167357,159],{"class":109},[103,167359,163586],{"class":162},[103,167361,167362],{"class":113},"(students, ",[103,167364,153928],{"class":5206},[103,167366,153931],{"class":109},[103,167368,153934],{"class":113},[103,167370,151454],{"class":218},[103,167372,112192],{"class":113},[103,167374,163510],{"class":5206},[103,167376,159],{"class":109},[103,167378,31466],{"class":162},[103,167380,120],{"class":113},[103,167382,167383,167385],{"class":105,"line":1300},[103,167384,30405],{"class":162},[103,167386,76575],{"class":113},[45,167388,167390],{"id":167389},"_711-闭包入门","7.11 闭包入门",[14,167392,167393],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[94,167395,167397],{"className":30368,"code":167396,"language":30370,"meta":24,"style":24},"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",[100,167398,167399,167409,167419,167430,167434,167441,167445,167449,167463],{"__ignoreMap":24},[103,167400,167401,167403,167406],{"class":105,"line":106},[103,167402,31937],{"class":109},[103,167404,167405],{"class":1952}," outer",[103,167407,167408],{"class":113},"(base):\n",[103,167410,167411,167413,167416],{"class":105,"line":25},[103,167412,30791],{"class":109},[103,167414,167415],{"class":1952}," inner",[103,167417,167418],{"class":113},"(num):\n",[103,167420,167421,167423,167426,167428],{"class":105,"line":1168},[103,167422,14742],{"class":109},[103,167424,167425],{"class":113}," base ",[103,167427,594],{"class":109},[103,167429,166561],{"class":113},[103,167431,167432],{"class":105,"line":1183},[103,167433,2389],{"emptyLinePlaceholder":30},[103,167435,167436,167438],{"class":105,"line":1189},[103,167437,4079],{"class":109},[103,167439,167440],{"class":113}," inner\n",[103,167442,167443],{"class":105,"line":1203},[103,167444,2389],{"emptyLinePlaceholder":30},[103,167446,167447],{"class":105,"line":1209},[103,167448,2389],{"emptyLinePlaceholder":30},[103,167450,167451,167454,167456,167459,167461],{"class":105,"line":1300},[103,167452,167453],{"class":113},"add_10 ",[103,167455,159],{"class":109},[103,167457,167458],{"class":113}," outer(",[103,167460,559],{"class":162},[103,167462,120],{"class":113},[103,167464,167465,167467,167470,167472],{"class":105,"line":1306},[103,167466,30405],{"class":162},[103,167468,167469],{"class":113},"(add_10(",[103,167471,432],{"class":162},[103,167473,30487],{"class":113},[14,167475,167476],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[45,167478,167480],{"id":167479},"_712-装饰器入门","7.12 装饰器入门",[14,167482,167483],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[94,167485,167487],{"className":30368,"code":167486,"language":30370,"meta":24,"style":24},"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",[100,167488,167489,167498,167507,167518,167523,167534,167538,167545,167549,167553,167558,167566,167576,167580,167584],{"__ignoreMap":24},[103,167490,167491,167493,167495],{"class":105,"line":106},[103,167492,31937],{"class":109},[103,167494,87181],{"class":1952},[103,167496,167497],{"class":113},"(func):\n",[103,167499,167500,167502,167505],{"class":105,"line":25},[103,167501,30791],{"class":109},[103,167503,167504],{"class":1952}," wrapper",[103,167506,31943],{"class":113},[103,167508,167509,167511,167513,167516],{"class":105,"line":1168},[103,167510,32441],{"class":162},[103,167512,114],{"class":113},[103,167514,167515],{"class":218},"\"函数开始执行\"",[103,167517,120],{"class":113},[103,167519,167520],{"class":105,"line":1183},[103,167521,167522],{"class":113},"        func()\n",[103,167524,167525,167527,167529,167532],{"class":105,"line":1189},[103,167526,32441],{"class":162},[103,167528,114],{"class":113},[103,167530,167531],{"class":218},"\"函数执行结束\"",[103,167533,120],{"class":113},[103,167535,167536],{"class":105,"line":1203},[103,167537,2389],{"emptyLinePlaceholder":30},[103,167539,167540,167542],{"class":105,"line":1209},[103,167541,4079],{"class":109},[103,167543,167544],{"class":113}," wrapper\n",[103,167546,167547],{"class":105,"line":1300},[103,167548,2389],{"emptyLinePlaceholder":30},[103,167550,167551],{"class":105,"line":1306},[103,167552,2389],{"emptyLinePlaceholder":30},[103,167554,167555],{"class":105,"line":1318},[103,167556,167557],{"class":1952},"@log\n",[103,167559,167560,167562,167564],{"class":105,"line":1601},[103,167561,31937],{"class":109},[103,167563,160978],{"class":1952},[103,167565,31943],{"class":113},[103,167567,167568,167570,167572,167574],{"class":105,"line":1606},[103,167569,31289],{"class":162},[103,167571,114],{"class":113},[103,167573,5834],{"class":218},[103,167575,120],{"class":113},[103,167577,167578],{"class":105,"line":1612},[103,167579,2389],{"emptyLinePlaceholder":30},[103,167581,167582],{"class":105,"line":1617},[103,167583,2389],{"emptyLinePlaceholder":30},[103,167585,167586],{"class":105,"line":1631},[103,167587,161013],{"class":113},[14,167589,158256],{},[94,167591,167593],{"className":30368,"code":167592,"language":30370,"meta":24,"style":24},"say_hello = log(say_hello)\n",[100,167594,167595],{"__ignoreMap":24},[103,167596,167597,167600,167602],{"class":105,"line":106},[103,167598,167599],{"class":113},"say_hello ",[103,167601,159],{"class":109},[103,167603,167604],{"class":113}," log(say_hello)\n",[14,167606,167607],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[45,167609,167611],{"id":167610},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[94,167613,167615],{"className":30368,"code":167614,"language":30370,"meta":24,"style":24},"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",[100,167616,167617,167625,167642,167652,167671,167681,167688,167692,167698,167702,167706,167710,167718,167728,167732,167736],{"__ignoreMap":24},[103,167618,167619,167621,167623],{"class":105,"line":106},[103,167620,31937],{"class":109},[103,167622,87181],{"class":1952},[103,167624,167497],{"class":113},[103,167626,167627,167629,167631,167633,167635,167638,167640],{"class":105,"line":25},[103,167628,30791],{"class":109},[103,167630,167504],{"class":1952},[103,167632,114],{"class":113},[103,167634,568],{"class":109},[103,167636,167637],{"class":113},"args, ",[103,167639,10651],{"class":109},[103,167641,166648],{"class":113},[103,167643,167644,167646,167648,167650],{"class":105,"line":1168},[103,167645,32441],{"class":162},[103,167647,114],{"class":113},[103,167649,167515],{"class":218},[103,167651,120],{"class":113},[103,167653,167654,167657,167659,167662,167664,167666,167668],{"class":105,"line":1183},[103,167655,167656],{"class":113},"        result ",[103,167658,159],{"class":109},[103,167660,167661],{"class":113}," func(",[103,167663,568],{"class":109},[103,167665,167637],{"class":113},[103,167667,10651],{"class":109},[103,167669,167670],{"class":113},"kwargs)\n",[103,167672,167673,167675,167677,167679],{"class":105,"line":1189},[103,167674,32441],{"class":162},[103,167676,114],{"class":113},[103,167678,167531],{"class":218},[103,167680,120],{"class":113},[103,167682,167683,167685],{"class":105,"line":1203},[103,167684,14742],{"class":109},[103,167686,167687],{"class":113}," result\n",[103,167689,167690],{"class":105,"line":1209},[103,167691,2389],{"emptyLinePlaceholder":30},[103,167693,167694,167696],{"class":105,"line":1300},[103,167695,4079],{"class":109},[103,167697,167544],{"class":113},[103,167699,167700],{"class":105,"line":1306},[103,167701,2389],{"emptyLinePlaceholder":30},[103,167703,167704],{"class":105,"line":1318},[103,167705,2389],{"emptyLinePlaceholder":30},[103,167707,167708],{"class":105,"line":1601},[103,167709,167557],{"class":1952},[103,167711,167712,167714,167716],{"class":105,"line":1606},[103,167713,31937],{"class":109},[103,167715,5199],{"class":1952},[103,167717,151075],{"class":113},[103,167719,167720,167722,167724,167726],{"class":105,"line":1612},[103,167721,4079],{"class":109},[103,167723,10859],{"class":113},[103,167725,594],{"class":109},[103,167727,151086],{"class":113},[103,167729,167730],{"class":105,"line":1617},[103,167731,2389],{"emptyLinePlaceholder":30},[103,167733,167734],{"class":105,"line":1631},[103,167735,2389],{"emptyLinePlaceholder":30},[103,167737,167738,167740,167742,167744,167746,167748],{"class":105,"line":1636},[103,167739,30405],{"class":162},[103,167741,166582],{"class":113},[103,167743,559],{"class":162},[103,167745,12425],{"class":113},[103,167747,813],{"class":162},[103,167749,30487],{"class":113},[14,167751,167752,167753,101008,167755,167757],{},"这个写法使用 ",[100,167754,166514],{},[100,167756,166629],{}," 接收原函数的所有参数。",[45,167759,167761],{"id":167760},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167763,123274],{},[57,167765,167766,167769,167772],{},[60,167767,167768],{},"给定一组学生数据。",[60,167770,167771],{},"封装函数，根据传入规则筛选学生。",[60,167773,167774],{},"筛选及格、优秀、未成年学生。",[14,167776,10025],{},[94,167778,167780],{"className":30368,"code":167779,"language":30370,"meta":24,"style":24},"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",[100,167781,167782,167790,167818,167846,167874,167878,167882,167886,167896,167904,167914,167921,167926,167932,167936,167940,167964,167987,168010,168014,168021,168028],{"__ignoreMap":24},[103,167783,167784,167786,167788],{"class":105,"line":106},[103,167785,159698],{"class":113},[103,167787,159],{"class":109},[103,167789,55437],{"class":113},[103,167791,167792,167794,167796,167798,167800,167802,167804,167806,167808,167810,167812,167814,167816],{"class":105,"line":25},[103,167793,148367],{"class":113},[103,167795,62669],{"class":218},[103,167797,51427],{"class":113},[103,167799,149870],{"class":218},[103,167801,12425],{"class":113},[103,167803,69114],{"class":218},[103,167805,51427],{"class":113},[103,167807,763],{"class":162},[103,167809,12425],{"class":113},[103,167811,151454],{"class":218},[103,167813,51427],{"class":113},[103,167815,1102],{"class":162},[103,167817,4919],{"class":113},[103,167819,167820,167822,167824,167826,167828,167830,167832,167834,167836,167838,167840,167842,167844],{"class":105,"line":1168},[103,167821,148367],{"class":113},[103,167823,62669],{"class":218},[103,167825,51427],{"class":113},[103,167827,150918],{"class":218},[103,167829,12425],{"class":113},[103,167831,69114],{"class":218},[103,167833,51427],{"class":113},[103,167835,738],{"class":162},[103,167837,12425],{"class":113},[103,167839,151454],{"class":218},[103,167841,51427],{"class":113},[103,167843,924],{"class":162},[103,167845,4919],{"class":113},[103,167847,167848,167850,167852,167854,167856,167858,167860,167862,167864,167866,167868,167870,167872],{"class":105,"line":1183},[103,167849,148367],{"class":113},[103,167851,62669],{"class":218},[103,167853,51427],{"class":113},[103,167855,159713],{"class":218},[103,167857,12425],{"class":113},[103,167859,69114],{"class":218},[103,167861,51427],{"class":113},[103,167863,788],{"class":162},[103,167865,12425],{"class":113},[103,167867,151454],{"class":218},[103,167869,51427],{"class":113},[103,167871,995],{"class":162},[103,167873,4919],{"class":113},[103,167875,167876],{"class":105,"line":1189},[103,167877,33236],{"class":113},[103,167879,167880],{"class":105,"line":1203},[103,167881,2389],{"emptyLinePlaceholder":30},[103,167883,167884],{"class":105,"line":1209},[103,167885,2389],{"emptyLinePlaceholder":30},[103,167887,167888,167890,167893],{"class":105,"line":1300},[103,167889,31937],{"class":109},[103,167891,167892],{"class":1952}," filter_students",[103,167894,167895],{"class":113},"(students, condition):\n",[103,167897,167898,167900,167902],{"class":105,"line":1306},[103,167899,161205],{"class":113},[103,167901,159],{"class":109},[103,167903,51828],{"class":113},[103,167905,167906,167908,167910,167912],{"class":105,"line":1318},[103,167907,3190],{"class":109},[103,167909,152119],{"class":113},[103,167911,26033],{"class":109},[103,167913,152124],{"class":113},[103,167915,167916,167918],{"class":105,"line":1601},[103,167917,2486],{"class":109},[103,167919,167920],{"class":113}," condition(student):\n",[103,167922,167923],{"class":105,"line":1606},[103,167924,167925],{"class":113},"            result.append(student)\n",[103,167927,167928,167930],{"class":105,"line":1612},[103,167929,4079],{"class":109},[103,167931,167687],{"class":113},[103,167933,167934],{"class":105,"line":1617},[103,167935,2389],{"emptyLinePlaceholder":30},[103,167937,167938],{"class":105,"line":1631},[103,167939,2389],{"emptyLinePlaceholder":30},[103,167941,167942,167944,167946,167949,167951,167954,167956,167958,167960,167962],{"class":105,"line":1636},[103,167943,165683],{"class":113},[103,167945,159],{"class":109},[103,167947,167948],{"class":113}," filter_students(students, ",[103,167950,166868],{"class":109},[103,167952,167953],{"class":113}," s: s[",[103,167955,151454],{"class":218},[103,167957,4432],{"class":113},[103,167959,1699],{"class":109},[103,167961,157819],{"class":162},[103,167963,120],{"class":113},[103,167965,167966,167969,167971,167973,167975,167977,167979,167981,167983,167985],{"class":105,"line":1642},[103,167967,167968],{"class":113},"excellent ",[103,167970,159],{"class":109},[103,167972,167948],{"class":113},[103,167974,166868],{"class":109},[103,167976,167953],{"class":113},[103,167978,151454],{"class":218},[103,167980,4432],{"class":113},[103,167982,1699],{"class":109},[103,167984,157770],{"class":162},[103,167986,120],{"class":113},[103,167988,167989,167992,167994,167996,167998,168000,168002,168004,168006,168008],{"class":105,"line":1663},[103,167990,167991],{"class":113},"under_age ",[103,167993,159],{"class":109},[103,167995,167948],{"class":113},[103,167997,166868],{"class":109},[103,167999,167953],{"class":113},[103,168001,69114],{"class":218},[103,168003,4432],{"class":113},[103,168005,1023],{"class":109},[103,168007,156267],{"class":162},[103,168009,120],{"class":113},[103,168011,168012],{"class":105,"line":1668},[103,168013,2389],{"emptyLinePlaceholder":30},[103,168015,168016,168018],{"class":105,"line":1682},[103,168017,30405],{"class":162},[103,168019,168020],{"class":113},"(passed)\n",[103,168022,168023,168025],{"class":105,"line":1687},[103,168024,30405],{"class":162},[103,168026,168027],{"class":113},"(excellent)\n",[103,168029,168030,168032],{"class":105,"line":1716},[103,168031,30405],{"class":162},[103,168033,168034],{"class":113},"(under_age)\n",[45,168036,168038],{"id":168037},"_715-易错点","7.15 易错点",[57,168040,168041,168044,168052,168057,168068],{},[60,168042,168043],{},"默认参数不要写可变对象。",[60,168045,168046,168048,168049,168051],{},[100,168047,166514],{}," 是元组，",[100,168050,166629],{}," 是字典。",[60,168053,168054,168056],{},[100,168055,166868],{}," 只适合简单表达式。",[60,168058,168059,101008,168061,168063,168064,168067],{},[100,168060,74034],{},[100,168062,80041],{}," 的结果是迭代器，常用 ",[100,168065,168066],{},"list()"," 转换查看。",[60,168069,168070],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[45,168072,168074],{"id":168073},"_716-本章练习","7.16 本章练习",[57,168076,168077,168084,168090,168095,168100],{},[60,168078,168079,168080,168083],{},"写函数 ",[100,168081,168082],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[60,168085,168079,168086,168089],{},[100,168087,168088],{},"print_user(**kwargs)","，输出用户所有字段。",[60,168091,104356,168092,168094],{},[100,168093,166868],{}," 对学生列表按年龄排序。",[60,168096,104356,168097,168099],{},[100,168098,80041],{}," 找出成绩不及格的学生。",[60,168101,168102],{},"写一个装饰器，统计函数执行前后的提示信息。",[5116,168104,168105],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":24,"searchDepth":25,"depth":25,"links":168107},[168108,168109,168110,168111,168112,168113,168117,168118,168119,168120,168125,168126,168127,168128,168129,168130],{"id":165966,"depth":25,"text":165967},{"id":166080,"depth":25,"text":166081},{"id":166169,"depth":25,"text":166170},{"id":166231,"depth":25,"text":166232},{"id":166377,"depth":25,"text":166378},{"id":166504,"depth":25,"text":166505,"children":168114},[168115,168116],{"id":166508,"depth":1168,"text":166509},{"id":166623,"depth":1168,"text":166624},{"id":166704,"depth":25,"text":166705},{"id":166862,"depth":25,"text":166863},{"id":167030,"depth":25,"text":167031},{"id":167112,"depth":25,"text":167113,"children":168121},[168122,168123,168124],{"id":167116,"depth":1168,"text":167117},{"id":167187,"depth":1168,"text":167188},{"id":167264,"depth":1168,"text":167265},{"id":167389,"depth":25,"text":167390},{"id":167479,"depth":25,"text":167480},{"id":167610,"depth":25,"text":167611},{"id":167760,"depth":25,"text":167761},{"id":168037,"depth":25,"text":168038},{"id":168073,"depth":25,"text":168074},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165958,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168137,"title":168138,"body":168139,"description":27,"extension":28,"meta":170658,"navigation":30,"path":170659,"seo":170660,"stem":170661,"__hash__":170662},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168140,"toc":170633},[168141,168144,168148,168151,168154,168185,168189,168193,168196,168223,168227,168230,168281,168284,168299,168302,168337,168341,168343,168367,168370,168430,168434,168438,168441,168498,168501,168521,168525,168528,168591,168595,168598,168654,168661,168685,168689,168692,168755,168759,168764,168815,168818,168822,168827,168894,168897,168979,168983,168988,169039,169042,169046,169049,169052,169060,169063,169109,169112,169158,169162,169168,169212,169215,169261,169264,169304,169307,169368,169372,169375,169465,169468,169610,169613,169680,169684,169687,169690,169831,169834,169912,169915,170091,170095,170097,170108,170110,170309,170313,170557,170561,170595,170599,170630],[10,168142,168138],{"id":168143},"_8-文件操作",[45,168145,168147],{"id":168146},"_81-文件操作的意义","8.1 文件操作的意义",[14,168149,168150],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168152,168153],{},"常见文件类型：",[57,168155,168156,168162,168168,168174,168180],{},[60,168157,168158,168161],{},[100,168159,168160],{},".txt","：普通文本。",[60,168163,168164,168167],{},[100,168165,168166],{},".csv","：表格文本。",[60,168169,168170,168173],{},[100,168171,168172],{},".json","：结构化数据。",[60,168175,168176,168179],{},[100,168177,168178],{},".log","：日志文件。",[60,168181,168182,168184],{},[100,168183,146334],{},"：Python 源代码。",[45,168186,168188],{"id":168187},"_82-路径","8.2 路径",[74,168190,168192],{"id":168191},"_821-相对路径","8.2.1 相对路径",[14,168194,168195],{},"相对当前运行目录：",[94,168197,168199],{"className":30368,"code":168198,"language":30370,"meta":24,"style":24},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[100,168200,168201],{"__ignoreMap":24},[103,168202,168203,168205,168207,168209,168211,168213,168215,168217,168219,168221],{"class":105,"line":106},[103,168204,86905],{"class":162},[103,168206,114],{"class":113},[103,168208,146778],{"class":218},[103,168210,12425],{"class":113},[103,168212,146783],{"class":218},[103,168214,12425],{"class":113},[103,168216,146788],{"class":5206},[103,168218,159],{"class":109},[103,168220,146793],{"class":218},[103,168222,120],{"class":113},[74,168224,168226],{"id":168225},"_822-绝对路径","8.2.2 绝对路径",[14,168228,168229],{},"从根目录或盘符开始：",[94,168231,168233],{"className":30368,"code":168232,"language":30370,"meta":24,"style":24},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[100,168234,168235,168258],{"__ignoreMap":24},[103,168236,168237,168239,168241,168244,168246,168248,168250,168252,168254,168256],{"class":105,"line":106},[103,168238,86905],{"class":162},[103,168240,114],{"class":113},[103,168242,168243],{"class":218},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[103,168245,12425],{"class":113},[103,168247,146783],{"class":218},[103,168249,12425],{"class":113},[103,168251,146788],{"class":5206},[103,168253,159],{"class":109},[103,168255,146793],{"class":218},[103,168257,120],{"class":113},[103,168259,168260,168262,168264,168267,168269,168271,168273,168275,168277,168279],{"class":105,"line":25},[103,168261,86905],{"class":162},[103,168263,114],{"class":113},[103,168265,168266],{"class":218},"\"D:\u002Fdata\u002Fdata.txt\"",[103,168268,12425],{"class":113},[103,168270,146783],{"class":218},[103,168272,12425],{"class":113},[103,168274,146788],{"class":5206},[103,168276,159],{"class":109},[103,168278,146793],{"class":218},[103,168280,120],{"class":113},[14,168282,168283],{},"Windows 路径建议写成：",[94,168285,168287],{"className":30368,"code":168286,"language":30370,"meta":24,"style":24},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[100,168288,168289],{"__ignoreMap":24},[103,168290,168291,168294,168296],{"class":105,"line":106},[103,168292,168293],{"class":113},"path ",[103,168295,159],{"class":109},[103,168297,168298],{"class":218}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168300,168301],{},"或原始字符串：",[94,168303,168305],{"className":30368,"code":168304,"language":30370,"meta":24,"style":24},"path = r\"D:\\data\\data.txt\"\n",[100,168306,168307],{"__ignoreMap":24},[103,168308,168309,168311,168313,168315,168317,168320,168323,168326,168328,168330,168332,168335],{"class":105,"line":106},[103,168310,168293],{"class":113},[103,168312,159],{"class":109},[103,168314,17111],{"class":109},[103,168316,364],{"class":218},[103,168318,168319],{"class":47967},"D:",[103,168321,168322],{"class":162},"\\d",[103,168324,168325],{"class":47967},"ata",[103,168327,168322],{"class":162},[103,168329,168325],{"class":47967},[103,168331,671],{"class":162},[103,168333,168334],{"class":47967},"txt",[103,168336,25123],{"class":218},[45,168338,168340],{"id":168339},"_83-open函数","8.3 open函数",[14,168342,5171],{},[94,168344,168346],{"className":30368,"code":168345,"language":30370,"meta":24,"style":24},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[100,168347,168348],{"__ignoreMap":24},[103,168349,168350,168352,168354,168356,168359,168361,168363,168365],{"class":105,"line":106},[103,168351,45344],{"class":5206},[103,168353,13554],{"class":109},[103,168355,146773],{"class":162},[103,168357,168358],{"class":113},"(文件路径, 打开模式, ",[103,168360,146788],{"class":5206},[103,168362,159],{"class":109},[103,168364,146793],{"class":218},[103,168366,120],{"class":113},[14,168368,168369],{},"常见模式：",[251,168371,168372,168381],{},[254,168373,168374],{},[257,168375,168376,168379],{},[260,168377,168378],{},"模式",[260,168380,25859],{},[298,168382,168383,168392,168401,168410,168420],{},[257,168384,168385,168389],{},[303,168386,168387],{},[100,168388,783],{},[303,168390,168391],{},"只读，文件不存在会报错",[257,168393,168394,168398],{},[303,168395,168396],{},[100,168397,908],{},[303,168399,168400],{},"只写，文件不存在会创建，存在会清空",[257,168402,168403,168407],{},[303,168404,168405],{},[100,168406,17],{},[303,168408,168409],{},"追加，文件不存在会创建",[257,168411,168412,168417],{},[303,168413,168414],{},[100,168415,168416],{},"rb",[303,168418,168419],{},"二进制只读",[257,168421,168422,168427],{},[303,168423,168424],{},[100,168425,168426],{},"wb",[303,168428,168429],{},"二进制只写",[45,168431,168433],{"id":168432},"_84-读取文件","8.4 读取文件",[74,168435,168437],{"id":168436},"_841-read","8.4.1 read",[14,168439,168440],{},"一次读取全部内容：",[94,168442,168444],{"className":30368,"code":168443,"language":30370,"meta":24,"style":24},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[100,168445,168446,168472,168484,168491],{"__ignoreMap":24},[103,168447,168448,168450,168452,168454,168456,168458,168460,168462,168464,168466,168468,168470],{"class":105,"line":106},[103,168449,45344],{"class":5206},[103,168451,13554],{"class":109},[103,168453,146773],{"class":162},[103,168455,114],{"class":113},[103,168457,146778],{"class":218},[103,168459,12425],{"class":113},[103,168461,146783],{"class":218},[103,168463,12425],{"class":113},[103,168465,146788],{"class":5206},[103,168467,159],{"class":109},[103,168469,146793],{"class":218},[103,168471,120],{"class":113},[103,168473,168474,168477,168479,168481],{"class":105,"line":25},[103,168475,168476],{"class":113},"content ",[103,168478,159],{"class":109},[103,168480,148135],{"class":5206},[103,168482,168483],{"class":113},".read()\n",[103,168485,168486,168488],{"class":105,"line":1168},[103,168487,30405],{"class":162},[103,168489,168490],{"class":113},"(content)\n",[103,168492,168493,168495],{"class":105,"line":1183},[103,168494,45344],{"class":5206},[103,168496,168497],{"class":113},".close()\n",[14,168499,168500],{},"可以指定读取字符数：",[94,168502,168504],{"className":30368,"code":168503,"language":30370,"meta":24,"style":24},"content = file.read(10)\n",[100,168505,168506],{"__ignoreMap":24},[103,168507,168508,168510,168512,168514,168517,168519],{"class":105,"line":106},[103,168509,168476],{"class":113},[103,168511,159],{"class":109},[103,168513,148135],{"class":5206},[103,168515,168516],{"class":113},".read(",[103,168518,559],{"class":162},[103,168520,120],{"class":113},[74,168522,168524],{"id":168523},"_842-readline","8.4.2 readline",[14,168526,168527],{},"一次读取一行：",[94,168529,168531],{"className":30368,"code":168530,"language":30370,"meta":24,"style":24},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[100,168532,168533,168559,168563,168574,168581,168585],{"__ignoreMap":24},[103,168534,168535,168537,168539,168541,168543,168545,168547,168549,168551,168553,168555,168557],{"class":105,"line":106},[103,168536,45344],{"class":5206},[103,168538,13554],{"class":109},[103,168540,146773],{"class":162},[103,168542,114],{"class":113},[103,168544,146778],{"class":218},[103,168546,12425],{"class":113},[103,168548,146783],{"class":218},[103,168550,12425],{"class":113},[103,168552,146788],{"class":5206},[103,168554,159],{"class":109},[103,168556,146793],{"class":218},[103,168558,120],{"class":113},[103,168560,168561],{"class":105,"line":25},[103,168562,2389],{"emptyLinePlaceholder":30},[103,168564,168565,168567,168569,168571],{"class":105,"line":1168},[103,168566,147234],{"class":113},[103,168568,159],{"class":109},[103,168570,148135],{"class":5206},[103,168572,168573],{"class":113},".readline()\n",[103,168575,168576,168578],{"class":105,"line":1183},[103,168577,30405],{"class":162},[103,168579,168580],{"class":113},"(line)\n",[103,168582,168583],{"class":105,"line":1189},[103,168584,2389],{"emptyLinePlaceholder":30},[103,168586,168587,168589],{"class":105,"line":1203},[103,168588,45344],{"class":5206},[103,168590,168497],{"class":113},[74,168592,168594],{"id":168593},"_843-readlines","8.4.3 readlines",[14,168596,168597],{},"读取所有行，返回列表：",[94,168599,168601],{"className":30368,"code":168600,"language":30370,"meta":24,"style":24},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[100,168602,168603,168629,168641,168648],{"__ignoreMap":24},[103,168604,168605,168607,168609,168611,168613,168615,168617,168619,168621,168623,168625,168627],{"class":105,"line":106},[103,168606,45344],{"class":5206},[103,168608,13554],{"class":109},[103,168610,146773],{"class":162},[103,168612,114],{"class":113},[103,168614,146778],{"class":218},[103,168616,12425],{"class":113},[103,168618,146783],{"class":218},[103,168620,12425],{"class":113},[103,168622,146788],{"class":5206},[103,168624,159],{"class":109},[103,168626,146793],{"class":218},[103,168628,120],{"class":113},[103,168630,168631,168634,168636,168638],{"class":105,"line":25},[103,168632,168633],{"class":113},"lines ",[103,168635,159],{"class":109},[103,168637,148135],{"class":5206},[103,168639,168640],{"class":113},".readlines()\n",[103,168642,168643,168645],{"class":105,"line":1168},[103,168644,30405],{"class":162},[103,168646,168647],{"class":113},"(lines)\n",[103,168649,168650,168652],{"class":105,"line":1183},[103,168651,45344],{"class":5206},[103,168653,168497],{"class":113},[14,168655,168656,168657,168660],{},"每一行通常带有换行符，可以用 ",[100,168658,168659],{},"strip()"," 去掉：",[94,168662,168664],{"className":30368,"code":168663,"language":30370,"meta":24,"style":24},"for line in lines:\n    print(line.strip())\n",[100,168665,168666,168678],{"__ignoreMap":24},[103,168667,168668,168670,168673,168675],{"class":105,"line":106},[103,168669,3014],{"class":109},[103,168671,168672],{"class":113}," line ",[103,168674,26033],{"class":109},[103,168676,168677],{"class":113}," lines:\n",[103,168679,168680,168682],{"class":105,"line":25},[103,168681,31289],{"class":162},[103,168683,168684],{"class":113},"(line.strip())\n",[74,168686,168688],{"id":168687},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168690,168691],{},"推荐读取大文件时使用：",[94,168693,168695],{"className":30368,"code":168694,"language":30370,"meta":24,"style":24},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[100,168696,168697,168723,168727,168739,168745,168749],{"__ignoreMap":24},[103,168698,168699,168701,168703,168705,168707,168709,168711,168713,168715,168717,168719,168721],{"class":105,"line":106},[103,168700,45344],{"class":5206},[103,168702,13554],{"class":109},[103,168704,146773],{"class":162},[103,168706,114],{"class":113},[103,168708,146778],{"class":218},[103,168710,12425],{"class":113},[103,168712,146783],{"class":218},[103,168714,12425],{"class":113},[103,168716,146788],{"class":5206},[103,168718,159],{"class":109},[103,168720,146793],{"class":218},[103,168722,120],{"class":113},[103,168724,168725],{"class":105,"line":25},[103,168726,2389],{"emptyLinePlaceholder":30},[103,168728,168729,168731,168733,168735,168737],{"class":105,"line":1168},[103,168730,3014],{"class":109},[103,168732,168672],{"class":113},[103,168734,26033],{"class":109},[103,168736,148135],{"class":5206},[103,168738,3728],{"class":113},[103,168740,168741,168743],{"class":105,"line":1183},[103,168742,31289],{"class":162},[103,168744,168684],{"class":113},[103,168746,168747],{"class":105,"line":1189},[103,168748,2389],{"emptyLinePlaceholder":30},[103,168750,168751,168753],{"class":105,"line":1203},[103,168752,45344],{"class":5206},[103,168754,168497],{"class":113},[45,168756,168758],{"id":168757},"_85-with语句","8.5 with语句",[14,168760,168761,168763],{},[100,168762,107823],{}," 会自动关闭文件，推荐使用。",[94,168765,168767],{"className":30368,"code":168766,"language":30370,"meta":24,"style":24},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[100,168768,168769,168799,168809],{"__ignoreMap":24},[103,168770,168771,168773,168775,168777,168779,168781,168783,168785,168787,168789,168791,168793,168795,168797],{"class":105,"line":106},[103,168772,107823],{"class":109},[103,168774,146773],{"class":162},[103,168776,114],{"class":113},[103,168778,146778],{"class":218},[103,168780,12425],{"class":113},[103,168782,146783],{"class":218},[103,168784,12425],{"class":113},[103,168786,146788],{"class":5206},[103,168788,159],{"class":109},[103,168790,146793],{"class":218},[103,168792,13704],{"class":113},[103,168794,31373],{"class":109},[103,168796,148135],{"class":5206},[103,168798,3728],{"class":113},[103,168800,168801,168803,168805,168807],{"class":105,"line":25},[103,168802,146805],{"class":113},[103,168804,159],{"class":109},[103,168806,148135],{"class":5206},[103,168808,168483],{"class":113},[103,168810,168811,168813],{"class":105,"line":1168},[103,168812,31289],{"class":162},[103,168814,168490],{"class":113},[14,168816,168817],{},"等价于打开文件、读取、最后关闭，但更安全。",[45,168819,168821],{"id":168820},"_86-写入文件","8.6 写入文件",[14,168823,168824,168826],{},[100,168825,908],{}," 模式会清空原文件。",[94,168828,168830],{"className":30368,"code":168829,"language":30370,"meta":24,"style":24},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[100,168831,168832,168862,168879],{"__ignoreMap":24},[103,168833,168834,168836,168838,168840,168842,168844,168846,168848,168850,168852,168854,168856,168858,168860],{"class":105,"line":106},[103,168835,107823],{"class":109},[103,168837,146773],{"class":162},[103,168839,114],{"class":113},[103,168841,146778],{"class":218},[103,168843,12425],{"class":113},[103,168845,151958],{"class":218},[103,168847,12425],{"class":113},[103,168849,146788],{"class":5206},[103,168851,159],{"class":109},[103,168853,146793],{"class":218},[103,168855,13704],{"class":113},[103,168857,31373],{"class":109},[103,168859,148135],{"class":5206},[103,168861,3728],{"class":113},[103,168863,168864,168867,168870,168873,168875,168877],{"class":105,"line":25},[103,168865,168866],{"class":5206},"    file",[103,168868,168869],{"class":113},".write(",[103,168871,168872],{"class":218},"\"hello",[103,168874,156507],{"class":162},[103,168876,364],{"class":218},[103,168878,120],{"class":113},[103,168880,168881,168883,168885,168888,168890,168892],{"class":105,"line":1168},[103,168882,168866],{"class":5206},[103,168884,168869],{"class":113},[103,168886,168887],{"class":218},"\"python",[103,168889,156507],{"class":162},[103,168891,364],{"class":218},[103,168893,120],{"class":113},[14,168895,168896],{},"写入多行：",[94,168898,168900],{"className":30368,"code":168899,"language":30370,"meta":24,"style":24},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[100,168901,168902,168937,168941,168972],{"__ignoreMap":24},[103,168903,168904,168906,168908,168910,168913,168915,168917,168919,168922,168924,168926,168928,168931,168933,168935],{"class":105,"line":106},[103,168905,168633],{"class":113},[103,168907,159],{"class":109},[103,168909,52216],{"class":113},[103,168911,168912],{"class":218},"\"小明,18",[103,168914,156507],{"class":162},[103,168916,364],{"class":218},[103,168918,12425],{"class":113},[103,168920,168921],{"class":218},"\"小红,17",[103,168923,156507],{"class":162},[103,168925,364],{"class":218},[103,168927,12425],{"class":113},[103,168929,168930],{"class":218},"\"小刚,19",[103,168932,156507],{"class":162},[103,168934,364],{"class":218},[103,168936,33236],{"class":113},[103,168938,168939],{"class":105,"line":25},[103,168940,2389],{"emptyLinePlaceholder":30},[103,168942,168943,168945,168947,168949,168952,168954,168956,168958,168960,168962,168964,168966,168968,168970],{"class":105,"line":1168},[103,168944,107823],{"class":109},[103,168946,146773],{"class":162},[103,168948,114],{"class":113},[103,168950,168951],{"class":218},"\"students.txt\"",[103,168953,12425],{"class":113},[103,168955,151958],{"class":218},[103,168957,12425],{"class":113},[103,168959,146788],{"class":5206},[103,168961,159],{"class":109},[103,168963,146793],{"class":218},[103,168965,13704],{"class":113},[103,168967,31373],{"class":109},[103,168969,148135],{"class":5206},[103,168971,3728],{"class":113},[103,168973,168974,168976],{"class":105,"line":1183},[103,168975,168866],{"class":5206},[103,168977,168978],{"class":113},".writelines(lines)\n",[45,168980,168982],{"id":168981},"_87-追加文件","8.7 追加文件",[14,168984,168985,168987],{},[100,168986,17],{}," 模式不会清空原内容，而是在末尾追加。",[94,168989,168991],{"className":30368,"code":168990,"language":30370,"meta":24,"style":24},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[100,168992,168993,169024],{"__ignoreMap":24},[103,168994,168995,168997,168999,169001,169004,169006,169008,169010,169012,169014,169016,169018,169020,169022],{"class":105,"line":106},[103,168996,107823],{"class":109},[103,168998,146773],{"class":162},[103,169000,114],{"class":113},[103,169002,169003],{"class":218},"\"log.txt\"",[103,169005,12425],{"class":113},[103,169007,165307],{"class":218},[103,169009,12425],{"class":113},[103,169011,146788],{"class":5206},[103,169013,159],{"class":109},[103,169015,146793],{"class":218},[103,169017,13704],{"class":113},[103,169019,31373],{"class":109},[103,169021,148135],{"class":5206},[103,169023,3728],{"class":113},[103,169025,169026,169028,169030,169033,169035,169037],{"class":105,"line":25},[103,169027,168866],{"class":5206},[103,169029,168869],{"class":113},[103,169031,169032],{"class":218},"\"程序启动",[103,169034,156507],{"class":162},[103,169036,364],{"class":218},[103,169038,120],{"class":113},[14,169040,169041],{},"日志类文件常用追加模式。",[45,169043,169045],{"id":169044},"_88-文件编码","8.8 文件编码",[14,169047,169048],{},"编码决定文字如何保存为字节。",[14,169050,169051],{},"常见编码：",[57,169053,169054,169057],{},[60,169055,169056],{},"UTF-8：推荐。",[60,169058,169059],{},"GBK：部分 Windows 中文文件常见。",[14,169061,169062],{},"读取文件乱码时，可以尝试：",[94,169064,169066],{"className":30368,"code":169065,"language":30370,"meta":24,"style":24},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[100,169067,169068,169099],{"__ignoreMap":24},[103,169069,169070,169072,169074,169076,169078,169080,169082,169084,169086,169088,169091,169093,169095,169097],{"class":105,"line":106},[103,169071,107823],{"class":109},[103,169073,146773],{"class":162},[103,169075,114],{"class":113},[103,169077,146778],{"class":218},[103,169079,12425],{"class":113},[103,169081,146783],{"class":218},[103,169083,12425],{"class":113},[103,169085,146788],{"class":5206},[103,169087,159],{"class":109},[103,169089,169090],{"class":218},"\"gbk\"",[103,169092,13704],{"class":113},[103,169094,31373],{"class":109},[103,169096,148135],{"class":5206},[103,169098,3728],{"class":113},[103,169100,169101,169103,169105,169107],{"class":105,"line":25},[103,169102,146805],{"class":113},[103,169104,159],{"class":109},[103,169106,148135],{"class":5206},[103,169108,168483],{"class":113},[14,169110,169111],{},"写文件时建议统一 UTF-8：",[94,169113,169115],{"className":30368,"code":169114,"language":30370,"meta":24,"style":24},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[100,169116,169117,169147],{"__ignoreMap":24},[103,169118,169119,169121,169123,169125,169127,169129,169131,169133,169135,169137,169139,169141,169143,169145],{"class":105,"line":106},[103,169120,107823],{"class":109},[103,169122,146773],{"class":162},[103,169124,114],{"class":113},[103,169126,146778],{"class":218},[103,169128,12425],{"class":113},[103,169130,151958],{"class":218},[103,169132,12425],{"class":113},[103,169134,146788],{"class":5206},[103,169136,159],{"class":109},[103,169138,146793],{"class":218},[103,169140,13704],{"class":113},[103,169142,31373],{"class":109},[103,169144,148135],{"class":5206},[103,169146,3728],{"class":113},[103,169148,169149,169151,169153,169156],{"class":105,"line":25},[103,169150,168866],{"class":5206},[103,169152,168869],{"class":113},[103,169154,169155],{"class":218},"\"中文内容\"",[103,169157,120],{"class":113},[45,169159,169161],{"id":169160},"_89-pathlib","8.9 pathlib",[14,169163,169164,169167],{},[100,169165,169166],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[94,169169,169171],{"className":30368,"code":169170,"language":30370,"meta":24,"style":24},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[100,169172,169173,169183,169187,169205],{"__ignoreMap":24},[103,169174,169175,169177,169179,169181],{"class":105,"line":106},[103,169176,30727],{"class":109},[103,169178,108301],{"class":113},[103,169180,30382],{"class":109},[103,169182,108306],{"class":113},[103,169184,169185],{"class":105,"line":25},[103,169186,2389],{"emptyLinePlaceholder":30},[103,169188,169189,169191,169193,169195,169198,169200,169202],{"class":105,"line":1168},[103,169190,168293],{"class":113},[103,169192,159],{"class":109},[103,169194,108535],{"class":113},[103,169196,169197],{"class":218},"\"data\"",[103,169199,13704],{"class":113},[103,169201,697],{"class":109},[103,169203,169204],{"class":218}," \"students.txt\"\n",[103,169206,169207,169209],{"class":105,"line":1183},[103,169208,30405],{"class":162},[103,169210,169211],{"class":113},"(path)\n",[14,169213,169214],{},"创建目录：",[94,169216,169218],{"className":30368,"code":169217,"language":30370,"meta":24,"style":24},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[100,169219,169220,169230,169234,169247],{"__ignoreMap":24},[103,169221,169222,169224,169226,169228],{"class":105,"line":106},[103,169223,30727],{"class":109},[103,169225,108301],{"class":113},[103,169227,30382],{"class":109},[103,169229,108306],{"class":113},[103,169231,169232],{"class":105,"line":25},[103,169233,2389],{"emptyLinePlaceholder":30},[103,169235,169236,169239,169241,169243,169245],{"class":105,"line":1168},[103,169237,169238],{"class":113},"data_dir ",[103,169240,159],{"class":109},[103,169242,108535],{"class":113},[103,169244,169197],{"class":218},[103,169246,120],{"class":113},[103,169248,169249,169252,169255,169257,169259],{"class":105,"line":1183},[103,169250,169251],{"class":113},"data_dir.mkdir(",[103,169253,169254],{"class":5206},"exist_ok",[103,169256,159],{"class":109},[103,169258,31466],{"class":162},[103,169260,120],{"class":113},[14,169262,169263],{},"判断文件是否存在：",[94,169265,169267],{"className":30368,"code":169266,"language":30370,"meta":24,"style":24},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[100,169268,169269,169282,169286,169293],{"__ignoreMap":24},[103,169270,169271,169273,169275,169277,169280],{"class":105,"line":106},[103,169272,168293],{"class":113},[103,169274,159],{"class":109},[103,169276,108535],{"class":113},[103,169278,169279],{"class":218},"\"data\u002Fstudents.txt\"",[103,169281,120],{"class":113},[103,169283,169284],{"class":105,"line":25},[103,169285,2389],{"emptyLinePlaceholder":30},[103,169287,169288,169290],{"class":105,"line":1168},[103,169289,1520],{"class":109},[103,169291,169292],{"class":113}," path.exists():\n",[103,169294,169295,169297,169299,169302],{"class":105,"line":1183},[103,169296,31289],{"class":162},[103,169298,114],{"class":113},[103,169300,169301],{"class":218},"\"文件存在\"",[103,169303,120],{"class":113},[14,169305,169306],{},"读写文本：",[94,169308,169310],{"className":30368,"code":169309,"language":30370,"meta":24,"style":24},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[100,169311,169312,169324,169328,169345,169362],{"__ignoreMap":24},[103,169313,169314,169316,169318,169320,169322],{"class":105,"line":106},[103,169315,168293],{"class":113},[103,169317,159],{"class":109},[103,169319,108535],{"class":113},[103,169321,146778],{"class":218},[103,169323,120],{"class":113},[103,169325,169326],{"class":105,"line":25},[103,169327,2389],{"emptyLinePlaceholder":30},[103,169329,169330,169333,169335,169337,169339,169341,169343],{"class":105,"line":1168},[103,169331,169332],{"class":113},"path.write_text(",[103,169334,145858],{"class":218},[103,169336,12425],{"class":113},[103,169338,146788],{"class":5206},[103,169340,159],{"class":109},[103,169342,146793],{"class":218},[103,169344,120],{"class":113},[103,169346,169347,169349,169351,169354,169356,169358,169360],{"class":105,"line":1183},[103,169348,168476],{"class":113},[103,169350,159],{"class":109},[103,169352,169353],{"class":113}," path.read_text(",[103,169355,146788],{"class":5206},[103,169357,159],{"class":109},[103,169359,146793],{"class":218},[103,169361,120],{"class":113},[103,169363,169364,169366],{"class":105,"line":1189},[103,169365,30405],{"class":162},[103,169367,168490],{"class":113},[45,169369,169371],{"id":169370},"_810-json文件","8.10 JSON文件",[14,169373,169374],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[94,169376,169378],{"className":30368,"code":169377,"language":30370,"meta":24,"style":24},"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",[100,169379,169380,169386,169390,169398,169408,169418,169426,169430,169434,169459],{"__ignoreMap":24},[103,169381,169382,169384],{"class":105,"line":106},[103,169383,30382],{"class":109},[103,169385,147073],{"class":113},[103,169387,169388],{"class":105,"line":25},[103,169389,2389],{"emptyLinePlaceholder":30},[103,169391,169392,169394,169396],{"class":105,"line":1168},[103,169393,149463],{"class":113},[103,169395,159],{"class":109},[103,169397,15562],{"class":113},[103,169399,169400,169402,169404,169406],{"class":105,"line":1183},[103,169401,147002],{"class":218},[103,169403,51427],{"class":113},[103,169405,149870],{"class":218},[103,169407,31456],{"class":113},[103,169409,169410,169412,169414,169416],{"class":105,"line":1189},[103,169411,164519],{"class":218},[103,169413,51427],{"class":113},[103,169415,763],{"class":162},[103,169417,31456],{"class":113},[103,169419,169420,169422,169424],{"class":105,"line":1203},[103,169421,164530],{"class":218},[103,169423,51427],{"class":113},[103,169425,164535],{"class":162},[103,169427,169428],{"class":105,"line":1209},[103,169429,1554],{"class":113},[103,169431,169432],{"class":105,"line":1300},[103,169433,2389],{"emptyLinePlaceholder":30},[103,169435,169436,169438,169440,169443,169445,169447,169449,169451,169453,169455,169457],{"class":105,"line":1306},[103,169437,156426],{"class":113},[103,169439,159],{"class":109},[103,169441,169442],{"class":113}," json.dumps(student, ",[103,169444,147119],{"class":5206},[103,169446,159],{"class":109},[103,169448,33977],{"class":162},[103,169450,12425],{"class":113},[103,169452,151994],{"class":5206},[103,169454,159],{"class":109},[103,169456,191],{"class":162},[103,169458,120],{"class":113},[103,169460,169461,169463],{"class":105,"line":1318},[103,169462,30405],{"class":162},[103,169464,164053],{"class":113},[14,169466,169467],{},"写入 JSON 文件：",[94,169469,169471],{"className":30368,"code":169470,"language":30370,"meta":24,"style":24},"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",[100,169472,169473,169479,169483,169491,169519,169547,169551,169555,169585],{"__ignoreMap":24},[103,169474,169475,169477],{"class":105,"line":106},[103,169476,30382],{"class":109},[103,169478,147073],{"class":113},[103,169480,169481],{"class":105,"line":25},[103,169482,2389],{"emptyLinePlaceholder":30},[103,169484,169485,169487,169489],{"class":105,"line":1168},[103,169486,159698],{"class":113},[103,169488,159],{"class":109},[103,169490,55437],{"class":113},[103,169492,169493,169495,169497,169499,169501,169503,169505,169507,169509,169511,169513,169515,169517],{"class":105,"line":1183},[103,169494,148367],{"class":113},[103,169496,62669],{"class":218},[103,169498,51427],{"class":113},[103,169500,149870],{"class":218},[103,169502,12425],{"class":113},[103,169504,69114],{"class":218},[103,169506,51427],{"class":113},[103,169508,763],{"class":162},[103,169510,12425],{"class":113},[103,169512,151454],{"class":218},[103,169514,51427],{"class":113},[103,169516,1102],{"class":162},[103,169518,4919],{"class":113},[103,169520,169521,169523,169525,169527,169529,169531,169533,169535,169537,169539,169541,169543,169545],{"class":105,"line":1189},[103,169522,148367],{"class":113},[103,169524,62669],{"class":218},[103,169526,51427],{"class":113},[103,169528,150918],{"class":218},[103,169530,12425],{"class":113},[103,169532,69114],{"class":218},[103,169534,51427],{"class":113},[103,169536,738],{"class":162},[103,169538,12425],{"class":113},[103,169540,151454],{"class":218},[103,169542,51427],{"class":113},[103,169544,924],{"class":162},[103,169546,4919],{"class":113},[103,169548,169549],{"class":105,"line":1203},[103,169550,33236],{"class":113},[103,169552,169553],{"class":105,"line":1209},[103,169554,2389],{"emptyLinePlaceholder":30},[103,169556,169557,169559,169561,169563,169565,169567,169569,169571,169573,169575,169577,169579,169581,169583],{"class":105,"line":1300},[103,169558,107823],{"class":109},[103,169560,146773],{"class":162},[103,169562,114],{"class":113},[103,169564,151813],{"class":218},[103,169566,12425],{"class":113},[103,169568,151958],{"class":218},[103,169570,12425],{"class":113},[103,169572,146788],{"class":5206},[103,169574,159],{"class":109},[103,169576,146793],{"class":218},[103,169578,13704],{"class":113},[103,169580,31373],{"class":109},[103,169582,148135],{"class":5206},[103,169584,3728],{"class":113},[103,169586,169587,169590,169592,169594,169596,169598,169600,169602,169604,169606,169608],{"class":105,"line":1306},[103,169588,169589],{"class":113},"    json.dump(students, ",[103,169591,45344],{"class":5206},[103,169593,12425],{"class":113},[103,169595,147119],{"class":5206},[103,169597,159],{"class":109},[103,169599,33977],{"class":162},[103,169601,12425],{"class":113},[103,169603,151994],{"class":5206},[103,169605,159],{"class":109},[103,169607,191],{"class":162},[103,169609,120],{"class":113},[14,169611,169612],{},"读取 JSON 文件：",[94,169614,169616],{"className":30368,"code":169615,"language":30370,"meta":24,"style":24},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[100,169617,169618,169624,169628,169658,169670,169674],{"__ignoreMap":24},[103,169619,169620,169622],{"class":105,"line":106},[103,169621,30382],{"class":109},[103,169623,147073],{"class":113},[103,169625,169626],{"class":105,"line":25},[103,169627,2389],{"emptyLinePlaceholder":30},[103,169629,169630,169632,169634,169636,169638,169640,169642,169644,169646,169648,169650,169652,169654,169656],{"class":105,"line":1168},[103,169631,107823],{"class":109},[103,169633,146773],{"class":162},[103,169635,114],{"class":113},[103,169637,151813],{"class":218},[103,169639,12425],{"class":113},[103,169641,146783],{"class":218},[103,169643,12425],{"class":113},[103,169645,146788],{"class":5206},[103,169647,159],{"class":109},[103,169649,146793],{"class":218},[103,169651,13704],{"class":113},[103,169653,31373],{"class":109},[103,169655,148135],{"class":5206},[103,169657,3728],{"class":113},[103,169659,169660,169662,169664,169666,169668],{"class":105,"line":1183},[103,169661,153019],{"class":113},[103,169663,159],{"class":109},[103,169665,148146],{"class":113},[103,169667,45344],{"class":5206},[103,169669,120],{"class":113},[103,169671,169672],{"class":105,"line":1189},[103,169673,2389],{"emptyLinePlaceholder":30},[103,169675,169676,169678],{"class":105,"line":1203},[103,169677,30405],{"class":162},[103,169679,164977],{"class":113},[45,169681,169683],{"id":169682},"_811-csv文件","8.11 CSV文件",[14,169685,169686],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169688,169689],{},"写入 CSV：",[94,169691,169693],{"className":30368,"code":169692,"language":30370,"meta":24,"style":24},"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",[100,169694,169695,169702,169706,169714,169732,169748,169764,169768,169772,169812,169826],{"__ignoreMap":24},[103,169696,169697,169699],{"class":105,"line":106},[103,169698,30382],{"class":109},[103,169700,169701],{"class":113}," csv\n",[103,169703,169704],{"class":105,"line":25},[103,169705,2389],{"emptyLinePlaceholder":30},[103,169707,169708,169710,169712],{"class":105,"line":1168},[103,169709,159698],{"class":113},[103,169711,159],{"class":109},[103,169713,55437],{"class":113},[103,169715,169716,169719,169721,169723,169725,169727,169730],{"class":105,"line":1183},[103,169717,169718],{"class":113},"    [",[103,169720,73089],{"class":218},[103,169722,12425],{"class":113},[103,169724,73122],{"class":218},[103,169726,12425],{"class":113},[103,169728,169729],{"class":218},"\"成绩\"",[103,169731,87826],{"class":113},[103,169733,169734,169736,169738,169740,169742,169744,169746],{"class":105,"line":1189},[103,169735,169718],{"class":113},[103,169737,149870],{"class":218},[103,169739,12425],{"class":113},[103,169741,763],{"class":162},[103,169743,12425],{"class":113},[103,169745,1102],{"class":162},[103,169747,87826],{"class":113},[103,169749,169750,169752,169754,169756,169758,169760,169762],{"class":105,"line":1203},[103,169751,169718],{"class":113},[103,169753,150918],{"class":218},[103,169755,12425],{"class":113},[103,169757,738],{"class":162},[103,169759,12425],{"class":113},[103,169761,924],{"class":162},[103,169763,87826],{"class":113},[103,169765,169766],{"class":105,"line":1209},[103,169767,33236],{"class":113},[103,169769,169770],{"class":105,"line":1300},[103,169771,2389],{"emptyLinePlaceholder":30},[103,169773,169774,169776,169778,169780,169783,169785,169787,169789,169791,169793,169795,169797,169800,169802,169804,169806,169808,169810],{"class":105,"line":1306},[103,169775,107823],{"class":109},[103,169777,146773],{"class":162},[103,169779,114],{"class":113},[103,169781,169782],{"class":218},"\"students.csv\"",[103,169784,12425],{"class":113},[103,169786,151958],{"class":218},[103,169788,12425],{"class":113},[103,169790,146788],{"class":5206},[103,169792,159],{"class":109},[103,169794,146793],{"class":218},[103,169796,12425],{"class":113},[103,169798,169799],{"class":5206},"newline",[103,169801,159],{"class":109},[103,169803,7642],{"class":218},[103,169805,13704],{"class":113},[103,169807,31373],{"class":109},[103,169809,148135],{"class":5206},[103,169811,3728],{"class":113},[103,169813,169814,169817,169819,169822,169824],{"class":105,"line":1318},[103,169815,169816],{"class":113},"    writer ",[103,169818,159],{"class":109},[103,169820,169821],{"class":113}," csv.writer(",[103,169823,45344],{"class":5206},[103,169825,120],{"class":113},[103,169827,169828],{"class":105,"line":1601},[103,169829,169830],{"class":113},"    writer.writerows(students)\n",[14,169832,169833],{},"读取 CSV：",[94,169835,169837],{"className":30368,"code":169836,"language":30370,"meta":24,"style":24},"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",[100,169838,169839,169845,169849,169879,169893,169905],{"__ignoreMap":24},[103,169840,169841,169843],{"class":105,"line":106},[103,169842,30382],{"class":109},[103,169844,169701],{"class":113},[103,169846,169847],{"class":105,"line":25},[103,169848,2389],{"emptyLinePlaceholder":30},[103,169850,169851,169853,169855,169857,169859,169861,169863,169865,169867,169869,169871,169873,169875,169877],{"class":105,"line":1168},[103,169852,107823],{"class":109},[103,169854,146773],{"class":162},[103,169856,114],{"class":113},[103,169858,169782],{"class":218},[103,169860,12425],{"class":113},[103,169862,146783],{"class":218},[103,169864,12425],{"class":113},[103,169866,146788],{"class":5206},[103,169868,159],{"class":109},[103,169870,146793],{"class":218},[103,169872,13704],{"class":113},[103,169874,31373],{"class":109},[103,169876,148135],{"class":5206},[103,169878,3728],{"class":113},[103,169880,169881,169884,169886,169889,169891],{"class":105,"line":1183},[103,169882,169883],{"class":113},"    reader ",[103,169885,159],{"class":109},[103,169887,169888],{"class":113}," csv.reader(",[103,169890,45344],{"class":5206},[103,169892,120],{"class":113},[103,169894,169895,169897,169900,169902],{"class":105,"line":1189},[103,169896,3190],{"class":109},[103,169898,169899],{"class":113}," row ",[103,169901,26033],{"class":109},[103,169903,169904],{"class":113}," reader:\n",[103,169906,169907,169909],{"class":105,"line":1203},[103,169908,32441],{"class":162},[103,169910,169911],{"class":113},"(row)\n",[14,169913,169914],{},"使用字典写入：",[94,169916,169918],{"className":30368,"code":169917,"language":30370,"meta":24,"style":24},"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",[100,169919,169920,169926,169930,169938,169966,169994,169998,170002,170040,170061,170082,170087],{"__ignoreMap":24},[103,169921,169922,169924],{"class":105,"line":106},[103,169923,30382],{"class":109},[103,169925,169701],{"class":113},[103,169927,169928],{"class":105,"line":25},[103,169929,2389],{"emptyLinePlaceholder":30},[103,169931,169932,169934,169936],{"class":105,"line":1168},[103,169933,159698],{"class":113},[103,169935,159],{"class":109},[103,169937,55437],{"class":113},[103,169939,169940,169942,169944,169946,169948,169950,169952,169954,169956,169958,169960,169962,169964],{"class":105,"line":1183},[103,169941,148367],{"class":113},[103,169943,62669],{"class":218},[103,169945,51427],{"class":113},[103,169947,149870],{"class":218},[103,169949,12425],{"class":113},[103,169951,69114],{"class":218},[103,169953,51427],{"class":113},[103,169955,763],{"class":162},[103,169957,12425],{"class":113},[103,169959,151454],{"class":218},[103,169961,51427],{"class":113},[103,169963,1102],{"class":162},[103,169965,4919],{"class":113},[103,169967,169968,169970,169972,169974,169976,169978,169980,169982,169984,169986,169988,169990,169992],{"class":105,"line":1189},[103,169969,148367],{"class":113},[103,169971,62669],{"class":218},[103,169973,51427],{"class":113},[103,169975,150918],{"class":218},[103,169977,12425],{"class":113},[103,169979,69114],{"class":218},[103,169981,51427],{"class":113},[103,169983,738],{"class":162},[103,169985,12425],{"class":113},[103,169987,151454],{"class":218},[103,169989,51427],{"class":113},[103,169991,924],{"class":162},[103,169993,4919],{"class":113},[103,169995,169996],{"class":105,"line":1203},[103,169997,33236],{"class":113},[103,169999,170000],{"class":105,"line":1209},[103,170001,2389],{"emptyLinePlaceholder":30},[103,170003,170004,170006,170008,170010,170012,170014,170016,170018,170020,170022,170024,170026,170028,170030,170032,170034,170036,170038],{"class":105,"line":1300},[103,170005,107823],{"class":109},[103,170007,146773],{"class":162},[103,170009,114],{"class":113},[103,170011,169782],{"class":218},[103,170013,12425],{"class":113},[103,170015,151958],{"class":218},[103,170017,12425],{"class":113},[103,170019,146788],{"class":5206},[103,170021,159],{"class":109},[103,170023,146793],{"class":218},[103,170025,12425],{"class":113},[103,170027,169799],{"class":5206},[103,170029,159],{"class":109},[103,170031,7642],{"class":218},[103,170033,13704],{"class":113},[103,170035,31373],{"class":109},[103,170037,148135],{"class":5206},[103,170039,3728],{"class":113},[103,170041,170042,170045,170047,170049,170051,170053,170055,170057,170059],{"class":105,"line":1306},[103,170043,170044],{"class":113},"    fieldnames ",[103,170046,159],{"class":109},[103,170048,52216],{"class":113},[103,170050,62669],{"class":218},[103,170052,12425],{"class":113},[103,170054,69114],{"class":218},[103,170056,12425],{"class":113},[103,170058,151454],{"class":218},[103,170060,33236],{"class":113},[103,170062,170063,170065,170067,170070,170072,170074,170077,170079],{"class":105,"line":1318},[103,170064,169816],{"class":113},[103,170066,159],{"class":109},[103,170068,170069],{"class":113}," csv.DictWriter(",[103,170071,45344],{"class":5206},[103,170073,12425],{"class":113},[103,170075,170076],{"class":5206},"fieldnames",[103,170078,159],{"class":109},[103,170080,170081],{"class":113},"fieldnames)\n",[103,170083,170084],{"class":105,"line":1601},[103,170085,170086],{"class":113},"    writer.writeheader()\n",[103,170088,170089],{"class":105,"line":1606},[103,170090,169830],{"class":113},[45,170092,170094],{"id":170093},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170096,123274],{},[57,170098,170099,170102,170105],{},[60,170100,170101],{},"读取文本文件。",[60,170103,170104],{},"统计每个单词出现次数。",[60,170106,170107],{},"输出出现次数最多的前 10 个单词。",[14,170109,10025],{},[94,170111,170113],{"className":30368,"code":170112,"language":30370,"meta":24,"style":24},"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",[100,170114,170115,170125,170129,170142,170158,170162,170172,170181,170185,170197,170217,170226,170230,170248,170252,170282,170286,170302],{"__ignoreMap":24},[103,170116,170117,170119,170121,170123],{"class":105,"line":106},[103,170118,30727],{"class":109},[103,170120,108301],{"class":113},[103,170122,30382],{"class":109},[103,170124,108306],{"class":113},[103,170126,170127],{"class":105,"line":25},[103,170128,2389],{"emptyLinePlaceholder":30},[103,170130,170131,170133,170135,170137,170140],{"class":105,"line":1168},[103,170132,168293],{"class":113},[103,170134,159],{"class":109},[103,170136,108535],{"class":113},[103,170138,170139],{"class":218},"\"article.txt\"",[103,170141,120],{"class":113},[103,170143,170144,170146,170148,170150,170152,170154,170156],{"class":105,"line":1183},[103,170145,168476],{"class":113},[103,170147,159],{"class":109},[103,170149,169353],{"class":113},[103,170151,146788],{"class":5206},[103,170153,159],{"class":109},[103,170155,146793],{"class":218},[103,170157,120],{"class":113},[103,170159,170160],{"class":105,"line":1189},[103,170161,2389],{"emptyLinePlaceholder":30},[103,170163,170164,170167,170169],{"class":105,"line":1203},[103,170165,170166],{"class":113},"words ",[103,170168,159],{"class":109},[103,170170,170171],{"class":113}," content.lower().split()\n",[103,170173,170174,170177,170179],{"class":105,"line":1209},[103,170175,170176],{"class":113},"counter ",[103,170178,159],{"class":109},[103,170180,87858],{"class":113},[103,170182,170183],{"class":105,"line":1300},[103,170184,2389],{"emptyLinePlaceholder":30},[103,170186,170187,170189,170192,170194],{"class":105,"line":1306},[103,170188,3014],{"class":109},[103,170190,170191],{"class":113}," word ",[103,170193,26033],{"class":109},[103,170195,170196],{"class":113}," words:\n",[103,170198,170199,170202,170204,170207,170210,170212,170215],{"class":105,"line":1318},[103,170200,170201],{"class":113},"    word ",[103,170203,159],{"class":109},[103,170205,170206],{"class":113}," word.strip(",[103,170208,170209],{"class":218},"\".,!?;:",[103,170211,156477],{"class":162},[103,170213,170214],{"class":218},"'()[]\"",[103,170216,120],{"class":113},[103,170218,170219,170221,170223],{"class":105,"line":1601},[103,170220,3090],{"class":109},[103,170222,38920],{"class":109},[103,170224,170225],{"class":113}," word:\n",[103,170227,170228],{"class":105,"line":1606},[103,170229,148494],{"class":109},[103,170231,170232,170235,170237,170240,170242,170244,170246],{"class":105,"line":1612},[103,170233,170234],{"class":113},"    counter[word] ",[103,170236,159],{"class":109},[103,170238,170239],{"class":113}," counter.get(word, ",[103,170241,305],{"class":162},[103,170243,13704],{"class":113},[103,170245,594],{"class":109},[103,170247,55689],{"class":162},[103,170249,170250],{"class":105,"line":1617},[103,170251,2389],{"emptyLinePlaceholder":30},[103,170253,170254,170257,170259,170261,170264,170266,170268,170270,170272,170274,170276,170278,170280],{"class":105,"line":1631},[103,170255,170256],{"class":113},"items ",[103,170258,159],{"class":109},[103,170260,163586],{"class":162},[103,170262,170263],{"class":113},"(counter.items(), ",[103,170265,153928],{"class":5206},[103,170267,153931],{"class":109},[103,170269,153934],{"class":113},[103,170271,331],{"class":162},[103,170273,112192],{"class":113},[103,170275,163510],{"class":5206},[103,170277,159],{"class":109},[103,170279,31466],{"class":162},[103,170281,120],{"class":113},[103,170283,170284],{"class":105,"line":1636},[103,170285,2389],{"emptyLinePlaceholder":30},[103,170287,170288,170290,170293,170295,170298,170300],{"class":105,"line":1642},[103,170289,3014],{"class":109},[103,170291,170292],{"class":113}," word, count ",[103,170294,26033],{"class":109},[103,170296,170297],{"class":113}," items[:",[103,170299,559],{"class":162},[103,170301,165737],{"class":113},[103,170303,170304,170306],{"class":105,"line":1663},[103,170305,31289],{"class":162},[103,170307,170308],{"class":113},"(word, count)\n",[45,170310,170312],{"id":170311},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[94,170314,170316],{"className":30368,"code":170315,"language":30370,"meta":24,"style":24},"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",[100,170317,170318,170324,170334,170338,170350,170354,170358,170366,170376,170382,170386,170416,170426,170430,170434,170442,170472,170496,170500,170504,170512,170541,170546],{"__ignoreMap":24},[103,170319,170320,170322],{"class":105,"line":106},[103,170321,30382],{"class":109},[103,170323,147073],{"class":113},[103,170325,170326,170328,170330,170332],{"class":105,"line":25},[103,170327,30727],{"class":109},[103,170329,108301],{"class":113},[103,170331,30382],{"class":109},[103,170333,108306],{"class":113},[103,170335,170336],{"class":105,"line":1168},[103,170337,2389],{"emptyLinePlaceholder":30},[103,170339,170340,170342,170344,170346,170348],{"class":105,"line":1183},[103,170341,151806],{"class":162},[103,170343,13554],{"class":109},[103,170345,108535],{"class":113},[103,170347,151813],{"class":218},[103,170349,120],{"class":113},[103,170351,170352],{"class":105,"line":1189},[103,170353,2389],{"emptyLinePlaceholder":30},[103,170355,170356],{"class":105,"line":1203},[103,170357,2389],{"emptyLinePlaceholder":30},[103,170359,170360,170362,170364],{"class":105,"line":1209},[103,170361,31937],{"class":109},[103,170363,151830],{"class":1952},[103,170365,31943],{"class":113},[103,170367,170368,170370,170372,170374],{"class":105,"line":1300},[103,170369,3090],{"class":109},[103,170371,38920],{"class":109},[103,170373,151841],{"class":162},[103,170375,151844],{"class":113},[103,170377,170378,170380],{"class":105,"line":1306},[103,170379,14742],{"class":109},[103,170381,51828],{"class":113},[103,170383,170384],{"class":105,"line":1318},[103,170385,2389],{"emptyLinePlaceholder":30},[103,170387,170388,170390,170392,170394,170396,170398,170400,170402,170404,170406,170408,170410,170412,170414],{"class":105,"line":1601},[103,170389,34168],{"class":109},[103,170391,146773],{"class":162},[103,170393,114],{"class":113},[103,170395,151806],{"class":162},[103,170397,12425],{"class":113},[103,170399,146783],{"class":218},[103,170401,12425],{"class":113},[103,170403,146788],{"class":5206},[103,170405,159],{"class":109},[103,170407,146793],{"class":218},[103,170409,13704],{"class":113},[103,170411,31373],{"class":109},[103,170413,148135],{"class":5206},[103,170415,3728],{"class":113},[103,170417,170418,170420,170422,170424],{"class":105,"line":1606},[103,170419,14742],{"class":109},[103,170421,148146],{"class":113},[103,170423,45344],{"class":5206},[103,170425,120],{"class":113},[103,170427,170428],{"class":105,"line":1612},[103,170429,2389],{"emptyLinePlaceholder":30},[103,170431,170432],{"class":105,"line":1617},[103,170433,2389],{"emptyLinePlaceholder":30},[103,170435,170436,170438,170440],{"class":105,"line":1631},[103,170437,31937],{"class":109},[103,170439,151940],{"class":1952},[103,170441,151943],{"class":113},[103,170443,170444,170446,170448,170450,170452,170454,170456,170458,170460,170462,170464,170466,170468,170470],{"class":105,"line":1636},[103,170445,34168],{"class":109},[103,170447,146773],{"class":162},[103,170449,114],{"class":113},[103,170451,151806],{"class":162},[103,170453,12425],{"class":113},[103,170455,151958],{"class":218},[103,170457,12425],{"class":113},[103,170459,146788],{"class":5206},[103,170461,159],{"class":109},[103,170463,146793],{"class":218},[103,170465,13704],{"class":113},[103,170467,31373],{"class":109},[103,170469,148135],{"class":5206},[103,170471,3728],{"class":113},[103,170473,170474,170476,170478,170480,170482,170484,170486,170488,170490,170492,170494],{"class":105,"line":1642},[103,170475,151979],{"class":113},[103,170477,45344],{"class":5206},[103,170479,12425],{"class":113},[103,170481,147119],{"class":5206},[103,170483,159],{"class":109},[103,170485,33977],{"class":162},[103,170487,12425],{"class":113},[103,170489,151994],{"class":5206},[103,170491,159],{"class":109},[103,170493,191],{"class":162},[103,170495,120],{"class":113},[103,170497,170498],{"class":105,"line":1663},[103,170499,2389],{"emptyLinePlaceholder":30},[103,170501,170502],{"class":105,"line":1668},[103,170503,2389],{"emptyLinePlaceholder":30},[103,170505,170506,170508,170510],{"class":105,"line":1682},[103,170507,159698],{"class":113},[103,170509,159],{"class":109},[103,170511,153024],{"class":113},[103,170513,170514,170517,170519,170521,170523,170525,170527,170529,170531,170533,170535,170537,170539],{"class":105,"line":1687},[103,170515,170516],{"class":113},"students.append({",[103,170518,62669],{"class":218},[103,170520,51427],{"class":113},[103,170522,149870],{"class":218},[103,170524,12425],{"class":113},[103,170526,69114],{"class":218},[103,170528,51427],{"class":113},[103,170530,763],{"class":162},[103,170532,12425],{"class":113},[103,170534,151454],{"class":218},[103,170536,51427],{"class":113},[103,170538,1102],{"class":162},[103,170540,165134],{"class":113},[103,170542,170543],{"class":105,"line":1716},[103,170544,170545],{"class":113},"save_students(students)\n",[103,170547,170548,170550,170552,170555],{"class":105,"line":1721},[103,170549,30405],{"class":162},[103,170551,114],{"class":113},[103,170553,170554],{"class":218},"\"保存成功\"",[103,170556,120],{"class":113},[45,170558,170560],{"id":170559},"_814-易错点","8.14 易错点",[57,170562,170563,170567,170573,170578,170585,170592],{},[60,170564,170565,168826],{},[100,170566,908],{},[60,170568,170569,170570,28375],{},"读写中文要指定 ",[100,170571,170572],{},"encoding=\"utf-8\"",[60,170574,170575,170576,28375],{},"打开文件后要关闭，推荐使用 ",[100,170577,107823],{},[60,170579,170580,170581,170584],{},"读取大文件不要直接 ",[100,170582,170583],{},"read()"," 全部内容。",[60,170586,170587,170588,170591],{},"Windows 写 CSV 时建议加 ",[100,170589,170590],{},"newline=\"\"","，避免空行。",[60,170593,170594],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[45,170596,170598],{"id":170597},"_815-本章练习","8.15 本章练习",[57,170600,170601,170608,170613,170616,170619],{},[60,170602,170603,170604,170607],{},"写入一个 ",[100,170605,170606],{},"students.txt","，每行保存一个学生姓名。",[60,170609,104345,170610,170612],{},[100,170611,170606],{}," 并输出所有学生。",[60,170614,170615],{},"把学生列表保存为 JSON 文件。",[60,170617,170618],{},"从 JSON 文件读取学生数据，计算平均分。",[60,170620,170621,170622,170625,170626,170629],{},"写一个日志函数 ",[100,170623,170624],{},"write_log(message)","，每次调用向 ",[100,170627,170628],{},"app.log"," 追加一行。",[5116,170631,170632],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":24,"searchDepth":25,"depth":25,"links":170634},[170635,170636,170640,170641,170647,170648,170649,170650,170651,170652,170653,170654,170655,170656,170657],{"id":168146,"depth":25,"text":168147},{"id":168187,"depth":25,"text":168188,"children":170637},[170638,170639],{"id":168191,"depth":1168,"text":168192},{"id":168225,"depth":1168,"text":168226},{"id":168339,"depth":25,"text":168340},{"id":168432,"depth":25,"text":168433,"children":170642},[170643,170644,170645,170646],{"id":168436,"depth":1168,"text":168437},{"id":168523,"depth":1168,"text":168524},{"id":168593,"depth":1168,"text":168594},{"id":168687,"depth":1168,"text":168688},{"id":168757,"depth":25,"text":168758},{"id":168820,"depth":25,"text":168821},{"id":168981,"depth":25,"text":168982},{"id":169044,"depth":25,"text":169045},{"id":169160,"depth":25,"text":169161},{"id":169370,"depth":25,"text":169371},{"id":169682,"depth":25,"text":169683},{"id":170093,"depth":25,"text":170094},{"id":170311,"depth":25,"text":170312},{"id":170559,"depth":25,"text":170560},{"id":170597,"depth":25,"text":170598},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168138,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170664,"title":170665,"body":170666,"description":27,"extension":28,"meta":172852,"navigation":30,"path":172853,"seo":172854,"stem":172855,"__hash__":172856},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170667,"toc":172819},[170668,170671,170675,170678,170681,170773,170775,170794,170799,170803,170806,170809,170838,170845,170848,170852,170855,170884,170886,170938,170944,170997,171001,171099,171102,171169,171173,171230,171232,171238,171242,171247,171253,171344,171349,171353,171356,171434,171437,171475,171479,171597,171600,171604,171607,171652,171655,171659,171664,171670,171720,171723,171754,171758,171762,171792,171796,171831,171835,171870,171910,171914,171930,171933,171937,171941,172020,172024,172065,172069,172124,172128,172162,172166,172196,172205,172212,172218,172275,172278,172286,172289,172293,172300,172303,172309,172312,172329,172334,172338,172344,172357,172360,172397,172400,172411,172414,172428,172431,172445,172449,172456,172489,172492,172494,172500,172503,172507,172509,172515,172520,172693,172697,172760,172764,172788,172792,172816],[10,170669,170665],{"id":170670},"_9-异常模块与包",[45,170672,170674],{"id":170673},"_91-什么是异常","9.1 什么是异常",[14,170676,170677],{},"异常是程序运行过程中出现的错误。",[14,170679,170680],{},"常见异常：",[251,170682,170683,170692],{},[254,170684,170685],{},[257,170686,170687,170690],{},[260,170688,170689],{},"异常",[260,170691,25859],{},[298,170693,170694,170704,170714,170723,170733,170743,170753,170763],{},[257,170695,170696,170701],{},[303,170697,170698],{},[100,170699,170700],{},"NameError",[303,170702,170703],{},"使用了未定义变量",[257,170705,170706,170711],{},[303,170707,170708],{},[100,170709,170710],{},"TypeError",[303,170712,170713],{},"类型不匹配",[257,170715,170716,170720],{},[303,170717,170718],{},[100,170719,154816],{},[303,170721,170722],{},"值不合法",[257,170724,170725,170730],{},[303,170726,170727],{},[100,170728,170729],{},"IndexError",[303,170731,170732],{},"列表索引越界",[257,170734,170735,170740],{},[303,170736,170737],{},[100,170738,170739],{},"KeyError",[303,170741,170742],{},"字典 key 不存在",[257,170744,170745,170750],{},[303,170746,170747],{},[100,170748,170749],{},"FileNotFoundError",[303,170751,170752],{},"文件不存在",[257,170754,170755,170760],{},[303,170756,170757],{},[100,170758,170759],{},"ZeroDivisionError",[303,170761,170762],{},"除数为 0",[257,170764,170765,170770],{},[303,170766,170767],{},[100,170768,170769],{},"ImportError",[303,170771,170772],{},"导入失败",[14,170774,15125],{},[94,170776,170778],{"className":30368,"code":170777,"language":30370,"meta":24,"style":24},"num = int(\"abc\")\n",[100,170779,170780],{"__ignoreMap":24},[103,170781,170782,170784,170786,170788,170790,170792],{"class":105,"line":106},[103,170783,155769],{"class":113},[103,170785,159],{"class":109},[103,170787,2371],{"class":162},[103,170789,114],{"class":113},[103,170791,155862],{"class":218},[103,170793,120],{"class":113},[14,170795,170796,170797,28375],{},"会触发 ",[100,170798,154816],{},[45,170800,170802],{"id":170801},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170804,170805],{},"如果不处理异常，程序会直接终止。",[14,170807,170808],{},"例如用户输入年龄：",[94,170810,170812],{"className":30368,"code":170811,"language":30370,"meta":24,"style":24},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[100,170813,170814,170832],{"__ignoreMap":24},[103,170815,170816,170818,170820,170822,170824,170826,170828,170830],{"class":105,"line":106},[103,170817,146528],{"class":113},[103,170819,159],{"class":109},[103,170821,2371],{"class":162},[103,170823,114],{"class":113},[103,170825,53811],{"class":162},[103,170827,114],{"class":113},[103,170829,152376],{"class":218},[103,170831,30487],{"class":113},[103,170833,170834,170836],{"class":105,"line":25},[103,170835,30405],{"class":162},[103,170837,155743],{"class":113},[14,170839,170840,170841,170844],{},"用户输入 ",[100,170842,170843],{},"abc","，程序就会报错退出。",[14,170846,170847],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[45,170849,170851],{"id":170850},"_93-try-except","9.3 try except",[14,170853,170854],{},"基础语法：",[94,170856,170858],{"className":30368,"code":170857,"language":30370,"meta":24,"style":24},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[100,170859,170860,170867,170872,170879],{"__ignoreMap":24},[103,170861,170862,170865],{"class":105,"line":106},[103,170863,170864],{"class":109},"try",[103,170866,3728],{"class":113},[103,170868,170869],{"class":105,"line":25},[103,170870,170871],{"class":113},"    可能出错的代码\n",[103,170873,170874,170877],{"class":105,"line":1168},[103,170875,170876],{"class":109},"except",[103,170878,3728],{"class":113},[103,170880,170881],{"class":105,"line":1183},[103,170882,170883],{"class":113},"    出错后的处理代码\n",[14,170885,15125],{},[94,170887,170889],{"className":30368,"code":170888,"language":30370,"meta":24,"style":24},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[100,170890,170891,170897,170915,170921,170927],{"__ignoreMap":24},[103,170892,170893,170895],{"class":105,"line":106},[103,170894,170864],{"class":109},[103,170896,3728],{"class":113},[103,170898,170899,170901,170903,170905,170907,170909,170911,170913],{"class":105,"line":25},[103,170900,152368],{"class":113},[103,170902,159],{"class":109},[103,170904,2371],{"class":162},[103,170906,114],{"class":113},[103,170908,53811],{"class":162},[103,170910,114],{"class":113},[103,170912,152376],{"class":218},[103,170914,30487],{"class":113},[103,170916,170917,170919],{"class":105,"line":1168},[103,170918,31289],{"class":162},[103,170920,155743],{"class":113},[103,170922,170923,170925],{"class":105,"line":1183},[103,170924,170876],{"class":109},[103,170926,3728],{"class":113},[103,170928,170929,170931,170933,170936],{"class":105,"line":1189},[103,170930,31289],{"class":162},[103,170932,114],{"class":113},[103,170934,170935],{"class":218},"\"年龄必须是数字\"",[103,170937,120],{"class":113},[14,170939,170940,170941,170943],{},"不建议裸写 ",[100,170942,170876],{},"，最好指定异常类型。",[94,170945,170947],{"className":30368,"code":170946,"language":30370,"meta":24,"style":24},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[100,170948,170949,170955,170973,170979,170987],{"__ignoreMap":24},[103,170950,170951,170953],{"class":105,"line":106},[103,170952,170864],{"class":109},[103,170954,3728],{"class":113},[103,170956,170957,170959,170961,170963,170965,170967,170969,170971],{"class":105,"line":25},[103,170958,152368],{"class":113},[103,170960,159],{"class":109},[103,170962,2371],{"class":162},[103,170964,114],{"class":113},[103,170966,53811],{"class":162},[103,170968,114],{"class":113},[103,170970,152376],{"class":218},[103,170972,30487],{"class":113},[103,170974,170975,170977],{"class":105,"line":1168},[103,170976,31289],{"class":162},[103,170978,155743],{"class":113},[103,170980,170981,170983,170985],{"class":105,"line":1183},[103,170982,170876],{"class":109},[103,170984,152208],{"class":162},[103,170986,3728],{"class":113},[103,170988,170989,170991,170993,170995],{"class":105,"line":1189},[103,170990,31289],{"class":162},[103,170992,114],{"class":113},[103,170994,170935],{"class":218},[103,170996,120],{"class":113},[45,170998,171000],{"id":170999},"_94-捕获多个异常","9.4 捕获多个异常",[94,171002,171004],{"className":30368,"code":171003,"language":30370,"meta":24,"style":24},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[100,171005,171006,171012,171033,171053,171060,171068,171079,171088],{"__ignoreMap":24},[103,171007,171008,171010],{"class":105,"line":106},[103,171009,170864],{"class":109},[103,171011,3728],{"class":113},[103,171013,171014,171017,171019,171021,171023,171025,171027,171029,171031],{"class":105,"line":25},[103,171015,171016],{"class":113},"    nums ",[103,171018,159],{"class":109},[103,171020,52216],{"class":113},[103,171022,331],{"class":162},[103,171024,12425],{"class":113},[103,171026,191],{"class":162},[103,171028,12425],{"class":113},[103,171030,185],{"class":162},[103,171032,33236],{"class":113},[103,171034,171035,171038,171040,171042,171044,171046,171048,171051],{"class":105,"line":1168},[103,171036,171037],{"class":113},"    index ",[103,171039,159],{"class":109},[103,171041,2371],{"class":162},[103,171043,114],{"class":113},[103,171045,53811],{"class":162},[103,171047,114],{"class":113},[103,171049,171050],{"class":218},"\"请输入索引:\"",[103,171052,30487],{"class":113},[103,171054,171055,171057],{"class":105,"line":1183},[103,171056,31289],{"class":162},[103,171058,171059],{"class":113},"(nums[index])\n",[103,171061,171062,171064,171066],{"class":105,"line":1189},[103,171063,170876],{"class":109},[103,171065,152208],{"class":162},[103,171067,3728],{"class":113},[103,171069,171070,171072,171074,171077],{"class":105,"line":1203},[103,171071,31289],{"class":162},[103,171073,114],{"class":113},[103,171075,171076],{"class":218},"\"索引必须是整数\"",[103,171078,120],{"class":113},[103,171080,171081,171083,171086],{"class":105,"line":1209},[103,171082,170876],{"class":109},[103,171084,171085],{"class":162}," IndexError",[103,171087,3728],{"class":113},[103,171089,171090,171092,171094,171097],{"class":105,"line":1300},[103,171091,31289],{"class":162},[103,171093,114],{"class":113},[103,171095,171096],{"class":218},"\"索引越界\"",[103,171098,120],{"class":113},[14,171100,171101],{},"多个异常使用相同处理逻辑：",[94,171103,171105],{"className":30368,"code":171104,"language":30370,"meta":24,"style":24},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[100,171106,171107,171113,171131,171144,171158],{"__ignoreMap":24},[103,171108,171109,171111],{"class":105,"line":106},[103,171110,170864],{"class":109},[103,171112,3728],{"class":113},[103,171114,171115,171117,171119,171121,171123,171125,171127,171129],{"class":105,"line":25},[103,171116,45583],{"class":113},[103,171118,159],{"class":109},[103,171120,2371],{"class":162},[103,171122,114],{"class":113},[103,171124,53811],{"class":162},[103,171126,114],{"class":113},[103,171128,155778],{"class":218},[103,171130,30487],{"class":113},[103,171132,171133,171135,171137,171139,171141],{"class":105,"line":1168},[103,171134,31289],{"class":162},[103,171136,114],{"class":113},[103,171138,559],{"class":162},[103,171140,156028],{"class":109},[103,171142,171143],{"class":113}," num)\n",[103,171145,171146,171148,171150,171152,171154,171156],{"class":105,"line":1183},[103,171147,170876],{"class":109},[103,171149,1647],{"class":113},[103,171151,154816],{"class":162},[103,171153,12425],{"class":113},[103,171155,170759],{"class":162},[103,171157,30776],{"class":113},[103,171159,171160,171162,171164,171167],{"class":105,"line":1189},[103,171161,31289],{"class":162},[103,171163,114],{"class":113},[103,171165,171166],{"class":218},"\"输入不合法\"",[103,171168,120],{"class":113},[45,171170,171172],{"id":171171},"_95-获取异常信息","9.5 获取异常信息",[94,171174,171176],{"className":30368,"code":171175,"language":30370,"meta":24,"style":24},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[100,171177,171178,171184,171198,171209],{"__ignoreMap":24},[103,171179,171180,171182],{"class":105,"line":106},[103,171181,170864],{"class":109},[103,171183,3728],{"class":113},[103,171185,171186,171188,171190,171192,171194,171196],{"class":105,"line":25},[103,171187,45583],{"class":113},[103,171189,159],{"class":109},[103,171191,2371],{"class":162},[103,171193,114],{"class":113},[103,171195,155862],{"class":218},[103,171197,120],{"class":113},[103,171199,171200,171202,171204,171206],{"class":105,"line":1168},[103,171201,170876],{"class":109},[103,171203,152208],{"class":162},[103,171205,64594],{"class":109},[103,171207,171208],{"class":113}," e:\n",[103,171210,171211,171213,171215,171217,171220,171222,171224,171226,171228],{"class":105,"line":1183},[103,171212,31289],{"class":162},[103,171214,114],{"class":113},[103,171216,166],{"class":109},[103,171218,171219],{"class":218},"\"出错了:",[103,171221,1009],{"class":162},[103,171223,188],{"class":113},[103,171225,1059],{"class":162},[103,171227,364],{"class":218},[103,171229,120],{"class":113},[14,171231,146439],{},[94,171233,171236],{"className":171234,"code":171235,"language":5177,"meta":24},[5175],"出错了:invalid literal for int() with base 10: 'abc'\n",[100,171237,171235],{"__ignoreMap":24},[45,171239,171241],{"id":171240},"_96-else和finally","9.6 else和finally",[14,171243,171244,171246],{},[100,171245,1690],{},"：没有异常时执行。",[14,171248,171249,171252],{},[100,171250,171251],{},"finally","：无论是否异常都会执行。",[94,171254,171256],{"className":30368,"code":171255,"language":30370,"meta":24,"style":24},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[100,171257,171258,171264,171282,171290,171300,171306,171327,171333],{"__ignoreMap":24},[103,171259,171260,171262],{"class":105,"line":106},[103,171261,170864],{"class":109},[103,171263,3728],{"class":113},[103,171265,171266,171268,171270,171272,171274,171276,171278,171280],{"class":105,"line":25},[103,171267,45583],{"class":113},[103,171269,159],{"class":109},[103,171271,2371],{"class":162},[103,171273,114],{"class":113},[103,171275,53811],{"class":162},[103,171277,114],{"class":113},[103,171279,155778],{"class":218},[103,171281,30487],{"class":113},[103,171283,171284,171286,171288],{"class":105,"line":1168},[103,171285,170876],{"class":109},[103,171287,152208],{"class":162},[103,171289,3728],{"class":113},[103,171291,171292,171294,171296,171298],{"class":105,"line":1183},[103,171293,31289],{"class":162},[103,171295,114],{"class":113},[103,171297,153196],{"class":218},[103,171299,120],{"class":113},[103,171301,171302,171304],{"class":105,"line":1189},[103,171303,1690],{"class":109},[103,171305,3728],{"class":113},[103,171307,171308,171310,171312,171314,171317,171319,171321,171323,171325],{"class":105,"line":1203},[103,171309,31289],{"class":162},[103,171311,114],{"class":113},[103,171313,166],{"class":109},[103,171315,171316],{"class":218},"\"输入正确:",[103,171318,1009],{"class":162},[103,171320,1654],{"class":113},[103,171322,1059],{"class":162},[103,171324,364],{"class":218},[103,171326,120],{"class":113},[103,171328,171329,171331],{"class":105,"line":1209},[103,171330,171251],{"class":109},[103,171332,3728],{"class":113},[103,171334,171335,171337,171339,171342],{"class":105,"line":1300},[103,171336,31289],{"class":162},[103,171338,114],{"class":113},[103,171340,171341],{"class":218},"\"程序结束\"",[103,171343,120],{"class":113},[14,171345,171346,171348],{},[100,171347,171251],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[45,171350,171352],{"id":171351},"_97-抛出异常","9.7 抛出异常",[14,171354,171355],{},"程序可以主动抛出异常。",[94,171357,171359],{"className":30368,"code":171358,"language":30370,"meta":24,"style":24},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[100,171360,171361,171370,171382,171395,171415,171419,171423],{"__ignoreMap":24},[103,171362,171363,171365,171368],{"class":105,"line":106},[103,171364,31937],{"class":109},[103,171366,171367],{"class":1952}," set_age",[103,171369,161397],{"class":113},[103,171371,171372,171374,171376,171378,171380],{"class":105,"line":25},[103,171373,3090],{"class":109},[103,171375,15697],{"class":113},[103,171377,1023],{"class":109},[103,171379,4082],{"class":162},[103,171381,3728],{"class":113},[103,171383,171384,171386,171388,171390,171393],{"class":105,"line":1168},[103,171385,103422],{"class":109},[103,171387,152208],{"class":162},[103,171389,114],{"class":113},[103,171391,171392],{"class":218},"\"年龄不能为负数\"",[103,171394,120],{"class":113},[103,171396,171397,171399,171401,171403,171405,171407,171409,171411,171413],{"class":105,"line":1183},[103,171398,31289],{"class":162},[103,171400,114],{"class":113},[103,171402,166],{"class":109},[103,171404,161965],{"class":218},[103,171406,1009],{"class":162},[103,171408,70211],{"class":113},[103,171410,1059],{"class":162},[103,171412,364],{"class":218},[103,171414,120],{"class":113},[103,171416,171417],{"class":105,"line":1189},[103,171418,2389],{"emptyLinePlaceholder":30},[103,171420,171421],{"class":105,"line":1203},[103,171422,2389],{"emptyLinePlaceholder":30},[103,171424,171425,171428,171430,171432],{"class":105,"line":1209},[103,171426,171427],{"class":113},"set_age(",[103,171429,645],{"class":109},[103,171431,331],{"class":162},[103,171433,120],{"class":113},[14,171435,171436],{},"调用者可以捕获：",[94,171438,171440],{"className":30368,"code":171439,"language":30370,"meta":24,"style":24},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[100,171441,171442,171448,171459,171469],{"__ignoreMap":24},[103,171443,171444,171446],{"class":105,"line":106},[103,171445,170864],{"class":109},[103,171447,3728],{"class":113},[103,171449,171450,171453,171455,171457],{"class":105,"line":25},[103,171451,171452],{"class":113},"    set_age(",[103,171454,645],{"class":109},[103,171456,331],{"class":162},[103,171458,120],{"class":113},[103,171460,171461,171463,171465,171467],{"class":105,"line":1168},[103,171462,170876],{"class":109},[103,171464,152208],{"class":162},[103,171466,64594],{"class":109},[103,171468,171208],{"class":113},[103,171470,171471,171473],{"class":105,"line":1183},[103,171472,31289],{"class":162},[103,171474,66989],{"class":113},[45,171476,171478],{"id":171477},"_98-自定义异常","9.8 自定义异常",[94,171480,171482],{"className":30368,"code":171481,"language":30370,"meta":24,"style":24},"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",[100,171483,171484,171498,171502,171506,171510,171518,171528,171539,171549,171553,171557,171563,171580,171591],{"__ignoreMap":24},[103,171485,171486,171488,171491,171493,171496],{"class":105,"line":106},[103,171487,14684],{"class":109},[103,171489,171490],{"class":1952}," BalanceNotEnoughError",[103,171492,114],{"class":113},[103,171494,171495],{"class":162},"Exception",[103,171497,30776],{"class":113},[103,171499,171500],{"class":105,"line":25},[103,171501,149519],{"class":109},[103,171503,171504],{"class":105,"line":1168},[103,171505,2389],{"emptyLinePlaceholder":30},[103,171507,171508],{"class":105,"line":1183},[103,171509,2389],{"emptyLinePlaceholder":30},[103,171511,171512,171514,171516],{"class":105,"line":1189},[103,171513,31937],{"class":109},[103,171515,150168],{"class":1952},[103,171517,162794],{"class":113},[103,171519,171520,171522,171524,171526],{"class":105,"line":1203},[103,171521,3090],{"class":109},[103,171523,150124],{"class":113},[103,171525,1073],{"class":109},[103,171527,162571],{"class":113},[103,171529,171530,171532,171535,171537],{"class":105,"line":1209},[103,171531,103422],{"class":109},[103,171533,171534],{"class":113}," BalanceNotEnoughError(",[103,171536,150219],{"class":218},[103,171538,120],{"class":113},[103,171540,171541,171543,171545,171547],{"class":105,"line":1300},[103,171542,4079],{"class":109},[103,171544,162801],{"class":113},[103,171546,645],{"class":109},[103,171548,150157],{"class":113},[103,171550,171551],{"class":105,"line":1306},[103,171552,2389],{"emptyLinePlaceholder":30},[103,171554,171555],{"class":105,"line":1318},[103,171556,2389],{"emptyLinePlaceholder":30},[103,171558,171559,171561],{"class":105,"line":1601},[103,171560,170864],{"class":109},[103,171562,3728],{"class":113},[103,171564,171565,171567,171569,171572,171574,171576,171578],{"class":105,"line":1606},[103,171566,162472],{"class":113},[103,171568,159],{"class":109},[103,171570,171571],{"class":113}," withdraw(",[103,171573,424],{"class":162},[103,171575,12425],{"class":113},[103,171577,1711],{"class":162},[103,171579,120],{"class":113},[103,171581,171582,171584,171587,171589],{"class":105,"line":1612},[103,171583,170876],{"class":109},[103,171585,171586],{"class":113}," BalanceNotEnoughError ",[103,171588,31373],{"class":109},[103,171590,171208],{"class":113},[103,171592,171593,171595],{"class":105,"line":1617},[103,171594,31289],{"class":162},[103,171596,66989],{"class":113},[14,171598,171599],{},"入门阶段大多数情况使用内置异常即可。",[45,171601,171603],{"id":171602},"_99-traceback","9.9 traceback",[14,171605,171606],{},"调试时可以输出完整异常堆栈。",[94,171608,171610],{"className":30368,"code":171609,"language":30370,"meta":24,"style":24},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[100,171611,171612,171619,171623,171629,171639,171647],{"__ignoreMap":24},[103,171613,171614,171616],{"class":105,"line":106},[103,171615,30382],{"class":109},[103,171617,171618],{"class":113}," traceback\n",[103,171620,171621],{"class":105,"line":25},[103,171622,2389],{"emptyLinePlaceholder":30},[103,171624,171625,171627],{"class":105,"line":1168},[103,171626,170864],{"class":109},[103,171628,3728],{"class":113},[103,171630,171631,171633,171635,171637],{"class":105,"line":1183},[103,171632,1974],{"class":162},[103,171634,114],{"class":113},[103,171636,155862],{"class":218},[103,171638,120],{"class":113},[103,171640,171641,171643,171645],{"class":105,"line":1189},[103,171642,170876],{"class":109},[103,171644,152208],{"class":162},[103,171646,3728],{"class":113},[103,171648,171649],{"class":105,"line":1203},[103,171650,171651],{"class":113},"    traceback.print_exc()\n",[14,171653,171654],{},"日志系统中常把异常堆栈记录到文件。",[45,171656,171658],{"id":171657},"_910-什么是模块","9.10 什么是模块",[14,171660,171661,171662,125965],{},"模块就是一个 ",[100,171663,146334],{},[14,171665,171666,171667,24608],{},"例如创建 ",[100,171668,171669],{},"my_math.py",[94,171671,171673],{"className":30368,"code":171672,"language":30370,"meta":24,"style":24},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[100,171674,171675,171683,171693,171697,171701,171710],{"__ignoreMap":24},[103,171676,171677,171679,171681],{"class":105,"line":106},[103,171678,31937],{"class":109},[103,171680,5199],{"class":1952},[103,171682,151075],{"class":113},[103,171684,171685,171687,171689,171691],{"class":105,"line":25},[103,171686,4079],{"class":109},[103,171688,10859],{"class":113},[103,171690,594],{"class":109},[103,171692,151086],{"class":113},[103,171694,171695],{"class":105,"line":1168},[103,171696,2389],{"emptyLinePlaceholder":30},[103,171698,171699],{"class":105,"line":1183},[103,171700,2389],{"emptyLinePlaceholder":30},[103,171702,171703,171705,171708],{"class":105,"line":1189},[103,171704,31937],{"class":109},[103,171706,171707],{"class":1952}," sub",[103,171709,151075],{"class":113},[103,171711,171712,171714,171716,171718],{"class":105,"line":1203},[103,171713,4079],{"class":109},[103,171715,10859],{"class":113},[103,171717,645],{"class":109},[103,171719,151086],{"class":113},[14,171721,171722],{},"在另一个文件中导入：",[94,171724,171726],{"className":30368,"code":171725,"language":30370,"meta":24,"style":24},"import my_math\n\nprint(my_math.add(1, 2))\n",[100,171727,171728,171735,171739],{"__ignoreMap":24},[103,171729,171730,171732],{"class":105,"line":106},[103,171731,30382],{"class":109},[103,171733,171734],{"class":113}," my_math\n",[103,171736,171737],{"class":105,"line":25},[103,171738,2389],{"emptyLinePlaceholder":30},[103,171740,171741,171743,171746,171748,171750,171752],{"class":105,"line":1168},[103,171742,30405],{"class":162},[103,171744,171745],{"class":113},"(my_math.add(",[103,171747,331],{"class":162},[103,171749,12425],{"class":113},[103,171751,191],{"class":162},[103,171753,30487],{"class":113},[45,171755,171757],{"id":171756},"_911-import导入","9.11 import导入",[74,171759,171761],{"id":171760},"_9111-导入模块","9.11.1 导入模块",[94,171763,171765],{"className":30368,"code":171764,"language":30370,"meta":24,"style":24},"import random\n\nprint(random.randint(1, 10))\n",[100,171766,171767,171773,171777],{"__ignoreMap":24},[103,171768,171769,171771],{"class":105,"line":106},[103,171770,30382],{"class":109},[103,171772,45318],{"class":113},[103,171774,171775],{"class":105,"line":25},[103,171776,2389],{"emptyLinePlaceholder":30},[103,171778,171779,171781,171784,171786,171788,171790],{"class":105,"line":1168},[103,171780,30405],{"class":162},[103,171782,171783],{"class":113},"(random.randint(",[103,171785,331],{"class":162},[103,171787,12425],{"class":113},[103,171789,559],{"class":162},[103,171791,30487],{"class":113},[74,171793,171795],{"id":171794},"_9112-导入指定内容","9.11.2 导入指定内容",[94,171797,171799],{"className":30368,"code":171798,"language":30370,"meta":24,"style":24},"from random import randint\n\nprint(randint(1, 10))\n",[100,171800,171801,171812,171816],{"__ignoreMap":24},[103,171802,171803,171805,171807,171809],{"class":105,"line":106},[103,171804,30727],{"class":109},[103,171806,57786],{"class":113},[103,171808,30382],{"class":109},[103,171810,171811],{"class":113}," randint\n",[103,171813,171814],{"class":105,"line":25},[103,171815,2389],{"emptyLinePlaceholder":30},[103,171817,171818,171820,171823,171825,171827,171829],{"class":105,"line":1168},[103,171819,30405],{"class":162},[103,171821,171822],{"class":113},"(randint(",[103,171824,331],{"class":162},[103,171826,12425],{"class":113},[103,171828,559],{"class":162},[103,171830,30487],{"class":113},[74,171832,171834],{"id":171833},"_9113-起别名","9.11.3 起别名",[94,171836,171838],{"className":30368,"code":171837,"language":30370,"meta":24,"style":24},"import random as rd\n\nprint(rd.randint(1, 10))\n",[100,171839,171840,171851,171855],{"__ignoreMap":24},[103,171841,171842,171844,171846,171848],{"class":105,"line":106},[103,171843,30382],{"class":109},[103,171845,57786],{"class":113},[103,171847,31373],{"class":109},[103,171849,171850],{"class":113}," rd\n",[103,171852,171853],{"class":105,"line":25},[103,171854,2389],{"emptyLinePlaceholder":30},[103,171856,171857,171859,171862,171864,171866,171868],{"class":105,"line":1168},[103,171858,30405],{"class":162},[103,171860,171861],{"class":113},"(rd.randint(",[103,171863,331],{"class":162},[103,171865,12425],{"class":113},[103,171867,559],{"class":162},[103,171869,30487],{"class":113},[94,171871,171873],{"className":30368,"code":171872,"language":30370,"meta":24,"style":24},"from random import randint as rint\n\nprint(rint(1, 10))\n",[100,171874,171875,171891,171895],{"__ignoreMap":24},[103,171876,171877,171879,171881,171883,171886,171888],{"class":105,"line":106},[103,171878,30727],{"class":109},[103,171880,57786],{"class":113},[103,171882,30382],{"class":109},[103,171884,171885],{"class":113}," randint ",[103,171887,31373],{"class":109},[103,171889,171890],{"class":113}," rint\n",[103,171892,171893],{"class":105,"line":25},[103,171894,2389],{"emptyLinePlaceholder":30},[103,171896,171897,171899,171902,171904,171906,171908],{"class":105,"line":1168},[103,171898,30405],{"class":162},[103,171900,171901],{"class":113},"(rint(",[103,171903,331],{"class":162},[103,171905,12425],{"class":113},[103,171907,559],{"class":162},[103,171909,30487],{"class":113},[74,171911,171913],{"id":171912},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[94,171915,171917],{"className":30368,"code":171916,"language":30370,"meta":24,"style":24},"from random import *\n",[100,171918,171919],{"__ignoreMap":24},[103,171920,171921,171923,171925,171927],{"class":105,"line":106},[103,171922,30727],{"class":109},[103,171924,57786],{"class":113},[103,171926,30382],{"class":109},[103,171928,171929],{"class":109}," *\n",[14,171931,171932],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[45,171934,171936],{"id":171935},"_912-常用内置模块","9.12 常用内置模块",[74,171938,171940],{"id":171939},"_9121-random","9.12.1 random",[94,171942,171944],{"className":30368,"code":171943,"language":30370,"meta":24,"style":24},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[100,171945,171946,171952,171956,171970,171989],{"__ignoreMap":24},[103,171947,171948,171950],{"class":105,"line":106},[103,171949,30382],{"class":109},[103,171951,45318],{"class":113},[103,171953,171954],{"class":105,"line":25},[103,171955,2389],{"emptyLinePlaceholder":30},[103,171957,171958,171960,171962,171964,171966,171968],{"class":105,"line":1168},[103,171959,30405],{"class":162},[103,171961,171783],{"class":113},[103,171963,331],{"class":162},[103,171965,12425],{"class":113},[103,171967,559],{"class":162},[103,171969,30487],{"class":113},[103,171971,171972,171974,171977,171979,171981,171983,171985,171987],{"class":105,"line":1183},[103,171973,30405],{"class":162},[103,171975,171976],{"class":113},"(random.choice([",[103,171978,149870],{"class":218},[103,171980,12425],{"class":113},[103,171982,150918],{"class":218},[103,171984,12425],{"class":113},[103,171986,159713],{"class":218},[103,171988,33133],{"class":113},[103,171990,171991,171993,171996,171998,172000,172002,172004,172006,172008,172010,172012,172014,172016,172018],{"class":105,"line":1189},[103,171992,30405],{"class":162},[103,171994,171995],{"class":113},"(random.sample([",[103,171997,331],{"class":162},[103,171999,12425],{"class":113},[103,172001,191],{"class":162},[103,172003,12425],{"class":113},[103,172005,185],{"class":162},[103,172007,12425],{"class":113},[103,172009,406],{"class":162},[103,172011,12425],{"class":113},[103,172013,432],{"class":162},[103,172015,112192],{"class":113},[103,172017,191],{"class":162},[103,172019,30487],{"class":113},[74,172021,172023],{"id":172022},"_9122-time","9.12.2 time",[94,172025,172027],{"className":30368,"code":172026,"language":30370,"meta":24,"style":24},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[100,172028,172029,172035,172039,172046,172054],{"__ignoreMap":24},[103,172030,172031,172033],{"class":105,"line":106},[103,172032,30382],{"class":109},[103,172034,31819],{"class":113},[103,172036,172037],{"class":105,"line":25},[103,172038,2389],{"emptyLinePlaceholder":30},[103,172040,172041,172043],{"class":105,"line":1168},[103,172042,30405],{"class":162},[103,172044,172045],{"class":113},"(time.time())\n",[103,172047,172048,172050,172052],{"class":105,"line":1183},[103,172049,95061],{"class":113},[103,172051,331],{"class":162},[103,172053,120],{"class":113},[103,172055,172056,172058,172060,172063],{"class":105,"line":1189},[103,172057,30405],{"class":162},[103,172059,114],{"class":113},[103,172061,172062],{"class":218},"\"1秒后执行\"",[103,172064,120],{"class":113},[74,172066,172068],{"id":172067},"_9123-datetime","9.12.3 datetime",[94,172070,172072],{"className":30368,"code":172071,"language":30370,"meta":24,"style":24},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[100,172073,172074,172086,172090,172100,172107],{"__ignoreMap":24},[103,172075,172076,172078,172081,172083],{"class":105,"line":106},[103,172077,30727],{"class":109},[103,172079,172080],{"class":113}," datetime ",[103,172082,30382],{"class":109},[103,172084,172085],{"class":113}," datetime\n",[103,172087,172088],{"class":105,"line":25},[103,172089,2389],{"emptyLinePlaceholder":30},[103,172091,172092,172095,172097],{"class":105,"line":1168},[103,172093,172094],{"class":113},"now ",[103,172096,159],{"class":109},[103,172098,172099],{"class":113}," datetime.now()\n",[103,172101,172102,172104],{"class":105,"line":1183},[103,172103,30405],{"class":162},[103,172105,172106],{"class":113},"(now)\n",[103,172108,172109,172111,172114,172117,172119,172122],{"class":105,"line":1189},[103,172110,30405],{"class":162},[103,172112,172113],{"class":113},"(now.strftime(",[103,172115,172116],{"class":218},"\"%Y-%m-",[103,172118,156673],{"class":162},[103,172120,172121],{"class":218}," %H:%M:%S\"",[103,172123,30487],{"class":113},[74,172125,172127],{"id":172126},"_9124-os","9.12.4 os",[94,172129,172131],{"className":30368,"code":172130,"language":30370,"meta":24,"style":24},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[100,172132,172133,172139,172143,172150],{"__ignoreMap":24},[103,172134,172135,172137],{"class":105,"line":106},[103,172136,30382],{"class":109},[103,172138,45295],{"class":113},[103,172140,172141],{"class":105,"line":25},[103,172142,2389],{"emptyLinePlaceholder":30},[103,172144,172145,172147],{"class":105,"line":1168},[103,172146,30405],{"class":162},[103,172148,172149],{"class":113},"(os.getcwd())\n",[103,172151,172152,172154,172157,172160],{"class":105,"line":1183},[103,172153,30405],{"class":162},[103,172155,172156],{"class":113},"(os.listdir(",[103,172158,172159],{"class":218},"\".\"",[103,172161,30487],{"class":113},[74,172163,172165],{"id":172164},"_9125-sys","9.12.5 sys",[94,172167,172169],{"className":30368,"code":172168,"language":30370,"meta":24,"style":24},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[100,172170,172171,172178,172182,172189],{"__ignoreMap":24},[103,172172,172173,172175],{"class":105,"line":106},[103,172174,30382],{"class":109},[103,172176,172177],{"class":113}," sys\n",[103,172179,172180],{"class":105,"line":25},[103,172181,2389],{"emptyLinePlaceholder":30},[103,172183,172184,172186],{"class":105,"line":1168},[103,172185,30405],{"class":162},[103,172187,172188],{"class":113},"(sys.version)\n",[103,172190,172191,172193],{"class":105,"line":1183},[103,172192,30405],{"class":162},[103,172194,172195],{"class":113},"(sys.path)\n",[45,172197,172199,172200,172202,172203,364],{"id":172198},"_913-if-name-main","9.13 if ",[263,172201,79800],{}," == \"",[263,172204,102048],{},[14,172206,172207,172208,172211],{},"模块被直接运行和被导入时，",[100,172209,172210],{},"__name__"," 的值不同。",[14,172213,172214,172215,24608],{},"创建 ",[100,172216,172217],{},"my_module.py",[94,172219,172221],{"className":30368,"code":172220,"language":30370,"meta":24,"style":24},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[100,172222,172223,172231,172241,172245,172249,172261],{"__ignoreMap":24},[103,172224,172225,172227,172229],{"class":105,"line":106},[103,172226,31937],{"class":109},[103,172228,5199],{"class":1952},[103,172230,151075],{"class":113},[103,172232,172233,172235,172237,172239],{"class":105,"line":25},[103,172234,4079],{"class":109},[103,172236,10859],{"class":113},[103,172238,594],{"class":109},[103,172240,151086],{"class":113},[103,172242,172243],{"class":105,"line":1168},[103,172244,2389],{"emptyLinePlaceholder":30},[103,172246,172247],{"class":105,"line":1183},[103,172248,2389],{"emptyLinePlaceholder":30},[103,172250,172251,172253,172255,172257,172259],{"class":105,"line":1189},[103,172252,1520],{"class":109},[103,172254,31210],{"class":162},[103,172256,101549],{"class":109},[103,172258,101552],{"class":218},[103,172260,3728],{"class":113},[103,172262,172263,172265,172267,172269,172271,172273],{"class":105,"line":1203},[103,172264,31289],{"class":162},[103,172266,166582],{"class":113},[103,172268,331],{"class":162},[103,172270,12425],{"class":113},[103,172272,191],{"class":162},[103,172274,30487],{"class":113},[14,172276,172277],{},"作用：",[57,172279,172280,172283],{},[60,172281,172282],{},"直接运行该文件时，执行测试代码。",[60,172284,172285],{},"被其他文件导入时，不执行测试代码。",[14,172287,172288],{},"这是写模块时很常用的习惯。",[45,172290,172292],{"id":172291},"_914-包","9.14 包",[14,172294,172295,172296,172299],{},"包是包含 ",[100,172297,172298],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172301,172302],{},"目录结构：",[94,172304,172307],{"className":172305,"code":172306,"language":5177,"meta":24},[5175],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[100,172308,172306],{"__ignoreMap":24},[14,172310,172311],{},"导入：",[94,172313,172315],{"className":30368,"code":172314,"language":30370,"meta":24,"style":24},"from utils.file_utils import read_file\n",[100,172316,172317],{"__ignoreMap":24},[103,172318,172319,172321,172324,172326],{"class":105,"line":106},[103,172320,30727],{"class":109},[103,172322,172323],{"class":113}," utils.file_utils ",[103,172325,30382],{"class":109},[103,172327,172328],{"class":113}," read_file\n",[14,172330,172331,172333],{},[100,172332,172298],{}," 可以为空，也可以写包初始化逻辑。",[45,172335,172337],{"id":172336},"_915-第三方包","9.15 第三方包",[14,172339,172340,172341,172343],{},"第三方包通过 ",[100,172342,23821],{}," 安装。",[94,172345,172347],{"className":23812,"code":172346,"language":23814,"meta":24,"style":24},"pip install requests\n",[100,172348,172349],{"__ignoreMap":24},[103,172350,172351,172353,172355],{"class":105,"line":106},[103,172352,23821],{"class":1952},[103,172354,23824],{"class":218},[103,172356,146080],{"class":218},[14,172358,172359],{},"使用：",[94,172361,172363],{"className":30368,"code":172362,"language":30370,"meta":24,"style":24},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[100,172364,172365,172371,172375,172390],{"__ignoreMap":24},[103,172366,172367,172369],{"class":105,"line":106},[103,172368,30382],{"class":109},[103,172370,146080],{"class":113},[103,172372,172373],{"class":105,"line":25},[103,172374,2389],{"emptyLinePlaceholder":30},[103,172376,172377,172380,172382,172385,172388],{"class":105,"line":1168},[103,172378,172379],{"class":113},"response ",[103,172381,159],{"class":109},[103,172383,172384],{"class":113}," requests.get(",[103,172386,172387],{"class":218},"\"https:\u002F\u002Fwww.example.com\"",[103,172389,120],{"class":113},[103,172391,172392,172394],{"class":105,"line":1183},[103,172393,30405],{"class":162},[103,172395,172396],{"class":113},"(response.status_code)\n",[14,172398,172399],{},"查看已安装包：",[94,172401,172403],{"className":23812,"code":172402,"language":23814,"meta":24,"style":24},"pip list\n",[100,172404,172405],{"__ignoreMap":24},[103,172406,172407,172409],{"class":105,"line":106},[103,172408,23821],{"class":1952},[103,172410,118945],{"class":218},[14,172412,172413],{},"导出项目依赖：",[94,172415,172416],{"className":23812,"code":146275,"language":23814,"meta":24,"style":24},[100,172417,172418],{"__ignoreMap":24},[103,172419,172420,172422,172424,172426],{"class":105,"line":106},[103,172421,23821],{"class":1952},[103,172423,146284],{"class":218},[103,172425,26212],{"class":109},[103,172427,146289],{"class":218},[14,172429,172430],{},"安装项目依赖：",[94,172432,172433],{"className":23812,"code":146295,"language":23814,"meta":24,"style":24},[100,172434,172435],{"__ignoreMap":24},[103,172436,172437,172439,172441,172443],{"class":105,"line":106},[103,172438,23821],{"class":1952},[103,172440,23824],{"class":218},[103,172442,119629],{"class":162},[103,172444,146289],{"class":218},[45,172446,172448],{"id":172447},"_916-模块搜索路径","9.16 模块搜索路径",[14,172450,172451,172452,172455],{},"Python 导入模块时会在 ",[100,172453,172454],{},"sys.path"," 中查找。",[94,172457,172459],{"className":30368,"code":172458,"language":30370,"meta":24,"style":24},"import sys\n\nfor path in sys.path:\n    print(path)\n",[100,172460,172461,172467,172471,172483],{"__ignoreMap":24},[103,172462,172463,172465],{"class":105,"line":106},[103,172464,30382],{"class":109},[103,172466,172177],{"class":113},[103,172468,172469],{"class":105,"line":25},[103,172470,2389],{"emptyLinePlaceholder":30},[103,172472,172473,172475,172478,172480],{"class":105,"line":1168},[103,172474,3014],{"class":109},[103,172476,172477],{"class":113}," path ",[103,172479,26033],{"class":109},[103,172481,172482],{"class":113}," sys.path:\n",[103,172484,172485,172487],{"class":105,"line":1183},[103,172486,31289],{"class":162},[103,172488,169211],{"class":113},[14,172490,172491],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172493,157605],{},[94,172495,172498],{"className":172496,"code":172497,"language":5177,"meta":24},[5175],"random.py\njson.py\ntime.py\n",[100,172499,172497],{"__ignoreMap":24},[14,172501,172502],{},"这些文件名可能导致导入异常。",[45,172504,172506],{"id":172505},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172508,172302],{},[94,172510,172513],{"className":172511,"code":172512,"language":5177,"meta":24},[5175],"student_system\u002F\n  main.py\n  services\u002F\n    __init__.py\n    student_service.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[100,172514,172512],{"__ignoreMap":24},[14,172516,172517,24608],{},[100,172518,172519],{},"utils\u002Ffile_utils.py",[94,172521,172523],{"className":30368,"code":172522,"language":30370,"meta":24,"style":24},"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",[100,172524,172525,172531,172541,172545,172549,172559,172569,172577,172583,172587,172614,172624,172628,172632,172642,172668],{"__ignoreMap":24},[103,172526,172527,172529],{"class":105,"line":106},[103,172528,30382],{"class":109},[103,172530,147073],{"class":113},[103,172532,172533,172535,172537,172539],{"class":105,"line":25},[103,172534,30727],{"class":109},[103,172536,108301],{"class":113},[103,172538,30382],{"class":109},[103,172540,108306],{"class":113},[103,172542,172543],{"class":105,"line":1168},[103,172544,2389],{"emptyLinePlaceholder":30},[103,172546,172547],{"class":105,"line":1183},[103,172548,2389],{"emptyLinePlaceholder":30},[103,172550,172551,172553,172556],{"class":105,"line":1189},[103,172552,31937],{"class":109},[103,172554,172555],{"class":1952}," read_json",[103,172557,172558],{"class":113},"(path):\n",[103,172560,172561,172564,172566],{"class":105,"line":1203},[103,172562,172563],{"class":113},"    path ",[103,172565,159],{"class":109},[103,172567,172568],{"class":113}," Path(path)\n",[103,172570,172571,172573,172575],{"class":105,"line":1209},[103,172572,3090],{"class":109},[103,172574,38920],{"class":109},[103,172576,169292],{"class":113},[103,172578,172579,172581],{"class":105,"line":1300},[103,172580,14742],{"class":109},[103,172582,51828],{"class":113},[103,172584,172585],{"class":105,"line":1306},[103,172586,2389],{"emptyLinePlaceholder":30},[103,172588,172589,172591,172593,172596,172598,172600,172602,172604,172606,172608,172610,172612],{"class":105,"line":1318},[103,172590,34168],{"class":109},[103,172592,146773],{"class":162},[103,172594,172595],{"class":113},"(path, ",[103,172597,146783],{"class":218},[103,172599,12425],{"class":113},[103,172601,146788],{"class":5206},[103,172603,159],{"class":109},[103,172605,146793],{"class":218},[103,172607,13704],{"class":113},[103,172609,31373],{"class":109},[103,172611,148135],{"class":5206},[103,172613,3728],{"class":113},[103,172615,172616,172618,172620,172622],{"class":105,"line":1601},[103,172617,14742],{"class":109},[103,172619,148146],{"class":113},[103,172621,45344],{"class":5206},[103,172623,120],{"class":113},[103,172625,172626],{"class":105,"line":1606},[103,172627,2389],{"emptyLinePlaceholder":30},[103,172629,172630],{"class":105,"line":1612},[103,172631,2389],{"emptyLinePlaceholder":30},[103,172633,172634,172636,172639],{"class":105,"line":1617},[103,172635,31937],{"class":109},[103,172637,172638],{"class":1952}," write_json",[103,172640,172641],{"class":113},"(path, data):\n",[103,172643,172644,172646,172648,172650,172652,172654,172656,172658,172660,172662,172664,172666],{"class":105,"line":1631},[103,172645,34168],{"class":109},[103,172647,146773],{"class":162},[103,172649,172595],{"class":113},[103,172651,151958],{"class":218},[103,172653,12425],{"class":113},[103,172655,146788],{"class":5206},[103,172657,159],{"class":109},[103,172659,146793],{"class":218},[103,172661,13704],{"class":113},[103,172663,31373],{"class":109},[103,172665,148135],{"class":5206},[103,172667,3728],{"class":113},[103,172669,172670,172673,172675,172677,172679,172681,172683,172685,172687,172689,172691],{"class":105,"line":1636},[103,172671,172672],{"class":113},"        json.dump(data, ",[103,172674,45344],{"class":5206},[103,172676,12425],{"class":113},[103,172678,147119],{"class":5206},[103,172680,159],{"class":109},[103,172682,33977],{"class":162},[103,172684,12425],{"class":113},[103,172686,151994],{"class":5206},[103,172688,159],{"class":109},[103,172690,191],{"class":162},[103,172692,120],{"class":113},[14,172694,172695,24608],{},[100,172696,154589],{},[94,172698,172700],{"className":30368,"code":172699,"language":30370,"meta":24,"style":24},"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",[100,172701,172702,172713,172717,172730,172750],{"__ignoreMap":24},[103,172703,172704,172706,172708,172710],{"class":105,"line":106},[103,172705,30727],{"class":109},[103,172707,172323],{"class":113},[103,172709,30382],{"class":109},[103,172711,172712],{"class":113}," read_json, write_json\n",[103,172714,172715],{"class":105,"line":25},[103,172716,2389],{"emptyLinePlaceholder":30},[103,172718,172719,172721,172723,172726,172728],{"class":105,"line":1168},[103,172720,159698],{"class":113},[103,172722,159],{"class":109},[103,172724,172725],{"class":113}," read_json(",[103,172727,151813],{"class":218},[103,172729,120],{"class":113},[103,172731,172732,172734,172736,172738,172740,172742,172744,172746,172748],{"class":105,"line":1183},[103,172733,170516],{"class":113},[103,172735,62669],{"class":218},[103,172737,51427],{"class":113},[103,172739,149870],{"class":218},[103,172741,12425],{"class":113},[103,172743,151454],{"class":218},[103,172745,51427],{"class":113},[103,172747,1102],{"class":162},[103,172749,165134],{"class":113},[103,172751,172752,172755,172757],{"class":105,"line":1189},[103,172753,172754],{"class":113},"write_json(",[103,172756,151813],{"class":218},[103,172758,172759],{"class":113},", students)\n",[45,172761,172763],{"id":172762},"_918-易错点","9.18 易错点",[57,172765,172766,172769,172774,172779,172782,172785],{},[60,172767,172768],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[60,172770,172771,172772,28375],{},"能指定异常类型就不要裸写 ",[100,172773,170876],{},[60,172775,172776,172778],{},[100,172777,171251],{}," 无论是否出错都会执行。",[60,172780,172781],{},"模块文件名不要和标准库重名。",[60,172783,172784],{},"导入自己写的模块时，要注意运行目录。",[60,172786,172787],{},"第三方包要安装到当前解释器或虚拟环境中。",[45,172789,172791],{"id":172790},"_919-本章练习","9.19 本章练习",[57,172793,172794,172797,172800,172806,172813],{},[60,172795,172796],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[60,172798,172799],{},"写函数读取文件，如果文件不存在则返回空字符串。",[60,172801,172214,172802,172805],{},[100,172803,172804],{},"math_utils.py","，实现加减乘除函数并导入使用。",[60,172807,172808,172809,172812],{},"创建一个 ",[100,172810,172811],{},"utils"," 包，把 JSON 读写函数放进去。",[60,172814,172815],{},"写一个程序，捕获除零异常和输入格式异常。",[5116,172817,172818],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":24,"searchDepth":25,"depth":25,"links":172820},[172821,172822,172823,172824,172825,172826,172827,172828,172829,172830,172831,172837,172844,172846,172847,172848,172849,172850,172851],{"id":170673,"depth":25,"text":170674},{"id":170801,"depth":25,"text":170802},{"id":170850,"depth":25,"text":170851},{"id":170999,"depth":25,"text":171000},{"id":171171,"depth":25,"text":171172},{"id":171240,"depth":25,"text":171241},{"id":171351,"depth":25,"text":171352},{"id":171477,"depth":25,"text":171478},{"id":171602,"depth":25,"text":171603},{"id":171657,"depth":25,"text":171658},{"id":171756,"depth":25,"text":171757,"children":172832},[172833,172834,172835,172836],{"id":171760,"depth":1168,"text":171761},{"id":171794,"depth":1168,"text":171795},{"id":171833,"depth":1168,"text":171834},{"id":171912,"depth":1168,"text":171913},{"id":171935,"depth":25,"text":171936,"children":172838},[172839,172840,172841,172842,172843],{"id":171939,"depth":1168,"text":171940},{"id":172022,"depth":1168,"text":172023},{"id":172067,"depth":1168,"text":172068},{"id":172126,"depth":1168,"text":172127},{"id":172164,"depth":1168,"text":172165},{"id":172198,"depth":25,"text":172845},"9.13 if name == \"main\"",{"id":172291,"depth":25,"text":172292},{"id":172336,"depth":25,"text":172337},{"id":172447,"depth":25,"text":172448},{"id":172505,"depth":25,"text":172506},{"id":172762,"depth":25,"text":172763},{"id":172790,"depth":25,"text":172791},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170665,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172858,"title":172859,"body":172860,"description":173023,"extension":28,"meta":173024,"navigation":30,"path":173025,"seo":173026,"stem":173027,"__hash__":173028},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172861,"toc":173018},[172862,172865,172868,172871,172882,172884,172958,172961,172964,172967,172970,172973,172976,172979,172982,172985,172988],[10,172863,172859],{"id":172864},"python教程",[14,172866,172867],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172869,172870],{},"建议学习环境：",[57,172872,172873,172876,172879],{},[60,172874,172875],{},"Python 版本：Python 3.10 及以上。",[60,172877,172878],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[60,172880,172881],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[45,172883,117068],{"id":117068},[57,172885,172886,172892,172898,172904,172910,172916,172922,172928,172934,172940,172946,172952],{},[60,172887,172888],{},[17,172889,172891],{"href":172890},".\u002Fch1-Python","Python环境与第一个程序",[60,172893,172894],{},[17,172895,172897],{"href":172896},".\u002Fch2","基础语法、变量与字符串",[60,172899,172900],{},[17,172901,172903],{"href":172902},".\u002Fch3","判断语句",[60,172905,172906],{},[17,172907,172909],{"href":172908},".\u002Fch4","循环语句",[60,172911,172912],{},[17,172913,172915],{"href":172914},".\u002Fch5","函数基础",[60,172917,172918],{},[17,172919,172921],{"href":172920},".\u002Fch6","数据容器",[60,172923,172924],{},[17,172925,172927],{"href":172926},".\u002Fch7","函数进阶",[60,172929,172930],{},[17,172931,172933],{"href":172932},".\u002Fch8","文件操作",[60,172935,172936],{},[17,172937,172939],{"href":172938},".\u002Fch9","异常、模块与包",[60,172941,172942],{},[17,172943,172945],{"href":172944},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[60,172947,172948],{},[17,172949,172951],{"href":172950},".\u002Fch11","面向对象基础",[60,172953,172954],{},[17,172955,172957],{"href":172956},".\u002Fch12","综合案例与复习路线",[45,172959,172960],{"id":172960},"学习路线",[14,172962,172963],{},"第一阶段：能运行程序。",[14,172965,172966],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,172968,172969],{},"第二阶段：能组织数据。",[14,172971,172972],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,172974,172975],{},"第三阶段：能封装逻辑。",[14,172977,172978],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,172980,172981],{},"第四阶段：能做小项目。",[14,172983,172984],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[45,172986,172987],{"id":172987},"参考资料",[57,172989,172990,172997,173004,173011],{},[60,172991,172992,172993],{},"黑马程序员 Python 入门教程推荐：",[17,172994,172995],{"href":172995,"rel":172996},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[21],[60,172998,172999,173000],{},"Python 官方中文教程：",[17,173001,173002],{"href":173002,"rel":173003},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[21],[60,173005,173006,173007],{},"Python 标准库文档：",[17,173008,173009],{"href":173009,"rel":173010},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[21],[60,173012,173013,173014],{},"pyecharts 文档：",[17,173015,173016],{"href":173016,"rel":173017},"https:\u002F\u002Fpyecharts.org\u002F",[21],{"title":24,"searchDepth":25,"depth":25,"links":173019},[173020,173021,173022],{"id":117068,"depth":25,"text":117068},{"id":172960,"depth":25,"text":172960},{"id":172987,"depth":25,"text":172987},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23368},"\u002Fwiki\u002F2024-10-10-python",{"title":172859,"description":173023},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331462348]