[{"data":1,"prerenderedAt":173022},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy":3,"wiki-doc-nav":22},{"id":4,"title":5,"body":6,"description":13,"extension":14,"meta":15,"navigation":17,"path":18,"seo":19,"stem":20,"__hash__":21},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":8,"toc":9},"minimark",[],{"title":10,"searchDepth":11,"depth":11,"links":12},"",2,[],null,"md",{"category":16},"深度学习",true,"\u002Fwiki\u002F2025-08-14-numpy",{"title":5,"description":13},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",[23,5142,6250,7670,10659,12010,13499,14588,23351,23363,23962,23988,24112,24353,24418,24436,24449,24496,24620,24789,24988,25168,25373,25509,25604,25641,25654,25964,26705,27413,27434,28454,30085,30236,30249,30261,30562,50374,50389,50405,50438,53310,76658,92803,92824,92937,93058,93828,94491,94852,94890,94996,95096,95139,95165,95226,96880,96981,97006,97497,97997,99077,99360,100102,100604,100611,102627,104291,105794,107492,109409,111328,113350,116820,117252,117715,118464,121408,121756,121778,122134,125441,125453,125856,125879,126026,126193,126398,126699,127256,127913,129844,131442,132091,133585,135016,136251,137945,139697,142107,142223,143158,143369,144254,145489,145717,145730,146885,149297,151665,154986,157463,159107,160884,162897,165949,168129,170656,172850],{"id":24,"title":25,"body":26,"description":10,"extension":14,"meta":5137,"navigation":17,"path":5138,"seo":5139,"stem":5140,"__hash__":5141},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":27,"toc":5109},[28,32,37,41,45,58,62,67,70,73,76,79,82,117,121,124,127,130,133,186,190,209,211,225,228,236,239,1102,1109,1126,1130,1221,1225,1231,1320,1324,1362,1366,1430,1434,1438,1445,1456,1460,1465,1469,1474,1478,1483,1487,1491,1496,1766,1771,1909,1914,2171,2174,2182,2186,2191,2294,2297,2603,2612,2713,2716,2719,2722,2725,2985,2990,3130,3133,3312,3315,3443,3446,3598,3602,3607,3610,3621,3629,3632,3739,3743,3747,3752,3802,3807,3812,3836,3841,3894,3897,3902,4079,4084,4369,4374,4771,4775,4780,4837,4842,4850,4853,4993,4996,5105],[29,30,25],"h1",{"id":31},"_1基础入门",[33,34,36],"h2",{"id":35},"_11注释","1.1注释",[38,39,40],"p",{},"\u002F\u002F或者\u002F* *\u002F",[33,42,44],{"id":43},"_12命名","1.2命名",[46,47,48,52,55],"ol",{},[49,50,51],"li",{},"字母数字下划线",[49,53,54],{},"开头必须是字母或_",[49,56,57],{},"不能使用关键词",[33,59,61],{"id":60},"_13数据类型","1.3数据类型",[63,64,66],"h3",{"id":65},"_131整形","1.3.1整形",[38,68,69],{},"short 短整形 2",[38,71,72],{},"int 整形 4",[38,74,75],{},"long 长整形 win4 linux32位4 linux64位8",[38,77,78],{},"long long 长长整形 8",[38,80,81],{},"利用sizeof可以求数据类型占用的内存空间大小",[83,84,88],"pre",{"className":85,"code":86,"language":87,"meta":10,"style":10},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[89,90,91,110],"code",{"__ignoreMap":10},[92,93,96,100,104,107],"span",{"class":94,"line":95},"line",1,[92,97,99],{"class":98},"szBVR","sizeof",[92,101,103],{"class":102},"sVt8B","(",[92,105,106],{"class":98},"int",[92,108,109],{"class":102},")\n",[92,111,112,114],{"class":94,"line":11},[92,113,99],{"class":98},[92,115,116],{"class":102},"(num)\n",[63,118,120],{"id":119},"_132浮点型","1.3.2浮点型",[38,122,123],{},"float 单精度 4节 7位有效数字",[38,125,126],{},"double 双精度 8节 15-16有效数字",[38,128,129],{},"默认情况下，输出一个小数，会显示6位有效数字",[38,131,132],{},"注意点：",[83,134,136],{"className":85,"code":135,"language":87,"meta":10,"style":10},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[89,137,138,163],{"__ignoreMap":10},[92,139,140,143,146,149,153,156,159],{"class":94,"line":95},[92,141,142],{"class":98},"float",[92,144,145],{"class":102}," f1",[92,147,148],{"class":98},"=",[92,150,152],{"class":151},"sj4cs","3.14",[92,154,155],{"class":98},"f",[92,157,158],{"class":102},";",[92,160,162],{"class":161},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[92,164,165,167,170,172,175,178,181,183],{"class":94,"line":11},[92,166,142],{"class":98},[92,168,169],{"class":102}," f2",[92,171,148],{"class":98},[92,173,174],{"class":151},"3",[92,176,177],{"class":98},"e",[92,179,180],{"class":151},"2",[92,182,158],{"class":102},[92,184,185],{"class":161}," \u002F\u002F科学记数法\n",[63,187,189],{"id":188},"_133字符型","1.3.3字符型",[83,191,193],{"className":85,"code":192,"language":87,"meta":10,"style":10},"char ch='a'\n",[89,194,195],{"__ignoreMap":10},[92,196,197,200,203,205],{"class":94,"line":95},[92,198,199],{"class":98},"char",[92,201,202],{"class":102}," ch",[92,204,148],{"class":98},[92,206,208],{"class":207},"sZZnC","'a'\n",[38,210,132],{},[46,212,213,216,219,222],{},[49,214,215],{},"在显示字符型变量时，只能单引号，双引号x",[49,217,218],{},"单引号内只能一个字符，不能字符串",[49,220,221],{},"c和c++字符型变量只占用一个字符",[49,223,224],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[38,226,227],{},"ASCII码大致由以下两部分组成：",[46,229,230,233],{},[49,231,232],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[49,234,235],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[38,237,238],{},"ASCII码表格：",[240,241,242,286],"table",{},[243,244,245],"thead",{},[246,247,248,256,261,265,270,274,278,282],"tr",{},[249,250,251,255],"th",{},[252,253,254],"strong",{},"ASCII","值",[249,257,258],{},[252,259,260],{},"控制字符",[249,262,263,255],{},[252,264,254],{},[249,266,267],{},[252,268,269],{},"字符",[249,271,272,255],{},[252,273,254],{},[249,275,276],{},[252,277,269],{},[249,279,280,255],{},[252,281,254],{},[249,283,284],{},[252,285,269],{},[287,288,289,316,342,367,392,418,443,468,494,519,545,571,597,622,648,674,700,724,749,774,799,824,849,874,899,924,949,975,1000,1025,1050,1076],"tbody",{},[246,290,291,295,298,301,304,307,310,313],{},[292,293,294],"td",{},"0",[292,296,297],{},"NUT",[292,299,300],{},"32",[292,302,303],{},"(space)",[292,305,306],{},"64",[292,308,309],{},"@",[292,311,312],{},"96",[292,314,315],{},"、",[246,317,318,321,324,327,330,333,336,339],{},[292,319,320],{},"1",[292,322,323],{},"SOH",[292,325,326],{},"33",[292,328,329],{},"!",[292,331,332],{},"65",[292,334,335],{},"A",[292,337,338],{},"97",[292,340,341],{},"a",[246,343,344,346,349,352,355,358,361,364],{},[292,345,180],{},[292,347,348],{},"STX",[292,350,351],{},"34",[292,353,354],{},"\"",[292,356,357],{},"66",[292,359,360],{},"B",[292,362,363],{},"98",[292,365,366],{},"b",[246,368,369,371,374,377,380,383,386,389],{},[292,370,174],{},[292,372,373],{},"ETX",[292,375,376],{},"35",[292,378,379],{},"#",[292,381,382],{},"67",[292,384,385],{},"C",[292,387,388],{},"99",[292,390,391],{},"c",[246,393,394,397,400,403,406,409,412,415],{},[292,395,396],{},"4",[292,398,399],{},"EOT",[292,401,402],{},"36",[292,404,405],{},"$",[292,407,408],{},"68",[292,410,411],{},"D",[292,413,414],{},"100",[292,416,417],{},"d",[246,419,420,423,426,429,432,435,438,441],{},[292,421,422],{},"5",[292,424,425],{},"ENQ",[292,427,428],{},"37",[292,430,431],{},"%",[292,433,434],{},"69",[292,436,437],{},"E",[292,439,440],{},"101",[292,442,177],{},[246,444,445,448,451,454,457,460,463,466],{},[292,446,447],{},"6",[292,449,450],{},"ACK",[292,452,453],{},"38",[292,455,456],{},"&",[292,458,459],{},"70",[292,461,462],{},"F",[292,464,465],{},"102",[292,467,155],{},[246,469,470,473,476,479,482,485,488,491],{},[292,471,472],{},"7",[292,474,475],{},"BEL",[292,477,478],{},"39",[292,480,481],{},",",[292,483,484],{},"71",[292,486,487],{},"G",[292,489,490],{},"103",[292,492,493],{},"g",[246,495,496,499,502,505,507,510,513,516],{},[292,497,498],{},"8",[292,500,501],{},"BS",[292,503,504],{},"40",[292,506,103],{},[292,508,509],{},"72",[292,511,512],{},"H",[292,514,515],{},"104",[292,517,518],{},"h",[246,520,521,524,527,530,533,536,539,542],{},[292,522,523],{},"9",[292,525,526],{},"HT",[292,528,529],{},"41",[292,531,532],{},")",[292,534,535],{},"73",[292,537,538],{},"I",[292,540,541],{},"105",[292,543,544],{},"i",[246,546,547,550,553,556,559,562,565,568],{},[292,548,549],{},"10",[292,551,552],{},"LF",[292,554,555],{},"42",[292,557,558],{},"*",[292,560,561],{},"74",[292,563,564],{},"J",[292,566,567],{},"106",[292,569,570],{},"j",[246,572,573,576,579,582,585,588,591,594],{},[292,574,575],{},"11",[292,577,578],{},"VT",[292,580,581],{},"43",[292,583,584],{},"+",[292,586,587],{},"75",[292,589,590],{},"K",[292,592,593],{},"107",[292,595,596],{},"k",[246,598,599,602,605,608,610,613,616,619],{},[292,600,601],{},"12",[292,603,604],{},"FF",[292,606,607],{},"44",[292,609,481],{},[292,611,612],{},"76",[292,614,615],{},"L",[292,617,618],{},"108",[292,620,621],{},"l",[246,623,624,627,630,633,636,639,642,645],{},[292,625,626],{},"13",[292,628,629],{},"CR",[292,631,632],{},"45",[292,634,635],{},"-",[292,637,638],{},"77",[292,640,641],{},"M",[292,643,644],{},"109",[292,646,647],{},"m",[246,649,650,653,656,659,662,665,668,671],{},[292,651,652],{},"14",[292,654,655],{},"SO",[292,657,658],{},"46",[292,660,661],{},".",[292,663,664],{},"78",[292,666,667],{},"N",[292,669,670],{},"110",[292,672,673],{},"n",[246,675,676,679,682,685,688,691,694,697],{},[292,677,678],{},"15",[292,680,681],{},"SI",[292,683,684],{},"47",[292,686,687],{},"\u002F",[292,689,690],{},"79",[292,692,693],{},"O",[292,695,696],{},"111",[292,698,699],{},"o",[246,701,702,705,708,711,713,716,719,722],{},[292,703,704],{},"16",[292,706,707],{},"DLE",[292,709,710],{},"48",[292,712,294],{},[292,714,715],{},"80",[292,717,718],{},"P",[292,720,721],{},"112",[292,723,38],{},[246,725,726,729,732,735,737,740,743,746],{},[292,727,728],{},"17",[292,730,731],{},"DCI",[292,733,734],{},"49",[292,736,320],{},[292,738,739],{},"81",[292,741,742],{},"Q",[292,744,745],{},"113",[292,747,748],{},"q",[246,750,751,754,757,760,762,765,768,771],{},[292,752,753],{},"18",[292,755,756],{},"DC2",[292,758,759],{},"50",[292,761,180],{},[292,763,764],{},"82",[292,766,767],{},"R",[292,769,770],{},"114",[292,772,773],{},"r",[246,775,776,779,782,785,787,790,793,796],{},[292,777,778],{},"19",[292,780,781],{},"DC3",[292,783,784],{},"51",[292,786,174],{},[292,788,789],{},"83",[292,791,792],{},"S",[292,794,795],{},"115",[292,797,798],{},"s",[246,800,801,804,807,810,812,815,818,821],{},[292,802,803],{},"20",[292,805,806],{},"DC4",[292,808,809],{},"52",[292,811,396],{},[292,813,814],{},"84",[292,816,817],{},"T",[292,819,820],{},"116",[292,822,823],{},"t",[246,825,826,829,832,835,837,840,843,846],{},[292,827,828],{},"21",[292,830,831],{},"NAK",[292,833,834],{},"53",[292,836,422],{},[292,838,839],{},"85",[292,841,842],{},"U",[292,844,845],{},"117",[292,847,848],{},"u",[246,850,851,854,857,860,862,865,868,871],{},[292,852,853],{},"22",[292,855,856],{},"SYN",[292,858,859],{},"54",[292,861,447],{},[292,863,864],{},"86",[292,866,867],{},"V",[292,869,870],{},"118",[292,872,873],{},"v",[246,875,876,879,882,885,887,890,893,896],{},[292,877,878],{},"23",[292,880,881],{},"TB",[292,883,884],{},"55",[292,886,472],{},[292,888,889],{},"87",[292,891,892],{},"W",[292,894,895],{},"119",[292,897,898],{},"w",[246,900,901,904,907,910,912,915,918,921],{},[292,902,903],{},"24",[292,905,906],{},"CAN",[292,908,909],{},"56",[292,911,498],{},[292,913,914],{},"88",[292,916,917],{},"X",[292,919,920],{},"120",[292,922,923],{},"x",[246,925,926,929,932,935,937,940,943,946],{},[292,927,928],{},"25",[292,930,931],{},"EM",[292,933,934],{},"57",[292,936,523],{},[292,938,939],{},"89",[292,941,942],{},"Y",[292,944,945],{},"121",[292,947,948],{},"y",[246,950,951,954,957,960,963,966,969,972],{},[292,952,953],{},"26",[292,955,956],{},"SUB",[292,958,959],{},"58",[292,961,962],{},":",[292,964,965],{},"90",[292,967,968],{},"Z",[292,970,971],{},"122",[292,973,974],{},"z",[246,976,977,980,983,986,988,991,994,997],{},[292,978,979],{},"27",[292,981,982],{},"ESC",[292,984,985],{},"59",[292,987,158],{},[292,989,990],{},"91",[292,992,993],{},"[",[292,995,996],{},"123",[292,998,999],{},"{",[246,1001,1002,1005,1008,1011,1014,1017,1019,1022],{},[292,1003,1004],{},"28",[292,1006,1007],{},"FS",[292,1009,1010],{},"60",[292,1012,1013],{},"\u003C",[292,1015,1016],{},"92",[292,1018,687],{},[292,1020,1021],{},"124",[292,1023,1024],{},"|",[246,1026,1027,1030,1033,1036,1038,1041,1044,1047],{},[292,1028,1029],{},"29",[292,1031,1032],{},"GS",[292,1034,1035],{},"61",[292,1037,148],{},[292,1039,1040],{},"93",[292,1042,1043],{},"]",[292,1045,1046],{},"125",[292,1048,1049],{},"}",[246,1051,1052,1055,1058,1061,1064,1067,1070,1073],{},[292,1053,1054],{},"30",[292,1056,1057],{},"RS",[292,1059,1060],{},"62",[292,1062,1063],{},">",[292,1065,1066],{},"94",[292,1068,1069],{},"^",[292,1071,1072],{},"126",[292,1074,1075],{},"`",[246,1077,1078,1081,1084,1087,1090,1093,1096,1099],{},[292,1079,1080],{},"31",[292,1082,1083],{},"US",[292,1085,1086],{},"63",[292,1088,1089],{},"?",[292,1091,1092],{},"95",[292,1094,1095],{},"_",[292,1097,1098],{},"127",[292,1100,1101],{},"DEL",[38,1103,1104,1105,1108],{},"ASCII 码大致由以下",[252,1106,1107],{},"两部分组","成：",[1110,1111,1112,1119],"ul",{},[49,1113,1114,1115,1118],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[252,1116,1117],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[49,1120,1121,1122,1125],{},"ASCII 打印字符：数字 ",[252,1123,1124],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[63,1127,1129],{"id":1128},"_134转义字符","1.3.4转义字符",[83,1131,1133],{"className":85,"code":1132,"language":87,"meta":10,"style":10},"\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",[89,1134,1135,1140,1156,1171,1177,1191,1197],{"__ignoreMap":10},[92,1136,1137],{"class":94,"line":95},[92,1138,1139],{"class":161},"\u002F\u002F换行符\n",[92,1141,1142,1145,1148,1151,1153],{"class":94,"line":11},[92,1143,1144],{"class":102},"cout ",[92,1146,1147],{"class":98},"\u003C\u003C",[92,1149,1150],{"class":207},"\"hello world\u002Fn\"",[92,1152,158],{"class":102},[92,1154,1155],{"class":161}," \u002F\u002F就等同于如下：\n",[92,1157,1159,1161,1163,1166,1168],{"class":94,"line":1158},3,[92,1160,1144],{"class":102},[92,1162,1147],{"class":98},[92,1164,1165],{"class":207},"\"hello world\"",[92,1167,1147],{"class":98},[92,1169,1170],{"class":102},"endl;\n",[92,1172,1174],{"class":94,"line":1173},4,[92,1175,1176],{"class":161},"\u002F\u002F反斜杠\n",[92,1178,1180,1182,1184,1187,1189],{"class":94,"line":1179},5,[92,1181,1144],{"class":102},[92,1183,1147],{"class":98},[92,1185,1186],{"class":207},"\"\u002F\u002F\"",[92,1188,1147],{"class":98},[92,1190,1170],{"class":102},[92,1192,1194],{"class":94,"line":1193},6,[92,1195,1196],{"class":161},"\u002F\u002F水平制表符\n",[92,1198,1200,1202,1204,1207,1210,1213,1215,1218],{"class":94,"line":1199},7,[92,1201,1144],{"class":102},[92,1203,1147],{"class":98},[92,1205,1206],{"class":207},"\"aaaa",[92,1208,1209],{"class":151},"\\t",[92,1211,1212],{"class":207},"helloworld\"",[92,1214,1147],{"class":98},[92,1216,1217],{"class":102},"endl;",[92,1219,1220],{"class":161}," \u002F\u002F输出窗口时有对齐效果\n",[63,1222,1224],{"id":1223},"_135字符串型","1.3.5字符串型",[38,1226,1227,1228,1230],{},"char 变量名",[92,1229],{},"=\"字符串值\"",[83,1232,1234],{"className":85,"code":1233,"language":87,"meta":10,"style":10},"\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",[89,1235,1236,1241,1246,1251,1256,1270,1283,1288,1294,1306],{"__ignoreMap":10},[92,1237,1238],{"class":94,"line":95},[92,1239,1240],{"class":161},"\u002F\u002Fc风格字符串\n",[92,1242,1243],{"class":94,"line":11},[92,1244,1245],{"class":161},"\u002F\u002F注意事项：\n",[92,1247,1248],{"class":94,"line":1158},[92,1249,1250],{"class":161},"\u002F\u002F1.char字符串名[]\n",[92,1252,1253],{"class":94,"line":1173},[92,1254,1255],{"class":161},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[92,1257,1258,1260,1263,1265,1267],{"class":94,"line":1179},[92,1259,199],{"class":98},[92,1261,1262],{"class":102}," str[]",[92,1264,148],{"class":98},[92,1266,1165],{"class":207},[92,1268,1269],{"class":102},";\n",[92,1271,1272,1274,1276,1279,1281],{"class":94,"line":1193},[92,1273,1144],{"class":102},[92,1275,1147],{"class":98},[92,1277,1278],{"class":102},"str",[92,1280,1147],{"class":98},[92,1282,1170],{"class":102},[92,1284,1285],{"class":94,"line":1199},[92,1286,1287],{"class":161},"\u002F\u002Fc++风格字符串\n",[92,1289,1291],{"class":94,"line":1290},8,[92,1292,1293],{"class":161},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[92,1295,1297,1300,1302,1304],{"class":94,"line":1296},9,[92,1298,1299],{"class":102},"string str2",[92,1301,148],{"class":98},[92,1303,1165],{"class":207},[92,1305,1269],{"class":102},[92,1307,1309,1311,1313,1316,1318],{"class":94,"line":1308},10,[92,1310,1144],{"class":102},[92,1312,1147],{"class":98},[92,1314,1315],{"class":102},"str2",[92,1317,1147],{"class":98},[92,1319,1170],{"class":102},[63,1321,1323],{"id":1322},"_136布尔类型bool","1.3.6布尔类型bool",[83,1325,1327],{"className":85,"code":1326,"language":87,"meta":10,"style":10},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[89,1328,1329,1344],{"__ignoreMap":10},[92,1330,1331,1334,1337,1339,1342],{"class":94,"line":95},[92,1332,1333],{"class":98},"bool",[92,1335,1336],{"class":102}," flag",[92,1338,148],{"class":98},[92,1340,1341],{"class":151},"true",[92,1343,1269],{"class":102},[92,1345,1346,1349,1352,1355,1357,1359],{"class":94,"line":11},[92,1347,1348],{"class":102},"cout",[92,1350,1351],{"class":98},"\u003C\u003Csizeof",[92,1353,1354],{"class":102},"(flag)",[92,1356,1147],{"class":98},[92,1358,1217],{"class":102},[92,1360,1361],{"class":161}," \u002F\u002F查看布尔占内存空间\n",[33,1363,1365],{"id":1364},"_14键盘输入cin","1.4键盘输入cin",[83,1367,1369],{"className":85,"code":1368,"language":87,"meta":10,"style":10},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[89,1370,1371,1384,1401,1412],{"__ignoreMap":10},[92,1372,1373,1375,1378,1380,1382],{"class":94,"line":95},[92,1374,106],{"class":98},[92,1376,1377],{"class":102}," a",[92,1379,148],{"class":98},[92,1381,294],{"class":151},[92,1383,1269],{"class":102},[92,1385,1386,1388,1390,1393,1395,1397,1399],{"class":94,"line":11},[92,1387,1348],{"class":102},[92,1389,1147],{"class":98},[92,1391,1392],{"class":207},"\"请给整型变量a赋值\"",[92,1394,1147],{"class":98},[92,1396,341],{"class":102},[92,1398,1147],{"class":98},[92,1400,1170],{"class":102},[92,1402,1403,1406,1409],{"class":94,"line":1158},[92,1404,1405],{"class":102},"cin ",[92,1407,1408],{"class":98},">>",[92,1410,1411],{"class":102}," a;\n",[92,1413,1414,1416,1418,1421,1424,1426,1428],{"class":94,"line":1173},[92,1415,1144],{"class":102},[92,1417,1147],{"class":98},[92,1419,1420],{"class":207}," \"整型变量a=\"",[92,1422,1423],{"class":98}," \u003C\u003C",[92,1425,341],{"class":102},[92,1427,1147],{"class":98},[92,1429,1170],{"class":102},[33,1431,1433],{"id":1432},"_15运算符","1.5运算符",[63,1435,1437],{"id":1436},"_151算术运算符","1.5.1算术运算符",[38,1439,1440,1444],{},[1441,1442],"img",{"alt":10,"src":1443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[46,1446,1447,1450,1453],{},[49,1448,1449],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[49,1451,1452],{},"两个小数不可以做取模运算",[49,1454,1455],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[63,1457,1459],{"id":1458},"_152赋值运算符","1.5.2赋值运算符",[38,1461,1462],{},[1441,1463],{"alt":10,"src":1464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[63,1466,1468],{"id":1467},"_153比较运算符","1.5.3比较运算符",[38,1470,1471],{},[1441,1472],{"alt":10,"src":1473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[63,1475,1477],{"id":1476},"_154逻辑运算符","1.5.4逻辑运算符",[38,1479,1480],{},[1441,1481],{"alt":10,"src":1482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[33,1484,1486],{"id":1485},"_16程序流程结构","1.6程序流程结构",[63,1488,1490],{"id":1489},"_161选择结构","1.6.1选择结构",[46,1492,1493],{},[49,1494,1495],{},"if语句\n单行、多行、多条件if语句",[83,1497,1499],{"className":85,"code":1498,"language":87,"meta":10,"style":10},"\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",[89,1500,1501,1506,1521,1526,1540,1545,1550,1559,1572,1576,1589,1594,1600,1605,1619,1624,1630,1651,1656,1670,1675,1704,1709,1726,1731,1736,1741,1755,1760],{"__ignoreMap":10},[92,1502,1503],{"class":94,"line":95},[92,1504,1505],{"class":161},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[92,1507,1508,1511,1514,1516,1519],{"class":94,"line":11},[92,1509,1510],{"class":98},"if",[92,1512,1513],{"class":102},"(score",[92,1515,1063],{"class":98},[92,1517,1518],{"class":151},"600",[92,1520,109],{"class":102},[92,1522,1523],{"class":94,"line":1158},[92,1524,1525],{"class":102},"{\n",[92,1527,1528,1531,1533,1536,1538],{"class":94,"line":1173},[92,1529,1530],{"class":102},"    cout",[92,1532,1147],{"class":98},[92,1534,1535],{"class":207},"'这是单行if语句'",[92,1537,1147],{"class":98},[92,1539,1170],{"class":102},[92,1541,1542],{"class":94,"line":1179},[92,1543,1544],{"class":102},"}\n",[92,1546,1547],{"class":94,"line":1193},[92,1548,1549],{"class":161},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[92,1551,1552,1554,1556],{"class":94,"line":1199},[92,1553,1405],{"class":102},[92,1555,1408],{"class":98},[92,1557,1558],{"class":102}," score\n",[92,1560,1561,1563,1565,1568,1570],{"class":94,"line":1290},[92,1562,1510],{"class":98},[92,1564,1513],{"class":102},[92,1566,1567],{"class":98},"\u003C=",[92,1569,1518],{"class":151},[92,1571,109],{"class":102},[92,1573,1574],{"class":94,"line":1296},[92,1575,1525],{"class":102},[92,1577,1578,1580,1582,1585,1587],{"class":94,"line":1308},[92,1579,1530],{"class":102},[92,1581,1408],{"class":98},[92,1583,1584],{"class":207},"\"小于等于600\"",[92,1586,1147],{"class":98},[92,1588,1170],{"class":102},[92,1590,1592],{"class":94,"line":1591},11,[92,1593,1544],{"class":102},[92,1595,1597],{"class":94,"line":1596},12,[92,1598,1599],{"class":98},"else\n",[92,1601,1603],{"class":94,"line":1602},13,[92,1604,1525],{"class":102},[92,1606,1608,1610,1612,1615,1617],{"class":94,"line":1607},14,[92,1609,1530],{"class":102},[92,1611,1408],{"class":98},[92,1613,1614],{"class":207},"\"大于600\"",[92,1616,1408],{"class":98},[92,1618,1170],{"class":102},[92,1620,1622],{"class":94,"line":1621},15,[92,1623,1544],{"class":102},[92,1625,1627],{"class":94,"line":1626},16,[92,1628,1629],{"class":161},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[92,1631,1633,1635,1638,1640,1642,1645,1647,1649],{"class":94,"line":1632},17,[92,1634,1510],{"class":98},[92,1636,1637],{"class":102}," (",[92,1639,294],{"class":151},[92,1641,1013],{"class":98},[92,1643,1644],{"class":102},"num",[92,1646,1013],{"class":98},[92,1648,414],{"class":151},[92,1650,109],{"class":102},[92,1652,1654],{"class":94,"line":1653},18,[92,1655,1525],{"class":102},[92,1657,1659,1661,1663,1666,1668],{"class":94,"line":1658},19,[92,1660,1530],{"class":102},[92,1662,1147],{"class":98},[92,1664,1665],{"class":207},"\"小于100\"",[92,1667,1147],{"class":98},[92,1669,1170],{"class":102},[92,1671,1673],{"class":94,"line":1672},20,[92,1674,1544],{"class":102},[92,1676,1678,1681,1684,1687,1690,1692,1695,1697,1699,1702],{"class":94,"line":1677},21,[92,1679,1680],{"class":98},"else",[92,1682,1683],{"class":98}," if",[92,1685,1686],{"class":102}," (nmu",[92,1688,1689],{"class":98},">=",[92,1691,414],{"class":151},[92,1693,1694],{"class":98},"&&",[92,1696,1644],{"class":102},[92,1698,1013],{"class":98},[92,1700,1701],{"class":151},"200",[92,1703,109],{"class":102},[92,1705,1707],{"class":94,"line":1706},22,[92,1708,1525],{"class":102},[92,1710,1712,1714,1716,1719,1721,1723],{"class":94,"line":1711},23,[92,1713,1530],{"class":102},[92,1715,1147],{"class":98},[92,1717,1718],{"class":207},"\"不小于100且小于200\"",[92,1720,1147],{"class":98},[92,1722,1217],{"class":102},[92,1724,1725],{"class":161}," \u002F\u002F可以无限else if,python中是elif：\n",[92,1727,1729],{"class":94,"line":1728},24,[92,1730,1544],{"class":102},[92,1732,1734],{"class":94,"line":1733},25,[92,1735,1599],{"class":98},[92,1737,1739],{"class":94,"line":1738},26,[92,1740,1525],{"class":102},[92,1742,1744,1746,1748,1751,1753],{"class":94,"line":1743},27,[92,1745,1530],{"class":102},[92,1747,1147],{"class":98},[92,1749,1750],{"class":207},"\"不小于200\"",[92,1752,1147],{"class":98},[92,1754,1170],{"class":102},[92,1756,1758],{"class":94,"line":1757},28,[92,1759,1544],{"class":102},[92,1761,1763],{"class":94,"line":1762},29,[92,1764,1765],{"class":161},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[46,1767,1768],{"start":11},[49,1769,1770],{},"三目运算符",[83,1772,1774],{"className":85,"code":1773,"language":87,"meta":10,"style":10},"\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",[89,1775,1776,1781,1786,1812,1834,1851,1856,1879,1894],{"__ignoreMap":10},[92,1777,1778],{"class":94,"line":95},[92,1779,1780],{"class":161},"\u002F\u002F创建三个变量a,b,c\n",[92,1782,1783],{"class":94,"line":11},[92,1784,1785],{"class":161},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[92,1787,1788,1790,1792,1794,1796,1799,1801,1803,1806,1808,1810],{"class":94,"line":1158},[92,1789,106],{"class":98},[92,1791,1377],{"class":102},[92,1793,148],{"class":98},[92,1795,803],{"class":151},[92,1797,1798],{"class":102},",b",[92,1800,148],{"class":98},[92,1802,549],{"class":151},[92,1804,1805],{"class":102},",c",[92,1807,148],{"class":98},[92,1809,294],{"class":151},[92,1811,1269],{"class":102},[92,1813,1814,1816,1818,1821,1823,1825,1827,1829,1831],{"class":94,"line":1173},[92,1815,391],{"class":102},[92,1817,148],{"class":98},[92,1819,1820],{"class":102},"(a",[92,1822,1063],{"class":98},[92,1824,366],{"class":102},[92,1826,1089],{"class":98},[92,1828,341],{"class":102},[92,1830,962],{"class":98},[92,1832,1833],{"class":102},"b)\n",[92,1835,1836,1838,1840,1843,1845,1847,1849],{"class":94,"line":1179},[92,1837,1348],{"class":102},[92,1839,1147],{"class":98},[92,1841,1842],{"class":207},"\"c=\"",[92,1844,1147],{"class":98},[92,1846,391],{"class":102},[92,1848,1147],{"class":98},[92,1850,1170],{"class":102},[92,1852,1853],{"class":94,"line":1193},[92,1854,1855],{"class":161},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[92,1857,1858,1860,1862,1864,1866,1868,1870,1873,1875,1877],{"class":94,"line":1199},[92,1859,1820],{"class":102},[92,1861,1063],{"class":98},[92,1863,366],{"class":102},[92,1865,1089],{"class":98},[92,1867,341],{"class":102},[92,1869,962],{"class":98},[92,1871,1872],{"class":102},"b)",[92,1874,148],{"class":98},[92,1876,414],{"class":151},[92,1878,1269],{"class":102},[92,1880,1881,1883,1885,1887,1889,1891],{"class":94,"line":1290},[92,1882,1348],{"class":102},[92,1884,1147],{"class":98},[92,1886,341],{"class":102},[92,1888,1147],{"class":98},[92,1890,1217],{"class":102},[92,1892,1893],{"class":161}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[92,1895,1896,1898,1900,1902,1904,1906],{"class":94,"line":1296},[92,1897,1348],{"class":102},[92,1899,1147],{"class":98},[92,1901,366],{"class":102},[92,1903,1147],{"class":98},[92,1905,1217],{"class":102},[92,1907,1908],{"class":161}," \u002F\u002F10   a>b,b还是原值\n",[46,1910,1911],{"start":1158},[49,1912,1913],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[83,1915,1917],{"className":85,"code":1916,"language":87,"meta":10,"style":10},"\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",[89,1918,1919,1924,1932,1946,1956,1960,1974,1987,1997,2005,2010,2035,2056,2078,2099,2121,2142,2162,2167],{"__ignoreMap":10},[92,1920,1921],{"class":94,"line":95},[92,1922,1923],{"class":161},"\u002F\u002F案例-电影打分\n",[92,1925,1926,1929],{"class":94,"line":11},[92,1927,1928],{"class":98},"#include",[92,1930,1931],{"class":207},"\u003Ciostream>\n",[92,1933,1934,1937,1940,1944],{"class":94,"line":1158},[92,1935,1936],{"class":98},"using",[92,1938,1939],{"class":98}," namespace",[92,1941,1943],{"class":1942},"sScJk"," std",[92,1945,1269],{"class":102},[92,1947,1948,1950,1953],{"class":94,"line":1173},[92,1949,106],{"class":98},[92,1951,1952],{"class":1942}," main",[92,1954,1955],{"class":102},"()\n",[92,1957,1958],{"class":94,"line":1179},[92,1959,1525],{"class":102},[92,1961,1962,1965,1968,1970,1972],{"class":94,"line":1193},[92,1963,1964],{"class":98},"    int",[92,1966,1967],{"class":102}," score",[92,1969,148],{"class":98},[92,1971,294],{"class":151},[92,1973,1269],{"class":102},[92,1975,1976,1978,1980,1983,1985],{"class":94,"line":1199},[92,1977,1530],{"class":102},[92,1979,1147],{"class":98},[92,1981,1982],{"class":207},"\"电影打分：\"",[92,1984,1147],{"class":98},[92,1986,1170],{"class":102},[92,1988,1989,1992,1994],{"class":94,"line":1290},[92,1990,1991],{"class":102},"    cin",[92,1993,1408],{"class":98},[92,1995,1996],{"class":102},"score;\n",[92,1998,1999,2002],{"class":94,"line":1296},[92,2000,2001],{"class":98},"    switch",[92,2003,2004],{"class":102},"(score)\n",[92,2006,2007],{"class":94,"line":1308},[92,2008,2009],{"class":102},"    {\n",[92,2011,2012,2015,2018,2021,2023,2026,2028,2030,2033],{"class":94,"line":1591},[92,2013,2014],{"class":98},"        case",[92,2016,2017],{"class":151}," 10",[92,2019,2020],{"class":102},":cout",[92,2022,1147],{"class":98},[92,2024,2025],{"class":207},"\"经典\"",[92,2027,1147],{"class":98},[92,2029,1217],{"class":102},[92,2031,2032],{"class":98},"break",[92,2034,1269],{"class":102},[92,2036,2037,2039,2042,2044,2046,2048,2050,2052,2054],{"class":94,"line":1596},[92,2038,2014],{"class":98},[92,2040,2041],{"class":151}," 9",[92,2043,2020],{"class":102},[92,2045,1147],{"class":98},[92,2047,2025],{"class":207},[92,2049,1147],{"class":98},[92,2051,1217],{"class":102},[92,2053,2032],{"class":98},[92,2055,1269],{"class":102},[92,2057,2058,2060,2063,2065,2067,2070,2072,2074,2076],{"class":94,"line":1602},[92,2059,2014],{"class":98},[92,2061,2062],{"class":151}," 8",[92,2064,2020],{"class":102},[92,2066,1147],{"class":98},[92,2068,2069],{"class":207},"\"非常好\"",[92,2071,1147],{"class":98},[92,2073,1217],{"class":102},[92,2075,2032],{"class":98},[92,2077,1269],{"class":102},[92,2079,2080,2082,2085,2087,2089,2091,2093,2095,2097],{"class":94,"line":1607},[92,2081,2014],{"class":98},[92,2083,2084],{"class":151}," 7",[92,2086,2020],{"class":102},[92,2088,1147],{"class":98},[92,2090,2069],{"class":207},[92,2092,1147],{"class":98},[92,2094,1217],{"class":102},[92,2096,2032],{"class":98},[92,2098,1269],{"class":102},[92,2100,2101,2103,2106,2108,2110,2113,2115,2117,2119],{"class":94,"line":1621},[92,2102,2014],{"class":98},[92,2104,2105],{"class":151}," 6",[92,2107,2020],{"class":102},[92,2109,1147],{"class":98},[92,2111,2112],{"class":207},"\"一般\"",[92,2114,1147],{"class":98},[92,2116,1217],{"class":102},[92,2118,2032],{"class":98},[92,2120,1269],{"class":102},[92,2122,2123,2125,2128,2130,2132,2134,2136,2138,2140],{"class":94,"line":1626},[92,2124,2014],{"class":98},[92,2126,2127],{"class":151}," 5",[92,2129,2020],{"class":102},[92,2131,1147],{"class":98},[92,2133,2112],{"class":207},[92,2135,1147],{"class":98},[92,2137,1217],{"class":102},[92,2139,2032],{"class":98},[92,2141,1269],{"class":102},[92,2143,2144,2147,2149,2151,2154,2156,2158,2160],{"class":94,"line":1632},[92,2145,2146],{"class":98},"        default",[92,2148,2020],{"class":102},[92,2150,1147],{"class":98},[92,2152,2153],{"class":207},"\"烂片\"",[92,2155,1147],{"class":98},[92,2157,1217],{"class":102},[92,2159,2032],{"class":98},[92,2161,1269],{"class":102},[92,2163,2164],{"class":94,"line":1653},[92,2165,2166],{"class":102},"    }\n",[92,2168,2169],{"class":94,"line":1658},[92,2170,1544],{"class":102},[38,2172,2173],{},"if和switch区别：",[1110,2175,2176,2179],{},[49,2177,2178],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[49,2180,2181],{},"switch优点：结构清晰，执行效率高",[63,2183,2185],{"id":2184},"_162循环结构","1.6.2循环结构",[46,2187,2188],{},[49,2189,2190],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[83,2192,2194],{"className":85,"code":2193,"language":87,"meta":10,"style":10},"\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",[89,2195,2196,2201,2209,2213,2226,2240,2244,2264,2274,2278,2290],{"__ignoreMap":10},[92,2197,2198],{"class":94,"line":95},[92,2199,2200],{"class":161},"\u002F\u002F打印0-9数字\n",[92,2202,2203,2205,2207],{"class":94,"line":11},[92,2204,106],{"class":98},[92,2206,1952],{"class":1942},[92,2208,1955],{"class":102},[92,2210,2211],{"class":94,"line":1158},[92,2212,1525],{"class":102},[92,2214,2215,2217,2220,2222,2224],{"class":94,"line":1173},[92,2216,1964],{"class":98},[92,2218,2219],{"class":102}," num",[92,2221,148],{"class":98},[92,2223,294],{"class":151},[92,2225,1269],{"class":102},[92,2227,2228,2231,2234,2236,2238],{"class":94,"line":1179},[92,2229,2230],{"class":98},"    while",[92,2232,2233],{"class":102},"(num",[92,2235,1013],{"class":98},[92,2237,549],{"class":151},[92,2239,109],{"class":102},[92,2241,2242],{"class":94,"line":1193},[92,2243,2009],{"class":102},[92,2245,2246,2249,2252,2254,2256,2258,2261],{"class":94,"line":1199},[92,2247,2248],{"class":1942},"       std",[92,2250,2251],{"class":102},"::cout",[92,2253,1147],{"class":98},[92,2255,1644],{"class":102},[92,2257,1147],{"class":98},[92,2259,2260],{"class":1942},"std",[92,2262,2263],{"class":102},"::endl;\n",[92,2265,2266,2269,2272],{"class":94,"line":1290},[92,2267,2268],{"class":102},"        num",[92,2270,2271],{"class":98},"++",[92,2273,1269],{"class":102},[92,2275,2276],{"class":94,"line":1296},[92,2277,2166],{"class":102},[92,2279,2280,2283,2285,2288],{"class":94,"line":1308},[92,2281,2282],{"class":1942},"    system",[92,2284,103],{"class":102},[92,2286,2287],{"class":207},"\"pause\"",[92,2289,109],{"class":102},[92,2291,2292],{"class":94,"line":1591},[92,2293,1544],{"class":102},[38,2295,2296],{},"注意：写好循环条件，避免死循环情况",[83,2298,2300],{"className":85,"code":2299,"language":87,"meta":10,"style":10},"\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",[89,2301,2302,2307,2314,2321,2331,2339,2343,2348,2375,2380,2385,2393,2420,2425,2430,2443,2453,2457,2467,2472,2485,2490,2504,2509,2524,2528,2541,2545,2550,2554,2568,2576,2581,2587,2593,2598],{"__ignoreMap":10},[92,2303,2304],{"class":94,"line":95},[92,2305,2306],{"class":161},"\u002F\u002F循环结构-猜数字\n",[92,2308,2309,2311],{"class":94,"line":11},[92,2310,1928],{"class":98},[92,2312,2313],{"class":207}," \u003Ciostream>\n",[92,2315,2316,2318],{"class":94,"line":1158},[92,2317,1928],{"class":98},[92,2319,2320],{"class":207}," \u003Cctime>\n",[92,2322,2323,2325,2327,2329],{"class":94,"line":1173},[92,2324,1936],{"class":98},[92,2326,1939],{"class":98},[92,2328,1943],{"class":1942},[92,2330,1269],{"class":102},[92,2332,2333,2335,2337],{"class":94,"line":1179},[92,2334,106],{"class":98},[92,2336,1952],{"class":1942},[92,2338,1955],{"class":102},[92,2340,2341],{"class":94,"line":1193},[92,2342,1525],{"class":102},[92,2344,2345],{"class":94,"line":1199},[92,2346,2347],{"class":161},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[92,2349,2350,2353,2356,2359,2362,2364,2367,2369,2372],{"class":94,"line":1290},[92,2351,2352],{"class":1942},"    srand",[92,2354,2355],{"class":102},"((",[92,2357,2358],{"class":98},"unsigned",[92,2360,2361],{"class":98}," int",[92,2363,532],{"class":102},[92,2365,2366],{"class":1942},"time",[92,2368,103],{"class":102},[92,2370,2371],{"class":151},"NULL",[92,2373,2374],{"class":102},"));\n",[92,2376,2377],{"class":94,"line":1296},[92,2378,2379],{"emptyLinePlaceholder":17},"\n",[92,2381,2382],{"class":94,"line":1308},[92,2383,2384],{"class":161},"    \u002F\u002F1.系统生成随机数\n",[92,2386,2387,2390],{"class":94,"line":1591},[92,2388,2389],{"class":161},"    \u002F\u002Frand()%100",[92,2391,2392],{"class":161}," \u002F\u002F生成0-99的随机数\n",[92,2394,2395,2397,2399,2401,2404,2407,2409,2411,2413,2415,2417],{"class":94,"line":1596},[92,2396,1964],{"class":98},[92,2398,2219],{"class":102},[92,2400,148],{"class":98},[92,2402,2403],{"class":1942},"rand",[92,2405,2406],{"class":102},"()",[92,2408,431],{"class":98},[92,2410,414],{"class":151},[92,2412,584],{"class":98},[92,2414,320],{"class":151},[92,2416,158],{"class":102},[92,2418,2419],{"class":161}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[92,2421,2422],{"class":94,"line":1602},[92,2423,2424],{"class":161},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[92,2426,2427],{"class":94,"line":1607},[92,2428,2429],{"class":161},"    \u002F\u002F2.玩家猜测\n",[92,2431,2432,2434,2437,2439,2441],{"class":94,"line":1621},[92,2433,1964],{"class":98},[92,2435,2436],{"class":102}," val",[92,2438,148],{"class":98},[92,2440,294],{"class":151},[92,2442,1269],{"class":102},[92,2444,2445,2447,2449,2451],{"class":94,"line":1626},[92,2446,2230],{"class":98},[92,2448,1637],{"class":102},[92,2450,320],{"class":151},[92,2452,109],{"class":102},[92,2454,2455],{"class":94,"line":1632},[92,2456,2009],{"class":102},[92,2458,2459,2462,2464],{"class":94,"line":1653},[92,2460,2461],{"class":102},"        cin",[92,2463,1408],{"class":98},[92,2465,2466],{"class":102},"val;\n",[92,2468,2469],{"class":94,"line":1658},[92,2470,2471],{"class":161},"        \u002F\u002F3.判断玩家猜测\n",[92,2473,2474,2477,2480,2482],{"class":94,"line":1672},[92,2475,2476],{"class":98},"        if",[92,2478,2479],{"class":102},"(val",[92,2481,1013],{"class":98},[92,2483,2484],{"class":102},"num) \n",[92,2486,2487],{"class":94,"line":1677},[92,2488,2489],{"class":102},"        {\n",[92,2491,2492,2495,2497,2500,2502],{"class":94,"line":1706},[92,2493,2494],{"class":102},"            cout",[92,2496,1147],{"class":98},[92,2498,2499],{"class":207},"\"猜小了！\"",[92,2501,1147],{"class":98},[92,2503,1170],{"class":102},[92,2505,2506],{"class":94,"line":1711},[92,2507,2508],{"class":102},"        }\n",[92,2510,2511,2514,2516,2519,2521],{"class":94,"line":1728},[92,2512,2513],{"class":98},"        else",[92,2515,1683],{"class":98},[92,2517,2518],{"class":102}," (val",[92,2520,1063],{"class":98},[92,2522,2523],{"class":102},"num)\n",[92,2525,2526],{"class":94,"line":1733},[92,2527,2489],{"class":102},[92,2529,2530,2532,2534,2537,2539],{"class":94,"line":1738},[92,2531,2494],{"class":102},[92,2533,1147],{"class":98},[92,2535,2536],{"class":207},"\"猜大了！\"",[92,2538,1147],{"class":98},[92,2540,1170],{"class":102},[92,2542,2543],{"class":94,"line":1743},[92,2544,2508],{"class":102},[92,2546,2547],{"class":94,"line":1757},[92,2548,2549],{"class":98},"        else\n",[92,2551,2552],{"class":94,"line":1762},[92,2553,2489],{"class":102},[92,2555,2557,2559,2561,2564,2566],{"class":94,"line":2556},30,[92,2558,2494],{"class":102},[92,2560,1147],{"class":98},[92,2562,2563],{"class":207},"\"猜对了！\"",[92,2565,1147],{"class":98},[92,2567,1170],{"class":102},[92,2569,2571,2574],{"class":94,"line":2570},31,[92,2572,2573],{"class":98},"            break",[92,2575,1269],{"class":102},[92,2577,2579],{"class":94,"line":2578},32,[92,2580,2508],{"class":102},[92,2582,2584],{"class":94,"line":2583},33,[92,2585,2586],{"class":161},"        \u002F\u002F猜对 退出游戏\n",[92,2588,2590],{"class":94,"line":2589},34,[92,2591,2592],{"class":161},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[92,2594,2596],{"class":94,"line":2595},35,[92,2597,2166],{"class":102},[92,2599,2601],{"class":94,"line":2600},36,[92,2602,1544],{"class":102},[46,2604,2605],{"start":11},[49,2606,2607,2608,2611],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[252,2609,2610],{},"do...while会先执行一次循环语句","，在判断循环语句",[83,2613,2615],{"className":85,"code":2614,"language":87,"meta":10,"style":10},"\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",[89,2616,2617,2622,2630,2634,2646,2654,2658,2675,2682,2686,2699,2709],{"__ignoreMap":10},[92,2618,2619],{"class":94,"line":95},[92,2620,2621],{"class":161},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[92,2623,2624,2626,2628],{"class":94,"line":11},[92,2625,106],{"class":98},[92,2627,1952],{"class":1942},[92,2629,1955],{"class":102},[92,2631,2632],{"class":94,"line":1158},[92,2633,1525],{"class":102},[92,2635,2636,2638,2640,2642,2644],{"class":94,"line":1173},[92,2637,1964],{"class":98},[92,2639,2219],{"class":102},[92,2641,148],{"class":98},[92,2643,294],{"class":151},[92,2645,1269],{"class":102},[92,2647,2648,2651],{"class":94,"line":1179},[92,2649,2650],{"class":98},"    do",[92,2652,2653],{"class":102}," \n",[92,2655,2656],{"class":94,"line":1193},[92,2657,2009],{"class":102},[92,2659,2660,2663,2665,2667,2669,2671,2673],{"class":94,"line":1199},[92,2661,2662],{"class":1942},"        std",[92,2664,2251],{"class":102},[92,2666,1147],{"class":98},[92,2668,1644],{"class":102},[92,2670,1147],{"class":98},[92,2672,2260],{"class":1942},[92,2674,2263],{"class":102},[92,2676,2677,2679],{"class":94,"line":1290},[92,2678,2268],{"class":102},[92,2680,2681],{"class":98},"++\n",[92,2683,2684],{"class":94,"line":1296},[92,2685,2166],{"class":102},[92,2687,2688,2690,2692,2694,2696],{"class":94,"line":1308},[92,2689,2230],{"class":98},[92,2691,2233],{"class":102},[92,2693,1013],{"class":98},[92,2695,549],{"class":151},[92,2697,2698],{"class":102},");\n",[92,2700,2701,2703,2705,2707],{"class":94,"line":1591},[92,2702,2282],{"class":1942},[92,2704,103],{"class":102},[92,2706,2287],{"class":207},[92,2708,2698],{"class":102},[92,2710,2711],{"class":94,"line":1596},[92,2712,1544],{"class":102},[38,2714,2715],{},"案例-水仙花数",[38,2717,2718],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[38,2720,2721],{},"例如：1^3+5^3+3^3=153",[38,2723,2724],{},"请用do...while语句，求出所有3位数的水仙花数",[83,2726,2728],{"className":85,"code":2727,"language":87,"meta":10,"style":10},"#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",[89,2729,2730,2736,2746,2754,2758,2763,2775,2781,2785,2790,2806,2822,2838,2853,2872,2887,2935,2939,2951,2955,2963,2967,2981],{"__ignoreMap":10},[92,2731,2732,2734],{"class":94,"line":95},[92,2733,1928],{"class":98},[92,2735,2313],{"class":207},[92,2737,2738,2740,2742,2744],{"class":94,"line":11},[92,2739,1936],{"class":98},[92,2741,1939],{"class":98},[92,2743,1943],{"class":1942},[92,2745,1269],{"class":102},[92,2747,2748,2750,2752],{"class":94,"line":1158},[92,2749,106],{"class":98},[92,2751,1952],{"class":1942},[92,2753,1955],{"class":102},[92,2755,2756],{"class":94,"line":1173},[92,2757,1525],{"class":102},[92,2759,2760],{"class":94,"line":1179},[92,2761,2762],{"class":161},"    \u002F\u002F1.先打印所有三位数字\n",[92,2764,2765,2767,2769,2771,2773],{"class":94,"line":1193},[92,2766,1964],{"class":98},[92,2768,2219],{"class":102},[92,2770,148],{"class":98},[92,2772,414],{"class":151},[92,2774,1269],{"class":102},[92,2776,2777,2779],{"class":94,"line":1199},[92,2778,2650],{"class":98},[92,2780,2653],{"class":102},[92,2782,2783],{"class":94,"line":1290},[92,2784,2009],{"class":102},[92,2786,2787],{"class":94,"line":1296},[92,2788,2789],{"class":161},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[92,2791,2792,2795,2797,2799,2801,2803],{"class":94,"line":1308},[92,2793,2794],{"class":98},"        int",[92,2796,1377],{"class":102},[92,2798,148],{"class":98},[92,2800,294],{"class":151},[92,2802,158],{"class":102},[92,2804,2805],{"class":161}," \u002F\u002F个位\n",[92,2807,2808,2810,2813,2815,2817,2819],{"class":94,"line":1591},[92,2809,2794],{"class":98},[92,2811,2812],{"class":102}," b",[92,2814,148],{"class":98},[92,2816,294],{"class":151},[92,2818,158],{"class":102},[92,2820,2821],{"class":161}," \u002F\u002F十位\n",[92,2823,2824,2826,2829,2831,2833,2835],{"class":94,"line":1596},[92,2825,2794],{"class":98},[92,2827,2828],{"class":102}," c",[92,2830,148],{"class":98},[92,2832,294],{"class":151},[92,2834,158],{"class":102},[92,2836,2837],{"class":161}," \u002F\u002F百位\n",[92,2839,2840,2843,2845,2847,2849,2851],{"class":94,"line":1602},[92,2841,2842],{"class":102},"        a",[92,2844,148],{"class":98},[92,2846,1644],{"class":102},[92,2848,431],{"class":98},[92,2850,549],{"class":151},[92,2852,1269],{"class":102},[92,2854,2855,2858,2860,2862,2864,2866,2868,2870],{"class":94,"line":1607},[92,2856,2857],{"class":102},"        b",[92,2859,148],{"class":98},[92,2861,1644],{"class":102},[92,2863,687],{"class":98},[92,2865,549],{"class":151},[92,2867,431],{"class":98},[92,2869,549],{"class":151},[92,2871,1269],{"class":102},[92,2873,2874,2877,2879,2881,2883,2885],{"class":94,"line":1621},[92,2875,2876],{"class":102},"        c",[92,2878,148],{"class":98},[92,2880,1644],{"class":102},[92,2882,687],{"class":98},[92,2884,414],{"class":151},[92,2886,1269],{"class":102},[92,2888,2889,2891,2893,2895,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2926,2929,2932],{"class":94,"line":1626},[92,2890,2476],{"class":98},[92,2892,1820],{"class":102},[92,2894,558],{"class":98},[92,2896,341],{"class":102},[92,2898,558],{"class":98},[92,2900,341],{"class":102},[92,2902,584],{"class":98},[92,2904,366],{"class":102},[92,2906,558],{"class":98},[92,2908,366],{"class":102},[92,2910,558],{"class":98},[92,2912,366],{"class":102},[92,2914,584],{"class":98},[92,2916,391],{"class":102},[92,2918,558],{"class":98},[92,2920,391],{"class":102},[92,2922,558],{"class":98},[92,2924,2925],{"class":102},"c ",[92,2927,2928],{"class":98},"==",[92,2930,2931],{"class":102}," num)",[92,2933,2934],{"class":161}," \u002F\u002F如果是水仙花数，才打印\n",[92,2936,2937],{"class":94,"line":1632},[92,2938,2489],{"class":102},[92,2940,2941,2943,2945,2947,2949],{"class":94,"line":1653},[92,2942,2494],{"class":102},[92,2944,1147],{"class":98},[92,2946,1644],{"class":102},[92,2948,1147],{"class":98},[92,2950,1170],{"class":102},[92,2952,2953],{"class":94,"line":1658},[92,2954,2508],{"class":102},[92,2956,2957,2959,2961],{"class":94,"line":1672},[92,2958,2268],{"class":102},[92,2960,2271],{"class":98},[92,2962,1269],{"class":102},[92,2964,2965],{"class":94,"line":1677},[92,2966,2166],{"class":102},[92,2968,2969,2971,2974,2976,2979],{"class":94,"line":1706},[92,2970,2230],{"class":98},[92,2972,2973],{"class":102}," (num ",[92,2975,1013],{"class":98},[92,2977,2978],{"class":151}," 1000",[92,2980,2698],{"class":102},[92,2982,2983],{"class":94,"line":1711},[92,2984,1544],{"class":102},[46,2986,2987],{"start":1158},[49,2988,2989],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[83,2991,2993],{"className":85,"code":2992,"language":87,"meta":10,"style":10},"\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",[89,2994,2995,3000,3029,3033,3045,3049,3054,3065,3072,3076,3090,3094,3101,3105,3117,3126],{"__ignoreMap":10},[92,2996,2997],{"class":94,"line":95},[92,2998,2999],{"class":161},"\u002F\u002F从数字0-9打印\n",[92,3001,3002,3005,3007,3009,3012,3014,3016,3019,3021,3023,3025,3027],{"class":94,"line":11},[92,3003,3004],{"class":98},"for",[92,3006,103],{"class":102},[92,3008,106],{"class":98},[92,3010,3011],{"class":102}," i",[92,3013,148],{"class":98},[92,3015,294],{"class":151},[92,3017,3018],{"class":102},";i",[92,3020,1013],{"class":98},[92,3022,549],{"class":151},[92,3024,3018],{"class":102},[92,3026,2271],{"class":98},[92,3028,109],{"class":102},[92,3030,3031],{"class":94,"line":1158},[92,3032,1525],{"class":102},[92,3034,3035,3037,3039,3041,3043],{"class":94,"line":1173},[92,3036,1530],{"class":102},[92,3038,1147],{"class":98},[92,3040,544],{"class":102},[92,3042,1147],{"class":98},[92,3044,1170],{"class":102},[92,3046,3047],{"class":94,"line":1179},[92,3048,1544],{"class":102},[92,3050,3051],{"class":94,"line":1193},[92,3052,3053],{"class":161},"\u002F\u002F上式可以进行拆分\n",[92,3055,3056,3058,3060,3062],{"class":94,"line":1199},[92,3057,106],{"class":98},[92,3059,3011],{"class":102},[92,3061,148],{"class":98},[92,3063,3064],{"class":151},"0\n",[92,3066,3067,3069],{"class":94,"line":1290},[92,3068,3004],{"class":98},[92,3070,3071],{"class":102},"(;;;)\n",[92,3073,3074],{"class":94,"line":1296},[92,3075,1525],{"class":102},[92,3077,3078,3081,3084,3086,3088],{"class":94,"line":1308},[92,3079,3080],{"class":98},"    if",[92,3082,3083],{"class":102},"(i",[92,3085,1689],{"class":98},[92,3087,549],{"class":151},[92,3089,109],{"class":102},[92,3091,3092],{"class":94,"line":1591},[92,3093,2009],{"class":102},[92,3095,3096,3099],{"class":94,"line":1596},[92,3097,3098],{"class":98},"        break",[92,3100,1269],{"class":102},[92,3102,3103],{"class":94,"line":1602},[92,3104,2166],{"class":102},[92,3106,3107,3109,3111,3113,3115],{"class":94,"line":1607},[92,3108,1530],{"class":102},[92,3110,1147],{"class":98},[92,3112,544],{"class":102},[92,3114,1147],{"class":98},[92,3116,1170],{"class":102},[92,3118,3119,3122,3124],{"class":94,"line":1621},[92,3120,3121],{"class":102},"    i",[92,3123,2271],{"class":98},[92,3125,1269],{"class":102},[92,3127,3128],{"class":94,"line":1626},[92,3129,1544],{"class":102},[38,3131,3132],{},"小练习",[83,3134,3136],{"className":85,"code":3135,"language":87,"meta":10,"style":10},"#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",[89,3137,3138,3144,3154,3162,3166,3171,3176,3204,3208,3213,3218,3259,3263,3276,3280,3284,3288,3300,3304,3308],{"__ignoreMap":10},[92,3139,3140,3142],{"class":94,"line":95},[92,3141,1928],{"class":98},[92,3143,1931],{"class":207},[92,3145,3146,3148,3150,3152],{"class":94,"line":11},[92,3147,1936],{"class":98},[92,3149,1939],{"class":98},[92,3151,1943],{"class":1942},[92,3153,1269],{"class":102},[92,3155,3156,3158,3160],{"class":94,"line":1158},[92,3157,106],{"class":98},[92,3159,1952],{"class":1942},[92,3161,1955],{"class":102},[92,3163,3164],{"class":94,"line":1173},[92,3165,1525],{"class":102},[92,3167,3168],{"class":94,"line":1179},[92,3169,3170],{"class":161},"    \u002F\u002F敲桌子案例\n",[92,3172,3173],{"class":94,"line":1193},[92,3174,3175],{"class":161},"    \u002F\u002F1.先输出1-100的数字\n",[92,3177,3178,3181,3183,3185,3187,3189,3191,3194,3196,3198,3200,3202],{"class":94,"line":1199},[92,3179,3180],{"class":98},"    for",[92,3182,103],{"class":102},[92,3184,106],{"class":98},[92,3186,3011],{"class":102},[92,3188,148],{"class":98},[92,3190,320],{"class":151},[92,3192,3193],{"class":102},"; i",[92,3195,1567],{"class":98},[92,3197,414],{"class":151},[92,3199,3193],{"class":102},[92,3201,2271],{"class":98},[92,3203,109],{"class":102},[92,3205,3206],{"class":94,"line":1290},[92,3207,2009],{"class":102},[92,3209,3210],{"class":94,"line":1296},[92,3211,3212],{"class":161},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[92,3214,3215],{"class":94,"line":1308},[92,3216,3217],{"class":161},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[92,3219,3220,3222,3224,3226,3228,3230,3232,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257],{"class":94,"line":1591},[92,3221,2476],{"class":98},[92,3223,3083],{"class":102},[92,3225,431],{"class":98},[92,3227,472],{"class":151},[92,3229,2928],{"class":98},[92,3231,294],{"class":151},[92,3233,3234],{"class":98}," ||",[92,3236,3011],{"class":102},[92,3238,431],{"class":98},[92,3240,549],{"class":151},[92,3242,2928],{"class":98},[92,3244,472],{"class":151},[92,3246,3234],{"class":98},[92,3248,3011],{"class":102},[92,3250,687],{"class":98},[92,3252,549],{"class":151},[92,3254,2928],{"class":98},[92,3256,472],{"class":151},[92,3258,109],{"class":102},[92,3260,3261],{"class":94,"line":1596},[92,3262,2489],{"class":102},[92,3264,3265,3267,3269,3272,3274],{"class":94,"line":1602},[92,3266,2494],{"class":102},[92,3268,1147],{"class":98},[92,3270,3271],{"class":207},"\"敲桌子\"",[92,3273,1147],{"class":98},[92,3275,1170],{"class":102},[92,3277,3278],{"class":94,"line":1607},[92,3279,2508],{"class":102},[92,3281,3282],{"class":94,"line":1621},[92,3283,2549],{"class":98},[92,3285,3286],{"class":94,"line":1626},[92,3287,2489],{"class":102},[92,3289,3290,3292,3294,3296,3298],{"class":94,"line":1632},[92,3291,2494],{"class":102},[92,3293,1147],{"class":98},[92,3295,544],{"class":102},[92,3297,1147],{"class":98},[92,3299,1170],{"class":102},[92,3301,3302],{"class":94,"line":1653},[92,3303,2508],{"class":102},[92,3305,3306],{"class":94,"line":1658},[92,3307,2166],{"class":102},[92,3309,3310],{"class":94,"line":1672},[92,3311,1544],{"class":102},[38,3313,3314],{},"嵌套实现星图",[83,3316,3318],{"className":85,"code":3317,"language":87,"meta":10,"style":10},"#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",[89,3319,3320,3326,3336,3344,3348,3374,3378,3407,3411,3422,3426,3435,3439],{"__ignoreMap":10},[92,3321,3322,3324],{"class":94,"line":95},[92,3323,1928],{"class":98},[92,3325,1931],{"class":207},[92,3327,3328,3330,3332,3334],{"class":94,"line":11},[92,3329,1936],{"class":98},[92,3331,1939],{"class":98},[92,3333,1943],{"class":1942},[92,3335,1269],{"class":102},[92,3337,3338,3340,3342],{"class":94,"line":1158},[92,3339,106],{"class":98},[92,3341,1952],{"class":1942},[92,3343,1955],{"class":102},[92,3345,3346],{"class":94,"line":1173},[92,3347,1525],{"class":102},[92,3349,3350,3352,3354,3356,3358,3360,3362,3364,3366,3368,3370,3372],{"class":94,"line":1179},[92,3351,3180],{"class":98},[92,3353,1637],{"class":102},[92,3355,106],{"class":98},[92,3357,3011],{"class":102},[92,3359,148],{"class":98},[92,3361,294],{"class":151},[92,3363,3018],{"class":102},[92,3365,1013],{"class":98},[92,3367,549],{"class":151},[92,3369,3018],{"class":102},[92,3371,2271],{"class":98},[92,3373,109],{"class":102},[92,3375,3376],{"class":94,"line":1193},[92,3377,2009],{"class":102},[92,3379,3380,3383,3385,3387,3390,3392,3394,3397,3399,3401,3403,3405],{"class":94,"line":1199},[92,3381,3382],{"class":98},"        for",[92,3384,1637],{"class":102},[92,3386,106],{"class":98},[92,3388,3389],{"class":102}," j",[92,3391,148],{"class":98},[92,3393,294],{"class":151},[92,3395,3396],{"class":102},";j",[92,3398,1013],{"class":98},[92,3400,549],{"class":151},[92,3402,3396],{"class":102},[92,3404,2271],{"class":98},[92,3406,109],{"class":102},[92,3408,3409],{"class":94,"line":1290},[92,3410,2489],{"class":102},[92,3412,3413,3415,3417,3420],{"class":94,"line":1296},[92,3414,2494],{"class":102},[92,3416,1147],{"class":98},[92,3418,3419],{"class":207},"\"*\"",[92,3421,1269],{"class":102},[92,3423,3424],{"class":94,"line":1308},[92,3425,2508],{"class":102},[92,3427,3428,3431,3433],{"class":94,"line":1591},[92,3429,3430],{"class":102},"        cout",[92,3432,1147],{"class":98},[92,3434,1170],{"class":102},[92,3436,3437],{"class":94,"line":1596},[92,3438,2166],{"class":102},[92,3440,3441],{"class":94,"line":1602},[92,3442,1544],{"class":102},[38,3444,3445],{},"乘法口诀表",[83,3447,3449],{"className":85,"code":3448,"language":87,"meta":10,"style":10},"#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",[89,3450,3451,3457,3467,3475,3479,3505,3509,3534,3538,3578,3582,3590,3594],{"__ignoreMap":10},[92,3452,3453,3455],{"class":94,"line":95},[92,3454,1928],{"class":98},[92,3456,2313],{"class":207},[92,3458,3459,3461,3463,3465],{"class":94,"line":11},[92,3460,1936],{"class":98},[92,3462,1939],{"class":98},[92,3464,1943],{"class":1942},[92,3466,1269],{"class":102},[92,3468,3469,3471,3473],{"class":94,"line":1158},[92,3470,106],{"class":98},[92,3472,1952],{"class":1942},[92,3474,1955],{"class":102},[92,3476,3477],{"class":94,"line":1173},[92,3478,1525],{"class":102},[92,3480,3481,3483,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503],{"class":94,"line":1179},[92,3482,3180],{"class":98},[92,3484,103],{"class":102},[92,3486,106],{"class":98},[92,3488,3011],{"class":102},[92,3490,148],{"class":98},[92,3492,320],{"class":151},[92,3494,3018],{"class":102},[92,3496,1013],{"class":98},[92,3498,549],{"class":151},[92,3500,3018],{"class":102},[92,3502,2271],{"class":98},[92,3504,109],{"class":102},[92,3506,3507],{"class":94,"line":1193},[92,3508,2009],{"class":102},[92,3510,3511,3513,3515,3517,3519,3521,3523,3525,3527,3530,3532],{"class":94,"line":1199},[92,3512,3382],{"class":98},[92,3514,103],{"class":102},[92,3516,106],{"class":98},[92,3518,3389],{"class":102},[92,3520,148],{"class":98},[92,3522,320],{"class":151},[92,3524,3396],{"class":102},[92,3526,1567],{"class":98},[92,3528,3529],{"class":102},"i;j",[92,3531,2271],{"class":98},[92,3533,109],{"class":102},[92,3535,3536],{"class":94,"line":1290},[92,3537,2489],{"class":102},[92,3539,3540,3542,3544,3546,3548,3550,3552,3554,3556,3559,3561,3563,3565,3567,3569,3572,3574,3576],{"class":94,"line":1296},[92,3541,2494],{"class":102},[92,3543,1147],{"class":98},[92,3545,570],{"class":102},[92,3547,1147],{"class":98},[92,3549,3419],{"class":207},[92,3551,1147],{"class":98},[92,3553,544],{"class":102},[92,3555,1147],{"class":98},[92,3557,3558],{"class":207},"\"=\"",[92,3560,1147],{"class":98},[92,3562,544],{"class":102},[92,3564,558],{"class":98},[92,3566,570],{"class":102},[92,3568,1147],{"class":98},[92,3570,3571],{"class":207},"'",[92,3573,1209],{"class":151},[92,3575,3571],{"class":207},[92,3577,1269],{"class":102},[92,3579,3580],{"class":94,"line":1308},[92,3581,2508],{"class":102},[92,3583,3584,3586,3588],{"class":94,"line":1591},[92,3585,3430],{"class":102},[92,3587,1147],{"class":98},[92,3589,1170],{"class":102},[92,3591,3592],{"class":94,"line":1596},[92,3593,2166],{"class":102},[92,3595,3596],{"class":94,"line":1602},[92,3597,1544],{"class":102},[63,3599,3601],{"id":3600},"_163跳出语句","1.6.3跳出语句",[46,3603,3604],{},[49,3605,3606],{},"break语句\n作用：用于跳出选择结构或者循环结构",[38,3608,3609],{},"break使用时机：",[1110,3611,3612,3615,3618],{},[49,3613,3614],{},"出现在switch条件语句中，作用是终止case并跳出switch",[49,3616,3617],{},"出现在循环结构中，作用是跳出当前的循环结构",[49,3619,3620],{},"出现在嵌套循环中，跳出最近的内层循环语句",[46,3622,3623,3626],{"start":11},[49,3624,3625],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[49,3627,3628],{},"goto语句\n语法：goto 标记;",[38,3630,3631],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[83,3633,3635],{"className":85,"code":3634,"language":87,"meta":10,"style":10},"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",[89,3636,3637,3645,3649,3662,3672,3685,3698,3711,3719,3735],{"__ignoreMap":10},[92,3638,3639,3641,3643],{"class":94,"line":95},[92,3640,106],{"class":98},[92,3642,1952],{"class":1942},[92,3644,1955],{"class":102},[92,3646,3647],{"class":94,"line":11},[92,3648,1525],{"class":102},[92,3650,3651,3653,3655,3658,3660],{"class":94,"line":1158},[92,3652,1530],{"class":102},[92,3654,1147],{"class":98},[92,3656,3657],{"class":207},"\"1\"",[92,3659,1147],{"class":98},[92,3661,1170],{"class":102},[92,3663,3664,3667,3670],{"class":94,"line":1173},[92,3665,3666],{"class":98},"    goto",[92,3668,3669],{"class":1942}," FLAG",[92,3671,1269],{"class":102},[92,3673,3674,3676,3678,3681,3683],{"class":94,"line":1179},[92,3675,1530],{"class":102},[92,3677,1147],{"class":98},[92,3679,3680],{"class":207},"\"2\"",[92,3682,1147],{"class":98},[92,3684,1170],{"class":102},[92,3686,3687,3689,3691,3694,3696],{"class":94,"line":1193},[92,3688,1530],{"class":102},[92,3690,1147],{"class":98},[92,3692,3693],{"class":207},"\"3\"",[92,3695,1147],{"class":98},[92,3697,1170],{"class":102},[92,3699,3700,3702,3704,3707,3709],{"class":94,"line":1199},[92,3701,1530],{"class":102},[92,3703,1147],{"class":98},[92,3705,3706],{"class":207},"\"4\"",[92,3708,1147],{"class":98},[92,3710,1170],{"class":102},[92,3712,3713,3716],{"class":94,"line":1290},[92,3714,3715],{"class":1942},"    FLAG",[92,3717,3718],{"class":102},":\n",[92,3720,3721,3723,3725,3728,3730,3732],{"class":94,"line":1296},[92,3722,1530],{"class":102},[92,3724,1147],{"class":98},[92,3726,3727],{"class":207},"\"5\"",[92,3729,1147],{"class":98},[92,3731,1217],{"class":102},[92,3733,3734],{"class":161},"\u002F\u002F跳过了2,3,4,直接到5\n",[92,3736,3737],{"class":94,"line":1308},[92,3738,1544],{"class":102},[33,3740,3742],{"id":3741},"_17数组","1.7数组",[63,3744,3746],{"id":3745},"_171一维数组","1.7.1一维数组",[46,3748,3749],{},[49,3750,3751],{},"一维数组定义方式",[240,3753,3754,3764],{},[243,3755,3756],{},[246,3757,3758,3761],{},[249,3759,3760],{},"方式",[249,3762,3763],{},"注意事项",[287,3765,3766,3780,3790],{},[246,3767,3768,3774],{},[292,3769,3770,3771,158],{},"数据类型 数组名",[92,3772,3773],{},"数组长度",[292,3775,3776,3777,3779],{},"这种方式是先定义再arr",[92,3778,544],{},"赋值",[246,3781,3782,3787],{},[292,3783,3770,3784,3786],{},[92,3785,3773],{},"={值1,值2....};",[292,3788,3789],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[246,3791,3792,3796],{},[292,3793,3770,3794,3786],{},[92,3795],{},[292,3797,3798,3799,3801],{},"int arr",[92,3800],{},";这是不正确的，按照这样的方式定义必须有初始长度",[46,3803,3804],{"start":11},[49,3805,3806],{},"一维数组数组名\n用途：",[1110,3808,3809],{},[49,3810,3811],{},"1.可以统计整个数组在内存中的长度：",[83,3813,3815],{"className":85,"code":3814,"language":87,"meta":10,"style":10},"sizeof(arr);\nsizeof(arr[0]);\n",[89,3816,3817,3824],{"__ignoreMap":10},[92,3818,3819,3821],{"class":94,"line":95},[92,3820,99],{"class":98},[92,3822,3823],{"class":102},"(arr);\n",[92,3825,3826,3828,3831,3833],{"class":94,"line":11},[92,3827,99],{"class":98},[92,3829,3830],{"class":102},"(arr[",[92,3832,294],{"class":151},[92,3834,3835],{"class":102},"]);\n",[1110,3837,3838],{},[49,3839,3840],{},"2.可以获取数组在内存中的首地址:",[83,3842,3844],{"className":85,"code":3843,"language":87,"meta":10,"style":10},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[89,3845,3846,3851,3864,3869],{"__ignoreMap":10},[92,3847,3848],{"class":94,"line":95},[92,3849,3850],{"class":161},"\u002F\u002F查看16进制的首地址\n",[92,3852,3853,3855,3857,3860,3862],{"class":94,"line":11},[92,3854,1348],{"class":102},[92,3856,1147],{"class":98},[92,3858,3859],{"class":102},"arr",[92,3861,1147],{"class":98},[92,3863,1170],{"class":102},[92,3865,3866],{"class":94,"line":1158},[92,3867,3868],{"class":161},"\u002F\u002F看10进制数\n",[92,3870,3871,3873,3875,3877,3879,3881,3883,3886,3888,3890,3892],{"class":94,"line":1173},[92,3872,1348],{"class":102},[92,3874,1147],{"class":98},[92,3876,103],{"class":102},[92,3878,106],{"class":98},[92,3880,532],{"class":102},[92,3882,456],{"class":98},[92,3884,3885],{"class":102},"arr[",[92,3887,294],{"class":151},[92,3889,1043],{"class":102},[92,3891,1147],{"class":98},[92,3893,1170],{"class":102},[38,3895,3896],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1110,3898,3899],{},[49,3900,3901],{},"1️⃣五只小猪称体重",[83,3903,3905],{"className":85,"code":3904,"language":87,"meta":10,"style":10},"#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",[89,3906,3907,3913,3923,3931,3935,3975,3988,4014,4018,4030,4034,4044,4048,4052,4065,4075],{"__ignoreMap":10},[92,3908,3909,3911],{"class":94,"line":95},[92,3910,1928],{"class":98},[92,3912,1931],{"class":207},[92,3914,3915,3917,3919,3921],{"class":94,"line":11},[92,3916,1936],{"class":98},[92,3918,1939],{"class":98},[92,3920,1943],{"class":1942},[92,3922,1269],{"class":102},[92,3924,3925,3927,3929],{"class":94,"line":1158},[92,3926,106],{"class":98},[92,3928,1952],{"class":1942},[92,3930,1955],{"class":102},[92,3932,3933],{"class":94,"line":1173},[92,3934,1525],{"class":102},[92,3936,3937,3939,3942,3944,3946,3948,3950,3953,3955,3958,3960,3962,3964,3967,3969,3972],{"class":94,"line":1179},[92,3938,1964],{"class":98},[92,3940,3941],{"class":102}," arr[",[92,3943,422],{"class":151},[92,3945,1043],{"class":102},[92,3947,148],{"class":98},[92,3949,999],{"class":102},[92,3951,3952],{"class":151},"300",[92,3954,481],{"class":102},[92,3956,3957],{"class":151},"350",[92,3959,481],{"class":102},[92,3961,1701],{"class":151},[92,3963,481],{"class":102},[92,3965,3966],{"class":151},"400",[92,3968,481],{"class":102},[92,3970,3971],{"class":151},"250",[92,3973,3974],{"class":102},"};\n",[92,3976,3977,3979,3982,3984,3986],{"class":94,"line":1193},[92,3978,1964],{"class":98},[92,3980,3981],{"class":102}," tmp",[92,3983,148],{"class":98},[92,3985,294],{"class":151},[92,3987,1269],{"class":102},[92,3989,3990,3992,3994,3996,3998,4000,4002,4004,4006,4008,4010,4012],{"class":94,"line":1199},[92,3991,3180],{"class":98},[92,3993,1637],{"class":102},[92,3995,106],{"class":98},[92,3997,3011],{"class":102},[92,3999,148],{"class":98},[92,4001,294],{"class":151},[92,4003,3018],{"class":102},[92,4005,1013],{"class":98},[92,4007,422],{"class":151},[92,4009,3018],{"class":102},[92,4011,2271],{"class":98},[92,4013,109],{"class":102},[92,4015,4016],{"class":94,"line":1290},[92,4017,2009],{"class":102},[92,4019,4020,4022,4025,4027],{"class":94,"line":1296},[92,4021,2476],{"class":98},[92,4023,4024],{"class":102},"(tmp",[92,4026,1013],{"class":98},[92,4028,4029],{"class":102},"arr[i])\n",[92,4031,4032],{"class":94,"line":1308},[92,4033,2489],{"class":102},[92,4035,4036,4039,4041],{"class":94,"line":1591},[92,4037,4038],{"class":102},"            tmp",[92,4040,148],{"class":98},[92,4042,4043],{"class":102},"arr[i];\n",[92,4045,4046],{"class":94,"line":1596},[92,4047,2508],{"class":102},[92,4049,4050],{"class":94,"line":1602},[92,4051,2166],{"class":102},[92,4053,4054,4056,4058,4061,4063],{"class":94,"line":1607},[92,4055,1530],{"class":102},[92,4057,1147],{"class":98},[92,4059,4060],{"class":102},"tmp",[92,4062,1147],{"class":98},[92,4064,1170],{"class":102},[92,4066,4067,4070,4073],{"class":94,"line":1621},[92,4068,4069],{"class":98},"    return",[92,4071,4072],{"class":151}," 0",[92,4074,1269],{"class":102},[92,4076,4077],{"class":94,"line":1626},[92,4078,1544],{"class":102},[1110,4080,4081],{},[49,4082,4083],{},"2️⃣数组元素逆置",[83,4085,4087],{"className":85,"code":4086,"language":87,"meta":10,"style":10},"\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",[89,4088,4089,4094,4100,4110,4118,4122,4157,4173,4205,4218,4223,4228,4240,4250,4260,4265,4274,4284,4289,4294,4321,4325,4341,4345,4356,4365],{"__ignoreMap":10},[92,4090,4091],{"class":94,"line":95},[92,4092,4093],{"class":161},"\u002F\u002F元素逆置\n",[92,4095,4096,4098],{"class":94,"line":11},[92,4097,1928],{"class":98},[92,4099,1931],{"class":207},[92,4101,4102,4104,4106,4108],{"class":94,"line":1158},[92,4103,1936],{"class":98},[92,4105,1939],{"class":98},[92,4107,1943],{"class":1942},[92,4109,1269],{"class":102},[92,4111,4112,4114,4116],{"class":94,"line":1173},[92,4113,106],{"class":98},[92,4115,1952],{"class":1942},[92,4117,1955],{"class":102},[92,4119,4120],{"class":94,"line":1179},[92,4121,1525],{"class":102},[92,4123,4124,4127,4129,4131,4133,4135,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155],{"class":94,"line":1193},[92,4125,4126],{"class":98},"   int",[92,4128,3941],{"class":102},[92,4130,422],{"class":151},[92,4132,1043],{"class":102},[92,4134,148],{"class":98},[92,4136,999],{"class":102},[92,4138,320],{"class":151},[92,4140,481],{"class":102},[92,4142,180],{"class":151},[92,4144,481],{"class":102},[92,4146,174],{"class":151},[92,4148,481],{"class":102},[92,4150,396],{"class":151},[92,4152,481],{"class":102},[92,4154,422],{"class":151},[92,4156,3974],{"class":102},[92,4158,4159,4161,4164,4166,4168,4170],{"class":94,"line":1199},[92,4160,4126],{"class":98},[92,4162,4163],{"class":102}," start",[92,4165,148],{"class":98},[92,4167,294],{"class":151},[92,4169,158],{"class":102},[92,4171,4172],{"class":161},"\u002F\u002F起始下标\n",[92,4174,4175,4177,4180,4183,4186,4189,4191,4193,4196,4198,4200,4202],{"class":94,"line":1290},[92,4176,4126],{"class":98},[92,4178,4179],{"class":102}," end",[92,4181,4182],{"class":98},"=sizeof",[92,4184,4185],{"class":102},"(arr)",[92,4187,4188],{"class":98},"\u002Fsizeof",[92,4190,3830],{"class":102},[92,4192,294],{"class":151},[92,4194,4195],{"class":102},"])",[92,4197,635],{"class":98},[92,4199,320],{"class":151},[92,4201,158],{"class":102},[92,4203,4204],{"class":161},"\u002F\u002F结束下标\n",[92,4206,4207,4210,4213,4215],{"class":94,"line":1296},[92,4208,4209],{"class":98},"   while",[92,4211,4212],{"class":102}," (start",[92,4214,1013],{"class":98},[92,4216,4217],{"class":102},"end)\n",[92,4219,4220],{"class":94,"line":1308},[92,4221,4222],{"class":102},"   {\n",[92,4224,4225],{"class":94,"line":1591},[92,4226,4227],{"class":161},"    \u002F\u002F实现元素互换代码\n",[92,4229,4230,4232,4235,4237],{"class":94,"line":1596},[92,4231,1964],{"class":98},[92,4233,4234],{"class":102}," temp",[92,4236,148],{"class":98},[92,4238,4239],{"class":102},"arr[start];\n",[92,4241,4242,4245,4247],{"class":94,"line":1602},[92,4243,4244],{"class":102},"    arr[start]",[92,4246,148],{"class":98},[92,4248,4249],{"class":102},"arr[end];\n",[92,4251,4252,4255,4257],{"class":94,"line":1607},[92,4253,4254],{"class":102},"    arr[end]",[92,4256,148],{"class":98},[92,4258,4259],{"class":102},"temp;\n",[92,4261,4262],{"class":94,"line":1621},[92,4263,4264],{"class":161},"    \u002F\u002F下标更新\n",[92,4266,4267,4270,4272],{"class":94,"line":1626},[92,4268,4269],{"class":102},"    start",[92,4271,2271],{"class":98},[92,4273,1269],{"class":102},[92,4275,4276,4279,4282],{"class":94,"line":1632},[92,4277,4278],{"class":102},"    end",[92,4280,4281],{"class":98},"--",[92,4283,1269],{"class":102},[92,4285,4286],{"class":94,"line":1653},[92,4287,4288],{"class":102},"   }\n",[92,4290,4291],{"class":94,"line":1658},[92,4292,4293],{"class":161},"   \u002F\u002F输出逆置后的数组\n",[92,4295,4296,4299,4301,4303,4305,4307,4309,4311,4313,4315,4317,4319],{"class":94,"line":1672},[92,4297,4298],{"class":98},"   for",[92,4300,1637],{"class":102},[92,4302,106],{"class":98},[92,4304,3011],{"class":102},[92,4306,148],{"class":98},[92,4308,294],{"class":151},[92,4310,3018],{"class":102},[92,4312,1013],{"class":98},[92,4314,422],{"class":151},[92,4316,3018],{"class":102},[92,4318,2271],{"class":98},[92,4320,109],{"class":102},[92,4322,4323],{"class":94,"line":1677},[92,4324,4222],{"class":102},[92,4326,4327,4329,4331,4334,4336,4339],{"class":94,"line":1706},[92,4328,1530],{"class":102},[92,4330,1147],{"class":98},[92,4332,4333],{"class":102},"arr[i]",[92,4335,1147],{"class":98},[92,4337,4338],{"class":207},"\" \"",[92,4340,1269],{"class":102},[92,4342,4343],{"class":94,"line":1711},[92,4344,4288],{"class":102},[92,4346,4347,4350,4352,4354],{"class":94,"line":1728},[92,4348,4349],{"class":1942},"   system",[92,4351,103],{"class":102},[92,4353,2287],{"class":207},[92,4355,2698],{"class":102},[92,4357,4358,4361,4363],{"class":94,"line":1733},[92,4359,4360],{"class":98},"   return",[92,4362,4072],{"class":151},[92,4364,1269],{"class":102},[92,4366,4367],{"class":94,"line":1738},[92,4368,1544],{"class":102},[1110,4370,4371],{},[49,4372,4373],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[83,4375,4377],{"className":85,"code":4376,"language":87,"meta":10,"style":10},"\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",[89,4378,4379,4384,4390,4400,4408,4412,4464,4477,4503,4507,4521,4525,4530,4535,4565,4569,4574,4608,4612,4617,4637,4642,4654,4670,4685,4690,4694,4698,4711,4737,4741,4755,4759,4767],{"__ignoreMap":10},[92,4380,4381],{"class":94,"line":95},[92,4382,4383],{"class":161},"\u002F\u002F冒泡排序,升序\n",[92,4385,4386,4388],{"class":94,"line":11},[92,4387,1928],{"class":98},[92,4389,1931],{"class":207},[92,4391,4392,4394,4396,4398],{"class":94,"line":1158},[92,4393,1936],{"class":98},[92,4395,1939],{"class":98},[92,4397,1943],{"class":1942},[92,4399,1269],{"class":102},[92,4401,4402,4404,4406],{"class":94,"line":1173},[92,4403,106],{"class":98},[92,4405,1952],{"class":1942},[92,4407,1955],{"class":102},[92,4409,4410],{"class":94,"line":1179},[92,4411,1525],{"class":102},[92,4413,4414,4416,4418,4420,4423,4425,4428,4430,4432,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462],{"class":94,"line":1193},[92,4415,1964],{"class":98},[92,4417,3941],{"class":102},[92,4419,523],{"class":151},[92,4421,4422],{"class":102},"] ",[92,4424,148],{"class":98},[92,4426,4427],{"class":102}," {",[92,4429,396],{"class":151},[92,4431,481],{"class":102},[92,4433,180],{"class":151},[92,4435,481],{"class":102},[92,4437,498],{"class":151},[92,4439,481],{"class":102},[92,4441,294],{"class":151},[92,4443,481],{"class":102},[92,4445,422],{"class":151},[92,4447,481],{"class":102},[92,4449,472],{"class":151},[92,4451,481],{"class":102},[92,4453,320],{"class":151},[92,4455,481],{"class":102},[92,4457,174],{"class":151},[92,4459,481],{"class":102},[92,4461,523],{"class":151},[92,4463,3974],{"class":102},[92,4465,4466,4468,4470,4473,4475],{"class":94,"line":1199},[92,4467,1530],{"class":102},[92,4469,1147],{"class":98},[92,4471,4472],{"class":207},"\"排序前：\"",[92,4474,1147],{"class":98},[92,4476,1170],{"class":102},[92,4478,4479,4481,4483,4485,4487,4489,4491,4493,4495,4497,4499,4501],{"class":94,"line":1290},[92,4480,3180],{"class":98},[92,4482,1637],{"class":102},[92,4484,106],{"class":98},[92,4486,3011],{"class":102},[92,4488,148],{"class":98},[92,4490,294],{"class":151},[92,4492,3018],{"class":102},[92,4494,1013],{"class":98},[92,4496,523],{"class":151},[92,4498,3018],{"class":102},[92,4500,2271],{"class":98},[92,4502,109],{"class":102},[92,4504,4505],{"class":94,"line":1296},[92,4506,2009],{"class":102},[92,4508,4509,4511,4513,4515,4517,4519],{"class":94,"line":1308},[92,4510,3430],{"class":102},[92,4512,1147],{"class":98},[92,4514,4333],{"class":102},[92,4516,1147],{"class":98},[92,4518,4338],{"class":207},[92,4520,1269],{"class":102},[92,4522,4523],{"class":94,"line":1591},[92,4524,2166],{"class":102},[92,4526,4527],{"class":94,"line":1596},[92,4528,4529],{"class":161},"    \u002F\u002F开始冒泡排序\n",[92,4531,4532],{"class":94,"line":1602},[92,4533,4534],{"class":161},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[92,4536,4537,4539,4541,4543,4545,4547,4549,4551,4553,4555,4557,4559,4561,4563],{"class":94,"line":1607},[92,4538,3180],{"class":98},[92,4540,1637],{"class":102},[92,4542,106],{"class":98},[92,4544,3011],{"class":102},[92,4546,148],{"class":98},[92,4548,294],{"class":151},[92,4550,3018],{"class":102},[92,4552,1013],{"class":98},[92,4554,523],{"class":151},[92,4556,635],{"class":98},[92,4558,320],{"class":151},[92,4560,3018],{"class":102},[92,4562,2271],{"class":98},[92,4564,109],{"class":102},[92,4566,4567],{"class":94,"line":1621},[92,4568,2009],{"class":102},[92,4570,4571],{"class":94,"line":1626},[92,4572,4573],{"class":161},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[92,4575,4576,4578,4580,4582,4584,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606],{"class":94,"line":1632},[92,4577,3382],{"class":98},[92,4579,1637],{"class":102},[92,4581,106],{"class":98},[92,4583,3389],{"class":102},[92,4585,148],{"class":98},[92,4587,294],{"class":151},[92,4589,3396],{"class":102},[92,4591,1013],{"class":98},[92,4593,523],{"class":151},[92,4595,635],{"class":98},[92,4597,544],{"class":102},[92,4599,635],{"class":98},[92,4601,320],{"class":151},[92,4603,3396],{"class":102},[92,4605,2271],{"class":98},[92,4607,109],{"class":102},[92,4609,4610],{"class":94,"line":1653},[92,4611,2489],{"class":102},[92,4613,4614],{"class":94,"line":1658},[92,4615,4616],{"class":161},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[92,4618,4619,4622,4625,4627,4630,4632,4634],{"class":94,"line":1672},[92,4620,4621],{"class":98},"            if",[92,4623,4624],{"class":102},"(arr[j]",[92,4626,1063],{"class":98},[92,4628,4629],{"class":102},"arr[j",[92,4631,584],{"class":98},[92,4633,320],{"class":151},[92,4635,4636],{"class":102},"])\n",[92,4638,4639],{"class":94,"line":1677},[92,4640,4641],{"class":102},"            {\n",[92,4643,4644,4647,4649,4651],{"class":94,"line":1706},[92,4645,4646],{"class":98},"                int",[92,4648,4234],{"class":102},[92,4650,148],{"class":98},[92,4652,4653],{"class":102},"arr[j];\n",[92,4655,4656,4659,4661,4663,4665,4667],{"class":94,"line":1711},[92,4657,4658],{"class":102},"                arr[j]",[92,4660,148],{"class":98},[92,4662,4629],{"class":102},[92,4664,584],{"class":98},[92,4666,320],{"class":151},[92,4668,4669],{"class":102},"];\n",[92,4671,4672,4675,4677,4679,4681,4683],{"class":94,"line":1728},[92,4673,4674],{"class":102},"                arr[j",[92,4676,584],{"class":98},[92,4678,320],{"class":151},[92,4680,1043],{"class":102},[92,4682,148],{"class":98},[92,4684,4259],{"class":102},[92,4686,4687],{"class":94,"line":1733},[92,4688,4689],{"class":102},"            }\n",[92,4691,4692],{"class":94,"line":1738},[92,4693,2508],{"class":102},[92,4695,4696],{"class":94,"line":1743},[92,4697,2166],{"class":102},[92,4699,4700,4702,4704,4707,4709],{"class":94,"line":1757},[92,4701,1530],{"class":102},[92,4703,1147],{"class":98},[92,4705,4706],{"class":207},"\"排序后：\"",[92,4708,1147],{"class":98},[92,4710,1170],{"class":102},[92,4712,4713,4715,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735],{"class":94,"line":1762},[92,4714,3180],{"class":98},[92,4716,1637],{"class":102},[92,4718,106],{"class":98},[92,4720,3011],{"class":102},[92,4722,148],{"class":98},[92,4724,294],{"class":151},[92,4726,3018],{"class":102},[92,4728,1013],{"class":98},[92,4730,523],{"class":151},[92,4732,3018],{"class":102},[92,4734,2271],{"class":98},[92,4736,109],{"class":102},[92,4738,4739],{"class":94,"line":2556},[92,4740,2009],{"class":102},[92,4742,4743,4745,4747,4749,4751,4753],{"class":94,"line":2570},[92,4744,3430],{"class":102},[92,4746,1147],{"class":98},[92,4748,4333],{"class":102},[92,4750,1147],{"class":98},[92,4752,4338],{"class":207},[92,4754,1269],{"class":102},[92,4756,4757],{"class":94,"line":2578},[92,4758,2166],{"class":102},[92,4760,4761,4763,4765],{"class":94,"line":2583},[92,4762,4069],{"class":98},[92,4764,4072],{"class":151},[92,4766,1269],{"class":102},[92,4768,4769],{"class":94,"line":2589},[92,4770,1544],{"class":102},[63,4772,4774],{"id":4773},"_172二维数组","1.7.2二维数组",[46,4776,4777],{},[49,4778,4779],{},"二维数组的四种定义方式",[240,4781,4782,4791],{},[243,4783,4784],{},[246,4785,4786,4789],{},[249,4787,4788],{},"序号",[249,4790,3760],{},[287,4792,4793,4803,4812,4821,4830],{},[246,4794,4795,4797],{},[292,4796,320],{},[292,4798,4799,4800,158],{},"数据类型 数组名[行数]",[92,4801,4802],{},"列数",[246,4804,4805,4807],{},[292,4806,180],{},[292,4808,4799,4809,4811],{},[92,4810,4802],{},"={ {数据1,数据2}，{数据3，数据4}... }",[246,4813,4814,4816],{},[292,4815,174],{},[292,4817,4799,4818,4820],{},[92,4819,4802],{},"={数据1,数据2,数据3...}",[246,4822,4823,4825],{},[292,4824,396],{},[292,4826,4827,4828,4820],{},"数据类型 数组名[]",[92,4829,4802],{},[246,4831,4832,4835],{},[292,4833,4834],{},"注意：不能只省略列数",[292,4836],{},[46,4838,4839],{"start":11},[49,4840,4841],{},"二维数组数组名",[1110,4843,4844,4847],{},[49,4845,4846],{},"1.查看二维数组所占内存空间",[49,4848,4849],{},"2.获取二维数组首地址",[38,4851,4852],{},"已知二维数组，求二维数组的行数与列数",[83,4854,4856],{"className":85,"code":4855,"language":87,"meta":10,"style":10},"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",[89,4857,4858,4866,4870,4888,4892,4910,4926,4931,4956,4989],{"__ignoreMap":10},[92,4859,4860,4862,4864],{"class":94,"line":95},[92,4861,106],{"class":98},[92,4863,1952],{"class":1942},[92,4865,1955],{"class":102},[92,4867,4868],{"class":94,"line":11},[92,4869,1525],{"class":102},[92,4871,4872,4874,4876,4878,4881,4883,4885],{"class":94,"line":1158},[92,4873,1964],{"class":98},[92,4875,3941],{"class":102},[92,4877,180],{"class":151},[92,4879,4880],{"class":102},"][",[92,4882,174],{"class":151},[92,4884,1043],{"class":102},[92,4886,4887],{"class":98},"=\n",[92,4889,4890],{"class":94,"line":1173},[92,4891,2009],{"class":102},[92,4893,4894,4897,4899,4901,4903,4905,4907],{"class":94,"line":1179},[92,4895,4896],{"class":102},"        {",[92,4898,320],{"class":151},[92,4900,481],{"class":102},[92,4902,180],{"class":151},[92,4904,481],{"class":102},[92,4906,174],{"class":151},[92,4908,4909],{"class":102},"},\n",[92,4911,4912,4914,4916,4918,4920,4922,4924],{"class":94,"line":1193},[92,4913,4896],{"class":102},[92,4915,396],{"class":151},[92,4917,481],{"class":102},[92,4919,422],{"class":151},[92,4921,481],{"class":102},[92,4923,447],{"class":151},[92,4925,1544],{"class":102},[92,4927,4928],{"class":94,"line":1199},[92,4929,4930],{"class":102},"    };\n",[92,4932,4933,4935,4937,4940,4942,4944,4946,4948,4950,4952,4954],{"class":94,"line":1290},[92,4934,1530],{"class":102},[92,4936,1147],{"class":98},[92,4938,4939],{"class":207},"\"二维数组的行数\"",[92,4941,1351],{"class":98},[92,4943,4185],{"class":102},[92,4945,4188],{"class":98},[92,4947,3830],{"class":102},[92,4949,294],{"class":151},[92,4951,4195],{"class":102},[92,4953,1147],{"class":98},[92,4955,1170],{"class":102},[92,4957,4958,4960,4962,4965,4967,4969,4971,4973,4975,4977,4979,4981,4983,4985,4987],{"class":94,"line":1296},[92,4959,1530],{"class":102},[92,4961,1147],{"class":98},[92,4963,4964],{"class":207},"\"二维数组的列数\"",[92,4966,1351],{"class":98},[92,4968,3830],{"class":102},[92,4970,294],{"class":151},[92,4972,4195],{"class":102},[92,4974,4188],{"class":98},[92,4976,3830],{"class":102},[92,4978,294],{"class":151},[92,4980,4880],{"class":102},[92,4982,294],{"class":151},[92,4984,4195],{"class":102},[92,4986,1147],{"class":98},[92,4988,1170],{"class":102},[92,4990,4991],{"class":94,"line":1308},[92,4992,1544],{"class":102},[38,4994,4995],{},"查看二维数组首地址",[83,4997,4999],{"className":85,"code":4998,"language":87,"meta":10,"style":10},"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",[89,5000,5001,5018,5044,5069],{"__ignoreMap":10},[92,5002,5003,5005,5007,5010,5012,5014,5016],{"class":94,"line":95},[92,5004,1348],{"class":102},[92,5006,1147],{"class":98},[92,5008,5009],{"class":207},"\"二维数组首地址：\"",[92,5011,1147],{"class":98},[92,5013,3859],{"class":102},[92,5015,1147],{"class":98},[92,5017,1170],{"class":102},[92,5019,5020,5022,5024,5027,5029,5031,5033,5036,5038,5040,5042],{"class":94,"line":11},[92,5021,1348],{"class":102},[92,5023,1147],{"class":98},[92,5025,5026],{"class":207},"\"二维数组第一行的首地址：\"",[92,5028,1147],{"class":98},[92,5030,103],{"class":102},[92,5032,106],{"class":98},[92,5034,5035],{"class":102},")arr[",[92,5037,294],{"class":151},[92,5039,1043],{"class":102},[92,5041,1147],{"class":98},[92,5043,1170],{"class":102},[92,5045,5046,5048,5050,5053,5055,5057,5059,5061,5063,5065,5067],{"class":94,"line":1158},[92,5047,1348],{"class":102},[92,5049,1147],{"class":98},[92,5051,5052],{"class":207},"\"二维数组第二行的首地址：\"",[92,5054,1147],{"class":98},[92,5056,103],{"class":102},[92,5058,106],{"class":98},[92,5060,5035],{"class":102},[92,5062,320],{"class":151},[92,5064,1043],{"class":102},[92,5066,1147],{"class":98},[92,5068,1170],{"class":102},[92,5070,5071,5073,5075,5078,5080,5082,5084,5086,5088,5090,5092,5094,5096,5098,5100,5102],{"class":94,"line":1173},[92,5072,1348],{"class":102},[92,5074,1147],{"class":98},[92,5076,5077],{"class":207},"\"二维数组第一个元素的首地址:\"",[92,5079,1147],{"class":98},[92,5081,103],{"class":102},[92,5083,106],{"class":98},[92,5085,532],{"class":102},[92,5087,456],{"class":98},[92,5089,3885],{"class":102},[92,5091,294],{"class":151},[92,5093,4880],{"class":102},[92,5095,294],{"class":151},[92,5097,1043],{"class":102},[92,5099,1147],{"class":98},[92,5101,1217],{"class":102},[92,5103,5104],{"class":161},"\u002F\u002F对于数，要加取址符\n",[5106,5107,5108],"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":10,"searchDepth":11,"depth":11,"links":5110},[5111,5112,5113,5121,5122,5128,5133],{"id":35,"depth":11,"text":36},{"id":43,"depth":11,"text":44},{"id":60,"depth":11,"text":61,"children":5114},[5115,5116,5117,5118,5119,5120],{"id":65,"depth":1158,"text":66},{"id":119,"depth":1158,"text":120},{"id":188,"depth":1158,"text":189},{"id":1128,"depth":1158,"text":1129},{"id":1223,"depth":1158,"text":1224},{"id":1322,"depth":1158,"text":1323},{"id":1364,"depth":11,"text":1365},{"id":1432,"depth":11,"text":1433,"children":5123},[5124,5125,5126,5127],{"id":1436,"depth":1158,"text":1437},{"id":1458,"depth":1158,"text":1459},{"id":1467,"depth":1158,"text":1468},{"id":1476,"depth":1158,"text":1477},{"id":1485,"depth":11,"text":1486,"children":5129},[5130,5131,5132],{"id":1489,"depth":1158,"text":1490},{"id":2184,"depth":1158,"text":2185},{"id":3600,"depth":1158,"text":3601},{"id":3741,"depth":11,"text":3742,"children":5134},[5135,5136],{"id":3745,"depth":1158,"text":3746},{"id":4773,"depth":1158,"text":4774},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":25,"description":10},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5143,"title":5144,"body":5145,"description":10,"extension":14,"meta":6245,"navigation":17,"path":6246,"seo":6247,"stem":6248,"__hash__":6249},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5146,"toc":6237},[5147,5150,5154,5162,5170,5173,5239,5243,5246,5322,5326,5329,5332,5335,5548,5552,5557,5621,5626,5693,5698,5789,5792,5897,5901,5904,5910,6054,6058,6061,6075,6078,6123,6126,6234],[29,5148,5144],{"id":5149},"_2函数",[33,5151,5153],{"id":5152},"_21函数概述","2.1函数概述",[46,5155,5156,5159],{},[49,5157,5158],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[49,5160,5161],{},"语法：",[83,5163,5168],{"className":5164,"code":5166,"language":5167,"meta":10},[5165],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[89,5169,5166],{"__ignoreMap":10},[38,5171,5172],{},"小案例",[83,5174,5176],{"className":85,"code":5175,"language":87,"meta":10,"style":10},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[89,5177,5178,5183,5207,5211,5228,5235],{"__ignoreMap":10},[92,5179,5180],{"class":94,"line":95},[92,5181,5182],{"class":161},"\u002F\u002Fnum1,num2形参\n",[92,5184,5185,5187,5190,5192,5194,5198,5200,5202,5205],{"class":94,"line":11},[92,5186,106],{"class":98},[92,5188,5189],{"class":1942}," add",[92,5191,103],{"class":102},[92,5193,106],{"class":98},[92,5195,5197],{"class":5196},"s4XuR"," num1",[92,5199,481],{"class":102},[92,5201,106],{"class":98},[92,5203,5204],{"class":5196}," num2",[92,5206,109],{"class":102},[92,5208,5209],{"class":94,"line":1158},[92,5210,1525],{"class":102},[92,5212,5213,5215,5218,5220,5223,5225],{"class":94,"line":1173},[92,5214,1964],{"class":98},[92,5216,5217],{"class":102}," sum",[92,5219,148],{"class":98},[92,5221,5222],{"class":102},"num1",[92,5224,584],{"class":98},[92,5226,5227],{"class":102},"num2;\n",[92,5229,5230,5232],{"class":94,"line":1179},[92,5231,4069],{"class":98},[92,5233,5234],{"class":102}," sum;\n",[92,5236,5237],{"class":94,"line":1193},[92,5238,1544],{"class":102},[33,5240,5242],{"id":5241},"_22函数调用","2.2函数调用",[38,5244,5245],{},"调用刚刚写的求和函数",[83,5247,5249],{"className":85,"code":5248,"language":87,"meta":10,"style":10},"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",[89,5250,5251,5259,5263,5268,5280,5292,5301,5306,5318],{"__ignoreMap":10},[92,5252,5253,5255,5257],{"class":94,"line":95},[92,5254,106],{"class":98},[92,5256,1952],{"class":1942},[92,5258,1955],{"class":102},[92,5260,5261],{"class":94,"line":11},[92,5262,1525],{"class":102},[92,5264,5265],{"class":94,"line":1158},[92,5266,5267],{"class":161},"    \u002F\u002Fa,b实参\n",[92,5269,5270,5272,5274,5276,5278],{"class":94,"line":1173},[92,5271,1964],{"class":98},[92,5273,1377],{"class":102},[92,5275,148],{"class":98},[92,5277,294],{"class":151},[92,5279,1269],{"class":102},[92,5281,5282,5284,5286,5288,5290],{"class":94,"line":1179},[92,5283,1964],{"class":98},[92,5285,2812],{"class":102},[92,5287,148],{"class":98},[92,5289,294],{"class":151},[92,5291,1269],{"class":102},[92,5293,5294,5296,5298],{"class":94,"line":1193},[92,5295,1991],{"class":102},[92,5297,1408],{"class":98},[92,5299,5300],{"class":102},"a,b;\n",[92,5302,5303],{"class":94,"line":1199},[92,5304,5305],{"class":161},"    \u002F\u002F调用函数时，实参值传给了形参\n",[92,5307,5308,5310,5312,5315],{"class":94,"line":1290},[92,5309,1530],{"class":102},[92,5311,1147],{"class":98},[92,5313,5314],{"class":1942},"add",[92,5316,5317],{"class":102},"(a,b);\n",[92,5319,5320],{"class":94,"line":1296},[92,5321,1544],{"class":102},[33,5323,5325],{"id":5324},"_23值传递","2.3值传递",[38,5327,5328],{},"值传递就是函数调用时实参将数值传给形参",[38,5330,5331],{},"值传递时，如果形参发生任何改变，不会影响实参",[38,5333,5334],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[83,5336,5338],{"className":85,"code":5337,"language":87,"meta":10,"style":10},"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",[89,5339,5340,5362,5366,5379,5396,5414,5425,5434,5443,5456,5472,5488,5497,5501,5509,5513,5525,5537,5544],{"__ignoreMap":10},[92,5341,5342,5345,5348,5350,5352,5354,5356,5358,5360],{"class":94,"line":95},[92,5343,5344],{"class":98},"void",[92,5346,5347],{"class":1942}," swap",[92,5349,103],{"class":102},[92,5351,106],{"class":98},[92,5353,5197],{"class":5196},[92,5355,481],{"class":102},[92,5357,106],{"class":98},[92,5359,5204],{"class":5196},[92,5361,109],{"class":102},[92,5363,5364],{"class":94,"line":11},[92,5365,1525],{"class":102},[92,5367,5368,5370,5372,5375,5377],{"class":94,"line":1158},[92,5369,1530],{"class":102},[92,5371,1147],{"class":98},[92,5373,5374],{"class":207},"\"交换前：\"",[92,5376,1147],{"class":98},[92,5378,1170],{"class":102},[92,5380,5381,5383,5385,5388,5390,5392,5394],{"class":94,"line":1173},[92,5382,1530],{"class":102},[92,5384,1147],{"class":98},[92,5386,5387],{"class":207},"\"num1=\"",[92,5389,1147],{"class":98},[92,5391,5222],{"class":102},[92,5393,1147],{"class":98},[92,5395,1170],{"class":102},[92,5397,5398,5400,5402,5405,5407,5410,5412],{"class":94,"line":1179},[92,5399,1530],{"class":102},[92,5401,1147],{"class":98},[92,5403,5404],{"class":207},"\"num2=\"",[92,5406,1147],{"class":98},[92,5408,5409],{"class":102},"num2",[92,5411,1147],{"class":98},[92,5413,1170],{"class":102},[92,5415,5416,5418,5420,5422],{"class":94,"line":1193},[92,5417,1964],{"class":98},[92,5419,4234],{"class":102},[92,5421,148],{"class":98},[92,5423,5424],{"class":102},"num1;\n",[92,5426,5427,5430,5432],{"class":94,"line":1199},[92,5428,5429],{"class":102},"    num1",[92,5431,148],{"class":98},[92,5433,5227],{"class":102},[92,5435,5436,5439,5441],{"class":94,"line":1290},[92,5437,5438],{"class":102},"    num2",[92,5440,148],{"class":98},[92,5442,4259],{"class":102},[92,5444,5445,5447,5449,5452,5454],{"class":94,"line":1296},[92,5446,1530],{"class":102},[92,5448,1147],{"class":98},[92,5450,5451],{"class":207},"\"交换后：\"",[92,5453,1147],{"class":98},[92,5455,1170],{"class":102},[92,5457,5458,5460,5462,5464,5466,5468,5470],{"class":94,"line":1308},[92,5459,1530],{"class":102},[92,5461,1147],{"class":98},[92,5463,5387],{"class":207},[92,5465,1147],{"class":98},[92,5467,5222],{"class":102},[92,5469,1147],{"class":98},[92,5471,1170],{"class":102},[92,5473,5474,5476,5478,5480,5482,5484,5486],{"class":94,"line":1591},[92,5475,1530],{"class":102},[92,5477,1147],{"class":98},[92,5479,5404],{"class":207},[92,5481,1147],{"class":98},[92,5483,5409],{"class":102},[92,5485,1147],{"class":98},[92,5487,1170],{"class":102},[92,5489,5490,5492,5494],{"class":94,"line":1596},[92,5491,4069],{"class":98},[92,5493,158],{"class":102},[92,5495,5496],{"class":161},"\u002F\u002F或者不写\n",[92,5498,5499],{"class":94,"line":1602},[92,5500,1544],{"class":102},[92,5502,5503,5505,5507],{"class":94,"line":1607},[92,5504,106],{"class":98},[92,5506,1952],{"class":1942},[92,5508,1955],{"class":102},[92,5510,5511],{"class":94,"line":1621},[92,5512,1525],{"class":102},[92,5514,5515,5517,5519,5521,5523],{"class":94,"line":1626},[92,5516,1964],{"class":98},[92,5518,1377],{"class":102},[92,5520,148],{"class":98},[92,5522,549],{"class":151},[92,5524,1269],{"class":102},[92,5526,5527,5529,5531,5533,5535],{"class":94,"line":1632},[92,5528,1964],{"class":98},[92,5530,2812],{"class":102},[92,5532,148],{"class":98},[92,5534,803],{"class":151},[92,5536,1269],{"class":102},[92,5538,5539,5542],{"class":94,"line":1653},[92,5540,5541],{"class":1942},"    swap",[92,5543,5317],{"class":102},[92,5545,5546],{"class":94,"line":1658},[92,5547,1544],{"class":102},[33,5549,5551],{"id":5550},"_24函数的常见形式","2.4函数的常见形式",[46,5553,5554],{},[49,5555,5556],{},"无参无返",[83,5558,5560],{"className":85,"code":5559,"language":87,"meta":10,"style":10},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[89,5561,5562,5571,5575,5588,5592,5600,5604,5609,5617],{"__ignoreMap":10},[92,5563,5564,5566,5569],{"class":94,"line":95},[92,5565,5344],{"class":98},[92,5567,5568],{"class":1942}," test01",[92,5570,1955],{"class":102},[92,5572,5573],{"class":94,"line":11},[92,5574,1525],{"class":102},[92,5576,5577,5579,5581,5584,5586],{"class":94,"line":1158},[92,5578,1530],{"class":102},[92,5580,1147],{"class":98},[92,5582,5583],{"class":207},"\"你好\"",[92,5585,1147],{"class":98},[92,5587,1170],{"class":102},[92,5589,5590],{"class":94,"line":1173},[92,5591,1544],{"class":102},[92,5593,5594,5596,5598],{"class":94,"line":1179},[92,5595,106],{"class":98},[92,5597,1952],{"class":1942},[92,5599,1955],{"class":102},[92,5601,5602],{"class":94,"line":1193},[92,5603,1525],{"class":102},[92,5605,5606],{"class":94,"line":1199},[92,5607,5608],{"class":161},"    \u002F\u002F函数调用\n",[92,5610,5611,5614],{"class":94,"line":1290},[92,5612,5613],{"class":1942},"    test01",[92,5615,5616],{"class":102},"();\n",[92,5618,5619],{"class":94,"line":1296},[92,5620,1544],{"class":102},[46,5622,5623],{"start":11},[49,5624,5625],{},"有参无返",[83,5627,5629],{"className":85,"code":5628,"language":87,"meta":10,"style":10},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[89,5630,5631,5646,5650,5662,5666,5674,5678,5689],{"__ignoreMap":10},[92,5632,5633,5635,5638,5640,5642,5644],{"class":94,"line":95},[92,5634,5344],{"class":98},[92,5636,5637],{"class":1942}," test02",[92,5639,103],{"class":102},[92,5641,106],{"class":98},[92,5643,1377],{"class":5196},[92,5645,109],{"class":102},[92,5647,5648],{"class":94,"line":11},[92,5649,1525],{"class":102},[92,5651,5652,5654,5656,5658,5660],{"class":94,"line":1158},[92,5653,1530],{"class":102},[92,5655,1147],{"class":98},[92,5657,5583],{"class":207},[92,5659,1147],{"class":98},[92,5661,1170],{"class":102},[92,5663,5664],{"class":94,"line":1173},[92,5665,1544],{"class":102},[92,5667,5668,5670,5672],{"class":94,"line":1179},[92,5669,106],{"class":98},[92,5671,1952],{"class":1942},[92,5673,1955],{"class":102},[92,5675,5676],{"class":94,"line":1193},[92,5677,1525],{"class":102},[92,5679,5680,5683,5685,5687],{"class":94,"line":1199},[92,5681,5682],{"class":1942},"    test02",[92,5684,103],{"class":102},[92,5686,414],{"class":151},[92,5688,2698],{"class":102},[92,5690,5691],{"class":94,"line":1290},[92,5692,1544],{"class":102},[46,5694,5695],{"start":1158},[49,5696,5697],{},"无参有返",[83,5699,5701],{"className":85,"code":5700,"language":87,"meta":10,"style":10},"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",[89,5702,5703,5712,5716,5728,5737,5741,5749,5753,5766,5785],{"__ignoreMap":10},[92,5704,5705,5707,5710],{"class":94,"line":95},[92,5706,106],{"class":98},[92,5708,5709],{"class":1942}," test03",[92,5711,1955],{"class":102},[92,5713,5714],{"class":94,"line":11},[92,5715,1525],{"class":102},[92,5717,5718,5720,5722,5724,5726],{"class":94,"line":1158},[92,5719,1530],{"class":102},[92,5721,1147],{"class":98},[92,5723,5583],{"class":207},[92,5725,1147],{"class":98},[92,5727,1170],{"class":102},[92,5729,5730,5732,5735],{"class":94,"line":1173},[92,5731,4069],{"class":98},[92,5733,5734],{"class":151}," 100",[92,5736,1269],{"class":102},[92,5738,5739],{"class":94,"line":1179},[92,5740,1544],{"class":102},[92,5742,5743,5745,5747],{"class":94,"line":1193},[92,5744,106],{"class":98},[92,5746,1952],{"class":1942},[92,5748,1955],{"class":102},[92,5750,5751],{"class":94,"line":1199},[92,5752,1525],{"class":102},[92,5754,5755,5757,5759,5761,5764],{"class":94,"line":1290},[92,5756,1964],{"class":98},[92,5758,5197],{"class":102},[92,5760,148],{"class":98},[92,5762,5763],{"class":1942},"test03",[92,5765,5616],{"class":102},[92,5767,5768,5770,5772,5774,5776,5778,5780,5782],{"class":94,"line":1296},[92,5769,1530],{"class":102},[92,5771,1147],{"class":98},[92,5773,5387],{"class":207},[92,5775,1147],{"class":98},[92,5777,5222],{"class":102},[92,5779,1147],{"class":98},[92,5781,1217],{"class":102},[92,5783,5784],{"class":161}," \u002F\u002F100\n",[92,5786,5787],{"class":94,"line":1308},[92,5788,1544],{"class":102},[38,5790,5791],{},"4.有参有返",[83,5793,5795],{"className":85,"code":5794,"language":87,"meta":10,"style":10},"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",[89,5796,5797,5812,5816,5829,5835,5839,5848,5852,5864,5878,5893],{"__ignoreMap":10},[92,5798,5799,5801,5804,5806,5808,5810],{"class":94,"line":95},[92,5800,106],{"class":98},[92,5802,5803],{"class":1942}," test04",[92,5805,103],{"class":102},[92,5807,106],{"class":98},[92,5809,1377],{"class":5196},[92,5811,109],{"class":102},[92,5813,5814],{"class":94,"line":11},[92,5815,1525],{"class":102},[92,5817,5818,5820,5822,5825,5827],{"class":94,"line":1158},[92,5819,1530],{"class":102},[92,5821,1147],{"class":98},[92,5823,5824],{"class":207},"\"hello\"",[92,5826,1147],{"class":98},[92,5828,1170],{"class":102},[92,5830,5831,5833],{"class":94,"line":1173},[92,5832,4069],{"class":98},[92,5834,1411],{"class":102},[92,5836,5837],{"class":94,"line":1179},[92,5838,1544],{"class":102},[92,5840,5841,5843,5846],{"class":94,"line":1193},[92,5842,106],{"class":98},[92,5844,5845],{"class":1942}," mian",[92,5847,1955],{"class":102},[92,5849,5850],{"class":94,"line":1199},[92,5851,1525],{"class":102},[92,5853,5854,5856,5858,5860,5862],{"class":94,"line":1290},[92,5855,1964],{"class":98},[92,5857,2812],{"class":102},[92,5859,148],{"class":98},[92,5861,320],{"class":151},[92,5863,1269],{"class":102},[92,5865,5866,5868,5870,5872,5875],{"class":94,"line":1296},[92,5867,1964],{"class":98},[92,5869,2828],{"class":102},[92,5871,148],{"class":98},[92,5873,5874],{"class":1942},"test04",[92,5876,5877],{"class":102},"(b);\n",[92,5879,5880,5882,5884,5886,5888,5890],{"class":94,"line":1308},[92,5881,1530],{"class":102},[92,5883,1147],{"class":98},[92,5885,391],{"class":102},[92,5887,1147],{"class":98},[92,5889,1217],{"class":102},[92,5891,5892],{"class":161}," \u002F\u002F1\n",[92,5894,5895],{"class":94,"line":1591},[92,5896,1544],{"class":102},[33,5898,5900],{"id":5899},"_25函数的声明","2.5函数的声明",[38,5902,5903],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[38,5905,5906,5907],{},"函数的",[252,5908,5909],{},"声明可以多次，但是函数的定义只能有一次",[83,5911,5913],{"className":85,"code":5912,"language":87,"meta":10,"style":10},"\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",[89,5914,5915,5920,5925,5950,5959,5963,5975,5987,6003,6007,6027,6031,6050],{"__ignoreMap":10},[92,5916,5917],{"class":94,"line":95},[92,5918,5919],{"class":161},"\u002F\u002F函数声明\n",[92,5921,5922],{"class":94,"line":11},[92,5923,5924],{"class":161},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[92,5926,5927,5929,5932,5934,5936,5938,5940,5942,5944,5947],{"class":94,"line":1158},[92,5928,106],{"class":98},[92,5930,5931],{"class":1942}," max",[92,5933,103],{"class":102},[92,5935,106],{"class":98},[92,5937,1377],{"class":5196},[92,5939,481],{"class":102},[92,5941,106],{"class":98},[92,5943,2812],{"class":5196},[92,5945,5946],{"class":102},");",[92,5948,5949],{"class":161},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[92,5951,5952,5954,5956],{"class":94,"line":1173},[92,5953,106],{"class":98},[92,5955,1952],{"class":1942},[92,5957,5958],{"class":102},"() \n",[92,5960,5961],{"class":94,"line":1179},[92,5962,1525],{"class":102},[92,5964,5965,5967,5969,5971,5973],{"class":94,"line":1193},[92,5966,1964],{"class":98},[92,5968,1377],{"class":102},[92,5970,148],{"class":98},[92,5972,549],{"class":151},[92,5974,1269],{"class":102},[92,5976,5977,5979,5981,5983,5985],{"class":94,"line":1199},[92,5978,1964],{"class":98},[92,5980,2812],{"class":102},[92,5982,148],{"class":98},[92,5984,803],{"class":151},[92,5986,1269],{"class":102},[92,5988,5989,5991,5993,5996,5999,6001],{"class":94,"line":1290},[92,5990,1530],{"class":102},[92,5992,1147],{"class":98},[92,5994,5995],{"class":1942},"max",[92,5997,5998],{"class":102},"(a,b)",[92,6000,1147],{"class":98},[92,6002,1170],{"class":102},[92,6004,6005],{"class":94,"line":1296},[92,6006,1544],{"class":102},[92,6008,6009,6011,6013,6015,6017,6019,6021,6023,6025],{"class":94,"line":1308},[92,6010,106],{"class":98},[92,6012,5931],{"class":1942},[92,6014,103],{"class":102},[92,6016,106],{"class":98},[92,6018,1377],{"class":5196},[92,6020,481],{"class":102},[92,6022,106],{"class":98},[92,6024,2812],{"class":5196},[92,6026,109],{"class":102},[92,6028,6029],{"class":94,"line":1591},[92,6030,1525],{"class":102},[92,6032,6033,6035,6037,6039,6041,6043,6045,6047],{"class":94,"line":1596},[92,6034,4069],{"class":98},[92,6036,1377],{"class":102},[92,6038,1063],{"class":98},[92,6040,366],{"class":102},[92,6042,1089],{"class":98},[92,6044,341],{"class":102},[92,6046,962],{"class":98},[92,6048,6049],{"class":102},"b;\n",[92,6051,6052],{"class":94,"line":1602},[92,6053,1544],{"class":102},[33,6055,6057],{"id":6056},"_26函数的分文件编写","2.6函数的分文件编写",[38,6059,6060],{},"4个步骤：",[1110,6062,6063,6066,6069,6072],{},[49,6064,6065],{},"1.创建后缀名为.h的头文件",[49,6067,6068],{},"2.创建后缀名为.cpp的源文件",[49,6070,6071],{},"3.在头文件中写函数的定义",[49,6073,6074],{},"4.在源文件中写函数的定义\n示例：",[38,6076,6077],{},"头文件：swap.h",[83,6079,6081],{"className":85,"code":6080,"language":87,"meta":10,"style":10},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[89,6082,6083,6089,6099,6103],{"__ignoreMap":10},[92,6084,6085,6087],{"class":94,"line":95},[92,6086,1928],{"class":98},[92,6088,1931],{"class":207},[92,6090,6091,6093,6095,6097],{"class":94,"line":11},[92,6092,1936],{"class":98},[92,6094,1939],{"class":98},[92,6096,1943],{"class":1942},[92,6098,1269],{"class":102},[92,6100,6101],{"class":94,"line":1158},[92,6102,5919],{"class":161},[92,6104,6105,6107,6109,6111,6113,6115,6117,6119,6121],{"class":94,"line":1173},[92,6106,5344],{"class":98},[92,6108,5347],{"class":1942},[92,6110,103],{"class":102},[92,6112,106],{"class":98},[92,6114,1377],{"class":5196},[92,6116,481],{"class":102},[92,6118,106],{"class":98},[92,6120,2812],{"class":5196},[92,6122,2698],{"class":102},[38,6124,6125],{},"源文件：swap.cpp",[83,6127,6129],{"className":85,"code":6128,"language":87,"meta":10,"style":10},"#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",[89,6130,6131,6138,6143,6163,6167,6178,6187,6196,6213,6230],{"__ignoreMap":10},[92,6132,6133,6135],{"class":94,"line":95},[92,6134,1928],{"class":98},[92,6136,6137],{"class":207}," \"swap.h\"\n",[92,6139,6140],{"class":94,"line":11},[92,6141,6142],{"class":161},"\u002F\u002F函数的定义\n",[92,6144,6145,6147,6149,6151,6153,6155,6157,6159,6161],{"class":94,"line":1158},[92,6146,5344],{"class":98},[92,6148,5347],{"class":1942},[92,6150,103],{"class":102},[92,6152,106],{"class":98},[92,6154,1377],{"class":5196},[92,6156,481],{"class":102},[92,6158,106],{"class":98},[92,6160,2812],{"class":5196},[92,6162,109],{"class":102},[92,6164,6165],{"class":94,"line":1173},[92,6166,1525],{"class":102},[92,6168,6169,6171,6173,6175],{"class":94,"line":1179},[92,6170,1964],{"class":98},[92,6172,4234],{"class":102},[92,6174,148],{"class":98},[92,6176,6177],{"class":102},"a;\n",[92,6179,6180,6183,6185],{"class":94,"line":1193},[92,6181,6182],{"class":102},"    a",[92,6184,148],{"class":98},[92,6186,6049],{"class":102},[92,6188,6189,6192,6194],{"class":94,"line":1199},[92,6190,6191],{"class":102},"    b",[92,6193,148],{"class":98},[92,6195,4259],{"class":102},[92,6197,6198,6200,6202,6205,6207,6209,6211],{"class":94,"line":1290},[92,6199,1530],{"class":102},[92,6201,1147],{"class":98},[92,6203,6204],{"class":207},"\"a=\"",[92,6206,1147],{"class":98},[92,6208,341],{"class":102},[92,6210,1147],{"class":98},[92,6212,1170],{"class":102},[92,6214,6215,6217,6219,6222,6224,6226,6228],{"class":94,"line":1296},[92,6216,1530],{"class":102},[92,6218,1147],{"class":98},[92,6220,6221],{"class":207},"\"b=\"",[92,6223,1147],{"class":98},[92,6225,366],{"class":102},[92,6227,1147],{"class":98},[92,6229,1170],{"class":102},[92,6231,6232],{"class":94,"line":1308},[92,6233,1544],{"class":102},[5106,6235,6236],{},"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":10,"searchDepth":11,"depth":11,"links":6238},[6239,6240,6241,6242,6243,6244],{"id":5152,"depth":11,"text":5153},{"id":5241,"depth":11,"text":5242},{"id":5324,"depth":11,"text":5325},{"id":5550,"depth":11,"text":5551},{"id":5899,"depth":11,"text":5900},{"id":6056,"depth":11,"text":6057},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5144,"description":10},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6251,"title":6252,"body":6253,"description":6260,"extension":14,"meta":7665,"navigation":17,"path":7666,"seo":7667,"stem":7668,"__hash__":7669},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6254,"toc":7655},[6255,6258,6261,6265,6427,6431,6434,6437,6440,6443,6583,6587,6590,6593,6596,6661,6665,6670,6737,6740,6744,6747,6758,6763,6783,6786,6791,6810,6813,6817,6836,6839,6843,7078,7082,7085,7088,7091,7253,7256,7260,7263,7269,7652],[29,6256,6252],{"id":6257},"_3指针",[38,6259,6260],{},"通过指针保存一个地址，指针就是个地址",[33,6262,6264],{"id":6263},"_31定义指针","3.1定义指针",[83,6266,6268],{"className":85,"code":6267,"language":87,"meta":10,"style":10},"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",[89,6269,6270,6278,6282,6287,6299,6304,6312,6322,6340,6360,6364,6369,6374,6379,6393,6409,6423],{"__ignoreMap":10},[92,6271,6272,6274,6276],{"class":94,"line":95},[92,6273,106],{"class":98},[92,6275,1952],{"class":1942},[92,6277,1955],{"class":102},[92,6279,6280],{"class":94,"line":11},[92,6281,1525],{"class":102},[92,6283,6284],{"class":94,"line":1158},[92,6285,6286],{"class":161},"    \u002F\u002F1.定义指针\n",[92,6288,6289,6291,6293,6295,6297],{"class":94,"line":1173},[92,6290,1964],{"class":98},[92,6292,1377],{"class":102},[92,6294,148],{"class":98},[92,6296,549],{"class":151},[92,6298,1269],{"class":102},[92,6300,6301],{"class":94,"line":1179},[92,6302,6303],{"class":161},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[92,6305,6306,6309],{"class":94,"line":1193},[92,6307,6308],{"class":98},"    int*",[92,6310,6311],{"class":102},"p;\n",[92,6313,6314,6317,6320],{"class":94,"line":1199},[92,6315,6316],{"class":102},"    p",[92,6318,6319],{"class":98},"=&",[92,6321,6177],{"class":102},[92,6323,6324,6326,6328,6331,6334,6336,6338],{"class":94,"line":1290},[92,6325,1530],{"class":102},[92,6327,1147],{"class":98},[92,6329,6330],{"class":207},"\"a的地址为：\"",[92,6332,6333],{"class":98},"\u003C\u003C&",[92,6335,341],{"class":102},[92,6337,1147],{"class":98},[92,6339,1170],{"class":102},[92,6341,6342,6344,6346,6349,6351,6353,6355,6357],{"class":94,"line":1296},[92,6343,1530],{"class":102},[92,6345,1147],{"class":98},[92,6347,6348],{"class":207},"\"指针p为：\"",[92,6350,1147],{"class":98},[92,6352,38],{"class":102},[92,6354,1147],{"class":98},[92,6356,1217],{"class":102},[92,6358,6359],{"class":161},"\u002F\u002F指针p表示的就是a的地址\n",[92,6361,6362],{"class":94,"line":1308},[92,6363,2379],{"emptyLinePlaceholder":17},[92,6365,6366],{"class":94,"line":1591},[92,6367,6368],{"class":161},"    \u002F\u002F2.使用指针\n",[92,6370,6371],{"class":94,"line":1596},[92,6372,6373],{"class":161},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[92,6375,6376],{"class":94,"line":1602},[92,6377,6378],{"class":161},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[92,6380,6381,6384,6386,6388,6391],{"class":94,"line":1607},[92,6382,6383],{"class":98},"    *",[92,6385,38],{"class":102},[92,6387,148],{"class":98},[92,6389,6390],{"class":151},"1000",[92,6392,1269],{"class":102},[92,6394,6395,6397,6400,6402,6404,6406],{"class":94,"line":1621},[92,6396,1530],{"class":102},[92,6398,6399],{"class":98},"\u003C\u003C*",[92,6401,38],{"class":102},[92,6403,1147],{"class":98},[92,6405,1217],{"class":102},[92,6407,6408],{"class":161},"\u002F\u002F1000\n",[92,6410,6411,6413,6415,6417,6419,6421],{"class":94,"line":1626},[92,6412,1530],{"class":102},[92,6414,1147],{"class":98},[92,6416,341],{"class":102},[92,6418,1147],{"class":98},[92,6420,1217],{"class":102},[92,6422,6408],{"class":161},[92,6424,6425],{"class":94,"line":1632},[92,6426,1544],{"class":102},[33,6428,6430],{"id":6429},"_32指针所占的内存空间","3.2指针所占的内存空间",[38,6432,6433],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[38,6435,6436],{},"在32位操作系统下：占用4个字节空间",[38,6438,6439],{},"在64位操作系统下：占用8个字节空间",[38,6441,6442],{},"上方是不管啥数据类型的",[83,6444,6446],{"className":85,"code":6445,"language":87,"meta":10,"style":10},"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",[89,6447,6448,6456,6460,6465,6477,6482,6487,6492,6505,6527,6553,6579],{"__ignoreMap":10},[92,6449,6450,6452,6454],{"class":94,"line":95},[92,6451,106],{"class":98},[92,6453,1952],{"class":1942},[92,6455,1955],{"class":102},[92,6457,6458],{"class":94,"line":11},[92,6459,1525],{"class":102},[92,6461,6462],{"class":94,"line":1158},[92,6463,6464],{"class":161},"    \u002F\u002F指针所占内存空间\n",[92,6466,6467,6469,6471,6473,6475],{"class":94,"line":1173},[92,6468,1964],{"class":98},[92,6470,1377],{"class":102},[92,6472,148],{"class":98},[92,6474,549],{"class":151},[92,6476,1269],{"class":102},[92,6478,6479],{"class":94,"line":1179},[92,6480,6481],{"class":161},"    \u002F\u002Fint *p;\n",[92,6483,6484],{"class":94,"line":1193},[92,6485,6486],{"class":161},"    \u002F\u002Fp=&a;\n",[92,6488,6489],{"class":94,"line":1199},[92,6490,6491],{"class":161},"    \u002F\u002F上述可以写为以下：\n",[92,6493,6494,6496,6499,6501,6503],{"class":94,"line":1290},[92,6495,1964],{"class":98},[92,6497,6498],{"class":98}," *",[92,6500,38],{"class":102},[92,6502,6319],{"class":98},[92,6504,6177],{"class":102},[92,6506,6507,6510,6512,6515,6517,6520,6522,6524],{"class":94,"line":1296},[92,6508,6509],{"class":102},"    cout ",[92,6511,1147],{"class":98},[92,6513,6514],{"class":207},"\"sizeof(int *)\"",[92,6516,1351],{"class":98},[92,6518,6519],{"class":102},"(p)",[92,6521,1147],{"class":98},[92,6523,1217],{"class":102},[92,6525,6526],{"class":161},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[92,6528,6529,6531,6533,6535,6537,6539,6541,6543,6545,6547,6550],{"class":94,"line":1308},[92,6530,6509],{"class":102},[92,6532,1147],{"class":98},[92,6534,6514],{"class":207},[92,6536,1351],{"class":98},[92,6538,103],{"class":102},[92,6540,106],{"class":98},[92,6542,6498],{"class":98},[92,6544,532],{"class":102},[92,6546,1147],{"class":98},[92,6548,6549],{"class":102},"endl",[92,6551,6552],{"class":161},"  \u002F\u002F4字节(32位的话)\n",[92,6554,6555,6557,6559,6562,6564,6566,6568,6570,6572,6574,6576],{"class":94,"line":1591},[92,6556,6509],{"class":102},[92,6558,1147],{"class":98},[92,6560,6561],{"class":207},"\"sizeof(char *)\"",[92,6563,1351],{"class":98},[92,6565,103],{"class":102},[92,6567,199],{"class":98},[92,6569,6498],{"class":98},[92,6571,532],{"class":102},[92,6573,1147],{"class":98},[92,6575,1217],{"class":102},[92,6577,6578],{"class":161}," \u002F\u002F4字节(32位的话)\n",[92,6580,6581],{"class":94,"line":1596},[92,6582,1544],{"class":102},[33,6584,6586],{"id":6585},"_33空指针","3.3空指针",[38,6588,6589],{},"空指针：指针变量指向内存中编号为0的空间",[38,6591,6592],{},"用途：初始化指针变量",[38,6594,6595],{},"注意：空指针指向的内存是不可以访问的",[83,6597,6599],{"className":85,"code":6598,"language":87,"meta":10,"style":10},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[89,6600,6601,6609,6613,6618,6632,6637,6652,6657],{"__ignoreMap":10},[92,6602,6603,6605,6607],{"class":94,"line":95},[92,6604,106],{"class":98},[92,6606,1952],{"class":1942},[92,6608,1955],{"class":102},[92,6610,6611],{"class":94,"line":11},[92,6612,1525],{"class":102},[92,6614,6615],{"class":94,"line":1158},[92,6616,6617],{"class":161},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[92,6619,6620,6622,6624,6626,6628,6630],{"class":94,"line":1173},[92,6621,1964],{"class":98},[92,6623,6498],{"class":98},[92,6625,38],{"class":102},[92,6627,148],{"class":98},[92,6629,2371],{"class":151},[92,6631,1269],{"class":102},[92,6633,6634],{"class":94,"line":1179},[92,6635,6636],{"class":161},"    \u002F\u002F2.空指针不能进行访问\n",[92,6638,6639,6641,6643,6645,6647,6649],{"class":94,"line":1193},[92,6640,6383],{"class":98},[92,6642,38],{"class":102},[92,6644,148],{"class":98},[92,6646,414],{"class":151},[92,6648,158],{"class":102},[92,6650,6651],{"class":161},"\u002F\u002F直接报错，压根不能访问\n",[92,6653,6654],{"class":94,"line":1199},[92,6655,6656],{"class":161},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[92,6658,6659],{"class":94,"line":1290},[92,6660,1544],{"class":102},[33,6662,6664],{"id":6663},"_34野指针","3.4野指针",[38,6666,6667],{},[252,6668,6669],{},"指针变量指向非法的内存空间",[83,6671,6673],{"className":85,"code":6672,"language":87,"meta":10,"style":10},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[89,6674,6675,6683,6687,6716,6721,6733],{"__ignoreMap":10},[92,6676,6677,6679,6681],{"class":94,"line":95},[92,6678,106],{"class":98},[92,6680,1952],{"class":1942},[92,6682,1955],{"class":102},[92,6684,6685],{"class":94,"line":11},[92,6686,1525],{"class":102},[92,6688,6689,6691,6693,6695,6697,6699,6701,6703,6705,6708,6711,6713],{"class":94,"line":1158},[92,6690,1964],{"class":98},[92,6692,6498],{"class":98},[92,6694,38],{"class":102},[92,6696,148],{"class":98},[92,6698,103],{"class":102},[92,6700,106],{"class":98},[92,6702,6498],{"class":98},[92,6704,532],{"class":102},[92,6706,6707],{"class":98},"0x",[92,6709,6710],{"class":151},"1100",[92,6712,158],{"class":102},[92,6714,6715],{"class":161}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[92,6717,6718],{"class":94,"line":1173},[92,6719,6720],{"class":161},"    \u002F\u002F访问野指针报错\n",[92,6722,6723,6725,6727,6729,6731],{"class":94,"line":1179},[92,6724,1530],{"class":102},[92,6726,6399],{"class":98},[92,6728,38],{"class":102},[92,6730,1147],{"class":98},[92,6732,1170],{"class":102},[92,6734,6735],{"class":94,"line":1193},[92,6736,1544],{"class":102},[38,6738,6739],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[33,6741,6743],{"id":6742},"_35const修饰指针","3.5const修饰指针",[38,6745,6746],{},"三种情况：",[1110,6748,6749,6752,6755],{},[49,6750,6751],{},"const修饰指针 常量指针",[49,6753,6754],{},"const修饰常量 指针常量",[49,6756,6757],{},"const即修饰指针，又修饰常量",[46,6759,6760],{},[49,6761,6762],{},"常量指针",[83,6764,6766],{"className":85,"code":6765,"language":87,"meta":10,"style":10},"const int *p=&a;\n",[89,6767,6768],{"__ignoreMap":10},[92,6769,6770,6773,6775,6777,6779,6781],{"class":94,"line":95},[92,6771,6772],{"class":98},"const",[92,6774,2361],{"class":98},[92,6776,6498],{"class":98},[92,6778,38],{"class":102},[92,6780,6319],{"class":98},[92,6782,6177],{"class":102},[38,6784,6785],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[46,6787,6788],{"start":11},[49,6789,6790],{},"指针常量",[83,6792,6794],{"className":85,"code":6793,"language":87,"meta":10,"style":10},"int *const p=&a;\n",[89,6795,6796],{"__ignoreMap":10},[92,6797,6798,6800,6803,6806,6808],{"class":94,"line":95},[92,6799,106],{"class":98},[92,6801,6802],{"class":98}," *const",[92,6804,6805],{"class":102}," p",[92,6807,6319],{"class":98},[92,6809,6177],{"class":102},[38,6811,6812],{},"指针的指向不可以改，指针指向的值可以改",[46,6814,6815],{"start":1158},[49,6816,6757],{},[83,6818,6820],{"className":85,"code":6819,"language":87,"meta":10,"style":10},"const int *const p=&a;\n",[89,6821,6822],{"__ignoreMap":10},[92,6823,6824,6826,6828,6830,6832,6834],{"class":94,"line":95},[92,6825,6772],{"class":98},[92,6827,2361],{"class":98},[92,6829,6802],{"class":98},[92,6831,6805],{"class":102},[92,6833,6319],{"class":98},[92,6835,6177],{"class":102},[38,6837,6838],{},"指针的指向和指针指向的值都不可以改变",[33,6840,6842],{"id":6841},"_36指针和数组","3.6指针和数组",[83,6844,6846],{"className":85,"code":6845,"language":87,"meta":10,"style":10},"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",[89,6847,6848,6856,6860,6865,6919,6940,6956,6972,6983,7000,7005,7019,7045,7049,7061,7070,7074],{"__ignoreMap":10},[92,6849,6850,6852,6854],{"class":94,"line":95},[92,6851,106],{"class":98},[92,6853,1952],{"class":1942},[92,6855,1955],{"class":102},[92,6857,6858],{"class":94,"line":11},[92,6859,1525],{"class":102},[92,6861,6862],{"class":94,"line":1158},[92,6863,6864],{"class":161},"    \u002F\u002F利用指针访问数组中的元素\n",[92,6866,6867,6869,6871,6873,6875,6877,6879,6881,6883,6885,6887,6889,6891,6893,6895,6897,6899,6901,6903,6905,6907,6909,6911,6913,6915,6917],{"class":94,"line":1173},[92,6868,1964],{"class":98},[92,6870,3941],{"class":102},[92,6872,549],{"class":151},[92,6874,1043],{"class":102},[92,6876,148],{"class":98},[92,6878,999],{"class":102},[92,6880,320],{"class":151},[92,6882,481],{"class":102},[92,6884,180],{"class":151},[92,6886,481],{"class":102},[92,6888,174],{"class":151},[92,6890,481],{"class":102},[92,6892,396],{"class":151},[92,6894,481],{"class":102},[92,6896,422],{"class":151},[92,6898,481],{"class":102},[92,6900,447],{"class":151},[92,6902,481],{"class":102},[92,6904,472],{"class":151},[92,6906,481],{"class":102},[92,6908,498],{"class":151},[92,6910,481],{"class":102},[92,6912,523],{"class":151},[92,6914,481],{"class":102},[92,6916,549],{"class":151},[92,6918,3974],{"class":102},[92,6920,6921,6923,6925,6928,6930,6932,6934,6936,6938],{"class":94,"line":1179},[92,6922,1530],{"class":102},[92,6924,1147],{"class":98},[92,6926,6927],{"class":207},"\"数组的第一个元素为：\"",[92,6929,1147],{"class":98},[92,6931,3885],{"class":102},[92,6933,294],{"class":151},[92,6935,1043],{"class":102},[92,6937,1147],{"class":98},[92,6939,1170],{"class":102},[92,6941,6942,6944,6946,6948,6950,6953],{"class":94,"line":1193},[92,6943,1964],{"class":98},[92,6945,6498],{"class":98},[92,6947,38],{"class":102},[92,6949,148],{"class":98},[92,6951,6952],{"class":102},"arr;",[92,6954,6955],{"class":161},"\u002F\u002F注意数才要加取地址符号&\n",[92,6957,6958,6960,6962,6964,6966,6968,6970],{"class":94,"line":1199},[92,6959,1530],{"class":102},[92,6961,1147],{"class":98},[92,6963,6927],{"class":207},[92,6965,6399],{"class":98},[92,6967,38],{"class":102},[92,6969,1147],{"class":98},[92,6971,1170],{"class":102},[92,6973,6974,6976,6978,6980],{"class":94,"line":1290},[92,6975,6316],{"class":102},[92,6977,2271],{"class":98},[92,6979,158],{"class":102},[92,6981,6982],{"class":161}," \u002F\u002F让指针向后偏移4个字节\n",[92,6984,6985,6987,6989,6992,6994,6996,6998],{"class":94,"line":1296},[92,6986,1530],{"class":102},[92,6988,1147],{"class":98},[92,6990,6991],{"class":207},"\"数组的第二个元素为：\"",[92,6993,6399],{"class":98},[92,6995,38],{"class":102},[92,6997,1147],{"class":98},[92,6999,1170],{"class":102},[92,7001,7002],{"class":94,"line":1308},[92,7003,7004],{"class":161},"    \u002F\u002F利用指针遍历数组\n",[92,7006,7007,7009,7011,7014,7016],{"class":94,"line":1591},[92,7008,1964],{"class":98},[92,7010,6498],{"class":98},[92,7012,7013],{"class":102},"p2",[92,7015,148],{"class":98},[92,7017,7018],{"class":102},"arr;\n",[92,7020,7021,7023,7025,7027,7029,7031,7033,7035,7037,7039,7041,7043],{"class":94,"line":1596},[92,7022,3180],{"class":98},[92,7024,1637],{"class":102},[92,7026,106],{"class":98},[92,7028,3011],{"class":102},[92,7030,148],{"class":98},[92,7032,294],{"class":151},[92,7034,3018],{"class":102},[92,7036,1013],{"class":98},[92,7038,549],{"class":151},[92,7040,3018],{"class":102},[92,7042,2271],{"class":98},[92,7044,109],{"class":102},[92,7046,7047],{"class":94,"line":1602},[92,7048,2009],{"class":102},[92,7050,7051,7053,7055,7057,7059],{"class":94,"line":1607},[92,7052,3430],{"class":102},[92,7054,6399],{"class":98},[92,7056,7013],{"class":102},[92,7058,1147],{"class":98},[92,7060,1170],{"class":102},[92,7062,7063,7066,7068],{"class":94,"line":1621},[92,7064,7065],{"class":102},"        p2",[92,7067,2271],{"class":98},[92,7069,1269],{"class":102},[92,7071,7072],{"class":94,"line":1626},[92,7073,2166],{"class":102},[92,7075,7076],{"class":94,"line":1632},[92,7077,1544],{"class":102},[33,7079,7081],{"id":7080},"_37指针和函数","3.7指针和函数",[38,7083,7084],{},"利用指针做函数参数，可以修改实参的值",[38,7086,7087],{},"值传递：只改变形参，不改变实参",[38,7089,7090],{},"地址传递：",[83,7092,7094],{"className":85,"code":7093,"language":87,"meta":10,"style":10},"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",[89,7095,7096,7121,7125,7137,7148,7158,7162,7170,7174,7186,7198,7203,7219,7234,7249],{"__ignoreMap":10},[92,7097,7098,7100,7102,7104,7106,7108,7111,7113,7115,7117,7119],{"class":94,"line":95},[92,7099,5344],{"class":98},[92,7101,5347],{"class":1942},[92,7103,103],{"class":102},[92,7105,106],{"class":98},[92,7107,6498],{"class":98},[92,7109,7110],{"class":5196},"p1",[92,7112,481],{"class":102},[92,7114,106],{"class":98},[92,7116,6498],{"class":98},[92,7118,7013],{"class":5196},[92,7120,109],{"class":102},[92,7122,7123],{"class":94,"line":11},[92,7124,1525],{"class":102},[92,7126,7127,7129,7131,7134],{"class":94,"line":1158},[92,7128,1964],{"class":98},[92,7130,4234],{"class":102},[92,7132,7133],{"class":98},"=*",[92,7135,7136],{"class":102},"p1;\n",[92,7138,7139,7141,7143,7145],{"class":94,"line":1173},[92,7140,6383],{"class":98},[92,7142,7110],{"class":102},[92,7144,7133],{"class":98},[92,7146,7147],{"class":102},"p2;\n",[92,7149,7150,7152,7154,7156],{"class":94,"line":1179},[92,7151,6383],{"class":98},[92,7153,7013],{"class":102},[92,7155,148],{"class":98},[92,7157,4259],{"class":102},[92,7159,7160],{"class":94,"line":1193},[92,7161,1544],{"class":102},[92,7163,7164,7166,7168],{"class":94,"line":1199},[92,7165,106],{"class":98},[92,7167,1952],{"class":1942},[92,7169,1955],{"class":102},[92,7171,7172],{"class":94,"line":1290},[92,7173,1525],{"class":102},[92,7175,7176,7178,7180,7182,7184],{"class":94,"line":1296},[92,7177,1964],{"class":98},[92,7179,1377],{"class":102},[92,7181,148],{"class":98},[92,7183,549],{"class":151},[92,7185,1269],{"class":102},[92,7187,7188,7190,7192,7194,7196],{"class":94,"line":1308},[92,7189,1964],{"class":98},[92,7191,2812],{"class":102},[92,7193,148],{"class":98},[92,7195,803],{"class":151},[92,7197,1269],{"class":102},[92,7199,7200],{"class":94,"line":1591},[92,7201,7202],{"class":161},"    \u002F\u002F地址传递\n",[92,7204,7205,7207,7209,7211,7214,7216],{"class":94,"line":1596},[92,7206,5541],{"class":1942},[92,7208,103],{"class":102},[92,7210,456],{"class":98},[92,7212,7213],{"class":102},"a,",[92,7215,456],{"class":98},[92,7217,7218],{"class":102},"b);\n",[92,7220,7221,7223,7225,7227,7229,7231],{"class":94,"line":1602},[92,7222,1530],{"class":102},[92,7224,1147],{"class":98},[92,7226,341],{"class":102},[92,7228,1147],{"class":98},[92,7230,1217],{"class":102},[92,7232,7233],{"class":161},"\u002F\u002F20\n",[92,7235,7236,7238,7240,7242,7244,7246],{"class":94,"line":1607},[92,7237,1530],{"class":102},[92,7239,1147],{"class":98},[92,7241,366],{"class":102},[92,7243,1147],{"class":98},[92,7245,1217],{"class":102},[92,7247,7248],{"class":161},"\u002F\u002F10\n",[92,7250,7251],{"class":94,"line":1621},[92,7252,1544],{"class":102},[38,7254,7255],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[33,7257,7259],{"id":7258},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[38,7261,7262],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[38,7264,7265,7266,7268],{},"例如数组：int arr",[92,7267,549],{},"={4,3,6,9,1,2,10,8,7,5}",[83,7270,7272],{"className":85,"code":7271,"language":87,"meta":10,"style":10},"#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",[89,7273,7274,7280,7290,7314,7318,7349,7353,7387,7391,7409,7413,7424,7439,7454,7458,7462,7466,7470,7474,7482,7486,7491,7545,7557,7569,7574,7582,7586,7591,7616,7620,7635,7644,7648],{"__ignoreMap":10},[92,7275,7276,7278],{"class":94,"line":95},[92,7277,1928],{"class":98},[92,7279,1931],{"class":207},[92,7281,7282,7284,7286,7288],{"class":94,"line":11},[92,7283,1936],{"class":98},[92,7285,1939],{"class":98},[92,7287,1943],{"class":1942},[92,7289,1269],{"class":102},[92,7291,7292,7294,7297,7299,7301,7303,7305,7307,7309,7312],{"class":94,"line":1158},[92,7293,5344],{"class":98},[92,7295,7296],{"class":1942}," bubbleSort",[92,7298,103],{"class":102},[92,7300,106],{"class":98},[92,7302,6498],{"class":98},[92,7304,38],{"class":5196},[92,7306,481],{"class":102},[92,7308,106],{"class":98},[92,7310,7311],{"class":5196}," len",[92,7313,109],{"class":102},[92,7315,7316],{"class":94,"line":1173},[92,7317,1525],{"class":102},[92,7319,7320,7322,7324,7326,7328,7330,7332,7334,7336,7339,7341,7343,7345,7347],{"class":94,"line":1179},[92,7321,3180],{"class":98},[92,7323,103],{"class":102},[92,7325,106],{"class":98},[92,7327,3011],{"class":102},[92,7329,148],{"class":98},[92,7331,294],{"class":151},[92,7333,3018],{"class":102},[92,7335,1013],{"class":98},[92,7337,7338],{"class":102},"len",[92,7340,635],{"class":98},[92,7342,320],{"class":151},[92,7344,3018],{"class":102},[92,7346,2271],{"class":98},[92,7348,109],{"class":102},[92,7350,7351],{"class":94,"line":1193},[92,7352,2009],{"class":102},[92,7354,7355,7357,7359,7361,7363,7365,7367,7369,7371,7373,7375,7377,7379,7381,7383,7385],{"class":94,"line":1199},[92,7356,3382],{"class":98},[92,7358,103],{"class":102},[92,7360,106],{"class":98},[92,7362,3389],{"class":102},[92,7364,148],{"class":98},[92,7366,294],{"class":151},[92,7368,3396],{"class":102},[92,7370,1013],{"class":98},[92,7372,7338],{"class":102},[92,7374,635],{"class":98},[92,7376,544],{"class":102},[92,7378,635],{"class":98},[92,7380,320],{"class":151},[92,7382,3396],{"class":102},[92,7384,2271],{"class":98},[92,7386,109],{"class":102},[92,7388,7389],{"class":94,"line":1290},[92,7390,2489],{"class":102},[92,7392,7393,7395,7398,7400,7403,7405,7407],{"class":94,"line":1296},[92,7394,4621],{"class":98},[92,7396,7397],{"class":102},"(p[j]",[92,7399,1063],{"class":98},[92,7401,7402],{"class":102},"p[j",[92,7404,584],{"class":98},[92,7406,320],{"class":151},[92,7408,4636],{"class":102},[92,7410,7411],{"class":94,"line":1308},[92,7412,4641],{"class":102},[92,7414,7415,7417,7419,7421],{"class":94,"line":1591},[92,7416,4646],{"class":98},[92,7418,4234],{"class":102},[92,7420,148],{"class":98},[92,7422,7423],{"class":102},"p[j];\n",[92,7425,7426,7429,7431,7433,7435,7437],{"class":94,"line":1596},[92,7427,7428],{"class":102},"                p[j]",[92,7430,148],{"class":98},[92,7432,7402],{"class":102},[92,7434,584],{"class":98},[92,7436,320],{"class":151},[92,7438,4669],{"class":102},[92,7440,7441,7444,7446,7448,7450,7452],{"class":94,"line":1602},[92,7442,7443],{"class":102},"                p[j",[92,7445,584],{"class":98},[92,7447,320],{"class":151},[92,7449,1043],{"class":102},[92,7451,148],{"class":98},[92,7453,4259],{"class":102},[92,7455,7456],{"class":94,"line":1607},[92,7457,4689],{"class":102},[92,7459,7460],{"class":94,"line":1621},[92,7461,2508],{"class":102},[92,7463,7464],{"class":94,"line":1626},[92,7465,2166],{"class":102},[92,7467,7468],{"class":94,"line":1632},[92,7469,1544],{"class":102},[92,7471,7472],{"class":94,"line":1653},[92,7473,2379],{"emptyLinePlaceholder":17},[92,7475,7476,7478,7480],{"class":94,"line":1658},[92,7477,106],{"class":98},[92,7479,1952],{"class":1942},[92,7481,1955],{"class":102},[92,7483,7484],{"class":94,"line":1672},[92,7485,1525],{"class":102},[92,7487,7488],{"class":94,"line":1677},[92,7489,7490],{"class":161},"    \u002F\u002F 1.创建数组\n",[92,7492,7493,7495,7497,7499,7501,7503,7505,7507,7509,7511,7513,7515,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543],{"class":94,"line":1706},[92,7494,1964],{"class":98},[92,7496,3941],{"class":102},[92,7498,549],{"class":151},[92,7500,1043],{"class":102},[92,7502,148],{"class":98},[92,7504,999],{"class":102},[92,7506,396],{"class":151},[92,7508,481],{"class":102},[92,7510,174],{"class":151},[92,7512,481],{"class":102},[92,7514,447],{"class":151},[92,7516,481],{"class":102},[92,7518,523],{"class":151},[92,7520,481],{"class":102},[92,7522,320],{"class":151},[92,7524,481],{"class":102},[92,7526,180],{"class":151},[92,7528,481],{"class":102},[92,7530,549],{"class":151},[92,7532,481],{"class":102},[92,7534,498],{"class":151},[92,7536,481],{"class":102},[92,7538,472],{"class":151},[92,7540,481],{"class":102},[92,7542,422],{"class":151},[92,7544,3974],{"class":102},[92,7546,7547,7549,7551,7553,7555],{"class":94,"line":1711},[92,7548,1964],{"class":98},[92,7550,7311],{"class":102},[92,7552,148],{"class":98},[92,7554,549],{"class":151},[92,7556,1269],{"class":102},[92,7558,7559,7561,7563,7565,7567],{"class":94,"line":1728},[92,7560,1964],{"class":98},[92,7562,6498],{"class":98},[92,7564,38],{"class":102},[92,7566,148],{"class":98},[92,7568,7018],{"class":102},[92,7570,7571],{"class":94,"line":1733},[92,7572,7573],{"class":161},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[92,7575,7576,7579],{"class":94,"line":1738},[92,7577,7578],{"class":1942},"    bubbleSort",[92,7580,7581],{"class":102},"(p,len);\n",[92,7583,7584],{"class":94,"line":1743},[92,7585,2379],{"emptyLinePlaceholder":17},[92,7587,7588],{"class":94,"line":1757},[92,7589,7590],{"class":161},"    \u002F\u002F 3.打印排序后的数组\n",[92,7592,7593,7595,7597,7599,7601,7603,7605,7607,7609,7612,7614],{"class":94,"line":1762},[92,7594,3180],{"class":98},[92,7596,1637],{"class":102},[92,7598,106],{"class":98},[92,7600,3011],{"class":102},[92,7602,148],{"class":98},[92,7604,294],{"class":151},[92,7606,3193],{"class":102},[92,7608,1013],{"class":98},[92,7610,7611],{"class":102},"len; i",[92,7613,2271],{"class":98},[92,7615,109],{"class":102},[92,7617,7618],{"class":94,"line":2556},[92,7619,2009],{"class":102},[92,7621,7622,7624,7626,7628,7630,7633],{"class":94,"line":2570},[92,7623,3430],{"class":102},[92,7625,6399],{"class":98},[92,7627,38],{"class":102},[92,7629,1147],{"class":98},[92,7631,7632],{"class":207},"\"\"",[92,7634,1269],{"class":102},[92,7636,7637,7640,7642],{"class":94,"line":2578},[92,7638,7639],{"class":102},"        p",[92,7641,2271],{"class":98},[92,7643,1269],{"class":102},[92,7645,7646],{"class":94,"line":2583},[92,7647,2166],{"class":102},[92,7649,7650],{"class":94,"line":2589},[92,7651,1544],{"class":102},[5106,7653,7654],{},"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":10,"searchDepth":11,"depth":11,"links":7656},[7657,7658,7659,7660,7661,7662,7663,7664],{"id":6263,"depth":11,"text":6264},{"id":6429,"depth":11,"text":6430},{"id":6585,"depth":11,"text":6586},{"id":6663,"depth":11,"text":6664},{"id":6742,"depth":11,"text":6743},{"id":6841,"depth":11,"text":6842},{"id":7080,"depth":11,"text":7081},{"id":7258,"depth":11,"text":7259},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6252,"description":6260},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7671,"title":7672,"body":7673,"description":7680,"extension":14,"meta":10654,"navigation":17,"path":10655,"seo":10656,"stem":10657,"__hash__":10658},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7674,"toc":10645},[7675,7678,7681,7685,7688,7691,7702,8040,8043,8047,8050,8057,8312,8316,8319,8322,8477,8481,8484,8487,8693,8697,8700,9003,9006,9014,9018,9021,9172,9174,9185,9242,9246,9251,9908,9916,9919,10013,10016,10636,10642],[29,7676,7672],{"id":7677},"_4结构体",[38,7679,7680],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[33,7682,7684],{"id":7683},"_41结构体定义与使用","4.1结构体定义与使用",[38,7686,7687],{},"语法：struct 结构体名 {结构体成员列表}；",[38,7689,7690],{},"通过结构体创建变量的方式：",[1110,7692,7693,7696,7699],{},[49,7694,7695],{},"struct 结构体名 变量名",[49,7697,7698],{},"struct 结构体名 变量名={成员1值，成员2值...}",[49,7700,7701],{},"定义结构体时顺便创建变量",[83,7703,7705],{"className":85,"code":7704,"language":87,"meta":10,"style":10},"#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",[89,7706,7707,7713,7723,7730,7735,7743,7747,7752,7756,7761,7766,7771,7778,7783,7790,7794,7801,7805,7809,7813,7817,7821,7825,7831,7835,7841,7849,7857,7861,7866,7871,7882,7887,7899,7910,7921,7926,7950,7955,7961,7988,7993,7999,8011,8023,8035],{"__ignoreMap":10},[92,7708,7709,7711],{"class":94,"line":95},[92,7710,1928],{"class":98},[92,7712,1931],{"class":207},[92,7714,7715,7717,7719,7721],{"class":94,"line":11},[92,7716,1936],{"class":98},[92,7718,1939],{"class":98},[92,7720,1943],{"class":1942},[92,7722,1269],{"class":102},[92,7724,7725,7727],{"class":94,"line":1158},[92,7726,1928],{"class":98},[92,7728,7729],{"class":207},"\u003Cstring>\n",[92,7731,7732],{"class":94,"line":1173},[92,7733,7734],{"class":161},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[92,7736,7737,7740],{"class":94,"line":1179},[92,7738,7739],{"class":98},"struct",[92,7741,7742],{"class":1942}," Student\n",[92,7744,7745],{"class":94,"line":1193},[92,7746,1525],{"class":102},[92,7748,7749],{"class":94,"line":1199},[92,7750,7751],{"class":161},"    \u002F\u002F成员列表\n",[92,7753,7754],{"class":94,"line":1290},[92,7755,2379],{"emptyLinePlaceholder":17},[92,7757,7758],{"class":94,"line":1296},[92,7759,7760],{"class":161},"    \u002F\u002F姓名\n",[92,7762,7763],{"class":94,"line":1308},[92,7764,7765],{"class":102},"    string name;\n",[92,7767,7768],{"class":94,"line":1591},[92,7769,7770],{"class":161},"    \u002F\u002F年龄\n",[92,7772,7773,7775],{"class":94,"line":1596},[92,7774,1964],{"class":98},[92,7776,7777],{"class":102}," age;\n",[92,7779,7780],{"class":94,"line":1602},[92,7781,7782],{"class":161},"    \u002F\u002F分数\n",[92,7784,7785,7787],{"class":94,"line":1607},[92,7786,1964],{"class":98},[92,7788,7789],{"class":102}," score;\n",[92,7791,7792],{"class":94,"line":1621},[92,7793,3974],{"class":102},[92,7795,7796,7798],{"class":94,"line":1626},[92,7797,7739],{"class":98},[92,7799,7800],{"class":1942}," School\n",[92,7802,7803],{"class":94,"line":1632},[92,7804,1525],{"class":102},[92,7806,7807],{"class":94,"line":1653},[92,7808,7751],{"class":161},[92,7810,7811],{"class":94,"line":1658},[92,7812,2379],{"emptyLinePlaceholder":17},[92,7814,7815],{"class":94,"line":1672},[92,7816,7760],{"class":161},[92,7818,7819],{"class":94,"line":1677},[92,7820,7765],{"class":102},[92,7822,7823],{"class":94,"line":1706},[92,7824,7770],{"class":161},[92,7826,7827,7829],{"class":94,"line":1711},[92,7828,1964],{"class":98},[92,7830,7777],{"class":102},[92,7832,7833],{"class":94,"line":1728},[92,7834,7782],{"class":161},[92,7836,7837,7839],{"class":94,"line":1733},[92,7838,1964],{"class":98},[92,7840,7789],{"class":102},[92,7842,7843,7846],{"class":94,"line":1738},[92,7844,7845],{"class":102},"} s3;",[92,7847,7848],{"class":161}," \u002F\u002F创建结构体时就创建了变量\n",[92,7850,7851,7853,7855],{"class":94,"line":1743},[92,7852,106],{"class":98},[92,7854,1952],{"class":1942},[92,7856,1955],{"class":102},[92,7858,7859],{"class":94,"line":1757},[92,7860,1525],{"class":102},[92,7862,7863],{"class":94,"line":1762},[92,7864,7865],{"class":161},"    \u002F\u002F2.通过学生类型创建具体学生\n",[92,7867,7868],{"class":94,"line":2556},[92,7869,7870],{"class":161},"    \u002F\u002F2.1 struct Student s1;\n",[92,7872,7873,7876,7879],{"class":94,"line":2570},[92,7874,7875],{"class":98},"    struct",[92,7877,7878],{"class":1942}," Student",[92,7880,7881],{"class":102}," s1;\n",[92,7883,7884],{"class":94,"line":2578},[92,7885,7886],{"class":161},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[92,7888,7889,7892,7894,7897],{"class":94,"line":2583},[92,7890,7891],{"class":102},"    s1.name",[92,7893,148],{"class":98},[92,7895,7896],{"class":207},"\"张三\"",[92,7898,1269],{"class":102},[92,7900,7901,7904,7906,7908],{"class":94,"line":2589},[92,7902,7903],{"class":102},"    s1.age",[92,7905,148],{"class":98},[92,7907,753],{"class":151},[92,7909,1269],{"class":102},[92,7911,7912,7915,7917,7919],{"class":94,"line":2595},[92,7913,7914],{"class":102},"    s1.score",[92,7916,148],{"class":98},[92,7918,357],{"class":151},[92,7920,1269],{"class":102},[92,7922,7923],{"class":94,"line":2600},[92,7924,7925],{"class":161},"    \u002F\u002F输出结果\n",[92,7927,7929,7931,7933,7936,7938,7941,7943,7946,7948],{"class":94,"line":7928},37,[92,7930,1530],{"class":102},[92,7932,1147],{"class":98},[92,7934,7935],{"class":102},"s1.name",[92,7937,1147],{"class":98},[92,7939,7940],{"class":102},"s1.age",[92,7942,1147],{"class":98},[92,7944,7945],{"class":102},"s1.score",[92,7947,1147],{"class":98},[92,7949,1170],{"class":102},[92,7951,7953],{"class":94,"line":7952},38,[92,7954,2379],{"emptyLinePlaceholder":17},[92,7956,7958],{"class":94,"line":7957},39,[92,7959,7960],{"class":161},"    \u002F\u002F2.2 struct Student s2={...}\n",[92,7962,7964,7966,7968,7971,7973,7975,7978,7980,7982,7984,7986],{"class":94,"line":7963},40,[92,7965,7875],{"class":98},[92,7967,7878],{"class":1942},[92,7969,7970],{"class":102}," s2",[92,7972,148],{"class":98},[92,7974,999],{"class":102},[92,7976,7977],{"class":207},"\"王五\"",[92,7979,481],{"class":102},[92,7981,753],{"class":151},[92,7983,481],{"class":102},[92,7985,357],{"class":151},[92,7987,3974],{"class":102},[92,7989,7991],{"class":94,"line":7990},41,[92,7992,2379],{"emptyLinePlaceholder":17},[92,7994,7996],{"class":94,"line":7995},42,[92,7997,7998],{"class":161},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[92,8000,8002,8005,8007,8009],{"class":94,"line":8001},43,[92,8003,8004],{"class":102},"    s3.name",[92,8006,148],{"class":98},[92,8008,3657],{"class":207},[92,8010,1269],{"class":102},[92,8012,8014,8017,8019,8021],{"class":94,"line":8013},44,[92,8015,8016],{"class":102},"    s3.age",[92,8018,148],{"class":98},[92,8020,753],{"class":151},[92,8022,1269],{"class":102},[92,8024,8026,8029,8031,8033],{"class":94,"line":8025},45,[92,8027,8028],{"class":102},"    s3.score",[92,8030,148],{"class":98},[92,8032,803],{"class":151},[92,8034,1269],{"class":102},[92,8036,8038],{"class":94,"line":8037},46,[92,8039,1544],{"class":102},[38,8041,8042],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[33,8044,8046],{"id":8045},"_42结构体数组","4.2结构体数组",[38,8048,8049],{},"将自定义的结构体放入到数组中方便维护",[38,8051,8052,8053,8056],{},"语法：struct 结构体名 数组名",[92,8054,8055],{},"元素个数","={ {}，{},...{} };",[83,8058,8060],{"className":85,"code":8059,"language":87,"meta":10,"style":10},"#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",[89,8061,8062,8068,8078,8084,8089,8095,8099,8103,8109,8115,8119,8123,8131,8135,8140,8155,8159,8175,8191,8195,8200,8216,8231,8246,8251,8277,8281,8304,8308],{"__ignoreMap":10},[92,8063,8064,8066],{"class":94,"line":95},[92,8065,1928],{"class":98},[92,8067,1931],{"class":207},[92,8069,8070,8072,8074,8076],{"class":94,"line":11},[92,8071,1936],{"class":98},[92,8073,1939],{"class":98},[92,8075,1943],{"class":1942},[92,8077,1269],{"class":102},[92,8079,8080,8082],{"class":94,"line":1158},[92,8081,1928],{"class":98},[92,8083,7729],{"class":207},[92,8085,8086],{"class":94,"line":1173},[92,8087,8088],{"class":161},"\u002F\u002F1.定义结构体\n",[92,8090,8091,8093],{"class":94,"line":1179},[92,8092,7739],{"class":98},[92,8094,7742],{"class":1942},[92,8096,8097],{"class":94,"line":1193},[92,8098,1525],{"class":102},[92,8100,8101],{"class":94,"line":1199},[92,8102,7765],{"class":102},[92,8104,8105,8107],{"class":94,"line":1290},[92,8106,1964],{"class":98},[92,8108,7777],{"class":102},[92,8110,8111,8113],{"class":94,"line":1296},[92,8112,1964],{"class":98},[92,8114,7789],{"class":102},[92,8116,8117],{"class":94,"line":1308},[92,8118,2379],{"emptyLinePlaceholder":17},[92,8120,8121],{"class":94,"line":1591},[92,8122,3974],{"class":102},[92,8124,8125,8127,8129],{"class":94,"line":1596},[92,8126,106],{"class":98},[92,8128,1952],{"class":1942},[92,8130,1955],{"class":102},[92,8132,8133],{"class":94,"line":1602},[92,8134,1525],{"class":102},[92,8136,8137],{"class":94,"line":1607},[92,8138,8139],{"class":161},"    \u002F\u002F2.创建结构体数组\n",[92,8141,8142,8144,8146,8149,8151,8153],{"class":94,"line":1621},[92,8143,7875],{"class":98},[92,8145,7878],{"class":1942},[92,8147,8148],{"class":102}," stuArray[",[92,8150,180],{"class":151},[92,8152,1043],{"class":102},[92,8154,4887],{"class":98},[92,8156,8157],{"class":94,"line":1626},[92,8158,2009],{"class":102},[92,8160,8161,8163,8165,8167,8169,8171,8173],{"class":94,"line":1632},[92,8162,4896],{"class":102},[92,8164,7896],{"class":207},[92,8166,481],{"class":102},[92,8168,753],{"class":151},[92,8170,481],{"class":102},[92,8172,414],{"class":151},[92,8174,4909],{"class":102},[92,8176,8177,8179,8181,8183,8185,8187,8189],{"class":94,"line":1653},[92,8178,4896],{"class":102},[92,8180,3657],{"class":207},[92,8182,481],{"class":102},[92,8184,678],{"class":151},[92,8186,481],{"class":102},[92,8188,678],{"class":151},[92,8190,1544],{"class":102},[92,8192,8193],{"class":94,"line":1658},[92,8194,2166],{"class":102},[92,8196,8197],{"class":94,"line":1672},[92,8198,8199],{"class":161},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[92,8201,8202,8205,8207,8210,8212,8214],{"class":94,"line":1677},[92,8203,8204],{"class":102},"    stuArray[",[92,8206,320],{"class":151},[92,8208,8209],{"class":102},"].name",[92,8211,148],{"class":98},[92,8213,3680],{"class":207},[92,8215,1269],{"class":102},[92,8217,8218,8220,8222,8225,8227,8229],{"class":94,"line":1706},[92,8219,8204],{"class":102},[92,8221,320],{"class":151},[92,8223,8224],{"class":102},"].age",[92,8226,148],{"class":98},[92,8228,180],{"class":151},[92,8230,1269],{"class":102},[92,8232,8233,8235,8237,8240,8242,8244],{"class":94,"line":1711},[92,8234,8204],{"class":102},[92,8236,320],{"class":151},[92,8238,8239],{"class":102},"].score",[92,8241,148],{"class":98},[92,8243,180],{"class":151},[92,8245,1269],{"class":102},[92,8247,8248],{"class":94,"line":1728},[92,8249,8250],{"class":161},"    \u002F\u002F4.遍历结构体数组\n",[92,8252,8253,8255,8257,8259,8261,8263,8265,8267,8269,8271,8273,8275],{"class":94,"line":1733},[92,8254,3180],{"class":98},[92,8256,1637],{"class":102},[92,8258,106],{"class":98},[92,8260,3011],{"class":102},[92,8262,148],{"class":98},[92,8264,294],{"class":151},[92,8266,3018],{"class":102},[92,8268,1013],{"class":98},[92,8270,180],{"class":151},[92,8272,3018],{"class":102},[92,8274,2271],{"class":98},[92,8276,109],{"class":102},[92,8278,8279],{"class":94,"line":1738},[92,8280,2009],{"class":102},[92,8282,8283,8285,8287,8290,8292,8295,8297,8300,8302],{"class":94,"line":1743},[92,8284,3430],{"class":102},[92,8286,1147],{"class":98},[92,8288,8289],{"class":102},"stuArray[i].name",[92,8291,1147],{"class":98},[92,8293,8294],{"class":102},"stuArray[i].age",[92,8296,1147],{"class":98},[92,8298,8299],{"class":102},"stuArray[i].score",[92,8301,1147],{"class":98},[92,8303,1170],{"class":102},[92,8305,8306],{"class":94,"line":1757},[92,8307,2166],{"class":102},[92,8309,8310],{"class":94,"line":1762},[92,8311,1544],{"class":102},[33,8313,8315],{"id":8314},"_43结构体指针","4.3结构体指针",[38,8317,8318],{},"作用：通过指针访问结构体中的成员",[38,8320,8321],{},"利用操作符->可以通过结构体指针访问结构体属性",[83,8323,8325],{"className":85,"code":8324,"language":87,"meta":10,"style":10},"#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",[89,8326,8327,8333,8343,8349,8353,8359,8363,8367,8373,8379,8383,8391,8395,8400,8425,8430,8445,8450,8473],{"__ignoreMap":10},[92,8328,8329,8331],{"class":94,"line":95},[92,8330,1928],{"class":98},[92,8332,1931],{"class":207},[92,8334,8335,8337,8339,8341],{"class":94,"line":11},[92,8336,1936],{"class":98},[92,8338,1939],{"class":98},[92,8340,1943],{"class":1942},[92,8342,1269],{"class":102},[92,8344,8345,8347],{"class":94,"line":1158},[92,8346,1928],{"class":98},[92,8348,7729],{"class":207},[92,8350,8351],{"class":94,"line":1173},[92,8352,8088],{"class":161},[92,8354,8355,8357],{"class":94,"line":1179},[92,8356,7739],{"class":98},[92,8358,7742],{"class":1942},[92,8360,8361],{"class":94,"line":1193},[92,8362,1525],{"class":102},[92,8364,8365],{"class":94,"line":1199},[92,8366,7765],{"class":102},[92,8368,8369,8371],{"class":94,"line":1290},[92,8370,1964],{"class":98},[92,8372,7777],{"class":102},[92,8374,8375,8377],{"class":94,"line":1296},[92,8376,1964],{"class":98},[92,8378,7789],{"class":102},[92,8380,8381],{"class":94,"line":1308},[92,8382,3974],{"class":102},[92,8384,8385,8387,8389],{"class":94,"line":1591},[92,8386,106],{"class":98},[92,8388,1952],{"class":1942},[92,8390,1955],{"class":102},[92,8392,8393],{"class":94,"line":1596},[92,8394,1525],{"class":102},[92,8396,8397],{"class":94,"line":1602},[92,8398,8399],{"class":161},"    \u002F\u002F创建学生结构体变量\n",[92,8401,8402,8404,8406,8409,8411,8413,8415,8417,8419,8421,8423],{"class":94,"line":1607},[92,8403,7875],{"class":98},[92,8405,7878],{"class":1942},[92,8407,8408],{"class":102}," s",[92,8410,148],{"class":98},[92,8412,999],{"class":102},[92,8414,7896],{"class":207},[92,8416,481],{"class":102},[92,8418,753],{"class":151},[92,8420,481],{"class":102},[92,8422,1701],{"class":151},[92,8424,3974],{"class":102},[92,8426,8427],{"class":94,"line":1621},[92,8428,8429],{"class":161},"    \u002F\u002F通过指针指向结构体变量\n",[92,8431,8432,8434,8436,8438,8440,8442],{"class":94,"line":1626},[92,8433,7875],{"class":98},[92,8435,7878],{"class":1942},[92,8437,6498],{"class":98},[92,8439,38],{"class":102},[92,8441,6319],{"class":98},[92,8443,8444],{"class":102},"s\n",[92,8446,8447],{"class":94,"line":1632},[92,8448,8449],{"class":161},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[92,8451,8452,8454,8456,8459,8461,8464,8466,8469,8471],{"class":94,"line":1653},[92,8453,1530],{"class":102},[92,8455,1147],{"class":98},[92,8457,8458],{"class":102},"p->name",[92,8460,1147],{"class":98},[92,8462,8463],{"class":102},"p->age",[92,8465,1147],{"class":98},[92,8467,8468],{"class":102},"p->score",[92,8470,1147],{"class":98},[92,8472,1170],{"class":102},[92,8474,8475],{"class":94,"line":1658},[92,8476,1544],{"class":102},[33,8478,8480],{"id":8479},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[38,8482,8483],{},"作用：结构体中的成员可以是另一个结构体",[38,8485,8486],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[83,8488,8490],{"className":85,"code":8489,"language":87,"meta":10,"style":10},"#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",[89,8491,8492,8498,8508,8514,8519,8527,8531,8535,8541,8547,8551,8556,8563,8567,8574,8578,8584,8589,8593,8601,8605,8610,8615,8620,8631,8643,8654,8667,8678,8689],{"__ignoreMap":10},[92,8493,8494,8496],{"class":94,"line":95},[92,8495,1928],{"class":98},[92,8497,1931],{"class":207},[92,8499,8500,8502,8504,8506],{"class":94,"line":11},[92,8501,1936],{"class":98},[92,8503,1939],{"class":98},[92,8505,1943],{"class":1942},[92,8507,1269],{"class":102},[92,8509,8510,8512],{"class":94,"line":1158},[92,8511,1928],{"class":98},[92,8513,7729],{"class":207},[92,8515,8516],{"class":94,"line":1173},[92,8517,8518],{"class":161},"\u002F\u002F定义学生结构体\n",[92,8520,8521,8523,8525],{"class":94,"line":1179},[92,8522,7739],{"class":98},[92,8524,7878],{"class":1942},[92,8526,2653],{"class":102},[92,8528,8529],{"class":94,"line":1193},[92,8530,1525],{"class":102},[92,8532,8533],{"class":94,"line":1199},[92,8534,7765],{"class":102},[92,8536,8537,8539],{"class":94,"line":1290},[92,8538,1964],{"class":98},[92,8540,7777],{"class":102},[92,8542,8543,8545],{"class":94,"line":1296},[92,8544,1964],{"class":98},[92,8546,7789],{"class":102},[92,8548,8549],{"class":94,"line":1308},[92,8550,1544],{"class":102},[92,8552,8553],{"class":94,"line":1591},[92,8554,8555],{"class":161},"\u002F\u002F定义老师结构体\n",[92,8557,8558,8560],{"class":94,"line":1596},[92,8559,7739],{"class":98},[92,8561,8562],{"class":1942}," Teacher\n",[92,8564,8565],{"class":94,"line":1602},[92,8566,1525],{"class":102},[92,8568,8569,8571],{"class":94,"line":1607},[92,8570,1964],{"class":98},[92,8572,8573],{"class":102}," id;\n",[92,8575,8576],{"class":94,"line":1621},[92,8577,7765],{"class":102},[92,8579,8580,8582],{"class":94,"line":1626},[92,8581,1964],{"class":98},[92,8583,7777],{"class":102},[92,8585,8586],{"class":94,"line":1632},[92,8587,8588],{"class":102},"    Student stu;\n",[92,8590,8591],{"class":94,"line":1653},[92,8592,1544],{"class":102},[92,8594,8595,8597,8599],{"class":94,"line":1658},[92,8596,106],{"class":98},[92,8598,1952],{"class":1942},[92,8600,5958],{"class":102},[92,8602,8603],{"class":94,"line":1672},[92,8604,1525],{"class":102},[92,8606,8607],{"class":94,"line":1677},[92,8608,8609],{"class":161},"    \u002F\u002F结构体嵌套结构体\n",[92,8611,8612],{"class":94,"line":1706},[92,8613,8614],{"class":161},"    \u002F\u002F创建老师\n",[92,8616,8617],{"class":94,"line":1711},[92,8618,8619],{"class":102},"    Teacher t;\n",[92,8621,8622,8625,8627,8629],{"class":94,"line":1728},[92,8623,8624],{"class":102},"    t.id",[92,8626,148],{"class":98},[92,8628,414],{"class":151},[92,8630,1269],{"class":102},[92,8632,8633,8636,8638,8641],{"class":94,"line":1733},[92,8634,8635],{"class":102},"    t.name",[92,8637,148],{"class":98},[92,8639,8640],{"class":207},"\"老王\"",[92,8642,1269],{"class":102},[92,8644,8645,8648,8650,8652],{"class":94,"line":1738},[92,8646,8647],{"class":102},"    t.age",[92,8649,148],{"class":98},[92,8651,753],{"class":151},[92,8653,1269],{"class":102},[92,8655,8656,8659,8661,8664],{"class":94,"line":1743},[92,8657,8658],{"class":102},"    t.stu.name",[92,8660,148],{"class":98},[92,8662,8663],{"class":207},"\"小王\"",[92,8665,8666],{"class":102},"；\n",[92,8668,8669,8672,8674,8676],{"class":94,"line":1757},[92,8670,8671],{"class":102},"    t.stu.age",[92,8673,148],{"class":98},[92,8675,803],{"class":151},[92,8677,1269],{"class":102},[92,8679,8680,8683,8685,8687],{"class":94,"line":1762},[92,8681,8682],{"class":102},"    t.stu.score",[92,8684,148],{"class":98},[92,8686,447],{"class":151},[92,8688,1269],{"class":102},[92,8690,8691],{"class":94,"line":2556},[92,8692,1544],{"class":102},[33,8694,8696],{"id":8695},"_45结构体做函数参数","4.5结构体做函数参数",[38,8698,8699],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[83,8701,8703],{"className":85,"code":8702,"language":87,"meta":10,"style":10},"#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",[89,8704,8705,8711,8721,8727,8733,8737,8741,8747,8753,8757,8762,8767,8784,8788,8821,8825,8830,8849,8853,8884,8888,8896,8900,8909,8921,8933,8945,8958,8966,8979,8991,8999],{"__ignoreMap":10},[92,8706,8707,8709],{"class":94,"line":95},[92,8708,1928],{"class":98},[92,8710,1931],{"class":207},[92,8712,8713,8715,8717,8719],{"class":94,"line":11},[92,8714,1936],{"class":98},[92,8716,1939],{"class":98},[92,8718,1943],{"class":1942},[92,8720,1269],{"class":102},[92,8722,8723,8725],{"class":94,"line":1158},[92,8724,1928],{"class":98},[92,8726,7729],{"class":207},[92,8728,8729,8731],{"class":94,"line":1173},[92,8730,7739],{"class":98},[92,8732,7742],{"class":1942},[92,8734,8735],{"class":94,"line":1179},[92,8736,1525],{"class":102},[92,8738,8739],{"class":94,"line":1193},[92,8740,7765],{"class":102},[92,8742,8743,8745],{"class":94,"line":1199},[92,8744,1964],{"class":98},[92,8746,7777],{"class":102},[92,8748,8749,8751],{"class":94,"line":1290},[92,8750,1964],{"class":98},[92,8752,7789],{"class":102},[92,8754,8755],{"class":94,"line":1296},[92,8756,3974],{"class":102},[92,8758,8759],{"class":94,"line":1308},[92,8760,8761],{"class":161},"\u002F\u002F打印学生信息的函数\n",[92,8763,8764],{"class":94,"line":1591},[92,8765,8766],{"class":161},"\u002F\u002F值传递\n",[92,8768,8769,8771,8774,8776,8778,8780,8782],{"class":94,"line":1596},[92,8770,5344],{"class":98},[92,8772,8773],{"class":1942}," printStudent1",[92,8775,103],{"class":102},[92,8777,7739],{"class":98},[92,8779,7878],{"class":1942},[92,8781,8408],{"class":5196},[92,8783,109],{"class":102},[92,8785,8786],{"class":94,"line":1602},[92,8787,1525],{"class":102},[92,8789,8790,8792,8794,8797,8799,8802,8804,8807,8809,8811,8813,8816,8818],{"class":94,"line":1607},[92,8791,6509],{"class":102},[92,8793,1147],{"class":98},[92,8795,8796],{"class":102}," s.name ",[92,8798,1147],{"class":98},[92,8800,8801],{"class":207}," \" \"",[92,8803,1423],{"class":98},[92,8805,8806],{"class":102}," s.age ",[92,8808,1147],{"class":98},[92,8810,8801],{"class":207},[92,8812,1423],{"class":98},[92,8814,8815],{"class":102}," s.score ",[92,8817,1147],{"class":98},[92,8819,8820],{"class":102}," endl;\n",[92,8822,8823],{"class":94,"line":1621},[92,8824,1544],{"class":102},[92,8826,8827],{"class":94,"line":1626},[92,8828,8829],{"class":161},"\u002F\u002F地址传递\n",[92,8831,8832,8834,8837,8839,8841,8843,8845,8847],{"class":94,"line":1632},[92,8833,5344],{"class":98},[92,8835,8836],{"class":1942}," printStudent2",[92,8838,103],{"class":102},[92,8840,7739],{"class":98},[92,8842,7878],{"class":1942},[92,8844,6498],{"class":98},[92,8846,798],{"class":5196},[92,8848,109],{"class":102},[92,8850,8851],{"class":94,"line":1653},[92,8852,1525],{"class":102},[92,8854,8855,8857,8859,8862,8864,8866,8868,8871,8873,8875,8877,8880,8882],{"class":94,"line":1658},[92,8856,6509],{"class":102},[92,8858,1147],{"class":98},[92,8860,8861],{"class":102}," s->name ",[92,8863,1147],{"class":98},[92,8865,8801],{"class":207},[92,8867,1423],{"class":98},[92,8869,8870],{"class":102}," s->age ",[92,8872,1147],{"class":98},[92,8874,8801],{"class":207},[92,8876,1423],{"class":98},[92,8878,8879],{"class":102}," s->score ",[92,8881,1147],{"class":98},[92,8883,8820],{"class":102},[92,8885,8886],{"class":94,"line":1672},[92,8887,1544],{"class":102},[92,8889,8890,8892,8894],{"class":94,"line":1677},[92,8891,106],{"class":98},[92,8893,1952],{"class":1942},[92,8895,1955],{"class":102},[92,8897,8898],{"class":94,"line":1706},[92,8899,1525],{"class":102},[92,8901,8902,8904,8906],{"class":94,"line":1711},[92,8903,7875],{"class":98},[92,8905,7878],{"class":1942},[92,8907,8908],{"class":102}," s;\n",[92,8910,8911,8914,8916,8919],{"class":94,"line":1728},[92,8912,8913],{"class":102},"    s.name ",[92,8915,148],{"class":98},[92,8917,8918],{"class":207}," \"张三\"",[92,8920,1269],{"class":102},[92,8922,8923,8926,8928,8931],{"class":94,"line":1733},[92,8924,8925],{"class":102},"    s.age ",[92,8927,148],{"class":98},[92,8929,8930],{"class":151}," 20",[92,8932,1269],{"class":102},[92,8934,8935,8938,8940,8943],{"class":94,"line":1738},[92,8936,8937],{"class":102},"    s.score ",[92,8939,148],{"class":98},[92,8941,8942],{"class":151}," 85",[92,8944,1269],{"class":102},[92,8946,8947,8949,8951,8954,8956],{"class":94,"line":1743},[92,8948,1530],{"class":102},[92,8950,1147],{"class":98},[92,8952,8953],{"class":207},"\"值传递:\"",[92,8955,1147],{"class":98},[92,8957,1170],{"class":102},[92,8959,8960,8963],{"class":94,"line":1757},[92,8961,8962],{"class":1942},"    printStudent1",[92,8964,8965],{"class":102},"(s);\n",[92,8967,8968,8970,8972,8975,8977],{"class":94,"line":1762},[92,8969,1530],{"class":102},[92,8971,1147],{"class":98},[92,8973,8974],{"class":207},"\"地址传递:\"",[92,8976,1147],{"class":98},[92,8978,1170],{"class":102},[92,8980,8981,8984,8986,8988],{"class":94,"line":2556},[92,8982,8983],{"class":1942},"    printStudent2",[92,8985,103],{"class":102},[92,8987,456],{"class":98},[92,8989,8990],{"class":102},"s); \n",[92,8992,8993,8995,8997],{"class":94,"line":2570},[92,8994,4069],{"class":98},[92,8996,4072],{"class":151},[92,8998,1269],{"class":102},[92,9000,9001],{"class":94,"line":2578},[92,9002,1544],{"class":102},[38,9004,9005],{},"注意：",[1110,9007,9008,9011],{},[49,9009,9010],{},"1.先定义结构体，不要在函数中写结构体的定义",[49,9012,9013],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[33,9015,9017],{"id":9016},"_46结构体中const使用场景","4.6结构体中const使用场景",[38,9019,9020],{},"用const防止误操作",[83,9022,9024],{"className":85,"code":9023,"language":87,"meta":10,"style":10},"#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",[89,9025,9026,9032,9042,9048,9053,9057,9061,9067,9073,9077,9093,9097,9120,9124,9132,9136,9157,9164,9168],{"__ignoreMap":10},[92,9027,9028,9030],{"class":94,"line":95},[92,9029,1928],{"class":98},[92,9031,1931],{"class":207},[92,9033,9034,9036,9038,9040],{"class":94,"line":11},[92,9035,1936],{"class":98},[92,9037,1939],{"class":98},[92,9039,1943],{"class":1942},[92,9041,1269],{"class":102},[92,9043,9044,9046],{"class":94,"line":1158},[92,9045,1928],{"class":98},[92,9047,7729],{"class":207},[92,9049,9050],{"class":94,"line":1173},[92,9051,9052],{"class":102},"sctuct Student\n",[92,9054,9055],{"class":94,"line":1179},[92,9056,1525],{"class":102},[92,9058,9059],{"class":94,"line":1193},[92,9060,7765],{"class":102},[92,9062,9063,9065],{"class":94,"line":1199},[92,9064,1964],{"class":98},[92,9066,7777],{"class":102},[92,9068,9069,9071],{"class":94,"line":1290},[92,9070,1964],{"class":98},[92,9072,7789],{"class":102},[92,9074,9075],{"class":94,"line":1296},[92,9076,3974],{"class":102},[92,9078,9079,9081,9084,9086,9089,9091],{"class":94,"line":1308},[92,9080,5344],{"class":98},[92,9082,9083],{"class":1942}," printStudents",[92,9085,103],{"class":102},[92,9087,9088],{"class":1942},"student",[92,9090,8408],{"class":5196},[92,9092,109],{"class":102},[92,9094,9095],{"class":94,"line":1591},[92,9096,1525],{"class":102},[92,9098,9099,9101,9103,9106,9108,9111,9113,9116,9118],{"class":94,"line":1596},[92,9100,1530],{"class":102},[92,9102,1147],{"class":98},[92,9104,9105],{"class":102},"s.name",[92,9107,1147],{"class":98},[92,9109,9110],{"class":102},"s.age",[92,9112,1147],{"class":98},[92,9114,9115],{"class":102},"s.score",[92,9117,1147],{"class":98},[92,9119,1170],{"class":102},[92,9121,9122],{"class":94,"line":1602},[92,9123,1544],{"class":102},[92,9125,9126,9128,9130],{"class":94,"line":1607},[92,9127,106],{"class":98},[92,9129,1952],{"class":1942},[92,9131,5958],{"class":102},[92,9133,9134],{"class":94,"line":1621},[92,9135,1525],{"class":102},[92,9137,9138,9141,9143,9145,9147,9149,9151,9153,9155],{"class":94,"line":1626},[92,9139,9140],{"class":102},"    Student s",[92,9142,148],{"class":98},[92,9144,999],{"class":102},[92,9146,7896],{"class":207},[92,9148,481],{"class":102},[92,9150,753],{"class":151},[92,9152,481],{"class":102},[92,9154,753],{"class":151},[92,9156,3974],{"class":102},[92,9158,9159,9162],{"class":94,"line":1632},[92,9160,9161],{"class":1942},"    printStudent",[92,9163,8965],{"class":102},[92,9165,9166],{"class":94,"line":1653},[92,9167,2379],{"emptyLinePlaceholder":17},[92,9169,9170],{"class":94,"line":1658},[92,9171,1544],{"class":102},[38,9173,9005],{},[1110,9175,9176,9179,9182],{},[49,9177,9178],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[49,9180,9181],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[49,9183,9184],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[83,9186,9188],{"className":85,"code":9187,"language":87,"meta":10,"style":10},"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",[89,9189,9190,9209,9213,9218,9238],{"__ignoreMap":10},[92,9191,9192,9194,9196,9198,9200,9203,9205,9207],{"class":94,"line":95},[92,9193,5344],{"class":98},[92,9195,9083],{"class":1942},[92,9197,103],{"class":102},[92,9199,6772],{"class":98},[92,9201,9202],{"class":1942}," student",[92,9204,6498],{"class":98},[92,9206,798],{"class":5196},[92,9208,109],{"class":102},[92,9210,9211],{"class":94,"line":11},[92,9212,1525],{"class":102},[92,9214,9215],{"class":94,"line":1158},[92,9216,9217],{"class":161},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[92,9219,9220,9222,9224,9226,9228,9230,9232,9234,9236],{"class":94,"line":1173},[92,9221,1530],{"class":102},[92,9223,1147],{"class":98},[92,9225,9105],{"class":102},[92,9227,1147],{"class":98},[92,9229,9110],{"class":102},[92,9231,1147],{"class":98},[92,9233,9115],{"class":102},[92,9235,1147],{"class":98},[92,9237,1170],{"class":102},[92,9239,9240],{"class":94,"line":1179},[92,9241,1544],{"class":102},[33,9243,9245],{"id":9244},"_47案例","4.7案例",[46,9247,9248],{},[49,9249,9250],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[83,9252,9254],{"className":85,"code":9253,"language":87,"meta":10,"style":10},"#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",[89,9255,9256,9262,9272,9278,9285,9289,9295,9299,9304,9310,9316,9320,9324,9330,9334,9339,9344,9357,9361,9366,9392,9396,9408,9435,9439,9451,9461,9465,9470,9499,9503,9515,9524,9551,9562,9572,9576,9580,9584,9589,9613,9617,9641,9645,9664,9690,9694,9719,9742,9766,9771,9776,9781,9790,9795,9801,9822,9828,9842,9848,9875,9884,9890,9898,9903],{"__ignoreMap":10},[92,9257,9258,9260],{"class":94,"line":95},[92,9259,1928],{"class":98},[92,9261,1931],{"class":207},[92,9263,9264,9266,9268,9270],{"class":94,"line":11},[92,9265,1936],{"class":98},[92,9267,1939],{"class":98},[92,9269,1943],{"class":1942},[92,9271,1269],{"class":102},[92,9273,9274,9276],{"class":94,"line":1158},[92,9275,1928],{"class":98},[92,9277,7729],{"class":207},[92,9279,9280,9282],{"class":94,"line":1173},[92,9281,1928],{"class":98},[92,9283,9284],{"class":207},"\u003Cctime>\n",[92,9286,9287],{"class":94,"line":1179},[92,9288,8518],{"class":161},[92,9290,9291,9293],{"class":94,"line":1193},[92,9292,7739],{"class":98},[92,9294,7742],{"class":1942},[92,9296,9297],{"class":94,"line":1199},[92,9298,1525],{"class":102},[92,9300,9301],{"class":94,"line":1290},[92,9302,9303],{"class":102},"    string sName;\n",[92,9305,9306,9308],{"class":94,"line":1296},[92,9307,1964],{"class":98},[92,9309,7777],{"class":102},[92,9311,9312,9314],{"class":94,"line":1308},[92,9313,1964],{"class":98},[92,9315,7789],{"class":102},[92,9317,9318],{"class":94,"line":1591},[92,9319,3974],{"class":102},[92,9321,9322],{"class":94,"line":1596},[92,9323,8555],{"class":161},[92,9325,9326,9328],{"class":94,"line":1602},[92,9327,7739],{"class":98},[92,9329,8562],{"class":1942},[92,9331,9332],{"class":94,"line":1607},[92,9333,1525],{"class":102},[92,9335,9336],{"class":94,"line":1621},[92,9337,9338],{"class":102},"    string tName;\n",[92,9340,9341],{"class":94,"line":1626},[92,9342,9343],{"class":161},"    \u002F\u002F学生数组\n",[92,9345,9346,9348,9350,9353,9355],{"class":94,"line":1632},[92,9347,7875],{"class":98},[92,9349,7878],{"class":1942},[92,9351,9352],{"class":102}," sArray[",[92,9354,422],{"class":151},[92,9356,4669],{"class":102},[92,9358,9359],{"class":94,"line":1653},[92,9360,3974],{"class":102},[92,9362,9363],{"class":94,"line":1658},[92,9364,9365],{"class":161},"\u002F\u002F给老师和学生赋值的函数\n",[92,9367,9368,9370,9373,9375,9377,9380,9383,9386,9388,9390],{"class":94,"line":1672},[92,9369,5344],{"class":98},[92,9371,9372],{"class":1942}," allocateSpace",[92,9374,103],{"class":102},[92,9376,7739],{"class":98},[92,9378,9379],{"class":1942}," Teacher",[92,9381,9382],{"class":5196}," tArray",[92,9384,9385],{"class":102},"[],",[92,9387,106],{"class":98},[92,9389,7311],{"class":5196},[92,9391,109],{"class":102},[92,9393,9394],{"class":94,"line":1677},[92,9395,1525],{"class":102},[92,9397,9398,9401,9403,9406],{"class":94,"line":1706},[92,9399,9400],{"class":102},"    string nameSeed",[92,9402,148],{"class":98},[92,9404,9405],{"class":207},"\"ABCDE\"",[92,9407,1269],{"class":102},[92,9409,9410,9412,9414,9416,9419,9421,9423,9426,9428,9431,9433],{"class":94,"line":1711},[92,9411,3180],{"class":98},[92,9413,1637],{"class":102},[92,9415,106],{"class":98},[92,9417,9418],{"class":102}," i ",[92,9420,148],{"class":98},[92,9422,4072],{"class":151},[92,9424,9425],{"class":102},"; i ",[92,9427,1013],{"class":98},[92,9429,9430],{"class":102}," len; i",[92,9432,2271],{"class":98},[92,9434,109],{"class":102},[92,9436,9437],{"class":94,"line":1728},[92,9438,2009],{"class":102},[92,9440,9441,9444,9446,9449],{"class":94,"line":1733},[92,9442,9443],{"class":102},"        tArray[i].tName ",[92,9445,148],{"class":98},[92,9447,9448],{"class":207}," \"Teacher_\"",[92,9450,1269],{"class":102},[92,9452,9453,9455,9458],{"class":94,"line":1738},[92,9454,9443],{"class":102},[92,9456,9457],{"class":98},"+=",[92,9459,9460],{"class":102},"nameSeed[i];\n",[92,9462,9463],{"class":94,"line":1743},[92,9464,2379],{"emptyLinePlaceholder":17},[92,9466,9467],{"class":94,"line":1757},[92,9468,9469],{"class":161},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[92,9471,9472,9474,9476,9478,9481,9483,9485,9488,9490,9492,9495,9497],{"class":94,"line":1762},[92,9473,3382],{"class":98},[92,9475,1637],{"class":102},[92,9477,106],{"class":98},[92,9479,9480],{"class":102}," j ",[92,9482,148],{"class":98},[92,9484,4072],{"class":151},[92,9486,9487],{"class":102},"; j ",[92,9489,1013],{"class":98},[92,9491,2127],{"class":151},[92,9493,9494],{"class":102},"; j",[92,9496,2271],{"class":98},[92,9498,109],{"class":102},[92,9500,9501],{"class":94,"line":2556},[92,9502,2489],{"class":102},[92,9504,9505,9508,9510,9513],{"class":94,"line":2570},[92,9506,9507],{"class":102},"            tArray[i].sArray[j].sName ",[92,9509,148],{"class":98},[92,9511,9512],{"class":207}," \"Student_\"",[92,9514,1269],{"class":102},[92,9516,9517,9519,9521],{"class":94,"line":2578},[92,9518,9507],{"class":102},[92,9520,9457],{"class":98},[92,9522,9523],{"class":102}," nameSeed[j];\n",[92,9525,9526,9529,9532,9534,9536,9538,9540,9542,9544,9546,9548],{"class":94,"line":2583},[92,9527,9528],{"class":98},"            int",[92,9530,9531],{"class":102}," random",[92,9533,148],{"class":98},[92,9535,2403],{"class":1942},[92,9537,2406],{"class":102},[92,9539,431],{"class":98},[92,9541,1010],{"class":151},[92,9543,584],{"class":98},[92,9545,504],{"class":151},[92,9547,158],{"class":102},[92,9549,9550],{"class":161},"\u002F\u002F40~99\n",[92,9552,9553,9556,9558,9560],{"class":94,"line":2589},[92,9554,9555],{"class":102},"            tArray[i].sArray[j].age ",[92,9557,148],{"class":98},[92,9559,8930],{"class":151},[92,9561,1269],{"class":102},[92,9563,9564,9567,9569],{"class":94,"line":2595},[92,9565,9566],{"class":102},"            tArray[i].sArray[j].score ",[92,9568,148],{"class":98},[92,9570,9571],{"class":102}," random;\n",[92,9573,9574],{"class":94,"line":2600},[92,9575,2508],{"class":102},[92,9577,9578],{"class":94,"line":7928},[92,9579,2166],{"class":102},[92,9581,9582],{"class":94,"line":7952},[92,9583,1544],{"class":102},[92,9585,9586],{"class":94,"line":7957},[92,9587,9588],{"class":161},"\u002F\u002F打印所有信息的函数\n",[92,9590,9591,9593,9596,9598,9600,9602,9604,9607,9609,9611],{"class":94,"line":7963},[92,9592,5344],{"class":98},[92,9594,9595],{"class":1942}," printInfo",[92,9597,103],{"class":102},[92,9599,7739],{"class":98},[92,9601,9379],{"class":1942},[92,9603,9382],{"class":5196},[92,9605,9606],{"class":102},"[], ",[92,9608,106],{"class":98},[92,9610,7311],{"class":5196},[92,9612,109],{"class":102},[92,9614,9615],{"class":94,"line":7990},[92,9616,1525],{"class":102},[92,9618,9619,9621,9623,9625,9627,9629,9631,9633,9635,9637,9639],{"class":94,"line":7995},[92,9620,3180],{"class":98},[92,9622,1637],{"class":102},[92,9624,106],{"class":98},[92,9626,9418],{"class":102},[92,9628,148],{"class":98},[92,9630,4072],{"class":151},[92,9632,9425],{"class":102},[92,9634,1013],{"class":98},[92,9636,9430],{"class":102},[92,9638,2271],{"class":98},[92,9640,109],{"class":102},[92,9642,9643],{"class":94,"line":8001},[92,9644,2009],{"class":102},[92,9646,9647,9650,9652,9655,9657,9660,9662],{"class":94,"line":8013},[92,9648,9649],{"class":102},"        cout ",[92,9651,1147],{"class":98},[92,9653,9654],{"class":207}," \"Teacher: \"",[92,9656,1423],{"class":98},[92,9658,9659],{"class":102}," tArray[i].tName ",[92,9661,1147],{"class":98},[92,9663,8820],{"class":102},[92,9665,9666,9668,9670,9672,9674,9676,9678,9680,9682,9684,9686,9688],{"class":94,"line":8025},[92,9667,3382],{"class":98},[92,9669,1637],{"class":102},[92,9671,106],{"class":98},[92,9673,9480],{"class":102},[92,9675,148],{"class":98},[92,9677,4072],{"class":151},[92,9679,9487],{"class":102},[92,9681,1013],{"class":98},[92,9683,2127],{"class":151},[92,9685,9494],{"class":102},[92,9687,2271],{"class":98},[92,9689,109],{"class":102},[92,9691,9692],{"class":94,"line":8037},[92,9693,2489],{"class":102},[92,9695,9697,9700,9702,9705,9707,9710,9712,9715,9717],{"class":94,"line":9696},47,[92,9698,9699],{"class":102},"            cout ",[92,9701,1147],{"class":98},[92,9703,9704],{"class":207}," \"",[92,9706,1209],{"class":151},[92,9708,9709],{"class":207},"Student: \"",[92,9711,1423],{"class":98},[92,9713,9714],{"class":102}," tArray[i].sArray[j].sName",[92,9716,1147],{"class":98},[92,9718,1170],{"class":102},[92,9720,9722,9724,9726,9728,9730,9733,9735,9738,9740],{"class":94,"line":9721},48,[92,9723,9699],{"class":102},[92,9725,1147],{"class":98},[92,9727,9704],{"class":207},[92,9729,1209],{"class":151},[92,9731,9732],{"class":207},"Age: \"",[92,9734,1423],{"class":98},[92,9736,9737],{"class":102}," tArray[i].sArray[j].age ",[92,9739,1147],{"class":98},[92,9741,8820],{"class":102},[92,9743,9745,9747,9749,9751,9753,9756,9758,9761,9763],{"class":94,"line":9744},49,[92,9746,9699],{"class":102},[92,9748,1147],{"class":98},[92,9750,9704],{"class":207},[92,9752,1209],{"class":151},[92,9754,9755],{"class":207},"Score: \"",[92,9757,1423],{"class":98},[92,9759,9760],{"class":102}," tArray[i].sArray[j].score ",[92,9762,1147],{"class":98},[92,9764,9765],{"class":102}," endl;   \n",[92,9767,9769],{"class":94,"line":9768},50,[92,9770,2508],{"class":102},[92,9772,9774],{"class":94,"line":9773},51,[92,9775,2166],{"class":102},[92,9777,9779],{"class":94,"line":9778},52,[92,9780,1544],{"class":102},[92,9782,9784,9786,9788],{"class":94,"line":9783},53,[92,9785,106],{"class":98},[92,9787,1952],{"class":1942},[92,9789,1955],{"class":102},[92,9791,9793],{"class":94,"line":9792},54,[92,9794,1525],{"class":102},[92,9796,9798],{"class":94,"line":9797},55,[92,9799,9800],{"class":161},"    \u002F\u002F随机数种子\n",[92,9802,9804,9806,9808,9810,9812,9814,9816,9818,9820],{"class":94,"line":9803},56,[92,9805,2352],{"class":1942},[92,9807,2355],{"class":102},[92,9809,2358],{"class":98},[92,9811,2361],{"class":98},[92,9813,532],{"class":102},[92,9815,2366],{"class":1942},[92,9817,103],{"class":102},[92,9819,2371],{"class":151},[92,9821,2374],{"class":102},[92,9823,9825],{"class":94,"line":9824},57,[92,9826,9827],{"class":161},"    \u002F\u002F1.创建3名老师的数组\n",[92,9829,9831,9833,9835,9838,9840],{"class":94,"line":9830},58,[92,9832,7875],{"class":98},[92,9834,9379],{"class":1942},[92,9836,9837],{"class":102}," tArray[",[92,9839,174],{"class":151},[92,9841,4669],{"class":102},[92,9843,9845],{"class":94,"line":9844},59,[92,9846,9847],{"class":161},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[92,9849,9851,9853,9856,9858,9861,9864,9866,9868,9871,9873],{"class":94,"line":9850},60,[92,9852,1964],{"class":98},[92,9854,9855],{"class":102}," len ",[92,9857,148],{"class":98},[92,9859,9860],{"class":98}," sizeof",[92,9862,9863],{"class":102},"(tArray) ",[92,9865,687],{"class":98},[92,9867,9860],{"class":98},[92,9869,9870],{"class":102},"(tArray[",[92,9872,294],{"class":151},[92,9874,3835],{"class":102},[92,9876,9878,9881],{"class":94,"line":9877},61,[92,9879,9880],{"class":1942},"    allocateSpace",[92,9882,9883],{"class":102},"(tArray, len);\n",[92,9885,9887],{"class":94,"line":9886},62,[92,9888,9889],{"class":161},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[92,9891,9893,9896],{"class":94,"line":9892},63,[92,9894,9895],{"class":1942},"    printInfo",[92,9897,9883],{"class":102},[92,9899,9901],{"class":94,"line":9900},64,[92,9902,2379],{"emptyLinePlaceholder":17},[92,9904,9906],{"class":94,"line":9905},65,[92,9907,1544],{"class":102},[46,9909,9910],{"start":11},[49,9911,9912,9915],{},[252,9913,9914],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[38,9917,9918],{},"五名英雄信息如下：",[83,9920,9924],{"className":9921,"code":9922,"language":9923,"meta":10,"style":10},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[89,9925,9926,9944,9961,9978,9995],{"__ignoreMap":10},[92,9927,9928,9930,9933,9935,9937,9939,9942],{"class":94,"line":95},[92,9929,4896],{"class":102},[92,9931,9932],{"class":207},"\"刘备\"",[92,9934,481],{"class":102},[92,9936,878],{"class":151},[92,9938,481],{"class":102},[92,9940,9941],{"class":207},"\"男\"",[92,9943,4909],{"class":102},[92,9945,9946,9948,9951,9953,9955,9957,9959],{"class":94,"line":11},[92,9947,4896],{"class":102},[92,9949,9950],{"class":207},"\"关羽\"",[92,9952,481],{"class":102},[92,9954,853],{"class":151},[92,9956,481],{"class":102},[92,9958,9941],{"class":207},[92,9960,4909],{"class":102},[92,9962,9963,9965,9968,9970,9972,9974,9976],{"class":94,"line":1158},[92,9964,4896],{"class":102},[92,9966,9967],{"class":207},"\"张飞\"",[92,9969,481],{"class":102},[92,9971,803],{"class":151},[92,9973,481],{"class":102},[92,9975,9941],{"class":207},[92,9977,4909],{"class":102},[92,9979,9980,9982,9985,9987,9989,9991,9993],{"class":94,"line":1173},[92,9981,4896],{"class":102},[92,9983,9984],{"class":207},"\"赵云\"",[92,9986,481],{"class":102},[92,9988,828],{"class":151},[92,9990,481],{"class":102},[92,9992,9941],{"class":207},[92,9994,4909],{"class":102},[92,9996,9997,9999,10002,10004,10006,10008,10011],{"class":94,"line":1179},[92,9998,4896],{"class":102},[92,10000,10001],{"class":207},"\"貂蝉\"",[92,10003,481],{"class":102},[92,10005,778],{"class":151},[92,10007,481],{"class":102},[92,10009,10010],{"class":207},"\"女\"",[92,10012,4909],{"class":102},[38,10014,10015],{},"代码：",[83,10017,10019],{"className":85,"code":10018,"language":87,"meta":10,"style":10},"#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",[89,10020,10021,10027,10037,10043,10050,10054,10058,10064,10069,10073,10078,10101,10105,10130,10134,10167,10172,10201,10206,10221,10247,10267,10272,10277,10281,10285,10290,10312,10316,10340,10344,10406,10410,10414,10422,10426,10431,10442,10446,10462,10478,10494,10510,10526,10530,10550,10572,10577,10590,10597,10602,10608,10613,10626,10632],{"__ignoreMap":10},[92,10022,10023,10025],{"class":94,"line":95},[92,10024,1928],{"class":98},[92,10026,1931],{"class":207},[92,10028,10029,10031,10033,10035],{"class":94,"line":11},[92,10030,1936],{"class":98},[92,10032,1939],{"class":98},[92,10034,1943],{"class":1942},[92,10036,1269],{"class":102},[92,10038,10039,10041],{"class":94,"line":1158},[92,10040,1928],{"class":98},[92,10042,7729],{"class":207},[92,10044,10045,10047],{"class":94,"line":1173},[92,10046,7739],{"class":98},[92,10048,10049],{"class":1942}," Sanguo\n",[92,10051,10052],{"class":94,"line":1179},[92,10053,1525],{"class":102},[92,10055,10056],{"class":94,"line":1193},[92,10057,7765],{"class":102},[92,10059,10060,10062],{"class":94,"line":1199},[92,10061,1964],{"class":98},[92,10063,7777],{"class":102},[92,10065,10066],{"class":94,"line":1290},[92,10067,10068],{"class":102},"    string gender;\n",[92,10070,10071],{"class":94,"line":1296},[92,10072,3974],{"class":102},[92,10074,10075],{"class":94,"line":1308},[92,10076,10077],{"class":161},"\u002F\u002F定义排序函数\n",[92,10079,10080,10082,10084,10086,10089,10091,10093,10095,10097,10099],{"class":94,"line":1591},[92,10081,5344],{"class":98},[92,10083,7296],{"class":1942},[92,10085,103],{"class":102},[92,10087,10088],{"class":1942},"Sanguo",[92,10090,6498],{"class":98},[92,10092,798],{"class":5196},[92,10094,481],{"class":102},[92,10096,106],{"class":98},[92,10098,7311],{"class":5196},[92,10100,109],{"class":102},[92,10102,10103],{"class":94,"line":1596},[92,10104,1525],{"class":102},[92,10106,10107,10109,10111,10113,10115,10117,10119,10121,10123,10126,10128],{"class":94,"line":1602},[92,10108,3180],{"class":98},[92,10110,103],{"class":102},[92,10112,106],{"class":98},[92,10114,3011],{"class":102},[92,10116,148],{"class":98},[92,10118,294],{"class":151},[92,10120,3018],{"class":102},[92,10122,1013],{"class":98},[92,10124,10125],{"class":102},"len;i",[92,10127,2271],{"class":98},[92,10129,109],{"class":102},[92,10131,10132],{"class":94,"line":1607},[92,10133,2009],{"class":102},[92,10135,10136,10139,10141,10143,10145,10147,10149,10151,10153,10155,10157,10159,10161,10163,10165],{"class":94,"line":1621},[92,10137,10138],{"class":98},"     for",[92,10140,1637],{"class":102},[92,10142,106],{"class":98},[92,10144,3389],{"class":102},[92,10146,148],{"class":98},[92,10148,294],{"class":151},[92,10150,3396],{"class":102},[92,10152,1013],{"class":98},[92,10154,7338],{"class":102},[92,10156,635],{"class":98},[92,10158,320],{"class":151},[92,10160,635],{"class":98},[92,10162,3529],{"class":102},[92,10164,2271],{"class":98},[92,10166,109],{"class":102},[92,10168,10169],{"class":94,"line":1626},[92,10170,10171],{"class":102},"     {\n",[92,10173,10174,10177,10180,10182,10185,10187,10190,10192,10194,10196,10198],{"class":94,"line":1632},[92,10175,10176],{"class":98},"         if",[92,10178,10179],{"class":102}," ((s",[92,10181,584],{"class":98},[92,10183,10184],{"class":102},"j)->age ",[92,10186,1063],{"class":98},[92,10188,10189],{"class":102}," (s",[92,10191,584],{"class":98},[92,10193,570],{"class":102},[92,10195,584],{"class":98},[92,10197,320],{"class":151},[92,10199,10200],{"class":102},")->age)\n",[92,10202,10203],{"class":94,"line":1653},[92,10204,10205],{"class":102},"         {\n",[92,10207,10208,10211,10213,10216,10218],{"class":94,"line":1658},[92,10209,10210],{"class":102},"             Sanguo temp",[92,10212,7133],{"class":98},[92,10214,10215],{"class":102},"(s",[92,10217,584],{"class":98},[92,10219,10220],{"class":102},"j);\n",[92,10222,10223,10226,10228,10230,10233,10235,10237,10239,10241,10243,10245],{"class":94,"line":1672},[92,10224,10225],{"class":98},"             *",[92,10227,10215],{"class":102},[92,10229,584],{"class":98},[92,10231,10232],{"class":102},"j)",[92,10234,7133],{"class":98},[92,10236,10215],{"class":102},[92,10238,584],{"class":98},[92,10240,570],{"class":102},[92,10242,584],{"class":98},[92,10244,320],{"class":151},[92,10246,2698],{"class":102},[92,10248,10249,10251,10253,10255,10257,10259,10261,10263,10265],{"class":94,"line":1677},[92,10250,10225],{"class":98},[92,10252,10215],{"class":102},[92,10254,584],{"class":98},[92,10256,570],{"class":102},[92,10258,584],{"class":98},[92,10260,320],{"class":151},[92,10262,532],{"class":102},[92,10264,148],{"class":98},[92,10266,4259],{"class":102},[92,10268,10269],{"class":94,"line":1706},[92,10270,10271],{"class":102},"         }\n",[92,10273,10274],{"class":94,"line":1711},[92,10275,10276],{"class":102},"     }\n",[92,10278,10279],{"class":94,"line":1728},[92,10280,2166],{"class":102},[92,10282,10283],{"class":94,"line":1733},[92,10284,1544],{"class":102},[92,10286,10287],{"class":94,"line":1738},[92,10288,10289],{"class":161},"\u002F\u002F定义打印函数\n",[92,10291,10292,10294,10296,10298,10300,10302,10304,10306,10308,10310],{"class":94,"line":1743},[92,10293,5344],{"class":98},[92,10295,9595],{"class":1942},[92,10297,103],{"class":102},[92,10299,10088],{"class":1942},[92,10301,6498],{"class":98},[92,10303,798],{"class":5196},[92,10305,481],{"class":102},[92,10307,106],{"class":98},[92,10309,7311],{"class":5196},[92,10311,109],{"class":102},[92,10313,10314],{"class":94,"line":1757},[92,10315,1525],{"class":102},[92,10317,10318,10320,10322,10324,10326,10328,10330,10332,10334,10336,10338],{"class":94,"line":1762},[92,10319,3180],{"class":98},[92,10321,1637],{"class":102},[92,10323,106],{"class":98},[92,10325,3011],{"class":102},[92,10327,148],{"class":98},[92,10329,294],{"class":151},[92,10331,3018],{"class":102},[92,10333,1013],{"class":98},[92,10335,10125],{"class":102},[92,10337,2271],{"class":98},[92,10339,109],{"class":102},[92,10341,10342],{"class":94,"line":2556},[92,10343,2009],{"class":102},[92,10345,10346,10348,10350,10352,10354,10357,10359,10361,10363,10366,10368,10370,10372,10375,10377,10379,10381,10384,10386,10388,10390,10393,10395,10397,10399,10402,10404],{"class":94,"line":2570},[92,10347,3430],{"class":102},[92,10349,1147],{"class":98},[92,10351,354],{"class":207},[92,10353,1209],{"class":151},[92,10355,10356],{"class":207},"姓名：\"",[92,10358,1147],{"class":98},[92,10360,10215],{"class":102},[92,10362,584],{"class":98},[92,10364,10365],{"class":102},"i)->name",[92,10367,1147],{"class":98},[92,10369,354],{"class":207},[92,10371,1209],{"class":151},[92,10373,10374],{"class":207},"年龄：\"",[92,10376,1147],{"class":98},[92,10378,10215],{"class":102},[92,10380,584],{"class":98},[92,10382,10383],{"class":102},"i)->age",[92,10385,1147],{"class":98},[92,10387,354],{"class":207},[92,10389,1209],{"class":151},[92,10391,10392],{"class":207},"性别：\"",[92,10394,1147],{"class":98},[92,10396,10215],{"class":102},[92,10398,584],{"class":98},[92,10400,10401],{"class":102},"i)->gender",[92,10403,1147],{"class":98},[92,10405,1170],{"class":102},[92,10407,10408],{"class":94,"line":2578},[92,10409,2166],{"class":102},[92,10411,10412],{"class":94,"line":2583},[92,10413,1544],{"class":102},[92,10415,10416,10418,10420],{"class":94,"line":2589},[92,10417,106],{"class":98},[92,10419,1952],{"class":1942},[92,10421,1955],{"class":102},[92,10423,10424],{"class":94,"line":2595},[92,10425,1525],{"class":102},[92,10427,10428],{"class":94,"line":2600},[92,10429,10430],{"class":161},"    \u002F\u002F定义结构体变量\n",[92,10432,10433,10436,10438,10440],{"class":94,"line":7928},[92,10434,10435],{"class":102},"    Sanguo s1[",[92,10437,422],{"class":151},[92,10439,1043],{"class":102},[92,10441,4887],{"class":98},[92,10443,10444],{"class":94,"line":7952},[92,10445,2009],{"class":102},[92,10447,10448,10450,10452,10454,10456,10458,10460],{"class":94,"line":7957},[92,10449,4896],{"class":102},[92,10451,9932],{"class":207},[92,10453,481],{"class":102},[92,10455,878],{"class":151},[92,10457,481],{"class":102},[92,10459,9941],{"class":207},[92,10461,4909],{"class":102},[92,10463,10464,10466,10468,10470,10472,10474,10476],{"class":94,"line":7963},[92,10465,4896],{"class":102},[92,10467,9950],{"class":207},[92,10469,481],{"class":102},[92,10471,853],{"class":151},[92,10473,481],{"class":102},[92,10475,9941],{"class":207},[92,10477,4909],{"class":102},[92,10479,10480,10482,10484,10486,10488,10490,10492],{"class":94,"line":7990},[92,10481,4896],{"class":102},[92,10483,9967],{"class":207},[92,10485,481],{"class":102},[92,10487,803],{"class":151},[92,10489,481],{"class":102},[92,10491,9941],{"class":207},[92,10493,4909],{"class":102},[92,10495,10496,10498,10500,10502,10504,10506,10508],{"class":94,"line":7995},[92,10497,4896],{"class":102},[92,10499,9984],{"class":207},[92,10501,481],{"class":102},[92,10503,828],{"class":151},[92,10505,481],{"class":102},[92,10507,9941],{"class":207},[92,10509,4909],{"class":102},[92,10511,10512,10514,10516,10518,10520,10522,10524],{"class":94,"line":8001},[92,10513,4896],{"class":102},[92,10515,10001],{"class":207},[92,10517,481],{"class":102},[92,10519,778],{"class":151},[92,10521,481],{"class":102},[92,10523,10010],{"class":207},[92,10525,4909],{"class":102},[92,10527,10528],{"class":94,"line":8013},[92,10529,4930],{"class":102},[92,10531,10532,10534,10536,10538,10541,10543,10546,10548],{"class":94,"line":8025},[92,10533,1964],{"class":98},[92,10535,7311],{"class":102},[92,10537,4182],{"class":98},[92,10539,10540],{"class":102},"(s1)",[92,10542,4188],{"class":98},[92,10544,10545],{"class":102},"(s1[",[92,10547,294],{"class":151},[92,10549,3835],{"class":102},[92,10551,10552,10555,10557,10560,10562,10565,10568,10570],{"class":94,"line":8037},[92,10553,10554],{"class":102},"    Sanguo ",[92,10556,558],{"class":98},[92,10558,10559],{"class":102},"s ",[92,10561,148],{"class":98},[92,10563,10564],{"class":98}," &",[92,10566,10567],{"class":102},"s1[",[92,10569,294],{"class":151},[92,10571,4669],{"class":102},[92,10573,10574],{"class":94,"line":9696},[92,10575,10576],{"class":161},"    \u002F\u002F排序前：\n",[92,10578,10579,10581,10583,10586,10588],{"class":94,"line":9721},[92,10580,6509],{"class":102},[92,10582,1147],{"class":98},[92,10584,10585],{"class":207}," \"排序前：\"",[92,10587,1423],{"class":98},[92,10589,8820],{"class":102},[92,10591,10592,10594],{"class":94,"line":9744},[92,10593,9895],{"class":1942},[92,10595,10596],{"class":102},"(s,len);\n",[92,10598,10599],{"class":94,"line":9768},[92,10600,10601],{"class":161},"    \u002F\u002F调用排序函数\n",[92,10603,10604,10606],{"class":94,"line":9773},[92,10605,7578],{"class":1942},[92,10607,10596],{"class":102},[92,10609,10610],{"class":94,"line":9778},[92,10611,10612],{"class":161},"    \u002F\u002F排序后\n",[92,10614,10615,10617,10619,10622,10624],{"class":94,"line":9783},[92,10616,6509],{"class":102},[92,10618,1147],{"class":98},[92,10620,10621],{"class":207}," \"排序后：\"",[92,10623,1423],{"class":98},[92,10625,8820],{"class":102},[92,10627,10628,10630],{"class":94,"line":9792},[92,10629,9895],{"class":1942},[92,10631,10596],{"class":102},[92,10633,10634],{"class":94,"line":9797},[92,10635,1544],{"class":102},[38,10637,10638,10639,10641],{},"注意：使用指针时直接用传首地址**&s",[92,10640,294],{},"**",[5106,10643,10644],{},"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":10,"searchDepth":11,"depth":11,"links":10646},[10647,10648,10649,10650,10651,10652,10653],{"id":7683,"depth":11,"text":7684},{"id":8045,"depth":11,"text":8046},{"id":8314,"depth":11,"text":8315},{"id":8479,"depth":11,"text":8480},{"id":8695,"depth":11,"text":8696},{"id":9016,"depth":11,"text":9017},{"id":9244,"depth":11,"text":9245},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7672,"description":7680},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10660,"title":10661,"body":10662,"description":10,"extension":14,"meta":12005,"navigation":17,"path":12006,"seo":12007,"stem":12008,"__hash__":12009},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10663,"toc":11999},[10664,10667,10671,10677,10691,10696,10699,10703,10710,10716,10719,10726,10732,10737,10740,10743,10746,11310,11313,11327,11331,11336,11352,11492,11495,11501,11504,11509,11517,11625,11628,11633,11636,11641,11644,11650,11653,11996],[29,10665,10661],{"id":10666},"_5程序内存模型",[33,10668,10670],{"id":10669},"_51内存分区模型","5.1内存分区模型",[38,10672,10673,10674],{},"C++程序在执行时，将内存大方向划分为",[252,10675,10676],{},"4个区域",[1110,10678,10679,10682,10685,10688],{},[49,10680,10681],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[49,10683,10684],{},"全局区：存放全局变量和静态变量以及常量",[49,10686,10687],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[49,10689,10690],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[38,10692,10693],{},[252,10694,10695],{},"内存四区意义：",[38,10697,10698],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[63,10700,10702],{"id":10701},"_511程序运行前","5.1.1程序运行前",[38,10704,10705,10706,10709],{},"​\t在程序编译后，生成了exe可执行程序，",[252,10707,10708],{},"未执行该程序前","分为两个区域",[38,10711,10712,10713],{},"​\t",[252,10714,10715],{},"代码区：",[38,10717,10718],{},"​\t\t存放 CPU 执行的机器指令",[38,10720,10721,10722,10725],{},"​\t\t代码区是",[252,10723,10724],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[38,10727,10721,10728,10731],{},[252,10729,10730],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[38,10733,10712,10734],{},[252,10735,10736],{},"全局区：",[38,10738,10739],{},"​\t\t全局变量和静态变量存放在此.",[38,10741,10742],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[38,10744,10745],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[83,10747,10749],{"className":85,"code":10748,"language":87,"meta":10,"style":10},"\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",[89,10750,10751,10756,10769,10782,10786,10791,10806,10821,10825,10834,10838,10843,10856,10869,10873,10878,10904,10930,10934,10961,10987,10991,10996,11012,11027,11031,11057,11083,11087,11112,11137,11141,11167,11193,11197,11213,11228,11254,11280,11284,11294,11298,11306],{"__ignoreMap":10},[92,10752,10753],{"class":94,"line":95},[92,10754,10755],{"class":161},"\u002F\u002F全局变量\n",[92,10757,10758,10760,10763,10765,10767],{"class":94,"line":11},[92,10759,106],{"class":98},[92,10761,10762],{"class":102}," g_a ",[92,10764,148],{"class":98},[92,10766,2017],{"class":151},[92,10768,1269],{"class":102},[92,10770,10771,10773,10776,10778,10780],{"class":94,"line":1158},[92,10772,106],{"class":98},[92,10774,10775],{"class":102}," g_b ",[92,10777,148],{"class":98},[92,10779,2017],{"class":151},[92,10781,1269],{"class":102},[92,10783,10784],{"class":94,"line":1173},[92,10785,2379],{"emptyLinePlaceholder":17},[92,10787,10788],{"class":94,"line":1179},[92,10789,10790],{"class":161},"\u002F\u002F全局常量\n",[92,10792,10793,10795,10797,10800,10802,10804],{"class":94,"line":1193},[92,10794,6772],{"class":98},[92,10796,2361],{"class":98},[92,10798,10799],{"class":102}," c_g_a ",[92,10801,148],{"class":98},[92,10803,2017],{"class":151},[92,10805,1269],{"class":102},[92,10807,10808,10810,10812,10815,10817,10819],{"class":94,"line":1199},[92,10809,6772],{"class":98},[92,10811,2361],{"class":98},[92,10813,10814],{"class":102}," c_g_b ",[92,10816,148],{"class":98},[92,10818,2017],{"class":151},[92,10820,1269],{"class":102},[92,10822,10823],{"class":94,"line":1290},[92,10824,2379],{"emptyLinePlaceholder":17},[92,10826,10827,10829,10831],{"class":94,"line":1296},[92,10828,106],{"class":98},[92,10830,1952],{"class":1942},[92,10832,10833],{"class":102},"() {\n",[92,10835,10836],{"class":94,"line":1308},[92,10837,2379],{"emptyLinePlaceholder":17},[92,10839,10840],{"class":94,"line":1591},[92,10841,10842],{"class":161},"    \u002F\u002F局部变量\n",[92,10844,10845,10847,10850,10852,10854],{"class":94,"line":1596},[92,10846,1964],{"class":98},[92,10848,10849],{"class":102}," a ",[92,10851,148],{"class":98},[92,10853,2017],{"class":151},[92,10855,1269],{"class":102},[92,10857,10858,10860,10863,10865,10867],{"class":94,"line":1602},[92,10859,1964],{"class":98},[92,10861,10862],{"class":102}," b ",[92,10864,148],{"class":98},[92,10866,2017],{"class":151},[92,10868,1269],{"class":102},[92,10870,10871],{"class":94,"line":1607},[92,10872,2379],{"emptyLinePlaceholder":17},[92,10874,10875],{"class":94,"line":1621},[92,10876,10877],{"class":161},"    \u002F\u002F打印地址\n",[92,10879,10880,10882,10884,10887,10889,10891,10893,10895,10897,10900,10902],{"class":94,"line":1626},[92,10881,6509],{"class":102},[92,10883,1147],{"class":98},[92,10885,10886],{"class":207}," \"局部变量a地址为： \"",[92,10888,1423],{"class":98},[92,10890,1637],{"class":102},[92,10892,106],{"class":98},[92,10894,532],{"class":102},[92,10896,456],{"class":98},[92,10898,10899],{"class":102},"a ",[92,10901,1147],{"class":98},[92,10903,8820],{"class":102},[92,10905,10906,10908,10910,10913,10915,10917,10919,10921,10923,10926,10928],{"class":94,"line":1632},[92,10907,6509],{"class":102},[92,10909,1147],{"class":98},[92,10911,10912],{"class":207}," \"局部变量b地址为： \"",[92,10914,1423],{"class":98},[92,10916,1637],{"class":102},[92,10918,106],{"class":98},[92,10920,532],{"class":102},[92,10922,456],{"class":98},[92,10924,10925],{"class":102},"b ",[92,10927,1147],{"class":98},[92,10929,8820],{"class":102},[92,10931,10932],{"class":94,"line":1653},[92,10933,2379],{"emptyLinePlaceholder":17},[92,10935,10936,10938,10940,10943,10945,10948,10950,10952,10954,10957,10959],{"class":94,"line":1658},[92,10937,6509],{"class":102},[92,10939,1147],{"class":98},[92,10941,10942],{"class":207}," \"全局变量g_a地址为： \"",[92,10944,1423],{"class":98},[92,10946,10947],{"class":102},"  (",[92,10949,106],{"class":98},[92,10951,532],{"class":102},[92,10953,456],{"class":98},[92,10955,10956],{"class":102},"g_a ",[92,10958,1147],{"class":98},[92,10960,8820],{"class":102},[92,10962,10963,10965,10967,10970,10972,10974,10976,10978,10980,10983,10985],{"class":94,"line":1672},[92,10964,6509],{"class":102},[92,10966,1147],{"class":98},[92,10968,10969],{"class":207}," \"全局变量g_b地址为： \"",[92,10971,1423],{"class":98},[92,10973,10947],{"class":102},[92,10975,106],{"class":98},[92,10977,532],{"class":102},[92,10979,456],{"class":98},[92,10981,10982],{"class":102},"g_b ",[92,10984,1147],{"class":98},[92,10986,8820],{"class":102},[92,10988,10989],{"class":94,"line":1677},[92,10990,2379],{"emptyLinePlaceholder":17},[92,10992,10993],{"class":94,"line":1706},[92,10994,10995],{"class":161},"    \u002F\u002F静态变量\n",[92,10997,10998,11001,11003,11006,11008,11010],{"class":94,"line":1711},[92,10999,11000],{"class":98},"    static",[92,11002,2361],{"class":98},[92,11004,11005],{"class":102}," s_a ",[92,11007,148],{"class":98},[92,11009,2017],{"class":151},[92,11011,1269],{"class":102},[92,11013,11014,11016,11018,11021,11023,11025],{"class":94,"line":1728},[92,11015,11000],{"class":98},[92,11017,2361],{"class":98},[92,11019,11020],{"class":102}," s_b ",[92,11022,148],{"class":98},[92,11024,2017],{"class":151},[92,11026,1269],{"class":102},[92,11028,11029],{"class":94,"line":1733},[92,11030,2379],{"emptyLinePlaceholder":17},[92,11032,11033,11035,11037,11040,11042,11044,11046,11048,11050,11053,11055],{"class":94,"line":1738},[92,11034,6509],{"class":102},[92,11036,1147],{"class":98},[92,11038,11039],{"class":207}," \"静态变量s_a地址为： \"",[92,11041,1423],{"class":98},[92,11043,1637],{"class":102},[92,11045,106],{"class":98},[92,11047,532],{"class":102},[92,11049,456],{"class":98},[92,11051,11052],{"class":102},"s_a ",[92,11054,1147],{"class":98},[92,11056,8820],{"class":102},[92,11058,11059,11061,11063,11066,11068,11070,11072,11074,11076,11079,11081],{"class":94,"line":1743},[92,11060,6509],{"class":102},[92,11062,1147],{"class":98},[92,11064,11065],{"class":207}," \"静态变量s_b地址为： \"",[92,11067,1423],{"class":98},[92,11069,1637],{"class":102},[92,11071,106],{"class":98},[92,11073,532],{"class":102},[92,11075,456],{"class":98},[92,11077,11078],{"class":102},"s_b ",[92,11080,1147],{"class":98},[92,11082,8820],{"class":102},[92,11084,11085],{"class":94,"line":1757},[92,11086,2379],{"emptyLinePlaceholder":17},[92,11088,11089,11091,11093,11096,11098,11100,11102,11104,11106,11108,11110],{"class":94,"line":1762},[92,11090,6509],{"class":102},[92,11092,1147],{"class":98},[92,11094,11095],{"class":207}," \"字符串常量地址为： \"",[92,11097,1423],{"class":98},[92,11099,1637],{"class":102},[92,11101,106],{"class":98},[92,11103,532],{"class":102},[92,11105,456],{"class":98},[92,11107,1165],{"class":207},[92,11109,1423],{"class":98},[92,11111,8820],{"class":102},[92,11113,11114,11116,11118,11120,11122,11124,11126,11128,11130,11133,11135],{"class":94,"line":2556},[92,11115,6509],{"class":102},[92,11117,1147],{"class":98},[92,11119,11095],{"class":207},[92,11121,1423],{"class":98},[92,11123,1637],{"class":102},[92,11125,106],{"class":98},[92,11127,532],{"class":102},[92,11129,456],{"class":98},[92,11131,11132],{"class":207},"\"hello world1\"",[92,11134,1423],{"class":98},[92,11136,8820],{"class":102},[92,11138,11139],{"class":94,"line":2570},[92,11140,2379],{"emptyLinePlaceholder":17},[92,11142,11143,11145,11147,11150,11152,11154,11156,11158,11160,11163,11165],{"class":94,"line":2578},[92,11144,6509],{"class":102},[92,11146,1147],{"class":98},[92,11148,11149],{"class":207}," \"全局常量c_g_a地址为： \"",[92,11151,1423],{"class":98},[92,11153,1637],{"class":102},[92,11155,106],{"class":98},[92,11157,532],{"class":102},[92,11159,456],{"class":98},[92,11161,11162],{"class":102},"c_g_a ",[92,11164,1147],{"class":98},[92,11166,8820],{"class":102},[92,11168,11169,11171,11173,11176,11178,11180,11182,11184,11186,11189,11191],{"class":94,"line":2583},[92,11170,6509],{"class":102},[92,11172,1147],{"class":98},[92,11174,11175],{"class":207}," \"全局常量c_g_b地址为： \"",[92,11177,1423],{"class":98},[92,11179,1637],{"class":102},[92,11181,106],{"class":98},[92,11183,532],{"class":102},[92,11185,456],{"class":98},[92,11187,11188],{"class":102},"c_g_b ",[92,11190,1147],{"class":98},[92,11192,8820],{"class":102},[92,11194,11195],{"class":94,"line":2589},[92,11196,2379],{"emptyLinePlaceholder":17},[92,11198,11199,11202,11204,11207,11209,11211],{"class":94,"line":2595},[92,11200,11201],{"class":98},"    const",[92,11203,2361],{"class":98},[92,11205,11206],{"class":102}," c_l_a ",[92,11208,148],{"class":98},[92,11210,2017],{"class":151},[92,11212,1269],{"class":102},[92,11214,11215,11217,11219,11222,11224,11226],{"class":94,"line":2600},[92,11216,11201],{"class":98},[92,11218,2361],{"class":98},[92,11220,11221],{"class":102}," c_l_b ",[92,11223,148],{"class":98},[92,11225,2017],{"class":151},[92,11227,1269],{"class":102},[92,11229,11230,11232,11234,11237,11239,11241,11243,11245,11247,11250,11252],{"class":94,"line":7928},[92,11231,6509],{"class":102},[92,11233,1147],{"class":98},[92,11235,11236],{"class":207}," \"局部常量c_l_a地址为： \"",[92,11238,1423],{"class":98},[92,11240,1637],{"class":102},[92,11242,106],{"class":98},[92,11244,532],{"class":102},[92,11246,456],{"class":98},[92,11248,11249],{"class":102},"c_l_a ",[92,11251,1147],{"class":98},[92,11253,8820],{"class":102},[92,11255,11256,11258,11260,11263,11265,11267,11269,11271,11273,11276,11278],{"class":94,"line":7952},[92,11257,6509],{"class":102},[92,11259,1147],{"class":98},[92,11261,11262],{"class":207}," \"局部常量c_l_b地址为： \"",[92,11264,1423],{"class":98},[92,11266,1637],{"class":102},[92,11268,106],{"class":98},[92,11270,532],{"class":102},[92,11272,456],{"class":98},[92,11274,11275],{"class":102},"c_l_b ",[92,11277,1147],{"class":98},[92,11279,8820],{"class":102},[92,11281,11282],{"class":94,"line":7957},[92,11283,2379],{"emptyLinePlaceholder":17},[92,11285,11286,11288,11290,11292],{"class":94,"line":7963},[92,11287,2282],{"class":1942},[92,11289,103],{"class":102},[92,11291,2287],{"class":207},[92,11293,2698],{"class":102},[92,11295,11296],{"class":94,"line":7990},[92,11297,2379],{"emptyLinePlaceholder":17},[92,11299,11300,11302,11304],{"class":94,"line":7995},[92,11301,4069],{"class":98},[92,11303,4072],{"class":151},[92,11305,1269],{"class":102},[92,11307,11308],{"class":94,"line":8001},[92,11309,1544],{"class":102},[38,11311,11312],{},"总结：",[1110,11314,11315,11318,11321,11324],{},[49,11316,11317],{},"c++中程序运行前分为全局区和代码区",[49,11319,11320],{},"代码区特点是共享和只读",[49,11322,11323],{},"全局区中存放全局变量、静态变量、常量",[49,11325,11326],{},"常量区中存放const修饰的全局常量和字符串常量",[63,11328,11330],{"id":11329},"_512程序运行后","5.1.2程序运行后",[46,11332,11333],{},[49,11334,11335],{},"栈区：",[1110,11337,11338,11345],{},[49,11339,11340,11341,11344],{},"由编译器自动分配释放, 存放",[252,11342,11343],{},"函数的参数值,局部变量","等",[49,11346,11347,11348,11351],{},"注意事项：",[252,11349,11350],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[83,11353,11355],{"className":85,"code":11354,"language":87,"meta":10,"style":10},"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",[89,11356,11357,11368,11372,11387,11399,11403,11407,11415,11420,11435,11453,11470,11480,11488],{"__ignoreMap":10},[92,11358,11359,11361,11363,11366],{"class":94,"line":95},[92,11360,106],{"class":98},[92,11362,6498],{"class":98},[92,11364,11365],{"class":1942}," func",[92,11367,1955],{"class":102},[92,11369,11370],{"class":94,"line":11},[92,11371,1525],{"class":102},[92,11373,11374,11376,11378,11380,11382,11384],{"class":94,"line":1158},[92,11375,1964],{"class":98},[92,11377,10849],{"class":102},[92,11379,148],{"class":98},[92,11381,2017],{"class":151},[92,11383,158],{"class":102},[92,11385,11386],{"class":161}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[92,11388,11389,11391,11393,11396],{"class":94,"line":1173},[92,11390,4069],{"class":98},[92,11392,10564],{"class":98},[92,11394,11395],{"class":102},"a;",[92,11397,11398],{"class":161}," \u002F\u002F放回局部变量的地址\n",[92,11400,11401],{"class":94,"line":1179},[92,11402,1544],{"class":102},[92,11404,11405],{"class":94,"line":1193},[92,11406,2379],{"emptyLinePlaceholder":17},[92,11408,11409,11411,11413],{"class":94,"line":1199},[92,11410,106],{"class":98},[92,11412,1952],{"class":1942},[92,11414,10833],{"class":102},[92,11416,11417],{"class":94,"line":1290},[92,11418,11419],{"class":161},"    \u002F\u002F接受func的返回值\n",[92,11421,11422,11424,11426,11429,11431,11433],{"class":94,"line":1296},[92,11423,1964],{"class":98},[92,11425,6498],{"class":98},[92,11427,11428],{"class":102},"p ",[92,11430,148],{"class":98},[92,11432,11365],{"class":1942},[92,11434,5616],{"class":102},[92,11436,11437,11439,11441,11443,11445,11447,11450],{"class":94,"line":1308},[92,11438,6509],{"class":102},[92,11440,1147],{"class":98},[92,11442,6498],{"class":98},[92,11444,11428],{"class":102},[92,11446,1147],{"class":98},[92,11448,11449],{"class":102}," endl;",[92,11451,11452],{"class":161}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[92,11454,11455,11457,11459,11461,11463,11465,11467],{"class":94,"line":1591},[92,11456,6509],{"class":102},[92,11458,1147],{"class":98},[92,11460,6498],{"class":98},[92,11462,11428],{"class":102},[92,11464,1147],{"class":98},[92,11466,11449],{"class":102},[92,11468,11469],{"class":161}," \u002F\u002F第二次这个数据不再保留\n",[92,11471,11472,11474,11476,11478],{"class":94,"line":1596},[92,11473,2282],{"class":1942},[92,11475,103],{"class":102},[92,11477,2287],{"class":207},[92,11479,2698],{"class":102},[92,11481,11482,11484,11486],{"class":94,"line":1602},[92,11483,4069],{"class":98},[92,11485,4072],{"class":151},[92,11487,1269],{"class":102},[92,11489,11490],{"class":94,"line":1607},[92,11491,1544],{"class":102},[38,11493,11494],{},"输出结果：",[38,11496,11497],{},[1441,11498],{"alt":11499,"src":11500},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[38,11502,11503],{},"总结：不要返回局部变量的地址",[46,11505,11506],{"start":11},[49,11507,11508],{},"堆区",[1110,11510,11511,11514],{},[49,11512,11513],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[49,11515,11516],{},"在c++中主要利用new在堆区开辟内存",[83,11518,11520],{"className":85,"code":11519,"language":87,"meta":10,"style":10},"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",[89,11521,11522,11537,11541,11546,11567,11574,11578,11586,11590,11595,11609,11621],{"__ignoreMap":10},[92,11523,11524,11526,11529,11532,11534],{"class":94,"line":95},[92,11525,106],{"class":98},[92,11527,11528],{"class":98},"  *",[92,11530,11531],{"class":1942},"func",[92,11533,2406],{"class":102},[92,11535,11536],{"class":161},"  \u002F\u002F函数返回指针\n",[92,11538,11539],{"class":94,"line":11},[92,11540,1525],{"class":102},[92,11542,11543],{"class":94,"line":1158},[92,11544,11545],{"class":161},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[92,11547,11548,11550,11552,11554,11556,11559,11561,11563,11565],{"class":94,"line":1173},[92,11549,4126],{"class":98},[92,11551,6498],{"class":98},[92,11553,38],{"class":102},[92,11555,148],{"class":98},[92,11557,11558],{"class":98}," new",[92,11560,2361],{"class":98},[92,11562,103],{"class":102},[92,11564,549],{"class":151},[92,11566,2698],{"class":102},[92,11568,11569,11571],{"class":94,"line":1179},[92,11570,4360],{"class":98},[92,11572,11573],{"class":102}," p;\n",[92,11575,11576],{"class":94,"line":1193},[92,11577,1544],{"class":102},[92,11579,11580,11582,11584],{"class":94,"line":1199},[92,11581,106],{"class":98},[92,11583,1952],{"class":1942},[92,11585,1955],{"class":102},[92,11587,11588],{"class":94,"line":1290},[92,11589,1525],{"class":102},[92,11591,11592],{"class":94,"line":1296},[92,11593,11594],{"class":161},"    \u002F\u002F在堆区开辟数据\n",[92,11596,11597,11599,11601,11603,11605,11607],{"class":94,"line":1308},[92,11598,1964],{"class":98},[92,11600,6498],{"class":98},[92,11602,38],{"class":102},[92,11604,148],{"class":98},[92,11606,11531],{"class":1942},[92,11608,5616],{"class":102},[92,11610,11611,11613,11615,11617,11619],{"class":94,"line":1591},[92,11612,1530],{"class":102},[92,11614,6399],{"class":98},[92,11616,38],{"class":102},[92,11618,1147],{"class":98},[92,11620,1170],{"class":102},[92,11622,11623],{"class":94,"line":1596},[92,11624,1544],{"class":102},[38,11626,11627],{},"图片展示：",[38,11629,11630],{},[1441,11631],{"alt":11499,"src":11632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[38,11634,11635],{},"堆区内存由程序员管生死！！！",[46,11637,11638],{"start":1158},[49,11639,11640],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[38,11642,11643],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[38,11645,11646,11647],{},"​语法：",[89,11648,11649],{}," new 数据类型",[38,11651,11652],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[83,11654,11656],{"className":85,"code":11655,"language":87,"meta":10,"style":10},"\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",[89,11657,11658,11663,11673,11677,11682,11687,11709,11713,11721,11725,11739,11751,11763,11775,11780,11785,11796,11800,11805,11813,11817,11822,11844,11870,11874,11892,11896,11922,11926,11938,11942,11947,11952,11960,11964,11968,11976,11980,11986,11992],{"__ignoreMap":10},[92,11659,11660],{"class":94,"line":95},[92,11661,11662],{"class":161},"\u002F\u002F1.new的基本语法\n",[92,11664,11665,11667,11669,11671],{"class":94,"line":11},[92,11666,106],{"class":98},[92,11668,6498],{"class":98},[92,11670,11531],{"class":1942},[92,11672,1955],{"class":102},[92,11674,11675],{"class":94,"line":1158},[92,11676,1525],{"class":102},[92,11678,11679],{"class":94,"line":1173},[92,11680,11681],{"class":161},"    \u002F\u002F在堆区创建整型数据\n",[92,11683,11684],{"class":94,"line":1179},[92,11685,11686],{"class":161},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[92,11688,11689,11691,11693,11695,11698,11700,11702,11704,11706],{"class":94,"line":1193},[92,11690,1964],{"class":98},[92,11692,6498],{"class":98},[92,11694,38],{"class":102},[92,11696,11697],{"class":98},"=new",[92,11699,2361],{"class":98},[92,11701,103],{"class":102},[92,11703,549],{"class":151},[92,11705,5946],{"class":102},[92,11707,11708],{"class":161},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[92,11710,11711],{"class":94,"line":1199},[92,11712,1544],{"class":102},[92,11714,11715,11717,11719],{"class":94,"line":1290},[92,11716,5344],{"class":98},[92,11718,5568],{"class":1942},[92,11720,1955],{"class":102},[92,11722,11723],{"class":94,"line":1296},[92,11724,1525],{"class":102},[92,11726,11727,11729,11731,11733,11735,11737],{"class":94,"line":1308},[92,11728,1964],{"class":98},[92,11730,6498],{"class":98},[92,11732,38],{"class":102},[92,11734,148],{"class":98},[92,11736,11531],{"class":1942},[92,11738,5616],{"class":102},[92,11740,11741,11743,11745,11747,11749],{"class":94,"line":1591},[92,11742,1530],{"class":102},[92,11744,6399],{"class":98},[92,11746,38],{"class":102},[92,11748,1147],{"class":98},[92,11750,1170],{"class":102},[92,11752,11753,11755,11757,11759,11761],{"class":94,"line":1596},[92,11754,1530],{"class":102},[92,11756,6399],{"class":98},[92,11758,38],{"class":102},[92,11760,1147],{"class":98},[92,11762,1170],{"class":102},[92,11764,11765,11767,11769,11771,11773],{"class":94,"line":1602},[92,11766,1530],{"class":102},[92,11768,6399],{"class":98},[92,11770,38],{"class":102},[92,11772,1147],{"class":98},[92,11774,1170],{"class":102},[92,11776,11777],{"class":94,"line":1607},[92,11778,11779],{"class":161},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[92,11781,11782],{"class":94,"line":1621},[92,11783,11784],{"class":161},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[92,11786,11787,11790,11793],{"class":94,"line":1626},[92,11788,11789],{"class":98},"    delete",[92,11791,11792],{"class":102}," p;",[92,11794,11795],{"class":161},"\u002F\u002F删除这块地址\n",[92,11797,11798],{"class":94,"line":1632},[92,11799,1544],{"class":102},[92,11801,11802],{"class":94,"line":1653},[92,11803,11804],{"class":161},"\u002F\u002F2.在堆区利用new开辟数组\n",[92,11806,11807,11809,11811],{"class":94,"line":1658},[92,11808,5344],{"class":98},[92,11810,5637],{"class":1942},[92,11812,1955],{"class":102},[92,11814,11815],{"class":94,"line":1672},[92,11816,1525],{"class":102},[92,11818,11819],{"class":94,"line":1677},[92,11820,11821],{"class":161},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[92,11823,11824,11826,11828,11830,11832,11834,11836,11838,11841],{"class":94,"line":1706},[92,11825,1964],{"class":98},[92,11827,6498],{"class":98},[92,11829,3859],{"class":102},[92,11831,11697],{"class":98},[92,11833,2361],{"class":98},[92,11835,993],{"class":102},[92,11837,549],{"class":151},[92,11839,11840],{"class":102},"];",[92,11842,11843],{"class":161},"\u002F\u002F10代表数组有10个元素\n",[92,11845,11846,11848,11850,11852,11854,11856,11858,11860,11862,11864,11866,11868],{"class":94,"line":1711},[92,11847,3180],{"class":98},[92,11849,1637],{"class":102},[92,11851,106],{"class":98},[92,11853,3011],{"class":102},[92,11855,148],{"class":98},[92,11857,294],{"class":151},[92,11859,3018],{"class":102},[92,11861,1013],{"class":98},[92,11863,549],{"class":151},[92,11865,3018],{"class":102},[92,11867,2271],{"class":98},[92,11869,109],{"class":102},[92,11871,11872],{"class":94,"line":1728},[92,11873,2009],{"class":102},[92,11875,11876,11879,11881,11883,11885,11887,11889],{"class":94,"line":1733},[92,11877,11878],{"class":102},"        arr[i]",[92,11880,148],{"class":98},[92,11882,544],{"class":102},[92,11884,584],{"class":98},[92,11886,414],{"class":151},[92,11888,158],{"class":102},[92,11890,11891],{"class":161},"\u002F\u002F给10个元素赋值100～109\n",[92,11893,11894],{"class":94,"line":1738},[92,11895,2166],{"class":102},[92,11897,11898,11900,11902,11904,11906,11908,11910,11912,11914,11916,11918,11920],{"class":94,"line":1743},[92,11899,3180],{"class":98},[92,11901,1637],{"class":102},[92,11903,106],{"class":98},[92,11905,3011],{"class":102},[92,11907,148],{"class":98},[92,11909,294],{"class":151},[92,11911,3018],{"class":102},[92,11913,1013],{"class":98},[92,11915,549],{"class":151},[92,11917,3018],{"class":102},[92,11919,2271],{"class":98},[92,11921,109],{"class":102},[92,11923,11924],{"class":94,"line":1757},[92,11925,2009],{"class":102},[92,11927,11928,11930,11932,11934,11936],{"class":94,"line":1762},[92,11929,3430],{"class":102},[92,11931,1147],{"class":98},[92,11933,4333],{"class":102},[92,11935,1147],{"class":98},[92,11937,1170],{"class":102},[92,11939,11940],{"class":94,"line":2556},[92,11941,2166],{"class":102},[92,11943,11944],{"class":94,"line":2570},[92,11945,11946],{"class":161},"    \u002F\u002F释放堆区数组\n",[92,11948,11949],{"class":94,"line":2578},[92,11950,11951],{"class":161},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[92,11953,11954,11957],{"class":94,"line":2583},[92,11955,11956],{"class":98},"    delete[]",[92,11958,11959],{"class":102}," arr;\n",[92,11961,11962],{"class":94,"line":2589},[92,11963,1544],{"class":102},[92,11965,11966],{"class":94,"line":2595},[92,11967,2379],{"emptyLinePlaceholder":17},[92,11969,11970,11972,11974],{"class":94,"line":2600},[92,11971,106],{"class":98},[92,11973,1952],{"class":1942},[92,11975,1955],{"class":102},[92,11977,11978],{"class":94,"line":7928},[92,11979,1525],{"class":102},[92,11981,11982,11984],{"class":94,"line":7952},[92,11983,5613],{"class":1942},[92,11985,5616],{"class":102},[92,11987,11988,11990],{"class":94,"line":7957},[92,11989,5682],{"class":1942},[92,11991,5616],{"class":102},[92,11993,11994],{"class":94,"line":7963},[92,11995,1544],{"class":102},[5106,11997,11998],{},"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":10,"searchDepth":11,"depth":11,"links":12000},[12001],{"id":10669,"depth":11,"text":10670,"children":12002},[12003,12004],{"id":10701,"depth":1158,"text":10702},{"id":11329,"depth":1158,"text":11330},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10661,"description":10},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12011,"title":12012,"body":12013,"description":10,"extension":14,"meta":13494,"navigation":17,"path":13495,"seo":13496,"stem":13497,"__hash__":13498},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12014,"toc":13486},[12015,12018,12022,12025,12028,12197,12201,12206,12223,12228,12380,12384,12387,12390,12784,12788,12791,12796,12799,13111,13115,13121,13281,13283,13291,13295,13298,13305,13483],[29,12016,12012],{"id":12017},"_6引用",[33,12019,12021],{"id":12020},"_61引用基本用法","6.1引用基本用法",[38,12023,12024],{},"引用的本质：给变量起别名",[38,12026,12027],{},"语法：数据类型 &别名=原名",[83,12029,12031],{"className":85,"code":12030,"language":87,"meta":10,"style":10},"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",[89,12032,12033,12041,12045,12057,12069,12073,12092,12111,12115,12126,12130,12149,12167,12171,12181,12185,12193],{"__ignoreMap":10},[92,12034,12035,12037,12039],{"class":94,"line":95},[92,12036,106],{"class":98},[92,12038,1952],{"class":1942},[92,12040,10833],{"class":102},[92,12042,12043],{"class":94,"line":11},[92,12044,2379],{"emptyLinePlaceholder":17},[92,12046,12047,12049,12051,12053,12055],{"class":94,"line":1158},[92,12048,1964],{"class":98},[92,12050,10849],{"class":102},[92,12052,148],{"class":98},[92,12054,2017],{"class":151},[92,12056,1269],{"class":102},[92,12058,12059,12061,12063,12065,12067],{"class":94,"line":1173},[92,12060,1964],{"class":98},[92,12062,10564],{"class":98},[92,12064,10925],{"class":102},[92,12066,148],{"class":98},[92,12068,1411],{"class":102},[92,12070,12071],{"class":94,"line":1179},[92,12072,2379],{"emptyLinePlaceholder":17},[92,12074,12075,12077,12079,12082,12084,12086,12088,12090],{"class":94,"line":1193},[92,12076,6509],{"class":102},[92,12078,1147],{"class":98},[92,12080,12081],{"class":207}," \"a = \"",[92,12083,1423],{"class":98},[92,12085,10849],{"class":102},[92,12087,1147],{"class":98},[92,12089,11449],{"class":102},[92,12091,7248],{"class":161},[92,12093,12094,12096,12098,12101,12103,12105,12107,12109],{"class":94,"line":1199},[92,12095,6509],{"class":102},[92,12097,1147],{"class":98},[92,12099,12100],{"class":207}," \"b = \"",[92,12102,1423],{"class":98},[92,12104,10862],{"class":102},[92,12106,1147],{"class":98},[92,12108,11449],{"class":102},[92,12110,7248],{"class":161},[92,12112,12113],{"class":94,"line":1290},[92,12114,2379],{"emptyLinePlaceholder":17},[92,12116,12117,12120,12122,12124],{"class":94,"line":1296},[92,12118,12119],{"class":102},"    b ",[92,12121,148],{"class":98},[92,12123,5734],{"class":151},[92,12125,1269],{"class":102},[92,12127,12128],{"class":94,"line":1308},[92,12129,2379],{"emptyLinePlaceholder":17},[92,12131,12132,12134,12136,12138,12140,12142,12144,12146],{"class":94,"line":1591},[92,12133,6509],{"class":102},[92,12135,1147],{"class":98},[92,12137,12081],{"class":207},[92,12139,1423],{"class":98},[92,12141,10849],{"class":102},[92,12143,1147],{"class":98},[92,12145,11449],{"class":102},[92,12147,12148],{"class":161},"\u002F\u002F100\n",[92,12150,12151,12153,12155,12157,12159,12161,12163,12165],{"class":94,"line":1596},[92,12152,6509],{"class":102},[92,12154,1147],{"class":98},[92,12156,12100],{"class":207},[92,12158,1423],{"class":98},[92,12160,10862],{"class":102},[92,12162,1147],{"class":98},[92,12164,11449],{"class":102},[92,12166,12148],{"class":161},[92,12168,12169],{"class":94,"line":1602},[92,12170,2379],{"emptyLinePlaceholder":17},[92,12172,12173,12175,12177,12179],{"class":94,"line":1607},[92,12174,2282],{"class":1942},[92,12176,103],{"class":102},[92,12178,2287],{"class":207},[92,12180,2698],{"class":102},[92,12182,12183],{"class":94,"line":1621},[92,12184,2379],{"emptyLinePlaceholder":17},[92,12186,12187,12189,12191],{"class":94,"line":1626},[92,12188,4069],{"class":98},[92,12190,4072],{"class":151},[92,12192,1269],{"class":102},[92,12194,12195],{"class":94,"line":1632},[92,12196,1544],{"class":102},[33,12198,12200],{"id":12199},"_62引用的注意事项","6.2引用的注意事项",[46,12202,12203],{},[49,12204,12205],{},"引用必须要初始化",[83,12207,12209],{"className":85,"code":12208,"language":87,"meta":10,"style":10},"int &b;\u002F\u002F非常错误！\n",[89,12210,12211],{"__ignoreMap":10},[92,12212,12213,12215,12217,12220],{"class":94,"line":95},[92,12214,106],{"class":98},[92,12216,10564],{"class":98},[92,12218,12219],{"class":102},"b;",[92,12221,12222],{"class":161},"\u002F\u002F非常错误！\n",[46,12224,12225],{"start":11},[49,12226,12227],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[83,12229,12231],{"className":85,"code":12230,"language":87,"meta":10,"style":10},"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",[89,12232,12233,12241,12253,12265,12273,12289,12302,12320,12338,12358,12368,12376],{"__ignoreMap":10},[92,12234,12235,12237,12239],{"class":94,"line":95},[92,12236,106],{"class":98},[92,12238,1952],{"class":1942},[92,12240,10833],{"class":102},[92,12242,12243,12245,12247,12249,12251],{"class":94,"line":11},[92,12244,1964],{"class":98},[92,12246,10849],{"class":102},[92,12248,148],{"class":98},[92,12250,2017],{"class":151},[92,12252,1269],{"class":102},[92,12254,12255,12257,12259,12261,12263],{"class":94,"line":1158},[92,12256,1964],{"class":98},[92,12258,10862],{"class":102},[92,12260,148],{"class":98},[92,12262,8930],{"class":151},[92,12264,1269],{"class":102},[92,12266,12267,12270],{"class":94,"line":1173},[92,12268,12269],{"class":161},"    \u002F\u002Fint &c;",[92,12271,12272],{"class":161}," \u002F\u002F错误，引用必须初始化\n",[92,12274,12275,12277,12279,12281,12283,12286],{"class":94,"line":1179},[92,12276,1964],{"class":98},[92,12278,10564],{"class":98},[92,12280,2925],{"class":102},[92,12282,148],{"class":98},[92,12284,12285],{"class":102}," a;",[92,12287,12288],{"class":161}," \u002F\u002F一旦初始化后，就不可以更改\n",[92,12290,12291,12294,12296,12299],{"class":94,"line":1193},[92,12292,12293],{"class":102},"    c ",[92,12295,148],{"class":98},[92,12297,12298],{"class":102}," b;",[92,12300,12301],{"class":161}," \u002F\u002F这是赋值操作，不是更改引用\n",[92,12303,12304,12306,12308,12310,12312,12314,12316,12318],{"class":94,"line":1199},[92,12305,6509],{"class":102},[92,12307,1147],{"class":98},[92,12309,12081],{"class":207},[92,12311,1423],{"class":98},[92,12313,10849],{"class":102},[92,12315,1147],{"class":98},[92,12317,11449],{"class":102},[92,12319,7233],{"class":161},[92,12321,12322,12324,12326,12328,12330,12332,12334,12336],{"class":94,"line":1290},[92,12323,6509],{"class":102},[92,12325,1147],{"class":98},[92,12327,12100],{"class":207},[92,12329,1423],{"class":98},[92,12331,10862],{"class":102},[92,12333,1147],{"class":98},[92,12335,11449],{"class":102},[92,12337,7233],{"class":161},[92,12339,12340,12342,12344,12347,12349,12352,12354,12356],{"class":94,"line":1296},[92,12341,6509],{"class":102},[92,12343,1147],{"class":98},[92,12345,12346],{"class":207}," \"c = \"",[92,12348,1423],{"class":98},[92,12350,12351],{"class":102}," c ",[92,12353,1147],{"class":98},[92,12355,11449],{"class":102},[92,12357,7233],{"class":161},[92,12359,12360,12362,12364,12366],{"class":94,"line":1308},[92,12361,2282],{"class":1942},[92,12363,103],{"class":102},[92,12365,2287],{"class":207},[92,12367,2698],{"class":102},[92,12369,12370,12372,12374],{"class":94,"line":1591},[92,12371,4069],{"class":98},[92,12373,4072],{"class":151},[92,12375,1269],{"class":102},[92,12377,12378],{"class":94,"line":1596},[92,12379,1544],{"class":102},[33,12381,12383],{"id":12382},"_63引用做函数参数","6.3引用做函数参数",[38,12385,12386],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[38,12388,12389],{},"优点：可以简化指针修改实参",[83,12391,12393],{"className":85,"code":12392,"language":87,"meta":10,"style":10},"\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",[89,12394,12395,12400,12423,12434,12444,12453,12457,12461,12466,12488,12500,12512,12522,12526,12530,12535,12557,12567,12575,12583,12587,12591,12599,12603,12615,12627,12631,12642,12668,12672,12692,12716,12720,12730,12754,12758,12768,12772,12780],{"__ignoreMap":10},[92,12396,12397],{"class":94,"line":95},[92,12398,12399],{"class":161},"\u002F\u002F1. 值传递\n",[92,12401,12402,12404,12407,12409,12411,12413,12416,12418,12420],{"class":94,"line":11},[92,12403,5344],{"class":98},[92,12405,12406],{"class":1942}," mySwap01",[92,12408,103],{"class":102},[92,12410,106],{"class":98},[92,12412,1377],{"class":5196},[92,12414,12415],{"class":102},", ",[92,12417,106],{"class":98},[92,12419,2812],{"class":5196},[92,12421,12422],{"class":102},") {\n",[92,12424,12425,12427,12430,12432],{"class":94,"line":1158},[92,12426,1964],{"class":98},[92,12428,12429],{"class":102}," temp ",[92,12431,148],{"class":98},[92,12433,1411],{"class":102},[92,12435,12436,12439,12441],{"class":94,"line":1173},[92,12437,12438],{"class":102},"    a ",[92,12440,148],{"class":98},[92,12442,12443],{"class":102}," b;\n",[92,12445,12446,12448,12450],{"class":94,"line":1179},[92,12447,12119],{"class":102},[92,12449,148],{"class":98},[92,12451,12452],{"class":102}," temp;\n",[92,12454,12455],{"class":94,"line":1193},[92,12456,1544],{"class":102},[92,12458,12459],{"class":94,"line":1199},[92,12460,2379],{"emptyLinePlaceholder":17},[92,12462,12463],{"class":94,"line":1290},[92,12464,12465],{"class":161},"\u002F\u002F2. 地址传递\n",[92,12467,12468,12470,12473,12475,12478,12480,12482,12484,12486],{"class":94,"line":1296},[92,12469,5344],{"class":98},[92,12471,12472],{"class":1942}," mySwap02",[92,12474,103],{"class":102},[92,12476,12477],{"class":98},"int*",[92,12479,1377],{"class":5196},[92,12481,12415],{"class":102},[92,12483,12477],{"class":98},[92,12485,2812],{"class":5196},[92,12487,12422],{"class":102},[92,12489,12490,12492,12494,12496,12498],{"class":94,"line":1308},[92,12491,1964],{"class":98},[92,12493,12429],{"class":102},[92,12495,148],{"class":98},[92,12497,6498],{"class":98},[92,12499,6177],{"class":102},[92,12501,12502,12504,12506,12508,12510],{"class":94,"line":1591},[92,12503,6383],{"class":98},[92,12505,10899],{"class":102},[92,12507,148],{"class":98},[92,12509,6498],{"class":98},[92,12511,6049],{"class":102},[92,12513,12514,12516,12518,12520],{"class":94,"line":1596},[92,12515,6383],{"class":98},[92,12517,10925],{"class":102},[92,12519,148],{"class":98},[92,12521,12452],{"class":102},[92,12523,12524],{"class":94,"line":1602},[92,12525,1544],{"class":102},[92,12527,12528],{"class":94,"line":1607},[92,12529,2379],{"emptyLinePlaceholder":17},[92,12531,12532],{"class":94,"line":1621},[92,12533,12534],{"class":161},"\u002F\u002F3. 引用传递\n",[92,12536,12537,12539,12542,12544,12547,12549,12551,12553,12555],{"class":94,"line":1626},[92,12538,5344],{"class":98},[92,12540,12541],{"class":1942}," mySwap03",[92,12543,103],{"class":102},[92,12545,12546],{"class":98},"int&",[92,12548,1377],{"class":5196},[92,12550,12415],{"class":102},[92,12552,12546],{"class":98},[92,12554,2812],{"class":5196},[92,12556,12422],{"class":102},[92,12558,12559,12561,12563,12565],{"class":94,"line":1632},[92,12560,1964],{"class":98},[92,12562,12429],{"class":102},[92,12564,148],{"class":98},[92,12566,1411],{"class":102},[92,12568,12569,12571,12573],{"class":94,"line":1653},[92,12570,12438],{"class":102},[92,12572,148],{"class":98},[92,12574,12443],{"class":102},[92,12576,12577,12579,12581],{"class":94,"line":1658},[92,12578,12119],{"class":102},[92,12580,148],{"class":98},[92,12582,12452],{"class":102},[92,12584,12585],{"class":94,"line":1672},[92,12586,1544],{"class":102},[92,12588,12589],{"class":94,"line":1677},[92,12590,2379],{"emptyLinePlaceholder":17},[92,12592,12593,12595,12597],{"class":94,"line":1706},[92,12594,106],{"class":98},[92,12596,1952],{"class":1942},[92,12598,10833],{"class":102},[92,12600,12601],{"class":94,"line":1711},[92,12602,2379],{"emptyLinePlaceholder":17},[92,12604,12605,12607,12609,12611,12613],{"class":94,"line":1728},[92,12606,1964],{"class":98},[92,12608,10849],{"class":102},[92,12610,148],{"class":98},[92,12612,2017],{"class":151},[92,12614,1269],{"class":102},[92,12616,12617,12619,12621,12623,12625],{"class":94,"line":1733},[92,12618,1964],{"class":98},[92,12620,10862],{"class":102},[92,12622,148],{"class":98},[92,12624,8930],{"class":151},[92,12626,1269],{"class":102},[92,12628,12629],{"class":94,"line":1738},[92,12630,2379],{"emptyLinePlaceholder":17},[92,12632,12633,12636,12639],{"class":94,"line":1743},[92,12634,12635],{"class":1942},"    mySwap01",[92,12637,12638],{"class":102},"(a, b);",[92,12640,12641],{"class":161},"\u002F\u002F值传递，形参不会修饰实参\n",[92,12643,12644,12646,12648,12651,12653,12655,12657,12660,12662,12664,12666],{"class":94,"line":1757},[92,12645,6509],{"class":102},[92,12647,1147],{"class":98},[92,12649,12650],{"class":207}," \"a:\"",[92,12652,1423],{"class":98},[92,12654,10849],{"class":102},[92,12656,1147],{"class":98},[92,12658,12659],{"class":207}," \" b:\"",[92,12661,1423],{"class":98},[92,12663,10862],{"class":102},[92,12665,1147],{"class":98},[92,12667,8820],{"class":102},[92,12669,12670],{"class":94,"line":1762},[92,12671,2379],{"emptyLinePlaceholder":17},[92,12673,12674,12677,12679,12681,12684,12686,12689],{"class":94,"line":2556},[92,12675,12676],{"class":1942},"    mySwap02",[92,12678,103],{"class":102},[92,12680,456],{"class":98},[92,12682,12683],{"class":102},"a, ",[92,12685,456],{"class":98},[92,12687,12688],{"class":102},"b);",[92,12690,12691],{"class":161},"\u002F\u002F地址传递，形参会修饰实参\n",[92,12693,12694,12696,12698,12700,12702,12704,12706,12708,12710,12712,12714],{"class":94,"line":2570},[92,12695,6509],{"class":102},[92,12697,1147],{"class":98},[92,12699,12650],{"class":207},[92,12701,1423],{"class":98},[92,12703,10849],{"class":102},[92,12705,1147],{"class":98},[92,12707,12659],{"class":207},[92,12709,1423],{"class":98},[92,12711,10862],{"class":102},[92,12713,1147],{"class":98},[92,12715,8820],{"class":102},[92,12717,12718],{"class":94,"line":2578},[92,12719,2379],{"emptyLinePlaceholder":17},[92,12721,12722,12725,12727],{"class":94,"line":2583},[92,12723,12724],{"class":1942},"    mySwap03",[92,12726,12638],{"class":102},[92,12728,12729],{"class":161},"\u002F\u002F引用传递，形参会修饰实参\n",[92,12731,12732,12734,12736,12738,12740,12742,12744,12746,12748,12750,12752],{"class":94,"line":2589},[92,12733,6509],{"class":102},[92,12735,1147],{"class":98},[92,12737,12650],{"class":207},[92,12739,1423],{"class":98},[92,12741,10849],{"class":102},[92,12743,1147],{"class":98},[92,12745,12659],{"class":207},[92,12747,1423],{"class":98},[92,12749,10862],{"class":102},[92,12751,1147],{"class":98},[92,12753,8820],{"class":102},[92,12755,12756],{"class":94,"line":2595},[92,12757,2379],{"emptyLinePlaceholder":17},[92,12759,12760,12762,12764,12766],{"class":94,"line":2600},[92,12761,2282],{"class":1942},[92,12763,103],{"class":102},[92,12765,2287],{"class":207},[92,12767,2698],{"class":102},[92,12769,12770],{"class":94,"line":7928},[92,12771,2379],{"emptyLinePlaceholder":17},[92,12773,12774,12776,12778],{"class":94,"line":7952},[92,12775,4069],{"class":98},[92,12777,4072],{"class":151},[92,12779,1269],{"class":102},[92,12781,12782],{"class":94,"line":7957},[92,12783,1544],{"class":102},[33,12785,12787],{"id":12786},"_64引用做函数的返回值","6.4引用做函数的返回值",[38,12789,12790],{},"作用：引用是可以作为函数的返回值存在的",[38,12792,9005,12793],{},[252,12794,12795],{},"不要返回局部变量引用",[38,12797,12798],{},"用法：函数调用作为左值",[83,12800,12802],{"className":9921,"code":12801,"language":9923,"meta":10,"style":10},"\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",[89,12803,12804,12809,12817,12832,12838,12842,12846,12851,12859,12876,12882,12886,12890,12898,12902,12907,12921,12941,12960,12964,12969,12982,13002,13020,13024,13040,13044,13063,13081,13085,13095,13099,13107],{"__ignoreMap":10},[92,12805,12806],{"class":94,"line":95},[92,12807,12808],{"class":161},"\u002F\u002F返回局部变量引用\n",[92,12810,12811,12813,12815],{"class":94,"line":11},[92,12812,12546],{"class":98},[92,12814,5568],{"class":1942},[92,12816,10833],{"class":102},[92,12818,12819,12821,12823,12825,12827,12829],{"class":94,"line":1158},[92,12820,1964],{"class":98},[92,12822,10849],{"class":102},[92,12824,148],{"class":98},[92,12826,2017],{"class":151},[92,12828,158],{"class":102},[92,12830,12831],{"class":161}," \u002F\u002F局部变量\n",[92,12833,12834,12836],{"class":94,"line":1173},[92,12835,4069],{"class":98},[92,12837,1411],{"class":102},[92,12839,12840],{"class":94,"line":1179},[92,12841,1544],{"class":102},[92,12843,12844],{"class":94,"line":1193},[92,12845,2379],{"emptyLinePlaceholder":17},[92,12847,12848],{"class":94,"line":1199},[92,12849,12850],{"class":161},"\u002F\u002F返回静态变量引用\n",[92,12852,12853,12855,12857],{"class":94,"line":1290},[92,12854,12546],{"class":98},[92,12856,5637],{"class":1942},[92,12858,10833],{"class":102},[92,12860,12861,12863,12865,12867,12869,12871,12873],{"class":94,"line":1296},[92,12862,11000],{"class":98},[92,12864,2361],{"class":98},[92,12866,10849],{"class":102},[92,12868,148],{"class":98},[92,12870,8930],{"class":151},[92,12872,158],{"class":102},[92,12874,12875],{"class":161},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[92,12877,12878,12880],{"class":94,"line":1308},[92,12879,4069],{"class":98},[92,12881,1411],{"class":102},[92,12883,12884],{"class":94,"line":1591},[92,12885,1544],{"class":102},[92,12887,12888],{"class":94,"line":1596},[92,12889,2379],{"emptyLinePlaceholder":17},[92,12891,12892,12894,12896],{"class":94,"line":1602},[92,12893,106],{"class":98},[92,12895,1952],{"class":1942},[92,12897,10833],{"class":102},[92,12899,12900],{"class":94,"line":1607},[92,12901,2379],{"emptyLinePlaceholder":17},[92,12903,12904],{"class":94,"line":1621},[92,12905,12906],{"class":161},"    \u002F\u002F不能返回局部变量的引用\n",[92,12908,12909,12912,12915,12917,12919],{"class":94,"line":1626},[92,12910,12911],{"class":98},"    int&",[92,12913,12914],{"class":102}," ref ",[92,12916,148],{"class":98},[92,12918,5568],{"class":1942},[92,12920,5616],{"class":102},[92,12922,12923,12925,12927,12930,12932,12934,12936,12938],{"class":94,"line":1632},[92,12924,6509],{"class":102},[92,12926,1147],{"class":98},[92,12928,12929],{"class":207}," \"ref = \"",[92,12931,1423],{"class":98},[92,12933,12914],{"class":102},[92,12935,1147],{"class":98},[92,12937,11449],{"class":102},[92,12939,12940],{"class":161},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[92,12942,12943,12945,12947,12949,12951,12953,12955,12957],{"class":94,"line":1653},[92,12944,6509],{"class":102},[92,12946,1147],{"class":98},[92,12948,12929],{"class":207},[92,12950,1423],{"class":98},[92,12952,12914],{"class":102},[92,12954,1147],{"class":98},[92,12956,11449],{"class":102},[92,12958,12959],{"class":161},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[92,12961,12962],{"class":94,"line":1658},[92,12963,2379],{"emptyLinePlaceholder":17},[92,12965,12966],{"class":94,"line":1672},[92,12967,12968],{"class":161},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[92,12970,12971,12973,12976,12978,12980],{"class":94,"line":1677},[92,12972,12911],{"class":98},[92,12974,12975],{"class":102}," ref2 ",[92,12977,148],{"class":98},[92,12979,5637],{"class":1942},[92,12981,5616],{"class":102},[92,12983,12984,12986,12988,12991,12993,12995,12997,12999],{"class":94,"line":1706},[92,12985,6509],{"class":102},[92,12987,1147],{"class":98},[92,12989,12990],{"class":207}," \"ref2 = \"",[92,12992,1423],{"class":98},[92,12994,12975],{"class":102},[92,12996,1147],{"class":98},[92,12998,11449],{"class":102},[92,13000,13001],{"class":161}," \u002F\u002F20\n",[92,13003,13004,13006,13008,13010,13012,13014,13016,13018],{"class":94,"line":1711},[92,13005,6509],{"class":102},[92,13007,1147],{"class":98},[92,13009,12990],{"class":207},[92,13011,1423],{"class":98},[92,13013,12975],{"class":102},[92,13015,1147],{"class":98},[92,13017,11449],{"class":102},[92,13019,13001],{"class":161},[92,13021,13022],{"class":94,"line":1728},[92,13023,2379],{"emptyLinePlaceholder":17},[92,13025,13026,13028,13031,13033,13035,13037],{"class":94,"line":1733},[92,13027,5682],{"class":1942},[92,13029,13030],{"class":102},"() ",[92,13032,148],{"class":98},[92,13034,2978],{"class":151},[92,13036,158],{"class":102},[92,13038,13039],{"class":161},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[92,13041,13042],{"class":94,"line":1738},[92,13043,2379],{"emptyLinePlaceholder":17},[92,13045,13046,13048,13050,13052,13054,13056,13058,13060],{"class":94,"line":1743},[92,13047,6509],{"class":102},[92,13049,1147],{"class":98},[92,13051,12990],{"class":207},[92,13053,1423],{"class":98},[92,13055,12975],{"class":102},[92,13057,1147],{"class":98},[92,13059,11449],{"class":102},[92,13061,13062],{"class":161}," \u002F\u002F1000\n",[92,13064,13065,13067,13069,13071,13073,13075,13077,13079],{"class":94,"line":1757},[92,13066,6509],{"class":102},[92,13068,1147],{"class":98},[92,13070,12990],{"class":207},[92,13072,1423],{"class":98},[92,13074,12975],{"class":102},[92,13076,1147],{"class":98},[92,13078,11449],{"class":102},[92,13080,13062],{"class":161},[92,13082,13083],{"class":94,"line":1762},[92,13084,2379],{"emptyLinePlaceholder":17},[92,13086,13087,13089,13091,13093],{"class":94,"line":2556},[92,13088,2282],{"class":1942},[92,13090,103],{"class":102},[92,13092,2287],{"class":207},[92,13094,2698],{"class":102},[92,13096,13097],{"class":94,"line":2570},[92,13098,2379],{"emptyLinePlaceholder":17},[92,13100,13101,13103,13105],{"class":94,"line":2578},[92,13102,4069],{"class":98},[92,13104,4072],{"class":151},[92,13106,1269],{"class":102},[92,13108,13109],{"class":94,"line":2583},[92,13110,1544],{"class":102},[33,13112,13114],{"id":13113},"_65引用的本质","6.5引用的本质",[38,13116,13117,13118],{},"本质：",[252,13119,13120],{},"引用的本质在c++内部实现是一个指针常量.",[83,13122,13124],{"className":85,"code":13123,"language":87,"meta":10,"style":10},"\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",[89,13125,13126,13131,13147,13161,13165,13174,13186,13191,13196,13207,13220,13224,13240,13257,13261,13269,13277],{"__ignoreMap":10},[92,13127,13128],{"class":94,"line":95},[92,13129,13130],{"class":161},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[92,13132,13133,13135,13137,13139,13141,13144],{"class":94,"line":11},[92,13134,5344],{"class":98},[92,13136,11365],{"class":1942},[92,13138,103],{"class":102},[92,13140,12546],{"class":98},[92,13142,13143],{"class":5196}," ref",[92,13145,13146],{"class":102},"){\n",[92,13148,13149,13152,13154,13156,13158],{"class":94,"line":1158},[92,13150,13151],{"class":102},"    ref ",[92,13153,148],{"class":98},[92,13155,5734],{"class":151},[92,13157,158],{"class":102},[92,13159,13160],{"class":161}," \u002F\u002F ref是引用，转换为*ref = 100\n",[92,13162,13163],{"class":94,"line":1173},[92,13164,1544],{"class":102},[92,13166,13167,13169,13171],{"class":94,"line":1179},[92,13168,106],{"class":98},[92,13170,1952],{"class":1942},[92,13172,13173],{"class":102},"(){\n",[92,13175,13176,13178,13180,13182,13184],{"class":94,"line":1193},[92,13177,1964],{"class":98},[92,13179,10849],{"class":102},[92,13181,148],{"class":98},[92,13183,2017],{"class":151},[92,13185,1269],{"class":102},[92,13187,13188],{"class":94,"line":1199},[92,13189,13190],{"class":102},"    \n",[92,13192,13193],{"class":94,"line":1290},[92,13194,13195],{"class":161},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[92,13197,13198,13200,13202,13204],{"class":94,"line":1296},[92,13199,12911],{"class":98},[92,13201,12914],{"class":102},[92,13203,148],{"class":98},[92,13205,13206],{"class":102}," a; \n",[92,13208,13209,13211,13213,13215,13217],{"class":94,"line":1308},[92,13210,13151],{"class":102},[92,13212,148],{"class":98},[92,13214,8930],{"class":151},[92,13216,158],{"class":102},[92,13218,13219],{"class":161}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[92,13221,13222],{"class":94,"line":1591},[92,13223,13190],{"class":102},[92,13225,13226,13228,13230,13232,13234,13236,13238],{"class":94,"line":1596},[92,13227,6509],{"class":102},[92,13229,1147],{"class":98},[92,13231,12650],{"class":207},[92,13233,1423],{"class":98},[92,13235,10849],{"class":102},[92,13237,1147],{"class":98},[92,13239,8820],{"class":102},[92,13241,13242,13244,13246,13249,13251,13253,13255],{"class":94,"line":1602},[92,13243,6509],{"class":102},[92,13245,1147],{"class":98},[92,13247,13248],{"class":207}," \"ref:\"",[92,13250,1423],{"class":98},[92,13252,12914],{"class":102},[92,13254,1147],{"class":98},[92,13256,8820],{"class":102},[92,13258,13259],{"class":94,"line":1607},[92,13260,13190],{"class":102},[92,13262,13263,13266],{"class":94,"line":1621},[92,13264,13265],{"class":1942},"    func",[92,13267,13268],{"class":102},"(a);\n",[92,13270,13271,13273,13275],{"class":94,"line":1626},[92,13272,4069],{"class":98},[92,13274,4072],{"class":151},[92,13276,1269],{"class":102},[92,13278,13279],{"class":94,"line":1632},[92,13280,1544],{"class":102},[38,13282,11312],{},[46,13284,13285,13288],{},[49,13286,13287],{},"引用的本质，就是一个指针常量",[49,13289,13290],{},"引用一旦初始化，就不可以发生改变",[33,13292,13294],{"id":13293},"_66常量引用","6.6常量引用",[38,13296,13297],{},"作用：常量引用主要用来修饰形参",[38,13299,13300,13301,13304],{},"在函数形参列表中，可以加",[252,13302,13303],{},"const修饰形参","，防止形参改变实参",[83,13306,13308],{"className":85,"code":13307,"language":87,"meta":10,"style":10},"\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",[89,13309,13310,13315,13320,13339,13344,13357,13361,13365,13373,13377,13382,13387,13401,13405,13413,13425,13429,13434,13446,13453,13457,13467,13471,13479],{"__ignoreMap":10},[92,13311,13312],{"class":94,"line":95},[92,13313,13314],{"class":161},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[92,13316,13317],{"class":94,"line":11},[92,13318,13319],{"class":161},"\u002F\u002F加上const就不能修改实参的\n",[92,13321,13322,13324,13327,13329,13331,13334,13337],{"class":94,"line":1158},[92,13323,5344],{"class":98},[92,13325,13326],{"class":1942}," showValue",[92,13328,103],{"class":102},[92,13330,6772],{"class":98},[92,13332,13333],{"class":98}," int&",[92,13335,13336],{"class":5196}," v",[92,13338,12422],{"class":102},[92,13340,13341],{"class":94,"line":1173},[92,13342,13343],{"class":161},"    \u002F\u002Fv += 100;\n",[92,13345,13346,13348,13350,13353,13355],{"class":94,"line":1179},[92,13347,6509],{"class":102},[92,13349,1147],{"class":98},[92,13351,13352],{"class":102}," v ",[92,13354,1147],{"class":98},[92,13356,8820],{"class":102},[92,13358,13359],{"class":94,"line":1193},[92,13360,1544],{"class":102},[92,13362,13363],{"class":94,"line":1199},[92,13364,2379],{"emptyLinePlaceholder":17},[92,13366,13367,13369,13371],{"class":94,"line":1290},[92,13368,106],{"class":98},[92,13370,1952],{"class":1942},[92,13372,10833],{"class":102},[92,13374,13375],{"class":94,"line":1296},[92,13376,2379],{"emptyLinePlaceholder":17},[92,13378,13379],{"class":94,"line":1308},[92,13380,13381],{"class":161},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[92,13383,13384],{"class":94,"line":1591},[92,13385,13386],{"class":161},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[92,13388,13389,13391,13393,13395,13397,13399],{"class":94,"line":1596},[92,13390,11201],{"class":98},[92,13392,13333],{"class":98},[92,13394,12914],{"class":102},[92,13396,148],{"class":98},[92,13398,2017],{"class":151},[92,13400,1269],{"class":102},[92,13402,13403],{"class":94,"line":1602},[92,13404,2379],{"emptyLinePlaceholder":17},[92,13406,13407,13410],{"class":94,"line":1607},[92,13408,13409],{"class":161},"    \u002F\u002Fref = 100;",[92,13411,13412],{"class":161},"  \u002F\u002F加入const后不可以修改变量\n",[92,13414,13415,13417,13419,13421,13423],{"class":94,"line":1621},[92,13416,6509],{"class":102},[92,13418,1147],{"class":98},[92,13420,12914],{"class":102},[92,13422,1147],{"class":98},[92,13424,8820],{"class":102},[92,13426,13427],{"class":94,"line":1626},[92,13428,2379],{"emptyLinePlaceholder":17},[92,13430,13431],{"class":94,"line":1632},[92,13432,13433],{"class":161},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[92,13435,13436,13438,13440,13442,13444],{"class":94,"line":1653},[92,13437,1964],{"class":98},[92,13439,10849],{"class":102},[92,13441,148],{"class":98},[92,13443,2017],{"class":151},[92,13445,1269],{"class":102},[92,13447,13448,13451],{"class":94,"line":1658},[92,13449,13450],{"class":1942},"    showValue",[92,13452,13268],{"class":102},[92,13454,13455],{"class":94,"line":1672},[92,13456,2379],{"emptyLinePlaceholder":17},[92,13458,13459,13461,13463,13465],{"class":94,"line":1677},[92,13460,2282],{"class":1942},[92,13462,103],{"class":102},[92,13464,2287],{"class":207},[92,13466,2698],{"class":102},[92,13468,13469],{"class":94,"line":1706},[92,13470,2379],{"emptyLinePlaceholder":17},[92,13472,13473,13475,13477],{"class":94,"line":1711},[92,13474,4069],{"class":98},[92,13476,4072],{"class":151},[92,13478,1269],{"class":102},[92,13480,13481],{"class":94,"line":1728},[92,13482,1544],{"class":102},[5106,13484,13485],{},"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":10,"searchDepth":11,"depth":11,"links":13487},[13488,13489,13490,13491,13492,13493],{"id":12020,"depth":11,"text":12021},{"id":12199,"depth":11,"text":12200},{"id":12382,"depth":11,"text":12383},{"id":12786,"depth":11,"text":12787},{"id":13113,"depth":11,"text":13114},{"id":13293,"depth":11,"text":13294},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12012,"description":10},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13500,"title":13501,"body":13502,"description":10,"extension":14,"meta":14583,"navigation":17,"path":14584,"seo":14585,"stem":14586,"__hash__":14587},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13503,"toc":14575},[13504,13507,13511,13514,13519,13751,13753,13764,13768,13771,13779,13883,13886,13890,13893,13897,13900,13905,13927,13933,14260,14263,14267,14275,14572],[29,13505,13501],{"id":13506},"_7函数高级部分",[33,13508,13510],{"id":13509},"_71函数默认参数","7.1函数默认参数",[38,13512,13513],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[38,13515,5161,13516],{},[89,13517,13518],{}," 返回值类型  函数名 （参数= 默认值）{}",[83,13520,13522],{"className":85,"code":13521,"language":87,"meta":10,"style":10},"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",[89,13523,13524,13559,13574,13578,13582,13587,13592,13621,13641,13651,13655,13659,13667,13671,13699,13721,13725,13735,13739,13747],{"__ignoreMap":10},[92,13525,13526,13528,13530,13532,13534,13536,13538,13540,13542,13545,13547,13549,13551,13553,13555,13557],{"class":94,"line":95},[92,13527,106],{"class":98},[92,13529,11365],{"class":1942},[92,13531,103],{"class":102},[92,13533,106],{"class":98},[92,13535,1377],{"class":5196},[92,13537,12415],{"class":102},[92,13539,106],{"class":98},[92,13541,2812],{"class":5196},[92,13543,13544],{"class":98}," =",[92,13546,2017],{"class":151},[92,13548,12415],{"class":102},[92,13550,106],{"class":98},[92,13552,2828],{"class":5196},[92,13554,13544],{"class":98},[92,13556,2017],{"class":151},[92,13558,12422],{"class":102},[92,13560,13561,13563,13565,13567,13569,13571],{"class":94,"line":11},[92,13562,4069],{"class":98},[92,13564,10849],{"class":102},[92,13566,584],{"class":98},[92,13568,10862],{"class":102},[92,13570,584],{"class":98},[92,13572,13573],{"class":102}," c;\n",[92,13575,13576],{"class":94,"line":1158},[92,13577,1544],{"class":102},[92,13579,13580],{"class":94,"line":1173},[92,13581,2379],{"emptyLinePlaceholder":17},[92,13583,13584],{"class":94,"line":1179},[92,13585,13586],{"class":161},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[92,13588,13589],{"class":94,"line":1193},[92,13590,13591],{"class":161},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[92,13593,13594,13596,13599,13601,13603,13605,13607,13609,13611,13613,13615,13617,13619],{"class":94,"line":1199},[92,13595,106],{"class":98},[92,13597,13598],{"class":1942}," func2",[92,13600,103],{"class":102},[92,13602,106],{"class":98},[92,13604,1377],{"class":5196},[92,13606,13544],{"class":98},[92,13608,2017],{"class":151},[92,13610,12415],{"class":102},[92,13612,106],{"class":98},[92,13614,2812],{"class":5196},[92,13616,13544],{"class":98},[92,13618,2017],{"class":151},[92,13620,2698],{"class":102},[92,13622,13623,13625,13627,13629,13631,13633,13635,13637,13639],{"class":94,"line":1290},[92,13624,106],{"class":98},[92,13626,13598],{"class":1942},[92,13628,103],{"class":102},[92,13630,106],{"class":98},[92,13632,1377],{"class":5196},[92,13634,12415],{"class":102},[92,13636,106],{"class":98},[92,13638,2812],{"class":5196},[92,13640,12422],{"class":102},[92,13642,13643,13645,13647,13649],{"class":94,"line":1296},[92,13644,4069],{"class":98},[92,13646,10849],{"class":102},[92,13648,584],{"class":98},[92,13650,12443],{"class":102},[92,13652,13653],{"class":94,"line":1308},[92,13654,1544],{"class":102},[92,13656,13657],{"class":94,"line":1591},[92,13658,2379],{"emptyLinePlaceholder":17},[92,13660,13661,13663,13665],{"class":94,"line":1596},[92,13662,106],{"class":98},[92,13664,1952],{"class":1942},[92,13666,10833],{"class":102},[92,13668,13669],{"class":94,"line":1602},[92,13670,2379],{"emptyLinePlaceholder":17},[92,13672,13673,13675,13677,13680,13682,13684,13686,13688,13690,13692,13695,13697],{"class":94,"line":1607},[92,13674,6509],{"class":102},[92,13676,1147],{"class":98},[92,13678,13679],{"class":207}," \"ret = \"",[92,13681,1423],{"class":98},[92,13683,11365],{"class":1942},[92,13685,103],{"class":102},[92,13687,803],{"class":151},[92,13689,12415],{"class":102},[92,13691,803],{"class":151},[92,13693,13694],{"class":102},") ",[92,13696,1147],{"class":98},[92,13698,8820],{"class":102},[92,13700,13701,13703,13705,13707,13709,13711,13713,13715,13717,13719],{"class":94,"line":1621},[92,13702,6509],{"class":102},[92,13704,1147],{"class":98},[92,13706,13679],{"class":207},[92,13708,1423],{"class":98},[92,13710,11365],{"class":1942},[92,13712,103],{"class":102},[92,13714,414],{"class":151},[92,13716,13694],{"class":102},[92,13718,1147],{"class":98},[92,13720,8820],{"class":102},[92,13722,13723],{"class":94,"line":1626},[92,13724,2379],{"emptyLinePlaceholder":17},[92,13726,13727,13729,13731,13733],{"class":94,"line":1632},[92,13728,2282],{"class":1942},[92,13730,103],{"class":102},[92,13732,2287],{"class":207},[92,13734,2698],{"class":102},[92,13736,13737],{"class":94,"line":1653},[92,13738,2379],{"emptyLinePlaceholder":17},[92,13740,13741,13743,13745],{"class":94,"line":1658},[92,13742,4069],{"class":98},[92,13744,4072],{"class":151},[92,13746,1269],{"class":102},[92,13748,13749],{"class":94,"line":1672},[92,13750,1544],{"class":102},[38,13752,11312],{},[46,13754,13755,13758,13761],{},[49,13756,13757],{},"我传就用我；没传就用你",[49,13759,13760],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[49,13762,13763],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[33,13765,13767],{"id":13766},"_72函数的占位参数","7.2函数的占位参数",[38,13769,13770],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[38,13772,13773,13775,13776],{},[252,13774,5161],{}," ",[89,13777,13778],{},"返回值类型 函数名 (数据类型){}",[83,13780,13782],{"className":85,"code":13781,"language":87,"meta":10,"style":10},"\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",[89,13783,13784,13789,13807,13820,13824,13832,13836,13853,13857,13867,13871,13879],{"__ignoreMap":10},[92,13785,13786],{"class":94,"line":95},[92,13787,13788],{"class":161},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[92,13790,13791,13793,13795,13797,13799,13801,13803,13805],{"class":94,"line":11},[92,13792,5344],{"class":98},[92,13794,11365],{"class":1942},[92,13796,103],{"class":102},[92,13798,106],{"class":98},[92,13800,1377],{"class":5196},[92,13802,12415],{"class":102},[92,13804,106],{"class":98},[92,13806,12422],{"class":102},[92,13808,13809,13811,13813,13816,13818],{"class":94,"line":1158},[92,13810,6509],{"class":102},[92,13812,1147],{"class":98},[92,13814,13815],{"class":207}," \"this is func\"",[92,13817,1423],{"class":98},[92,13819,8820],{"class":102},[92,13821,13822],{"class":94,"line":1173},[92,13823,1544],{"class":102},[92,13825,13826,13828,13830],{"class":94,"line":1179},[92,13827,106],{"class":98},[92,13829,1952],{"class":1942},[92,13831,10833],{"class":102},[92,13833,13834],{"class":94,"line":1193},[92,13835,2379],{"emptyLinePlaceholder":17},[92,13837,13838,13840,13842,13844,13846,13848,13850],{"class":94,"line":1199},[92,13839,13265],{"class":1942},[92,13841,103],{"class":102},[92,13843,549],{"class":151},[92,13845,481],{"class":102},[92,13847,549],{"class":151},[92,13849,5946],{"class":102},[92,13851,13852],{"class":161}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[92,13854,13855],{"class":94,"line":1290},[92,13856,2379],{"emptyLinePlaceholder":17},[92,13858,13859,13861,13863,13865],{"class":94,"line":1296},[92,13860,2282],{"class":1942},[92,13862,103],{"class":102},[92,13864,2287],{"class":207},[92,13866,2698],{"class":102},[92,13868,13869],{"class":94,"line":1308},[92,13870,2379],{"emptyLinePlaceholder":17},[92,13872,13873,13875,13877],{"class":94,"line":1591},[92,13874,4069],{"class":98},[92,13876,4072],{"class":151},[92,13878,1269],{"class":102},[92,13880,13881],{"class":94,"line":1596},[92,13882,1544],{"class":102},[38,13884,13885],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[33,13887,13889],{"id":13888},"_73函数重载","7.3函数重载",[38,13891,13892],{},"意思是函数名是可以相同的",[63,13894,13896],{"id":13895},"_731基本语法","7.3.1基本语法",[38,13898,13899],{},"作用：函数名可以相同，提高复用性",[38,13901,13902],{},[252,13903,13904],{},"函数重载满足条件：",[1110,13906,13907,13910,13913],{},[49,13908,13909],{},"同一个作用域下",[49,13911,13912],{},"函数名称相同",[49,13914,13915,13916,13919,13920,13923,13924],{},"函数参数",[252,13917,13918],{},"类型不同","  或者 ",[252,13921,13922],{},"个数不同"," 或者 ",[252,13925,13926],{},"顺序不同",[38,13928,13929,13932],{},[252,13930,13931],{},"注意:","  函数的返回值不可以作为函数重载的条件",[83,13934,13936],{"className":9921,"code":13935,"language":9923,"meta":10,"style":10},"\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",[89,13937,13938,13943,13951,13955,13968,13972,13986,13990,14003,14007,14022,14026,14039,14043,14064,14068,14081,14085,14105,14109,14122,14126,14130,14135,14140,14145,14150,14155,14159,14163,14171,14175,14181,14191,14201,14215,14230,14234,14244,14248,14256],{"__ignoreMap":10},[92,13939,13940],{"class":94,"line":95},[92,13941,13942],{"class":161},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[92,13944,13945,13947,13949],{"class":94,"line":11},[92,13946,5344],{"class":98},[92,13948,11365],{"class":1942},[92,13950,1955],{"class":102},[92,13952,13953],{"class":94,"line":1158},[92,13954,1525],{"class":102},[92,13956,13957,13959,13961,13964,13966],{"class":94,"line":1173},[92,13958,6509],{"class":102},[92,13960,1147],{"class":98},[92,13962,13963],{"class":207}," \"func 的调用！\"",[92,13965,1423],{"class":98},[92,13967,8820],{"class":102},[92,13969,13970],{"class":94,"line":1179},[92,13971,1544],{"class":102},[92,13973,13974,13976,13978,13980,13982,13984],{"class":94,"line":1193},[92,13975,5344],{"class":98},[92,13977,11365],{"class":1942},[92,13979,103],{"class":102},[92,13981,106],{"class":98},[92,13983,1377],{"class":5196},[92,13985,109],{"class":102},[92,13987,13988],{"class":94,"line":1199},[92,13989,1525],{"class":102},[92,13991,13992,13994,13996,13999,14001],{"class":94,"line":1290},[92,13993,6509],{"class":102},[92,13995,1147],{"class":98},[92,13997,13998],{"class":207}," \"func (int a) 的调用！\"",[92,14000,1423],{"class":98},[92,14002,8820],{"class":102},[92,14004,14005],{"class":94,"line":1296},[92,14006,1544],{"class":102},[92,14008,14009,14011,14013,14015,14018,14020],{"class":94,"line":1308},[92,14010,5344],{"class":98},[92,14012,11365],{"class":1942},[92,14014,103],{"class":102},[92,14016,14017],{"class":98},"double",[92,14019,1377],{"class":5196},[92,14021,109],{"class":102},[92,14023,14024],{"class":94,"line":1591},[92,14025,1525],{"class":102},[92,14027,14028,14030,14032,14035,14037],{"class":94,"line":1596},[92,14029,6509],{"class":102},[92,14031,1147],{"class":98},[92,14033,14034],{"class":207}," \"func (double a)的调用！\"",[92,14036,1423],{"class":98},[92,14038,8820],{"class":102},[92,14040,14041],{"class":94,"line":1602},[92,14042,1544],{"class":102},[92,14044,14045,14047,14049,14051,14053,14055,14058,14060,14062],{"class":94,"line":1607},[92,14046,5344],{"class":98},[92,14048,11365],{"class":1942},[92,14050,103],{"class":102},[92,14052,106],{"class":98},[92,14054,1377],{"class":5196},[92,14056,14057],{"class":102}," ,",[92,14059,14017],{"class":98},[92,14061,2812],{"class":5196},[92,14063,109],{"class":102},[92,14065,14066],{"class":94,"line":1621},[92,14067,1525],{"class":102},[92,14069,14070,14072,14074,14077,14079],{"class":94,"line":1626},[92,14071,6509],{"class":102},[92,14073,1147],{"class":98},[92,14075,14076],{"class":207}," \"func (int a ,double b) 的调用！\"",[92,14078,1423],{"class":98},[92,14080,8820],{"class":102},[92,14082,14083],{"class":94,"line":1632},[92,14084,1544],{"class":102},[92,14086,14087,14089,14091,14093,14095,14097,14099,14101,14103],{"class":94,"line":1653},[92,14088,5344],{"class":98},[92,14090,11365],{"class":1942},[92,14092,103],{"class":102},[92,14094,14017],{"class":98},[92,14096,1377],{"class":5196},[92,14098,14057],{"class":102},[92,14100,106],{"class":98},[92,14102,2812],{"class":5196},[92,14104,109],{"class":102},[92,14106,14107],{"class":94,"line":1658},[92,14108,1525],{"class":102},[92,14110,14111,14113,14115,14118,14120],{"class":94,"line":1672},[92,14112,6509],{"class":102},[92,14114,1147],{"class":98},[92,14116,14117],{"class":207}," \"func (double a ,int b)的调用！\"",[92,14119,1423],{"class":98},[92,14121,8820],{"class":102},[92,14123,14124],{"class":94,"line":1677},[92,14125,1544],{"class":102},[92,14127,14128],{"class":94,"line":1706},[92,14129,2379],{"emptyLinePlaceholder":17},[92,14131,14132],{"class":94,"line":1711},[92,14133,14134],{"class":161},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[92,14136,14137],{"class":94,"line":1728},[92,14138,14139],{"class":161},"\u002F\u002Fint func(double a, int b)\n",[92,14141,14142],{"class":94,"line":1733},[92,14143,14144],{"class":161},"\u002F\u002F{\n",[92,14146,14147],{"class":94,"line":1738},[92,14148,14149],{"class":161},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[92,14151,14152],{"class":94,"line":1743},[92,14153,14154],{"class":161},"\u002F\u002F}\n",[92,14156,14157],{"class":94,"line":1757},[92,14158,2379],{"emptyLinePlaceholder":17},[92,14160,14161],{"class":94,"line":1762},[92,14162,2379],{"emptyLinePlaceholder":17},[92,14164,14165,14167,14169],{"class":94,"line":2556},[92,14166,106],{"class":98},[92,14168,1952],{"class":1942},[92,14170,10833],{"class":102},[92,14172,14173],{"class":94,"line":2570},[92,14174,2379],{"emptyLinePlaceholder":17},[92,14176,14177,14179],{"class":94,"line":2578},[92,14178,13265],{"class":1942},[92,14180,5616],{"class":102},[92,14182,14183,14185,14187,14189],{"class":94,"line":2583},[92,14184,13265],{"class":1942},[92,14186,103],{"class":102},[92,14188,549],{"class":151},[92,14190,2698],{"class":102},[92,14192,14193,14195,14197,14199],{"class":94,"line":2589},[92,14194,13265],{"class":1942},[92,14196,103],{"class":102},[92,14198,152],{"class":151},[92,14200,2698],{"class":102},[92,14202,14203,14205,14207,14209,14211,14213],{"class":94,"line":2595},[92,14204,13265],{"class":1942},[92,14206,103],{"class":102},[92,14208,549],{"class":151},[92,14210,481],{"class":102},[92,14212,152],{"class":151},[92,14214,2698],{"class":102},[92,14216,14217,14219,14221,14223,14226,14228],{"class":94,"line":2600},[92,14218,13265],{"class":1942},[92,14220,103],{"class":102},[92,14222,152],{"class":151},[92,14224,14225],{"class":102}," , ",[92,14227,549],{"class":151},[92,14229,2698],{"class":102},[92,14231,14232],{"class":94,"line":7928},[92,14233,13190],{"class":102},[92,14235,14236,14238,14240,14242],{"class":94,"line":7952},[92,14237,2282],{"class":1942},[92,14239,103],{"class":102},[92,14241,2287],{"class":207},[92,14243,2698],{"class":102},[92,14245,14246],{"class":94,"line":7957},[92,14247,2379],{"emptyLinePlaceholder":17},[92,14249,14250,14252,14254],{"class":94,"line":7963},[92,14251,4069],{"class":98},[92,14253,4072],{"class":151},[92,14255,1269],{"class":102},[92,14257,14258],{"class":94,"line":7990},[92,14259,1544],{"class":102},[38,14261,14262],{},"重点：函数返回值不可以作为函数重载条件！",[63,14264,14266],{"id":14265},"_732注意事项","7.3.2注意事项",[1110,14268,14269,14272],{},[49,14270,14271],{},"引用作为重载条件!!!",[49,14273,14274],{},"函数重载碰到函数默认参数",[83,14276,14278],{"className":85,"code":14277,"language":87,"meta":10,"style":10},"\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",[89,14279,14280,14285,14290,14294,14310,14314,14327,14331,14335,14353,14357,14370,14374,14378,14382,14387,14391,14415,14419,14432,14436,14440,14454,14458,14471,14475,14479,14487,14491,14503,14513,14526,14530,14534,14542,14546,14556,14560,14568],{"__ignoreMap":10},[92,14281,14282],{"class":94,"line":95},[92,14283,14284],{"class":161},"\u002F\u002F函数重载注意事项\n",[92,14286,14287],{"class":94,"line":11},[92,14288,14289],{"class":161},"\u002F\u002F1、引用作为重载条件\n",[92,14291,14292],{"class":94,"line":1158},[92,14293,2379],{"emptyLinePlaceholder":17},[92,14295,14296,14298,14300,14302,14304,14306,14308],{"class":94,"line":1173},[92,14297,5344],{"class":98},[92,14299,11365],{"class":1942},[92,14301,103],{"class":102},[92,14303,106],{"class":98},[92,14305,10564],{"class":98},[92,14307,341],{"class":5196},[92,14309,109],{"class":102},[92,14311,14312],{"class":94,"line":1179},[92,14313,1525],{"class":102},[92,14315,14316,14318,14320,14323,14325],{"class":94,"line":1193},[92,14317,6509],{"class":102},[92,14319,1147],{"class":98},[92,14321,14322],{"class":207}," \"func (int &a) 调用 \"",[92,14324,1423],{"class":98},[92,14326,8820],{"class":102},[92,14328,14329],{"class":94,"line":1199},[92,14330,1544],{"class":102},[92,14332,14333],{"class":94,"line":1290},[92,14334,2379],{"emptyLinePlaceholder":17},[92,14336,14337,14339,14341,14343,14345,14347,14349,14351],{"class":94,"line":1296},[92,14338,5344],{"class":98},[92,14340,11365],{"class":1942},[92,14342,103],{"class":102},[92,14344,6772],{"class":98},[92,14346,2361],{"class":98},[92,14348,10564],{"class":98},[92,14350,341],{"class":5196},[92,14352,109],{"class":102},[92,14354,14355],{"class":94,"line":1308},[92,14356,1525],{"class":102},[92,14358,14359,14361,14363,14366,14368],{"class":94,"line":1591},[92,14360,6509],{"class":102},[92,14362,1147],{"class":98},[92,14364,14365],{"class":207}," \"func (const int &a) 调用 \"",[92,14367,1423],{"class":98},[92,14369,8820],{"class":102},[92,14371,14372],{"class":94,"line":1596},[92,14373,1544],{"class":102},[92,14375,14376],{"class":94,"line":1602},[92,14377,2379],{"emptyLinePlaceholder":17},[92,14379,14380],{"class":94,"line":1607},[92,14381,2379],{"emptyLinePlaceholder":17},[92,14383,14384],{"class":94,"line":1621},[92,14385,14386],{"class":161},"\u002F\u002F2、函数重载碰到函数默认参数\n",[92,14388,14389],{"class":94,"line":1626},[92,14390,2379],{"emptyLinePlaceholder":17},[92,14392,14393,14395,14397,14399,14401,14403,14405,14407,14409,14411,14413],{"class":94,"line":1632},[92,14394,5344],{"class":98},[92,14396,13598],{"class":1942},[92,14398,103],{"class":102},[92,14400,106],{"class":98},[92,14402,1377],{"class":5196},[92,14404,12415],{"class":102},[92,14406,106],{"class":98},[92,14408,2812],{"class":5196},[92,14410,13544],{"class":98},[92,14412,2017],{"class":151},[92,14414,109],{"class":102},[92,14416,14417],{"class":94,"line":1653},[92,14418,1525],{"class":102},[92,14420,14421,14423,14425,14428,14430],{"class":94,"line":1658},[92,14422,6509],{"class":102},[92,14424,1147],{"class":98},[92,14426,14427],{"class":207}," \"func2(int a, int b = 10) 调用\"",[92,14429,1423],{"class":98},[92,14431,8820],{"class":102},[92,14433,14434],{"class":94,"line":1672},[92,14435,1544],{"class":102},[92,14437,14438],{"class":94,"line":1677},[92,14439,2379],{"emptyLinePlaceholder":17},[92,14441,14442,14444,14446,14448,14450,14452],{"class":94,"line":1706},[92,14443,5344],{"class":98},[92,14445,13598],{"class":1942},[92,14447,103],{"class":102},[92,14449,106],{"class":98},[92,14451,1377],{"class":5196},[92,14453,109],{"class":102},[92,14455,14456],{"class":94,"line":1711},[92,14457,1525],{"class":102},[92,14459,14460,14462,14464,14467,14469],{"class":94,"line":1728},[92,14461,6509],{"class":102},[92,14463,1147],{"class":98},[92,14465,14466],{"class":207}," \"func2(int a) 调用\"",[92,14468,1423],{"class":98},[92,14470,8820],{"class":102},[92,14472,14473],{"class":94,"line":1733},[92,14474,1544],{"class":102},[92,14476,14477],{"class":94,"line":1738},[92,14478,2379],{"emptyLinePlaceholder":17},[92,14480,14481,14483,14485],{"class":94,"line":1743},[92,14482,106],{"class":98},[92,14484,1952],{"class":1942},[92,14486,10833],{"class":102},[92,14488,14489],{"class":94,"line":1757},[92,14490,13190],{"class":102},[92,14492,14493,14495,14497,14499,14501],{"class":94,"line":1762},[92,14494,1964],{"class":98},[92,14496,10849],{"class":102},[92,14498,148],{"class":98},[92,14500,2017],{"class":151},[92,14502,1269],{"class":102},[92,14504,14505,14507,14510],{"class":94,"line":2556},[92,14506,13265],{"class":1942},[92,14508,14509],{"class":102},"(a);",[92,14511,14512],{"class":161}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[92,14514,14515,14517,14519,14521,14523],{"class":94,"line":2570},[92,14516,13265],{"class":1942},[92,14518,103],{"class":102},[92,14520,549],{"class":151},[92,14522,5946],{"class":102},[92,14524,14525],{"class":161},"\u002F\u002F调用有const   10是个常量\n",[92,14527,14528],{"class":94,"line":2578},[92,14529,2379],{"emptyLinePlaceholder":17},[92,14531,14532],{"class":94,"line":2583},[92,14533,2379],{"emptyLinePlaceholder":17},[92,14535,14536,14539],{"class":94,"line":2589},[92,14537,14538],{"class":161},"    \u002F\u002Ffunc2(10);",[92,14540,14541],{"class":161}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[92,14543,14544],{"class":94,"line":2595},[92,14545,2379],{"emptyLinePlaceholder":17},[92,14547,14548,14550,14552,14554],{"class":94,"line":2600},[92,14549,2282],{"class":1942},[92,14551,103],{"class":102},[92,14553,2287],{"class":207},[92,14555,2698],{"class":102},[92,14557,14558],{"class":94,"line":7928},[92,14559,2379],{"emptyLinePlaceholder":17},[92,14561,14562,14564,14566],{"class":94,"line":7952},[92,14563,4069],{"class":98},[92,14565,4072],{"class":151},[92,14567,1269],{"class":102},[92,14569,14570],{"class":94,"line":7957},[92,14571,1544],{"class":102},[5106,14573,14574],{},"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":10,"searchDepth":11,"depth":11,"links":14576},[14577,14578,14579],{"id":13509,"depth":11,"text":13510},{"id":13766,"depth":11,"text":13767},{"id":13888,"depth":11,"text":13889,"children":14580},[14581,14582],{"id":13895,"depth":1158,"text":13896},{"id":14265,"depth":1158,"text":14266},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13501,"description":10},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14589,"title":14590,"body":14591,"description":23345,"extension":14,"meta":23346,"navigation":17,"path":23347,"seo":23348,"stem":23349,"__hash__":23350},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14592,"toc":23326},[14593,14596,14602,14609,14614,14617,14620,14623,14627,14631,14634,14637,14645,14650,14653,14660,14665,14824,14827,15080,15083,15086,15089,15094,15097,15100,15111,15116,15352,15356,15366,15369,15377,15524,15528,15531,15534,15538,15983,15987,15995,16003,16915,16922,16927,17555,17558,17561,17564,17683,17686,17773,17776,17902,17905,17999,18002,18355,18359,18367,18371,18378,18381,18384,18395,18401,18406,18418,18426,18446,18454,18471,18657,18660,18664,18667,18670,18673,18676,18679,18682,18685,19145,19151,19155,19158,19169,19756,19759,20248,20252,20255,20258,20261,20264,20267,20275,20671,20675,20678,20681,21128,21131,21134,21139,21142,21147,21150,21154,21157,21159,21165,21168,21474,21484,21525,21529,21532,21534,21567,21570,21877,21879,21894,21897,21920,21929,21935,21938,21942,21945,21948,21953,21964,21969,21977,21982,22112,22115,22118,22293,22298,22510,22514,22517,22631,22636,22875,22879,22883,22886,22889,22894,22999,23002,23005,23008,23012,23123,23126,23129,23134,23186,23189,23192,23197,23243,23246,23251,23319,23321,23324],[29,14594,14590],{"id":14595},"_8类和对象",[38,14597,14598,14599],{},"C++面向对象的三大特性为",[252,14600,14601],{},"封装、继承、多态",[38,14603,14604,14605,14608],{},"C++认为",[252,14606,14607],{},"万事万物都皆为对象","，对象上有其属性和行为",[38,14610,14611],{},[252,14612,14613],{},"例如：",[38,14615,14616],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[38,14618,14619],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[38,14621,14622],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[33,14624,14626],{"id":14625},"_81封装","8.1封装",[63,14628,14630],{"id":14629},"_811封装的意义","8.1.1封装的意义",[38,14632,14633],{},"封装是C++面向对象三大特性之一",[38,14635,14636],{},"封装的意义：",[1110,14638,14639,14642],{},[49,14640,14641],{},"将属性和行为作为一个整体，表现生活中的事物",[49,14643,14644],{},"将属性和行为加以权限控制",[38,14646,14647],{},[252,14648,14649],{},"封装意义一：",[38,14651,14652],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[38,14654,14655,13775,14657],{},[252,14656,5161],{},[89,14658,14659],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[46,14661,14662],{},[49,14663,14664],{},"**示例1：**设计一个圆类，求圆的周长",[83,14666,14668],{"className":85,"code":14667,"language":87,"meta":10,"style":10},"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",[89,14669,14670,14678,14682,14687,14692,14697,14702,14709,14714,14724,14728,14746,14750,14754,14762,14766,14771,14776,14781,14786,14797,14820],{"__ignoreMap":10},[92,14671,14672,14675],{"class":94,"line":95},[92,14673,14674],{"class":98},"class",[92,14676,14677],{"class":1942}," Circle\n",[92,14679,14680],{"class":94,"line":11},[92,14681,1525],{"class":102},[92,14683,14684],{"class":94,"line":1158},[92,14685,14686],{"class":161},"    \u002F\u002F访问权限\n",[92,14688,14689],{"class":94,"line":1173},[92,14690,14691],{"class":161},"    \u002F\u002F公共权限\n",[92,14693,14694],{"class":94,"line":1179},[92,14695,14696],{"class":98},"public:\n",[92,14698,14699],{"class":94,"line":1193},[92,14700,14701],{"class":161},"    \u002F\u002F属性\n",[92,14703,14704,14706],{"class":94,"line":1199},[92,14705,1964],{"class":98},[92,14707,14708],{"class":102}," m_r;\n",[92,14710,14711],{"class":94,"line":1290},[92,14712,14713],{"class":161},"    \u002F\u002F行为\n",[92,14715,14716,14719,14722],{"class":94,"line":1296},[92,14717,14718],{"class":98},"    double",[92,14720,14721],{"class":1942}," calculateZC",[92,14723,1955],{"class":102},[92,14725,14726],{"class":94,"line":1308},[92,14727,2009],{"class":102},[92,14729,14730,14733,14736,14738,14741,14743],{"class":94,"line":1591},[92,14731,14732],{"class":98},"        return",[92,14734,14735],{"class":151}," 2",[92,14737,558],{"class":98},[92,14739,14740],{"class":102},"PI",[92,14742,558],{"class":98},[92,14744,14745],{"class":102},"m_r;\n",[92,14747,14748],{"class":94,"line":1596},[92,14749,2166],{"class":102},[92,14751,14752],{"class":94,"line":1602},[92,14753,3974],{"class":102},[92,14755,14756,14758,14760],{"class":94,"line":1607},[92,14757,106],{"class":98},[92,14759,1952],{"class":1942},[92,14761,1955],{"class":102},[92,14763,14764],{"class":94,"line":1621},[92,14765,1525],{"class":102},[92,14767,14768],{"class":94,"line":1626},[92,14769,14770],{"class":161},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[92,14772,14773],{"class":94,"line":1632},[92,14774,14775],{"class":161},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[92,14777,14778],{"class":94,"line":1653},[92,14779,14780],{"class":102},"    Circle c1;\n",[92,14782,14783],{"class":94,"line":1658},[92,14784,14785],{"class":161},"    \u002F\u002F给圆对象 的属性进行赋值\n",[92,14787,14788,14791,14793,14795],{"class":94,"line":1672},[92,14789,14790],{"class":102},"    c1.m_r",[92,14792,148],{"class":98},[92,14794,549],{"class":151},[92,14796,1269],{"class":102},[92,14798,14799,14801,14803,14806,14808,14811,14814,14816,14818],{"class":94,"line":1677},[92,14800,1530],{"class":102},[92,14802,1147],{"class":98},[92,14804,14805],{"class":207},"\"圆的周长\"",[92,14807,1147],{"class":98},[92,14809,14810],{"class":102},"c1.",[92,14812,14813],{"class":1942},"calculateZC",[92,14815,2406],{"class":102},[92,14817,1147],{"class":98},[92,14819,1170],{"class":102},[92,14821,14822],{"class":94,"line":1706},[92,14823,1544],{"class":102},[38,14825,14826],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[83,14828,14830],{"className":85,"code":14829,"language":87,"meta":10,"style":10},"#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",[89,14831,14832,14838,14848,14854,14860,14864,14868,14873,14880,14885,14903,14907,14917,14921,14926,14942,14946,14956,14960,14965,14973,14977,15009,15013,15017,15025,15029,15034,15039,15053,15067,15076],{"__ignoreMap":10},[92,14833,14834,14836],{"class":94,"line":95},[92,14835,1928],{"class":98},[92,14837,1931],{"class":207},[92,14839,14840,14842,14844,14846],{"class":94,"line":11},[92,14841,1936],{"class":98},[92,14843,1939],{"class":98},[92,14845,1943],{"class":1942},[92,14847,1269],{"class":102},[92,14849,14850,14852],{"class":94,"line":1158},[92,14851,1928],{"class":98},[92,14853,7729],{"class":207},[92,14855,14856,14858],{"class":94,"line":1173},[92,14857,14674],{"class":98},[92,14859,7742],{"class":1942},[92,14861,14862],{"class":94,"line":1179},[92,14863,1525],{"class":102},[92,14865,14866],{"class":94,"line":1193},[92,14867,14696],{"class":98},[92,14869,14870],{"class":94,"line":1199},[92,14871,14872],{"class":102},"    string m_name;\n",[92,14874,14875,14877],{"class":94,"line":1290},[92,14876,1964],{"class":98},[92,14878,14879],{"class":102}," m_id;\n",[92,14881,14882],{"class":94,"line":1296},[92,14883,14884],{"class":161},"    \u002F\u002F赋值姓名\n",[92,14886,14887,14890,14893,14895,14898,14901],{"class":94,"line":1308},[92,14888,14889],{"class":98},"    void",[92,14891,14892],{"class":1942}," setName",[92,14894,103],{"class":102},[92,14896,14897],{"class":1942},"string",[92,14899,14900],{"class":5196}," name",[92,14902,109],{"class":102},[92,14904,14905],{"class":94,"line":1591},[92,14906,2009],{"class":102},[92,14908,14909,14912,14914],{"class":94,"line":1596},[92,14910,14911],{"class":102},"        m_name",[92,14913,148],{"class":98},[92,14915,14916],{"class":102},"name;\n",[92,14918,14919],{"class":94,"line":1602},[92,14920,2166],{"class":102},[92,14922,14923],{"class":94,"line":1607},[92,14924,14925],{"class":161},"    \u002F\u002F赋值学号\n",[92,14927,14928,14930,14933,14935,14937,14940],{"class":94,"line":1621},[92,14929,14889],{"class":98},[92,14931,14932],{"class":1942}," setId",[92,14934,103],{"class":102},[92,14936,106],{"class":98},[92,14938,14939],{"class":5196}," id",[92,14941,109],{"class":102},[92,14943,14944],{"class":94,"line":1626},[92,14945,2009],{"class":102},[92,14947,14948,14951,14953],{"class":94,"line":1632},[92,14949,14950],{"class":102},"        m_id",[92,14952,148],{"class":98},[92,14954,14955],{"class":102},"id;\n",[92,14957,14958],{"class":94,"line":1653},[92,14959,2166],{"class":102},[92,14961,14962],{"class":94,"line":1658},[92,14963,14964],{"class":161},"    \u002F\u002F打印学生信息\n",[92,14966,14967,14969,14971],{"class":94,"line":1672},[92,14968,14889],{"class":98},[92,14970,9595],{"class":1942},[92,14972,1955],{"class":102},[92,14974,14975],{"class":94,"line":1677},[92,14976,2009],{"class":102},[92,14978,14979,14981,14983,14986,14988,14991,14993,14995,14997,15000,15002,15005,15007],{"class":94,"line":1706},[92,14980,3430],{"class":102},[92,14982,1147],{"class":98},[92,14984,14985],{"class":207},"\"姓名：\"",[92,14987,1147],{"class":98},[92,14989,14990],{"class":102},"m_name",[92,14992,1147],{"class":98},[92,14994,4338],{"class":207},[92,14996,1147],{"class":98},[92,14998,14999],{"class":207},"\"学号：\"",[92,15001,1147],{"class":98},[92,15003,15004],{"class":102},"m_id",[92,15006,1147],{"class":98},[92,15008,1170],{"class":102},[92,15010,15011],{"class":94,"line":1711},[92,15012,2166],{"class":102},[92,15014,15015],{"class":94,"line":1728},[92,15016,3974],{"class":102},[92,15018,15019,15021,15023],{"class":94,"line":1733},[92,15020,106],{"class":98},[92,15022,1952],{"class":1942},[92,15024,1955],{"class":102},[92,15026,15027],{"class":94,"line":1738},[92,15028,1525],{"class":102},[92,15030,15031],{"class":94,"line":1743},[92,15032,15033],{"class":161},"    \u002F\u002F实例化\n",[92,15035,15036],{"class":94,"line":1757},[92,15037,15038],{"class":102},"    Student s1;\n",[92,15040,15041,15044,15047,15049,15051],{"class":94,"line":1762},[92,15042,15043],{"class":102},"    s1.",[92,15045,15046],{"class":1942},"setName",[92,15048,103],{"class":102},[92,15050,7896],{"class":207},[92,15052,2698],{"class":102},[92,15054,15055,15057,15060,15062,15065],{"class":94,"line":2556},[92,15056,15043],{"class":102},[92,15058,15059],{"class":1942},"setId",[92,15061,103],{"class":102},[92,15063,15064],{"class":151},"123456",[92,15066,2698],{"class":102},[92,15068,15069,15071,15074],{"class":94,"line":2570},[92,15070,15043],{"class":102},[92,15072,15073],{"class":1942},"printInfo",[92,15075,5616],{"class":102},[92,15077,15078],{"class":94,"line":2578},[92,15079,1544],{"class":102},[38,15081,15082],{},"类中的属性和行为统称为成员",[38,15084,15085],{},"属性：成员属性(成员变量)",[38,15087,15088],{},"方法：成员函数(成员方法)",[38,15090,15091],{},[252,15092,15093],{},"封装意义二：",[38,15095,15096],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[38,15098,15099],{},"访问权限有三种：",[46,15101,15102,15105,15108],{},[49,15103,15104],{},"public        公共权限",[49,15106,15107],{},"protected 保护权限",[49,15109,15110],{},"private      私有权限",[38,15112,15113],{},[252,15114,15115],{},"示例：",[83,15117,15119],{"className":9921,"code":15118,"language":9923,"meta":10,"style":10},"\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",[89,15120,15121,15126,15131,15136,15141,15145,15152,15156,15161,15165,15170,15174,15179,15184,15189,15193,15198,15203,15210,15214,15218,15226,15230,15241,15253,15265,15269,15273,15277,15285,15289,15294,15306,15314,15322,15326,15336,15340,15348],{"__ignoreMap":10},[92,15122,15123],{"class":94,"line":95},[92,15124,15125],{"class":161},"\u002F\u002F三种权限\n",[92,15127,15128],{"class":94,"line":11},[92,15129,15130],{"class":161},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[92,15132,15133],{"class":94,"line":1158},[92,15134,15135],{"class":161},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[92,15137,15138],{"class":94,"line":1173},[92,15139,15140],{"class":161},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[92,15142,15143],{"class":94,"line":1179},[92,15144,2379],{"emptyLinePlaceholder":17},[92,15146,15147,15149],{"class":94,"line":1193},[92,15148,14674],{"class":98},[92,15150,15151],{"class":1942}," Person\n",[92,15153,15154],{"class":94,"line":1199},[92,15155,1525],{"class":102},[92,15157,15158],{"class":94,"line":1290},[92,15159,15160],{"class":161},"    \u002F\u002F姓名  公共权限\n",[92,15162,15163],{"class":94,"line":1296},[92,15164,14696],{"class":98},[92,15166,15167],{"class":94,"line":1308},[92,15168,15169],{"class":102},"    string m_Name;\n",[92,15171,15172],{"class":94,"line":1591},[92,15173,2379],{"emptyLinePlaceholder":17},[92,15175,15176],{"class":94,"line":1596},[92,15177,15178],{"class":161},"    \u002F\u002F汽车  保护权限\n",[92,15180,15181],{"class":94,"line":1602},[92,15182,15183],{"class":98},"protected:\n",[92,15185,15186],{"class":94,"line":1607},[92,15187,15188],{"class":102},"    string m_Car;\n",[92,15190,15191],{"class":94,"line":1621},[92,15192,2379],{"emptyLinePlaceholder":17},[92,15194,15195],{"class":94,"line":1626},[92,15196,15197],{"class":161},"    \u002F\u002F银行卡密码  私有权限\n",[92,15199,15200],{"class":94,"line":1632},[92,15201,15202],{"class":98},"private:\n",[92,15204,15205,15207],{"class":94,"line":1653},[92,15206,1964],{"class":98},[92,15208,15209],{"class":102}," m_Password;\n",[92,15211,15212],{"class":94,"line":1658},[92,15213,2379],{"emptyLinePlaceholder":17},[92,15215,15216],{"class":94,"line":1672},[92,15217,14696],{"class":98},[92,15219,15220,15222,15224],{"class":94,"line":1677},[92,15221,14889],{"class":98},[92,15223,11365],{"class":1942},[92,15225,1955],{"class":102},[92,15227,15228],{"class":94,"line":1706},[92,15229,2009],{"class":102},[92,15231,15232,15235,15237,15239],{"class":94,"line":1711},[92,15233,15234],{"class":102},"        m_Name ",[92,15236,148],{"class":98},[92,15238,8918],{"class":207},[92,15240,1269],{"class":102},[92,15242,15243,15246,15248,15251],{"class":94,"line":1728},[92,15244,15245],{"class":102},"        m_Car ",[92,15247,148],{"class":98},[92,15249,15250],{"class":207}," \"拖拉机\"",[92,15252,1269],{"class":102},[92,15254,15255,15258,15260,15263],{"class":94,"line":1733},[92,15256,15257],{"class":102},"        m_Password ",[92,15259,148],{"class":98},[92,15261,15262],{"class":151}," 123456",[92,15264,1269],{"class":102},[92,15266,15267],{"class":94,"line":1738},[92,15268,2166],{"class":102},[92,15270,15271],{"class":94,"line":1743},[92,15272,3974],{"class":102},[92,15274,15275],{"class":94,"line":1757},[92,15276,2379],{"emptyLinePlaceholder":17},[92,15278,15279,15281,15283],{"class":94,"line":1762},[92,15280,106],{"class":98},[92,15282,1952],{"class":1942},[92,15284,10833],{"class":102},[92,15286,15287],{"class":94,"line":2556},[92,15288,2379],{"emptyLinePlaceholder":17},[92,15290,15291],{"class":94,"line":2570},[92,15292,15293],{"class":102},"    Person p;\n",[92,15295,15296,15299,15301,15304],{"class":94,"line":2578},[92,15297,15298],{"class":102},"    p.m_Name ",[92,15300,148],{"class":98},[92,15302,15303],{"class":207}," \"李四\"",[92,15305,1269],{"class":102},[92,15307,15308,15311],{"class":94,"line":2583},[92,15309,15310],{"class":161},"    \u002F\u002Fp.m_Car = \"奔驰\";",[92,15312,15313],{"class":161},"  \u002F\u002F保护权限类外访问不到\n",[92,15315,15316,15319],{"class":94,"line":2589},[92,15317,15318],{"class":161},"    \u002F\u002Fp.m_Password = 123;",[92,15320,15321],{"class":161}," \u002F\u002F私有权限类外访问不到\n",[92,15323,15324],{"class":94,"line":2595},[92,15325,2379],{"emptyLinePlaceholder":17},[92,15327,15328,15330,15332,15334],{"class":94,"line":2600},[92,15329,2282],{"class":1942},[92,15331,103],{"class":102},[92,15333,2287],{"class":207},[92,15335,2698],{"class":102},[92,15337,15338],{"class":94,"line":7928},[92,15339,2379],{"emptyLinePlaceholder":17},[92,15341,15342,15344,15346],{"class":94,"line":7952},[92,15343,4069],{"class":98},[92,15345,4072],{"class":151},[92,15347,1269],{"class":102},[92,15349,15350],{"class":94,"line":7957},[92,15351,1544],{"class":102},[63,15353,15355],{"id":15354},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[38,15357,15358,15359,15362,15363],{},"在C++中 struct和class唯一的",[252,15360,15361],{},"区别","就在于 ",[252,15364,15365],{},"默认的访问权限不同",[38,15367,15368],{},"区别：",[1110,15370,15371,15374],{},[49,15372,15373],{},"struct 默认权限为公共",[49,15375,15376],{},"class   默认权限为私有",[83,15378,15380],{"className":9921,"code":15379,"language":9923,"meta":10,"style":10},"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",[89,15381,15382,15389,15393,15403,15407,15411,15418,15422,15432,15436,15440,15448,15452,15457,15471,15475,15480,15494,15498,15508,15512,15520],{"__ignoreMap":10},[92,15383,15384,15386],{"class":94,"line":95},[92,15385,14674],{"class":98},[92,15387,15388],{"class":1942}," C1\n",[92,15390,15391],{"class":94,"line":11},[92,15392,1525],{"class":102},[92,15394,15395,15397,15400],{"class":94,"line":1158},[92,15396,1964],{"class":98},[92,15398,15399],{"class":102},"  m_A;",[92,15401,15402],{"class":161}," \u002F\u002F默认是私有权限\n",[92,15404,15405],{"class":94,"line":1173},[92,15406,3974],{"class":102},[92,15408,15409],{"class":94,"line":1179},[92,15410,2379],{"emptyLinePlaceholder":17},[92,15412,15413,15415],{"class":94,"line":1193},[92,15414,7739],{"class":98},[92,15416,15417],{"class":1942}," C2\n",[92,15419,15420],{"class":94,"line":1199},[92,15421,1525],{"class":102},[92,15423,15424,15426,15429],{"class":94,"line":1290},[92,15425,1964],{"class":98},[92,15427,15428],{"class":102}," m_A;",[92,15430,15431],{"class":161},"  \u002F\u002F默认是公共权限\n",[92,15433,15434],{"class":94,"line":1296},[92,15435,3974],{"class":102},[92,15437,15438],{"class":94,"line":1308},[92,15439,2379],{"emptyLinePlaceholder":17},[92,15441,15442,15444,15446],{"class":94,"line":1591},[92,15443,106],{"class":98},[92,15445,1952],{"class":1942},[92,15447,10833],{"class":102},[92,15449,15450],{"class":94,"line":1596},[92,15451,2379],{"emptyLinePlaceholder":17},[92,15453,15454],{"class":94,"line":1602},[92,15455,15456],{"class":102},"    C1 c1;\n",[92,15458,15459,15462,15464,15466,15468],{"class":94,"line":1607},[92,15460,15461],{"class":102},"    c1.m_A ",[92,15463,148],{"class":98},[92,15465,2017],{"class":151},[92,15467,158],{"class":102},[92,15469,15470],{"class":161}," \u002F\u002F错误，访问权限是私有\n",[92,15472,15473],{"class":94,"line":1621},[92,15474,2379],{"emptyLinePlaceholder":17},[92,15476,15477],{"class":94,"line":1626},[92,15478,15479],{"class":102},"    C2 c2;\n",[92,15481,15482,15485,15487,15489,15491],{"class":94,"line":1632},[92,15483,15484],{"class":102},"    c2.m_A ",[92,15486,148],{"class":98},[92,15488,2017],{"class":151},[92,15490,158],{"class":102},[92,15492,15493],{"class":161}," \u002F\u002F正确，访问权限是公共\n",[92,15495,15496],{"class":94,"line":1653},[92,15497,2379],{"emptyLinePlaceholder":17},[92,15499,15500,15502,15504,15506],{"class":94,"line":1658},[92,15501,2282],{"class":1942},[92,15503,103],{"class":102},[92,15505,2287],{"class":207},[92,15507,2698],{"class":102},[92,15509,15510],{"class":94,"line":1672},[92,15511,2379],{"emptyLinePlaceholder":17},[92,15513,15514,15516,15518],{"class":94,"line":1677},[92,15515,4069],{"class":98},[92,15517,4072],{"class":151},[92,15519,1269],{"class":102},[92,15521,15522],{"class":94,"line":1706},[92,15523,1544],{"class":102},[63,15525,15527],{"id":15526},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[38,15529,15530],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[38,15532,15533],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[38,15535,15536],{},[252,15537,15115],{},[83,15539,15541],{"className":9921,"code":15540,"language":9923,"meta":10,"style":10},"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",[89,15542,15543,15553,15557,15561,15566,15580,15589,15593,15603,15607,15614,15618,15622,15626,15631,15640,15647,15651,15656,15672,15695,15708,15715,15719,15728,15732,15736,15741,15757,15767,15771,15775,15779,15787,15791,15801,15805,15813,15817,15821,15829,15833,15837,15842,15855,15878,15882,15887,15900,15922,15926,15931,15945,15953,15957,15967,15971,15979],{"__ignoreMap":10},[92,15544,15545,15547,15550],{"class":94,"line":95},[92,15546,14674],{"class":98},[92,15548,15549],{"class":1942}," Person",[92,15551,15552],{"class":102}," {\n",[92,15554,15555],{"class":94,"line":11},[92,15556,14696],{"class":98},[92,15558,15559],{"class":94,"line":1158},[92,15560,2379],{"emptyLinePlaceholder":17},[92,15562,15563],{"class":94,"line":1173},[92,15564,15565],{"class":161},"    \u002F\u002F姓名设置可读可写\n",[92,15567,15568,15570,15572,15574,15576,15578],{"class":94,"line":1179},[92,15569,14889],{"class":98},[92,15571,14892],{"class":1942},[92,15573,103],{"class":102},[92,15575,14897],{"class":1942},[92,15577,14900],{"class":5196},[92,15579,12422],{"class":102},[92,15581,15582,15584,15586],{"class":94,"line":1193},[92,15583,15234],{"class":102},[92,15585,148],{"class":98},[92,15587,15588],{"class":102}," name;\n",[92,15590,15591],{"class":94,"line":1199},[92,15592,2166],{"class":102},[92,15594,15595,15598,15601],{"class":94,"line":1290},[92,15596,15597],{"class":1942},"    string",[92,15599,15600],{"class":1942}," getName",[92,15602,1955],{"class":102},[92,15604,15605],{"class":94,"line":1296},[92,15606,2009],{"class":102},[92,15608,15609,15611],{"class":94,"line":1308},[92,15610,14732],{"class":98},[92,15612,15613],{"class":102}," m_Name;\n",[92,15615,15616],{"class":94,"line":1591},[92,15617,2166],{"class":102},[92,15619,15620],{"class":94,"line":1596},[92,15621,2379],{"emptyLinePlaceholder":17},[92,15623,15624],{"class":94,"line":1602},[92,15625,2379],{"emptyLinePlaceholder":17},[92,15627,15628],{"class":94,"line":1607},[92,15629,15630],{"class":161},"    \u002F\u002F获取年龄 \n",[92,15632,15633,15635,15638],{"class":94,"line":1621},[92,15634,1964],{"class":98},[92,15636,15637],{"class":1942}," getAge",[92,15639,10833],{"class":102},[92,15641,15642,15644],{"class":94,"line":1626},[92,15643,14732],{"class":98},[92,15645,15646],{"class":102}," m_Age;\n",[92,15648,15649],{"class":94,"line":1632},[92,15650,2166],{"class":102},[92,15652,15653],{"class":94,"line":1653},[92,15654,15655],{"class":161},"    \u002F\u002F设置年龄\n",[92,15657,15658,15660,15663,15665,15667,15670],{"class":94,"line":1658},[92,15659,14889],{"class":98},[92,15661,15662],{"class":1942}," setAge",[92,15664,103],{"class":102},[92,15666,106],{"class":98},[92,15668,15669],{"class":5196}," age",[92,15671,12422],{"class":102},[92,15673,15674,15676,15679,15681,15683,15685,15688,15690,15693],{"class":94,"line":1672},[92,15675,2476],{"class":98},[92,15677,15678],{"class":102}," (age ",[92,15680,1013],{"class":98},[92,15682,4072],{"class":151},[92,15684,3234],{"class":98},[92,15686,15687],{"class":102}," age ",[92,15689,1063],{"class":98},[92,15691,15692],{"class":151}," 150",[92,15694,12422],{"class":102},[92,15696,15697,15699,15701,15704,15706],{"class":94,"line":1677},[92,15698,9699],{"class":102},[92,15700,1147],{"class":98},[92,15702,15703],{"class":207}," \"你个老妖精!\"",[92,15705,1423],{"class":98},[92,15707,8820],{"class":102},[92,15709,15710,15713],{"class":94,"line":1706},[92,15711,15712],{"class":98},"            return",[92,15714,1269],{"class":102},[92,15716,15717],{"class":94,"line":1711},[92,15718,2508],{"class":102},[92,15720,15721,15724,15726],{"class":94,"line":1728},[92,15722,15723],{"class":102},"        m_Age ",[92,15725,148],{"class":98},[92,15727,7777],{"class":102},[92,15729,15730],{"class":94,"line":1733},[92,15731,2166],{"class":102},[92,15733,15734],{"class":94,"line":1738},[92,15735,2379],{"emptyLinePlaceholder":17},[92,15737,15738],{"class":94,"line":1743},[92,15739,15740],{"class":161},"    \u002F\u002F情人设置为只写\n",[92,15742,15743,15745,15748,15750,15752,15755],{"class":94,"line":1757},[92,15744,14889],{"class":98},[92,15746,15747],{"class":1942}," setLover",[92,15749,103],{"class":102},[92,15751,14897],{"class":1942},[92,15753,15754],{"class":5196}," lover",[92,15756,12422],{"class":102},[92,15758,15759,15762,15764],{"class":94,"line":1762},[92,15760,15761],{"class":102},"        m_Lover ",[92,15763,148],{"class":98},[92,15765,15766],{"class":102}," lover;\n",[92,15768,15769],{"class":94,"line":2556},[92,15770,2166],{"class":102},[92,15772,15773],{"class":94,"line":2570},[92,15774,2379],{"emptyLinePlaceholder":17},[92,15776,15777],{"class":94,"line":2578},[92,15778,15202],{"class":98},[92,15780,15781,15784],{"class":94,"line":2583},[92,15782,15783],{"class":102},"    string m_Name;",[92,15785,15786],{"class":161}," \u002F\u002F可读可写  姓名\n",[92,15788,15789],{"class":94,"line":2589},[92,15790,13190],{"class":102},[92,15792,15793,15795,15798],{"class":94,"line":2595},[92,15794,1964],{"class":98},[92,15796,15797],{"class":102}," m_Age;",[92,15799,15800],{"class":161}," \u002F\u002F只读  年龄\n",[92,15802,15803],{"class":94,"line":2600},[92,15804,2379],{"emptyLinePlaceholder":17},[92,15806,15807,15810],{"class":94,"line":7928},[92,15808,15809],{"class":102},"    string m_Lover;",[92,15811,15812],{"class":161}," \u002F\u002F只写  情人\n",[92,15814,15815],{"class":94,"line":7952},[92,15816,3974],{"class":102},[92,15818,15819],{"class":94,"line":7957},[92,15820,2379],{"emptyLinePlaceholder":17},[92,15822,15823,15825,15827],{"class":94,"line":7963},[92,15824,106],{"class":98},[92,15826,1952],{"class":1942},[92,15828,10833],{"class":102},[92,15830,15831],{"class":94,"line":7990},[92,15832,2379],{"emptyLinePlaceholder":17},[92,15834,15835],{"class":94,"line":7995},[92,15836,15293],{"class":102},[92,15838,15839],{"class":94,"line":8001},[92,15840,15841],{"class":161},"    \u002F\u002F姓名设置\n",[92,15843,15844,15847,15849,15851,15853],{"class":94,"line":8013},[92,15845,15846],{"class":102},"    p.",[92,15848,15046],{"class":1942},[92,15850,103],{"class":102},[92,15852,7896],{"class":207},[92,15854,2698],{"class":102},[92,15856,15857,15859,15861,15864,15866,15869,15872,15874,15876],{"class":94,"line":8025},[92,15858,6509],{"class":102},[92,15860,1147],{"class":98},[92,15862,15863],{"class":207}," \"姓名： \"",[92,15865,1423],{"class":98},[92,15867,15868],{"class":102}," p.",[92,15870,15871],{"class":1942},"getName",[92,15873,13030],{"class":102},[92,15875,1147],{"class":98},[92,15877,8820],{"class":102},[92,15879,15880],{"class":94,"line":8037},[92,15881,2379],{"emptyLinePlaceholder":17},[92,15883,15884],{"class":94,"line":9696},[92,15885,15886],{"class":161},"    \u002F\u002F年龄设置\n",[92,15888,15889,15891,15894,15896,15898],{"class":94,"line":9721},[92,15890,15846],{"class":102},[92,15892,15893],{"class":1942},"setAge",[92,15895,103],{"class":102},[92,15897,759],{"class":151},[92,15899,2698],{"class":102},[92,15901,15902,15904,15906,15909,15911,15913,15916,15918,15920],{"class":94,"line":9744},[92,15903,6509],{"class":102},[92,15905,1147],{"class":98},[92,15907,15908],{"class":207}," \"年龄： \"",[92,15910,1423],{"class":98},[92,15912,15868],{"class":102},[92,15914,15915],{"class":1942},"getAge",[92,15917,13030],{"class":102},[92,15919,1147],{"class":98},[92,15921,8820],{"class":102},[92,15923,15924],{"class":94,"line":9768},[92,15925,2379],{"emptyLinePlaceholder":17},[92,15927,15928],{"class":94,"line":9773},[92,15929,15930],{"class":161},"    \u002F\u002F情人设置\n",[92,15932,15933,15935,15938,15940,15943],{"class":94,"line":9778},[92,15934,15846],{"class":102},[92,15936,15937],{"class":1942},"setLover",[92,15939,103],{"class":102},[92,15941,15942],{"class":207},"\"苍井\"",[92,15944,2698],{"class":102},[92,15946,15947,15950],{"class":94,"line":9783},[92,15948,15949],{"class":161},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[92,15951,15952],{"class":161},"  \u002F\u002F只写属性，不可以读取\n",[92,15954,15955],{"class":94,"line":9792},[92,15956,2379],{"emptyLinePlaceholder":17},[92,15958,15959,15961,15963,15965],{"class":94,"line":9797},[92,15960,2282],{"class":1942},[92,15962,103],{"class":102},[92,15964,2287],{"class":207},[92,15966,2698],{"class":102},[92,15968,15969],{"class":94,"line":9803},[92,15970,2379],{"emptyLinePlaceholder":17},[92,15972,15973,15975,15977],{"class":94,"line":9824},[92,15974,4069],{"class":98},[92,15976,4072],{"class":151},[92,15978,1269],{"class":102},[92,15980,15981],{"class":94,"line":9830},[92,15982,1544],{"class":102},[63,15984,15986],{"id":15985},"_814封装案例","8.1.4封装案例",[46,15988,15989],{},[49,15990,15991,15994],{},[252,15992,15993],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1110,15996,15997,16000],{},[49,15998,15999],{},"求出立方体的面积和体积",[49,16001,16002],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[83,16004,16006],{"className":85,"code":16005,"language":87,"meta":10,"style":10},"#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",[89,16007,16008,16014,16024,16031,16035,16039,16044,16074,16078,16088,16098,16108,16112,16121,16125,16161,16165,16174,16178,16194,16198,16203,16212,16216,16223,16227,16236,16240,16247,16251,16260,16264,16271,16275,16280,16297,16301,16347,16351,16360,16364,16368,16372,16381,16385,16389,16394,16398,16404,16410,16416,16420,16424,16429,16451,16455,16509,16513,16521,16525,16530,16535,16548,16555,16571,16582,16588,16611,16617,16640,16654,16674,16680,16691,16714,16736,16741,16747,16761,16774,16779,16793,16798,16804,16809,16823,16828,16833,16847,16859,16864,16877,16882,16887,16892,16905,16910],{"__ignoreMap":10},[92,16009,16010,16012],{"class":94,"line":95},[92,16011,1928],{"class":98},[92,16013,1931],{"class":207},[92,16015,16016,16018,16020,16022],{"class":94,"line":11},[92,16017,1936],{"class":98},[92,16019,1939],{"class":98},[92,16021,1943],{"class":1942},[92,16023,1269],{"class":102},[92,16025,16026,16028],{"class":94,"line":1158},[92,16027,14674],{"class":98},[92,16029,16030],{"class":1942}," Cube\n",[92,16032,16033],{"class":94,"line":1173},[92,16034,1525],{"class":102},[92,16036,16037],{"class":94,"line":1179},[92,16038,14696],{"class":98},[92,16040,16041],{"class":94,"line":1193},[92,16042,16043],{"class":161},"    \u002F\u002F输入长宽高\n",[92,16045,16046,16048,16051,16053,16055,16058,16060,16062,16065,16067,16069,16072],{"class":94,"line":1199},[92,16047,14889],{"class":98},[92,16049,16050],{"class":1942}," setLwh",[92,16052,103],{"class":102},[92,16054,106],{"class":98},[92,16056,16057],{"class":5196}," l",[92,16059,481],{"class":102},[92,16061,106],{"class":98},[92,16063,16064],{"class":5196}," w",[92,16066,481],{"class":102},[92,16068,106],{"class":98},[92,16070,16071],{"class":5196}," h",[92,16073,109],{"class":102},[92,16075,16076],{"class":94,"line":1290},[92,16077,2009],{"class":102},[92,16079,16080,16083,16085],{"class":94,"line":1296},[92,16081,16082],{"class":102},"        m_L",[92,16084,148],{"class":98},[92,16086,16087],{"class":102},"l;\n",[92,16089,16090,16093,16095],{"class":94,"line":1308},[92,16091,16092],{"class":102},"        m_W",[92,16094,148],{"class":98},[92,16096,16097],{"class":102},"w;\n",[92,16099,16100,16103,16105],{"class":94,"line":1591},[92,16101,16102],{"class":102},"        m_H",[92,16104,148],{"class":98},[92,16106,16107],{"class":102},"h;\n",[92,16109,16110],{"class":94,"line":1596},[92,16111,2166],{"class":102},[92,16113,16114,16116,16119],{"class":94,"line":1602},[92,16115,1964],{"class":98},[92,16117,16118],{"class":1942}," mianji",[92,16120,1955],{"class":102},[92,16122,16123],{"class":94,"line":1607},[92,16124,2009],{"class":102},[92,16126,16127,16129,16131,16133,16136,16138,16141,16143,16146,16148,16151,16153,16156,16158],{"class":94,"line":1621},[92,16128,14732],{"class":98},[92,16130,14735],{"class":151},[92,16132,558],{"class":98},[92,16134,16135],{"class":102},"(m_L",[92,16137,558],{"class":98},[92,16139,16140],{"class":102},"m_W ",[92,16142,584],{"class":98},[92,16144,16145],{"class":102}," m_L",[92,16147,558],{"class":98},[92,16149,16150],{"class":102},"m_H ",[92,16152,584],{"class":98},[92,16154,16155],{"class":102}," m_W",[92,16157,558],{"class":98},[92,16159,16160],{"class":102},"m_H);\n",[92,16162,16163],{"class":94,"line":1626},[92,16164,2166],{"class":102},[92,16166,16167,16169,16172],{"class":94,"line":1632},[92,16168,1964],{"class":98},[92,16170,16171],{"class":1942}," tiji",[92,16173,1955],{"class":102},[92,16175,16176],{"class":94,"line":1653},[92,16177,2009],{"class":102},[92,16179,16180,16182,16184,16186,16189,16191],{"class":94,"line":1658},[92,16181,14732],{"class":98},[92,16183,16145],{"class":102},[92,16185,558],{"class":98},[92,16187,16188],{"class":102},"m_W",[92,16190,558],{"class":98},[92,16192,16193],{"class":102},"m_H;\n",[92,16195,16196],{"class":94,"line":1672},[92,16197,2166],{"class":102},[92,16199,16200],{"class":94,"line":1677},[92,16201,16202],{"class":161},"    \u002F\u002F获取长宽高\n",[92,16204,16205,16207,16210],{"class":94,"line":1706},[92,16206,1964],{"class":98},[92,16208,16209],{"class":1942}," getLength",[92,16211,1955],{"class":102},[92,16213,16214],{"class":94,"line":1711},[92,16215,2009],{"class":102},[92,16217,16218,16220],{"class":94,"line":1728},[92,16219,14732],{"class":98},[92,16221,16222],{"class":102}," m_L;\n",[92,16224,16225],{"class":94,"line":1733},[92,16226,2166],{"class":102},[92,16228,16229,16231,16234],{"class":94,"line":1738},[92,16230,1964],{"class":98},[92,16232,16233],{"class":1942}," getWidth",[92,16235,1955],{"class":102},[92,16237,16238],{"class":94,"line":1743},[92,16239,2009],{"class":102},[92,16241,16242,16244],{"class":94,"line":1757},[92,16243,14732],{"class":98},[92,16245,16246],{"class":102}," m_W;\n",[92,16248,16249],{"class":94,"line":1762},[92,16250,2166],{"class":102},[92,16252,16253,16255,16258],{"class":94,"line":2556},[92,16254,1964],{"class":98},[92,16256,16257],{"class":1942}," getHeight",[92,16259,1955],{"class":102},[92,16261,16262],{"class":94,"line":2570},[92,16263,2009],{"class":102},[92,16265,16266,16268],{"class":94,"line":2578},[92,16267,14732],{"class":98},[92,16269,16270],{"class":102}," m_H;\n",[92,16272,16273],{"class":94,"line":2583},[92,16274,2166],{"class":102},[92,16276,16277],{"class":94,"line":2589},[92,16278,16279],{"class":161},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[92,16281,16282,16285,16288,16290,16293,16295],{"class":94,"line":2595},[92,16283,16284],{"class":98},"    bool",[92,16286,16287],{"class":1942}," isEqual",[92,16289,103],{"class":102},[92,16291,16292],{"class":1942},"Cube",[92,16294,2828],{"class":5196},[92,16296,109],{"class":102},[92,16298,16299],{"class":94,"line":2600},[92,16300,2009],{"class":102},[92,16302,16303,16305,16308,16311,16313,16315,16318,16320,16323,16326,16328,16330,16333,16335,16337,16340,16342,16344],{"class":94,"line":7928},[92,16304,2476],{"class":98},[92,16306,16307],{"class":102}," (c.",[92,16309,16310],{"class":1942},"getLength",[92,16312,13030],{"class":102},[92,16314,2928],{"class":98},[92,16316,16317],{"class":102}," m_L ",[92,16319,1694],{"class":98},[92,16321,16322],{"class":102}," c.",[92,16324,16325],{"class":1942},"getWidth",[92,16327,13030],{"class":102},[92,16329,2928],{"class":98},[92,16331,16332],{"class":102}," m_W ",[92,16334,1694],{"class":98},[92,16336,16322],{"class":102},[92,16338,16339],{"class":1942},"getHeight",[92,16341,13030],{"class":102},[92,16343,2928],{"class":98},[92,16345,16346],{"class":102}," m_H)\n",[92,16348,16349],{"class":94,"line":7952},[92,16350,2489],{"class":102},[92,16352,16353,16355,16358],{"class":94,"line":7957},[92,16354,15712],{"class":98},[92,16356,16357],{"class":151}," true",[92,16359,1269],{"class":102},[92,16361,16362],{"class":94,"line":7963},[92,16363,2508],{"class":102},[92,16365,16366],{"class":94,"line":7990},[92,16367,2549],{"class":98},[92,16369,16370],{"class":94,"line":7995},[92,16371,2489],{"class":102},[92,16373,16374,16376,16379],{"class":94,"line":8001},[92,16375,15712],{"class":98},[92,16377,16378],{"class":151}," false",[92,16380,1269],{"class":102},[92,16382,16383],{"class":94,"line":8013},[92,16384,2508],{"class":102},[92,16386,16387],{"class":94,"line":8025},[92,16388,2166],{"class":102},[92,16390,16391],{"class":94,"line":8037},[92,16392,16393],{"class":161},"    \u002F\u002F私有属性\n",[92,16395,16396],{"class":94,"line":9696},[92,16397,15202],{"class":98},[92,16399,16400,16402],{"class":94,"line":9721},[92,16401,1964],{"class":98},[92,16403,16222],{"class":102},[92,16405,16406,16408],{"class":94,"line":9744},[92,16407,1964],{"class":98},[92,16409,16246],{"class":102},[92,16411,16412,16414],{"class":94,"line":9768},[92,16413,1964],{"class":98},[92,16415,16270],{"class":102},[92,16417,16418],{"class":94,"line":9773},[92,16419,2379],{"emptyLinePlaceholder":17},[92,16421,16422],{"class":94,"line":9778},[92,16423,3974],{"class":102},[92,16425,16426],{"class":94,"line":9783},[92,16427,16428],{"class":161},"\u002F\u002F全局函数判断两个立方体是否相等\n",[92,16430,16431,16433,16435,16437,16439,16442,16444,16446,16449],{"class":94,"line":9792},[92,16432,1333],{"class":98},[92,16434,16287],{"class":1942},[92,16436,103],{"class":102},[92,16438,16292],{"class":1942},[92,16440,16441],{"class":5196}," c1",[92,16443,481],{"class":102},[92,16445,16292],{"class":1942},[92,16447,16448],{"class":5196}," c2",[92,16450,109],{"class":102},[92,16452,16453],{"class":94,"line":9797},[92,16454,1525],{"class":102},[92,16456,16457,16459,16462,16464,16466,16468,16471,16473,16476,16478,16480,16482,16484,16486,16488,16490,16492,16494,16496,16498,16500,16502,16504,16506],{"class":94,"line":9803},[92,16458,4069],{"class":98},[92,16460,16461],{"class":102}," (c1.",[92,16463,16310],{"class":1942},[92,16465,13030],{"class":102},[92,16467,2928],{"class":98},[92,16469,16470],{"class":102}," c2.",[92,16472,16310],{"class":1942},[92,16474,16475],{"class":102},"()) ",[92,16477,1694],{"class":98},[92,16479,16461],{"class":102},[92,16481,16325],{"class":1942},[92,16483,13030],{"class":102},[92,16485,2928],{"class":98},[92,16487,16470],{"class":102},[92,16489,16325],{"class":1942},[92,16491,16475],{"class":102},[92,16493,1694],{"class":98},[92,16495,16461],{"class":102},[92,16497,16339],{"class":1942},[92,16499,13030],{"class":102},[92,16501,2928],{"class":98},[92,16503,16470],{"class":102},[92,16505,16339],{"class":1942},[92,16507,16508],{"class":102},"());\n",[92,16510,16511],{"class":94,"line":9824},[92,16512,1544],{"class":102},[92,16514,16515,16517,16519],{"class":94,"line":9830},[92,16516,106],{"class":98},[92,16518,1952],{"class":1942},[92,16520,1955],{"class":102},[92,16522,16523],{"class":94,"line":9844},[92,16524,1525],{"class":102},[92,16526,16527],{"class":94,"line":9850},[92,16528,16529],{"class":102},"    Cube c1;\n",[92,16531,16532],{"class":94,"line":9877},[92,16533,16534],{"class":161},"    \u002F\u002F输入立方体的长宽高\n",[92,16536,16537,16539,16541,16544,16546],{"class":94,"line":9886},[92,16538,1530],{"class":102},[92,16540,1147],{"class":98},[92,16542,16543],{"class":207},"\"请输入第一个立方体的长、宽、高：\"",[92,16545,1147],{"class":98},[92,16547,1170],{"class":102},[92,16549,16550,16552],{"class":94,"line":9892},[92,16551,1964],{"class":98},[92,16553,16554],{"class":102}," l,w,h,l1,w1,h1;\n",[92,16556,16557,16559,16561,16563,16565,16567,16569],{"class":94,"line":9900},[92,16558,1991],{"class":102},[92,16560,1408],{"class":98},[92,16562,621],{"class":102},[92,16564,1408],{"class":98},[92,16566,898],{"class":102},[92,16568,1408],{"class":98},[92,16570,16107],{"class":102},[92,16572,16573,16576,16579],{"class":94,"line":9905},[92,16574,16575],{"class":102},"    c1.",[92,16577,16578],{"class":1942},"setLwh",[92,16580,16581],{"class":102},"(l,w,h);\n",[92,16583,16585],{"class":94,"line":16584},66,[92,16586,16587],{"class":161},"    \u002F\u002F面积\n",[92,16589,16591,16593,16595,16598,16600,16602,16605,16607,16609],{"class":94,"line":16590},67,[92,16592,1530],{"class":102},[92,16594,1147],{"class":98},[92,16596,16597],{"class":207},"\"立方体的表面积为：\"",[92,16599,1147],{"class":98},[92,16601,14810],{"class":102},[92,16603,16604],{"class":1942},"mianji",[92,16606,2406],{"class":102},[92,16608,1147],{"class":98},[92,16610,1170],{"class":102},[92,16612,16614],{"class":94,"line":16613},68,[92,16615,16616],{"class":161},"    \u002F\u002F体积\n",[92,16618,16620,16622,16624,16627,16629,16631,16634,16636,16638],{"class":94,"line":16619},69,[92,16621,1530],{"class":102},[92,16623,1147],{"class":98},[92,16625,16626],{"class":207},"\"立方体的体积为：\"",[92,16628,1147],{"class":98},[92,16630,14810],{"class":102},[92,16632,16633],{"class":1942},"tiji",[92,16635,2406],{"class":102},[92,16637,1147],{"class":98},[92,16639,1170],{"class":102},[92,16641,16643,16645,16647,16650,16652],{"class":94,"line":16642},70,[92,16644,1530],{"class":102},[92,16646,1147],{"class":98},[92,16648,16649],{"class":207},"\"请输入第二个立方体的长、宽、高：\"",[92,16651,1147],{"class":98},[92,16653,1170],{"class":102},[92,16655,16657,16659,16661,16664,16666,16669,16671],{"class":94,"line":16656},71,[92,16658,1991],{"class":102},[92,16660,1408],{"class":98},[92,16662,16663],{"class":102},"l1",[92,16665,1408],{"class":98},[92,16667,16668],{"class":102},"w1",[92,16670,1408],{"class":98},[92,16672,16673],{"class":102},"h1;\n",[92,16675,16677],{"class":94,"line":16676},72,[92,16678,16679],{"class":102},"    Cube c2;\n",[92,16681,16683,16686,16688],{"class":94,"line":16682},73,[92,16684,16685],{"class":102},"    c2.",[92,16687,16578],{"class":1942},[92,16689,16690],{"class":102},"(l1,w1,h1);\n",[92,16692,16694,16696,16698,16701,16703,16706,16708,16710,16712],{"class":94,"line":16693},74,[92,16695,1530],{"class":102},[92,16697,1147],{"class":98},[92,16699,16700],{"class":207},"\"第二个立方体的表面积为：\"",[92,16702,1147],{"class":98},[92,16704,16705],{"class":102},"c2.",[92,16707,16604],{"class":1942},[92,16709,2406],{"class":102},[92,16711,1147],{"class":98},[92,16713,1170],{"class":102},[92,16715,16717,16719,16721,16724,16726,16728,16730,16732,16734],{"class":94,"line":16716},75,[92,16718,1530],{"class":102},[92,16720,1147],{"class":98},[92,16722,16723],{"class":207},"\"第二个立方体的体积为：\"",[92,16725,1147],{"class":98},[92,16727,16705],{"class":102},[92,16729,16633],{"class":1942},[92,16731,2406],{"class":102},[92,16733,1147],{"class":98},[92,16735,1170],{"class":102},[92,16737,16739],{"class":94,"line":16738},76,[92,16740,2379],{"emptyLinePlaceholder":17},[92,16742,16744],{"class":94,"line":16743},77,[92,16745,16746],{"class":161},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[92,16748,16750,16752,16754,16757,16759],{"class":94,"line":16749},78,[92,16751,1530],{"class":102},[92,16753,1147],{"class":98},[92,16755,16756],{"class":207},"\"内部函数判断结果：\"",[92,16758,1147],{"class":98},[92,16760,1170],{"class":102},[92,16762,16764,16766,16768,16771],{"class":94,"line":16763},79,[92,16765,3080],{"class":98},[92,16767,16461],{"class":102},[92,16769,16770],{"class":1942},"isEqual",[92,16772,16773],{"class":102},"(c2))\n",[92,16775,16777],{"class":94,"line":16776},80,[92,16778,2009],{"class":102},[92,16780,16782,16784,16786,16789,16791],{"class":94,"line":16781},81,[92,16783,3430],{"class":102},[92,16785,1147],{"class":98},[92,16787,16788],{"class":207},"\"两个立方体相等\"",[92,16790,1147],{"class":98},[92,16792,1170],{"class":102},[92,16794,16796],{"class":94,"line":16795},82,[92,16797,2166],{"class":102},[92,16799,16801],{"class":94,"line":16800},83,[92,16802,16803],{"class":98},"    else\n",[92,16805,16807],{"class":94,"line":16806},84,[92,16808,2009],{"class":102},[92,16810,16812,16814,16816,16819,16821],{"class":94,"line":16811},85,[92,16813,3430],{"class":102},[92,16815,1147],{"class":98},[92,16817,16818],{"class":207},"\"两个立方体不相等\"",[92,16820,1147],{"class":98},[92,16822,1170],{"class":102},[92,16824,16826],{"class":94,"line":16825},86,[92,16827,2166],{"class":102},[92,16829,16831],{"class":94,"line":16830},87,[92,16832,2379],{"emptyLinePlaceholder":17},[92,16834,16836,16838,16840,16843,16845],{"class":94,"line":16835},88,[92,16837,1530],{"class":102},[92,16839,1147],{"class":98},[92,16841,16842],{"class":207},"\"全局函数判断结果：\"",[92,16844,1147],{"class":98},[92,16846,1170],{"class":102},[92,16848,16850,16852,16854,16856],{"class":94,"line":16849},89,[92,16851,3080],{"class":98},[92,16853,1637],{"class":102},[92,16855,16770],{"class":1942},[92,16857,16858],{"class":102},"(c1, c2))\n",[92,16860,16862],{"class":94,"line":16861},90,[92,16863,2009],{"class":102},[92,16865,16867,16869,16871,16873,16875],{"class":94,"line":16866},91,[92,16868,3430],{"class":102},[92,16870,1147],{"class":98},[92,16872,16788],{"class":207},[92,16874,1147],{"class":98},[92,16876,1170],{"class":102},[92,16878,16880],{"class":94,"line":16879},92,[92,16881,2166],{"class":102},[92,16883,16885],{"class":94,"line":16884},93,[92,16886,16803],{"class":98},[92,16888,16890],{"class":94,"line":16889},94,[92,16891,2009],{"class":102},[92,16893,16895,16897,16899,16901,16903],{"class":94,"line":16894},95,[92,16896,3430],{"class":102},[92,16898,1147],{"class":98},[92,16900,16818],{"class":207},[92,16902,1147],{"class":98},[92,16904,1170],{"class":102},[92,16906,16908],{"class":94,"line":16907},96,[92,16909,2166],{"class":102},[92,16911,16913],{"class":94,"line":16912},97,[92,16914,1544],{"class":102},[46,16916,16917],{"start":11},[49,16918,16919],{},[252,16920,16921],{},"练习案例2：点和圆的关系",[1110,16923,16924],{},[49,16925,16926],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[83,16928,16930],{"className":85,"code":16929,"language":87,"meta":10,"style":10},"#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",[89,16931,16932,16938,16948,16955,16962,16966,16970,16975,17009,17014,17030,17044,17048,17052,17059,17066,17070,17076,17080,17084,17088,17110,17133,17138,17152,17167,17171,17175,17181,17186,17191,17195,17221,17225,17255,17283,17311,17328,17332,17345,17349,17353,17357,17370,17374,17378,17386,17390,17394,17398,17403,17407,17418,17425,17434,17444,17455,17462,17475,17486,17496,17507,17514,17528,17533,17543,17551],{"__ignoreMap":10},[92,16933,16934,16936],{"class":94,"line":95},[92,16935,1928],{"class":98},[92,16937,1931],{"class":207},[92,16939,16940,16942,16944,16946],{"class":94,"line":11},[92,16941,1936],{"class":98},[92,16943,1939],{"class":98},[92,16945,1943],{"class":1942},[92,16947,1269],{"class":102},[92,16949,16950,16952],{"class":94,"line":1158},[92,16951,1928],{"class":98},[92,16953,16954],{"class":207},"\u003Ccmath>\n",[92,16956,16957,16959],{"class":94,"line":1173},[92,16958,14674],{"class":98},[92,16960,16961],{"class":1942}," Point\n",[92,16963,16964],{"class":94,"line":1179},[92,16965,1525],{"class":102},[92,16967,16968],{"class":94,"line":1193},[92,16969,14696],{"class":98},[92,16971,16972],{"class":94,"line":1199},[92,16973,16974],{"class":161},"    \u002F\u002F赋值\n",[92,16976,16977,16979,16982,16984,16986,16989,16991,16993,16996,16999,17001,17004,17006],{"class":94,"line":1290},[92,16978,14889],{"class":98},[92,16980,16981],{"class":1942}," setPoint",[92,16983,103],{"class":102},[92,16985,14017],{"class":98},[92,16987,16988],{"class":5196}," x",[92,16990,12415],{"class":102},[92,16992,14017],{"class":98},[92,16994,16995],{"class":5196}," y",[92,16997,16998],{"class":102},") { m_x ",[92,17000,148],{"class":98},[92,17002,17003],{"class":102}," x; m_y ",[92,17005,148],{"class":98},[92,17007,17008],{"class":102}," y; }\n",[92,17010,17011],{"class":94,"line":1296},[92,17012,17013],{"class":161},"    \u002F\u002F获取坐标\n",[92,17015,17016,17018,17021,17024,17027],{"class":94,"line":1308},[92,17017,14718],{"class":98},[92,17019,17020],{"class":1942}," getX",[92,17022,17023],{"class":102},"() { ",[92,17025,17026],{"class":98},"return",[92,17028,17029],{"class":102}," m_x; }\n",[92,17031,17032,17034,17037,17039,17041],{"class":94,"line":1591},[92,17033,14718],{"class":98},[92,17035,17036],{"class":1942}," getY",[92,17038,17023],{"class":102},[92,17040,17026],{"class":98},[92,17042,17043],{"class":102}," m_y; }\n",[92,17045,17046],{"class":94,"line":1596},[92,17047,2379],{"emptyLinePlaceholder":17},[92,17049,17050],{"class":94,"line":1602},[92,17051,15202],{"class":98},[92,17053,17054,17056],{"class":94,"line":1607},[92,17055,14718],{"class":98},[92,17057,17058],{"class":102}," m_x;\n",[92,17060,17061,17063],{"class":94,"line":1621},[92,17062,14718],{"class":98},[92,17064,17065],{"class":102}," m_y;\n",[92,17067,17068],{"class":94,"line":1626},[92,17069,3974],{"class":102},[92,17071,17072,17074],{"class":94,"line":1632},[92,17073,14674],{"class":98},[92,17075,14677],{"class":1942},[92,17077,17078],{"class":94,"line":1653},[92,17079,1525],{"class":102},[92,17081,17082],{"class":94,"line":1658},[92,17083,14696],{"class":98},[92,17085,17086],{"class":94,"line":1672},[92,17087,16974],{"class":161},[92,17089,17090,17092,17095,17097,17099,17102,17105,17107],{"class":94,"line":1677},[92,17091,14889],{"class":98},[92,17093,17094],{"class":1942}," setRadius",[92,17096,103],{"class":102},[92,17098,14017],{"class":98},[92,17100,17101],{"class":5196}," r",[92,17103,17104],{"class":102},") { m_r ",[92,17106,148],{"class":98},[92,17108,17109],{"class":102}," r; }\n",[92,17111,17112,17114,17117,17119,17122,17125,17128,17130],{"class":94,"line":1706},[92,17113,14889],{"class":98},[92,17115,17116],{"class":1942}," setCenter",[92,17118,103],{"class":102},[92,17120,17121],{"class":1942},"Point",[92,17123,17124],{"class":5196}," center",[92,17126,17127],{"class":102},") { m_center ",[92,17129,148],{"class":98},[92,17131,17132],{"class":102}," center; }\n",[92,17134,17135],{"class":94,"line":1711},[92,17136,17137],{"class":161},"    \u002F\u002F获取属性\n",[92,17139,17140,17142,17145,17147,17149],{"class":94,"line":1728},[92,17141,14718],{"class":98},[92,17143,17144],{"class":1942}," getRadius",[92,17146,17023],{"class":102},[92,17148,17026],{"class":98},[92,17150,17151],{"class":102}," m_r; }\n",[92,17153,17154,17157,17160,17162,17164],{"class":94,"line":1733},[92,17155,17156],{"class":1942},"    Point",[92,17158,17159],{"class":1942}," getCenter",[92,17161,17023],{"class":102},[92,17163,17026],{"class":98},[92,17165,17166],{"class":102}," m_center; }\n",[92,17168,17169],{"class":94,"line":1738},[92,17170,2379],{"emptyLinePlaceholder":17},[92,17172,17173],{"class":94,"line":1743},[92,17174,15202],{"class":98},[92,17176,17177,17179],{"class":94,"line":1757},[92,17178,14718],{"class":98},[92,17180,14708],{"class":102},[92,17182,17183],{"class":94,"line":1762},[92,17184,17185],{"class":161},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[92,17187,17188],{"class":94,"line":2556},[92,17189,17190],{"class":102},"    Point m_center;\n",[92,17192,17193],{"class":94,"line":2570},[92,17194,3974],{"class":102},[92,17196,17197,17199,17202,17204,17207,17209,17211,17213,17215,17217,17219],{"class":94,"line":2578},[92,17198,5344],{"class":98},[92,17200,17201],{"class":1942}," isInCircle",[92,17203,103],{"class":102},[92,17205,17206],{"class":1942},"Circle",[92,17208,10564],{"class":98},[92,17210,391],{"class":5196},[92,17212,481],{"class":102},[92,17214,17121],{"class":1942},[92,17216,10564],{"class":98},[92,17218,38],{"class":5196},[92,17220,109],{"class":102},[92,17222,17223],{"class":94,"line":2583},[92,17224,1525],{"class":102},[92,17226,17227,17229,17232,17234,17236,17239,17242,17245,17247,17249,17251,17253],{"class":94,"line":2589},[92,17228,14718],{"class":98},[92,17230,17231],{"class":102}," dx ",[92,17233,148],{"class":98},[92,17235,16322],{"class":102},[92,17237,17238],{"class":1942},"getCenter",[92,17240,17241],{"class":102},"().",[92,17243,17244],{"class":1942},"getX",[92,17246,13030],{"class":102},[92,17248,635],{"class":98},[92,17250,15868],{"class":102},[92,17252,17244],{"class":1942},[92,17254,5616],{"class":102},[92,17256,17257,17259,17262,17264,17266,17268,17270,17273,17275,17277,17279,17281],{"class":94,"line":2595},[92,17258,14718],{"class":98},[92,17260,17261],{"class":102}," dy ",[92,17263,148],{"class":98},[92,17265,16322],{"class":102},[92,17267,17238],{"class":1942},[92,17269,17241],{"class":102},[92,17271,17272],{"class":1942},"getY",[92,17274,13030],{"class":102},[92,17276,635],{"class":98},[92,17278,15868],{"class":102},[92,17280,17272],{"class":1942},[92,17282,5616],{"class":102},[92,17284,17285,17287,17290,17292,17295,17298,17300,17302,17304,17306,17308],{"class":94,"line":2600},[92,17286,14718],{"class":98},[92,17288,17289],{"class":102}," distance ",[92,17291,148],{"class":98},[92,17293,17294],{"class":1942}," sqrt",[92,17296,17297],{"class":102},"(dx ",[92,17299,558],{"class":98},[92,17301,17231],{"class":102},[92,17303,584],{"class":98},[92,17305,17261],{"class":102},[92,17307,558],{"class":98},[92,17309,17310],{"class":102}," dy);\n",[92,17312,17313,17315,17318,17320,17322,17325],{"class":94,"line":7928},[92,17314,3080],{"class":98},[92,17316,17317],{"class":102}," (distance ",[92,17319,1013],{"class":98},[92,17321,16322],{"class":102},[92,17323,17324],{"class":1942},"getRadius",[92,17326,17327],{"class":102},"())\n",[92,17329,17330],{"class":94,"line":7952},[92,17331,2009],{"class":102},[92,17333,17334,17336,17338,17341,17343],{"class":94,"line":7957},[92,17335,9649],{"class":102},[92,17337,1147],{"class":98},[92,17339,17340],{"class":207}," \"点在圆内\"",[92,17342,1423],{"class":98},[92,17344,8820],{"class":102},[92,17346,17347],{"class":94,"line":7963},[92,17348,2166],{"class":102},[92,17350,17351],{"class":94,"line":7990},[92,17352,16803],{"class":98},[92,17354,17355],{"class":94,"line":7995},[92,17356,2009],{"class":102},[92,17358,17359,17361,17363,17366,17368],{"class":94,"line":8001},[92,17360,9649],{"class":102},[92,17362,1147],{"class":98},[92,17364,17365],{"class":207}," \"点在圆外\"",[92,17367,1423],{"class":98},[92,17369,8820],{"class":102},[92,17371,17372],{"class":94,"line":8013},[92,17373,2166],{"class":102},[92,17375,17376],{"class":94,"line":8025},[92,17377,1544],{"class":102},[92,17379,17380,17382,17384],{"class":94,"line":8037},[92,17381,106],{"class":98},[92,17383,1952],{"class":1942},[92,17385,1955],{"class":102},[92,17387,17388],{"class":94,"line":9696},[92,17389,1525],{"class":102},[92,17391,17392],{"class":94,"line":9721},[92,17393,15033],{"class":161},[92,17395,17396],{"class":94,"line":9744},[92,17397,14780],{"class":102},[92,17399,17400],{"class":94,"line":9768},[92,17401,17402],{"class":102},"    Point p1;\n",[92,17404,17405],{"class":94,"line":9773},[92,17406,16974],{"class":161},[92,17408,17409,17411,17413,17416],{"class":94,"line":9778},[92,17410,1530],{"class":102},[92,17412,1147],{"class":98},[92,17414,17415],{"class":207},"\"请输入圆的半径：\"",[92,17417,1269],{"class":102},[92,17419,17420,17422],{"class":94,"line":9783},[92,17421,14718],{"class":98},[92,17423,17424],{"class":102}," r;\n",[92,17426,17427,17429,17431],{"class":94,"line":9792},[92,17428,1991],{"class":102},[92,17430,1408],{"class":98},[92,17432,17433],{"class":102},"r;\n",[92,17435,17436,17438,17441],{"class":94,"line":9797},[92,17437,16575],{"class":102},[92,17439,17440],{"class":1942},"setRadius",[92,17442,17443],{"class":102},"(r);\n",[92,17445,17446,17448,17450,17453],{"class":94,"line":9803},[92,17447,1530],{"class":102},[92,17449,1147],{"class":98},[92,17451,17452],{"class":207},"\"请输入圆心坐标：\"",[92,17454,1269],{"class":102},[92,17456,17457,17459],{"class":94,"line":9824},[92,17458,14718],{"class":98},[92,17460,17461],{"class":102}," x, y;\n",[92,17463,17464,17466,17468,17470,17472],{"class":94,"line":9830},[92,17465,1991],{"class":102},[92,17467,1408],{"class":98},[92,17469,923],{"class":102},[92,17471,1408],{"class":98},[92,17473,17474],{"class":102},"y;\n",[92,17476,17477,17480,17483],{"class":94,"line":9844},[92,17478,17479],{"class":102},"    p1.",[92,17481,17482],{"class":1942},"setPoint",[92,17484,17485],{"class":102},"(x, y);\n",[92,17487,17488,17490,17493],{"class":94,"line":9850},[92,17489,16575],{"class":102},[92,17491,17492],{"class":1942},"setCenter",[92,17494,17495],{"class":102},"(p1);\n",[92,17497,17498,17500,17502,17505],{"class":94,"line":9877},[92,17499,1530],{"class":102},[92,17501,1147],{"class":98},[92,17503,17504],{"class":207},"\"请输入测试点坐标：\"",[92,17506,1269],{"class":102},[92,17508,17509,17511],{"class":94,"line":9886},[92,17510,14718],{"class":98},[92,17512,17513],{"class":102}," x1, y1;\n",[92,17515,17516,17518,17520,17523,17525],{"class":94,"line":9892},[92,17517,1991],{"class":102},[92,17519,1408],{"class":98},[92,17521,17522],{"class":102},"x1",[92,17524,1408],{"class":98},[92,17526,17527],{"class":102},"y1;\n",[92,17529,17530],{"class":94,"line":9900},[92,17531,17532],{"class":102},"    Point p2;\n",[92,17534,17535,17538,17540],{"class":94,"line":9905},[92,17536,17537],{"class":102},"    p2.",[92,17539,17482],{"class":1942},[92,17541,17542],{"class":102},"(x1, y1);\n",[92,17544,17545,17548],{"class":94,"line":16584},[92,17546,17547],{"class":1942},"    isInCircle",[92,17549,17550],{"class":102},"(c1, p2);\n",[92,17552,17553],{"class":94,"line":16590},[92,17554,1544],{"class":102},[38,17556,17557],{},"在类中可以让另一个类作为本来的成员",[38,17559,17560],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[38,17562,17563],{},"创建point.h",[83,17565,17567],{"className":85,"code":17566,"language":87,"meta":10,"style":10},"#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",[89,17568,17569,17580,17586,17596,17602,17606,17611,17615,17619,17639,17643,17651,17659,17663,17667,17673,17679],{"__ignoreMap":10},[92,17570,17571,17574,17577],{"class":94,"line":95},[92,17572,17573],{"class":98},"#pragma",[92,17575,17576],{"class":1942}," once",[92,17578,17579],{"class":161}," \u002F\u002F防止头文件重复包含\n",[92,17581,17582,17584],{"class":94,"line":11},[92,17583,1928],{"class":98},[92,17585,1931],{"class":207},[92,17587,17588,17590,17592,17594],{"class":94,"line":1158},[92,17589,1936],{"class":98},[92,17591,1939],{"class":98},[92,17593,1943],{"class":1942},[92,17595,1269],{"class":102},[92,17597,17598,17600],{"class":94,"line":1173},[92,17599,14674],{"class":98},[92,17601,16961],{"class":1942},[92,17603,17604],{"class":94,"line":1179},[92,17605,1525],{"class":102},[92,17607,17608],{"class":94,"line":1193},[92,17609,17610],{"class":161},"\u002F\u002F做好声明与变量定义就可以\n",[92,17612,17613],{"class":94,"line":1199},[92,17614,14696],{"class":98},[92,17616,17617],{"class":94,"line":1290},[92,17618,16974],{"class":161},[92,17620,17621,17623,17625,17627,17629,17631,17633,17635,17637],{"class":94,"line":1296},[92,17622,14889],{"class":98},[92,17624,16981],{"class":1942},[92,17626,103],{"class":102},[92,17628,14017],{"class":98},[92,17630,16988],{"class":5196},[92,17632,12415],{"class":102},[92,17634,14017],{"class":98},[92,17636,16995],{"class":5196},[92,17638,2698],{"class":102},[92,17640,17641],{"class":94,"line":1308},[92,17642,17013],{"class":161},[92,17644,17645,17647,17649],{"class":94,"line":1591},[92,17646,14718],{"class":98},[92,17648,17020],{"class":1942},[92,17650,5616],{"class":102},[92,17652,17653,17655,17657],{"class":94,"line":1596},[92,17654,14718],{"class":98},[92,17656,17036],{"class":1942},[92,17658,5616],{"class":102},[92,17660,17661],{"class":94,"line":1602},[92,17662,2379],{"emptyLinePlaceholder":17},[92,17664,17665],{"class":94,"line":1607},[92,17666,15202],{"class":98},[92,17668,17669,17671],{"class":94,"line":1621},[92,17670,14718],{"class":98},[92,17672,17058],{"class":102},[92,17674,17675,17677],{"class":94,"line":1626},[92,17676,14718],{"class":98},[92,17678,17065],{"class":102},[92,17680,17681],{"class":94,"line":1632},[92,17682,3974],{"class":102},[38,17684,17685],{},"创建point.cpp",[83,17687,17689],{"className":85,"code":17688,"language":87,"meta":10,"style":10},"#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",[89,17690,17691,17698,17703,17737,17741,17757],{"__ignoreMap":10},[92,17692,17693,17695],{"class":94,"line":95},[92,17694,1928],{"class":98},[92,17696,17697],{"class":207},"\u003Cpoint.h>\n",[92,17699,17700],{"class":94,"line":11},[92,17701,17702],{"class":161},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[92,17704,17705,17707,17710,17713,17715,17717,17719,17721,17723,17725,17727,17729,17731,17733,17735],{"class":94,"line":1158},[92,17706,14889],{"class":98},[92,17708,17709],{"class":1942}," Point",[92,17711,17712],{"class":102},"::",[92,17714,17482],{"class":1942},[92,17716,103],{"class":102},[92,17718,14017],{"class":98},[92,17720,16988],{"class":5196},[92,17722,12415],{"class":102},[92,17724,14017],{"class":98},[92,17726,16995],{"class":5196},[92,17728,16998],{"class":102},[92,17730,148],{"class":98},[92,17732,17003],{"class":102},[92,17734,148],{"class":98},[92,17736,17008],{"class":102},[92,17738,17739],{"class":94,"line":1173},[92,17740,17013],{"class":161},[92,17742,17743,17745,17747,17749,17751,17753,17755],{"class":94,"line":1179},[92,17744,14718],{"class":98},[92,17746,17709],{"class":1942},[92,17748,17712],{"class":102},[92,17750,17244],{"class":1942},[92,17752,17023],{"class":102},[92,17754,17026],{"class":98},[92,17756,17029],{"class":102},[92,17758,17759,17761,17763,17765,17767,17769,17771],{"class":94,"line":1193},[92,17760,14718],{"class":98},[92,17762,17709],{"class":1942},[92,17764,17712],{"class":102},[92,17766,17272],{"class":1942},[92,17768,17023],{"class":102},[92,17770,17026],{"class":98},[92,17772,17043],{"class":102},[38,17774,17775],{},"创建circle.h",[83,17777,17779],{"className":85,"code":17778,"language":87,"meta":10,"style":10},"#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",[89,17780,17781,17788,17794,17804,17810,17816,17820,17824,17828,17842,17856,17860,17868,17876,17880,17884,17890,17894,17898],{"__ignoreMap":10},[92,17782,17783,17785],{"class":94,"line":95},[92,17784,17573],{"class":98},[92,17786,17787],{"class":1942}," once\n",[92,17789,17790,17792],{"class":94,"line":11},[92,17791,1928],{"class":98},[92,17793,1931],{"class":207},[92,17795,17796,17798,17800,17802],{"class":94,"line":1158},[92,17797,1936],{"class":98},[92,17799,1939],{"class":98},[92,17801,1943],{"class":1942},[92,17803,1269],{"class":102},[92,17805,17806,17808],{"class":94,"line":1173},[92,17807,1928],{"class":98},[92,17809,17697],{"class":207},[92,17811,17812,17814],{"class":94,"line":1179},[92,17813,14674],{"class":98},[92,17815,14677],{"class":1942},[92,17817,17818],{"class":94,"line":1193},[92,17819,1525],{"class":102},[92,17821,17822],{"class":94,"line":1199},[92,17823,14696],{"class":98},[92,17825,17826],{"class":94,"line":1290},[92,17827,16974],{"class":161},[92,17829,17830,17832,17834,17836,17838,17840],{"class":94,"line":1296},[92,17831,14889],{"class":98},[92,17833,17094],{"class":1942},[92,17835,103],{"class":102},[92,17837,14017],{"class":98},[92,17839,17101],{"class":5196},[92,17841,2698],{"class":102},[92,17843,17844,17846,17848,17850,17852,17854],{"class":94,"line":1308},[92,17845,14889],{"class":98},[92,17847,17116],{"class":1942},[92,17849,103],{"class":102},[92,17851,17121],{"class":1942},[92,17853,17124],{"class":5196},[92,17855,2698],{"class":102},[92,17857,17858],{"class":94,"line":1591},[92,17859,17137],{"class":161},[92,17861,17862,17864,17866],{"class":94,"line":1596},[92,17863,14718],{"class":98},[92,17865,17144],{"class":1942},[92,17867,5616],{"class":102},[92,17869,17870,17872,17874],{"class":94,"line":1602},[92,17871,17156],{"class":1942},[92,17873,17159],{"class":1942},[92,17875,5616],{"class":102},[92,17877,17878],{"class":94,"line":1607},[92,17879,2379],{"emptyLinePlaceholder":17},[92,17881,17882],{"class":94,"line":1621},[92,17883,15202],{"class":98},[92,17885,17886,17888],{"class":94,"line":1626},[92,17887,14718],{"class":98},[92,17889,14708],{"class":102},[92,17891,17892],{"class":94,"line":1632},[92,17893,17185],{"class":161},[92,17895,17896],{"class":94,"line":1653},[92,17897,17190],{"class":102},[92,17899,17900],{"class":94,"line":1658},[92,17901,3974],{"class":102},[38,17903,17904],{},"创建circle.cpp",[83,17906,17908],{"className":85,"code":17907,"language":87,"meta":10,"style":10},"#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",[89,17909,17910,17917,17940,17962,17967,17983],{"__ignoreMap":10},[92,17911,17912,17914],{"class":94,"line":95},[92,17913,1928],{"class":98},[92,17915,17916],{"class":207},"\u003Ccircle.h>\n",[92,17918,17919,17921,17924,17926,17928,17930,17932,17934,17936,17938],{"class":94,"line":11},[92,17920,5344],{"class":98},[92,17922,17923],{"class":1942}," Circle",[92,17925,17712],{"class":102},[92,17927,17440],{"class":1942},[92,17929,103],{"class":102},[92,17931,14017],{"class":98},[92,17933,17101],{"class":5196},[92,17935,17104],{"class":102},[92,17937,148],{"class":98},[92,17939,17109],{"class":102},[92,17941,17942,17944,17946,17948,17950,17952,17954,17956,17958,17960],{"class":94,"line":1158},[92,17943,5344],{"class":98},[92,17945,17923],{"class":1942},[92,17947,17712],{"class":102},[92,17949,17492],{"class":1942},[92,17951,103],{"class":102},[92,17953,17121],{"class":1942},[92,17955,17124],{"class":5196},[92,17957,17127],{"class":102},[92,17959,148],{"class":98},[92,17961,17132],{"class":102},[92,17963,17964],{"class":94,"line":1173},[92,17965,17966],{"class":161},"\u002F\u002F获取属性\n",[92,17968,17969,17971,17973,17975,17977,17979,17981],{"class":94,"line":1179},[92,17970,14017],{"class":98},[92,17972,17923],{"class":1942},[92,17974,17712],{"class":102},[92,17976,17324],{"class":1942},[92,17978,17023],{"class":102},[92,17980,17026],{"class":98},[92,17982,17151],{"class":102},[92,17984,17985,17987,17989,17991,17993,17995,17997],{"class":94,"line":1193},[92,17986,17121],{"class":1942},[92,17988,17923],{"class":1942},[92,17990,17712],{"class":102},[92,17992,17238],{"class":1942},[92,17994,17023],{"class":102},[92,17996,17026],{"class":98},[92,17998,17166],{"class":102},[38,18000,18001],{},"使用封装的类",[83,18003,18005],{"className":85,"code":18004,"language":87,"meta":10,"style":10},"#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",[89,18006,18007,18013,18023,18029,18035,18059,18063,18089,18115,18139,18153,18157,18169,18173,18177,18181,18193,18197,18201,18209,18213,18217,18221,18225,18229,18239,18245,18253,18261,18271,18277,18289,18297,18305,18315,18321,18333,18337,18345,18351],{"__ignoreMap":10},[92,18008,18009,18011],{"class":94,"line":95},[92,18010,1928],{"class":98},[92,18012,1931],{"class":207},[92,18014,18015,18017,18019,18021],{"class":94,"line":11},[92,18016,1936],{"class":98},[92,18018,1939],{"class":98},[92,18020,1943],{"class":1942},[92,18022,1269],{"class":102},[92,18024,18025,18027],{"class":94,"line":1158},[92,18026,1928],{"class":98},[92,18028,17916],{"class":207},[92,18030,18031,18033],{"class":94,"line":1173},[92,18032,1928],{"class":98},[92,18034,17697],{"class":207},[92,18036,18037,18039,18041,18043,18045,18047,18049,18051,18053,18055,18057],{"class":94,"line":1179},[92,18038,5344],{"class":98},[92,18040,17201],{"class":1942},[92,18042,103],{"class":102},[92,18044,17206],{"class":1942},[92,18046,10564],{"class":98},[92,18048,391],{"class":5196},[92,18050,481],{"class":102},[92,18052,17121],{"class":1942},[92,18054,10564],{"class":98},[92,18056,38],{"class":5196},[92,18058,109],{"class":102},[92,18060,18061],{"class":94,"line":1193},[92,18062,1525],{"class":102},[92,18064,18065,18067,18069,18071,18073,18075,18077,18079,18081,18083,18085,18087],{"class":94,"line":1199},[92,18066,14718],{"class":98},[92,18068,17231],{"class":102},[92,18070,148],{"class":98},[92,18072,16322],{"class":102},[92,18074,17238],{"class":1942},[92,18076,17241],{"class":102},[92,18078,17244],{"class":1942},[92,18080,13030],{"class":102},[92,18082,635],{"class":98},[92,18084,15868],{"class":102},[92,18086,17244],{"class":1942},[92,18088,5616],{"class":102},[92,18090,18091,18093,18095,18097,18099,18101,18103,18105,18107,18109,18111,18113],{"class":94,"line":1290},[92,18092,14718],{"class":98},[92,18094,17261],{"class":102},[92,18096,148],{"class":98},[92,18098,16322],{"class":102},[92,18100,17238],{"class":1942},[92,18102,17241],{"class":102},[92,18104,17272],{"class":1942},[92,18106,13030],{"class":102},[92,18108,635],{"class":98},[92,18110,15868],{"class":102},[92,18112,17272],{"class":1942},[92,18114,5616],{"class":102},[92,18116,18117,18119,18121,18123,18125,18127,18129,18131,18133,18135,18137],{"class":94,"line":1296},[92,18118,14718],{"class":98},[92,18120,17289],{"class":102},[92,18122,148],{"class":98},[92,18124,17294],{"class":1942},[92,18126,17297],{"class":102},[92,18128,558],{"class":98},[92,18130,17231],{"class":102},[92,18132,584],{"class":98},[92,18134,17261],{"class":102},[92,18136,558],{"class":98},[92,18138,17310],{"class":102},[92,18140,18141,18143,18145,18147,18149,18151],{"class":94,"line":1308},[92,18142,3080],{"class":98},[92,18144,17317],{"class":102},[92,18146,1013],{"class":98},[92,18148,16322],{"class":102},[92,18150,17324],{"class":1942},[92,18152,17327],{"class":102},[92,18154,18155],{"class":94,"line":1591},[92,18156,2009],{"class":102},[92,18158,18159,18161,18163,18165,18167],{"class":94,"line":1596},[92,18160,9649],{"class":102},[92,18162,1147],{"class":98},[92,18164,17340],{"class":207},[92,18166,1423],{"class":98},[92,18168,8820],{"class":102},[92,18170,18171],{"class":94,"line":1602},[92,18172,2166],{"class":102},[92,18174,18175],{"class":94,"line":1607},[92,18176,16803],{"class":98},[92,18178,18179],{"class":94,"line":1621},[92,18180,2009],{"class":102},[92,18182,18183,18185,18187,18189,18191],{"class":94,"line":1626},[92,18184,9649],{"class":102},[92,18186,1147],{"class":98},[92,18188,17365],{"class":207},[92,18190,1423],{"class":98},[92,18192,8820],{"class":102},[92,18194,18195],{"class":94,"line":1632},[92,18196,2166],{"class":102},[92,18198,18199],{"class":94,"line":1653},[92,18200,1544],{"class":102},[92,18202,18203,18205,18207],{"class":94,"line":1658},[92,18204,106],{"class":98},[92,18206,1952],{"class":1942},[92,18208,1955],{"class":102},[92,18210,18211],{"class":94,"line":1672},[92,18212,1525],{"class":102},[92,18214,18215],{"class":94,"line":1677},[92,18216,15033],{"class":161},[92,18218,18219],{"class":94,"line":1706},[92,18220,14780],{"class":102},[92,18222,18223],{"class":94,"line":1711},[92,18224,17402],{"class":102},[92,18226,18227],{"class":94,"line":1728},[92,18228,16974],{"class":161},[92,18230,18231,18233,18235,18237],{"class":94,"line":1733},[92,18232,1530],{"class":102},[92,18234,1147],{"class":98},[92,18236,17415],{"class":207},[92,18238,1269],{"class":102},[92,18240,18241,18243],{"class":94,"line":1738},[92,18242,14718],{"class":98},[92,18244,17424],{"class":102},[92,18246,18247,18249,18251],{"class":94,"line":1743},[92,18248,1991],{"class":102},[92,18250,1408],{"class":98},[92,18252,17433],{"class":102},[92,18254,18255,18257,18259],{"class":94,"line":1757},[92,18256,16575],{"class":102},[92,18258,17440],{"class":1942},[92,18260,17443],{"class":102},[92,18262,18263,18265,18267,18269],{"class":94,"line":1762},[92,18264,1530],{"class":102},[92,18266,1147],{"class":98},[92,18268,17452],{"class":207},[92,18270,1269],{"class":102},[92,18272,18273,18275],{"class":94,"line":2556},[92,18274,14718],{"class":98},[92,18276,17461],{"class":102},[92,18278,18279,18281,18283,18285,18287],{"class":94,"line":2570},[92,18280,1991],{"class":102},[92,18282,1408],{"class":98},[92,18284,923],{"class":102},[92,18286,1408],{"class":98},[92,18288,17474],{"class":102},[92,18290,18291,18293,18295],{"class":94,"line":2578},[92,18292,17479],{"class":102},[92,18294,17482],{"class":1942},[92,18296,17485],{"class":102},[92,18298,18299,18301,18303],{"class":94,"line":2583},[92,18300,16575],{"class":102},[92,18302,17492],{"class":1942},[92,18304,17495],{"class":102},[92,18306,18307,18309,18311,18313],{"class":94,"line":2589},[92,18308,1530],{"class":102},[92,18310,1147],{"class":98},[92,18312,17504],{"class":207},[92,18314,1269],{"class":102},[92,18316,18317,18319],{"class":94,"line":2595},[92,18318,14718],{"class":98},[92,18320,17513],{"class":102},[92,18322,18323,18325,18327,18329,18331],{"class":94,"line":2600},[92,18324,1991],{"class":102},[92,18326,1408],{"class":98},[92,18328,17522],{"class":102},[92,18330,1408],{"class":98},[92,18332,17527],{"class":102},[92,18334,18335],{"class":94,"line":7928},[92,18336,17532],{"class":102},[92,18338,18339,18341,18343],{"class":94,"line":7952},[92,18340,17537],{"class":102},[92,18342,17482],{"class":1942},[92,18344,17542],{"class":102},[92,18346,18347,18349],{"class":94,"line":7957},[92,18348,17547],{"class":1942},[92,18350,17550],{"class":102},[92,18352,18353],{"class":94,"line":7963},[92,18354,1544],{"class":102},[33,18356,18358],{"id":18357},"_82对象的初始化清理","8.2对象的初始化清理",[1110,18360,18361,18364],{},[49,18362,18363],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[49,18365,18366],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[63,18368,18370],{"id":18369},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[38,18372,18373,18374,18377],{},"对象的",[252,18375,18376],{},"初始化和清理","也是两个非常重要的安全问题",[38,18379,18380],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[38,18382,18383],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[38,18385,18386,18387,18390,18391,18394],{},"c++利用了",[252,18388,18389],{},"构造函数","和",[252,18392,18393],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[38,18396,18397,18398],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[252,18399,18400],{},"我们不提供构造和析构，编译器会提供",[38,18402,18403],{},[252,18404,18405],{},"编译器提供的构造函数和析构函数是空实现。",[1110,18407,18408,18411],{},[49,18409,18410],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[49,18412,18413,18414,18417],{},"析构函数：主要作用在于对象",[252,18415,18416],{},"销毁前","系统自动调用，执行一些清理工作。",[38,18419,18420,18423],{},[252,18421,18422],{},"构造函数语法：",[89,18424,18425],{},"类名(){}",[46,18427,18428,18431,18434,18437,18440],{},[49,18429,18430],{},"构造函数，没有返回值也不写void",[49,18432,18433],{},"函数名称与类名相同",[49,18435,18436],{},"构造函数可以有参数，因此可以发生重载",[49,18438,18439],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[49,18441,18442,18443,532],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[89,18444,18445],{},"Person(){}",[38,18447,18448,13775,18451],{},[252,18449,18450],{},"析构函数语法：",[89,18452,18453],{},"~类名(){}",[46,18455,18456,18459,18462,18468],{},[49,18457,18458],{},"析构函数，没有返回值也不写void",[49,18460,18461],{},"函数名称与类名相同,在名称前加上符号  ~",[49,18463,18464,18465],{},"析构函数不可以有参数，因此",[252,18466,18467],{},"不可以发生重载",[49,18469,18470],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[83,18472,18474],{"className":85,"code":18473,"language":87,"meta":10,"style":10},"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",[89,18475,18476,18482,18486,18490,18495,18502,18506,18519,18523,18528,18535,18539,18552,18556,18560,18564,18568,18576,18580,18588,18592,18596,18604,18608,18613,18617,18624,18628,18641,18645,18653],{"__ignoreMap":10},[92,18477,18478,18480],{"class":94,"line":95},[92,18479,14674],{"class":98},[92,18481,15151],{"class":1942},[92,18483,18484],{"class":94,"line":11},[92,18485,1525],{"class":102},[92,18487,18488],{"class":94,"line":1158},[92,18489,14696],{"class":98},[92,18491,18492],{"class":94,"line":1173},[92,18493,18494],{"class":161},"    \u002F\u002F构造函数\n",[92,18496,18497,18500],{"class":94,"line":1179},[92,18498,18499],{"class":1942},"    Person",[92,18501,1955],{"class":102},[92,18503,18504],{"class":94,"line":1193},[92,18505,2009],{"class":102},[92,18507,18508,18510,18512,18515,18517],{"class":94,"line":1199},[92,18509,9649],{"class":102},[92,18511,1147],{"class":98},[92,18513,18514],{"class":207}," \"Person的构造函数调用\"",[92,18516,1423],{"class":98},[92,18518,8820],{"class":102},[92,18520,18521],{"class":94,"line":1290},[92,18522,2166],{"class":102},[92,18524,18525],{"class":94,"line":1296},[92,18526,18527],{"class":161},"    \u002F\u002F析构函数\n",[92,18529,18530,18533],{"class":94,"line":1308},[92,18531,18532],{"class":1942},"    ~Person",[92,18534,1955],{"class":102},[92,18536,18537],{"class":94,"line":1591},[92,18538,2009],{"class":102},[92,18540,18541,18543,18545,18548,18550],{"class":94,"line":1596},[92,18542,9649],{"class":102},[92,18544,1147],{"class":98},[92,18546,18547],{"class":207}," \"Person的析构函数调用\"",[92,18549,1423],{"class":98},[92,18551,8820],{"class":102},[92,18553,18554],{"class":94,"line":1602},[92,18555,2166],{"class":102},[92,18557,18558],{"class":94,"line":1607},[92,18559,2379],{"emptyLinePlaceholder":17},[92,18561,18562],{"class":94,"line":1621},[92,18563,3974],{"class":102},[92,18565,18566],{"class":94,"line":1626},[92,18567,2379],{"emptyLinePlaceholder":17},[92,18569,18570,18572,18574],{"class":94,"line":1632},[92,18571,5344],{"class":98},[92,18573,5568],{"class":1942},[92,18575,1955],{"class":102},[92,18577,18578],{"class":94,"line":1653},[92,18579,1525],{"class":102},[92,18581,18582,18585],{"class":94,"line":1658},[92,18583,18584],{"class":102},"    Person p;",[92,18586,18587],{"class":161},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[92,18589,18590],{"class":94,"line":1672},[92,18591,1544],{"class":102},[92,18593,18594],{"class":94,"line":1677},[92,18595,2379],{"emptyLinePlaceholder":17},[92,18597,18598,18600,18602],{"class":94,"line":1706},[92,18599,106],{"class":98},[92,18601,1952],{"class":1942},[92,18603,10833],{"class":102},[92,18605,18606],{"class":94,"line":1711},[92,18607,13190],{"class":102},[92,18609,18610],{"class":94,"line":1728},[92,18611,18612],{"class":161},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[92,18614,18615],{"class":94,"line":1733},[92,18616,2379],{"emptyLinePlaceholder":17},[92,18618,18619,18621],{"class":94,"line":1738},[92,18620,18584],{"class":102},[92,18622,18623],{"class":161},"\u002F\u002F只有构造函数\n",[92,18625,18626],{"class":94,"line":1743},[92,18627,2379],{"emptyLinePlaceholder":17},[92,18629,18630,18632,18634,18636,18638],{"class":94,"line":1757},[92,18631,2282],{"class":1942},[92,18633,103],{"class":102},[92,18635,2287],{"class":207},[92,18637,5946],{"class":102},[92,18639,18640],{"class":161},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[92,18642,18643],{"class":94,"line":1762},[92,18644,2379],{"emptyLinePlaceholder":17},[92,18646,18647,18649,18651],{"class":94,"line":2556},[92,18648,4069],{"class":98},[92,18650,4072],{"class":151},[92,18652,1269],{"class":102},[92,18654,18655],{"class":94,"line":2570},[92,18656,1544],{"class":102},[38,18658,18659],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[63,18661,18663],{"id":18662},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[38,18665,18666],{},"两种分类方式：",[38,18668,18669],{},"​\t按参数分为： 有参构造和无参构造",[38,18671,18672],{},"​\t按类型分为： 普通构造和拷贝构造",[38,18674,18675],{},"三种调用方式：",[38,18677,18678],{},"​\t括号法",[38,18680,18681],{},"​\t显示法",[38,18683,18684],{},"​\t隐式转换法",[83,18686,18688],{"className":85,"code":18687,"language":87,"meta":10,"style":10},"#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",[89,18689,18690,18696,18706,18711,18716,18721,18726,18730,18738,18742,18746,18750,18756,18760,18773,18777,18789,18793,18802,18815,18819,18823,18829,18833,18846,18850,18855,18871,18875,18880,18889,18902,18906,18912,18916,18921,18929,18933,18938,18942,18950,18954,18959,18964,18969,18974,18979,18983,18988,18993,18998,19003,19007,19012,19017,19033,19045,19050,19054,19059,19064,19069,19073,19078,19092,19105,19109,19117,19121,19127,19133,19141],{"__ignoreMap":10},[92,18691,18692,18694],{"class":94,"line":95},[92,18693,1928],{"class":98},[92,18695,1931],{"class":207},[92,18697,18698,18700,18702,18704],{"class":94,"line":11},[92,18699,1936],{"class":98},[92,18701,1939],{"class":98},[92,18703,1943],{"class":1942},[92,18705,1269],{"class":102},[92,18707,18708],{"class":94,"line":1158},[92,18709,18710],{"class":161},"\u002F\u002F1.构造函数的分类及调用\n",[92,18712,18713],{"class":94,"line":1173},[92,18714,18715],{"class":161},"\u002F\u002F分类\n",[92,18717,18718],{"class":94,"line":1179},[92,18719,18720],{"class":161},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[92,18722,18723],{"class":94,"line":1193},[92,18724,18725],{"class":161},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[92,18727,18728],{"class":94,"line":1199},[92,18729,2379],{"emptyLinePlaceholder":17},[92,18731,18732,18734,18736],{"class":94,"line":1290},[92,18733,14674],{"class":98},[92,18735,15549],{"class":1942},[92,18737,2653],{"class":102},[92,18739,18740],{"class":94,"line":1296},[92,18741,1525],{"class":102},[92,18743,18744],{"class":94,"line":1308},[92,18745,14696],{"class":98},[92,18747,18748],{"class":94,"line":1591},[92,18749,18494],{"class":161},[92,18751,18752,18754],{"class":94,"line":1596},[92,18753,18499],{"class":1942},[92,18755,1955],{"class":102},[92,18757,18758],{"class":94,"line":1602},[92,18759,2009],{"class":102},[92,18761,18762,18764,18766,18769,18771],{"class":94,"line":1607},[92,18763,3430],{"class":102},[92,18765,1147],{"class":98},[92,18767,18768],{"class":207},"\"Person构造函数无参构造\"",[92,18770,1147],{"class":98},[92,18772,1170],{"class":102},[92,18774,18775],{"class":94,"line":1621},[92,18776,2166],{"class":102},[92,18778,18779,18781,18783,18785,18787],{"class":94,"line":1626},[92,18780,18499],{"class":1942},[92,18782,103],{"class":102},[92,18784,106],{"class":98},[92,18786,1377],{"class":5196},[92,18788,109],{"class":102},[92,18790,18791],{"class":94,"line":1632},[92,18792,2009],{"class":102},[92,18794,18795,18798,18800],{"class":94,"line":1653},[92,18796,18797],{"class":102},"        age",[92,18799,148],{"class":98},[92,18801,6177],{"class":102},[92,18803,18804,18806,18808,18811,18813],{"class":94,"line":1658},[92,18805,3430],{"class":102},[92,18807,1147],{"class":98},[92,18809,18810],{"class":207},"\"Person构造函数有参构造\"",[92,18812,1147],{"class":98},[92,18814,1170],{"class":102},[92,18816,18817],{"class":94,"line":1672},[92,18818,2166],{"class":102},[92,18820,18821],{"class":94,"line":1677},[92,18822,18527],{"class":161},[92,18824,18825,18827],{"class":94,"line":1706},[92,18826,18532],{"class":1942},[92,18828,1955],{"class":102},[92,18830,18831],{"class":94,"line":1711},[92,18832,2009],{"class":102},[92,18834,18835,18837,18839,18842,18844],{"class":94,"line":1728},[92,18836,3430],{"class":102},[92,18838,1147],{"class":98},[92,18840,18841],{"class":207},"\"Person析构函数被调用\"",[92,18843,1147],{"class":98},[92,18845,1170],{"class":102},[92,18847,18848],{"class":94,"line":1733},[92,18849,2166],{"class":102},[92,18851,18852],{"class":94,"line":1738},[92,18853,18854],{"class":161},"    \u002F\u002F拷贝构造函数\n",[92,18856,18857,18859,18861,18863,18865,18867,18869],{"class":94,"line":1743},[92,18858,18499],{"class":1942},[92,18860,103],{"class":102},[92,18862,6772],{"class":98},[92,18864,15549],{"class":1942},[92,18866,10564],{"class":98},[92,18868,38],{"class":5196},[92,18870,109],{"class":102},[92,18872,18873],{"class":94,"line":1757},[92,18874,2009],{"class":102},[92,18876,18877],{"class":94,"line":1762},[92,18878,18879],{"class":161},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[92,18881,18882,18884,18886],{"class":94,"line":2556},[92,18883,18797],{"class":102},[92,18885,148],{"class":98},[92,18887,18888],{"class":102},"p.age;\n",[92,18890,18891,18893,18895,18898,18900],{"class":94,"line":2570},[92,18892,3430],{"class":102},[92,18894,1147],{"class":98},[92,18896,18897],{"class":207},"\"Person拷贝构造函数被调用\"",[92,18899,1147],{"class":98},[92,18901,1170],{"class":102},[92,18903,18904],{"class":94,"line":2578},[92,18905,2166],{"class":102},[92,18907,18908,18910],{"class":94,"line":2583},[92,18909,1964],{"class":98},[92,18911,7777],{"class":102},[92,18913,18914],{"class":94,"line":2589},[92,18915,3974],{"class":102},[92,18917,18918],{"class":94,"line":2595},[92,18919,18920],{"class":161},"\u002F\u002F调用\n",[92,18922,18923,18925,18927],{"class":94,"line":2600},[92,18924,5344],{"class":98},[92,18926,5568],{"class":1942},[92,18928,1955],{"class":102},[92,18930,18931],{"class":94,"line":7928},[92,18932,1525],{"class":102},[92,18934,18935],{"class":94,"line":7952},[92,18936,18937],{"class":161},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[92,18939,18940],{"class":94,"line":7957},[92,18941,1544],{"class":102},[92,18943,18944,18946,18948],{"class":94,"line":7963},[92,18945,5344],{"class":98},[92,18947,5637],{"class":1942},[92,18949,1955],{"class":102},[92,18951,18952],{"class":94,"line":7990},[92,18953,1525],{"class":102},[92,18955,18956],{"class":94,"line":7995},[92,18957,18958],{"class":161},"    \u002F\u002F1.括号法\n",[92,18960,18961],{"class":94,"line":8001},[92,18962,18963],{"class":161},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[92,18965,18966],{"class":94,"line":8013},[92,18967,18968],{"class":161},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[92,18970,18971],{"class":94,"line":8025},[92,18972,18973],{"class":161},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[92,18975,18976],{"class":94,"line":8037},[92,18977,18978],{"class":161},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[92,18980,18981],{"class":94,"line":9696},[92,18982,2379],{"emptyLinePlaceholder":17},[92,18984,18985],{"class":94,"line":9721},[92,18986,18987],{"class":161},"    \u002F\u002F注意事项\n",[92,18989,18990],{"class":94,"line":9744},[92,18991,18992],{"class":161},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[92,18994,18995],{"class":94,"line":9768},[92,18996,18997],{"class":161},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[92,18999,19000],{"class":94,"line":9773},[92,19001,19002],{"class":161},"    \u002F\u002F Person p4();\n",[92,19004,19005],{"class":94,"line":9778},[92,19006,2379],{"emptyLinePlaceholder":17},[92,19008,19009],{"class":94,"line":9783},[92,19010,19011],{"class":161},"    \u002F\u002F2.显示法\n",[92,19013,19014],{"class":94,"line":9792},[92,19015,19016],{"class":102},"    Person p1;\n",[92,19018,19019,19022,19024,19027,19029,19031],{"class":94,"line":9797},[92,19020,19021],{"class":102},"    Person p2",[92,19023,148],{"class":98},[92,19025,19026],{"class":1942},"Person",[92,19028,103],{"class":102},[92,19030,549],{"class":151},[92,19032,2698],{"class":102},[92,19034,19035,19038,19040,19042],{"class":94,"line":9803},[92,19036,19037],{"class":102},"    Person p3",[92,19039,148],{"class":98},[92,19041,19026],{"class":1942},[92,19043,19044],{"class":102},"(p2);\n",[92,19046,19047],{"class":94,"line":9824},[92,19048,19049],{"class":161},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[92,19051,19052],{"class":94,"line":9830},[92,19053,2379],{"emptyLinePlaceholder":17},[92,19055,19056],{"class":94,"line":9844},[92,19057,19058],{"class":161},"    \u002F\u002F 注意事项2\n",[92,19060,19061],{"class":94,"line":9850},[92,19062,19063],{"class":161},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[92,19065,19066],{"class":94,"line":9877},[92,19067,19068],{"class":161},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[92,19070,19071],{"class":94,"line":9886},[92,19072,2379],{"emptyLinePlaceholder":17},[92,19074,19075],{"class":94,"line":9892},[92,19076,19077],{"class":161},"    \u002F\u002F3.隐士转换法\n",[92,19079,19080,19083,19085,19087,19089],{"class":94,"line":9900},[92,19081,19082],{"class":102},"    Person p4",[92,19084,148],{"class":98},[92,19086,549],{"class":151},[92,19088,158],{"class":102},[92,19090,19091],{"class":161},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[92,19093,19094,19097,19099,19102],{"class":94,"line":9905},[92,19095,19096],{"class":102},"    Person p5",[92,19098,148],{"class":98},[92,19100,19101],{"class":102},"p4;",[92,19103,19104],{"class":161}," \u002F\u002F 这里会调用拷贝构造函数\n",[92,19106,19107],{"class":94,"line":16584},[92,19108,1544],{"class":102},[92,19110,19111,19113,19115],{"class":94,"line":16590},[92,19112,106],{"class":98},[92,19114,1952],{"class":1942},[92,19116,1955],{"class":102},[92,19118,19119],{"class":94,"line":16613},[92,19120,1525],{"class":102},[92,19122,19123,19125],{"class":94,"line":16619},[92,19124,5613],{"class":1942},[92,19126,5616],{"class":102},[92,19128,19129,19131],{"class":94,"line":16642},[92,19130,5682],{"class":1942},[92,19132,5616],{"class":102},[92,19134,19135,19137,19139],{"class":94,"line":16656},[92,19136,4069],{"class":98},[92,19138,4072],{"class":151},[92,19140,1269],{"class":102},[92,19142,19143],{"class":94,"line":16676},[92,19144,1544],{"class":102},[38,19146,19147,19150],{},[252,19148,19149],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[63,19152,19154],{"id":19153},"_823拷贝构造函数","8.2.3拷贝构造函数",[38,19156,19157],{},"C++中拷贝构造函数调用时机通常有三种情况",[1110,19159,19160,19163,19166],{},[49,19161,19162],{},"使用一个已经创建完毕的对象来初始化一个新对象",[49,19164,19165],{},"值传递的方式给函数参数传值",[49,19167,19168],{},"以值方式返回局部对象",[83,19170,19172],{"className":85,"code":19171,"language":87,"meta":10,"style":10},"#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",[89,19173,19174,19180,19190,19194,19199,19203,19208,19213,19218,19224,19228,19232,19238,19242,19255,19259,19264,19276,19280,19288,19301,19305,19309,19325,19329,19338,19351,19355,19361,19365,19377,19381,19387,19391,19395,19403,19407,19420,19428,19446,19450,19455,19460,19475,19479,19492,19496,19504,19508,19512,19520,19524,19529,19538,19542,19546,19571,19581,19585,19593,19597,19608,19633,19637,19641,19645,19653,19657,19662,19667,19674,19679,19684,19689,19694,19698,19703,19707,19712,19716,19721,19726,19730,19734,19739,19744,19752],{"__ignoreMap":10},[92,19175,19176,19178],{"class":94,"line":95},[92,19177,1928],{"class":98},[92,19179,1931],{"class":207},[92,19181,19182,19184,19186,19188],{"class":94,"line":11},[92,19183,1936],{"class":98},[92,19185,1939],{"class":98},[92,19187,1943],{"class":1942},[92,19189,1269],{"class":102},[92,19191,19192],{"class":94,"line":1158},[92,19193,2379],{"emptyLinePlaceholder":17},[92,19195,19196],{"class":94,"line":1173},[92,19197,19198],{"class":161},"\u002F\u002F拷贝构造函数调用时机\n",[92,19200,19201],{"class":94,"line":1179},[92,19202,2379],{"emptyLinePlaceholder":17},[92,19204,19205],{"class":94,"line":1193},[92,19206,19207],{"class":161},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[92,19209,19210],{"class":94,"line":1199},[92,19211,19212],{"class":161},"\u002F\u002F2.值传递的方式给函数参数传值\n",[92,19214,19215],{"class":94,"line":1290},[92,19216,19217],{"class":161},"\u002F\u002F3.以值方式返回局部对象\n",[92,19219,19220,19222],{"class":94,"line":1296},[92,19221,14674],{"class":98},[92,19223,15151],{"class":1942},[92,19225,19226],{"class":94,"line":1308},[92,19227,1525],{"class":102},[92,19229,19230],{"class":94,"line":1591},[92,19231,14696],{"class":98},[92,19233,19234,19236],{"class":94,"line":1596},[92,19235,18499],{"class":1942},[92,19237,1955],{"class":102},[92,19239,19240],{"class":94,"line":1602},[92,19241,2009],{"class":102},[92,19243,19244,19246,19248,19251,19253],{"class":94,"line":1607},[92,19245,9649],{"class":102},[92,19247,1147],{"class":98},[92,19249,19250],{"class":207}," \"Person的默认构造函数调用\"",[92,19252,1423],{"class":98},[92,19254,8820],{"class":102},[92,19256,19257],{"class":94,"line":1621},[92,19258,2166],{"class":102},[92,19260,19261],{"class":94,"line":1626},[92,19262,19263],{"class":161},"    \u002F\u002F有参构造\n",[92,19265,19266,19268,19270,19272,19274],{"class":94,"line":1632},[92,19267,18499],{"class":1942},[92,19269,103],{"class":102},[92,19271,106],{"class":98},[92,19273,15669],{"class":5196},[92,19275,109],{"class":102},[92,19277,19278],{"class":94,"line":1653},[92,19279,2009],{"class":102},[92,19281,19282,19284,19286],{"class":94,"line":1658},[92,19283,15723],{"class":102},[92,19285,148],{"class":98},[92,19287,7777],{"class":102},[92,19289,19290,19292,19294,19297,19299],{"class":94,"line":1672},[92,19291,9649],{"class":102},[92,19293,1147],{"class":98},[92,19295,19296],{"class":207}," \"Person的有参构造函数调用\"",[92,19298,1423],{"class":98},[92,19300,8820],{"class":102},[92,19302,19303],{"class":94,"line":1677},[92,19304,2166],{"class":102},[92,19306,19307],{"class":94,"line":1706},[92,19308,18854],{"class":161},[92,19310,19311,19313,19315,19317,19319,19321,19323],{"class":94,"line":1711},[92,19312,18499],{"class":1942},[92,19314,103],{"class":102},[92,19316,6772],{"class":98},[92,19318,15549],{"class":1942},[92,19320,10564],{"class":98},[92,19322,38],{"class":5196},[92,19324,109],{"class":102},[92,19326,19327],{"class":94,"line":1728},[92,19328,2009],{"class":102},[92,19330,19331,19333,19335],{"class":94,"line":1733},[92,19332,15723],{"class":102},[92,19334,148],{"class":98},[92,19336,19337],{"class":102}," p.m_Age;\n",[92,19339,19340,19342,19344,19347,19349],{"class":94,"line":1738},[92,19341,9649],{"class":102},[92,19343,1147],{"class":98},[92,19345,19346],{"class":207}," \"Person的拷贝构造函数调用\"",[92,19348,1423],{"class":98},[92,19350,8820],{"class":102},[92,19352,19353],{"class":94,"line":1743},[92,19354,2166],{"class":102},[92,19356,19357,19359],{"class":94,"line":1757},[92,19358,18532],{"class":1942},[92,19360,1955],{"class":102},[92,19362,19363],{"class":94,"line":1762},[92,19364,2009],{"class":102},[92,19366,19367,19369,19371,19373,19375],{"class":94,"line":2556},[92,19368,9649],{"class":102},[92,19370,1147],{"class":98},[92,19372,18547],{"class":207},[92,19374,1423],{"class":98},[92,19376,8820],{"class":102},[92,19378,19379],{"class":94,"line":2570},[92,19380,2166],{"class":102},[92,19382,19383,19385],{"class":94,"line":2578},[92,19384,1964],{"class":98},[92,19386,15646],{"class":102},[92,19388,19389],{"class":94,"line":2583},[92,19390,3974],{"class":102},[92,19392,19393],{"class":94,"line":2589},[92,19394,19207],{"class":161},[92,19396,19397,19399,19401],{"class":94,"line":2595},[92,19398,5344],{"class":98},[92,19400,5568],{"class":1942},[92,19402,1955],{"class":102},[92,19404,19405],{"class":94,"line":2600},[92,19406,1525],{"class":102},[92,19408,19409,19412,19414,19416,19418],{"class":94,"line":7928},[92,19410,19411],{"class":102},"    Person ",[92,19413,7110],{"class":1942},[92,19415,103],{"class":102},[92,19417,803],{"class":151},[92,19419,2698],{"class":102},[92,19421,19422,19424,19426],{"class":94,"line":7952},[92,19423,19411],{"class":102},[92,19425,7013],{"class":1942},[92,19427,17495],{"class":102},[92,19429,19430,19432,19434,19437,19439,19442,19444],{"class":94,"line":7957},[92,19431,1530],{"class":102},[92,19433,1147],{"class":98},[92,19435,19436],{"class":207},"\"P2的年龄为：\"",[92,19438,1147],{"class":98},[92,19440,19441],{"class":102},"p2.m_Age",[92,19443,1147],{"class":98},[92,19445,1170],{"class":102},[92,19447,19448],{"class":94,"line":7963},[92,19449,1544],{"class":102},[92,19451,19452],{"class":94,"line":7990},[92,19453,19454],{"class":161},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[92,19456,19457],{"class":94,"line":7995},[92,19458,19459],{"class":161},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[92,19461,19462,19464,19467,19469,19471,19473],{"class":94,"line":8001},[92,19463,5344],{"class":98},[92,19465,19466],{"class":1942}," doWork",[92,19468,103],{"class":102},[92,19470,19026],{"class":1942},[92,19472,6805],{"class":5196},[92,19474,109],{"class":102},[92,19476,19477],{"class":94,"line":8013},[92,19478,1525],{"class":102},[92,19480,19481,19483,19485,19488,19490],{"class":94,"line":8025},[92,19482,6509],{"class":102},[92,19484,1147],{"class":98},[92,19486,19487],{"class":207}," \"doWork函数调用\"",[92,19489,1423],{"class":98},[92,19491,8820],{"class":102},[92,19493,19494],{"class":94,"line":8037},[92,19495,1544],{"class":102},[92,19497,19498,19500,19502],{"class":94,"line":9696},[92,19499,5344],{"class":98},[92,19501,5637],{"class":1942},[92,19503,1955],{"class":102},[92,19505,19506],{"class":94,"line":9721},[92,19507,1525],{"class":102},[92,19509,19510],{"class":94,"line":9744},[92,19511,15293],{"class":102},[92,19513,19514,19517],{"class":94,"line":9768},[92,19515,19516],{"class":1942},"    doWork",[92,19518,19519],{"class":102},"(p);\n",[92,19521,19522],{"class":94,"line":9773},[92,19523,1544],{"class":102},[92,19525,19526],{"class":94,"line":9778},[92,19527,19528],{"class":161},"\u002F\u002F 3.以值方式返回局部对象\n",[92,19530,19531,19533,19536],{"class":94,"line":9783},[92,19532,19026],{"class":1942},[92,19534,19535],{"class":1942}," doWork2",[92,19537,1955],{"class":102},[92,19539,19540],{"class":94,"line":9792},[92,19541,1525],{"class":102},[92,19543,19544],{"class":94,"line":9797},[92,19545,19016],{"class":102},[92,19547,19548,19550,19552,19554,19556,19558,19560,19562,19564,19566,19568],{"class":94,"line":9803},[92,19549,1530],{"class":102},[92,19551,1147],{"class":98},[92,19553,103],{"class":102},[92,19555,106],{"class":98},[92,19557,6498],{"class":98},[92,19559,532],{"class":102},[92,19561,456],{"class":98},[92,19563,7110],{"class":102},[92,19565,1147],{"class":98},[92,19567,1217],{"class":102},[92,19569,19570],{"class":161},"\u002F\u002F打印p1的地址\n",[92,19572,19573,19575,19578],{"class":94,"line":9824},[92,19574,4069],{"class":98},[92,19576,19577],{"class":102}," p1;",[92,19579,19580],{"class":161},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[92,19582,19583],{"class":94,"line":9830},[92,19584,1544],{"class":102},[92,19586,19587,19589,19591],{"class":94,"line":9844},[92,19588,5344],{"class":98},[92,19590,5709],{"class":1942},[92,19592,1955],{"class":102},[92,19594,19595],{"class":94,"line":9850},[92,19596,1525],{"class":102},[92,19598,19599,19602,19604,19606],{"class":94,"line":9877},[92,19600,19601],{"class":102},"    Person p ",[92,19603,148],{"class":98},[92,19605,19535],{"class":1942},[92,19607,5616],{"class":102},[92,19609,19610,19612,19614,19616,19618,19620,19622,19624,19626,19628,19630],{"class":94,"line":9886},[92,19611,1530],{"class":102},[92,19613,1147],{"class":98},[92,19615,103],{"class":102},[92,19617,106],{"class":98},[92,19619,6498],{"class":98},[92,19621,532],{"class":102},[92,19623,456],{"class":98},[92,19625,38],{"class":102},[92,19627,1147],{"class":98},[92,19629,1217],{"class":102},[92,19631,19632],{"class":161},"\u002F\u002F打印p的地址\n",[92,19634,19635],{"class":94,"line":9892},[92,19636,1544],{"class":102},[92,19638,19639],{"class":94,"line":9900},[92,19640,2379],{"emptyLinePlaceholder":17},[92,19642,19643],{"class":94,"line":9905},[92,19644,2379],{"emptyLinePlaceholder":17},[92,19646,19647,19649,19651],{"class":94,"line":16584},[92,19648,106],{"class":98},[92,19650,1952],{"class":1942},[92,19652,1955],{"class":102},[92,19654,19655],{"class":94,"line":16590},[92,19656,1525],{"class":102},[92,19658,19659],{"class":94,"line":16613},[92,19660,19661],{"class":161},"    \u002F\u002F test01();\n",[92,19663,19664],{"class":94,"line":16619},[92,19665,19666],{"class":161},"    \u002F\u002F test02();\n",[92,19668,19669,19672],{"class":94,"line":16642},[92,19670,19671],{"class":1942},"    test03",[92,19673,5616],{"class":102},[92,19675,19676],{"class":94,"line":16656},[92,19677,19678],{"class":161},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[92,19680,19681],{"class":94,"line":16676},[92,19682,19683],{"class":161},"\u002F\u002F 输出结果如下：\n",[92,19685,19686],{"class":94,"line":16682},[92,19687,19688],{"class":161},"\u002F\u002F Person的默认构造函数调用\n",[92,19690,19691],{"class":94,"line":16693},[92,19692,19693],{"class":161},"\u002F\u002F 0x7fffffffceec\n",[92,19695,19696],{"class":94,"line":16716},[92,19697,19693],{"class":161},[92,19699,19700],{"class":94,"line":16738},[92,19701,19702],{"class":161},"\u002F\u002F Person的析构函数调用\n",[92,19704,19705],{"class":94,"line":16743},[92,19706,2379],{"emptyLinePlaceholder":17},[92,19708,19709],{"class":94,"line":16749},[92,19710,19711],{"class":161},"\u002F\u002F 之前的输出结果如下：\n",[92,19713,19714],{"class":94,"line":16763},[92,19715,19688],{"class":161},[92,19717,19718],{"class":94,"line":16776},[92,19719,19720],{"class":161},"\u002F\u002F 地址\n",[92,19722,19723],{"class":94,"line":16781},[92,19724,19725],{"class":161},"\u002F\u002F Person的拷贝构造函数调用\n",[92,19727,19728],{"class":94,"line":16795},[92,19729,19702],{"class":161},[92,19731,19732],{"class":94,"line":16800},[92,19733,19720],{"class":161},[92,19735,19736],{"class":94,"line":16806},[92,19737,19738],{"class":161},"\u002F\u002F (这两次输出的地址也是不同的) \n",[92,19740,19741],{"class":94,"line":16811},[92,19742,19743],{"class":161},"\u002F\u002F Person的析构函数调用     \n",[92,19745,19746,19748,19750],{"class":94,"line":16825},[92,19747,4069],{"class":98},[92,19749,4072],{"class":151},[92,19751,1269],{"class":102},[92,19753,19754],{"class":94,"line":16830},[92,19755,1544],{"class":102},[38,19757,19758],{},"简化版理解",[83,19760,19762],{"className":85,"code":19761,"language":87,"meta":10,"style":10},"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",[89,19763,19764,19772,19776,19782,19795,19806,19810,19822,19835,19843,19847,19863,19876,19885,19889,19894,19900,19913,19917,19921,19928,19932,19936,19941,19949,19953,19969,19982,19995,19999,20004,20012,20016,20020,20025,20030,20046,20054,20061,20067,20071,20075,20080,20088,20092,20096,20119,20126,20130,20134,20142,20146,20156,20178,20182,20186,20190,20198,20202,20207,20212,20218,20222,20232,20236,20244],{"__ignoreMap":10},[92,19765,19766,19768,19770],{"class":94,"line":95},[92,19767,14674],{"class":98},[92,19769,15549],{"class":1942},[92,19771,15552],{"class":102},[92,19773,19774],{"class":94,"line":11},[92,19775,14696],{"class":98},[92,19777,19778,19780],{"class":94,"line":1158},[92,19779,18499],{"class":1942},[92,19781,10833],{"class":102},[92,19783,19784,19786,19788,19791,19793],{"class":94,"line":1173},[92,19785,9649],{"class":102},[92,19787,1147],{"class":98},[92,19789,19790],{"class":207}," \"无参构造函数!\"",[92,19792,1423],{"class":98},[92,19794,8820],{"class":102},[92,19796,19797,19800,19802,19804],{"class":94,"line":1179},[92,19798,19799],{"class":102},"        mAge ",[92,19801,148],{"class":98},[92,19803,4072],{"class":151},[92,19805,1269],{"class":102},[92,19807,19808],{"class":94,"line":1193},[92,19809,2166],{"class":102},[92,19811,19812,19814,19816,19818,19820],{"class":94,"line":1199},[92,19813,18499],{"class":1942},[92,19815,103],{"class":102},[92,19817,106],{"class":98},[92,19819,15669],{"class":5196},[92,19821,12422],{"class":102},[92,19823,19824,19826,19828,19831,19833],{"class":94,"line":1290},[92,19825,9649],{"class":102},[92,19827,1147],{"class":98},[92,19829,19830],{"class":207}," \"有参构造函数!\"",[92,19832,1423],{"class":98},[92,19834,8820],{"class":102},[92,19836,19837,19839,19841],{"class":94,"line":1296},[92,19838,19799],{"class":102},[92,19840,148],{"class":98},[92,19842,7777],{"class":102},[92,19844,19845],{"class":94,"line":1308},[92,19846,2166],{"class":102},[92,19848,19849,19851,19853,19855,19857,19859,19861],{"class":94,"line":1591},[92,19850,18499],{"class":1942},[92,19852,103],{"class":102},[92,19854,6772],{"class":98},[92,19856,15549],{"class":1942},[92,19858,456],{"class":98},[92,19860,6805],{"class":5196},[92,19862,12422],{"class":102},[92,19864,19865,19867,19869,19872,19874],{"class":94,"line":1596},[92,19866,9649],{"class":102},[92,19868,1147],{"class":98},[92,19870,19871],{"class":207}," \"拷贝构造函数!\"",[92,19873,1423],{"class":98},[92,19875,8820],{"class":102},[92,19877,19878,19880,19882],{"class":94,"line":1602},[92,19879,19799],{"class":102},[92,19881,148],{"class":98},[92,19883,19884],{"class":102}," p.mAge;\n",[92,19886,19887],{"class":94,"line":1607},[92,19888,2166],{"class":102},[92,19890,19891],{"class":94,"line":1621},[92,19892,19893],{"class":161},"    \u002F\u002F析构函数在释放内存之前调用\n",[92,19895,19896,19898],{"class":94,"line":1626},[92,19897,18532],{"class":1942},[92,19899,10833],{"class":102},[92,19901,19902,19904,19906,19909,19911],{"class":94,"line":1632},[92,19903,9649],{"class":102},[92,19905,1147],{"class":98},[92,19907,19908],{"class":207}," \"析构函数!\"",[92,19910,1423],{"class":98},[92,19912,8820],{"class":102},[92,19914,19915],{"class":94,"line":1653},[92,19916,2166],{"class":102},[92,19918,19919],{"class":94,"line":1658},[92,19920,14696],{"class":98},[92,19922,19923,19925],{"class":94,"line":1672},[92,19924,1964],{"class":98},[92,19926,19927],{"class":102}," mAge;\n",[92,19929,19930],{"class":94,"line":1677},[92,19931,3974],{"class":102},[92,19933,19934],{"class":94,"line":1706},[92,19935,2379],{"emptyLinePlaceholder":17},[92,19937,19938],{"class":94,"line":1711},[92,19939,19940],{"class":161},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[92,19942,19943,19945,19947],{"class":94,"line":1728},[92,19944,5344],{"class":98},[92,19946,5568],{"class":1942},[92,19948,10833],{"class":102},[92,19950,19951],{"class":94,"line":1733},[92,19952,2379],{"emptyLinePlaceholder":17},[92,19954,19955,19957,19960,19962,19964,19966],{"class":94,"line":1738},[92,19956,19411],{"class":102},[92,19958,19959],{"class":1942},"man",[92,19961,103],{"class":102},[92,19963,414],{"class":151},[92,19965,5946],{"class":102},[92,19967,19968],{"class":161}," \u002F\u002Fp对象已经创建完毕\n",[92,19970,19971,19973,19976,19979],{"class":94,"line":1743},[92,19972,19411],{"class":102},[92,19974,19975],{"class":1942},"newman",[92,19977,19978],{"class":102},"(man);",[92,19980,19981],{"class":161}," \u002F\u002F调用拷贝构造函数\n",[92,19983,19984,19987,19989,19992],{"class":94,"line":1757},[92,19985,19986],{"class":102},"    Person newman2 ",[92,19988,148],{"class":98},[92,19990,19991],{"class":102}," man;",[92,19993,19994],{"class":161}," \u002F\u002F拷贝构造\n",[92,19996,19997],{"class":94,"line":1762},[92,19998,2379],{"emptyLinePlaceholder":17},[92,20000,20001],{"class":94,"line":2556},[92,20002,20003],{"class":161},"    \u002F\u002FPerson newman3;\n",[92,20005,20006,20009],{"class":94,"line":2570},[92,20007,20008],{"class":161},"    \u002F\u002Fnewman3 = man;",[92,20010,20011],{"class":161}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[92,20013,20014],{"class":94,"line":2578},[92,20015,1544],{"class":102},[92,20017,20018],{"class":94,"line":2583},[92,20019,2379],{"emptyLinePlaceholder":17},[92,20021,20022],{"class":94,"line":2589},[92,20023,20024],{"class":161},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[92,20026,20027],{"class":94,"line":2595},[92,20028,20029],{"class":161},"\u002F\u002F相当于Person p1 = p;\n",[92,20031,20032,20034,20036,20038,20040,20043],{"class":94,"line":2600},[92,20033,5344],{"class":98},[92,20035,19466],{"class":1942},[92,20037,103],{"class":102},[92,20039,19026],{"class":1942},[92,20041,20042],{"class":5196}," p1",[92,20044,20045],{"class":102},") {}\n",[92,20047,20048,20050,20052],{"class":94,"line":7928},[92,20049,5344],{"class":98},[92,20051,5637],{"class":1942},[92,20053,10833],{"class":102},[92,20055,20056,20058],{"class":94,"line":7952},[92,20057,18584],{"class":102},[92,20059,20060],{"class":161}," \u002F\u002F无参构造函数\n",[92,20062,20063,20065],{"class":94,"line":7957},[92,20064,19516],{"class":1942},[92,20066,19519],{"class":102},[92,20068,20069],{"class":94,"line":7963},[92,20070,1544],{"class":102},[92,20072,20073],{"class":94,"line":7990},[92,20074,2379],{"emptyLinePlaceholder":17},[92,20076,20077],{"class":94,"line":7995},[92,20078,20079],{"class":161},"\u002F\u002F3. 以值方式返回局部对象\n",[92,20081,20082,20084,20086],{"class":94,"line":8001},[92,20083,19026],{"class":1942},[92,20085,19535],{"class":1942},[92,20087,1955],{"class":102},[92,20089,20090],{"class":94,"line":8013},[92,20091,1525],{"class":102},[92,20093,20094],{"class":94,"line":8025},[92,20095,19016],{"class":102},[92,20097,20098,20100,20102,20104,20106,20108,20110,20112,20115,20117],{"class":94,"line":8037},[92,20099,6509],{"class":102},[92,20101,1147],{"class":98},[92,20103,1637],{"class":102},[92,20105,106],{"class":98},[92,20107,6498],{"class":98},[92,20109,532],{"class":102},[92,20111,456],{"class":98},[92,20113,20114],{"class":102},"p1 ",[92,20116,1147],{"class":98},[92,20118,8820],{"class":102},[92,20120,20121,20123],{"class":94,"line":9696},[92,20122,4069],{"class":98},[92,20124,20125],{"class":102}," p1;\n",[92,20127,20128],{"class":94,"line":9721},[92,20129,1544],{"class":102},[92,20131,20132],{"class":94,"line":9744},[92,20133,2379],{"emptyLinePlaceholder":17},[92,20135,20136,20138,20140],{"class":94,"line":9768},[92,20137,5344],{"class":98},[92,20139,5709],{"class":1942},[92,20141,1955],{"class":102},[92,20143,20144],{"class":94,"line":9773},[92,20145,1525],{"class":102},[92,20147,20148,20150,20152,20154],{"class":94,"line":9778},[92,20149,19601],{"class":102},[92,20151,148],{"class":98},[92,20153,19535],{"class":1942},[92,20155,5616],{"class":102},[92,20157,20158,20160,20162,20164,20166,20168,20170,20172,20174,20176],{"class":94,"line":9783},[92,20159,6509],{"class":102},[92,20161,1147],{"class":98},[92,20163,1637],{"class":102},[92,20165,106],{"class":98},[92,20167,6498],{"class":98},[92,20169,532],{"class":102},[92,20171,456],{"class":98},[92,20173,11428],{"class":102},[92,20175,1147],{"class":98},[92,20177,8820],{"class":102},[92,20179,20180],{"class":94,"line":9792},[92,20181,1544],{"class":102},[92,20183,20184],{"class":94,"line":9797},[92,20185,2379],{"emptyLinePlaceholder":17},[92,20187,20188],{"class":94,"line":9803},[92,20189,2379],{"emptyLinePlaceholder":17},[92,20191,20192,20194,20196],{"class":94,"line":9824},[92,20193,106],{"class":98},[92,20195,1952],{"class":1942},[92,20197,10833],{"class":102},[92,20199,20200],{"class":94,"line":9830},[92,20201,2379],{"emptyLinePlaceholder":17},[92,20203,20204],{"class":94,"line":9844},[92,20205,20206],{"class":161},"    \u002F\u002Ftest01();\n",[92,20208,20209],{"class":94,"line":9850},[92,20210,20211],{"class":161},"    \u002F\u002Ftest02();\n",[92,20213,20214,20216],{"class":94,"line":9877},[92,20215,19671],{"class":1942},[92,20217,5616],{"class":102},[92,20219,20220],{"class":94,"line":9886},[92,20221,2379],{"emptyLinePlaceholder":17},[92,20223,20224,20226,20228,20230],{"class":94,"line":9892},[92,20225,2282],{"class":1942},[92,20227,103],{"class":102},[92,20229,2287],{"class":207},[92,20231,2698],{"class":102},[92,20233,20234],{"class":94,"line":9900},[92,20235,2379],{"emptyLinePlaceholder":17},[92,20237,20238,20240,20242],{"class":94,"line":9905},[92,20239,4069],{"class":98},[92,20241,4072],{"class":151},[92,20243,1269],{"class":102},[92,20245,20246],{"class":94,"line":16584},[92,20247,1544],{"class":102},[63,20249,20251],{"id":20250},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[38,20253,20254],{},"默认情况下，c++编译器至少给一个类添加3个函数",[38,20256,20257],{},"1．默认构造函数(无参，函数体为空)",[38,20259,20260],{},"2．默认析构函数(无参，函数体为空)",[38,20262,20263],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[38,20265,20266],{},"构造函数调用规则如下：",[1110,20268,20269,20272],{},[49,20270,20271],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[49,20273,20274],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[83,20276,20278],{"className":85,"code":20277,"language":87,"meta":10,"style":10},"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",[89,20279,20280,20288,20292,20297,20303,20315,20319,20324,20336,20345,20357,20361,20365,20381,20390,20402,20406,20410,20416,20428,20432,20436,20442,20446,20450,20458,20462,20474,20479,20487,20491,20509,20513,20517,20525,20529,20534,20542,20557,20570,20574,20579,20586,20602,20615,20619,20623,20631,20635,20641,20645,20655,20659,20667],{"__ignoreMap":10},[92,20281,20282,20284,20286],{"class":94,"line":95},[92,20283,14674],{"class":98},[92,20285,15549],{"class":1942},[92,20287,15552],{"class":102},[92,20289,20290],{"class":94,"line":11},[92,20291,14696],{"class":98},[92,20293,20294],{"class":94,"line":1158},[92,20295,20296],{"class":161},"    \u002F\u002F无参（默认）构造函数\n",[92,20298,20299,20301],{"class":94,"line":1173},[92,20300,18499],{"class":1942},[92,20302,10833],{"class":102},[92,20304,20305,20307,20309,20311,20313],{"class":94,"line":1179},[92,20306,9649],{"class":102},[92,20308,1147],{"class":98},[92,20310,19790],{"class":207},[92,20312,1423],{"class":98},[92,20314,8820],{"class":102},[92,20316,20317],{"class":94,"line":1193},[92,20318,2166],{"class":102},[92,20320,20321],{"class":94,"line":1199},[92,20322,20323],{"class":161},"    \u002F\u002F有参构造函数\n",[92,20325,20326,20328,20330,20332,20334],{"class":94,"line":1290},[92,20327,18499],{"class":1942},[92,20329,103],{"class":102},[92,20331,106],{"class":98},[92,20333,1377],{"class":5196},[92,20335,12422],{"class":102},[92,20337,20338,20341,20343],{"class":94,"line":1296},[92,20339,20340],{"class":102},"        age ",[92,20342,148],{"class":98},[92,20344,1411],{"class":102},[92,20346,20347,20349,20351,20353,20355],{"class":94,"line":1308},[92,20348,9649],{"class":102},[92,20350,1147],{"class":98},[92,20352,19830],{"class":207},[92,20354,1423],{"class":98},[92,20356,8820],{"class":102},[92,20358,20359],{"class":94,"line":1591},[92,20360,2166],{"class":102},[92,20362,20363],{"class":94,"line":1596},[92,20364,18854],{"class":161},[92,20366,20367,20369,20371,20373,20375,20377,20379],{"class":94,"line":1602},[92,20368,18499],{"class":1942},[92,20370,103],{"class":102},[92,20372,6772],{"class":98},[92,20374,15549],{"class":1942},[92,20376,456],{"class":98},[92,20378,6805],{"class":5196},[92,20380,12422],{"class":102},[92,20382,20383,20385,20387],{"class":94,"line":1607},[92,20384,20340],{"class":102},[92,20386,148],{"class":98},[92,20388,20389],{"class":102}," p.age;\n",[92,20391,20392,20394,20396,20398,20400],{"class":94,"line":1621},[92,20393,9649],{"class":102},[92,20395,1147],{"class":98},[92,20397,19871],{"class":207},[92,20399,1423],{"class":98},[92,20401,8820],{"class":102},[92,20403,20404],{"class":94,"line":1626},[92,20405,2166],{"class":102},[92,20407,20408],{"class":94,"line":1632},[92,20409,18527],{"class":161},[92,20411,20412,20414],{"class":94,"line":1653},[92,20413,18532],{"class":1942},[92,20415,10833],{"class":102},[92,20417,20418,20420,20422,20424,20426],{"class":94,"line":1658},[92,20419,9649],{"class":102},[92,20421,1147],{"class":98},[92,20423,19908],{"class":207},[92,20425,1423],{"class":98},[92,20427,8820],{"class":102},[92,20429,20430],{"class":94,"line":1672},[92,20431,2166],{"class":102},[92,20433,20434],{"class":94,"line":1677},[92,20435,14696],{"class":98},[92,20437,20438,20440],{"class":94,"line":1706},[92,20439,1964],{"class":98},[92,20441,7777],{"class":102},[92,20443,20444],{"class":94,"line":1711},[92,20445,3974],{"class":102},[92,20447,20448],{"class":94,"line":1728},[92,20449,2379],{"emptyLinePlaceholder":17},[92,20451,20452,20454,20456],{"class":94,"line":1733},[92,20453,5344],{"class":98},[92,20455,5568],{"class":1942},[92,20457,1955],{"class":102},[92,20459,20460],{"class":94,"line":1738},[92,20461,1525],{"class":102},[92,20463,20464,20466,20468,20470,20472],{"class":94,"line":1743},[92,20465,19411],{"class":102},[92,20467,7110],{"class":1942},[92,20469,103],{"class":102},[92,20471,753],{"class":151},[92,20473,2698],{"class":102},[92,20475,20476],{"class":94,"line":1757},[92,20477,20478],{"class":161},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[92,20480,20481,20483,20485],{"class":94,"line":1762},[92,20482,19411],{"class":102},[92,20484,7013],{"class":1942},[92,20486,17495],{"class":102},[92,20488,20489],{"class":94,"line":2556},[92,20490,2379],{"emptyLinePlaceholder":17},[92,20492,20493,20495,20497,20500,20502,20505,20507],{"class":94,"line":2570},[92,20494,6509],{"class":102},[92,20496,1147],{"class":98},[92,20498,20499],{"class":207}," \"p2的年龄为： \"",[92,20501,1423],{"class":98},[92,20503,20504],{"class":102}," p2.age ",[92,20506,1147],{"class":98},[92,20508,8820],{"class":102},[92,20510,20511],{"class":94,"line":2578},[92,20512,1544],{"class":102},[92,20514,20515],{"class":94,"line":2583},[92,20516,2379],{"emptyLinePlaceholder":17},[92,20518,20519,20521,20523],{"class":94,"line":2589},[92,20520,5344],{"class":98},[92,20522,5637],{"class":1942},[92,20524,1955],{"class":102},[92,20526,20527],{"class":94,"line":2595},[92,20528,1525],{"class":102},[92,20530,20531],{"class":94,"line":2600},[92,20532,20533],{"class":161},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[92,20535,20536,20539],{"class":94,"line":7928},[92,20537,20538],{"class":102},"    Person p1;",[92,20540,20541],{"class":161}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[92,20543,20544,20546,20548,20550,20552,20554],{"class":94,"line":7952},[92,20545,19411],{"class":102},[92,20547,7013],{"class":1942},[92,20549,103],{"class":102},[92,20551,549],{"class":151},[92,20553,5946],{"class":102},[92,20555,20556],{"class":161}," \u002F\u002F用户提供的有参\n",[92,20558,20559,20561,20564,20567],{"class":94,"line":7957},[92,20560,19411],{"class":102},[92,20562,20563],{"class":1942},"p3",[92,20565,20566],{"class":102},"(p2);",[92,20568,20569],{"class":161}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[92,20571,20572],{"class":94,"line":7963},[92,20573,2379],{"emptyLinePlaceholder":17},[92,20575,20576],{"class":94,"line":7990},[92,20577,20578],{"class":161},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[92,20580,20581,20584],{"class":94,"line":7995},[92,20582,20583],{"class":102},"    Person p4;",[92,20585,20541],{"class":161},[92,20587,20588,20590,20593,20595,20597,20599],{"class":94,"line":8001},[92,20589,19411],{"class":102},[92,20591,20592],{"class":1942},"p5",[92,20594,103],{"class":102},[92,20596,549],{"class":151},[92,20598,5946],{"class":102},[92,20600,20601],{"class":161}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[92,20603,20604,20606,20609,20612],{"class":94,"line":8013},[92,20605,19411],{"class":102},[92,20607,20608],{"class":1942},"p6",[92,20610,20611],{"class":102},"(p5);",[92,20613,20614],{"class":161}," \u002F\u002F用户自己提供拷贝构造\n",[92,20616,20617],{"class":94,"line":8025},[92,20618,1544],{"class":102},[92,20620,20621],{"class":94,"line":8037},[92,20622,2379],{"emptyLinePlaceholder":17},[92,20624,20625,20627,20629],{"class":94,"line":9696},[92,20626,106],{"class":98},[92,20628,1952],{"class":1942},[92,20630,10833],{"class":102},[92,20632,20633],{"class":94,"line":9721},[92,20634,2379],{"emptyLinePlaceholder":17},[92,20636,20637,20639],{"class":94,"line":9744},[92,20638,5613],{"class":1942},[92,20640,5616],{"class":102},[92,20642,20643],{"class":94,"line":9768},[92,20644,2379],{"emptyLinePlaceholder":17},[92,20646,20647,20649,20651,20653],{"class":94,"line":9773},[92,20648,2282],{"class":1942},[92,20650,103],{"class":102},[92,20652,2287],{"class":207},[92,20654,2698],{"class":102},[92,20656,20657],{"class":94,"line":9778},[92,20658,2379],{"emptyLinePlaceholder":17},[92,20660,20661,20663,20665],{"class":94,"line":9783},[92,20662,4069],{"class":98},[92,20664,4072],{"class":151},[92,20666,1269],{"class":102},[92,20668,20669],{"class":94,"line":9792},[92,20670,1544],{"class":102},[63,20672,20674],{"id":20673},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[38,20676,20677],{},"浅拷贝：简单的赋值拷贝操作",[38,20679,20680],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[83,20682,20684],{"className":85,"code":20683,"language":87,"meta":10,"style":10},"#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",[89,20685,20686,20692,20702,20708,20712,20716,20721,20727,20731,20744,20748,20752,20759,20763,20773,20788,20801,20805,20810,20815,20831,20835,20848,20853,20858,20863,20872,20877,20892,20896,20900,20904,20910,20914,20919,20934,20938,20949,20963,20967,20976,20980,20986,20998,21002,21010,21014,21031,21062,21070,21098,21102,21106,21114,21118,21124],{"__ignoreMap":10},[92,20687,20688,20690],{"class":94,"line":95},[92,20689,1928],{"class":98},[92,20691,1931],{"class":207},[92,20693,20694,20696,20698,20700],{"class":94,"line":11},[92,20695,1936],{"class":98},[92,20697,1939],{"class":98},[92,20699,1943],{"class":1942},[92,20701,1269],{"class":102},[92,20703,20704,20706],{"class":94,"line":1158},[92,20705,14674],{"class":98},[92,20707,15151],{"class":1942},[92,20709,20710],{"class":94,"line":1173},[92,20711,1525],{"class":102},[92,20713,20714],{"class":94,"line":1179},[92,20715,14696],{"class":98},[92,20717,20718],{"class":94,"line":1193},[92,20719,20720],{"class":161},"    \u002F\u002F默认构造函数\n",[92,20722,20723,20725],{"class":94,"line":1199},[92,20724,18499],{"class":1942},[92,20726,1955],{"class":102},[92,20728,20729],{"class":94,"line":1290},[92,20730,2009],{"class":102},[92,20732,20733,20735,20737,20740,20742],{"class":94,"line":1296},[92,20734,3430],{"class":102},[92,20736,1147],{"class":98},[92,20738,20739],{"class":207},"\"默认构造函数\"",[92,20741,1147],{"class":98},[92,20743,1170],{"class":102},[92,20745,20746],{"class":94,"line":1308},[92,20747,2166],{"class":102},[92,20749,20750],{"class":94,"line":1591},[92,20751,20323],{"class":161},[92,20753,20754,20756],{"class":94,"line":1596},[92,20755,18532],{"class":1942},[92,20757,20758],{"class":102},"(int age,int height)\n",[92,20760,20761],{"class":94,"line":1602},[92,20762,2009],{"class":102},[92,20764,20765,20768,20770],{"class":94,"line":1607},[92,20766,20767],{"class":102},"        m_Age",[92,20769,148],{"class":98},[92,20771,20772],{"class":102},"age;\n",[92,20774,20775,20778,20780,20782,20785],{"class":94,"line":1621},[92,20776,20777],{"class":102},"        m_Height",[92,20779,11697],{"class":98},[92,20781,2361],{"class":98},[92,20783,20784],{"class":102},"(height);",[92,20786,20787],{"class":161},"\u002F\u002F放到堆区\n",[92,20789,20790,20792,20794,20797,20799],{"class":94,"line":1626},[92,20791,3430],{"class":102},[92,20793,1147],{"class":98},[92,20795,20796],{"class":207},"\"有参构造函数\"",[92,20798,1147],{"class":98},[92,20800,1170],{"class":102},[92,20802,20803],{"class":94,"line":1632},[92,20804,2166],{"class":102},[92,20806,20807],{"class":94,"line":1653},[92,20808,20809],{"class":161},"    \u002F\u002F深拷贝解决上述问题\n",[92,20811,20812],{"class":94,"line":1658},[92,20813,20814],{"class":161},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[92,20816,20817,20819,20821,20823,20825,20827,20829],{"class":94,"line":1672},[92,20818,18499],{"class":1942},[92,20820,103],{"class":102},[92,20822,6772],{"class":98},[92,20824,15549],{"class":1942},[92,20826,10564],{"class":98},[92,20828,38],{"class":5196},[92,20830,109],{"class":102},[92,20832,20833],{"class":94,"line":1677},[92,20834,2009],{"class":102},[92,20836,20837,20839,20841,20844,20846],{"class":94,"line":1706},[92,20838,3430],{"class":102},[92,20840,1147],{"class":98},[92,20842,20843],{"class":207},"\"拷贝构造函数\"",[92,20845,1147],{"class":98},[92,20847,1170],{"class":102},[92,20849,20850],{"class":94,"line":1711},[92,20851,20852],{"class":161},"        \u002F\u002F编译器默认的写如下注释部分\n",[92,20854,20855],{"class":94,"line":1728},[92,20856,20857],{"class":161},"        \u002F\u002Fm_Age=p.m_Age;\n",[92,20859,20860],{"class":94,"line":1733},[92,20861,20862],{"class":161},"        \u002F\u002Fm_Height=p.m_Height;\n",[92,20864,20865,20867,20869],{"class":94,"line":1738},[92,20866,20767],{"class":102},[92,20868,148],{"class":98},[92,20870,20871],{"class":102},"p.m_Age;\n",[92,20873,20874],{"class":94,"line":1743},[92,20875,20876],{"class":161},"        \u002F\u002F深拷贝操作\n",[92,20878,20879,20881,20883,20885,20887,20889],{"class":94,"line":1757},[92,20880,20777],{"class":102},[92,20882,11697],{"class":98},[92,20884,2361],{"class":98},[92,20886,103],{"class":102},[92,20888,558],{"class":98},[92,20890,20891],{"class":102},"p.m_Height);\n",[92,20893,20894],{"class":94,"line":1762},[92,20895,2166],{"class":102},[92,20897,20898],{"class":94,"line":2556},[92,20899,2379],{"emptyLinePlaceholder":17},[92,20901,20902],{"class":94,"line":2570},[92,20903,18527],{"class":161},[92,20905,20906,20908],{"class":94,"line":2578},[92,20907,18532],{"class":1942},[92,20909,1955],{"class":102},[92,20911,20912],{"class":94,"line":2583},[92,20913,2009],{"class":102},[92,20915,20916],{"class":94,"line":2589},[92,20917,20918],{"class":161},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[92,20920,20921,20923,20926,20929,20932],{"class":94,"line":2595},[92,20922,2476],{"class":98},[92,20924,20925],{"class":102},"(m_Height ",[92,20927,20928],{"class":98},"!=",[92,20930,20931],{"class":151}," NULL",[92,20933,109],{"class":102},[92,20935,20936],{"class":94,"line":2600},[92,20937,2489],{"class":102},[92,20939,20940,20943,20946],{"class":94,"line":7928},[92,20941,20942],{"class":98},"            delete",[92,20944,20945],{"class":102}," m_Height;",[92,20947,20948],{"class":161}," \u002F\u002F释放堆区内存\n",[92,20950,20951,20954,20956,20958,20960],{"class":94,"line":7952},[92,20952,20953],{"class":102},"            m_Height",[92,20955,148],{"class":98},[92,20957,2371],{"class":151},[92,20959,158],{"class":102},[92,20961,20962],{"class":161}," \u002F\u002F防止野指针\n",[92,20964,20965],{"class":94,"line":7957},[92,20966,2508],{"class":102},[92,20968,20969,20971,20973],{"class":94,"line":7963},[92,20970,3430],{"class":102},[92,20972,1147],{"class":98},[92,20974,20975],{"class":207},"\"Person的析构函数调用\"\n",[92,20977,20978],{"class":94,"line":7990},[92,20979,2166],{"class":102},[92,20981,20982,20984],{"class":94,"line":7995},[92,20983,1964],{"class":98},[92,20985,15646],{"class":102},[92,20987,20988,20990,20992,20995],{"class":94,"line":8001},[92,20989,1964],{"class":98},[92,20991,6498],{"class":98},[92,20993,20994],{"class":102},"m_Height;",[92,20996,20997],{"class":161}," \u002F\u002F定义一个指针，指向身高\n",[92,20999,21000],{"class":94,"line":8013},[92,21001,3974],{"class":102},[92,21003,21004,21006,21008],{"class":94,"line":8025},[92,21005,5344],{"class":98},[92,21007,5568],{"class":1942},[92,21009,1955],{"class":102},[92,21011,21012],{"class":94,"line":8037},[92,21013,1525],{"class":102},[92,21015,21016,21018,21020,21022,21024,21026,21029],{"class":94,"line":9696},[92,21017,19411],{"class":102},[92,21019,7110],{"class":1942},[92,21021,103],{"class":102},[92,21023,753],{"class":151},[92,21025,481],{"class":102},[92,21027,21028],{"class":151},"160",[92,21030,2698],{"class":102},[92,21032,21033,21035,21037,21040,21042,21045,21047,21050,21052,21055,21057,21059],{"class":94,"line":9721},[92,21034,1530],{"class":102},[92,21036,1147],{"class":98},[92,21038,21039],{"class":207},"\"p1的年龄为:\"",[92,21041,1147],{"class":98},[92,21043,21044],{"class":102},"p1.m_Age",[92,21046,1147],{"class":98},[92,21048,21049],{"class":207},"\"身高为：\"",[92,21051,6399],{"class":98},[92,21053,21054],{"class":102},"p1.m_Height",[92,21056,1147],{"class":98},[92,21058,1217],{"class":102},[92,21060,21061],{"class":161},"  \u002F\u002F18\n",[92,21063,21064,21066,21068],{"class":94,"line":9744},[92,21065,19411],{"class":102},[92,21067,7013],{"class":1942},[92,21069,17495],{"class":102},[92,21071,21072,21074,21076,21079,21081,21083,21085,21087,21089,21092,21094,21096],{"class":94,"line":9768},[92,21073,1530],{"class":102},[92,21075,1147],{"class":98},[92,21077,21078],{"class":207},"\"p2的年龄为：\"",[92,21080,1147],{"class":98},[92,21082,19441],{"class":102},[92,21084,1147],{"class":98},[92,21086,21049],{"class":207},[92,21088,6399],{"class":98},[92,21090,21091],{"class":102},"p2.m_Height",[92,21093,1147],{"class":98},[92,21095,1217],{"class":102},[92,21097,21061],{"class":161},[92,21099,21100],{"class":94,"line":9773},[92,21101,13190],{"class":102},[92,21103,21104],{"class":94,"line":9778},[92,21105,1544],{"class":102},[92,21107,21108,21110,21112],{"class":94,"line":9783},[92,21109,106],{"class":98},[92,21111,1952],{"class":1942},[92,21113,1955],{"class":102},[92,21115,21116],{"class":94,"line":9792},[92,21117,1525],{"class":102},[92,21119,21120,21122],{"class":94,"line":9797},[92,21121,5613],{"class":1942},[92,21123,5616],{"class":102},[92,21125,21126],{"class":94,"line":9803},[92,21127,1544],{"class":102},[38,21129,21130],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[38,21132,21133],{},"浅拷贝带来的问题是堆区的内存重复释放",[38,21135,21136],{},[1441,21137],{"alt":10,"src":21138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[38,21140,21141],{},"浅拷贝问题要使用深拷贝来解决",[38,21143,21144],{},[1441,21145],{"alt":10,"src":21146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[38,21148,21149],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[63,21151,21153],{"id":21152},"_826初始化列表","8.2.6初始化列表",[38,21155,21156],{},"作用：初始化属性",[38,21158,5161],{},[83,21160,21163],{"className":21161,"code":21162,"language":5167},[5165],"构造函数():属性1(值1),属性2(值2).....{}\n",[89,21164,21162],{"__ignoreMap":10},[38,21166,21167],{},"例子",[83,21169,21171],{"className":85,"code":21170,"language":87,"meta":10,"style":10},"#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",[89,21172,21173,21179,21189,21195,21199,21204,21208,21213,21218,21223,21228,21233,21238,21242,21247,21252,21295,21304,21322,21340,21358,21362,21366,21373,21380,21387,21391,21395,21403,21407,21411,21431,21440,21444,21448,21458,21462,21470],{"__ignoreMap":10},[92,21174,21175,21177],{"class":94,"line":95},[92,21176,1928],{"class":98},[92,21178,1931],{"class":207},[92,21180,21181,21183,21185,21187],{"class":94,"line":11},[92,21182,1936],{"class":98},[92,21184,1939],{"class":98},[92,21186,1943],{"class":1942},[92,21188,1269],{"class":102},[92,21190,21191,21193],{"class":94,"line":1158},[92,21192,14674],{"class":98},[92,21194,15151],{"class":1942},[92,21196,21197],{"class":94,"line":1173},[92,21198,1525],{"class":102},[92,21200,21201],{"class":94,"line":1179},[92,21202,21203],{"class":98},"    public:\n",[92,21205,21206],{"class":94,"line":1193},[92,21207,2379],{"emptyLinePlaceholder":17},[92,21209,21210],{"class":94,"line":1199},[92,21211,21212],{"class":161},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[92,21214,21215],{"class":94,"line":1290},[92,21216,21217],{"class":161},"    \u002F\u002FPerson(int a, int b, int c) {\n",[92,21219,21220],{"class":94,"line":1296},[92,21221,21222],{"class":161},"    \u002F\u002F  m_A = a;\n",[92,21224,21225],{"class":94,"line":1308},[92,21226,21227],{"class":161},"    \u002F\u002F  m_B = b;\n",[92,21229,21230],{"class":94,"line":1591},[92,21231,21232],{"class":161},"    \u002F\u002F  m_C = c;\n",[92,21234,21235],{"class":94,"line":1596},[92,21236,21237],{"class":161},"    \u002F\u002F}\n",[92,21239,21240],{"class":94,"line":1602},[92,21241,2379],{"emptyLinePlaceholder":17},[92,21243,21244],{"class":94,"line":1607},[92,21245,21246],{"class":161},"    \u002F\u002F初始化列表方式初始化\n",[92,21248,21249],{"class":94,"line":1621},[92,21250,21251],{"class":161},"    \u002F\u002F使用有参构造函数\n",[92,21253,21254,21256,21258,21260,21262,21264,21266,21268,21270,21272,21274,21277,21280,21283,21286,21289,21292],{"class":94,"line":1626},[92,21255,18499],{"class":1942},[92,21257,103],{"class":102},[92,21259,106],{"class":98},[92,21261,1377],{"class":5196},[92,21263,12415],{"class":102},[92,21265,106],{"class":98},[92,21267,2812],{"class":5196},[92,21269,12415],{"class":102},[92,21271,106],{"class":98},[92,21273,2828],{"class":5196},[92,21275,21276],{"class":102},") :",[92,21278,21279],{"class":1942},"m_A",[92,21281,21282],{"class":102},"(a), ",[92,21284,21285],{"class":1942},"m_B",[92,21287,21288],{"class":102},"(b), ",[92,21290,21291],{"class":1942},"m_C",[92,21293,21294],{"class":102},"(c) {}\n",[92,21296,21297,21299,21302],{"class":94,"line":1632},[92,21298,14889],{"class":98},[92,21300,21301],{"class":1942}," PrintPerson",[92,21303,10833],{"class":102},[92,21305,21306,21308,21310,21313,21315,21318,21320],{"class":94,"line":1653},[92,21307,9649],{"class":102},[92,21309,1147],{"class":98},[92,21311,21312],{"class":207}," \"mA:\"",[92,21314,1423],{"class":98},[92,21316,21317],{"class":102}," m_A ",[92,21319,1147],{"class":98},[92,21321,8820],{"class":102},[92,21323,21324,21326,21328,21331,21333,21336,21338],{"class":94,"line":1658},[92,21325,9649],{"class":102},[92,21327,1147],{"class":98},[92,21329,21330],{"class":207}," \"mB:\"",[92,21332,1423],{"class":98},[92,21334,21335],{"class":102}," m_B ",[92,21337,1147],{"class":98},[92,21339,8820],{"class":102},[92,21341,21342,21344,21346,21349,21351,21354,21356],{"class":94,"line":1672},[92,21343,9649],{"class":102},[92,21345,1147],{"class":98},[92,21347,21348],{"class":207}," \"mC:\"",[92,21350,1423],{"class":98},[92,21352,21353],{"class":102}," m_C ",[92,21355,1147],{"class":98},[92,21357,8820],{"class":102},[92,21359,21360],{"class":94,"line":1677},[92,21361,2166],{"class":102},[92,21363,21364],{"class":94,"line":1706},[92,21365,15202],{"class":98},[92,21367,21368,21370],{"class":94,"line":1711},[92,21369,1964],{"class":98},[92,21371,21372],{"class":102}," m_A;\n",[92,21374,21375,21377],{"class":94,"line":1728},[92,21376,1964],{"class":98},[92,21378,21379],{"class":102}," m_B;\n",[92,21381,21382,21384],{"class":94,"line":1733},[92,21383,1964],{"class":98},[92,21385,21386],{"class":102}," m_C;\n",[92,21388,21389],{"class":94,"line":1738},[92,21390,3974],{"class":102},[92,21392,21393],{"class":94,"line":1743},[92,21394,2379],{"emptyLinePlaceholder":17},[92,21396,21397,21399,21401],{"class":94,"line":1757},[92,21398,106],{"class":98},[92,21400,1952],{"class":1942},[92,21402,5958],{"class":102},[92,21404,21405],{"class":94,"line":1762},[92,21406,1525],{"class":102},[92,21408,21409],{"class":94,"line":2556},[92,21410,2379],{"emptyLinePlaceholder":17},[92,21412,21413,21415,21417,21419,21421,21423,21425,21427,21429],{"class":94,"line":2570},[92,21414,19411],{"class":102},[92,21416,38],{"class":1942},[92,21418,103],{"class":102},[92,21420,320],{"class":151},[92,21422,12415],{"class":102},[92,21424,180],{"class":151},[92,21426,12415],{"class":102},[92,21428,174],{"class":151},[92,21430,2698],{"class":102},[92,21432,21433,21435,21438],{"class":94,"line":2578},[92,21434,15846],{"class":102},[92,21436,21437],{"class":1942},"PrintPerson",[92,21439,5616],{"class":102},[92,21441,21442],{"class":94,"line":2583},[92,21443,2379],{"emptyLinePlaceholder":17},[92,21445,21446],{"class":94,"line":2589},[92,21447,2379],{"emptyLinePlaceholder":17},[92,21449,21450,21452,21454,21456],{"class":94,"line":2595},[92,21451,2282],{"class":1942},[92,21453,103],{"class":102},[92,21455,2287],{"class":207},[92,21457,2698],{"class":102},[92,21459,21460],{"class":94,"line":2600},[92,21461,2379],{"emptyLinePlaceholder":17},[92,21463,21464,21466,21468],{"class":94,"line":7928},[92,21465,4069],{"class":98},[92,21467,4072],{"class":151},[92,21469,1269],{"class":102},[92,21471,21472],{"class":94,"line":7952},[92,21473,1544],{"class":102},[38,21475,21476,21477,21480,21481],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[252,21478,21479],{},"参数名就是定义的对象属性","，",[252,21482,21483],{},"属性后面的值为有参构造函数的形参",[83,21485,21487],{"className":85,"code":21486,"language":87,"meta":10,"style":10},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[89,21488,21489],{"__ignoreMap":10},[92,21490,21491,21493,21495,21497,21500,21502,21505,21507,21510,21512,21515,21517,21520,21522],{"class":94,"line":95},[92,21492,19026],{"class":1942},[92,21494,103],{"class":102},[92,21496,106],{"class":98},[92,21498,21499],{"class":102}," a.",[92,21501,106],{"class":98},[92,21503,21504],{"class":102}," b,",[92,21506,106],{"class":98},[92,21508,21509],{"class":102}," b):",[92,21511,21279],{"class":1942},[92,21513,21514],{"class":102},"(a),",[92,21516,21285],{"class":1942},[92,21518,21519],{"class":102},"(c),",[92,21521,21291],{"class":1942},[92,21523,21524],{"class":102},"(b) {}\n",[63,21526,21528],{"id":21527},"_827类对象作为类成员","8.2.7类对象作为类成员",[38,21530,21531],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[38,21533,14613],{},[83,21535,21537],{"className":85,"code":21536,"language":87,"meta":10,"style":10},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[89,21538,21539,21544,21549,21553,21558,21562],{"__ignoreMap":10},[92,21540,21541],{"class":94,"line":95},[92,21542,21543],{"class":102},"A{};\n",[92,21545,21546],{"class":94,"line":11},[92,21547,21548],{"class":102},"B\n",[92,21550,21551],{"class":94,"line":1158},[92,21552,1525],{"class":102},[92,21554,21555],{"class":94,"line":1173},[92,21556,21557],{"class":102},"    A a;\n",[92,21559,21560],{"class":94,"line":1179},[92,21561,1544],{"class":102},[92,21563,21564],{"class":94,"line":1193},[92,21565,21566],{"class":161},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[38,21568,21569],{},"案例",[83,21571,21573],{"className":85,"code":21572,"language":87,"meta":10,"style":10},"\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",[89,21574,21575,21580,21587,21591,21596,21601,21615,21619,21629,21640,21644,21651,21655,21668,21672,21677,21682,21686,21692,21696,21700,21704,21735,21739,21750,21754,21760,21764,21777,21781,21785,21789,21794,21799,21803,21811,21815,21832,21851,21855,21863,21867,21873],{"__ignoreMap":10},[92,21576,21577],{"class":94,"line":95},[92,21578,21579],{"class":161},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[92,21581,21582,21584],{"class":94,"line":11},[92,21583,14674],{"class":98},[92,21585,21586],{"class":1942}," Phone\n",[92,21588,21589],{"class":94,"line":1158},[92,21590,1525],{"class":102},[92,21592,21593],{"class":94,"line":1173},[92,21594,21595],{"class":102},"public：\n",[92,21597,21598],{"class":94,"line":1179},[92,21599,21600],{"class":161},"    \u002F\u002F 赋值(构造函数)\n",[92,21602,21603,21606,21608,21610,21613],{"class":94,"line":1193},[92,21604,21605],{"class":1942},"    Phone",[92,21607,103],{"class":102},[92,21609,14897],{"class":1942},[92,21611,21612],{"class":5196}," pName",[92,21614,109],{"class":102},[92,21616,21617],{"class":94,"line":1199},[92,21618,2009],{"class":102},[92,21620,21621,21624,21626],{"class":94,"line":1290},[92,21622,21623],{"class":102},"        m_pName",[92,21625,148],{"class":98},[92,21627,21628],{"class":102},"pName;\n",[92,21630,21631,21633,21635,21638],{"class":94,"line":1296},[92,21632,3430],{"class":102},[92,21634,1147],{"class":98},[92,21636,21637],{"class":207},"\"Phone的构造函数调用\"",[92,21639,1269],{"class":102},[92,21641,21642],{"class":94,"line":1308},[92,21643,2166],{"class":102},[92,21645,21646,21649],{"class":94,"line":1591},[92,21647,21648],{"class":1942},"    ~Phone",[92,21650,1955],{"class":102},[92,21652,21653],{"class":94,"line":1596},[92,21654,2009],{"class":102},[92,21656,21657,21659,21661,21664,21666],{"class":94,"line":1602},[92,21658,3430],{"class":102},[92,21660,1147],{"class":98},[92,21662,21663],{"class":207},"\"Phone析构函数调用\"",[92,21665,1147],{"class":98},[92,21667,1170],{"class":102},[92,21669,21670],{"class":94,"line":1607},[92,21671,2166],{"class":102},[92,21673,21674],{"class":94,"line":1621},[92,21675,21676],{"class":161},"    \u002F\u002F\n",[92,21678,21679],{"class":94,"line":1626},[92,21680,21681],{"class":102},"    string m_PName;\n",[92,21683,21684],{"class":94,"line":1632},[92,21685,3974],{"class":102},[92,21687,21688,21690],{"class":94,"line":1653},[92,21689,14674],{"class":98},[92,21691,15151],{"class":1942},[92,21693,21694],{"class":94,"line":1658},[92,21695,1525],{"class":102},[92,21697,21698],{"class":94,"line":1672},[92,21699,14696],{"class":98},[92,21701,21702],{"class":94,"line":1677},[92,21703,16974],{"class":161},[92,21705,21706,21708,21710,21712,21714,21716,21718,21721,21724,21726,21729,21732],{"class":94,"line":1706},[92,21707,18499],{"class":1942},[92,21709,103],{"class":102},[92,21711,14897],{"class":1942},[92,21713,14900],{"class":5196},[92,21715,481],{"class":102},[92,21717,14897],{"class":1942},[92,21719,21720],{"class":5196}," pname",[92,21722,21723],{"class":102},"):",[92,21725,14990],{"class":1942},[92,21727,21728],{"class":102},"(name),m_phone.",[92,21730,21731],{"class":1942},"m_PName",[92,21733,21734],{"class":102},"(pname) \n",[92,21736,21737],{"class":94,"line":1711},[92,21738,2009],{"class":102},[92,21740,21741,21743,21745,21748],{"class":94,"line":1728},[92,21742,3430],{"class":102},[92,21744,1147],{"class":98},[92,21746,21747],{"class":207},"\"Person的构造函数调用\"",[92,21749,1269],{"class":102},[92,21751,21752],{"class":94,"line":1733},[92,21753,2166],{"class":102},[92,21755,21756,21758],{"class":94,"line":1738},[92,21757,18532],{"class":1942},[92,21759,1955],{"class":102},[92,21761,21762],{"class":94,"line":1743},[92,21763,2009],{"class":102},[92,21765,21766,21768,21770,21773,21775],{"class":94,"line":1757},[92,21767,3430],{"class":102},[92,21769,1147],{"class":98},[92,21771,21772],{"class":207},"\"Person析构函数调用\"",[92,21774,1147],{"class":98},[92,21776,1170],{"class":102},[92,21778,21779],{"class":94,"line":1762},[92,21780,2166],{"class":102},[92,21782,21783],{"class":94,"line":2556},[92,21784,7760],{"class":161},[92,21786,21787],{"class":94,"line":2570},[92,21788,14872],{"class":102},[92,21790,21791],{"class":94,"line":2578},[92,21792,21793],{"class":161},"    \u002F\u002F手机\n",[92,21795,21796],{"class":94,"line":2583},[92,21797,21798],{"class":102},"    Phone m_Phone;\n",[92,21800,21801],{"class":94,"line":2589},[92,21802,3974],{"class":102},[92,21804,21805,21807,21809],{"class":94,"line":2595},[92,21806,5344],{"class":98},[92,21808,5568],{"class":1942},[92,21810,1955],{"class":102},[92,21812,21813],{"class":94,"line":2600},[92,21814,1525],{"class":102},[92,21816,21817,21819,21821,21823,21825,21827,21830],{"class":94,"line":7928},[92,21818,19411],{"class":102},[92,21820,38],{"class":1942},[92,21822,103],{"class":102},[92,21824,7896],{"class":207},[92,21826,481],{"class":102},[92,21828,21829],{"class":207},"\"安卓\"",[92,21831,2698],{"class":102},[92,21833,21834,21836,21838,21841,21843,21846,21848],{"class":94,"line":7952},[92,21835,1530],{"class":102},[92,21837,1147],{"class":98},[92,21839,21840],{"class":102},"p.Name",[92,21842,1147],{"class":98},[92,21844,21845],{"class":207},"\"拿着：\"",[92,21847,1147],{"class":98},[92,21849,21850],{"class":102},"p.m_phone.m_PName;\n",[92,21852,21853],{"class":94,"line":7957},[92,21854,1544],{"class":102},[92,21856,21857,21859,21861],{"class":94,"line":7963},[92,21858,106],{"class":98},[92,21860,1952],{"class":1942},[92,21862,1955],{"class":102},[92,21864,21865],{"class":94,"line":7990},[92,21866,1525],{"class":102},[92,21868,21869,21871],{"class":94,"line":7995},[92,21870,5613],{"class":1942},[92,21872,5616],{"class":102},[92,21874,21875],{"class":94,"line":8001},[92,21876,1544],{"class":102},[38,21878,9005],{},[83,21880,21882],{"className":85,"code":21881,"language":87,"meta":10,"style":10},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[89,21883,21884,21889],{"__ignoreMap":10},[92,21885,21886],{"class":94,"line":95},[92,21887,21888],{"class":161},"    \u002F\u002F不需要写这个：\n",[92,21890,21891],{"class":94,"line":11},[92,21892,21893],{"class":161},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[38,21895,21896],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[83,21898,21900],{"className":85,"code":21899,"language":87,"meta":10,"style":10},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[89,21901,21902],{"__ignoreMap":10},[92,21903,21904,21906,21909,21911,21914,21917],{"class":94,"line":95},[92,21905,19026],{"class":1942},[92,21907,21908],{"class":102},"(string name.string pname):",[92,21910,14990],{"class":1942},[92,21912,21913],{"class":102},"(name),",[92,21915,21916],{"class":1942},"m_phone",[92,21918,21919],{"class":102},"(pname) {}\n",[38,21921,21922,21923,148,21926],{},"采用的是隐式转换法，实际为如下：\n",[89,21924,21925],{},"m_phone(pname)",[89,21927,21928],{},"Phone m_phone=pname",[38,21930,21931,21934],{},[252,21932,21933],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[38,21936,21937],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[63,21939,21941],{"id":21940},"_828静态对象","8.2.8静态对象",[38,21943,21944],{},"静态对象在成员对象前static，称为静态对象",[38,21946,21947],{},"静态对象分为两类：",[46,21949,21950],{},[49,21951,21952],{},"静态成员变量",[1110,21954,21955,21958,21961],{},[49,21956,21957],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[49,21959,21960],{},"②在编译阶段分配内存",[49,21962,21963],{},"③类内声明，类外初始化",[46,21965,21966],{"start":11},[49,21967,21968],{},"静态成员函数",[1110,21970,21971,21974],{},[49,21972,21973],{},"①所有对象共享同一个函数",[49,21975,21976],{},"②静态成员函数只能访问静态成员变量",[21978,21979,21981],"h4",{"id":21980},"_8281静态成员变量","8.2.8.1静态成员变量",[83,21983,21985],{"className":85,"code":21984,"language":87,"meta":10,"style":10},"#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",[89,21986,21987,21993,22003,22009,22013,22017,22022,22027,22032,22040,22044,22048,22052,22060,22064,22068,22073,22086,22090,22098,22102,22108],{"__ignoreMap":10},[92,21988,21989,21991],{"class":94,"line":95},[92,21990,1928],{"class":98},[92,21992,1931],{"class":207},[92,21994,21995,21997,21999,22001],{"class":94,"line":11},[92,21996,1936],{"class":98},[92,21998,1939],{"class":98},[92,22000,1943],{"class":1942},[92,22002,1269],{"class":102},[92,22004,22005,22007],{"class":94,"line":1158},[92,22006,14674],{"class":98},[92,22008,15151],{"class":1942},[92,22010,22011],{"class":94,"line":1173},[92,22012,1525],{"class":102},[92,22014,22015],{"class":94,"line":1179},[92,22016,14696],{"class":98},[92,22018,22019],{"class":94,"line":1193},[92,22020,22021],{"class":161},"    \u002F\u002F非静态成员变量\n",[92,22023,22024],{"class":94,"line":1199},[92,22025,22026],{"class":161},"    \u002F\u002F int m_A;\n",[92,22028,22029],{"class":94,"line":1290},[92,22030,22031],{"class":161},"    \u002F\u002F定义静态成员变量\n",[92,22033,22034,22036,22038],{"class":94,"line":1296},[92,22035,11000],{"class":98},[92,22037,2361],{"class":98},[92,22039,21372],{"class":102},[92,22041,22042],{"class":94,"line":1308},[92,22043,2379],{"emptyLinePlaceholder":17},[92,22045,22046],{"class":94,"line":1591},[92,22047,2379],{"emptyLinePlaceholder":17},[92,22049,22050],{"class":94,"line":1596},[92,22051,3974],{"class":102},[92,22053,22054,22056,22058],{"class":94,"line":1602},[92,22055,5344],{"class":98},[92,22057,5568],{"class":1942},[92,22059,1955],{"class":102},[92,22061,22062],{"class":94,"line":1607},[92,22063,1525],{"class":102},[92,22065,22066],{"class":94,"line":1621},[92,22067,15293],{"class":102},[92,22069,22070],{"class":94,"line":1626},[92,22071,22072],{"class":161},"    \u002F\u002F输出类成员变量这块内存\n",[92,22074,22075,22077,22079,22082,22084],{"class":94,"line":1632},[92,22076,1530],{"class":102},[92,22078,1147],{"class":98},[92,22080,22081],{"class":102},"p.m_A",[92,22083,1147],{"class":98},[92,22085,1170],{"class":102},[92,22087,22088],{"class":94,"line":1653},[92,22089,1544],{"class":102},[92,22091,22092,22094,22096],{"class":94,"line":1658},[92,22093,106],{"class":98},[92,22095,1952],{"class":1942},[92,22097,1955],{"class":102},[92,22099,22100],{"class":94,"line":1672},[92,22101,1525],{"class":102},[92,22103,22104,22106],{"class":94,"line":1677},[92,22105,5613],{"class":1942},[92,22107,1955],{"class":102},[92,22109,22110],{"class":94,"line":1706},[92,22111,1544],{"class":102},[38,22113,22114],{},"此时输出是报错的：无法解析外部命令",[38,22116,22117],{},"解决这一问题：必须用到类内声明，类外初始化操作",[83,22119,22121],{"className":85,"code":22120,"language":87,"meta":10,"style":10},"#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",[89,22122,22123,22129,22139,22145,22149,22153,22158,22166,22170,22175,22190,22198,22202,22206,22211,22216,22228,22233,22244,22249,22254,22267,22271,22279,22283,22289],{"__ignoreMap":10},[92,22124,22125,22127],{"class":94,"line":95},[92,22126,1928],{"class":98},[92,22128,1931],{"class":207},[92,22130,22131,22133,22135,22137],{"class":94,"line":11},[92,22132,1936],{"class":98},[92,22134,1939],{"class":98},[92,22136,1943],{"class":1942},[92,22138,1269],{"class":102},[92,22140,22141,22143],{"class":94,"line":1158},[92,22142,14674],{"class":98},[92,22144,15151],{"class":1942},[92,22146,22147],{"class":94,"line":1173},[92,22148,1525],{"class":102},[92,22150,22151],{"class":94,"line":1179},[92,22152,14696],{"class":98},[92,22154,22155],{"class":94,"line":1193},[92,22156,22157],{"class":161},"    \u002F\u002F类内声明\n",[92,22159,22160,22162,22164],{"class":94,"line":1199},[92,22161,11000],{"class":98},[92,22163,2361],{"class":98},[92,22165,21372],{"class":102},[92,22167,22168],{"class":94,"line":1290},[92,22169,3974],{"class":102},[92,22171,22172],{"class":94,"line":1296},[92,22173,22174],{"class":161},"\u002F\u002F类外初始化\n",[92,22176,22177,22179,22181,22184,22186,22188],{"class":94,"line":1308},[92,22178,106],{"class":98},[92,22180,15549],{"class":1942},[92,22182,22183],{"class":102},"::m_A",[92,22185,148],{"class":98},[92,22187,549],{"class":151},[92,22189,1269],{"class":102},[92,22191,22192,22194,22196],{"class":94,"line":1591},[92,22193,5344],{"class":98},[92,22195,5568],{"class":1942},[92,22197,1955],{"class":102},[92,22199,22200],{"class":94,"line":1596},[92,22201,1525],{"class":102},[92,22203,22204],{"class":94,"line":1602},[92,22205,15293],{"class":102},[92,22207,22208],{"class":94,"line":1607},[92,22209,22210],{"class":161},"    \u002F\u002F访问变量的原内存空间\n",[92,22212,22213],{"class":94,"line":1621},[92,22214,22215],{"class":161},"    \u002F\u002F100\n",[92,22217,22218,22220,22222,22224,22226],{"class":94,"line":1626},[92,22219,1530],{"class":102},[92,22221,1147],{"class":98},[92,22223,22081],{"class":102},[92,22225,1147],{"class":98},[92,22227,1170],{"class":102},[92,22229,22230],{"class":94,"line":1632},[92,22231,22232],{"class":102},"    Person p2;\n",[92,22234,22235,22238,22240,22242],{"class":94,"line":1653},[92,22236,22237],{"class":102},"    p2.m_A",[92,22239,148],{"class":98},[92,22241,1701],{"class":151},[92,22243,1269],{"class":102},[92,22245,22246],{"class":94,"line":1658},[92,22247,22248],{"class":161},"    \u002F\u002F继续访问这片空间\n",[92,22250,22251],{"class":94,"line":1672},[92,22252,22253],{"class":161},"    \u002F\u002F200\n",[92,22255,22256,22258,22260,22263,22265],{"class":94,"line":1677},[92,22257,1530],{"class":102},[92,22259,1147],{"class":98},[92,22261,22262],{"class":102},"p2.m_A",[92,22264,1147],{"class":98},[92,22266,1170],{"class":102},[92,22268,22269],{"class":94,"line":1706},[92,22270,1544],{"class":102},[92,22272,22273,22275,22277],{"class":94,"line":1711},[92,22274,106],{"class":98},[92,22276,1952],{"class":1942},[92,22278,1955],{"class":102},[92,22280,22281],{"class":94,"line":1728},[92,22282,1525],{"class":102},[92,22284,22285,22287],{"class":94,"line":1733},[92,22286,5613],{"class":1942},[92,22288,5616],{"class":102},[92,22290,22291],{"class":94,"line":1738},[92,22292,1544],{"class":102},[38,22294,22295],{},[252,22296,22297],{},"静态变量的访问",[83,22299,22301],{"className":85,"code":22300,"language":87,"meta":10,"style":10},"#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",[89,22302,22303,22309,22319,22325,22329,22333,22337,22345,22349,22354,22362,22366,22370,22384,22399,22407,22411,22416,22421,22426,22431,22443,22448,22453,22467,22484,22488,22496,22500,22506],{"__ignoreMap":10},[92,22304,22305,22307],{"class":94,"line":95},[92,22306,1928],{"class":98},[92,22308,1931],{"class":207},[92,22310,22311,22313,22315,22317],{"class":94,"line":11},[92,22312,1936],{"class":98},[92,22314,1939],{"class":98},[92,22316,1943],{"class":1942},[92,22318,1269],{"class":102},[92,22320,22321,22323],{"class":94,"line":1158},[92,22322,14674],{"class":98},[92,22324,15151],{"class":1942},[92,22326,22327],{"class":94,"line":1173},[92,22328,1525],{"class":102},[92,22330,22331],{"class":94,"line":1179},[92,22332,14696],{"class":98},[92,22334,22335],{"class":94,"line":1193},[92,22336,22157],{"class":161},[92,22338,22339,22341,22343],{"class":94,"line":1199},[92,22340,11000],{"class":98},[92,22342,2361],{"class":98},[92,22344,21372],{"class":102},[92,22346,22347],{"class":94,"line":1290},[92,22348,15202],{"class":98},[92,22350,22351],{"class":94,"line":1296},[92,22352,22353],{"class":161},"    \u002F\u002F静态成员变量也是有访问权限的\n",[92,22355,22356,22358,22360],{"class":94,"line":1308},[92,22357,11000],{"class":98},[92,22359,2361],{"class":98},[92,22361,21379],{"class":102},[92,22363,22364],{"class":94,"line":1591},[92,22365,3974],{"class":102},[92,22367,22368],{"class":94,"line":1596},[92,22369,22174],{"class":161},[92,22371,22372,22374,22376,22378,22380,22382],{"class":94,"line":1602},[92,22373,106],{"class":98},[92,22375,15549],{"class":1942},[92,22377,22183],{"class":102},[92,22379,148],{"class":98},[92,22381,549],{"class":151},[92,22383,1269],{"class":102},[92,22385,22386,22388,22390,22393,22395,22397],{"class":94,"line":1607},[92,22387,106],{"class":98},[92,22389,15549],{"class":1942},[92,22391,22392],{"class":102},"::m_B",[92,22394,148],{"class":98},[92,22396,803],{"class":151},[92,22398,1269],{"class":102},[92,22400,22401,22403,22405],{"class":94,"line":1621},[92,22402,5344],{"class":98},[92,22404,5637],{"class":1942},[92,22406,1955],{"class":102},[92,22408,22409],{"class":94,"line":1626},[92,22410,1525],{"class":102},[92,22412,22413],{"class":94,"line":1632},[92,22414,22415],{"class":161},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[92,22417,22418],{"class":94,"line":1653},[92,22419,22420],{"class":161},"    \u002F\u002F静态成员变量有两种访问方式：\n",[92,22422,22423],{"class":94,"line":1658},[92,22424,22425],{"class":161},"    \u002F\u002F1.通过对象进行访问\n",[92,22427,22428],{"class":94,"line":1672},[92,22429,22430],{"class":102},"    Person p;  \n",[92,22432,22433,22435,22437,22439,22441],{"class":94,"line":1677},[92,22434,1530],{"class":102},[92,22436,1147],{"class":98},[92,22438,22081],{"class":102},[92,22440,1147],{"class":98},[92,22442,1170],{"class":102},[92,22444,22445],{"class":94,"line":1706},[92,22446,22447],{"class":161},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[92,22449,22450],{"class":94,"line":1711},[92,22451,22452],{"class":161},"    \u002F\u002F2.通过类名进行访问\n",[92,22454,22455,22457,22459,22461,22463,22465],{"class":94,"line":1728},[92,22456,1530],{"class":102},[92,22458,1147],{"class":98},[92,22460,19026],{"class":1942},[92,22462,22183],{"class":102},[92,22464,1147],{"class":98},[92,22466,1170],{"class":102},[92,22468,22469,22471,22473,22475,22477,22479,22481],{"class":94,"line":1733},[92,22470,1530],{"class":102},[92,22472,1147],{"class":98},[92,22474,19026],{"class":1942},[92,22476,22392],{"class":102},[92,22478,1147],{"class":98},[92,22480,1217],{"class":102},[92,22482,22483],{"class":161}," \u002F\u002F没有访问权限，报错\n",[92,22485,22486],{"class":94,"line":1738},[92,22487,1544],{"class":102},[92,22489,22490,22492,22494],{"class":94,"line":1743},[92,22491,106],{"class":98},[92,22493,1952],{"class":1942},[92,22495,1955],{"class":102},[92,22497,22498],{"class":94,"line":1757},[92,22499,1525],{"class":102},[92,22501,22502,22504],{"class":94,"line":1762},[92,22503,5682],{"class":1942},[92,22505,5616],{"class":102},[92,22507,22508],{"class":94,"line":2556},[92,22509,1544],{"class":102},[21978,22511,22513],{"id":22512},"_8282静态成员函数","8.2.8.2静态成员函数",[38,22515,22516],{},"1.静态成员函数定义与访问",[83,22518,22520],{"className":85,"code":22519,"language":87,"meta":10,"style":10},"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",[89,22521,22522,22528,22532,22536,22541,22552,22556,22570,22574,22578,22586,22590,22595,22600,22604,22612,22617,22627],{"__ignoreMap":10},[92,22523,22524,22526],{"class":94,"line":95},[92,22525,14674],{"class":98},[92,22527,15151],{"class":1942},[92,22529,22530],{"class":94,"line":11},[92,22531,1525],{"class":102},[92,22533,22534],{"class":94,"line":1158},[92,22535,14696],{"class":98},[92,22537,22538],{"class":94,"line":1173},[92,22539,22540],{"class":161},"    \u002F\u002F在公共权限下定义静态成员函数\n",[92,22542,22543,22545,22548,22550],{"class":94,"line":1179},[92,22544,11000],{"class":98},[92,22546,22547],{"class":98}," void",[92,22549,11365],{"class":1942},[92,22551,1955],{"class":102},[92,22553,22554],{"class":94,"line":1193},[92,22555,2009],{"class":102},[92,22557,22558,22561,22563,22566,22568],{"class":94,"line":1199},[92,22559,22560],{"class":102},"        coout",[92,22562,1147],{"class":98},[92,22564,22565],{"class":207},"\"静态成员函数的调用\"",[92,22567,1147],{"class":98},[92,22569,1170],{"class":102},[92,22571,22572],{"class":94,"line":1290},[92,22573,2166],{"class":102},[92,22575,22576],{"class":94,"line":1296},[92,22577,3974],{"class":102},[92,22579,22580,22582,22584],{"class":94,"line":1308},[92,22581,5344],{"class":98},[92,22583,5568],{"class":1942},[92,22585,1955],{"class":102},[92,22587,22588],{"class":94,"line":1591},[92,22589,1525],{"class":102},[92,22591,22592],{"class":94,"line":1596},[92,22593,22594],{"class":161},"    \u002F\u002F静态成员函数的调用方式:\n",[92,22596,22597],{"class":94,"line":1602},[92,22598,22599],{"class":161},"    \u002F\u002F1.通过对象访问\n",[92,22601,22602],{"class":94,"line":1607},[92,22603,15293],{"class":102},[92,22605,22606,22608,22610],{"class":94,"line":1621},[92,22607,15846],{"class":102},[92,22609,11531],{"class":1942},[92,22611,5616],{"class":102},[92,22613,22614],{"class":94,"line":1626},[92,22615,22616],{"class":161},"    \u002F\u002F2.通过类名访问\n",[92,22618,22619,22621,22623,22625],{"class":94,"line":1632},[92,22620,18499],{"class":1942},[92,22622,17712],{"class":102},[92,22624,11531],{"class":1942},[92,22626,5616],{"class":102},[92,22628,22629],{"class":94,"line":1653},[92,22630,1544],{"class":102},[46,22632,22633],{"start":11},[49,22634,22635],{},"静态成员函数只能访问静态成员变量",[83,22637,22639],{"className":85,"code":22638,"language":87,"meta":10,"style":10},"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",[89,22640,22641,22647,22651,22655,22659,22669,22673,22687,22692,22704,22708,22719,22729,22733,22737,22741,22751,22755,22768,22772,22776,22780,22784,22798,22806,22810,22814,22818,22822,22830,22834,22844,22849,22853,22861,22865,22871],{"__ignoreMap":10},[92,22642,22643,22645],{"class":94,"line":95},[92,22644,14674],{"class":98},[92,22646,15151],{"class":1942},[92,22648,22649],{"class":94,"line":11},[92,22650,1525],{"class":102},[92,22652,22653],{"class":94,"line":1158},[92,22654,14696],{"class":98},[92,22656,22657],{"class":94,"line":1173},[92,22658,22540],{"class":161},[92,22660,22661,22663,22665,22667],{"class":94,"line":1179},[92,22662,11000],{"class":98},[92,22664,22547],{"class":98},[92,22666,11365],{"class":1942},[92,22668,1955],{"class":102},[92,22670,22671],{"class":94,"line":1193},[92,22672,2009],{"class":102},[92,22674,22675,22678,22680,22682,22684],{"class":94,"line":1199},[92,22676,22677],{"class":102},"        m_A",[92,22679,148],{"class":98},[92,22681,414],{"class":151},[92,22683,158],{"class":102},[92,22685,22686],{"class":161}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[92,22688,22689],{"class":94,"line":1290},[92,22690,22691],{"class":161},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[92,22693,22694,22696,22698,22700,22702],{"class":94,"line":1296},[92,22695,22560],{"class":102},[92,22697,1147],{"class":98},[92,22699,22565],{"class":207},[92,22701,1147],{"class":98},[92,22703,1170],{"class":102},[92,22705,22706],{"class":94,"line":1308},[92,22707,2166],{"class":102},[92,22709,22710,22712,22714,22716],{"class":94,"line":1591},[92,22711,11000],{"class":98},[92,22713,2361],{"class":98},[92,22715,15428],{"class":102},[92,22717,22718],{"class":161}," \u002F\u002F静态成员变量\n",[92,22720,22721,22723,22726],{"class":94,"line":1596},[92,22722,1964],{"class":98},[92,22724,22725],{"class":102}," m_B;",[92,22727,22728],{"class":161}," \u002F\u002F非静态成员变量\n",[92,22730,22731],{"class":94,"line":1602},[92,22732,2379],{"emptyLinePlaceholder":17},[92,22734,22735],{"class":94,"line":1607},[92,22736,15202],{"class":98},[92,22738,22739],{"class":94,"line":1621},[92,22740,22353],{"class":161},[92,22742,22743,22745,22747,22749],{"class":94,"line":1626},[92,22744,11000],{"class":98},[92,22746,22547],{"class":98},[92,22748,13598],{"class":1942},[92,22750,1955],{"class":102},[92,22752,22753],{"class":94,"line":1632},[92,22754,2009],{"class":102},[92,22756,22757,22759,22761,22764,22766],{"class":94,"line":1653},[92,22758,3430],{"class":102},[92,22760,1147],{"class":98},[92,22762,22763],{"class":207},"\"这是私有权限下的静态函数调用\"",[92,22765,1147],{"class":98},[92,22767,1170],{"class":102},[92,22769,22770],{"class":94,"line":1658},[92,22771,2166],{"class":102},[92,22773,22774],{"class":94,"line":1672},[92,22775,2379],{"emptyLinePlaceholder":17},[92,22777,22778],{"class":94,"line":1677},[92,22779,2379],{"emptyLinePlaceholder":17},[92,22781,22782],{"class":94,"line":1706},[92,22783,3974],{"class":102},[92,22785,22786,22788,22790,22792,22794,22796],{"class":94,"line":1711},[92,22787,106],{"class":98},[92,22789,15549],{"class":1942},[92,22791,22183],{"class":102},[92,22793,148],{"class":98},[92,22795,294],{"class":151},[92,22797,1269],{"class":102},[92,22799,22800,22802,22804],{"class":94,"line":1728},[92,22801,5344],{"class":98},[92,22803,5568],{"class":1942},[92,22805,1955],{"class":102},[92,22807,22808],{"class":94,"line":1733},[92,22809,1525],{"class":102},[92,22811,22812],{"class":94,"line":1738},[92,22813,22594],{"class":161},[92,22815,22816],{"class":94,"line":1743},[92,22817,22599],{"class":161},[92,22819,22820],{"class":94,"line":1757},[92,22821,15293],{"class":102},[92,22823,22824,22826,22828],{"class":94,"line":1762},[92,22825,15846],{"class":102},[92,22827,11531],{"class":1942},[92,22829,5616],{"class":102},[92,22831,22832],{"class":94,"line":2556},[92,22833,22616],{"class":161},[92,22835,22836,22838,22840,22842],{"class":94,"line":2570},[92,22837,18499],{"class":1942},[92,22839,17712],{"class":102},[92,22841,11531],{"class":1942},[92,22843,5616],{"class":102},[92,22845,22846],{"class":94,"line":2578},[92,22847,22848],{"class":161},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[92,22850,22851],{"class":94,"line":2583},[92,22852,1544],{"class":102},[92,22854,22855,22857,22859],{"class":94,"line":2589},[92,22856,106],{"class":98},[92,22858,1952],{"class":1942},[92,22860,1955],{"class":102},[92,22862,22863],{"class":94,"line":2595},[92,22864,1525],{"class":102},[92,22866,22867,22869],{"class":94,"line":2600},[92,22868,5613],{"class":1942},[92,22870,5616],{"class":102},[92,22872,22873],{"class":94,"line":7928},[92,22874,1544],{"class":102},[63,22876,22878],{"id":22877},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21978,22880,22882],{"id":22881},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[38,22884,22885],{},"在c++中，类内的成员变量和成员函数分开存储",[38,22887,22888],{},"只有非静态成员变量才属于类的对象上",[22890,22891,22893],"h5",{"id":22892},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[83,22895,22897],{"className":85,"code":22896,"language":87,"meta":10,"style":10},"#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",[89,22898,22899,22906,22916,22922,22926,22930,22934,22942,22946,22950,22973,22977,22985,22989,22995],{"__ignoreMap":10},[92,22900,22901,22903],{"class":94,"line":95},[92,22902,1928],{"class":98},[92,22904,22905],{"class":207},"\u003Ciostraem>\n",[92,22907,22908,22910,22912,22914],{"class":94,"line":11},[92,22909,1936],{"class":98},[92,22911,1939],{"class":98},[92,22913,1943],{"class":1942},[92,22915,1269],{"class":102},[92,22917,22918,22920],{"class":94,"line":1158},[92,22919,14674],{"class":98},[92,22921,15151],{"class":1942},[92,22923,22924],{"class":94,"line":1173},[92,22925,1525],{"class":102},[92,22927,22928],{"class":94,"line":1179},[92,22929,2379],{"emptyLinePlaceholder":17},[92,22931,22932],{"class":94,"line":1193},[92,22933,3974],{"class":102},[92,22935,22936,22938,22940],{"class":94,"line":1199},[92,22937,5344],{"class":98},[92,22939,5568],{"class":1942},[92,22941,1955],{"class":102},[92,22943,22944],{"class":94,"line":1290},[92,22945,1525],{"class":102},[92,22947,22948],{"class":94,"line":1296},[92,22949,15293],{"class":102},[92,22951,22952,22954,22956,22959,22961,22964,22966,22968,22970],{"class":94,"line":1308},[92,22953,1530],{"class":102},[92,22955,1147],{"class":98},[92,22957,22958],{"class":207},"\"size of p=\"",[92,22960,1147],{"class":98},[92,22962,22963],{"class":1942},"sizeoif",[92,22965,6519],{"class":102},[92,22967,1147],{"class":98},[92,22969,1217],{"class":102},[92,22971,22972],{"class":161}," \u002F\u002F查看这个空类的占用的内存空间\n",[92,22974,22975],{"class":94,"line":1591},[92,22976,1544],{"class":102},[92,22978,22979,22981,22983],{"class":94,"line":1596},[92,22980,106],{"class":98},[92,22982,1952],{"class":1942},[92,22984,1955],{"class":102},[92,22986,22987],{"class":94,"line":1602},[92,22988,1525],{"class":102},[92,22990,22991,22993],{"class":94,"line":1607},[92,22992,5613],{"class":1942},[92,22994,5616],{"class":102},[92,22996,22997],{"class":94,"line":1621},[92,22998,1544],{"class":102},[38,23000,23001],{},"输出结果为：size of p=1",[38,23003,23004],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[38,23006,23007],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22890,23009,23011],{"id":23010},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[83,23013,23015],{"className":85,"code":23014,"language":87,"meta":10,"style":10},"#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",[89,23016,23017,23023,23033,23041,23045,23054,23058,23066,23070,23074,23093,23097,23101,23109,23113,23119],{"__ignoreMap":10},[92,23018,23019,23021],{"class":94,"line":95},[92,23020,1928],{"class":98},[92,23022,1931],{"class":207},[92,23024,23025,23027,23029,23031],{"class":94,"line":11},[92,23026,1936],{"class":98},[92,23028,1939],{"class":98},[92,23030,1943],{"class":1942},[92,23032,1269],{"class":102},[92,23034,23035,23037,23039],{"class":94,"line":1158},[92,23036,14674],{"class":98},[92,23038,15549],{"class":1942},[92,23040,2653],{"class":102},[92,23042,23043],{"class":94,"line":1173},[92,23044,1525],{"class":102},[92,23046,23047,23049,23051],{"class":94,"line":1179},[92,23048,1964],{"class":98},[92,23050,15428],{"class":102},[92,23052,23053],{"class":161},"\u002F\u002F非静态成员变量\n",[92,23055,23056],{"class":94,"line":1193},[92,23057,3974],{"class":102},[92,23059,23060,23062,23064],{"class":94,"line":1199},[92,23061,5344],{"class":98},[92,23063,5568],{"class":1942},[92,23065,1955],{"class":102},[92,23067,23068],{"class":94,"line":1290},[92,23069,1525],{"class":102},[92,23071,23072],{"class":94,"line":1296},[92,23073,15293],{"class":102},[92,23075,23076,23078,23080,23082,23084,23086,23088,23090],{"class":94,"line":1308},[92,23077,1530],{"class":102},[92,23079,1147],{"class":98},[92,23081,22958],{"class":207},[92,23083,1351],{"class":98},[92,23085,6519],{"class":102},[92,23087,1147],{"class":98},[92,23089,1217],{"class":102},[92,23091,23092],{"class":161}," \u002F\u002F查看不是空对象时占用多少内存\n",[92,23094,23095],{"class":94,"line":1591},[92,23096,2379],{"emptyLinePlaceholder":17},[92,23098,23099],{"class":94,"line":1596},[92,23100,1544],{"class":102},[92,23102,23103,23105,23107],{"class":94,"line":1602},[92,23104,106],{"class":98},[92,23106,1952],{"class":1942},[92,23108,1955],{"class":102},[92,23110,23111],{"class":94,"line":1607},[92,23112,1525],{"class":102},[92,23114,23115,23117],{"class":94,"line":1621},[92,23116,5613],{"class":1942},[92,23118,5616],{"class":102},[92,23120,23121],{"class":94,"line":1626},[92,23122,1544],{"class":102},[38,23124,23125],{},"输出结果：size of p=4",[38,23127,23128],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[46,23130,23131],{},[49,23132,23133],{},"如果加上非静态成员变量，Person类修改如下",[83,23135,23137],{"className":85,"code":23136,"language":87,"meta":10,"style":10},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[89,23138,23139,23145,23149,23155,23163,23167,23172],{"__ignoreMap":10},[92,23140,23141,23143],{"class":94,"line":95},[92,23142,14674],{"class":98},[92,23144,15151],{"class":1942},[92,23146,23147],{"class":94,"line":11},[92,23148,1525],{"class":102},[92,23150,23151,23153],{"class":94,"line":1158},[92,23152,1964],{"class":98},[92,23154,21372],{"class":102},[92,23156,23157,23159,23161],{"class":94,"line":1173},[92,23158,11000],{"class":98},[92,23160,2361],{"class":98},[92,23162,21379],{"class":102},[92,23164,23165],{"class":94,"line":1179},[92,23166,3974],{"class":102},[92,23168,23169],{"class":94,"line":1193},[92,23170,23171],{"class":161},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[92,23173,23174,23176,23178,23180,23182,23184],{"class":94,"line":1199},[92,23175,106],{"class":98},[92,23177,15549],{"class":1942},[92,23179,22392],{"class":102},[92,23181,148],{"class":98},[92,23183,294],{"class":151},[92,23185,1269],{"class":102},[38,23187,23188],{},"输出结果：4",[38,23190,23191],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[46,23193,23194],{"start":11},[49,23195,23196],{},"加上非静态成员函数",[83,23198,23200],{"className":85,"code":23199,"language":87,"meta":10,"style":10},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[89,23201,23202,23209,23213,23219,23227,23231,23235,23239],{"__ignoreMap":10},[92,23203,23204,23206],{"class":94,"line":95},[92,23205,14674],{"class":98},[92,23207,23208],{"class":1942},"  Person\n",[92,23210,23211],{"class":94,"line":11},[92,23212,1525],{"class":102},[92,23214,23215,23217],{"class":94,"line":1158},[92,23216,1964],{"class":98},[92,23218,21372],{"class":102},[92,23220,23221,23223,23225],{"class":94,"line":1173},[92,23222,14889],{"class":98},[92,23224,11365],{"class":1942},[92,23226,1955],{"class":102},[92,23228,23229],{"class":94,"line":1179},[92,23230,2009],{"class":102},[92,23232,23233],{"class":94,"line":1193},[92,23234,2379],{"emptyLinePlaceholder":17},[92,23236,23237],{"class":94,"line":1199},[92,23238,2166],{"class":102},[92,23240,23241],{"class":94,"line":1290},[92,23242,3974],{"class":102},[38,23244,23245],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[46,23247,23248],{"start":1158},[49,23249,23250],{},"加上静态成员函数",[83,23252,23254],{"className":85,"code":23253,"language":87,"meta":10,"style":10},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[89,23255,23256,23262,23266,23272,23280,23284,23288,23292,23303,23307,23311,23315],{"__ignoreMap":10},[92,23257,23258,23260],{"class":94,"line":95},[92,23259,14674],{"class":98},[92,23261,23208],{"class":1942},[92,23263,23264],{"class":94,"line":11},[92,23265,1525],{"class":102},[92,23267,23268,23270],{"class":94,"line":1158},[92,23269,1964],{"class":98},[92,23271,21372],{"class":102},[92,23273,23274,23276,23278],{"class":94,"line":1173},[92,23275,14889],{"class":98},[92,23277,11365],{"class":1942},[92,23279,1955],{"class":102},[92,23281,23282],{"class":94,"line":1179},[92,23283,2009],{"class":102},[92,23285,23286],{"class":94,"line":1193},[92,23287,2379],{"emptyLinePlaceholder":17},[92,23289,23290],{"class":94,"line":1199},[92,23291,2166],{"class":102},[92,23293,23294,23296,23298,23301],{"class":94,"line":1290},[92,23295,11000],{"class":98},[92,23297,22547],{"class":98},[92,23299,23300],{"class":1942}," func1",[92,23302,1955],{"class":102},[92,23304,23305],{"class":94,"line":1296},[92,23306,2009],{"class":102},[92,23308,23309],{"class":94,"line":1308},[92,23310,2379],{"emptyLinePlaceholder":17},[92,23312,23313],{"class":94,"line":1591},[92,23314,2166],{"class":102},[92,23316,23317],{"class":94,"line":1596},[92,23318,3974],{"class":102},[38,23320,23188],{},[38,23322,23323],{},"解释：静态成员函数也不属于类上",[5106,23325,7654],{},{"title":10,"searchDepth":11,"depth":11,"links":23327},[23328,23334],{"id":14625,"depth":11,"text":14626,"children":23329},[23330,23331,23332,23333],{"id":14629,"depth":1158,"text":14630},{"id":15354,"depth":1158,"text":15355},{"id":15526,"depth":1158,"text":15527},{"id":15985,"depth":1158,"text":15986},{"id":18357,"depth":11,"text":18358,"children":23335},[23336,23337,23338,23339,23340,23341,23342,23343,23344],{"id":18369,"depth":1158,"text":18370},{"id":18662,"depth":1158,"text":18663},{"id":19153,"depth":1158,"text":19154},{"id":20250,"depth":1158,"text":20251},{"id":20673,"depth":1158,"text":20674},{"id":21152,"depth":1158,"text":21153},{"id":21527,"depth":1158,"text":21528},{"id":21940,"depth":1158,"text":21941},{"id":22877,"depth":1158,"text":22878},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14590,"description":23345},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23352,"title":87,"body":23353,"description":13,"extension":14,"meta":23357,"navigation":17,"path":23359,"seo":23360,"stem":23361,"__hash__":23362},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23354,"toc":23355},[],{"title":10,"searchDepth":11,"depth":11,"links":23356},[],{"category":23358},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":87,"description":13},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23364,"title":23365,"body":23366,"description":10,"extension":14,"meta":23957,"navigation":17,"path":23958,"seo":23959,"stem":23960,"__hash__":23961},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23367,"toc":23939},[23368,23371,23375,23378,23381,23384,23402,23407,23410,23413,23416,23419,23424,23427,23432,23435,23438,23442,23445,23448,23454,23457,23475,23479,23483,23486,23491,23494,23498,23501,23514,23517,23521,23524,23527,23530,23555,23558,23567,23578,23593,23625,23629,23636,23644,23648,23651,23654,23659,23663,23666,23669,23674,23677,23681,23684,23687,23692,23695,23699,23704,23708,23775,23779,23782,23785,23788,23791,23794,23800,23821,23824,23838,23847,23851,23854,23857,23862,23865,23870,23875,23878,23881,23886,23891,23894,23899,23904,23907,23912,23917,23920,23923,23928,23931,23936],[29,23369,23365],{"id":23370},"_1强化学习基本认识",[33,23372,23374],{"id":23373},"_11什么是强化学习","1.1.什么是强化学习",[38,23376,23377],{},"强化学习有两部分组成：智能体和环境；",[38,23379,23380],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[38,23382,23383],{},"强化学习与监督学习的区别:",[46,23385,23386,23389,23392,23395],{},[49,23387,23388],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[49,23390,23391],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[49,23393,23394],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[49,23396,23397,23398,23401],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[252,23399,23400],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[38,23403,23404],{},[1441,23405],{"alt":10,"src":23406},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[38,23408,23409],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[38,23411,23412],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[38,23414,23415],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[38,23417,23418],{},"获取奖励",[38,23420,23421],{},[1441,23422],{"alt":10,"src":23423},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[38,23425,23426],{},"强化学习可以分成标准强化学习和深度强化学习",[38,23428,23429],{},[1441,23430],{"alt":10,"src":23431},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[38,23433,23434],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[38,23436,23437],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[33,23439,23441],{"id":23440},"_12强化学习应用场景","1.2.强化学习应用场景",[38,23443,23444],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[38,23446,23447],{},"具身智能中的应用",[38,23449,23450,23453],{},[252,23451,23452],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[38,23455,23456],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[38,23458,23459,23460,23463,23464,23467,23468,23471,23472],{},"机器人是",[252,23461,23462],{},"躯体","，深度学习是",[252,23465,23466],{},"神经元****网络","，VLA是",[252,23469,23470],{},"通用的行为逻辑","，而强化学习是",[252,23473,23474],{},"教练",[33,23476,23478],{"id":23477},"_13序列决策","1.3.序列决策",[63,23480,23482],{"id":23481},"_131智能体与环境","1.3.1.智能体与环境",[38,23484,23485],{},"强化学习研究的问题是智能体agent与环境交互的问题",[38,23487,23488],{},[1441,23489],{"alt":10,"src":23490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[38,23492,23493],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[63,23495,23497],{"id":23496},"_132奖励","1.3.2.奖励",[38,23499,23500],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[38,23502,23503,23504,23513],{},"取某个策略的表现如何。强化学习的目的就是",[252,23505,23506,23507,23512],{},"最大化",[252,23508,23509],{},[252,23510,23511],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[38,23515,23516],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[63,23518,23520],{"id":23519},"_133序列决策","1.3.3.序列决策",[38,23522,23523],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[38,23525,23526],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[38,23528,23529],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[38,23531,23532,23536,23537,23539,23540,23542,23543,23545,23546,13775,23549,13775,23552],{},[23533,23534,23535],"em",{},"Ht"," = ",[23533,23538,699],{},"1*, a",[23533,23541,320],{},", r",[23533,23544,320],{},", . . . ,* ",[23533,23547,23548],{},"ot",[23533,23550,23551],{},", at ,",[23533,23553,23554],{},"rt",[38,23556,23557],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[38,23559,23560,23536,23563,1637,23565,532],{},[23533,23561,23562],{},"st",[23533,23564,155],{},[23533,23566,23535],{},[38,23568,23569,23570,23573,23574,23577],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[252,23571,23572],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[252,23575,23576],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[38,23579,23580,23581,23584,23585,23588,23589,23592],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[252,23582,23583],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[252,23586,23587],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23533,23590,23591],{},"S, A, T, R, Ω, O, γ",")。",[38,23594,23595,23596,23598,23599,23601,23602,103,23604,23607,23608,23610,23611,103,23614,23617,23618,23620,23621,23624],{},"其中 ",[23533,23597,792],{}," 表示状态空间，为隐变量，",[23533,23600,335],{}," 为动作空间，",[23533,23603,817],{},[23533,23605,23606],{},"s ′ |s, a",") 为状态转移概率，",[23533,23609,767],{}," 为奖励函数，",[23533,23612,23613],{},"Ω",[23533,23615,23616],{},"o|s, a",") 为观测概率，",[23533,23619,693],{}," 为观测空间，",[23533,23622,23623],{},"γ"," 为折扣因子。",[33,23626,23628],{"id":23627},"_14动作空间","1.4.动作空间",[38,23630,23631,23632,23635],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[252,23633,23634],{},"动作空间"," ，动作空间分为:",[46,23637,23638,23641],{},[49,23639,23640],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[49,23642,23643],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[33,23645,23647],{"id":23646},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[38,23649,23650],{},"由策略、价值函数、模型三部分组成",[38,23652,23653],{},"这三者组成马尔可夫决策过程",[38,23655,23656],{},[1441,23657],{"alt":10,"src":23658},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[63,23660,23662],{"id":23661},"_151策略","1.5.1.策略",[38,23664,23665],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[38,23667,23668],{},"策略可分为两种：",[38,23670,23671],{},[1441,23672],{"alt":10,"src":23673},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[38,23675,23676],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[63,23678,23680],{"id":23679},"_152价值函数","1.5.2.价值函数",[38,23682,23683],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[38,23685,23686],{},"价值函数中有一个折扣因子，类似于存款利息",[38,23688,23689],{},[1441,23690],{"alt":10,"src":23691},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[38,23693,23694],{},"进入某个状态采取的最优动作可以通过Q函数得到",[63,23696,23698],{"id":23697},"_153模型","1.5.3.模型",[38,23700,23701],{},[1441,23702],{"alt":10,"src":23703},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[33,23705,23707],{"id":23706},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[240,23709,23710,23721],{},[243,23711,23712],{},[246,23713,23714,23718],{},[249,23715,23717],{"align":23716},"left","类型",[249,23719,23720],{"align":23716},"特点",[287,23722,23723,23733,23743,23753,23765],{},[246,23724,23725,23730],{},[292,23726,23727],{"align":23716},[252,23728,23729],{},"基于价值的智能体",[292,23731,23732],{"align":23716},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[246,23734,23735,23740],{},[292,23736,23737],{"align":23716},[252,23738,23739],{},"基于策略的智能体",[292,23741,23742],{"align":23716},"直接学习策略，没有学习价值函数",[246,23744,23745,23750],{},[292,23746,23747],{"align":23716},[252,23748,23749],{},"演员-评论员智能体",[292,23751,23752],{"align":23716},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[246,23754,23755,23760],{},[292,23756,23757],{"align":23716},[252,23758,23759],{},"有模型强化学习智能体",[292,23761,23762],{"align":23716},[1441,23763],{"alt":10,"src":23764},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[246,23766,23767,23772],{},[292,23768,23769],{"align":23716},[252,23770,23771],{},"免模型强化学习智能体",[292,23773,23774],{"align":23716},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[33,23776,23778],{"id":23777},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[38,23780,23781],{},"学习和规划是序列决策的两个基本问题",[38,23783,23784],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[38,23786,23787],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[38,23789,23790],{},"强化学习用到的库：Gym",[38,23792,23793],{},"Gym可以检验强化学习算法的优劣",[38,23795,23796,23799],{},[252,23797,23798],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[83,23801,23805],{"className":23802,"code":23803,"language":23804,"meta":10,"style":10},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[89,23806,23807],{"__ignoreMap":10},[92,23808,23809,23812,23815,23818],{"class":94,"line":95},[92,23810,23811],{"class":1942},"pip",[92,23813,23814],{"class":207}," install",[92,23816,23817],{"class":207}," gym==",[92,23819,23820],{"class":151},"0.25.2\n",[38,23822,23823],{},"显示图形界面需要",[83,23825,23827],{"className":23802,"code":23826,"language":23804,"meta":10,"style":10},"pip install pygame\n",[89,23828,23829],{"__ignoreMap":10},[92,23830,23831,23833,23835],{"class":94,"line":95},[92,23832,23811],{"class":1942},[92,23834,23814],{"class":207},[92,23836,23837],{"class":207}," pygame\n",[38,23839,23840,23841],{},"有关Gym库的相关文档介绍：",[341,23842,23846],{"href":23843,"rel":23844},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23845],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[33,23848,23850],{"id":23849},"_18一些补充基础概念","1.8.一些补充基础概念",[38,23852,23853],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[38,23855,23856],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[38,23858,23859],{},[1441,23860],{"alt":10,"src":23861},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[38,23863,23864],{},"折扣率需要自己来设定",[38,23866,23867],{},[1441,23868],{"alt":10,"src":23869},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[46,23871,23872],{},[49,23873,23874],{},"状态转移函数：",[38,23876,23877],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[38,23879,23880],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[38,23882,23883],{},[1441,23884],{"alt":10,"src":23885},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[46,23887,23888],{"start":11},[49,23889,23890],{},"动作价值函数：",[38,23892,23893],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[38,23895,23896],{},[1441,23897],{"alt":10,"src":23898},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[46,23900,23901],{"start":1158},[49,23902,23903],{},"最优动作价值函数：",[38,23905,23906],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[38,23908,23909],{},[1441,23910],{"alt":10,"src":23911},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[46,23913,23914],{"start":1173},[49,23915,23916],{},"状态价值函数:",[38,23918,23919],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[38,23921,23922],{},"它衡量的是“一个具体动作”的长期价值",[38,23924,23925],{},[1441,23926],{"alt":10,"src":23927},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[38,23929,23930],{},"几个价值函数之间的比较：",[38,23932,23933],{},[1441,23934],{"alt":10,"src":23935},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5106,23937,23938],{},"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":10,"searchDepth":11,"depth":11,"links":23940},[23941,23942,23943,23948,23949,23954,23955,23956],{"id":23373,"depth":11,"text":23374},{"id":23440,"depth":11,"text":23441},{"id":23477,"depth":11,"text":23478,"children":23944},[23945,23946,23947],{"id":23481,"depth":1158,"text":23482},{"id":23496,"depth":1158,"text":23497},{"id":23519,"depth":1158,"text":23520},{"id":23627,"depth":11,"text":23628},{"id":23646,"depth":11,"text":23647,"children":23950},[23951,23952,23953],{"id":23661,"depth":1158,"text":23662},{"id":23679,"depth":1158,"text":23680},{"id":23697,"depth":1158,"text":23698},{"id":23706,"depth":11,"text":23707},{"id":23777,"depth":11,"text":23778},{"id":23849,"depth":11,"text":23850},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23365,"description":10},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23963,"title":23964,"body":23965,"description":23972,"extension":14,"meta":23983,"navigation":17,"path":23984,"seo":23985,"stem":23986,"__hash__":23987},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23966,"toc":23981},[23967,23970,23973,23978],[29,23968,23964],{"id":23969},"_2马尔可夫决策过程",[38,23971,23972],{},"这是强化学习的基本框架",[38,23974,23975],{},[1441,23976],{"alt":10,"src":23977},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[38,23979,23980],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":10,"searchDepth":11,"depth":11,"links":23982},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23964,"description":23972},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":23989,"title":23990,"body":23991,"description":10,"extension":14,"meta":24107,"navigation":17,"path":24108,"seo":24109,"stem":24110,"__hash__":24111},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":23992,"toc":24102},[23993,23996,24000,24003,24008,24013,24016,24021,24024,24029,24032,24036,24041,24044,24049,24054,24059,24062,24066,24071,24074,24079,24084,24089,24094,24097],[29,23994,23990],{"id":23995},"_3动作价值函数",[33,23997,23999],{"id":23998},"_31dqn","3.1.DQN",[38,24001,24002],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[38,24004,24005],{},[1441,24006],{"alt":10,"src":24007},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[38,24009,24010],{},[1441,24011],{"alt":10,"src":24012},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[38,24014,24015],{},"DQN算法的描述：",[38,24017,24018],{},[1441,24019],{"alt":10,"src":24020},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[38,24022,24023],{},"这里的Dense指的是全连接层",[38,24025,24026],{},[1441,24027],{"alt":10,"src":24028},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[38,24030,24031],{},"当前观测的状态为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算法",[33,24033,24035],{"id":24034},"_32dqn的举例","3.2.DQN的举例",[38,24037,24038],{},[1441,24039],{"alt":10,"src":24040},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[38,24042,24043],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[38,24045,24046],{},[1441,24047],{"alt":10,"src":24048},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[38,24050,24051],{},[1441,24052],{"alt":10,"src":24053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[38,24055,24056],{},[1441,24057],{"alt":10,"src":24058},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[38,24060,24061],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[33,24063,24065],{"id":24064},"_33td算法","3.3.TD算法",[38,24067,24068],{},[1441,24069],{"alt":10,"src":24070},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[38,24072,24073],{},"强化学习TD算法公式的粗略解释：",[38,24075,24076],{},[1441,24077],{"alt":10,"src":24078},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[38,24080,24081],{},[1441,24082],{"alt":10,"src":24083},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[38,24085,24086],{},[1441,24087],{"alt":10,"src":24088},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[38,24090,24091],{},[1441,24092],{"alt":10,"src":24093},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[38,24095,24096],{},"TD算法总结：",[38,24098,24099],{},[1441,24100],{"alt":10,"src":24101},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":10,"searchDepth":11,"depth":11,"links":24103},[24104,24105,24106],{"id":23998,"depth":11,"text":23999},{"id":24034,"depth":11,"text":24035},{"id":24064,"depth":11,"text":24065},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":23990,"description":10},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24113,"title":24114,"body":24115,"description":10,"extension":14,"meta":24348,"navigation":17,"path":24349,"seo":24350,"stem":24351,"__hash__":24352},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24116,"toc":24344},[24117,24120,24124,24127,24130,24135,24140,24143,24148,24153,24156,24161,24164,24169,24172,24177,24180,24185,24188,24193,24198,24201,24206,24209,24212,24217,24220,24225,24230,24234,24237,24240,24245,24250,24253,24258,24263,24266,24271,24274,24277,24282,24285,24290,24293,24298,24303,24306,24311,24316,24319,24324,24327,24332,24335],[29,24118,24114],{"id":24119},"_4策略学习",[33,24121,24123],{"id":24122},"_41概念描述","4.1.概念描述",[38,24125,24126],{},"用神经网络（策略网络）近似策略函数",[38,24128,24129],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[38,24131,24132],{},[1441,24133],{"alt":10,"src":24134},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[38,24136,24137],{},[1441,24138],{"alt":10,"src":24139},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[38,24141,24142],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[38,24144,24145],{},[1441,24146],{"alt":10,"src":24147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[38,24149,24150],{},[1441,24151],{"alt":10,"src":24152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[38,24154,24155],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[38,24157,24158],{},[1441,24159],{"alt":10,"src":24160},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[38,24162,24163],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[38,24165,24166],{},[1441,24167],{"alt":10,"src":24168},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[38,24170,24171],{},"改进theta要用到策略梯度算法",[38,24173,24174],{},[1441,24175],{"alt":10,"src":24176},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[38,24178,24179],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[38,24181,24182],{},[1441,24183],{"alt":10,"src":24184},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[38,24186,24187],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[38,24189,24190],{},[1441,24191],{"alt":10,"src":24192},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[38,24194,24195],{},[1441,24196],{"alt":10,"src":24197},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[38,24199,24200],{},"梯度公式总结：",[38,24202,24203],{},[1441,24204],{"alt":10,"src":24205},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[38,24207,24208],{},"两个公式的分别应用场景：",[38,24210,24211],{},"对于离散的动作：",[38,24213,24214],{},[1441,24215],{"alt":10,"src":24216},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[38,24218,24219],{},"对于连续的动作：",[38,24221,24222],{},[1441,24223],{"alt":10,"src":24224},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[38,24226,24227],{},[1441,24228],{"alt":10,"src":24229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[33,24231,24233],{"id":24232},"_42概率梯度算法总结","4.2.概率梯度算法总结",[38,24235,24236],{},"使用蒙特卡洛来近似计算策略梯度",[38,24238,24239],{},"蒙特卡洛法的解释如下：",[38,24241,24242],{},[1441,24243],{"alt":10,"src":24244},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[38,24246,24247],{},[1441,24248],{"alt":10,"src":24249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[38,24251,24252],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[46,24254,24255],{},[49,24256,24257],{},"方法一：reinforce算法",[38,24259,24260],{},[1441,24261],{"alt":10,"src":24262},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[38,24264,24265],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[46,24267,24268],{"start":11},[49,24269,24270],{},"方法二：actor-critic算法",[38,24272,24273],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[38,24275,24276],{},"两个网络的构建：",[38,24278,24279],{},[1441,24280],{"alt":10,"src":24281},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[38,24283,24284],{},"actor网路：",[38,24286,24287],{},[1441,24288],{"alt":10,"src":24289},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[38,24291,24292],{},"critic网络",[38,24294,24295],{},[1441,24296],{"alt":10,"src":24297},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[46,24299,24300],{"start":1158},[49,24301,24302],{},"网络的训练",[38,24304,24305],{},"网络描述",[38,24307,24308],{},[1441,24309],{"alt":10,"src":24310},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[38,24312,24313],{},[1441,24314],{"alt":10,"src":24315},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[38,24317,24318],{},"TD算法更新梯度：",[38,24320,24321],{},[1441,24322],{"alt":10,"src":24323},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[38,24325,24326],{},"策略网络更新梯度：",[38,24328,24329],{},[1441,24330],{"alt":10,"src":24331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[38,24333,24334],{},"训练整个流程的具体描述：",[38,24336,24337,24340,24341],{},[1441,24338],{"alt":10,"src":24339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1441,24342],{"alt":10,"src":24343},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":10,"searchDepth":11,"depth":11,"links":24345},[24346,24347],{"id":24122,"depth":11,"text":24123},{"id":24232,"depth":11,"text":24233},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24114,"description":10},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24354,"title":24355,"body":24356,"description":24363,"extension":14,"meta":24413,"navigation":17,"path":24414,"seo":24415,"stem":24416,"__hash__":24417},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24357,"toc":24409},[24358,24361,24364,24368,24371,24376,24380,24383,24388,24391,24396,24401,24404],[29,24359,24355],{"id":24360},"_5alphago算法",[38,24362,24363],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[33,24365,24367],{"id":24366},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[38,24369,24370],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[38,24372,24373],{},[1441,24374],{"alt":10,"src":24375},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[33,24377,24379],{"id":24378},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[38,24381,24382],{},"采用强化学习的方式训练策略网络",[38,24384,24385],{},[1441,24386],{"alt":10,"src":24387},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[38,24389,24390],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[38,24392,24393],{},[1441,24394],{"alt":10,"src":24395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[38,24397,24398],{},[1441,24399],{"alt":10,"src":24400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[38,24402,24403],{},"强化学习训练策略网络的总结：",[38,24405,24406],{},[1441,24407],{"alt":10,"src":24408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":10,"searchDepth":11,"depth":11,"links":24410},[24411,24412],{"id":24366,"depth":11,"text":24367},{"id":24378,"depth":11,"text":24379},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24355,"description":24363},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24419,"title":24420,"body":24421,"description":24428,"extension":14,"meta":24431,"navigation":17,"path":24432,"seo":24433,"stem":24434,"__hash__":24435},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24422,"toc":24429},[24423,24426],[29,24424,24420],{"id":24425},"_6价值网络",[38,24427,24428],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":10,"searchDepth":11,"depth":11,"links":24430},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24420,"description":24428},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24437,"title":24438,"body":24439,"description":24443,"extension":14,"meta":24444,"navigation":17,"path":24445,"seo":24446,"stem":24447,"__hash__":24448},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24440,"toc":24441},[],{"title":10,"searchDepth":11,"depth":11,"links":24442},[],"记录自己的强化学习笔记。",{"category":23358},"\u002Fwiki\u002F2025-12-04",{"title":24438,"description":24443},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24450,"title":24451,"body":24452,"description":13,"extension":14,"meta":24491,"navigation":17,"path":24492,"seo":24493,"stem":24494,"__hash__":24495},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24453,"toc":24489},[24454,24457,24460,24466,24469,24475,24478,24483,24486],[29,24455,24451],{"id":24456},"_1-项目概览与官方资源",[38,24458,24459],{},"官方文档：",[38,24461,24462],{},[341,24463,24464],{"href":24464,"rel":24465},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23845],[38,24467,24468],{},"官方代码仓库：",[38,24470,24471],{},[341,24472,24473],{"href":24473,"rel":24474},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23845],[38,24476,24477],{},"复现大体流程：",[38,24479,24480],{},[1441,24481],{"alt":10,"src":24482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[38,24484,24485],{},"本教程的目标是打通这条链路：",[38,24487,24488],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":10,"searchDepth":11,"depth":11,"links":24490},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24451,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24497,"title":24498,"body":24499,"description":13,"extension":14,"meta":24615,"navigation":17,"path":24616,"seo":24617,"stem":24618,"__hash__":24619},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24500,"toc":24610},[24501,24504,24508,24511,24518,24522,24525,24534,24544,24548,24578,24581,24607],[29,24502,24498],{"id":24503},"_2-环境准备与设备连接",[33,24505,24507],{"id":24506},"_21-系统与环境","2.1 系统与环境",[38,24509,24510],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[38,24512,24513,24514,24517],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[89,24515,24516],{},"lerobot"," 依赖。",[33,24519,24521],{"id":24520},"_22-机械臂串口识别","2.2 机械臂串口识别",[38,24523,24524],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[83,24526,24528],{"className":23802,"code":24527,"language":23804,"meta":10,"style":10},"lerobot-find-out\n",[89,24529,24530],{"__ignoreMap":10},[92,24531,24532],{"class":94,"line":95},[92,24533,24527],{"class":1942},[38,24535,24536,24537,315,24540,24543],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[89,24538,24539],{},"\u002Fdev\u002FttyACM0",[89,24541,24542],{},"\u002Fdev\u002FttyACM1","）。",[33,24545,24547],{"id":24546},"_23-串口授权","2.3 串口授权",[83,24549,24551],{"className":23802,"code":24550,"language":23804,"meta":10,"style":10},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[89,24552,24553,24567],{"__ignoreMap":10},[92,24554,24555,24558,24561,24564],{"class":94,"line":95},[92,24556,24557],{"class":1942},"sudo",[92,24559,24560],{"class":207}," chmod",[92,24562,24563],{"class":151}," 666",[92,24565,24566],{"class":207}," \u002Fdev\u002FttyACM0\n",[92,24568,24569,24571,24573,24575],{"class":94,"line":11},[92,24570,24557],{"class":1942},[92,24572,24560],{"class":207},[92,24574,24563],{"class":151},[92,24576,24577],{"class":207}," \u002Fdev\u002FttyACM1\n",[38,24579,24580],{},"说明：",[1110,24582,24583,24588,24594,24604],{},[49,24584,24585,24587],{},[89,24586,24557],{},"：以 root 权限执行命令。",[49,24589,24590,24593],{},[89,24591,24592],{},"chmod","：修改设备节点权限。",[49,24595,24596,24599,24600,24603],{},[89,24597,24598],{},"666","：",[89,24601,24602],{},"rw-rw-rw-","，所有用户可读写。",[49,24605,24606],{},"串口号必须替换为你机器上的真实端口。",[5106,24608,24609],{},"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":10,"searchDepth":11,"depth":11,"links":24611},[24612,24613,24614],{"id":24506,"depth":11,"text":24507},{"id":24520,"depth":11,"text":24521},{"id":24546,"depth":11,"text":24547},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24498,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24621,"title":24622,"body":24623,"description":13,"extension":14,"meta":24784,"navigation":17,"path":24785,"seo":24786,"stem":24787,"__hash__":24788},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24624,"toc":24780},[24625,24629,24633,24639,24642,24699,24702,24706,24709,24777],[29,24626,24628],{"id":24627},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[33,24630,24632],{"id":24631},"_31-配置电机-id","3.1 配置电机 ID",[38,24634,24635,24636,24638],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[89,24637,320],{},"，需要改成机械臂链路里不冲突的编号。",[38,24640,24641],{},"方式一：用 LeRobot 命令逐步写入。",[83,24643,24645],{"className":23802,"code":24644,"language":23804,"meta":10,"style":10},"# 主臂舵机配置 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",[89,24646,24647,24652,24660,24667,24672,24676,24681,24687,24694],{"__ignoreMap":10},[92,24648,24649],{"class":94,"line":95},[92,24650,24651],{"class":161},"# 主臂舵机配置 ID\n",[92,24653,24654,24657],{"class":94,"line":11},[92,24655,24656],{"class":1942},"lerobot-setup-motors",[92,24658,24659],{"class":151}," \\\n",[92,24661,24662,24665],{"class":94,"line":1158},[92,24663,24664],{"class":151},"  --teleop.type=so101_leader",[92,24666,24659],{"class":151},[92,24668,24669],{"class":94,"line":1173},[92,24670,24671],{"class":151},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[92,24673,24674],{"class":94,"line":1179},[92,24675,2379],{"emptyLinePlaceholder":17},[92,24677,24678],{"class":94,"line":1193},[92,24679,24680],{"class":161},"# 从臂舵机配置 ID\n",[92,24682,24683,24685],{"class":94,"line":1199},[92,24684,24656],{"class":1942},[92,24686,24659],{"class":151},[92,24688,24689,24692],{"class":94,"line":1290},[92,24690,24691],{"class":151},"  --robot.type=so101_follower",[92,24693,24659],{"class":151},[92,24695,24696],{"class":94,"line":1296},[92,24697,24698],{"class":151},"  --robot.port=\u002Fdev\u002FttyACM1\n",[38,24700,24701],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[33,24703,24705],{"id":24704},"_32-机械臂校准","3.2 机械臂校准",[38,24707,24708],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[83,24710,24712],{"className":23802,"code":24711,"language":23804,"meta":10,"style":10},"# 主臂校准\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",[89,24713,24714,24719,24726,24732,24739,24744,24748,24753,24759,24765,24772],{"__ignoreMap":10},[92,24715,24716],{"class":94,"line":95},[92,24717,24718],{"class":161},"# 主臂校准\n",[92,24720,24721,24724],{"class":94,"line":11},[92,24722,24723],{"class":1942},"lerobot-calibrate",[92,24725,24659],{"class":151},[92,24727,24728,24730],{"class":94,"line":1158},[92,24729,24664],{"class":151},[92,24731,24659],{"class":151},[92,24733,24734,24737],{"class":94,"line":1173},[92,24735,24736],{"class":151},"  --teleop.port=\u002Fdev\u002FttyACM0",[92,24738,24659],{"class":151},[92,24740,24741],{"class":94,"line":1179},[92,24742,24743],{"class":151},"  --teleop.id=my_awesome_leader_arm\n",[92,24745,24746],{"class":94,"line":1193},[92,24747,2379],{"emptyLinePlaceholder":17},[92,24749,24750],{"class":94,"line":1199},[92,24751,24752],{"class":161},"# 从臂校准\n",[92,24754,24755,24757],{"class":94,"line":1290},[92,24756,24723],{"class":1942},[92,24758,24659],{"class":151},[92,24760,24761,24763],{"class":94,"line":1296},[92,24762,24691],{"class":151},[92,24764,24659],{"class":151},[92,24766,24767,24770],{"class":94,"line":1308},[92,24768,24769],{"class":151},"  --robot.port=\u002Fdev\u002FttyACM1",[92,24771,24659],{"class":151},[92,24773,24774],{"class":94,"line":1591},[92,24775,24776],{"class":151},"  --robot.id=my_awesome_follower_arm\n",[5106,24778,24779],{},"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":10,"searchDepth":11,"depth":11,"links":24781},[24782,24783],{"id":24631,"depth":11,"text":24632},{"id":24704,"depth":11,"text":24705},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24622,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24790,"title":24791,"body":24792,"description":13,"extension":14,"meta":24983,"navigation":17,"path":24984,"seo":24985,"stem":24986,"__hash__":24987},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24793,"toc":24979},[24794,24797,24801,24848,24852,24865,24928,24931,24976],[29,24795,24791],{"id":24796},"_4-遥操与相机接入",[33,24798,24800],{"id":24799},"_41-不带相机遥操","4.1 不带相机遥操",[83,24802,24804],{"className":23802,"code":24803,"language":23804,"meta":10,"style":10},"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",[89,24805,24806,24813,24819,24825,24832,24838,24844],{"__ignoreMap":10},[92,24807,24808,24811],{"class":94,"line":95},[92,24809,24810],{"class":1942},"lerobot-teleoperate",[92,24812,24659],{"class":151},[92,24814,24815,24817],{"class":94,"line":11},[92,24816,24691],{"class":151},[92,24818,24659],{"class":151},[92,24820,24821,24823],{"class":94,"line":1158},[92,24822,24769],{"class":151},[92,24824,24659],{"class":151},[92,24826,24827,24830],{"class":94,"line":1173},[92,24828,24829],{"class":151},"  --robot.id=my_awesome_follower_arm",[92,24831,24659],{"class":151},[92,24833,24834,24836],{"class":94,"line":1179},[92,24835,24664],{"class":151},[92,24837,24659],{"class":151},[92,24839,24840,24842],{"class":94,"line":1193},[92,24841,24736],{"class":151},[92,24843,24659],{"class":151},[92,24845,24846],{"class":94,"line":1199},[92,24847,24743],{"class":151},[33,24849,24851],{"id":24850},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[83,24853,24855],{"className":23802,"code":24854,"language":23804,"meta":10,"style":10},"lerobot-find-cameras opencv\n",[89,24856,24857],{"__ignoreMap":10},[92,24858,24859,24862],{"class":94,"line":95},[92,24860,24861],{"class":1942},"lerobot-find-cameras",[92,24863,24864],{"class":207}," opencv\n",[83,24866,24868],{"className":23802,"code":24867,"language":23804,"meta":10,"style":10},"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",[89,24869,24870,24876,24882,24888,24894,24904,24910,24916,24923],{"__ignoreMap":10},[92,24871,24872,24874],{"class":94,"line":95},[92,24873,24810],{"class":1942},[92,24875,24659],{"class":151},[92,24877,24878,24880],{"class":94,"line":11},[92,24879,24691],{"class":151},[92,24881,24659],{"class":151},[92,24883,24884,24886],{"class":94,"line":1158},[92,24885,24769],{"class":151},[92,24887,24659],{"class":151},[92,24889,24890,24892],{"class":94,"line":1173},[92,24891,24829],{"class":151},[92,24893,24659],{"class":151},[92,24895,24896,24899,24902],{"class":94,"line":1179},[92,24897,24898],{"class":151},"  --robot.cameras=",[92,24900,24901],{"class":207},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[92,24903,24659],{"class":151},[92,24905,24906,24908],{"class":94,"line":1193},[92,24907,24664],{"class":151},[92,24909,24659],{"class":151},[92,24911,24912,24914],{"class":94,"line":1199},[92,24913,24736],{"class":151},[92,24915,24659],{"class":151},[92,24917,24918,24921],{"class":94,"line":1290},[92,24919,24920],{"class":151},"  --teleop.id=my_awesome_leader_arm",[92,24922,24659],{"class":151},[92,24924,24925],{"class":94,"line":1296},[92,24926,24927],{"class":151},"  --display_data=true\n",[38,24929,24930],{},"相机参数说明：",[1110,24932,24933,24939,24945,24954,24964,24970],{},[49,24934,24935,24938],{},[89,24936,24937],{},"front","：相机名称。",[49,24940,24941,24944],{},[89,24942,24943],{},"type: opencv","：相机驱动类型。",[49,24946,24947,24950,24951,24543],{},[89,24948,24949],{},"index_or_path","：设备编号或设备路径（如 ",[89,24952,24953],{},"\u002Fdev\u002Fvideo4",[49,24955,24956,24959,24960,24963],{},[89,24957,24958],{},"width"," \u002F ",[89,24961,24962],{},"height","：图像分辨率。",[49,24965,24966,24969],{},[89,24967,24968],{},"fps","：采样帧率。",[49,24971,24972,24975],{},[89,24973,24974],{},"--display_data=true","：启用实时可视化。",[5106,24977,24978],{},"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":10,"searchDepth":11,"depth":11,"links":24980},[24981,24982],{"id":24799,"depth":11,"text":24800},{"id":24850,"depth":11,"text":24851},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24791,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":24989,"title":24990,"body":24991,"description":13,"extension":14,"meta":25163,"navigation":17,"path":25164,"seo":25165,"stem":25166,"__hash__":25167},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":24992,"toc":25158},[24993,24997,25001,25006,25011,25014,25056,25062,25066,25115,25120,25124,25127,25135,25140,25145,25150,25155],[29,24994,24996],{"id":24995},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[33,24998,25000],{"id":24999},"_51-生成访问令牌","5.1 生成访问令牌",[38,25002,25003],{},[1441,25004],{"alt":10,"src":25005},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[38,25007,25008],{},[1441,25009],{"alt":10,"src":25010},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[38,25012,25013],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[83,25015,25017],{"className":23802,"code":25016,"language":23804,"meta":10,"style":10},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[89,25018,25019,25032],{"__ignoreMap":10},[92,25020,25021,25024,25027,25029],{"class":94,"line":95},[92,25022,25023],{"class":98},"export",[92,25025,25026],{"class":102}," HF_TOKEN",[92,25028,148],{"class":98},[92,25030,25031],{"class":207},"\"your_huggingface_token\"\n",[92,25033,25034,25037,25040,25043,25046,25048,25051,25053],{"class":94,"line":11},[92,25035,25036],{"class":1942},"hf",[92,25038,25039],{"class":207}," auth",[92,25041,25042],{"class":207}," login",[92,25044,25045],{"class":151}," --token",[92,25047,9704],{"class":207},[92,25049,25050],{"class":102},"$HF_TOKEN",[92,25052,354],{"class":207},[92,25054,25055],{"class":151}," --add-to-git-credential\n",[38,25057,25058,25061],{},[89,25059,25060],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[33,25063,25065],{"id":25064},"_52-验证登录","5.2 验证登录",[83,25067,25069],{"className":23802,"code":25068,"language":23804,"meta":10,"style":10},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[89,25070,25071,25102],{"__ignoreMap":10},[92,25072,25073,25076,25078,25081,25083,25085,25088,25091,25094,25097,25100],{"class":94,"line":95},[92,25074,25075],{"class":102},"HF_USER",[92,25077,148],{"class":98},[92,25079,25080],{"class":102},"$(",[92,25082,25036],{"class":1942},[92,25084,25039],{"class":207},[92,25086,25087],{"class":207}," whoami",[92,25089,25090],{"class":98}," |",[92,25092,25093],{"class":1942}," head",[92,25095,25096],{"class":151}," -n",[92,25098,25099],{"class":151}," 1",[92,25101,109],{"class":102},[92,25103,25104,25107,25109,25112],{"class":94,"line":11},[92,25105,25106],{"class":151},"echo",[92,25108,9704],{"class":207},[92,25110,25111],{"class":102},"$HF_USER",[92,25113,25114],{"class":207},"\"\n",[38,25116,25117],{},[1441,25118],{"alt":10,"src":25119},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[33,25121,25123],{"id":25122},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[38,25125,25126],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1110,25128,25129,25132],{},[49,25130,25131],{},"Dataset Repo（用于上传演示数据）",[49,25133,25134],{},"Model Repo（用于上传训练后的 ACT 权重）",[38,25136,25137],{},[1441,25138],{"alt":10,"src":25139},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[38,25141,25142],{},[1441,25143],{"alt":10,"src":25144},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[38,25146,25147],{},[1441,25148],{"alt":10,"src":25149},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[38,25151,25152],{},[1441,25153],{"alt":10,"src":25154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5106,25156,25157],{},"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":10,"searchDepth":11,"depth":11,"links":25159},[25160,25161,25162],{"id":24999,"depth":11,"text":25000},{"id":25064,"depth":11,"text":25065},{"id":25122,"depth":11,"text":25123},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":24990,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25169,"title":25170,"body":25171,"description":13,"extension":14,"meta":25368,"navigation":17,"path":25369,"seo":25370,"stem":25371,"__hash__":25372},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25172,"toc":25363},[25173,25177,25181,25277,25285,25290,25294,25310,25313,25317,25360],[29,25174,25176],{"id":25175},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[33,25178,25180],{"id":25179},"_61-录制示教数据","6.1 录制示教数据",[83,25182,25184],{"className":23802,"code":25183,"language":23804,"meta":10,"style":10},"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",[89,25185,25186,25193,25199,25205,25211,25220,25226,25232,25238,25245,25255,25262,25272],{"__ignoreMap":10},[92,25187,25188,25191],{"class":94,"line":95},[92,25189,25190],{"class":1942},"lerobot-record",[92,25192,24659],{"class":151},[92,25194,25195,25197],{"class":94,"line":11},[92,25196,24691],{"class":151},[92,25198,24659],{"class":151},[92,25200,25201,25203],{"class":94,"line":1158},[92,25202,24769],{"class":151},[92,25204,24659],{"class":151},[92,25206,25207,25209],{"class":94,"line":1173},[92,25208,24829],{"class":151},[92,25210,24659],{"class":151},[92,25212,25213,25215,25218],{"class":94,"line":1179},[92,25214,24898],{"class":151},[92,25216,25217],{"class":207},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[92,25219,24659],{"class":151},[92,25221,25222,25224],{"class":94,"line":1193},[92,25223,24664],{"class":151},[92,25225,24659],{"class":151},[92,25227,25228,25230],{"class":94,"line":1199},[92,25229,24736],{"class":151},[92,25231,24659],{"class":151},[92,25233,25234,25236],{"class":94,"line":1290},[92,25235,24920],{"class":151},[92,25237,24659],{"class":151},[92,25239,25240,25243],{"class":94,"line":1296},[92,25241,25242],{"class":151},"  --display_data=true",[92,25244,24659],{"class":151},[92,25246,25247,25250,25253],{"class":94,"line":1308},[92,25248,25249],{"class":151},"  --dataset.repo_id=",[92,25251,25252],{"class":207},"\"Embodied-AI-6\u002Fso101_test\"",[92,25254,24659],{"class":151},[92,25256,25257,25260],{"class":94,"line":1591},[92,25258,25259],{"class":151},"  --dataset.num_episodes=10",[92,25261,24659],{"class":151},[92,25263,25264,25267,25270],{"class":94,"line":1596},[92,25265,25266],{"class":151},"  --dataset.single_task=",[92,25268,25269],{"class":207},"\"Grab the green cube\"",[92,25271,24659],{"class":151},[92,25273,25274],{"class":94,"line":1602},[92,25275,25276],{"class":151},"  --resume=true\n",[1110,25278,25279],{},[49,25280,25281,25284],{},[89,25282,25283],{},"--resume=true","：已有同一数据集时继续追加 episode。",[38,25286,25287],{},[1441,25288],{"alt":10,"src":25289},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[33,25291,25293],{"id":25292},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[83,25295,25297],{"className":23802,"code":25296,"language":23804,"meta":10,"style":10},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[89,25298,25299],{"__ignoreMap":10},[92,25300,25301,25304,25307],{"class":94,"line":95},[92,25302,25303],{"class":1942},"rm",[92,25305,25306],{"class":151}," -rf",[92,25308,25309],{"class":207}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[38,25311,25312],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[33,25314,25316],{"id":25315},"_63-回放指定-episode","6.3 回放指定 episode",[83,25318,25320],{"className":23802,"code":25319,"language":23804,"meta":10,"style":10},"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",[89,25321,25322,25329,25335,25341,25347,25355],{"__ignoreMap":10},[92,25323,25324,25327],{"class":94,"line":95},[92,25325,25326],{"class":1942},"lerobot-replay",[92,25328,24659],{"class":151},[92,25330,25331,25333],{"class":94,"line":11},[92,25332,24691],{"class":151},[92,25334,24659],{"class":151},[92,25336,25337,25339],{"class":94,"line":1158},[92,25338,24769],{"class":151},[92,25340,24659],{"class":151},[92,25342,25343,25345],{"class":94,"line":1173},[92,25344,24829],{"class":151},[92,25346,24659],{"class":151},[92,25348,25349,25351,25353],{"class":94,"line":1179},[92,25350,25249],{"class":151},[92,25352,25252],{"class":207},[92,25354,24659],{"class":151},[92,25356,25357],{"class":94,"line":1193},[92,25358,25359],{"class":151},"  --dataset.episode=0\n",[5106,25361,25362],{},"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":10,"searchDepth":11,"depth":11,"links":25364},[25365,25366,25367],{"id":25179,"depth":11,"text":25180},{"id":25292,"depth":11,"text":25293},{"id":25315,"depth":11,"text":25316},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25170,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25374,"title":25375,"body":25376,"description":13,"extension":14,"meta":25504,"navigation":17,"path":25505,"seo":25506,"stem":25507,"__hash__":25508},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25377,"toc":25502},[25378,25382,25445,25448,25495,25500],[29,25379,25381],{"id":25380},"_7-act-模型训练","7. ACT 模型训练",[83,25383,25385],{"className":23802,"code":25384,"language":23804,"meta":10,"style":10},"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",[89,25386,25387,25394,25402,25409,25416,25423,25430,25437],{"__ignoreMap":10},[92,25388,25389,25392],{"class":94,"line":95},[92,25390,25391],{"class":1942},"lerobot-train",[92,25393,24659],{"class":151},[92,25395,25396,25398,25400],{"class":94,"line":11},[92,25397,25249],{"class":151},[92,25399,25252],{"class":207},[92,25401,24659],{"class":151},[92,25403,25404,25407],{"class":94,"line":1158},[92,25405,25406],{"class":151},"  --policy.type=act",[92,25408,24659],{"class":151},[92,25410,25411,25414],{"class":94,"line":1173},[92,25412,25413],{"class":151},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[92,25415,24659],{"class":151},[92,25417,25418,25421],{"class":94,"line":1179},[92,25419,25420],{"class":151},"  --job_name=act_so101_test",[92,25422,24659],{"class":151},[92,25424,25425,25428],{"class":94,"line":1193},[92,25426,25427],{"class":151},"  --policy.device=cuda",[92,25429,24659],{"class":151},[92,25431,25432,25435],{"class":94,"line":1199},[92,25433,25434],{"class":151},"  --wandb.enable=false",[92,25436,24659],{"class":151},[92,25438,25439,25442],{"class":94,"line":1290},[92,25440,25441],{"class":151},"  --policy.repo_id=",[92,25443,25444],{"class":207},"\"Embodied-AI-6\u002Flerobot_new\"\n",[38,25446,25447],{},"参数说明：",[1110,25449,25450,25456,25462,25468,25474,25483,25489],{},[49,25451,25452,25455],{},[89,25453,25454],{},"--dataset.repo_id","：训练数据集仓库。",[49,25457,25458,25461],{},[89,25459,25460],{},"--policy.type=act","：策略模型类型为 ACT。",[49,25463,25464,25467],{},[89,25465,25466],{},"--output_dir","：本地训练输出目录。",[49,25469,25470,25473],{},[89,25471,25472],{},"--job_name","：训练任务名称。",[49,25475,25476,25479,25480,24543],{},[89,25477,25478],{},"--policy.device","：训练设备（如 ",[89,25481,25482],{},"cuda",[49,25484,25485,25488],{},[89,25486,25487],{},"--wandb.enable","：是否启用 WandB 可视化。",[49,25490,25491,25494],{},[89,25492,25493],{},"--policy.repo_id","：训练后模型推送目标仓库。",[38,25496,25497],{},[1441,25498],{"alt":10,"src":25499},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5106,25501,25362],{},{"title":10,"searchDepth":11,"depth":11,"links":25503},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25375,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25510,"title":25511,"body":25512,"description":13,"extension":14,"meta":25599,"navigation":17,"path":25600,"seo":25601,"stem":25602,"__hash__":25603},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25513,"toc":25597},[25514,25517,25520,25587,25595],[29,25515,25511],{"id":25516},"_8-策略部署与自动采集",[38,25518,25519],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[83,25521,25523],{"className":23802,"code":25522,"language":23804,"meta":10,"style":10},"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",[89,25524,25525,25531,25537,25543,25551,25557,25564,25572,25580],{"__ignoreMap":10},[92,25526,25527,25529],{"class":94,"line":95},[92,25528,25190],{"class":1942},[92,25530,24659],{"class":151},[92,25532,25533,25535],{"class":94,"line":11},[92,25534,24691],{"class":151},[92,25536,24659],{"class":151},[92,25538,25539,25541],{"class":94,"line":1158},[92,25540,24769],{"class":151},[92,25542,24659],{"class":151},[92,25544,25545,25547,25549],{"class":94,"line":1173},[92,25546,24898],{"class":151},[92,25548,25217],{"class":207},[92,25550,24659],{"class":151},[92,25552,25553,25555],{"class":94,"line":1179},[92,25554,24829],{"class":151},[92,25556,24659],{"class":151},[92,25558,25559,25562],{"class":94,"line":1193},[92,25560,25561],{"class":151},"  --display_data=false",[92,25563,24659],{"class":151},[92,25565,25566,25568,25570],{"class":94,"line":1199},[92,25567,25249],{"class":151},[92,25569,25252],{"class":207},[92,25571,24659],{"class":151},[92,25573,25574,25576,25578],{"class":94,"line":1290},[92,25575,25266],{"class":151},[92,25577,25269],{"class":207},[92,25579,24659],{"class":151},[92,25581,25582,25585],{"class":94,"line":1296},[92,25583,25584],{"class":151},"  --policy.path=",[92,25586,25444],{"class":207},[1110,25588,25589],{},[49,25590,25591,25594],{},[89,25592,25593],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5106,25596,25362],{},{"title":10,"searchDepth":11,"depth":11,"links":25598},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25511,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25605,"title":25606,"body":25607,"description":13,"extension":14,"meta":25636,"navigation":17,"path":25637,"seo":25638,"stem":25639,"__hash__":25640},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25608,"toc":25634},[25609,25613,25616,25622,25625,25631],[29,25610,25612],{"id":25611},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[38,25614,25615],{},"项目地址：",[38,25617,25618],{},[341,25619,25620],{"href":25620,"rel":25621},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23845],[38,25623,25624],{},"参考教程：",[38,25626,25627],{},[341,25628,25629],{"href":25629,"rel":25630},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23845],[38,25632,25633],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":10,"searchDepth":11,"depth":11,"links":25635},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25606,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25642,"title":25643,"body":25644,"description":25648,"extension":14,"meta":25649,"navigation":17,"path":25650,"seo":25651,"stem":25652,"__hash__":25653},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25645,"toc":25646},[],{"title":10,"searchDepth":11,"depth":11,"links":25647},[],"act复现",{"category":23358},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25643,"description":25648},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25655,"title":25656,"body":25657,"description":10,"extension":14,"meta":25959,"navigation":17,"path":25960,"seo":25961,"stem":25962,"__hash__":25963},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25658,"toc":25951},[25659,25662,25666,25676,25683,25690,25693,25700,25703,25706,25710,25722,25726,25772,25775,25778,25781,25784,25787,25791,25829,25835,25839,25893,25898,25901,25904,25909,25912,25917,25920,25923,25927,25930,25933,25937],[29,25660,25656],{"id":25661},"_1简介",[63,25663,25665],{"id":25664},"_11什么是-docker","1.1什么是 Docker？",[38,25667,25668,25669,25672,25673],{},"Docker 是一个开源的 ",[252,25670,25671],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[252,25674,25675],{},"一次构建，到处运行。",[38,25677,25678,25679,25682],{},"“ ",[252,25680,25681],{},"一次构建，到处运行"," ”也就是说：",[46,25684,25685],{},[49,25686,25687],{},[252,25688,25689],{},"之前：",[38,25691,25692],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[46,25694,25695],{},[49,25696,25697],{},[252,25698,25699],{},"使用docker后：",[38,25701,25702],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[38,25704,25705],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[63,25707,25709],{"id":25708},"_12它是怎么工作的","1.2.它是怎么工作的？",[1110,25711,25712,25715],{},[49,25713,25714],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[49,25716,25717,25718,25721],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[252,25719,25720],{},"无论在哪运行都一样稳定"," 。",[63,25723,25725],{"id":25724},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[240,25727,25728,25738],{},[243,25729,25730],{},[246,25731,25732,25735],{},[249,25733,25734],{"align":23716},"概念",[249,25736,25737],{"align":23716},"解释",[287,25739,25740,25748,25756,25764],{},[246,25741,25742,25745],{},[292,25743,25744],{"align":23716},"镜像",[292,25746,25747],{"align":23716},"Image，运行容器的模板，像是一个应用快照",[246,25749,25750,25753],{},[292,25751,25752],{"align":23716},"容器",[292,25754,25755],{"align":23716},"Container，运行中的镜像实例，有自己的文件系统、网络等",[246,25757,25758,25761],{},[292,25759,25760],{"align":23716},"Dockerfile",[292,25762,25763],{"align":23716},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[246,25765,25766,25769],{},[292,25767,25768],{"align":23716},"仓库",[292,25770,25771],{"align":23716},"Registry，存放镜像的地方，比如 Docker Hub",[38,25773,25774],{},"抽象化理解:",[38,25776,25777],{},"Docker镜像≈C++类",[38,25779,25780],{},"Docker容器≈C++类实例(即对象)",[38,25782,25783],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[38,25785,25786],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[63,25788,25790],{"id":25789},"_14类比理解","1.4.类比理解",[240,25792,25793,25803],{},[243,25794,25795],{},[246,25796,25797,25800],{},[249,25798,25799],{"align":23716},"传统部署",[249,25801,25802],{"align":23716},"Docker部署",[287,25804,25805,25813,25821],{},[246,25806,25807,25810],{},[292,25808,25809],{"align":23716},"手动安装依赖、调试版本不一致问题",[292,25811,25812],{"align":23716},"一次打包环境和代码",[246,25814,25815,25818],{},[292,25816,25817],{"align":23716},"程序“裸奔”跑在系统上",[292,25819,25820],{"align":23716},"程序“穿着容器”隔离运行",[246,25822,25823,25826],{},[292,25824,25825],{"align":23716},"容易“在我电脑上能跑”",[292,25827,25828],{"align":23716},"保证“无论在哪都能跑”",[38,25830,25831,25832],{},"就像快递包裹： ",[252,25833,25834],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[63,25836,25838],{"id":25837},"_15docker-的核心优势","1.5.Docker 的核心优势",[240,25840,25841,25851],{},[243,25842,25843],{},[246,25844,25845,25848],{},[249,25846,25847],{"align":23716},"优势",[249,25849,25850],{"align":23716},"说明",[287,25852,25853,25861,25869,25877,25885],{},[246,25854,25855,25858],{},[292,25856,25857],{"align":23716},"轻量级",[292,25859,25860],{"align":23716},"基于系统内核共享，启动速度快，占资源少",[246,25862,25863,25866],{},[292,25864,25865],{"align":23716},"跨平台",[292,25867,25868],{"align":23716},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[246,25870,25871,25874],{},[292,25872,25873],{"align":23716},"易于迁移部署",[292,25875,25876],{"align":23716},"应用和环境一起封装，不怕依赖不一致",[246,25878,25879,25882],{},[292,25880,25881],{"align":23716},"易于版本控制",[292,25883,25884],{"align":23716},"镜像版本可控，支持回滚",[246,25886,25887,25890],{},[292,25888,25889],{"align":23716},"生态丰富",[292,25891,25892],{"align":23716},"Docker Hub 上有成千上万的现成镜像可用",[46,25894,25895],{},[49,25896,25897],{},"在Linux上可以几乎实现无性能损失。",[38,25899,25900],{},"docker里的发行版和本机共用Linux内核。",[38,25902,25903],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[46,25905,25906],{},[49,25907,25908],{},"可以快速部署在绝大多数Linux发行版",[38,25910,25911],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[46,25913,25914],{},[49,25915,25916],{},"配置环境简单",[38,25918,25919],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[38,25921,25922],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[46,25924,25925],{},[49,25926,25889],{},[38,25928,25929],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[38,25931,25932],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[63,25934,25936],{"id":25935},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1110,25938,25939,25942,25945,25948],{},[49,25940,25941],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[49,25943,25944],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[49,25946,25947],{},"微服务架构：每个服务一个容器，灵活组合",[49,25949,25950],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":10,"searchDepth":11,"depth":11,"links":25952},[25953,25954,25955,25956,25957,25958],{"id":25664,"depth":1158,"text":25665},{"id":25708,"depth":1158,"text":25709},{"id":25724,"depth":1158,"text":25725},{"id":25789,"depth":1158,"text":25790},{"id":25837,"depth":1158,"text":25838},{"id":25935,"depth":1158,"text":25936},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25656,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25965,"title":25966,"body":25967,"description":10,"extension":14,"meta":26700,"navigation":17,"path":26701,"seo":26702,"stem":26703,"__hash__":26704},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25968,"toc":26695},[25969,25972,25976,25979,25982,25988,25994,25998,26007,26010,26067,26070,26121,26124,26207,26210,26247,26251,26262,26275,26282,26285,26365,26368,26418,26421,26444,26448,26455,26458,26474,26480,26483,26499,26505,26508,26524,26538,26544,26564,26570,26573,26585,26591,26594,26608,26614,26617,26637,26642,26645,26648,26652,26655,26658,26661,26668,26671,26674,26677,26682,26687,26692],[29,25970,25966],{"id":25971},"_2安装docker",[63,25973,25975],{"id":25974},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[38,25977,25978],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[38,25980,25981],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[38,25983,25984],{},[341,25985,25986],{"href":25986,"rel":25987},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23845],[38,25989,25990],{},[341,25991,25992],{"href":25992,"rel":25993},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23845],[21978,25995,25997],{"id":25996},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[38,25999,26000,26001,26006],{},"以下内容根据 ",[341,26002,26005],{"href":26003,"rel":26004},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23845],"官方文档"," 修改而来。",[38,26008,26009],{},"如果你过去安装过 docker，先删掉：",[83,26011,26013],{"className":23802,"code":26012,"language":23804,"meta":10,"style":10},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[89,26014,26015],{"__ignoreMap":10},[92,26016,26017,26019,26022,26025,26028,26031,26034,26037,26040,26043,26046,26049,26052,26055,26058,26061,26064],{"class":94,"line":95},[92,26018,3004],{"class":98},[92,26020,26021],{"class":102}," pkg ",[92,26023,26024],{"class":98},"in",[92,26026,26027],{"class":207}," docker.io",[92,26029,26030],{"class":207}," docker-doc",[92,26032,26033],{"class":207}," docker-compose",[92,26035,26036],{"class":207}," docker-compose-v2",[92,26038,26039],{"class":207}," podman-docker",[92,26041,26042],{"class":207}," containerd",[92,26044,26045],{"class":207}," runc",[92,26047,26048],{"class":102},"; ",[92,26050,26051],{"class":98},"do",[92,26053,26054],{"class":1942}," sudo",[92,26056,26057],{"class":207}," apt-get",[92,26059,26060],{"class":207}," remove",[92,26062,26063],{"class":102}," $pkg; ",[92,26065,26066],{"class":98},"done\n",[38,26068,26069],{},"首先安装依赖和GPG：",[83,26071,26075],{"className":26072,"code":26073,"language":26074,"meta":10,"style":10},"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",[89,26076,26077,26082,26087,26092,26097,26102,26107,26111,26116],{"__ignoreMap":10},[92,26078,26079],{"class":94,"line":95},[92,26080,26081],{},"# Add Docker's official GPG key:\n",[92,26083,26084],{"class":94,"line":11},[92,26085,26086],{},"sudo apt-get update\n",[92,26088,26089],{"class":94,"line":1158},[92,26090,26091],{},"sudo apt-get install ca-certificates curl\n",[92,26093,26094],{"class":94,"line":1173},[92,26095,26096],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[92,26098,26099],{"class":94,"line":1179},[92,26100,26101],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[92,26103,26104],{"class":94,"line":1193},[92,26105,26106],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[92,26108,26109],{"class":94,"line":1199},[92,26110,2379],{"emptyLinePlaceholder":17},[92,26112,26113],{"class":94,"line":1290},[92,26114,26115],{},"# 如果上面这行报错就弄下面这行\n",[92,26117,26118],{"class":94,"line":1296},[92,26119,26120],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[38,26122,26123],{},"信任 Docker 的 GPG 公钥并添加仓库：",[83,26125,26127],{"className":23802,"code":26126,"language":23804,"meta":10,"style":10},"# 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",[89,26128,26129,26134,26140,26157,26190],{"__ignoreMap":10},[92,26130,26131],{"class":94,"line":95},[92,26132,26133],{"class":161},"# Add the repository to Apt sources:\n",[92,26135,26136,26138],{"class":94,"line":11},[92,26137,25106],{"class":151},[92,26139,24659],{"class":151},[92,26141,26142,26145,26148,26151,26154],{"class":94,"line":1158},[92,26143,26144],{"class":207},"  \"deb [arch=$(",[92,26146,26147],{"class":1942},"dpkg",[92,26149,26150],{"class":151}," --print-architecture",[92,26152,26153],{"class":207},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[92,26155,26156],{"class":151},"\\\n",[92,26158,26159,26162,26164,26166,26169,26172,26174,26176,26179,26181,26183,26186,26188],{"class":94,"line":1173},[92,26160,26161],{"class":207},"  \"",[92,26163,25080],{"class":102},[92,26165,661],{"class":151},[92,26167,26168],{"class":207}," \u002Fetc\u002Fos-release",[92,26170,26171],{"class":102}," && ",[92,26173,25106],{"class":151},[92,26175,9704],{"class":207},[92,26177,26178],{"class":102},"$VERSION_CODENAME",[92,26180,354],{"class":207},[92,26182,532],{"class":102},[92,26184,26185],{"class":207},"\" stable\"",[92,26187,25090],{"class":98},[92,26189,24659],{"class":151},[92,26191,26192,26195,26198,26201,26204],{"class":94,"line":1179},[92,26193,26194],{"class":1942},"  sudo",[92,26196,26197],{"class":207}," tee",[92,26199,26200],{"class":207}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[92,26202,26203],{"class":98}," >",[92,26205,26206],{"class":207}," \u002Fdev\u002Fnull\n",[38,26208,26209],{},"最后安装",[83,26211,26213],{"className":23802,"code":26212,"language":23804,"meta":10,"style":10},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[89,26214,26215,26224],{"__ignoreMap":10},[92,26216,26217,26219,26221],{"class":94,"line":95},[92,26218,24557],{"class":1942},[92,26220,26057],{"class":207},[92,26222,26223],{"class":207}," update\n",[92,26225,26226,26228,26230,26232,26235,26238,26241,26244],{"class":94,"line":11},[92,26227,24557],{"class":1942},[92,26229,26057],{"class":207},[92,26231,23814],{"class":207},[92,26233,26234],{"class":207}," docker-ce",[92,26236,26237],{"class":207}," docker-ce-cli",[92,26239,26240],{"class":207}," containerd.io",[92,26242,26243],{"class":207}," docker-buildx-plugin",[92,26245,26246],{"class":207}," docker-compose-plugin\n",[21978,26248,26250],{"id":26249},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[38,26252,26253,26254,26257,26258,26261],{},"查看自己自己包管理工具版本（dnf是 ",[252,26255,26256],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[252,26259,26260],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[83,26263,26265],{"className":23802,"code":26264,"language":23804,"meta":10,"style":10},"dnf --version\n",[89,26266,26267],{"__ignoreMap":10},[92,26268,26269,26272],{"class":94,"line":95},[92,26270,26271],{"class":1942},"dnf",[92,26273,26274],{"class":151}," --version\n",[38,26276,26000,26277,26281],{},[341,26278,26005],{"href":26279,"rel":26280},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23845]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[38,26283,26284],{},"如果你之前安装过 docker，请先删掉",[83,26286,26288],{"className":23802,"code":26287,"language":23804,"meta":10,"style":10},"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",[89,26289,26290,26304,26311,26318,26325,26332,26339,26346,26353,26360],{"__ignoreMap":10},[92,26291,26292,26294,26297,26299,26302],{"class":94,"line":95},[92,26293,24557],{"class":1942},[92,26295,26296],{"class":207}," dnf",[92,26298,26060],{"class":207},[92,26300,26301],{"class":207}," docker",[92,26303,24659],{"class":151},[92,26305,26306,26309],{"class":94,"line":11},[92,26307,26308],{"class":207},"                  docker-client",[92,26310,24659],{"class":151},[92,26312,26313,26316],{"class":94,"line":1158},[92,26314,26315],{"class":207},"                  docker-client-latest",[92,26317,24659],{"class":151},[92,26319,26320,26323],{"class":94,"line":1173},[92,26321,26322],{"class":207},"                  docker-common",[92,26324,24659],{"class":151},[92,26326,26327,26330],{"class":94,"line":1179},[92,26328,26329],{"class":207},"                  docker-latest",[92,26331,24659],{"class":151},[92,26333,26334,26337],{"class":94,"line":1193},[92,26335,26336],{"class":207},"                  docker-latest-logrotate",[92,26338,24659],{"class":151},[92,26340,26341,26344],{"class":94,"line":1199},[92,26342,26343],{"class":207},"                  docker-logrotate",[92,26345,24659],{"class":151},[92,26347,26348,26351],{"class":94,"line":1290},[92,26349,26350],{"class":207},"                  docker-selinux",[92,26352,24659],{"class":151},[92,26354,26355,26358],{"class":94,"line":1296},[92,26356,26357],{"class":207},"                  docker-engine-selinux",[92,26359,24659],{"class":151},[92,26361,26362],{"class":94,"line":1308},[92,26363,26364],{"class":207},"                  docker-engine\n",[38,26366,26367],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[83,26369,26371],{"className":23802,"code":26370,"language":23804,"meta":10,"style":10},"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",[89,26372,26373,26387,26402],{"__ignoreMap":10},[92,26374,26375,26377,26379,26382,26384],{"class":94,"line":95},[92,26376,24557],{"class":1942},[92,26378,26296],{"class":207},[92,26380,26381],{"class":151}," -y",[92,26383,23814],{"class":207},[92,26385,26386],{"class":207}," dnf-plugins-core\n",[92,26388,26389,26391,26393,26396,26399],{"class":94,"line":11},[92,26390,24557],{"class":1942},[92,26392,26296],{"class":207},[92,26394,26395],{"class":207}," config-manager",[92,26397,26398],{"class":207}," addrepo",[92,26400,26401],{"class":151}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[92,26403,26404,26406,26409,26412,26415],{"class":94,"line":1158},[92,26405,24557],{"class":1942},[92,26407,26408],{"class":207}," sed",[92,26410,26411],{"class":151}," -i",[92,26413,26414],{"class":207}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[92,26416,26417],{"class":207}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[38,26419,26420],{},"最后安装：",[83,26422,26424],{"className":23802,"code":26423,"language":23804,"meta":10,"style":10},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[89,26425,26426],{"__ignoreMap":10},[92,26427,26428,26430,26432,26434,26436,26438,26440,26442],{"class":94,"line":95},[92,26429,24557],{"class":1942},[92,26431,26296],{"class":207},[92,26433,23814],{"class":207},[92,26435,26234],{"class":207},[92,26437,26237],{"class":207},[92,26439,26240],{"class":207},[92,26441,26243],{"class":207},[92,26443,26246],{"class":207},[63,26445,26447],{"id":26446},"_22配置环境","2.2.配置环境",[21978,26449,26451,26454],{"id":26450},"_221检查-docker-服务状态",[252,26452,26453],{},"2.2.1.检查 Docker 服务状态"," ：",[38,26456,26457],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[83,26459,26461],{"className":23802,"code":26460,"language":23804,"meta":10,"style":10},"systemctl status docker\n",[89,26462,26463],{"__ignoreMap":10},[92,26464,26465,26468,26471],{"class":94,"line":95},[92,26466,26467],{"class":1942},"systemctl",[92,26469,26470],{"class":207}," status",[92,26472,26473],{"class":207}," docker\n",[21978,26475,26477,26454],{"id":26476},"_222启动-docker-服务",[252,26478,26479],{},"2.2.2.启动 Docker 服务",[38,26481,26482],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[83,26484,26486],{"className":23802,"code":26485,"language":23804,"meta":10,"style":10},"sudo systemctl start docker\n",[89,26487,26488],{"__ignoreMap":10},[92,26489,26490,26492,26495,26497],{"class":94,"line":95},[92,26491,24557],{"class":1942},[92,26493,26494],{"class":207}," systemctl",[92,26496,4163],{"class":207},[92,26498,26473],{"class":207},[21978,26500,26502,26454],{"id":26501},"_223设置-docker-开机自启",[252,26503,26504],{},"2.2.3.设置 Docker 开机自启",[38,26506,26507],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[83,26509,26511],{"className":23802,"code":26510,"language":23804,"meta":10,"style":10},"sudo systemctl enable docker\n",[89,26512,26513],{"__ignoreMap":10},[92,26514,26515,26517,26519,26522],{"class":94,"line":95},[92,26516,24557],{"class":1942},[92,26518,26494],{"class":207},[92,26520,26521],{"class":207}," enable",[92,26523,26473],{"class":207},[21978,26525,26527,13775,26530,13775,26535,26454],{"id":26526},"_224将用户添加到-docker-组",[252,26528,26529],{},"2.2.4.将用户添加到",[252,26531,26532],{},[89,26533,26534],{},"docker",[252,26536,26537],{},"组",[38,26539,26540,26541,26543],{},"使用以下命令将当前用户添加到 ",[89,26542,26534],{}," 组：",[83,26545,26547],{"className":23802,"code":26546,"language":23804,"meta":10,"style":10},"sudo usermod -aG docker $USER\n",[89,26548,26549],{"__ignoreMap":10},[92,26550,26551,26553,26556,26559,26561],{"class":94,"line":95},[92,26552,24557],{"class":1942},[92,26554,26555],{"class":207}," usermod",[92,26557,26558],{"class":151}," -aG",[92,26560,26301],{"class":207},[92,26562,26563],{"class":102}," $USER\n",[21978,26565,26567,26454],{"id":26566},"_225退出并重新登录",[252,26568,26569],{},"2.2.5.退出并重新登录",[38,26571,26572],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[83,26574,26576],{"className":23802,"code":26575,"language":23804,"meta":10,"style":10},"newgrp docker\n",[89,26577,26578],{"__ignoreMap":10},[92,26579,26580,26583],{"class":94,"line":95},[92,26581,26582],{"class":1942},"newgrp",[92,26584,26473],{"class":207},[21978,26586,26588,26454],{"id":26587},"_226重新启动-docker-服务如果需要",[252,26589,26590],{},"2.2.6.重新启动 Docker 服务（如果需要）",[38,26592,26593],{},"确保 Docker 服务正在运行，可以使用以下命令：",[83,26595,26596],{"className":23802,"code":26485,"language":23804,"meta":10,"style":10},[89,26597,26598],{"__ignoreMap":10},[92,26599,26600,26602,26604,26606],{"class":94,"line":95},[92,26601,24557],{"class":1942},[92,26603,26494],{"class":207},[92,26605,4163],{"class":207},[92,26607,26473],{"class":207},[21978,26609,26611,26454],{"id":26610},"_227重启电脑后检查-docker-服务状态",[252,26612,26613],{},"2.2.7.重启电脑后检查 Docker 服务状态",[38,26615,26616],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[83,26618,26620],{"className":23802,"code":26619,"language":23804,"meta":10,"style":10},"sudo reboot\nsystemctl status docker\n",[89,26621,26622,26629],{"__ignoreMap":10},[92,26623,26624,26626],{"class":94,"line":95},[92,26625,24557],{"class":1942},[92,26627,26628],{"class":207}," reboot\n",[92,26630,26631,26633,26635],{"class":94,"line":11},[92,26632,26467],{"class":1942},[92,26634,26470],{"class":207},[92,26636,26473],{"class":207},[38,26638,26639],{},[1441,26640],{"alt":10,"src":26641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[38,26643,26644],{},"第三行显示enabled说明开机自启动成功",[38,26646,26647],{},"按q退出",[63,26649,26651],{"id":26650},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[38,26653,26654],{},"优先使用linux来使用docker是比较好的",[38,26656,26657],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[38,26659,26660],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[38,26662,26663,26664],{},"官方下载安装:",[341,26665,26666],{"href":26666,"rel":26667},"https:\u002F\u002Fwww.docker.com\u002F",[23845],[38,26669,26670],{},"Windows的Docker显卡直通与USB直通:",[38,26672,26673],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[38,26675,26676],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[38,26678,26679],{},[1441,26680],{"alt":10,"src":26681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[38,26683,26684],{},[1441,26685],{"alt":10,"src":26686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[38,26688,26689],{},[1441,26690],{"alt":10,"src":26691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5106,26693,26694],{},"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":10,"searchDepth":11,"depth":11,"links":26696},[26697,26698,26699],{"id":25974,"depth":1158,"text":25975},{"id":26446,"depth":1158,"text":26447},{"id":26650,"depth":1158,"text":26651},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25966,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26706,"title":26707,"body":26708,"description":26715,"extension":14,"meta":27408,"navigation":17,"path":27409,"seo":27410,"stem":27411,"__hash__":27412},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26709,"toc":27402},[26710,26713,26716,26720,26725,26730,26733,26761,26766,26775,26778,26783,26787,26794,26799,26805,26809,26812,26816,26821,26913,26918,26936,26941,26962,26967,26983,26987,26992,27021,27026,27072,27077,27121,27129,27146,27151,27167,27172,27186,27189,27192,27195,27198,27227,27230,27235,27239,27242,27245,27251,27254,27257,27260,27322,27329,27334,27337,27355,27359,27362,27379,27382,27385,27399],[29,26711,26707],{"id":26712},"_3docker直通",[38,26714,26715],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[63,26717,26719],{"id":26718},"_31usb直通","3.1.USB直通",[38,26721,26722],{},[1441,26723],{"alt":10,"src":26724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[46,26726,26727],{},[49,26728,26729],{},"方法一(不是很推荐新手)：",[38,26731,26732],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[83,26734,26736],{"className":23802,"code":26735,"language":23804,"meta":10,"style":10},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[89,26737,26738,26746,26751],{"__ignoreMap":10},[92,26739,26740,26743],{"class":94,"line":95},[92,26741,26742],{"class":1942},"ls",[92,26744,26745],{"class":207}," \u002Fdev\n",[92,26747,26748],{"class":94,"line":11},[92,26749,26750],{"class":161},"#例如\n",[92,26752,26753,26756,26758],{"class":94,"line":1158},[92,26754,26755],{"class":102},"--device",[92,26757,148],{"class":98},[92,26759,26760],{"class":207},"\u002Fdev\u002Ftty_USB0\n",[46,26762,26763],{"start":11},[49,26764,26765],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[83,26767,26769],{"className":23802,"code":26768,"language":23804,"meta":10,"style":10},"--privileged\n",[89,26770,26771],{"__ignoreMap":10},[92,26772,26773],{"class":94,"line":95},[92,26774,26768],{"class":1942},[38,26776,26777],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[38,26779,26780],{},[1441,26781],{"alt":10,"src":26782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[63,26784,26786],{"id":26785},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[38,26788,26789,26790,26793],{},"NVIDIA Container Toolkit使用户 ",[252,26791,26792],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[38,26795,26796],{},[1441,26797],{"alt":10,"src":26798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[38,26800,26801],{},[341,26802,26803],{"href":26803,"rel":26804},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23845],[21978,26806,26808],{"id":26807},"_321安装","3.2.1.安装",[38,26810,26811],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22890,26813,26815],{"id":26814},"_3211ubuntu","3.2.1.1.Ubuntu",[46,26817,26818],{},[49,26819,26820],{},"配置存储库 并更新",[83,26822,26824],{"className":23802,"code":26823,"language":23804,"meta":10,"style":10},"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",[89,26825,26826,26855,26875,26887,26899,26905],{"__ignoreMap":10},[92,26827,26828,26831,26834,26837,26839,26841,26844,26847,26850,26853],{"class":94,"line":95},[92,26829,26830],{"class":1942},"curl",[92,26832,26833],{"class":151}," -fsSL",[92,26835,26836],{"class":207}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[92,26838,25090],{"class":98},[92,26840,26054],{"class":1942},[92,26842,26843],{"class":207}," gpg",[92,26845,26846],{"class":151}," --dearmor",[92,26848,26849],{"class":151}," -o",[92,26851,26852],{"class":207}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[92,26854,24659],{"class":151},[92,26856,26857,26860,26862,26865,26868,26871,26873],{"class":94,"line":11},[92,26858,26859],{"class":102},"  && ",[92,26861,26830],{"class":1942},[92,26863,26864],{"class":151}," -s",[92,26866,26867],{"class":151}," -L",[92,26869,26870],{"class":207}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[92,26872,25090],{"class":98},[92,26874,24659],{"class":151},[92,26876,26877,26880,26883,26885],{"class":94,"line":1158},[92,26878,26879],{"class":1942},"    sed",[92,26881,26882],{"class":207}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[92,26884,25090],{"class":98},[92,26886,24659],{"class":151},[92,26888,26889,26892,26894,26897],{"class":94,"line":1173},[92,26890,26891],{"class":1942},"    sudo",[92,26893,26197],{"class":207},[92,26895,26896],{"class":207}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[92,26898,24659],{"class":151},[92,26900,26901,26903],{"class":94,"line":1179},[92,26902,26859],{"class":102},[92,26904,26156],{"class":151},[92,26906,26907,26909,26911],{"class":94,"line":1193},[92,26908,26891],{"class":1942},[92,26910,26057],{"class":207},[92,26912,26223],{"class":207},[46,26914,26915],{"start":11},[49,26916,26917],{},"安装nvidia-docker2",[83,26919,26921],{"className":23802,"code":26920,"language":23804,"meta":10,"style":10},"sudo apt-get install -y nvidia-docker2\n",[89,26922,26923],{"__ignoreMap":10},[92,26924,26925,26927,26929,26931,26933],{"class":94,"line":95},[92,26926,24557],{"class":1942},[92,26928,26057],{"class":207},[92,26930,23814],{"class":207},[92,26932,26381],{"class":151},[92,26934,26935],{"class":207}," nvidia-docker2\n",[46,26937,26938],{"start":1158},[49,26939,26940],{},"使用nvidia-ctk命令配置container runtime",[83,26942,26944],{"className":23802,"code":26943,"language":23804,"meta":10,"style":10},"sudo nvidia-ctk runtime configure --runtime=docker\n",[89,26945,26946],{"__ignoreMap":10},[92,26947,26948,26950,26953,26956,26959],{"class":94,"line":95},[92,26949,24557],{"class":1942},[92,26951,26952],{"class":207}," nvidia-ctk",[92,26954,26955],{"class":207}," runtime",[92,26957,26958],{"class":207}," configure",[92,26960,26961],{"class":151}," --runtime=docker\n",[46,26963,26964],{"start":1173},[49,26965,26966],{},"重启docker服务:",[83,26968,26970],{"className":23802,"code":26969,"language":23804,"meta":10,"style":10},"sudo systemctl restart docker\n",[89,26971,26972],{"__ignoreMap":10},[92,26973,26974,26976,26978,26981],{"class":94,"line":95},[92,26975,24557],{"class":1942},[92,26977,26494],{"class":207},[92,26979,26980],{"class":207}," restart",[92,26982,26473],{"class":207},[22890,26984,26986],{"id":26985},"_3212fedora","3.2.1.2.Fedora",[46,26988,26989],{},[49,26990,26991],{},"配置存储库",[83,26993,26995],{"className":23802,"code":26994,"language":23804,"meta":10,"style":10},"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",[89,26996,26997,27012],{"__ignoreMap":10},[92,26998,26999,27001,27003,27005,27008,27010],{"class":94,"line":95},[92,27000,26830],{"class":1942},[92,27002,26864],{"class":151},[92,27004,26867],{"class":151},[92,27006,27007],{"class":207}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[92,27009,25090],{"class":98},[92,27011,24659],{"class":151},[92,27013,27014,27016,27018],{"class":94,"line":11},[92,27015,24557],{"class":1942},[92,27017,26197],{"class":207},[92,27019,27020],{"class":207}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[46,27022,27023],{"start":11},[49,27024,27025],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[83,27027,27029],{"className":23802,"code":27028,"language":23804,"meta":10,"style":10},"# 如果是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",[89,27030,27031,27036,27050,27054,27059],{"__ignoreMap":10},[92,27032,27033],{"class":94,"line":95},[92,27034,27035],{"class":161},"# 如果是RHEL或者Rocky（DNF4）\n",[92,27037,27038,27040,27042,27044,27047],{"class":94,"line":11},[92,27039,24557],{"class":1942},[92,27041,26296],{"class":207},[92,27043,26395],{"class":207},[92,27045,27046],{"class":151}," --add-repo",[92,27048,27049],{"class":207}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[92,27051,27052],{"class":94,"line":1158},[92,27053,2379],{"emptyLinePlaceholder":17},[92,27055,27056],{"class":94,"line":1173},[92,27057,27058],{"class":161},"# 如果是Feodra41+（DNF5）\n",[92,27060,27061,27063,27065,27067,27069],{"class":94,"line":1179},[92,27062,24557],{"class":1942},[92,27064,26296],{"class":207},[92,27066,26395],{"class":207},[92,27068,26398],{"class":207},[92,27070,27071],{"class":151}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[46,27073,27074],{"start":1158},[49,27075,27076],{},"安装NVIDIA Container Toolki包",[83,27078,27080],{"className":23802,"code":27079,"language":23804,"meta":10,"style":10},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[89,27081,27082,27087,27100,27104,27109],{"__ignoreMap":10},[92,27083,27084],{"class":94,"line":95},[92,27085,27086],{"class":161},"# 如果是RHEL或者Rocky\n",[92,27088,27089,27091,27093,27095,27097],{"class":94,"line":11},[92,27090,24557],{"class":1942},[92,27092,26296],{"class":207},[92,27094,23814],{"class":207},[92,27096,26381],{"class":151},[92,27098,27099],{"class":207}," nvidia-container-toolkit\n",[92,27101,27102],{"class":94,"line":1158},[92,27103,2379],{"emptyLinePlaceholder":17},[92,27105,27106],{"class":94,"line":1173},[92,27107,27108],{"class":161},"# 如果是Fedora\n",[92,27110,27111,27113,27115,27117,27119],{"class":94,"line":1179},[92,27112,24557],{"class":1942},[92,27114,26296],{"class":207},[92,27116,23814],{"class":207},[92,27118,26381],{"class":151},[92,27120,27099],{"class":207},[46,27122,27123],{"start":1173},[49,27124,27125,27126,27128],{},"安装nvidia-docker2 ： 在Fedora上使用",[89,27127,26271],{},"进行安装",[83,27130,27132],{"className":23802,"code":27131,"language":23804,"meta":10,"style":10},"sudo dnf install -y nvidia-docker2\n",[89,27133,27134],{"__ignoreMap":10},[92,27135,27136,27138,27140,27142,27144],{"class":94,"line":95},[92,27137,24557],{"class":1942},[92,27139,26296],{"class":207},[92,27141,23814],{"class":207},[92,27143,26381],{"class":151},[92,27145,26935],{"class":207},[46,27147,27148],{"start":1179},[49,27149,27150],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[83,27152,27153],{"className":23802,"code":26943,"language":23804,"meta":10,"style":10},[89,27154,27155],{"__ignoreMap":10},[92,27156,27157,27159,27161,27163,27165],{"class":94,"line":95},[92,27158,24557],{"class":1942},[92,27160,26952],{"class":207},[92,27162,26955],{"class":207},[92,27164,26958],{"class":207},[92,27166,26961],{"class":151},[46,27168,27169],{"start":1193},[49,27170,27171],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[83,27173,27174],{"className":23802,"code":26969,"language":23804,"meta":10,"style":10},[89,27175,27176],{"__ignoreMap":10},[92,27177,27178,27180,27182,27184],{"class":94,"line":95},[92,27179,24557],{"class":1942},[92,27181,26494],{"class":207},[92,27183,26980],{"class":207},[92,27185,26473],{"class":207},[38,27187,27188],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[38,27190,27191],{},"方法：",[38,27193,27194],{},"1️⃣nvidia-smi",[38,27196,27197],{},"2️⃣运行nvidia cuda 容器进行测试",[83,27199,27201],{"className":23802,"code":27200,"language":23804,"meta":10,"style":10},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[89,27202,27203],{"__ignoreMap":10},[92,27204,27205,27207,27209,27212,27215,27218,27221,27224],{"class":94,"line":95},[92,27206,24557],{"class":1942},[92,27208,26301],{"class":207},[92,27210,27211],{"class":207}," run",[92,27213,27214],{"class":151}," --rm",[92,27216,27217],{"class":151}," --gpus",[92,27219,27220],{"class":207}," all",[92,27222,27223],{"class":207}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[92,27225,27226],{"class":207}," nvidia-smi\n",[38,27228,27229],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[38,27231,27232],{},[1441,27233],{"alt":10,"src":27234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[63,27236,27238],{"id":27237},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[38,27240,27241],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[38,27243,27244],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[38,27246,27247],{},[341,27248,27249],{"href":27249,"rel":27250},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23845],[38,27252,27253],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[38,27255,27256],{},"我们只需要找到对应的Docker镜像当底包即可。",[38,27258,27259],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[240,27261,27262,27278],{},[243,27263,27264],{},[246,27265,27266,27269,27272,27275],{},[249,27267,27268],{"align":23716},"镜像类型",[249,27270,27271],{"align":23716},"适用场景",[249,27273,27274],{"align":23716},"示例标签",[249,27276,27277],{"align":23716},"大小",[287,27279,27280,27294,27308],{},[246,27281,27282,27285,27288,27291],{},[292,27283,27284],{"align":23716},"base",[292,27286,27287],{"align":23716},"仅需 CUDA 运行时库",[292,27289,27290],{"align":23716},"12.4.0-base-ubuntu22.04",[292,27292,27293],{"align":23716},"~240MB",[246,27295,27296,27299,27302,27305],{},[292,27297,27298],{"align":23716},"runtime",[292,27300,27301],{"align":23716},"部署编译后的应用（含数学库）",[292,27303,27304],{"align":23716},"12.4.0-runtime-ubuntu22.04",[292,27306,27307],{"align":23716},"~2GB",[246,27309,27310,27313,27316,27319],{},[292,27311,27312],{"align":23716},"devel",[292,27314,27315],{"align":23716},"开发环境（含编译工具）",[292,27317,27318],{"align":23716},"12.4.0-devel-ubuntu22.04",[292,27320,27321],{"align":23716},"~3GB",[38,27323,27324,27325,27328],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[89,27326,27327],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[38,27330,27331],{},[1441,27332],{"alt":10,"src":27333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[38,27335,27336],{},"在dockerfile里就可以开头这么写：",[83,27338,27340],{"className":23802,"code":27339,"language":23804,"meta":10,"style":10},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[89,27341,27342,27347],{"__ignoreMap":10},[92,27343,27344],{"class":94,"line":95},[92,27345,27346],{"class":161},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[92,27348,27349,27352],{"class":94,"line":11},[92,27350,27351],{"class":1942},"FROM",[92,27353,27354],{"class":207}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[63,27356,27358],{"id":27357},"_34配置以太网","3.4.配置以太网",[38,27360,27361],{},"指定网络模式",[83,27363,27365],{"className":23802,"code":27364,"language":23804,"meta":10,"style":10},"--net=host \\\n",[89,27366,27367],{"__ignoreMap":10},[92,27368,27369,27372,27374,27377],{"class":94,"line":95},[92,27370,27371],{"class":102},"--net",[92,27373,148],{"class":98},[92,27375,27376],{"class":207},"host",[92,27378,24659],{"class":1942},[38,27380,27381],{},"启动参数里加上这行即可。具体在下方",[38,27383,27384],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1110,27386,27387,27390,27393,27396],{},[49,27388,27389],{},"--net=bridge:默认选项，表示连接到默认的网桥",[49,27391,27392],{},"--net=host:容器使用宿主机的网络",[49,27394,27395],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[49,27397,27398],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5106,27400,27401],{},"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":10,"searchDepth":11,"depth":11,"links":27403},[27404,27405,27406,27407],{"id":26718,"depth":1158,"text":26719},{"id":26785,"depth":1158,"text":26786},{"id":27237,"depth":1158,"text":27238},{"id":27357,"depth":1158,"text":27358},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26707,"description":26715},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27414,"title":27415,"body":27416,"description":27423,"extension":14,"meta":27429,"navigation":17,"path":27430,"seo":27431,"stem":27432,"__hash__":27433},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27417,"toc":27427},[27418,27421,27424],[29,27419,27415],{"id":27420},"_4dockerhub换源",[38,27422,27423],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[38,27425,27426],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":10,"searchDepth":11,"depth":11,"links":27428},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27415,"description":27423},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27435,"title":27436,"body":27437,"description":10,"extension":14,"meta":28449,"navigation":17,"path":28450,"seo":28451,"stem":28452,"__hash__":28453},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27438,"toc":28444},[27439,27442,27446,27452,27456,27459,27799,27802,27805,27808,27813,27818,27821,27824,27827,27830,27849,27852,27863,27869,28051,28061,28077,28340,28342,28367,28382,28391,28441],[29,27440,27436],{"id":27441},"_5docker命令学习",[63,27443,27445],{"id":27444},"_51参考文档","5.1.参考文档",[38,27447,27448],{},[341,27449,27450],{"href":27450,"rel":27451},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23845],[63,27453,27455],{"id":27454},"_52常用命令","5.2.常用命令",[38,27457,27458],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[240,27460,27461,27474],{},[243,27462,27463],{},[246,27464,27465,27468,27471],{},[249,27466,27467],{"align":23716},"命令",[249,27469,27470],{"align":23716},"描述",[249,27472,27473],{"align":23716},"示例",[287,27475,27476,27487,27498,27509,27520,27531,27542,27553,27563,27574,27585,27596,27606,27617,27628,27639,27649,27659,27669,27679,27690,27701,27712,27723,27734,27745,27755,27766,27777,27788],{},[246,27477,27478,27481,27484],{},[292,27479,27480],{"align":23716},"docker run",[292,27482,27483],{"align":23716},"创建并启动一个新的容器。",[292,27485,27486],{"align":23716},"docker run -it ubuntu bash",[246,27488,27489,27492,27495],{},[292,27490,27491],{"align":23716},"docker build",[292,27493,27494],{"align":23716},"通过指定的 Dockerfile 创建一个新的镜像。",[292,27496,27497],{"align":23716},"docker build -t myimage .",[246,27499,27500,27503,27506],{},[292,27501,27502],{"align":23716},"docker pull",[292,27504,27505],{"align":23716},"从 Docker 仓库拉取镜像。",[292,27507,27508],{"align":23716},"docker pull ubuntu",[246,27510,27511,27514,27517],{},[292,27512,27513],{"align":23716},"docker push",[292,27515,27516],{"align":23716},"将本地镜像推送到 Docker 仓库。",[292,27518,27519],{"align":23716},"docker push myimage",[246,27521,27522,27525,27528],{},[292,27523,27524],{"align":23716},"docker stop",[292,27526,27527],{"align":23716},"停止一个正在运行的容器。",[292,27529,27530],{"align":23716},"docker stop container_id",[246,27532,27533,27536,27539],{},[292,27534,27535],{"align":23716},"docker start",[292,27537,27538],{"align":23716},"启动一个已经存在的容器。",[292,27540,27541],{"align":23716},"docker start container_id",[246,27543,27544,27547,27550],{},[292,27545,27546],{"align":23716},"docker restart",[292,27548,27549],{"align":23716},"重新启动容器。",[292,27551,27552],{"align":23716},"docker restart container_id",[246,27554,27555,27558,27561],{},[292,27556,27557],{"align":23716},"docker ps",[292,27559,27560],{"align":23716},"列出当前正在运行的容器。",[292,27562,27557],{"align":23716},[246,27564,27565,27568,27571],{},[292,27566,27567],{"align":23716},"docker rm",[292,27569,27570],{"align":23716},"删除一个或多个停止的容器。",[292,27572,27573],{"align":23716},"docker rm container_id",[246,27575,27576,27579,27582],{},[292,27577,27578],{"align":23716},"docker exec",[292,27580,27581],{"align":23716},"在一个正在运行的容器中执行命令。",[292,27583,27584],{"align":23716},"docker exec -it container_id bash",[246,27586,27587,27590,27593],{},[292,27588,27589],{"align":23716},"docker logs",[292,27591,27592],{"align":23716},"查看容器的日志输出。",[292,27594,27595],{"align":23716},"docker logs container_id",[246,27597,27598,27601,27604],{},[292,27599,27600],{"align":23716},"docker images",[292,27602,27603],{"align":23716},"列出本地所有镜像。",[292,27605,27600],{"align":23716},[246,27607,27608,27611,27614],{},[292,27609,27610],{"align":23716},"docker rmi",[292,27612,27613],{"align":23716},"删除一个或多个镜像。",[292,27615,27616],{"align":23716},"docker rmi myimage",[246,27618,27619,27622,27625],{},[292,27620,27621],{"align":23716},"docker network",[292,27623,27624],{"align":23716},"管理 Docker 网络。",[292,27626,27627],{"align":23716},"docker network ls",[246,27629,27630,27633,27636],{},[292,27631,27632],{"align":23716},"docker volume",[292,27634,27635],{"align":23716},"管理 Docker 数据卷。",[292,27637,27638],{"align":23716},"docker volume ls",[246,27640,27641,27644,27647],{},[292,27642,27643],{"align":23716},"docker-compose up",[292,27645,27646],{"align":23716},"启动 docker-compose.yml 中定义的所有服务。",[292,27648,27643],{"align":23716},[246,27650,27651,27654,27657],{},[292,27652,27653],{"align":23716},"docker-compose down",[292,27655,27656],{"align":23716},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[292,27658,27653],{"align":23716},[246,27660,27661,27664,27667],{},[292,27662,27663],{"align":23716},"docker info",[292,27665,27666],{"align":23716},"显示 Docker 系统的详细信息。",[292,27668,27663],{"align":23716},[246,27670,27671,27674,27677],{},[292,27672,27673],{"align":23716},"docker stats",[292,27675,27676],{"align":23716},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[292,27678,27673],{"align":23716},[246,27680,27681,27684,27687],{},[292,27682,27683],{"align":23716},"docker inspect",[292,27685,27686],{"align":23716},"查看容器或镜像的详细信息（JSON 格式）。",[292,27688,27689],{"align":23716},"docker inspect container_id",[246,27691,27692,27695,27698],{},[292,27693,27694],{"align":23716},"docker save",[292,27696,27697],{"align":23716},"将一个镜像保存为 tar 文件。",[292,27699,27700],{"align":23716},"docker save -o myimage.tar myimage",[246,27702,27703,27706,27709],{},[292,27704,27705],{"align":23716},"docker load",[292,27707,27708],{"align":23716},"从 tar 文件中加载镜像。",[292,27710,27711],{"align":23716},"docker load -i myimage.tar",[246,27713,27714,27717,27720],{},[292,27715,27716],{"align":23716},"docker tag",[292,27718,27719],{"align":23716},"为镜像添加标签（tag）。",[292,27721,27722],{"align":23716},"docker tag myimage myimage:v1",[246,27724,27725,27728,27731],{},[292,27726,27727],{"align":23716},"docker buildx build",[292,27729,27730],{"align":23716},"使用 Buildx 构建多架构镜像。",[292,27732,27733],{"align":23716},"docker buildx build -t myimage .",[246,27735,27736,27739,27742],{},[292,27737,27738],{"align":23716},"docker buildx create",[292,27740,27741],{"align":23716},"创建一个新的 Buildx 构建实例。",[292,27743,27744],{"align":23716},"docker buildx create –use",[246,27746,27747,27750,27753],{},[292,27748,27749],{"align":23716},"docker buildx ls",[292,27751,27752],{"align":23716},"列出所有可用的 Buildx 构建实例。",[292,27754,27749],{"align":23716},[246,27756,27757,27760,27763],{},[292,27758,27759],{"align":23716},"docker buildx use",[292,27761,27762],{"align":23716},"设置当前的 Buildx 构建实例。",[292,27764,27765],{"align":23716},"docker buildx use mybuilder",[246,27767,27768,27771,27774],{},[292,27769,27770],{"align":23716},"docker buildx bake",[292,27772,27773],{"align":23716},"使用 Bake 文件批量构建镜像。",[292,27775,27776],{"align":23716},"docker buildx bake -f bake.hcl",[246,27778,27779,27782,27785],{},[292,27780,27781],{"align":23716},"docker buildx build –push",[292,27783,27784],{"align":23716},"构建镜像并推送到镜像仓库。",[292,27786,27787],{"align":23716},"docker buildx build –push -t myimage .",[246,27789,27790,27793,27796],{},[292,27791,27792],{"align":23716},"docker buildx build –platform",[292,27794,27795],{"align":23716},"构建镜像并为多个平台生成支持。",[292,27797,27798],{"align":23716},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[38,27800,27801],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[38,27803,27804],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[38,27806,27807],{},"docker images 可以查看已经下载的镜像",[38,27809,27810],{},[1441,27811],{"alt":10,"src":27812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[38,27814,27815],{},[252,27816,27817],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[38,27819,27820],{},"docker rmi $(docker images -q) 删除所有的镜像",[38,27822,27823],{},"docker container logs 查看容器日志",[38,27825,27826],{},"docker top 查看容器里的进程",[38,27828,27829],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[83,27831,27833],{"className":23802,"code":27832,"language":23804,"meta":10,"style":10},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[89,27834,27835],{"__ignoreMap":10},[92,27836,27837,27840,27843,27846],{"class":94,"line":95},[92,27838,27839],{"class":1942},"如：docker",[92,27841,27842],{"class":207}," cp",[92,27844,27845],{"class":207}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[92,27847,27848],{"class":207}," \u002Fmydata\u002Fnginx\n",[38,27850,27851],{},"docker run时在启动容器的时候会有几个常用的选项：",[1110,27853,27854,27857,27860],{},[49,27855,27856],{},"-d选项：表示后台运行",[49,27858,27859],{},"-P选项：随机端口映射",[49,27861,27862],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[63,27864,27866],{"id":27865},"_53run命令的参数非常重要",[252,27867,27868],{},"5.3.run命令的参数（非常重要）",[240,27870,27871,27884],{},[243,27872,27873],{},[246,27874,27875,27878,27881],{},[249,27876,27877],{"align":23716},"参数\u002F配置",[249,27879,27880],{"align":23716},"功能说明",[249,27882,27883],{"align":23716},"重要性与参考依据",[287,27885,27886,27897,27908,27919,27930,27941,27952,27963,27974,27985,27996,28007,28018,28029,28040],{},[246,27887,27888,27891,27894],{},[292,27889,27890],{"align":23716},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[292,27892,27893],{"align":23716},"指定容器名称，便于后续管理",[292,27895,27896],{"align":23716},"替代随机生成的容器名。",[246,27898,27899,27902,27905],{},[292,27900,27901],{"align":23716},"–gpus all",[292,27903,27904],{"align":23716},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[292,27906,27907],{"align":23716},"用于CUDA加速等GPU依赖任务。",[246,27909,27910,27913,27916],{},[292,27911,27912],{"align":23716},"-e NVIDIA_DRIVER_CAPABILITIES=all",[292,27914,27915],{"align":23716},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[292,27917,27918],{"align":23716},"确保容器内GPU功能完整67。",[246,27920,27921,27924,27927],{},[292,27922,27923],{"align":23716},"-dit",[292,27925,27926],{"align":23716},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[292,27928,27929],{"align":23716},"允许容器在后台运行并支持交互操作。",[246,27931,27932,27935,27938],{},[292,27933,27934],{"align":23716},"–privileged",[292,27936,27937],{"align":23716},"赋予容器完全主机权限（可访问设备、内核模块等）",[292,27939,27940],{"align":23716},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[246,27942,27943,27946,27949],{},[292,27944,27945],{"align":23716},"–net=host",[292,27947,27948],{"align":23716},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[292,27950,27951],{"align":23716},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[246,27953,27954,27957,27960],{},[292,27955,27956],{"align":23716},"–group-add audio–group-add video–group-add dialout",[292,27958,27959],{"align":23716},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[292,27961,27962],{"align":23716},"避免权限问题（如避免无法调用摄像头、麦克风）。",[246,27964,27965,27968,27971],{},[292,27966,27967],{"align":23716},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[292,27969,27970],{"align":23716},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[292,27972,27973],{"align":23716},"支持容器内运行图形界面应用（如OpenCV可视化）。",[246,27975,27976,27979,27982],{},[292,27977,27978],{"align":23716},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[292,27980,27981],{"align":23716},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[292,27983,27984],{"align":23716},"实现容器内图形显示。",[246,27986,27987,27990,27993],{},[292,27988,27989],{"align":23716},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[292,27991,27992],{"align":23716},"挂载X11认证文件（只读）",[292,27994,27995],{"align":23716},"确保容器有权连接宿主机显示服务。",[246,27997,27998,28001,28004],{},[292,27999,28000],{"align":23716},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[292,28002,28003],{"align":23716},"挂载Wayland显示协议相关目录",[292,28005,28006],{"align":23716},"支持Wayland协议的图形显示。",[246,28008,28009,28012,28015],{},[292,28010,28011],{"align":23716},"–ulimit nofile=1024:524288",[292,28013,28014],{"align":23716},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[292,28016,28017],{"align":23716},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[246,28019,28020,28023,28026],{},[292,28021,28022],{"align":23716},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[292,28024,28025],{"align":23716},"挂载宿主机用户目录到容器内同名路径",[292,28027,28028],{"align":23716},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[246,28030,28031,28034,28037],{},[292,28032,28033],{"align":23716},"-w \u002Fhome\u002Ftungchiahui",[292,28035,28036],{"align":23716},"设置容器启动后的默认工作目录",[292,28038,28039],{"align":23716},"直接进入项目路径，方便执行命令2324。",[246,28041,28042,28045,28048],{},[292,28043,28044],{"align":23716},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[292,28046,28047],{"align":23716},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[292,28049,28050],{"align":23716},"提供预配置的深度学习与机器人开发环境。",[38,28052,28053,28054,28056,28057,28060],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[89,28055,24557],{},"加不加",[89,28058,28059],{},"sudo -E","都无所谓。",[38,28062,28063,28064,28066,28067,28069,28070,28073,28074,28076],{},"用户已经被加到docker组了，不用",[89,28065,24557],{},"也行跑，其次，",[89,28068,24557],{},"运行的话，你的",[89,28071,28072],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[89,28075,28072],{},"更不可能变了。",[83,28078,28080],{"className":23802,"code":28079,"language":23804,"meta":10,"style":10},"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",[89,28081,28082,28095,28105,28115,28127,28134,28141,28148,28158,28167,28176,28190,28202,28214,28223,28233,28242,28257,28290,28317,28328,28335],{"__ignoreMap":10},[92,28083,28084,28086,28088,28090,28093],{"class":94,"line":95},[92,28085,24557],{"class":1942},[92,28087,26301],{"class":207},[92,28089,27211],{"class":207},[92,28091,28092],{"class":151}," --name=ros_opencv_cuda",[92,28094,24659],{"class":151},[92,28096,28097,28100,28103],{"class":94,"line":11},[92,28098,28099],{"class":102},"--gpus ",[92,28101,28102],{"class":207},"all",[92,28104,24659],{"class":151},[92,28106,28107,28110,28113],{"class":94,"line":1158},[92,28108,28109],{"class":102},"-e ",[92,28111,28112],{"class":207},"NVIDIA_DRIVER_CAPABILITIES=all",[92,28114,24659],{"class":151},[92,28116,28117,28119,28122,28125],{"class":94,"line":1173},[92,28118,28109],{"class":102},[92,28120,28121],{"class":207},"DISPLAY=",[92,28123,28124],{"class":102},"$DISPLAY ",[92,28126,26156],{"class":151},[92,28128,28129,28132],{"class":94,"line":1179},[92,28130,28131],{"class":102},"-dit ",[92,28133,26156],{"class":151},[92,28135,28136,28139],{"class":94,"line":1193},[92,28137,28138],{"class":102},"--privileged ",[92,28140,26156],{"class":151},[92,28142,28143,28146],{"class":94,"line":1199},[92,28144,28145],{"class":102},"--net=host ",[92,28147,26156],{"class":151},[92,28149,28150,28153,28156],{"class":94,"line":1290},[92,28151,28152],{"class":102},"--group-add ",[92,28154,28155],{"class":207},"audio",[92,28157,24659],{"class":151},[92,28159,28160,28162,28165],{"class":94,"line":1296},[92,28161,28152],{"class":102},[92,28163,28164],{"class":207},"video",[92,28166,24659],{"class":151},[92,28168,28169,28171,28174],{"class":94,"line":1308},[92,28170,28152],{"class":102},[92,28172,28173],{"class":207},"dialout",[92,28175,24659],{"class":151},[92,28177,28178,28180,28183,28185,28188],{"class":94,"line":1591},[92,28179,28109],{"class":102},[92,28181,28182],{"class":207},"XAUTHORITY=",[92,28184,28072],{"class":102},[92,28186,28187],{"class":207},"\u002F.Xauthority",[92,28189,24659],{"class":151},[92,28191,28192,28194,28197,28200],{"class":94,"line":1596},[92,28193,28109],{"class":102},[92,28195,28196],{"class":207},"WAYLAND_DISPLAY=",[92,28198,28199],{"class":102},"$WAYLAND_DISPLAY ",[92,28201,26156],{"class":151},[92,28203,28204,28206,28209,28212],{"class":94,"line":1602},[92,28205,28109],{"class":102},[92,28207,28208],{"class":207},"XDG_RUNTIME_DIR=",[92,28210,28211],{"class":102},"$XDG_RUNTIME_DIR ",[92,28213,26156],{"class":151},[92,28215,28216,28218,28221],{"class":94,"line":1607},[92,28217,28109],{"class":102},[92,28219,28220],{"class":207},"QT_QPA_PLATFORM=xcb",[92,28222,24659],{"class":151},[92,28224,28225,28228,28231],{"class":94,"line":1621},[92,28226,28227],{"class":102},"-v ",[92,28229,28230],{"class":207},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[92,28232,24659],{"class":151},[92,28234,28235,28237,28240],{"class":94,"line":1626},[92,28236,28227],{"class":102},[92,28238,28239],{"class":207},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[92,28241,24659],{"class":151},[92,28243,28244,28247,28250,28252,28255],{"class":94,"line":1632},[92,28245,28246],{"class":102},"-v $HOME",[92,28248,28249],{"class":207},"\u002F.Xauthority:",[92,28251,28072],{"class":102},[92,28253,28254],{"class":207},"\u002F.Xauthority:ro",[92,28256,24659],{"class":151},[92,28258,28259,28261,28264,28266,28269,28272,28274,28277,28279,28281,28283,28285,28288],{"class":94,"line":1653},[92,28260,28227],{"class":102},[92,28262,28263],{"class":207},"\u002Frun\u002Fuser\u002F",[92,28265,25080],{"class":102},[92,28267,28268],{"class":1942},"id",[92,28270,28271],{"class":151}," -u",[92,28273,532],{"class":102},[92,28275,28276],{"class":207},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[92,28278,25080],{"class":102},[92,28280,28268],{"class":1942},[92,28282,28271],{"class":151},[92,28284,532],{"class":102},[92,28286,28287],{"class":207},"\u002Fwayland-0",[92,28289,24659],{"class":151},[92,28291,28292,28294,28296,28298,28300,28302,28304,28307,28309,28311,28313,28315],{"class":94,"line":1658},[92,28293,28227],{"class":102},[92,28295,28263],{"class":207},[92,28297,25080],{"class":102},[92,28299,28268],{"class":1942},[92,28301,28271],{"class":151},[92,28303,532],{"class":102},[92,28305,28306],{"class":207},":\u002Frun\u002Fuser\u002F",[92,28308,25080],{"class":102},[92,28310,28268],{"class":1942},[92,28312,28271],{"class":151},[92,28314,13694],{"class":102},[92,28316,26156],{"class":151},[92,28318,28319,28321,28323,28326],{"class":94,"line":1672},[92,28320,28246],{"class":102},[92,28322,962],{"class":207},[92,28324,28325],{"class":102},"$HOME ",[92,28327,26156],{"class":151},[92,28329,28330,28333],{"class":94,"line":1677},[92,28331,28332],{"class":102},"-w $HOME ",[92,28334,26156],{"class":151},[92,28336,28337],{"class":94,"line":1706},[92,28338,28339],{"class":102},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[38,28341,9005],{},[46,28343,28344,28352,28355,28358],{},[49,28345,28346,13775,28348,28351],{},[89,28347,28112],{},[89,28349,28350],{},"--gpus all","没有英伟达显卡请注释。",[49,28353,28354],{},"--name后面请自己为容器起名。",[49,28356,28357],{},"最后一行仓库名称请你自己找对应的镜像填上。",[49,28359,28360,28361,28366],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23533,28362,28363],{},[252,28364,28365],{},"请不要加","。",[83,28368,28370],{"className":23802,"code":28369,"language":23804,"meta":10,"style":10},"--ulimit nofile=1024:524288 \\\n",[89,28371,28372],{"__ignoreMap":10},[92,28373,28374,28377,28380],{"class":94,"line":95},[92,28375,28376],{"class":1942},"--ulimit",[92,28378,28379],{"class":207}," nofile=1024:524288",[92,28381,24659],{"class":151},[38,28383,28384,28385,28390],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23533,28386,28387],{},[252,28388,28389],{},"不建议","**.**",[83,28392,28394],{"className":23802,"code":28393,"language":23804,"meta":10,"style":10},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[89,28395,28396,28423,28432],{"__ignoreMap":10},[92,28397,28398,28401,28404,28406,28408,28410,28412,28414,28416,28419,28421],{"class":94,"line":95},[92,28399,28400],{"class":1942},"--user",[92,28402,28403],{"class":102}," $(",[92,28405,28268],{"class":1942},[92,28407,28271],{"class":151},[92,28409,532],{"class":102},[92,28411,962],{"class":207},[92,28413,25080],{"class":102},[92,28415,28268],{"class":1942},[92,28417,28418],{"class":151}," -g",[92,28420,13694],{"class":102},[92,28422,26156],{"class":151},[92,28424,28425,28427,28430],{"class":94,"line":11},[92,28426,28227],{"class":102},[92,28428,28429],{"class":207},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[92,28431,24659],{"class":151},[92,28433,28434,28436,28439],{"class":94,"line":1158},[92,28435,28227],{"class":102},[92,28437,28438],{"class":207},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[92,28440,24659],{"class":151},[5106,28442,28443],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":10,"searchDepth":11,"depth":11,"links":28445},[28446,28447,28448],{"id":27444,"depth":1158,"text":27445},{"id":27454,"depth":1158,"text":27455},{"id":27865,"depth":1158,"text":27868},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27436,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28455,"title":28456,"body":28457,"description":10,"extension":14,"meta":30080,"navigation":17,"path":30081,"seo":30082,"stem":30083,"__hash__":30084},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28458,"toc":30075},[28459,28462,28466,28469,28691,28695,28699,28702,28808,28813,28816,28821,28824,28829,28832,28837,28840,28852,28855,28860,28867,28895,28902,28978,28983,28986,29009,29011,29086,29091,29094,29098,29106,29111,29116,29120,29131,29137,29140,29143,29167,29170,29173,29201,29204,29207,29672,29675,29680,29685,29689,29712,29717,29721,29725,29728,29731,29734,29761,29764,29767,29785,29788,29791,29813,29821,29826,29831,29835,29838,29841,29844,29847,29892,29895,29913,29916,29921,29924,29945,29948,30004,30007,30012,30016,30019,30026,30029,30032,30037,30040,30056,30059,30072],[29,28460,28456],{"id":28461},"_6手动创建docker镜像",[63,28463,28465],{"id":28464},"_61dockerfile","6.1.DockerFile",[38,28467,28468],{},"常用命令：",[240,28470,28471,28482],{},[243,28472,28473],{},[246,28474,28475,28478,28480],{},[249,28476,28477],{"align":23716},"指令",[249,28479,25850],{"align":23716},[249,28481,27473],{"align":23716},[287,28483,28484,28494,28510,28521,28532,28543,28554,28565,28576,28590,28604,28615,28629,28640,28651,28665,28680],{},[246,28485,28486,28488,28491],{},[292,28487,27351],{"align":23716},[292,28489,28490],{"align":23716},"指定基础镜像，是 Dockerfile 的起点",[292,28492,28493],{"align":23716},"FROM ubuntu:22.04",[246,28495,28496,28499,28502],{},[292,28497,28498],{"align":23716},"LABEL",[292,28500,28501],{"align":23716},"添加元数据（如作者、版本等）",[292,28503,28504,28505,28509],{"align":23716},"LABEL maintainer=”",[341,28506,28508],{"href":28507},"mailto:you@example.com","you@example.com","”",[246,28511,28512,28515,28518],{},[292,28513,28514],{"align":23716},"ENV",[292,28516,28517],{"align":23716},"设置环境变量",[292,28519,28520],{"align":23716},"ENV PORT=8080",[246,28522,28523,28526,28529],{},[292,28524,28525],{"align":23716},"ARG",[292,28527,28528],{"align":23716},"构建参数，只在构建期间可用",[292,28530,28531],{"align":23716},"ARG VERSION=1.0",[246,28533,28534,28537,28540],{},[292,28535,28536],{"align":23716},"RUN",[292,28538,28539],{"align":23716},"构建镜像时运行命令",[292,28541,28542],{"align":23716},"RUN apt-get update && apt-get install -y curl",[246,28544,28545,28548,28551],{},[292,28546,28547],{"align":23716},"COPY",[292,28549,28550],{"align":23716},"复制文件到镜像中",[292,28552,28553],{"align":23716},"COPY . \u002Fapp",[246,28555,28556,28559,28562],{},[292,28557,28558],{"align":23716},"ADD",[292,28560,28561],{"align":23716},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[292,28563,28564],{"align":23716},"ADD archive.tar.gz \u002Fdata\u002F",[246,28566,28567,28570,28573],{},[292,28568,28569],{"align":23716},"WORKDIR",[292,28571,28572],{"align":23716},"设置工作目录",[292,28574,28575],{"align":23716},"WORKDIR \u002Fopt",[246,28577,28578,28581,28584],{},[292,28579,28580],{"align":23716},"CMD",[292,28582,28583],{"align":23716},"设置容器启动时默认命令（可被 docker run 覆盖）",[292,28585,28586,28587],{"align":23716},"CMD ",[92,28588,28589],{},"“node”, “index.js”",[246,28591,28592,28595,28598],{},[292,28593,28594],{"align":23716},"ENTRYPOINT",[292,28596,28597],{"align":23716},"设置容器启动时固定命令（通常用于 CLI 工具等）",[292,28599,28600,28601],{"align":23716},"ENTRYPOINT ",[92,28602,28603],{},"“python3”",[246,28605,28606,28609,28612],{},[292,28607,28608],{"align":23716},"EXPOSE",[292,28610,28611],{"align":23716},"声明镜像内服务监听的端口（不会自动映射）",[292,28613,28614],{"align":23716},"EXPOSE 80",[246,28616,28617,28620,28623],{},[292,28618,28619],{"align":23716},"VOLUME",[292,28621,28622],{"align":23716},"声明数据卷挂载点",[292,28624,28625,28626],{"align":23716},"VOLUME ",[92,28627,28628],{},"“\u002Fdata”",[246,28630,28631,28634,28637],{},[292,28632,28633],{"align":23716},"USER",[292,28635,28636],{"align":23716},"设置后续命令执行的用户",[292,28638,28639],{"align":23716},"USER appuser",[246,28641,28642,28645,28648],{},[292,28643,28644],{"align":23716},"ONBUILD",[292,28646,28647],{"align":23716},"当镜像作为其他镜像基础镜像时触发的构建指令",[292,28649,28650],{"align":23716},"ONBUILD COPY . \u002Fsrc",[246,28652,28653,28656,28659],{},[292,28654,28655],{"align":23716},"SHELL",[292,28657,28658],{"align":23716},"更改默认 shell，比如将 sh -c 改为 bash -c",[292,28660,28661,28662],{"align":23716},"SHELL ",[92,28663,28664],{},"“\u002Fbin\u002Fbash”, “-c”",[246,28666,28667,28670,28673],{},[292,28668,28669],{"align":23716},"HEALTHCHECK",[292,28671,28672],{"align":23716},"定义容器运行时的健康检查命令",[292,28674,28675,28676],{"align":23716},"`HEALTHCHECK CMD curl –fail ",[341,28677,28678],{"href":28678,"rel":28679},"http:\u002F\u002Flocalhost:8080",[23845],[246,28681,28682,28685,28688],{},[292,28683,28684],{"align":23716},"STOPSIGNAL",[292,28686,28687],{"align":23716},"容器停止时发送的信号",[292,28689,28690],{"align":23716},"STOPSIGNAL SIGKILL",[63,28692,28694],{"id":28693},"_62自己创建容器","6.2.自己创建容器",[21978,28696,28698],{"id":28697},"_621手动创建","6.2.1.手动创建",[38,28700,28701],{},"在x86电脑上编译x86的：",[83,28703,28705],{"className":23802,"code":28704,"language":23804,"meta":10,"style":10},"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",[89,28706,28707,28723,28727,28740,28744,28757,28761,28774,28778,28791,28795],{"__ignoreMap":10},[92,28708,28709,28711,28714,28717,28720],{"class":94,"line":95},[92,28710,26534],{"class":1942},[92,28712,28713],{"class":207}," build",[92,28715,28716],{"class":151}," -t",[92,28718,28719],{"class":207}," ros-melodic-cuda118-cudnn8-bionic:latest",[92,28721,28722],{"class":207}," .\n",[92,28724,28725],{"class":94,"line":11},[92,28726,2379],{"emptyLinePlaceholder":17},[92,28728,28729,28731,28733,28735,28738],{"class":94,"line":1158},[92,28730,26534],{"class":1942},[92,28732,28713],{"class":207},[92,28734,28716],{"class":151},[92,28736,28737],{"class":207}," ros-noetic-focal:latest",[92,28739,28722],{"class":207},[92,28741,28742],{"class":94,"line":1173},[92,28743,2379],{"emptyLinePlaceholder":17},[92,28745,28746,28748,28750,28752,28755],{"class":94,"line":1179},[92,28747,26534],{"class":1942},[92,28749,28713],{"class":207},[92,28751,28716],{"class":151},[92,28753,28754],{"class":207}," ros-humble-jammy:latest",[92,28756,28722],{"class":207},[92,28758,28759],{"class":94,"line":1193},[92,28760,2379],{"emptyLinePlaceholder":17},[92,28762,28763,28765,28767,28769,28772],{"class":94,"line":1199},[92,28764,26534],{"class":1942},[92,28766,28713],{"class":207},[92,28768,28716],{"class":151},[92,28770,28771],{"class":207}," ros-jazzy-noble:latest",[92,28773,28722],{"class":207},[92,28775,28776],{"class":94,"line":1290},[92,28777,2379],{"emptyLinePlaceholder":17},[92,28779,28780,28782,28784,28786,28789],{"class":94,"line":1296},[92,28781,26534],{"class":1942},[92,28783,28713],{"class":207},[92,28785,28716],{"class":151},[92,28787,28788],{"class":207}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[92,28790,28722],{"class":207},[92,28792,28793],{"class":94,"line":1308},[92,28794,2379],{"emptyLinePlaceholder":17},[92,28796,28797,28799,28801,28803,28806],{"class":94,"line":1591},[92,28798,26534],{"class":1942},[92,28800,28713],{"class":207},[92,28802,28716],{"class":151},[92,28804,28805],{"class":207}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[92,28807,28722],{"class":207},[38,28809,28810],{},[1441,28811],{"alt":10,"src":28812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[38,28814,28815],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[38,28817,28818],{},[1441,28819],{"alt":10,"src":28820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[38,28822,28823],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[46,28825,28826],{},[49,28827,28828],{},"创建 Docker Hub 账户",[38,28830,28831],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[46,28833,28834],{"start":11},[49,28835,28836],{},"登录 Docker Hub",[38,28838,28839],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[83,28841,28843],{"className":23802,"code":28842,"language":23804,"meta":10,"style":10},"docker login\n",[89,28844,28845],{"__ignoreMap":10},[92,28846,28847,28849],{"class":94,"line":95},[92,28848,26534],{"class":1942},[92,28850,28851],{"class":207}," login\n",[38,28853,28854],{},"输入你的 Docker Hub 用户名和密码进行验证。",[46,28856,28857],{},[49,28858,28859],{},"为你的镜像打标签",[38,28861,28862,28863,28866],{},"Docker Hub 使用 ",[89,28864,28865],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[83,28868,28870],{"className":23802,"code":28869,"language":23804,"meta":10,"style":10},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[89,28871,28872],{"__ignoreMap":10},[92,28873,28874,28876,28879,28881,28884,28887,28890,28892],{"class":94,"line":95},[92,28875,26534],{"class":1942},[92,28877,28878],{"class":207}," tag",[92,28880,28771],{"class":207},[92,28882,28883],{"class":98}," \u003C",[92,28885,28886],{"class":207},"你的用户",[92,28888,28889],{"class":102},"名",[92,28891,1063],{"class":98},[92,28893,28894],{"class":207},"\u002Fros-jazzy-noble:latest\n",[38,28896,28897,28898,28901],{},"例如，如果你的 Docker Hub 用户名是 ",[89,28899,28900],{},"tungchiahui","，你应该执行：",[83,28903,28905],{"className":23802,"code":28904,"language":23804,"meta":10,"style":10},"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",[89,28906,28907,28918,28922,28933,28937,28948,28952,28963,28967],{"__ignoreMap":10},[92,28908,28909,28911,28913,28915],{"class":94,"line":95},[92,28910,26534],{"class":1942},[92,28912,28878],{"class":207},[92,28914,28737],{"class":207},[92,28916,28917],{"class":207}," tungchiahui\u002Fros-noetic-focal:latest\n",[92,28919,28920],{"class":94,"line":11},[92,28921,2379],{"emptyLinePlaceholder":17},[92,28923,28924,28926,28928,28930],{"class":94,"line":1158},[92,28925,26534],{"class":1942},[92,28927,28878],{"class":207},[92,28929,28754],{"class":207},[92,28931,28932],{"class":207}," tungchiahui\u002Fros-humble-jammy:latest\n",[92,28934,28935],{"class":94,"line":1173},[92,28936,2379],{"emptyLinePlaceholder":17},[92,28938,28939,28941,28943,28945],{"class":94,"line":1179},[92,28940,26534],{"class":1942},[92,28942,28878],{"class":207},[92,28944,28771],{"class":207},[92,28946,28947],{"class":207}," tungchiahui\u002Fros-jazzy-noble:latest\n",[92,28949,28950],{"class":94,"line":1193},[92,28951,2379],{"emptyLinePlaceholder":17},[92,28953,28954,28956,28958,28960],{"class":94,"line":1199},[92,28955,26534],{"class":1942},[92,28957,28878],{"class":207},[92,28959,28788],{"class":207},[92,28961,28962],{"class":207}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[92,28964,28965],{"class":94,"line":1290},[92,28966,2379],{"emptyLinePlaceholder":17},[92,28968,28969,28971,28973,28975],{"class":94,"line":1296},[92,28970,26534],{"class":1942},[92,28972,28878],{"class":207},[92,28974,28805],{"class":207},[92,28976,28977],{"class":207}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[46,28979,28980],{"start":11},[49,28981,28982],{},"推送镜像到 Docker Hub",[38,28984,28985],{},"使用以下命令将镜像推送到 Docker Hub：",[83,28987,28989],{"className":23802,"code":28988,"language":23804,"meta":10,"style":10},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[89,28990,28991],{"__ignoreMap":10},[92,28992,28993,28995,28998,29000,29002,29004,29006],{"class":94,"line":95},[92,28994,26534],{"class":1942},[92,28996,28997],{"class":207}," push",[92,28999,28883],{"class":98},[92,29001,28886],{"class":207},[92,29003,28889],{"class":102},[92,29005,1063],{"class":98},[92,29007,29008],{"class":207},"\u002Fros-noetic-jazzy-noble:latest\n",[38,29010,14613],{},[83,29012,29014],{"className":23802,"code":29013,"language":23804,"meta":10,"style":10},"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",[89,29015,29016,29024,29028,29036,29040,29048,29052,29061,29065,29073,29077],{"__ignoreMap":10},[92,29017,29018,29020,29022],{"class":94,"line":95},[92,29019,26534],{"class":1942},[92,29021,28997],{"class":207},[92,29023,28917],{"class":207},[92,29025,29026],{"class":94,"line":11},[92,29027,2379],{"emptyLinePlaceholder":17},[92,29029,29030,29032,29034],{"class":94,"line":1158},[92,29031,26534],{"class":1942},[92,29033,28997],{"class":207},[92,29035,28932],{"class":207},[92,29037,29038],{"class":94,"line":1173},[92,29039,2379],{"emptyLinePlaceholder":17},[92,29041,29042,29044,29046],{"class":94,"line":1179},[92,29043,26534],{"class":1942},[92,29045,28997],{"class":207},[92,29047,28947],{"class":207},[92,29049,29050],{"class":94,"line":1193},[92,29051,2379],{"emptyLinePlaceholder":17},[92,29053,29054,29056,29058],{"class":94,"line":1199},[92,29055,26534],{"class":1942},[92,29057,28997],{"class":207},[92,29059,29060],{"class":207}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[92,29062,29063],{"class":94,"line":1290},[92,29064,2379],{"emptyLinePlaceholder":17},[92,29066,29067,29069,29071],{"class":94,"line":1296},[92,29068,26534],{"class":1942},[92,29070,28997],{"class":207},[92,29072,28977],{"class":207},[92,29074,29075],{"class":94,"line":1308},[92,29076,2379],{"emptyLinePlaceholder":17},[92,29078,29079,29081,29083],{"class":94,"line":1591},[92,29080,26534],{"class":1942},[92,29082,28997],{"class":207},[92,29084,29085],{"class":207}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[46,29087,29088],{"start":1158},[49,29089,29090],{},"验证推送成功",[38,29092,29093],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[38,29095,29096],{},[252,29097,3763],{},[1110,29099,29100,29103],{},[49,29101,29102],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[49,29104,29105],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[38,29107,29108],{},[1441,29109],{"alt":10,"src":29110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[38,29112,29113],{},[1441,29114],{"alt":10,"src":29115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21978,29117,29119],{"id":29118},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[38,29121,29122,29123,29126,29127,29130],{},"如果您想在 ",[252,29124,29125],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[252,29128,29129],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[38,29132,29133,29134],{},"1. ",[252,29135,29136],{},"启用 Docker 跨平台构建",[38,29138,29139],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[38,29141,29142],{},"第一步：启用 buildx（只需执行一次）",[83,29144,29146],{"className":23802,"code":29145,"language":23804,"meta":10,"style":10},"docker buildx create --name multiarch_builder --use\n",[89,29147,29148],{"__ignoreMap":10},[92,29149,29150,29152,29155,29158,29161,29164],{"class":94,"line":95},[92,29151,26534],{"class":1942},[92,29153,29154],{"class":207}," buildx",[92,29156,29157],{"class":207}," create",[92,29159,29160],{"class":151}," --name",[92,29162,29163],{"class":207}," multiarch_builder",[92,29165,29166],{"class":151}," --use\n",[38,29168,29169],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[38,29171,29172],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[83,29174,29176],{"className":23802,"code":29175,"language":23804,"meta":10,"style":10},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[89,29177,29178],{"__ignoreMap":10},[92,29179,29180,29182,29184,29186,29189,29192,29195,29198],{"class":94,"line":95},[92,29181,26534],{"class":1942},[92,29183,27211],{"class":207},[92,29185,27214],{"class":151},[92,29187,29188],{"class":151}," --privileged",[92,29190,29191],{"class":207}," multiarch\u002Fqemu-user-static",[92,29193,29194],{"class":151}," --reset",[92,29196,29197],{"class":151}," -p",[92,29199,29200],{"class":207}," yes\n",[38,29202,29203],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[38,29205,29206],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[83,29208,29210],{"className":23802,"code":29209,"language":23804,"meta":10,"style":10},"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",[89,29211,29212,29254,29258,29263,29273,29283,29292,29298,29302,29306,29316,29324,29333,29339,29343,29347,29357,29365,29374,29380,29384,29388,29398,29406,29415,29421,29425,29429,29439,29447,29456,29462,29466,29470,29480,29488,29497,29503,29507,29511,29521,29529,29538,29544,29548,29552,29562,29570,29579,29585,29589,29593,29603,29611,29620,29626,29630,29634,29645,29653,29662,29668],{"__ignoreMap":10},[92,29213,29214,29216,29218,29220,29223,29226,29228,29230,29233,29235,29237,29239,29241,29244,29247,29249,29252],{"class":94,"line":95},[92,29215,26534],{"class":1942},[92,29217,29154],{"class":207},[92,29219,28713],{"class":207},[92,29221,29222],{"class":151}," --platform",[92,29224,29225],{"class":207}," linux\u002Famd64,linux\u002Farm64",[92,29227,28716],{"class":151},[92,29229,28883],{"class":98},[92,29231,29232],{"class":207},"你的镜像",[92,29234,28889],{"class":102},[92,29236,1063],{"class":98},[92,29238,962],{"class":207},[92,29240,1013],{"class":98},[92,29242,29243],{"class":207},"标",[92,29245,29246],{"class":102},"签",[92,29248,1063],{"class":98},[92,29250,29251],{"class":151}," --push",[92,29253,28722],{"class":207},[92,29255,29256],{"class":94,"line":11},[92,29257,2379],{"emptyLinePlaceholder":17},[92,29259,29260],{"class":94,"line":1158},[92,29261,29262],{"class":161},"# 例子：\n",[92,29264,29265,29267,29269,29271],{"class":94,"line":1173},[92,29266,26534],{"class":1942},[92,29268,29154],{"class":207},[92,29270,28713],{"class":207},[92,29272,24659],{"class":151},[92,29274,29275,29278,29281],{"class":94,"line":1179},[92,29276,29277],{"class":102},"--platform ",[92,29279,29280],{"class":207},"linux\u002Famd64,linux\u002Farm64",[92,29282,24659],{"class":151},[92,29284,29285,29287,29290],{"class":94,"line":1193},[92,29286,28716],{"class":151},[92,29288,29289],{"class":207}," tungchiahui\u002Fros:noetic-focal",[92,29291,24659],{"class":151},[92,29293,29294,29296],{"class":94,"line":1199},[92,29295,29251],{"class":151},[92,29297,24659],{"class":151},[92,29299,29300],{"class":94,"line":1290},[92,29301,28722],{"class":207},[92,29303,29304],{"class":94,"line":1296},[92,29305,2379],{"emptyLinePlaceholder":17},[92,29307,29308,29310,29312,29314],{"class":94,"line":1308},[92,29309,26534],{"class":1942},[92,29311,29154],{"class":207},[92,29313,28713],{"class":207},[92,29315,24659],{"class":151},[92,29317,29318,29320,29322],{"class":94,"line":1591},[92,29319,29277],{"class":102},[92,29321,29280],{"class":207},[92,29323,24659],{"class":151},[92,29325,29326,29328,29331],{"class":94,"line":1596},[92,29327,28716],{"class":151},[92,29329,29330],{"class":207}," tungchiahui\u002Fros:humble-jammy",[92,29332,24659],{"class":151},[92,29334,29335,29337],{"class":94,"line":1602},[92,29336,29251],{"class":151},[92,29338,24659],{"class":151},[92,29340,29341],{"class":94,"line":1607},[92,29342,28722],{"class":207},[92,29344,29345],{"class":94,"line":1621},[92,29346,2379],{"emptyLinePlaceholder":17},[92,29348,29349,29351,29353,29355],{"class":94,"line":1626},[92,29350,26534],{"class":1942},[92,29352,29154],{"class":207},[92,29354,28713],{"class":207},[92,29356,24659],{"class":151},[92,29358,29359,29361,29363],{"class":94,"line":1632},[92,29360,29277],{"class":102},[92,29362,29280],{"class":207},[92,29364,24659],{"class":151},[92,29366,29367,29369,29372],{"class":94,"line":1653},[92,29368,28716],{"class":151},[92,29370,29371],{"class":207}," tungchiahui\u002Fros:jazzy-noble",[92,29373,24659],{"class":151},[92,29375,29376,29378],{"class":94,"line":1658},[92,29377,29251],{"class":151},[92,29379,24659],{"class":151},[92,29381,29382],{"class":94,"line":1672},[92,29383,28722],{"class":207},[92,29385,29386],{"class":94,"line":1677},[92,29387,2379],{"emptyLinePlaceholder":17},[92,29389,29390,29392,29394,29396],{"class":94,"line":1706},[92,29391,26301],{"class":1942},[92,29393,29154],{"class":207},[92,29395,28713],{"class":207},[92,29397,24659],{"class":151},[92,29399,29400,29402,29404],{"class":94,"line":1711},[92,29401,29277],{"class":102},[92,29403,29280],{"class":207},[92,29405,24659],{"class":151},[92,29407,29408,29410,29413],{"class":94,"line":1728},[92,29409,28716],{"class":151},[92,29411,29412],{"class":207}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[92,29414,24659],{"class":151},[92,29416,29417,29419],{"class":94,"line":1733},[92,29418,29251],{"class":151},[92,29420,24659],{"class":151},[92,29422,29423],{"class":94,"line":1738},[92,29424,28722],{"class":207},[92,29426,29427],{"class":94,"line":1743},[92,29428,2379],{"emptyLinePlaceholder":17},[92,29430,29431,29433,29435,29437],{"class":94,"line":1757},[92,29432,26534],{"class":1942},[92,29434,29154],{"class":207},[92,29436,28713],{"class":207},[92,29438,24659],{"class":151},[92,29440,29441,29443,29445],{"class":94,"line":1762},[92,29442,29277],{"class":102},[92,29444,29280],{"class":207},[92,29446,24659],{"class":151},[92,29448,29449,29451,29454],{"class":94,"line":2556},[92,29450,28716],{"class":151},[92,29452,29453],{"class":207}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[92,29455,24659],{"class":151},[92,29457,29458,29460],{"class":94,"line":2570},[92,29459,29251],{"class":151},[92,29461,24659],{"class":151},[92,29463,29464],{"class":94,"line":2578},[92,29465,28722],{"class":207},[92,29467,29468],{"class":94,"line":2583},[92,29469,2379],{"emptyLinePlaceholder":17},[92,29471,29472,29474,29476,29478],{"class":94,"line":2589},[92,29473,26301],{"class":1942},[92,29475,29154],{"class":207},[92,29477,28713],{"class":207},[92,29479,24659],{"class":151},[92,29481,29482,29484,29486],{"class":94,"line":2595},[92,29483,29277],{"class":102},[92,29485,29280],{"class":207},[92,29487,24659],{"class":151},[92,29489,29490,29492,29495],{"class":94,"line":2600},[92,29491,28716],{"class":151},[92,29493,29494],{"class":207}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[92,29496,24659],{"class":151},[92,29498,29499,29501],{"class":94,"line":7928},[92,29500,29251],{"class":151},[92,29502,24659],{"class":151},[92,29504,29505],{"class":94,"line":7952},[92,29506,28722],{"class":207},[92,29508,29509],{"class":94,"line":7957},[92,29510,2379],{"emptyLinePlaceholder":17},[92,29512,29513,29515,29517,29519],{"class":94,"line":7963},[92,29514,26534],{"class":1942},[92,29516,29154],{"class":207},[92,29518,28713],{"class":207},[92,29520,24659],{"class":151},[92,29522,29523,29525,29527],{"class":94,"line":7990},[92,29524,29277],{"class":102},[92,29526,29280],{"class":207},[92,29528,24659],{"class":151},[92,29530,29531,29533,29536],{"class":94,"line":7995},[92,29532,28716],{"class":151},[92,29534,29535],{"class":207}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[92,29537,24659],{"class":151},[92,29539,29540,29542],{"class":94,"line":8001},[92,29541,29251],{"class":151},[92,29543,24659],{"class":151},[92,29545,29546],{"class":94,"line":8013},[92,29547,28722],{"class":207},[92,29549,29550],{"class":94,"line":8025},[92,29551,2379],{"emptyLinePlaceholder":17},[92,29553,29554,29556,29558,29560],{"class":94,"line":8037},[92,29555,26534],{"class":1942},[92,29557,29154],{"class":207},[92,29559,28713],{"class":207},[92,29561,24659],{"class":151},[92,29563,29564,29566,29568],{"class":94,"line":9696},[92,29565,29277],{"class":102},[92,29567,29280],{"class":207},[92,29569,24659],{"class":151},[92,29571,29572,29574,29577],{"class":94,"line":9721},[92,29573,28716],{"class":151},[92,29575,29576],{"class":207}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[92,29578,24659],{"class":151},[92,29580,29581,29583],{"class":94,"line":9744},[92,29582,29251],{"class":151},[92,29584,24659],{"class":151},[92,29586,29587],{"class":94,"line":9768},[92,29588,28722],{"class":207},[92,29590,29591],{"class":94,"line":9773},[92,29592,2379],{"emptyLinePlaceholder":17},[92,29594,29595,29597,29599,29601],{"class":94,"line":9778},[92,29596,26301],{"class":1942},[92,29598,29154],{"class":207},[92,29600,28713],{"class":207},[92,29602,24659],{"class":151},[92,29604,29605,29607,29609],{"class":94,"line":9783},[92,29606,29277],{"class":102},[92,29608,29280],{"class":207},[92,29610,24659],{"class":151},[92,29612,29613,29615,29618],{"class":94,"line":9792},[92,29614,28716],{"class":151},[92,29616,29617],{"class":207}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[92,29619,24659],{"class":151},[92,29621,29622,29624],{"class":94,"line":9797},[92,29623,29251],{"class":151},[92,29625,24659],{"class":151},[92,29627,29628],{"class":94,"line":9803},[92,29629,28722],{"class":207},[92,29631,29632],{"class":94,"line":9824},[92,29633,2379],{"emptyLinePlaceholder":17},[92,29635,29636,29639,29641,29643],{"class":94,"line":9830},[92,29637,29638],{"class":1942},"  docker",[92,29640,29154],{"class":207},[92,29642,28713],{"class":207},[92,29644,24659],{"class":151},[92,29646,29647,29649,29651],{"class":94,"line":9844},[92,29648,29277],{"class":102},[92,29650,29280],{"class":207},[92,29652,24659],{"class":151},[92,29654,29655,29657,29660],{"class":94,"line":9850},[92,29656,28716],{"class":151},[92,29658,29659],{"class":207}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[92,29661,24659],{"class":151},[92,29663,29664,29666],{"class":94,"line":9877},[92,29665,29251],{"class":151},[92,29667,24659],{"class":151},[92,29669,29670],{"class":94,"line":9886},[92,29671,28722],{"class":207},[38,29673,29674],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[38,29676,29677],{},[1441,29678],{"alt":10,"src":29679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[38,29681,29682],{},[1441,29683],{"alt":10,"src":29684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21978,29686,29688],{"id":29687},"_623清除构建缓存","6.2.3.清除构建缓存",[83,29690,29692],{"className":23802,"code":29691,"language":23804,"meta":10,"style":10},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[89,29693,29694,29699],{"__ignoreMap":10},[92,29695,29696],{"class":94,"line":95},[92,29697,29698],{"class":161},"# 清理BuildKit构建缓存\n",[92,29700,29701,29703,29706,29709],{"class":94,"line":11},[92,29702,26534],{"class":1942},[92,29704,29705],{"class":207}," builder",[92,29707,29708],{"class":207}," prune",[92,29710,29711],{"class":151}," -f\n",[38,29713,29714],{},[1441,29715],{"alt":10,"src":29716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[63,29718,29720],{"id":29719},"_63补充","6.3.补充",[21978,29722,29724],{"id":29723},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[38,29726,29727],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[38,29729,29730],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[38,29732,29733],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[83,29735,29737],{"className":23802,"code":29736,"language":23804,"meta":10,"style":10},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[89,29738,29739,29746],{"__ignoreMap":10},[92,29740,29741,29743],{"class":94,"line":95},[92,29742,27351],{"class":1942},[92,29744,29745],{"class":207}," nginx\n",[92,29747,29748,29750,29753,29756,29758],{"class":94,"line":11},[92,29749,28536],{"class":1942},[92,29751,29752],{"class":207}," echo",[92,29754,29755],{"class":207}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[92,29757,26203],{"class":98},[92,29759,29760],{"class":207}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[38,29762,29763],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[38,29765,29766],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[83,29768,29770],{"className":23802,"code":29769,"language":23804,"meta":10,"style":10},"docker build -t nginx:tuling .\n",[89,29771,29772],{"__ignoreMap":10},[92,29773,29774,29776,29778,29780,29783],{"class":94,"line":95},[92,29775,26534],{"class":1942},[92,29777,28713],{"class":207},[92,29779,28716],{"class":151},[92,29781,29782],{"class":207}," nginx:tuling",[92,29784,28722],{"class":207},[38,29786,29787],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[38,29789,29790],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[83,29792,29794],{"className":23802,"code":29793,"language":23804,"meta":10,"style":10},"docker run -d -p 92:80 nginx:tuling\n",[89,29795,29796],{"__ignoreMap":10},[92,29797,29798,29800,29802,29805,29807,29810],{"class":94,"line":95},[92,29799,26534],{"class":1942},[92,29801,27211],{"class":207},[92,29803,29804],{"class":151}," -d",[92,29806,29197],{"class":151},[92,29808,29809],{"class":207}," 92:80",[92,29811,29812],{"class":207}," nginx:tuling\n",[38,29814,29815,29816],{},"4、访问 ",[341,29817,29820],{"href":29818,"rel":29819},"http:\u002F\u002FDocker%E5%AE%BF%E4%B8%BB%E6%9C%BAIP:92\u002F%EF%BC%8C%E5%8F%AF%E7%9C%8B%E5%88%B0%E4%B8%8B%E5%9B%BE%E6%89%80%E7%A4%BA%E7%95%8C%E9%9D%A2",[23845],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[38,29822,29823],{},[1441,29824],{"alt":10,"src":29825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[38,29827,29828],{},[1441,29829],{"alt":10,"src":29830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21978,29832,29834],{"id":29833},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[38,29836,29837],{},"只需要知道大体流程即可",[38,29839,29840],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[38,29842,29843],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[38,29845,29846],{},"2、在Dockerfile中添加以下内容",[83,29848,29850],{"className":26072,"code":29849,"language":26074,"meta":10,"style":10},"# 基于哪个镜像\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",[89,29851,29852,29857,29862,29867,29872,29877,29882,29887],{"__ignoreMap":10},[92,29853,29854],{"class":94,"line":95},[92,29855,29856],{},"# 基于哪个镜像\n",[92,29858,29859],{"class":94,"line":11},[92,29860,29861],{},"From java:8\n",[92,29863,29864],{"class":94,"line":1158},[92,29865,29866],{},"# 复制文件到容器\n",[92,29868,29869],{"class":94,"line":1173},[92,29870,29871],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[92,29873,29874],{"class":94,"line":1179},[92,29875,29876],{},"# 声明需要暴露的端口\n",[92,29878,29879],{"class":94,"line":1193},[92,29880,29881],{},"EXPOSE 8877\n",[92,29883,29884],{"class":94,"line":1199},[92,29885,29886],{},"# 配置容器启动后执行的命令\n",[92,29888,29889],{"class":94,"line":1290},[92,29890,29891],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[38,29893,29894],{},"3、使用docker build命令构建镜像",[83,29896,29898],{"className":23802,"code":29897,"language":23804,"meta":10,"style":10},"docker build -t tulingmall-member:0.0.5 .\n",[89,29899,29900],{"__ignoreMap":10},[92,29901,29902,29904,29906,29908,29911],{"class":94,"line":95},[92,29903,26534],{"class":1942},[92,29905,28713],{"class":207},[92,29907,28716],{"class":151},[92,29909,29910],{"class":207}," tulingmall-member:0.0.5",[92,29912,28722],{"class":207},[38,29914,29915],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[38,29917,29918],{},[1441,29919],{"alt":10,"src":29920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[38,29922,29923],{},"4、启动镜像，加-d可在后台启动",[83,29925,29927],{"className":23802,"code":29926,"language":23804,"meta":10,"style":10},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[89,29928,29929],{"__ignoreMap":10},[92,29930,29931,29933,29935,29937,29939,29942],{"class":94,"line":95},[92,29932,26534],{"class":1942},[92,29934,27211],{"class":207},[92,29936,29804],{"class":151},[92,29938,29197],{"class":151},[92,29940,29941],{"class":207}," 8877:8877",[92,29943,29944],{"class":207}," tulingmall-member:0.0.5\n",[38,29946,29947],{},"加上JVM参数：",[83,29949,29951],{"className":23802,"code":29950,"language":23804,"meta":10,"style":10},"# --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",[89,29952,29953,29958,29973,29983,29992,29999],{"__ignoreMap":10},[92,29954,29955],{"class":94,"line":95},[92,29956,29957],{"class":161},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[92,29959,29960,29962,29964,29967,29969,29971],{"class":94,"line":11},[92,29961,26534],{"class":1942},[92,29963,27211],{"class":207},[92,29965,29966],{"class":151},"  -d",[92,29968,29197],{"class":151},[92,29970,29941],{"class":207},[92,29972,24659],{"class":151},[92,29974,29975,29977,29980],{"class":94,"line":1158},[92,29976,28109],{"class":102},[92,29978,29979],{"class":207},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[92,29981,29982],{"class":151},"  \\\n",[92,29984,29985,29987,29990],{"class":94,"line":1173},[92,29986,28109],{"class":102},[92,29988,29989],{"class":207},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[92,29991,29982],{"class":151},[92,29993,29994,29997],{"class":94,"line":1179},[92,29995,29996],{"class":102},"--cap-add=SYS_PTRACE  ",[92,29998,26156],{"class":151},[92,30000,30001],{"class":94,"line":1193},[92,30002,30003],{"class":102},"tulingmall-member:0.0.5\n",[38,30005,30006],{},"5、访问会员服务接口",[38,30008,30009],{},[1441,30010],{"alt":10,"src":30011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21978,30013,30015],{"id":30014},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[38,30017,30018],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[38,30020,30021,30022],{},"阿里云docker镜像仓库：",[341,30023,30024],{"href":30024,"rel":30025},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23845],[38,30027,30028],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[38,30030,30031],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[38,30033,30034],{},[1441,30035],{"alt":10,"src":30036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[38,30038,30039],{},"要把镜像推送到镜像仓库",[83,30041,30043],{"className":23802,"code":30042,"language":23804,"meta":10,"style":10},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[89,30044,30045],{"__ignoreMap":10},[92,30046,30047,30049,30051,30053],{"class":94,"line":95},[92,30048,26534],{"class":1942},[92,30050,28878],{"class":207},[92,30052,29910],{"class":207},[92,30054,30055],{"class":207}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[38,30057,30058],{},"最后将镜像推送到远程仓库",[83,30060,30062],{"className":23802,"code":30061,"language":23804,"meta":10,"style":10},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[89,30063,30064],{"__ignoreMap":10},[92,30065,30066,30068,30070],{"class":94,"line":95},[92,30067,26534],{"class":1942},[92,30069,28997],{"class":207},[92,30071,30055],{"class":207},[5106,30073,30074],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":10,"searchDepth":11,"depth":11,"links":30076},[30077,30078,30079],{"id":28464,"depth":1158,"text":28465},{"id":28693,"depth":1158,"text":28694},{"id":29719,"depth":1158,"text":29720},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28456,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30086,"title":30087,"body":30088,"description":10,"extension":14,"meta":30231,"navigation":17,"path":30232,"seo":30233,"stem":30234,"__hash__":30235},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30089,"toc":30229},[30090,30093,30098,30103,30106,30111,30116,30119,30124,30129,30132,30137,30140,30143,30146,30149,30152,30155,30175,30197,30200,30203,30223,30226],[29,30091,30087],{"id":30092},"_7vscode远程开发",[46,30094,30095],{},[49,30096,30097],{},"插件1：微软Docker工具",[38,30099,30100],{},[1441,30101],{"alt":10,"src":30102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[38,30104,30105],{},"docker扩展插件已经进化为container tools了，请安装container tools",[38,30107,30108],{},[1441,30109],{"alt":10,"src":30110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[46,30112,30113],{"start":11},[49,30114,30115],{},"插件2：微软Docker远程开发工具",[38,30117,30118],{},"下面这是远程开发的插件。",[38,30120,30121],{},[1441,30122],{"alt":10,"src":30123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[38,30125,30126],{},[1441,30127],{"alt":10,"src":30128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[38,30130,30131],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[38,30133,30134],{},[1441,30135],{"alt":10,"src":30136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[38,30138,30139],{},"安装完拓展之后，vscode进行链接：",[38,30141,30142],{},"1.按ctrl+shift+p",[38,30144,30145],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[38,30147,30148],{},"3.选择目前运行的容器",[38,30150,30151],{},"4.VS Code 会在新窗口中打开并连接到容器",[38,30153,30154],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[83,30156,30158],{"className":23802,"code":30157,"language":23804,"meta":10,"style":10},"docker run -v 主机目录:容器目录 image-name\n",[89,30159,30160],{"__ignoreMap":10},[92,30161,30162,30164,30166,30169,30172],{"class":94,"line":95},[92,30163,26534],{"class":1942},[92,30165,27211],{"class":207},[92,30167,30168],{"class":151}," -v",[92,30170,30171],{"class":207}," 主机目录:容器目录",[92,30173,30174],{"class":207}," image-name\n",[83,30176,30178],{"className":23802,"code":30177,"language":23804,"meta":10,"style":10},"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",[89,30179,30180],{"__ignoreMap":10},[92,30181,30182,30184,30186,30189,30191,30194],{"class":94,"line":95},[92,30183,26534],{"class":1942},[92,30185,27211],{"class":207},[92,30187,30188],{"class":151}," -it",[92,30190,30168],{"class":151},[92,30192,30193],{"class":207}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[92,30195,30196],{"class":207}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[38,30198,30199],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[38,30201,30202],{},"查看挂载情况：",[83,30204,30206],{"className":23802,"code":30205,"language":23804,"meta":10,"style":10},"mount | grep -i project\n",[89,30207,30208],{"__ignoreMap":10},[92,30209,30210,30213,30215,30218,30220],{"class":94,"line":95},[92,30211,30212],{"class":1942},"mount",[92,30214,25090],{"class":98},[92,30216,30217],{"class":1942}," grep",[92,30219,26411],{"class":151},[92,30221,30222],{"class":207}," project\n",[38,30224,30225],{},"也可以通过ls来进行查看",[5106,30227,30228],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":10,"searchDepth":11,"depth":11,"links":30230},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30087,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30237,"title":30238,"body":30239,"description":13,"extension":14,"meta":30243,"navigation":17,"path":30245,"seo":30246,"stem":30247,"__hash__":30248},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30240,"toc":30241},[],{"title":10,"searchDepth":11,"depth":11,"links":30242},[],{"category":30244},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30238,"description":13},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30250,"title":30251,"body":30252,"description":13,"extension":14,"meta":30256,"navigation":17,"path":30257,"seo":30258,"stem":30259,"__hash__":30260},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30253,"toc":30254},[],{"title":10,"searchDepth":11,"depth":11,"links":30255},[],{"category":30244},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30251,"description":13},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30262,"title":30263,"body":30264,"description":13,"extension":14,"meta":30557,"navigation":17,"path":30558,"seo":30559,"stem":30560,"__hash__":30561},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30265,"toc":30555},[30266,30269,30277,30292,30297,30348,30351,30357,30544,30549,30552],[29,30267,30263],{"id":30268},"_1验证深度学习环境",[38,30270,30271,30272],{},"关于环境的安装，看",[341,30273,30276],{"href":30274,"rel":30275},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23845],"Pytorch-->深度学习",[38,30278,30279,30280,30283,30284,30287,30288,30291],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[89,30281,30282],{},"pytorch-cuda=12.4"," 是一个“ ",[252,30285,30286],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[252,30289,30290],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[38,30293,30294],{},[1441,30295],{"alt":10,"src":30296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-001.png",[83,30298,30300],{"className":23802,"code":30299,"language":23804,"meta":10,"style":10},"# 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",[89,30301,30302,30307],{"__ignoreMap":10},[92,30303,30304],{"class":94,"line":95},[92,30305,30306],{"class":161},"# CUDA 12.4\n",[92,30308,30309,30312,30314,30317,30320,30323,30326,30329,30331,30334,30337,30340,30343,30345],{"class":94,"line":11},[92,30310,30311],{"class":1942},"conda",[92,30313,23814],{"class":207},[92,30315,30316],{"class":207}," pytorch==",[92,30318,30319],{"class":151},"2.5.1",[92,30321,30322],{"class":207}," torchvision==",[92,30324,30325],{"class":151},"0.20.1",[92,30327,30328],{"class":207}," torchaudio==",[92,30330,30319],{"class":151},[92,30332,30333],{"class":207}," pytorch-cuda=",[92,30335,30336],{"class":151},"12.4",[92,30338,30339],{"class":151}," -c",[92,30341,30342],{"class":207}," pytorch",[92,30344,30339],{"class":151},[92,30346,30347],{"class":207}," nvidia\n",[38,30349,30350],{},"）：",[38,30352,30353],{},[341,30354,30355],{"href":30355,"rel":30356},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23845],[83,30358,30362],{"className":30359,"code":30360,"language":30361,"meta":10,"style":10},"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",[89,30363,30364,30369,30377,30382,30392,30408,30413,30423,30460,30467,30479,30495,30500,30510,30522,30532],{"__ignoreMap":10},[92,30365,30366],{"class":94,"line":95},[92,30367,30368],{"class":161},"# 对深度学习环境进行测试\n",[92,30370,30371,30374],{"class":94,"line":11},[92,30372,30373],{"class":98},"import",[92,30375,30376],{"class":102}," torch\n",[92,30378,30379],{"class":94,"line":1158},[92,30380,30381],{"class":161},"# 查看cuda是否被激活\n",[92,30383,30384,30387,30389],{"class":94,"line":1173},[92,30385,30386],{"class":102},"flag",[92,30388,148],{"class":98},[92,30390,30391],{"class":102},"torch.cuda.is_available()\n",[92,30393,30394,30397,30399,30402,30405],{"class":94,"line":1179},[92,30395,30396],{"class":151},"print",[92,30398,103],{"class":102},[92,30400,30401],{"class":207},"\"cuda:\"",[92,30403,30404],{"class":102},", flag)   ",[92,30406,30407],{"class":161},"#返回true的话说明被激活\n",[92,30409,30410],{"class":94,"line":1193},[92,30411,30412],{"class":161},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[92,30414,30415,30418,30420],{"class":94,"line":1199},[92,30416,30417],{"class":102},"ngpu",[92,30419,148],{"class":98},[92,30421,30422],{"class":151},"1\n",[92,30424,30425,30428,30430,30433,30436,30438,30441,30444,30447,30449,30451,30453,30455,30458],{"class":94,"line":1290},[92,30426,30427],{"class":102},"device",[92,30429,148],{"class":98},[92,30431,30432],{"class":102},"torch.device(",[92,30434,30435],{"class":207},"\"cuda:0\"",[92,30437,1683],{"class":98},[92,30439,30440],{"class":102},"(torch.cuda.is_available() ",[92,30442,30443],{"class":98},"and",[92,30445,30446],{"class":102}," ngpu",[92,30448,1063],{"class":98},[92,30450,294],{"class":151},[92,30452,13694],{"class":102},[92,30454,1680],{"class":98},[92,30456,30457],{"class":207}," \"cpu\"",[92,30459,109],{"class":102},[92,30461,30462,30464],{"class":94,"line":1296},[92,30463,30396],{"class":151},[92,30465,30466],{"class":102},"(device)\n",[92,30468,30469,30471,30474,30476],{"class":94,"line":1308},[92,30470,30396],{"class":151},[92,30472,30473],{"class":102},"(torch.cuda.get_device_name(",[92,30475,294],{"class":151},[92,30477,30478],{"class":102},"))\n",[92,30480,30481,30483,30486,30488,30490,30492],{"class":94,"line":1591},[92,30482,30396],{"class":151},[92,30484,30485],{"class":102},"(torch.rand(",[92,30487,174],{"class":151},[92,30489,481],{"class":102},[92,30491,174],{"class":151},[92,30493,30494],{"class":102},").cuda())\n",[92,30496,30497],{"class":94,"line":1596},[92,30498,30499],{"class":161},"# 查看cuda和cudnn的版本\n",[92,30501,30502,30505,30507],{"class":94,"line":1602},[92,30503,30504],{"class":102},"cuda_version",[92,30506,148],{"class":98},[92,30508,30509],{"class":102},"torch.version.cuda\n",[92,30511,30512,30514,30516,30519],{"class":94,"line":1607},[92,30513,30396],{"class":151},[92,30515,103],{"class":102},[92,30517,30518],{"class":207},"\"cuda version\"",[92,30520,30521],{"class":102},",cuda_version)\n",[92,30523,30524,30527,30529],{"class":94,"line":1621},[92,30525,30526],{"class":102},"cudnn_version",[92,30528,148],{"class":98},[92,30530,30531],{"class":102},"torch.backends.cudnn.version()\n",[92,30533,30534,30536,30538,30541],{"class":94,"line":1626},[92,30535,30396],{"class":151},[92,30537,103],{"class":102},[92,30539,30540],{"class":207},"\"cudnn version\"",[92,30542,30543],{"class":102},",cudnn_version)\n",[38,30545,30546],{},[1441,30547],{"alt":10,"src":30548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[38,30550,30551],{},"cuda:0 指的是一块显卡",[5106,30553,30554],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":10,"searchDepth":11,"depth":11,"links":30556},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30263,"description":13},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30563,"title":30564,"body":30565,"description":13,"extension":14,"meta":50369,"navigation":17,"path":50370,"seo":50371,"stem":50372,"__hash__":50373},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30566,"toc":50363},[30567,30570,30574,30578,30581,30586,30591,30594,30599,30604,30609,30612,30616,30621,30625,30630,30633,30638,30641,30644,30647,30650,30655,30658,30663,30668,30673,30678,30681,30685,30688,30693,31297,31302,31305,31310,31313,31316,31780,31783,31786,31789,31792,33843,33846,33851,33856,34651,34654,34659,35437,35441,37100,37104,37818,37822,37826,37831,37836,37841,37844,37849,37854,37859,37864,37869,37873,37878,39160,39165,39168,39171,39174,39329,39332,39335,40551,40556,41251,41255,41259,41264,41269,41272,41277,41282,41287,41292,41297,41302,41307,41312,41317,41322,41327,41332,41337,41342,41347,41352,41357,41362,41367,41372,41377,41382,41387,41392,41397,41402,41407,41412,41417,41422,41426,41430,41433,42911,42915,44562,44566,45260,45264,45267,45270,45814,45817,45821,45824,47221,47225,47228,47806,49593,49597,49600,50360],[29,30568,30564],{"id":30569},"_2经典神经网络",[63,30571,30573],{"id":30572},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21978,30575,30577],{"id":30576},"_211原理介绍","2.1.1.原理介绍",[38,30579,30580],{},"LeNet-5",[46,30582,30583],{},[49,30584,30585],{},"原理",[38,30587,30588],{},[1441,30589],{"alt":10,"src":30590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[38,30592,30593],{},"B是batch批次；C是channel通道",[46,30595,30596],{"start":11},[49,30597,30598],{},"网络参数详细",[38,30600,30601],{},[1441,30602],{"alt":10,"src":30603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[38,30605,30606],{},[1441,30607],{"alt":10,"src":30608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[38,30610,30611],{},"AlexNet",[46,30613,30614],{},[49,30615,30585],{},[38,30617,30618],{},[1441,30619],{"alt":10,"src":30620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-006.png",[46,30622,30623],{"start":11},[49,30624,30598],{},[38,30626,30627],{},[1441,30628],{"alt":10,"src":30629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[38,30631,30632],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[38,30634,30635],{},[1441,30636],{"alt":10,"src":30637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[38,30639,30640],{},"数据处理中的图像增强操作:",[38,30642,30643],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[38,30645,30646],{},"①增加数据量，保证训练数据充足；②防止过拟合",[38,30648,30649],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[38,30651,30652],{},[1441,30653],{"alt":10,"src":30654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[38,30656,30657],{},"提升网络精确度的方法：LRN正则化",[38,30659,30660],{},[1441,30661],{"alt":10,"src":30662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[38,30664,30665],{},[1441,30666],{"alt":10,"src":30667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[46,30669,30670],{"start":1158},[49,30671,30672],{},"AlexNet的总结",[38,30674,30675],{},[1441,30676],{"alt":10,"src":30677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[38,30679,30680],{},"比LeNet模型要深一丢丢",[21978,30682,30684],{"id":30683},"_212代码实现","2.1.2.代码实现",[38,30686,30687],{},"（1）LeNet",[46,30689,30690],{},[49,30691,30692],{},"模型搭建",[83,30694,30696],{"className":30359,"code":30695,"language":30361,"meta":10,"style":10},"# 导入库\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",[89,30697,30698,30703,30709,30714,30727,30732,30744,30748,30768,30773,30778,30789,30794,30813,30817,30822,30871,30883,30888,30917,30952,30979,30984,30996,31001,31021,31040,31059,31063,31068,31078,31095,31106,31121,31132,31143,31158,31173,31184,31191,31195,31209,31214,31237,31242,31247,31252,31256,31261,31266,31276],{"__ignoreMap":10},[92,30699,30700],{"class":94,"line":95},[92,30701,30702],{"class":161},"# 导入库\n",[92,30704,30705,30707],{"class":94,"line":11},[92,30706,30373],{"class":98},[92,30708,30376],{"class":102},[92,30710,30711],{"class":94,"line":1158},[92,30712,30713],{"class":161},"# 导入神经网络层\n",[92,30715,30716,30719,30722,30724],{"class":94,"line":1173},[92,30717,30718],{"class":98},"from",[92,30720,30721],{"class":102}," torch ",[92,30723,30373],{"class":98},[92,30725,30726],{"class":102}," nn\n",[92,30728,30729],{"class":94,"line":1179},[92,30730,30731],{"class":161},"# 导入展示神经网络参数的包\n",[92,30733,30734,30736,30739,30741],{"class":94,"line":1193},[92,30735,30718],{"class":98},[92,30737,30738],{"class":102}," torchsummary ",[92,30740,30373],{"class":98},[92,30742,30743],{"class":102}," summary\n",[92,30745,30746],{"class":94,"line":1199},[92,30747,2379],{"emptyLinePlaceholder":17},[92,30749,30750,30752,30755,30757,30760,30762,30765],{"class":94,"line":1290},[92,30751,14674],{"class":98},[92,30753,30754],{"class":1942}," LeNet",[92,30756,103],{"class":102},[92,30758,30759],{"class":1942},"nn",[92,30761,661],{"class":102},[92,30763,30764],{"class":1942},"Module",[92,30766,30767],{"class":102},"):\n",[92,30769,30770],{"class":94,"line":1296},[92,30771,30772],{"class":161},"    # 模型初始化:\n",[92,30774,30775],{"class":94,"line":1308},[92,30776,30777],{"class":161},"    # 定义一些网络层和激活函数\n",[92,30779,30780,30783,30786],{"class":94,"line":1591},[92,30781,30782],{"class":98},"    def",[92,30784,30785],{"class":151}," __init__",[92,30787,30788],{"class":102},"(self):\n",[92,30790,30791],{"class":94,"line":1596},[92,30792,30793],{"class":161},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[92,30795,30796,30799,30802,30805,30808,30811],{"class":94,"line":1602},[92,30797,30798],{"class":151},"        super",[92,30800,30801],{"class":102},"(LeNet,",[92,30803,30804],{"class":151},"self",[92,30806,30807],{"class":102},").",[92,30809,30810],{"class":151},"__init__",[92,30812,1955],{"class":102},[92,30814,30815],{"class":94,"line":1607},[92,30816,2379],{"emptyLinePlaceholder":17},[92,30818,30819],{"class":94,"line":1621},[92,30820,30821],{"class":161},"        # 定义网络层\n",[92,30823,30824,30827,30830,30832,30835,30838,30840,30842,30844,30847,30849,30851,30853,30856,30858,30860,30862,30865,30867,30869],{"class":94,"line":1626},[92,30825,30826],{"class":151},"        self",[92,30828,30829],{"class":102},".c1",[92,30831,148],{"class":98},[92,30833,30834],{"class":102},"nn.Conv2d(",[92,30836,30837],{"class":5196},"in_channels",[92,30839,148],{"class":98},[92,30841,320],{"class":151},[92,30843,481],{"class":102},[92,30845,30846],{"class":5196},"out_channels",[92,30848,148],{"class":98},[92,30850,447],{"class":151},[92,30852,481],{"class":102},[92,30854,30855],{"class":5196},"kernel_size",[92,30857,148],{"class":98},[92,30859,422],{"class":151},[92,30861,481],{"class":102},[92,30863,30864],{"class":5196},"padding",[92,30866,148],{"class":98},[92,30868,180],{"class":151},[92,30870,109],{"class":102},[92,30872,30873,30875,30878,30880],{"class":94,"line":1632},[92,30874,30826],{"class":151},[92,30876,30877],{"class":102},".sig",[92,30879,148],{"class":98},[92,30881,30882],{"class":102},"nn.Sigmoid()\n",[92,30884,30885],{"class":94,"line":1653},[92,30886,30887],{"class":161},"        # 定义池化\n",[92,30889,30890,30892,30895,30897,30900,30902,30904,30906,30908,30911,30913,30915],{"class":94,"line":1658},[92,30891,30826],{"class":151},[92,30893,30894],{"class":102},".s2",[92,30896,148],{"class":98},[92,30898,30899],{"class":102},"nn.AvgPool2d(",[92,30901,30855],{"class":5196},[92,30903,148],{"class":98},[92,30905,180],{"class":151},[92,30907,481],{"class":102},[92,30909,30910],{"class":5196},"stride",[92,30912,148],{"class":98},[92,30914,180],{"class":151},[92,30916,109],{"class":102},[92,30918,30919,30921,30924,30926,30928,30930,30932,30934,30936,30938,30940,30942,30944,30946,30948,30950],{"class":94,"line":1672},[92,30920,30826],{"class":151},[92,30922,30923],{"class":102},".c3",[92,30925,148],{"class":98},[92,30927,30834],{"class":102},[92,30929,30837],{"class":5196},[92,30931,148],{"class":98},[92,30933,447],{"class":151},[92,30935,481],{"class":102},[92,30937,30846],{"class":5196},[92,30939,148],{"class":98},[92,30941,704],{"class":151},[92,30943,481],{"class":102},[92,30945,30855],{"class":5196},[92,30947,148],{"class":98},[92,30949,422],{"class":151},[92,30951,109],{"class":102},[92,30953,30954,30956,30959,30961,30963,30965,30967,30969,30971,30973,30975,30977],{"class":94,"line":1677},[92,30955,30826],{"class":151},[92,30957,30958],{"class":102},".s4",[92,30960,148],{"class":98},[92,30962,30899],{"class":102},[92,30964,30855],{"class":5196},[92,30966,148],{"class":98},[92,30968,180],{"class":151},[92,30970,481],{"class":102},[92,30972,30910],{"class":5196},[92,30974,148],{"class":98},[92,30976,180],{"class":151},[92,30978,109],{"class":102},[92,30980,30981],{"class":94,"line":1706},[92,30982,30983],{"class":161},"        # 定义平展层\n",[92,30985,30986,30988,30991,30993],{"class":94,"line":1711},[92,30987,30826],{"class":151},[92,30989,30990],{"class":102},".flatten",[92,30992,148],{"class":98},[92,30994,30995],{"class":102},"nn.Flatten()\n",[92,30997,30998],{"class":94,"line":1728},[92,30999,31000],{"class":161},"        # 定义全连接层\n",[92,31002,31003,31005,31008,31010,31013,31015,31017,31019],{"class":94,"line":1733},[92,31004,30826],{"class":151},[92,31006,31007],{"class":102},".f5",[92,31009,148],{"class":98},[92,31011,31012],{"class":102},"nn.Linear(",[92,31014,3966],{"class":151},[92,31016,481],{"class":102},[92,31018,920],{"class":151},[92,31020,109],{"class":102},[92,31022,31023,31025,31028,31030,31032,31034,31036,31038],{"class":94,"line":1738},[92,31024,30826],{"class":151},[92,31026,31027],{"class":102},".f6",[92,31029,148],{"class":98},[92,31031,31012],{"class":102},[92,31033,920],{"class":151},[92,31035,481],{"class":102},[92,31037,814],{"class":151},[92,31039,109],{"class":102},[92,31041,31042,31044,31047,31049,31051,31053,31055,31057],{"class":94,"line":1743},[92,31043,30826],{"class":151},[92,31045,31046],{"class":102},".f7",[92,31048,148],{"class":98},[92,31050,31012],{"class":102},[92,31052,814],{"class":151},[92,31054,481],{"class":102},[92,31056,549],{"class":151},[92,31058,109],{"class":102},[92,31060,31061],{"class":94,"line":1757},[92,31062,2379],{"emptyLinePlaceholder":17},[92,31064,31065],{"class":94,"line":1762},[92,31066,31067],{"class":161},"    # 写工具->写前向传播\n",[92,31069,31070,31072,31075],{"class":94,"line":2556},[92,31071,30782],{"class":98},[92,31073,31074],{"class":1942}," forward",[92,31076,31077],{"class":102},"(self,x):\n",[92,31079,31080,31083,31085,31087,31090,31092],{"class":94,"line":2570},[92,31081,31082],{"class":102},"        x",[92,31084,148],{"class":98},[92,31086,30804],{"class":151},[92,31088,31089],{"class":102},".sig(",[92,31091,30804],{"class":151},[92,31093,31094],{"class":102},".c1(x))\n",[92,31096,31097,31099,31101,31103],{"class":94,"line":2578},[92,31098,31082],{"class":102},[92,31100,148],{"class":98},[92,31102,30804],{"class":151},[92,31104,31105],{"class":102},".s2(x)\n",[92,31107,31108,31110,31112,31114,31116,31118],{"class":94,"line":2583},[92,31109,31082],{"class":102},[92,31111,148],{"class":98},[92,31113,30804],{"class":151},[92,31115,31089],{"class":102},[92,31117,30804],{"class":151},[92,31119,31120],{"class":102},".c3(x))\n",[92,31122,31123,31125,31127,31129],{"class":94,"line":2589},[92,31124,31082],{"class":102},[92,31126,148],{"class":98},[92,31128,30804],{"class":151},[92,31130,31131],{"class":102},".s4(x)\n",[92,31133,31134,31136,31138,31140],{"class":94,"line":2595},[92,31135,31082],{"class":102},[92,31137,148],{"class":98},[92,31139,30804],{"class":151},[92,31141,31142],{"class":102},".flatten(x)\n",[92,31144,31145,31147,31149,31151,31153,31155],{"class":94,"line":2600},[92,31146,31082],{"class":102},[92,31148,148],{"class":98},[92,31150,30804],{"class":151},[92,31152,31089],{"class":102},[92,31154,30804],{"class":151},[92,31156,31157],{"class":102},".f5(x))\n",[92,31159,31160,31162,31164,31166,31168,31170],{"class":94,"line":7928},[92,31161,31082],{"class":102},[92,31163,148],{"class":98},[92,31165,30804],{"class":151},[92,31167,31089],{"class":102},[92,31169,30804],{"class":151},[92,31171,31172],{"class":102},".f6(x))\n",[92,31174,31175,31177,31179,31181],{"class":94,"line":7952},[92,31176,31082],{"class":102},[92,31178,148],{"class":98},[92,31180,30804],{"class":151},[92,31182,31183],{"class":102},".f7(x)\n",[92,31185,31186,31188],{"class":94,"line":7957},[92,31187,14732],{"class":98},[92,31189,31190],{"class":102}," x\n",[92,31192,31193],{"class":94,"line":7963},[92,31194,2379],{"emptyLinePlaceholder":17},[92,31196,31197,31199,31202,31204,31207],{"class":94,"line":7990},[92,31198,1510],{"class":98},[92,31200,31201],{"class":151}," __name__",[92,31203,2928],{"class":98},[92,31205,31206],{"class":207},"\"__main__\"",[92,31208,3718],{"class":102},[92,31210,31211],{"class":94,"line":7995},[92,31212,31213],{"class":161},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[92,31215,31216,31219,31221,31223,31226,31228,31231,31233,31235],{"class":94,"line":8001},[92,31217,31218],{"class":102},"    device",[92,31220,148],{"class":98},[92,31222,30432],{"class":102},[92,31224,31225],{"class":207},"\"cuda\"",[92,31227,1683],{"class":98},[92,31229,31230],{"class":102}," torch.cuda.is_available() ",[92,31232,1680],{"class":98},[92,31234,30457],{"class":207},[92,31236,109],{"class":102},[92,31238,31239],{"class":94,"line":8013},[92,31240,31241],{"class":161},"    # 如果就是想指定用cpu用下方代码:\n",[92,31243,31244],{"class":94,"line":8025},[92,31245,31246],{"class":161},"    # device=\"cpu\"\n",[92,31248,31249],{"class":94,"line":8037},[92,31250,31251],{"class":161},"    # print(device)\n",[92,31253,31254],{"class":94,"line":9696},[92,31255,2379],{"emptyLinePlaceholder":17},[92,31257,31258],{"class":94,"line":9721},[92,31259,31260],{"class":161},"    # 实例化模型\n",[92,31262,31263],{"class":94,"line":9744},[92,31264,31265],{"class":161},"    # 将模型放到设备中去运行\n",[92,31267,31268,31271,31273],{"class":94,"line":9768},[92,31269,31270],{"class":102},"    model",[92,31272,148],{"class":98},[92,31274,31275],{"class":102},"LeNet().to(device)\n",[92,31277,31278,31281,31284,31286,31288,31290,31292,31294],{"class":94,"line":9773},[92,31279,31280],{"class":151},"    print",[92,31282,31283],{"class":102},"(summary(model,(",[92,31285,320],{"class":151},[92,31287,481],{"class":102},[92,31289,1004],{"class":151},[92,31291,481],{"class":102},[92,31293,1004],{"class":151},[92,31295,31296],{"class":102},")))\n",[38,31298,31299],{},[1441,31300],{"alt":10,"src":31301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[38,31303,31304],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[46,31306,31307],{"start":11},[49,31308,31309],{},"训练",[38,31311,31312],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[38,31314,31315],{},"在训练之前可以将数据展示看一下",[83,31317,31319],{"className":30359,"code":31318,"language":30361,"meta":10,"style":10},"# 建立画图的函数，用于展示数据\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",[89,31320,31321,31326,31331,31343,31355,31368,31373,31385,31390,31402,31407,31419,31423,31427,31448,31460,31465,31486,31497,31501,31506,31524,31535,31540,31551,31556,31567,31571,31576,31591,31604,31609,31614,31627,31640,31653,31658,31662,31667,31687,31704,31724,31737,31750,31760,31775],{"__ignoreMap":10},[92,31322,31323],{"class":94,"line":95},[92,31324,31325],{"class":161},"# 建立画图的函数，用于展示数据\n",[92,31327,31328],{"class":94,"line":11},[92,31329,31330],{"class":161},"# torchvision中包含很多内置的数据集\n",[92,31332,31333,31335,31338,31340],{"class":94,"line":1158},[92,31334,30718],{"class":98},[92,31336,31337],{"class":102}," sklearn.externals.array_api_compat.torch ",[92,31339,30373],{"class":98},[92,31341,31342],{"class":102}," squeeze\n",[92,31344,31345,31347,31350,31352],{"class":94,"line":1173},[92,31346,30718],{"class":98},[92,31348,31349],{"class":102}," torchvision.datasets ",[92,31351,30373],{"class":98},[92,31353,31354],{"class":102}," FashionMNIST\n",[92,31356,31357,31359,31362,31365],{"class":94,"line":1179},[92,31358,30373],{"class":98},[92,31360,31361],{"class":102}," numpy ",[92,31363,31364],{"class":98},"as",[92,31366,31367],{"class":102}," np\n",[92,31369,31370],{"class":94,"line":1193},[92,31371,31372],{"class":161},"# 引入处理数据集的包\n",[92,31374,31375,31377,31380,31382],{"class":94,"line":1199},[92,31376,30718],{"class":98},[92,31378,31379],{"class":102}," torchvision ",[92,31381,30373],{"class":98},[92,31383,31384],{"class":102}," transforms\n",[92,31386,31387],{"class":94,"line":1290},[92,31388,31389],{"class":161},"# 从torch库中引入数据处理的包\n",[92,31391,31392,31394,31397,31399],{"class":94,"line":1296},[92,31393,30373],{"class":98},[92,31395,31396],{"class":102}," torch.utils.data ",[92,31398,31364],{"class":98},[92,31400,31401],{"class":102}," Data\n",[92,31403,31404],{"class":94,"line":1308},[92,31405,31406],{"class":161},"# 导入画图的库\n",[92,31408,31409,31411,31414,31416],{"class":94,"line":1591},[92,31410,30373],{"class":98},[92,31412,31413],{"class":102}," matplotlib.pyplot ",[92,31415,31364],{"class":98},[92,31417,31418],{"class":102}," plt\n",[92,31420,31421],{"class":94,"line":1596},[92,31422,2379],{"emptyLinePlaceholder":17},[92,31424,31425],{"class":94,"line":1602},[92,31426,2379],{"emptyLinePlaceholder":17},[92,31428,31429,31432,31434,31437,31440,31442,31445],{"class":94,"line":1607},[92,31430,31431],{"class":102},"train_data",[92,31433,148],{"class":98},[92,31435,31436],{"class":102},"FashionMNIST(",[92,31438,31439],{"class":5196},"root",[92,31441,148],{"class":98},[92,31443,31444],{"class":207},"'.\u002Fdata'",[92,31446,31447],{"class":102},",\n",[92,31449,31450,31453,31455,31458],{"class":94,"line":1621},[92,31451,31452],{"class":5196},"                        train",[92,31454,148],{"class":98},[92,31456,31457],{"class":151},"True",[92,31459,31447],{"class":102},[92,31461,31462],{"class":94,"line":1626},[92,31463,31464],{"class":161},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[92,31466,31467,31470,31472,31475,31478,31480,31483],{"class":94,"line":1632},[92,31468,31469],{"class":5196},"                        transform",[92,31471,148],{"class":98},[92,31473,31474],{"class":102},"transforms.Compose([transforms.Resize(",[92,31476,31477],{"class":5196},"size",[92,31479,148],{"class":98},[92,31481,31482],{"class":151},"224",[92,31484,31485],{"class":102},"),transforms.ToTensor()]),\n",[92,31487,31488,31491,31493,31495],{"class":94,"line":1653},[92,31489,31490],{"class":5196},"                        download",[92,31492,148],{"class":98},[92,31494,31457],{"class":151},[92,31496,109],{"class":102},[92,31498,31499],{"class":94,"line":1658},[92,31500,2379],{"emptyLinePlaceholder":17},[92,31502,31503],{"class":94,"line":1672},[92,31504,31505],{"class":161},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[92,31507,31508,31511,31513,31516,31519,31521],{"class":94,"line":1677},[92,31509,31510],{"class":102},"train_loader",[92,31512,148],{"class":98},[92,31514,31515],{"class":102},"Data.DataLoader(",[92,31517,31518],{"class":5196},"dataset",[92,31520,148],{"class":98},[92,31522,31523],{"class":102},"train_data,\n",[92,31525,31526,31529,31531,31533],{"class":94,"line":1706},[92,31527,31528],{"class":5196},"                             batch_size",[92,31530,148],{"class":98},[92,31532,306],{"class":151},[92,31534,31447],{"class":102},[92,31536,31537],{"class":94,"line":1711},[92,31538,31539],{"class":161},"                             # 数据是否打乱\n",[92,31541,31542,31545,31547,31549],{"class":94,"line":1728},[92,31543,31544],{"class":5196},"                             shuffle",[92,31546,148],{"class":98},[92,31548,31457],{"class":151},[92,31550,31447],{"class":102},[92,31552,31553],{"class":94,"line":1733},[92,31554,31555],{"class":161},"                             # 规定加载数据的进程\n",[92,31557,31558,31561,31563,31565],{"class":94,"line":1738},[92,31559,31560],{"class":5196},"                             num_workers",[92,31562,148],{"class":98},[92,31564,294],{"class":151},[92,31566,109],{"class":102},[92,31568,31569],{"class":94,"line":1743},[92,31570,2379],{"emptyLinePlaceholder":17},[92,31572,31573],{"class":94,"line":1757},[92,31574,31575],{"class":161},"# 获得一个batch的数据\n",[92,31577,31578,31580,31583,31585,31588],{"class":94,"line":1762},[92,31579,3004],{"class":98},[92,31581,31582],{"class":102}," step,(b_x,b_y) ",[92,31584,26024],{"class":98},[92,31586,31587],{"class":151}," enumerate",[92,31589,31590],{"class":102},"(train_loader):\n",[92,31592,31593,31595,31598,31600,31602],{"class":94,"line":2556},[92,31594,3080],{"class":98},[92,31596,31597],{"class":102}," step ",[92,31599,1063],{"class":98},[92,31601,4072],{"class":151},[92,31603,3718],{"class":102},[92,31605,31606],{"class":94,"line":2570},[92,31607,31608],{"class":98},"        break\n",[92,31610,31611],{"class":94,"line":2578},[92,31612,31613],{"class":161},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[92,31615,31616,31619,31621,31624],{"class":94,"line":2583},[92,31617,31618],{"class":102},"batch_x",[92,31620,148],{"class":98},[92,31622,31623],{"class":102},"b_x.squeeze().numpy()  ",[92,31625,31626],{"class":161},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[92,31628,31629,31632,31634,31637],{"class":94,"line":2589},[92,31630,31631],{"class":102},"batch_y",[92,31633,148],{"class":98},[92,31635,31636],{"class":102},"b_y.numpy()   ",[92,31638,31639],{"class":161},"#将张量转换成功numpy数组\n",[92,31641,31642,31645,31647,31650],{"class":94,"line":2595},[92,31643,31644],{"class":102},"class_label",[92,31646,148],{"class":98},[92,31648,31649],{"class":102},"train_data.classes  ",[92,31651,31652],{"class":161},"#训练集标签\n",[92,31654,31655],{"class":94,"line":2600},[92,31656,31657],{"class":161},"# print(class_label)\n",[92,31659,31660],{"class":94,"line":7928},[92,31661,2379],{"emptyLinePlaceholder":17},[92,31663,31664],{"class":94,"line":7952},[92,31665,31666],{"class":161},"# 可视化一个batch的图像\n",[92,31668,31669,31672,31675,31677,31679,31681,31683,31685],{"class":94,"line":7957},[92,31670,31671],{"class":102},"plt.figure(",[92,31673,31674],{"class":5196},"figsize",[92,31676,148],{"class":98},[92,31678,103],{"class":102},[92,31680,601],{"class":151},[92,31682,481],{"class":102},[92,31684,422],{"class":151},[92,31686,30478],{"class":102},[92,31688,31689,31691,31694,31696,31699,31701],{"class":94,"line":7963},[92,31690,3004],{"class":98},[92,31692,31693],{"class":102}," ii ",[92,31695,26024],{"class":98},[92,31697,31698],{"class":102}," np.arange(",[92,31700,7338],{"class":151},[92,31702,31703],{"class":102},"(batch_y)):\n",[92,31705,31706,31709,31711,31713,31715,31718,31720,31722],{"class":94,"line":7990},[92,31707,31708],{"class":102},"    plt.subplot(",[92,31710,396],{"class":151},[92,31712,481],{"class":102},[92,31714,704],{"class":151},[92,31716,31717],{"class":102},",ii ",[92,31719,584],{"class":98},[92,31721,25099],{"class":151},[92,31723,109],{"class":102},[92,31725,31726,31729,31732,31734],{"class":94,"line":7995},[92,31727,31728],{"class":102},"    plt.imshow(batch_x[ii,:,:],",[92,31730,31731],{"class":5196},"cmap",[92,31733,148],{"class":98},[92,31735,31736],{"class":102},"plt.cm.gray)\n",[92,31738,31739,31742,31744,31746,31748],{"class":94,"line":8001},[92,31740,31741],{"class":102},"    plt.title(class_label[batch_y[ii]],",[92,31743,31477],{"class":5196},[92,31745,148],{"class":98},[92,31747,549],{"class":151},[92,31749,109],{"class":102},[92,31751,31752,31755,31758],{"class":94,"line":8013},[92,31753,31754],{"class":102},"    plt.axis(",[92,31756,31757],{"class":207},"\"off\"",[92,31759,109],{"class":102},[92,31761,31762,31765,31768,31770,31773],{"class":94,"line":8025},[92,31763,31764],{"class":102},"    plt.subplots_adjust(",[92,31766,31767],{"class":5196},"wspace",[92,31769,148],{"class":98},[92,31771,31772],{"class":151},"0.05",[92,31774,109],{"class":102},[92,31776,31777],{"class":94,"line":8037},[92,31778,31779],{"class":102},"plt.show()\n",[38,31781,31782],{},"用matplotlib进行展示的过程可以后续再补",[38,31784,31785],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[38,31787,31788],{},"训练次数就是按照批次过整个训练集数据的次数",[38,31790,31791],{},"模型训练：",[83,31793,31795],{"className":30359,"code":31794,"language":30361,"meta":10,"style":10},"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",[89,31796,31797,31804,31811,31815,31827,31833,31844,31854,31864,31874,31884,31889,31901,31911,31915,31919,31924,31935,31948,31959,31976,31987,32026,32042,32054,32065,32070,32081,32097,32108,32119,32130,32137,32141,32146,32151,32155,32160,32170,32191,32195,32199,32204,32209,32214,32234,32238,32243,32253,32257,32262,32271,32276,32281,32286,32296,32300,32304,32309,32314,32324,32329,32339,32344,32353,32358,32367,32372,32381,32385,32390,32400,32404,32408,32413,32428,32456,32471,32475,32480,32485,32494,32499,32508,32513,32522,32527,32536,32541,32550,32555,32564,32569,32582,32587,32597,32602,32612,32618,32624,32630,32636,32647,32653,32673,32679,32690,32696,32702,32708,32714,32720,32726,32732,32752,32758,32774,32780,32794,32800,32815,32821,32830,32836,32845,32851,32857,32866,32872,32883,32889,32908,32914,32925,32931,32951,32967,32973,32987,32993,32999,33010,33016,33022,33032,33038,33049,33055,33065,33070,33076,33125,33172,33177,33183,33202,33208,33228,33234,33240,33250,33255,33261,33277,33322,33328,33334,33340,33351,33357,33363,33369,33387,33401,33410,33419,33428,33437,33443,33449,33457,33462,33468,33479,33485,33505,33511,33517,33523,33540,33546,33552,33558,33564,33570,33597,33621,33627,33633,33639,33650,33661,33667,33684,33707,33730,33736,33741,33750,33760,33766,33771,33777,33790,33796,33807,33818,33837],{"__ignoreMap":10},[92,31798,31799,31801],{"class":94,"line":95},[92,31800,30373],{"class":98},[92,31802,31803],{"class":102}," copy\n",[92,31805,31806,31808],{"class":94,"line":11},[92,31807,30373],{"class":98},[92,31809,31810],{"class":102}," time\n",[92,31812,31813],{"class":94,"line":1158},[92,31814,2379],{"emptyLinePlaceholder":17},[92,31816,31817,31819,31822,31824],{"class":94,"line":1173},[92,31818,30373],{"class":98},[92,31820,31821],{"class":102}," pandas ",[92,31823,31364],{"class":98},[92,31825,31826],{"class":102}," pd\n",[92,31828,31829,31831],{"class":94,"line":1179},[92,31830,30373],{"class":98},[92,31832,30376],{"class":102},[92,31834,31835,31837,31839,31841],{"class":94,"line":1193},[92,31836,30718],{"class":98},[92,31838,31396],{"class":102},[92,31840,30373],{"class":98},[92,31842,31843],{"class":102}," Dataset\n",[92,31845,31846,31848,31850,31852],{"class":94,"line":1199},[92,31847,30718],{"class":98},[92,31849,31349],{"class":102},[92,31851,30373],{"class":98},[92,31853,31354],{"class":102},[92,31855,31856,31858,31860,31862],{"class":94,"line":1290},[92,31857,30718],{"class":98},[92,31859,31379],{"class":102},[92,31861,30373],{"class":98},[92,31863,31384],{"class":102},[92,31865,31866,31868,31870,31872],{"class":94,"line":1296},[92,31867,30373],{"class":98},[92,31869,31396],{"class":102},[92,31871,31364],{"class":98},[92,31873,31401],{"class":102},[92,31875,31876,31878,31880,31882],{"class":94,"line":1308},[92,31877,30373],{"class":98},[92,31879,31413],{"class":102},[92,31881,31364],{"class":98},[92,31883,31418],{"class":102},[92,31885,31886],{"class":94,"line":1591},[92,31887,31888],{"class":161},"# 导入模型\n",[92,31890,31891,31893,31896,31898],{"class":94,"line":1596},[92,31892,30718],{"class":98},[92,31894,31895],{"class":102}," model ",[92,31897,30373],{"class":98},[92,31899,31900],{"class":102}," LeNet\n",[92,31902,31903,31905,31907,31909],{"class":94,"line":1602},[92,31904,30718],{"class":98},[92,31906,30721],{"class":102},[92,31908,30373],{"class":98},[92,31910,30726],{"class":102},[92,31912,31913],{"class":94,"line":1607},[92,31914,2379],{"emptyLinePlaceholder":17},[92,31916,31917],{"class":94,"line":1621},[92,31918,2379],{"emptyLinePlaceholder":17},[92,31920,31921],{"class":94,"line":1626},[92,31922,31923],{"class":161},"# 处理训练集与验证集函数--->划分数据集\n",[92,31925,31926,31929,31932],{"class":94,"line":1632},[92,31927,31928],{"class":98},"def",[92,31930,31931],{"class":1942}," train_val_data_process",[92,31933,31934],{"class":102},"():\n",[92,31936,31937,31940,31942,31944,31946],{"class":94,"line":1653},[92,31938,31939],{"class":102},"    train_data",[92,31941,148],{"class":98},[92,31943,31436],{"class":102},[92,31945,31444],{"class":207},[92,31947,31447],{"class":102},[92,31949,31950,31953,31955,31957],{"class":94,"line":1658},[92,31951,31952],{"class":5196},"                            train",[92,31954,148],{"class":98},[92,31956,31457],{"class":151},[92,31958,31447],{"class":102},[92,31960,31961,31964,31966,31968,31970,31972,31974],{"class":94,"line":1672},[92,31962,31963],{"class":5196},"                            transform",[92,31965,148],{"class":98},[92,31967,31474],{"class":102},[92,31969,31477],{"class":5196},[92,31971,148],{"class":98},[92,31973,1004],{"class":151},[92,31975,31485],{"class":102},[92,31977,31978,31981,31983,31985],{"class":94,"line":1677},[92,31979,31980],{"class":5196},"                            download",[92,31982,148],{"class":98},[92,31984,31457],{"class":151},[92,31986,109],{"class":102},[92,31988,31989,31992,31994,31997,32000,32002,32005,32007,32009,32012,32014,32016,32019,32021,32023],{"class":94,"line":1706},[92,31990,31991],{"class":102},"    train_data,val_data",[92,31993,148],{"class":98},[92,31995,31996],{"class":102},"Data.random_split(train_data,[",[92,31998,31999],{"class":151},"round",[92,32001,103],{"class":102},[92,32003,32004],{"class":151},"0.8",[92,32006,558],{"class":98},[92,32008,7338],{"class":151},[92,32010,32011],{"class":102},"(train_data)),",[92,32013,31999],{"class":151},[92,32015,103],{"class":102},[92,32017,32018],{"class":151},"0.2",[92,32020,558],{"class":98},[92,32022,7338],{"class":151},[92,32024,32025],{"class":102},"(train_data))])\n",[92,32027,32028,32031,32033,32036,32038,32040],{"class":94,"line":1711},[92,32029,32030],{"class":102},"    train_dataloader ",[92,32032,148],{"class":98},[92,32034,32035],{"class":102}," Data.DataLoader(",[92,32037,31518],{"class":5196},[92,32039,148],{"class":98},[92,32041,31523],{"class":102},[92,32043,32044,32047,32049,32052],{"class":94,"line":1728},[92,32045,32046],{"class":5196},"                                       batch_size",[92,32048,148],{"class":98},[92,32050,32051],{"class":151},"128",[92,32053,31447],{"class":102},[92,32055,32056,32059,32061,32063],{"class":94,"line":1733},[92,32057,32058],{"class":5196},"                                       shuffle",[92,32060,148],{"class":98},[92,32062,31457],{"class":151},[92,32064,31447],{"class":102},[92,32066,32067],{"class":94,"line":1738},[92,32068,32069],{"class":161},"                                       # 规定8个进程\n",[92,32071,32072,32075,32077,32079],{"class":94,"line":1743},[92,32073,32074],{"class":5196},"                                       num_workers",[92,32076,148],{"class":98},[92,32078,498],{"class":151},[92,32080,109],{"class":102},[92,32082,32083,32086,32088,32090,32092,32094],{"class":94,"line":1757},[92,32084,32085],{"class":102},"    val_dataloader",[92,32087,148],{"class":98},[92,32089,31515],{"class":102},[92,32091,31518],{"class":5196},[92,32093,148],{"class":98},[92,32095,32096],{"class":102},"val_data,\n",[92,32098,32099,32102,32104,32106],{"class":94,"line":1762},[92,32100,32101],{"class":5196},"                                   batch_size",[92,32103,148],{"class":98},[92,32105,32051],{"class":151},[92,32107,31447],{"class":102},[92,32109,32110,32113,32115,32117],{"class":94,"line":2556},[92,32111,32112],{"class":5196},"                                   shuffle",[92,32114,148],{"class":98},[92,32116,31457],{"class":151},[92,32118,31447],{"class":102},[92,32120,32121,32124,32126,32128],{"class":94,"line":2570},[92,32122,32123],{"class":5196},"                                   num_workers",[92,32125,148],{"class":98},[92,32127,498],{"class":151},[92,32129,109],{"class":102},[92,32131,32132,32134],{"class":94,"line":2578},[92,32133,4069],{"class":98},[92,32135,32136],{"class":102}," train_dataloader,val_dataloader\n",[92,32138,32139],{"class":94,"line":2583},[92,32140,2379],{"emptyLinePlaceholder":17},[92,32142,32143],{"class":94,"line":2589},[92,32144,32145],{"class":161},"# 验证是否出错\n",[92,32147,32148],{"class":94,"line":2595},[92,32149,32150],{"class":161},"# train_val_data_process()\n",[92,32152,32153],{"class":94,"line":2600},[92,32154,2379],{"emptyLinePlaceholder":17},[92,32156,32157],{"class":94,"line":7928},[92,32158,32159],{"class":161},"# 定义模型训练函数\n",[92,32161,32162,32164,32167],{"class":94,"line":7952},[92,32163,31928],{"class":98},[92,32165,32166],{"class":1942}," train_model_process",[92,32168,32169],{"class":102},"(model,train_dataloader,val_dataloader,num_epochs):\n",[92,32171,32172,32174,32176,32178,32180,32182,32184,32186,32189],{"class":94,"line":7957},[92,32173,31218],{"class":102},[92,32175,148],{"class":98},[92,32177,30432],{"class":102},[92,32179,31225],{"class":207},[92,32181,1683],{"class":98},[92,32183,31230],{"class":102},[92,32185,1680],{"class":98},[92,32187,32188],{"class":207}," 'cpu'",[92,32190,109],{"class":102},[92,32192,32193],{"class":94,"line":7963},[92,32194,2379],{"emptyLinePlaceholder":17},[92,32196,32197],{"class":94,"line":7990},[92,32198,2379],{"emptyLinePlaceholder":17},[92,32200,32201],{"class":94,"line":7995},[92,32202,32203],{"class":161},"    # 定义优化器\n",[92,32205,32206],{"class":94,"line":8001},[92,32207,32208],{"class":161},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[92,32210,32211],{"class":94,"line":8013},[92,32212,32213],{"class":161},"    # lr为学习率\n",[92,32215,32216,32219,32221,32224,32227,32229,32232],{"class":94,"line":8025},[92,32217,32218],{"class":102},"    optimizer",[92,32220,148],{"class":98},[92,32222,32223],{"class":102},"torch.optim.Adam(model.parameters(),",[92,32225,32226],{"class":5196},"lr",[92,32228,148],{"class":98},[92,32230,32231],{"class":151},"0.001",[92,32233,109],{"class":102},[92,32235,32236],{"class":94,"line":8037},[92,32237,2379],{"emptyLinePlaceholder":17},[92,32239,32240],{"class":94,"line":9696},[92,32241,32242],{"class":161},"    # 定义损失函数使用交叉熵损失函数\n",[92,32244,32245,32248,32250],{"class":94,"line":9721},[92,32246,32247],{"class":102},"    criterion",[92,32249,148],{"class":98},[92,32251,32252],{"class":102},"nn.CrossEntropyLoss()\n",[92,32254,32255],{"class":94,"line":9744},[92,32256,2379],{"emptyLinePlaceholder":17},[92,32258,32259],{"class":94,"line":9768},[92,32260,32261],{"class":161},"    # 将模型放到GPU中进行训练\n",[92,32263,32264,32266,32268],{"class":94,"line":9773},[92,32265,31270],{"class":102},[92,32267,148],{"class":98},[92,32269,32270],{"class":102},"model.to(device)\n",[92,32272,32273],{"class":94,"line":9778},[92,32274,32275],{"class":161},"    # 复制当前模型的参数\n",[92,32277,32278],{"class":94,"line":9783},[92,32279,32280],{"class":161},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[92,32282,32283],{"class":94,"line":9792},[92,32284,32285],{"class":161},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[92,32287,32288,32291,32293],{"class":94,"line":9797},[92,32289,32290],{"class":102},"    best_model_wts",[92,32292,148],{"class":98},[92,32294,32295],{"class":102},"copy.deepcopy(model.state_dict())\n",[92,32297,32298],{"class":94,"line":9803},[92,32299,2379],{"emptyLinePlaceholder":17},[92,32301,32302],{"class":94,"line":9824},[92,32303,2379],{"emptyLinePlaceholder":17},[92,32305,32306],{"class":94,"line":9830},[92,32307,32308],{"class":161},"    # 初始化参数\n",[92,32310,32311],{"class":94,"line":9844},[92,32312,32313],{"class":161},"    # 最高准确度\n",[92,32315,32316,32319,32321],{"class":94,"line":9850},[92,32317,32318],{"class":102},"    best_acc",[92,32320,148],{"class":98},[92,32322,32323],{"class":151},"0.0\n",[92,32325,32326],{"class":94,"line":9877},[92,32327,32328],{"class":161},"    # 训练集损失列表\n",[92,32330,32331,32334,32336],{"class":94,"line":9886},[92,32332,32333],{"class":102},"    train_loss_all",[92,32335,148],{"class":98},[92,32337,32338],{"class":102},"[]\n",[92,32340,32341],{"class":94,"line":9892},[92,32342,32343],{"class":161},"    # 验证集函数列表\n",[92,32345,32346,32349,32351],{"class":94,"line":9900},[92,32347,32348],{"class":102},"    val_loss_all",[92,32350,148],{"class":98},[92,32352,32338],{"class":102},[92,32354,32355],{"class":94,"line":9905},[92,32356,32357],{"class":161},"    # 训练集准确度列表\n",[92,32359,32360,32363,32365],{"class":94,"line":16584},[92,32361,32362],{"class":102},"    train_acc_all",[92,32364,148],{"class":98},[92,32366,32338],{"class":102},[92,32368,32369],{"class":94,"line":16590},[92,32370,32371],{"class":161},"    # 验证集准确度列表\n",[92,32373,32374,32377,32379],{"class":94,"line":16613},[92,32375,32376],{"class":102},"    val_acc_all",[92,32378,148],{"class":98},[92,32380,32338],{"class":102},[92,32382,32383],{"class":94,"line":16619},[92,32384,2379],{"emptyLinePlaceholder":17},[92,32386,32387],{"class":94,"line":16642},[92,32388,32389],{"class":161},"    # 保存当前时间--->方便看每轮训练的时间\n",[92,32391,32392,32395,32397],{"class":94,"line":16656},[92,32393,32394],{"class":102},"    since",[92,32396,148],{"class":98},[92,32398,32399],{"class":102},"time.time()\n",[92,32401,32402],{"class":94,"line":16676},[92,32403,2379],{"emptyLinePlaceholder":17},[92,32405,32406],{"class":94,"line":16682},[92,32407,2379],{"emptyLinePlaceholder":17},[92,32409,32410],{"class":94,"line":16693},[92,32411,32412],{"class":161},"    # 准备工作完成--->开始训练模型\n",[92,32414,32415,32417,32420,32422,32425],{"class":94,"line":16716},[92,32416,3180],{"class":98},[92,32418,32419],{"class":102}," epoch ",[92,32421,26024],{"class":98},[92,32423,32424],{"class":151}," range",[92,32426,32427],{"class":102},"(num_epochs):\n",[92,32429,32430,32433,32435,32438,32441,32443,32445,32447,32450,32452,32454],{"class":94,"line":16738},[92,32431,32432],{"class":151},"        print",[92,32434,103],{"class":102},[92,32436,32437],{"class":207},"\"Epoch ",[92,32439,32440],{"class":151},"{}",[92,32442,687],{"class":207},[92,32444,32440],{"class":151},[92,32446,354],{"class":207},[92,32448,32449],{"class":102},".format(epoch,num_epochs",[92,32451,635],{"class":98},[92,32453,320],{"class":151},[92,32455,30478],{"class":102},[92,32457,32458,32460,32462,32465,32467,32469],{"class":94,"line":16743},[92,32459,32432],{"class":151},[92,32461,103],{"class":102},[92,32463,32464],{"class":207},"\"-\"",[92,32466,558],{"class":98},[92,32468,549],{"class":151},[92,32470,109],{"class":102},[92,32472,32473],{"class":94,"line":16749},[92,32474,2379],{"emptyLinePlaceholder":17},[92,32476,32477],{"class":94,"line":16763},[92,32478,32479],{"class":161},"        # 初始化参数\n",[92,32481,32482],{"class":94,"line":16776},[92,32483,32484],{"class":161},"        # 训练集损失函数\n",[92,32486,32487,32490,32492],{"class":94,"line":16781},[92,32488,32489],{"class":102},"        train_loss",[92,32491,148],{"class":98},[92,32493,32323],{"class":151},[92,32495,32496],{"class":94,"line":16795},[92,32497,32498],{"class":161},"        # 训练集准确度\n",[92,32500,32501,32504,32506],{"class":94,"line":16800},[92,32502,32503],{"class":102},"        train_corrects",[92,32505,148],{"class":98},[92,32507,3064],{"class":151},[92,32509,32510],{"class":94,"line":16806},[92,32511,32512],{"class":161},"        # 验证集损失函数\n",[92,32514,32515,32518,32520],{"class":94,"line":16811},[92,32516,32517],{"class":102},"        val_loss",[92,32519,148],{"class":98},[92,32521,32323],{"class":151},[92,32523,32524],{"class":94,"line":16825},[92,32525,32526],{"class":161},"        # 验证集准确度\n",[92,32528,32529,32532,32534],{"class":94,"line":16830},[92,32530,32531],{"class":102},"        val_corrects",[92,32533,148],{"class":98},[92,32535,3064],{"class":151},[92,32537,32538],{"class":94,"line":16835},[92,32539,32540],{"class":161},"        # 训练集样本数量\n",[92,32542,32543,32546,32548],{"class":94,"line":16849},[92,32544,32545],{"class":102},"        train_num",[92,32547,148],{"class":98},[92,32549,3064],{"class":151},[92,32551,32552],{"class":94,"line":16861},[92,32553,32554],{"class":161},"        # 验证集样本数量\n",[92,32556,32557,32560,32562],{"class":94,"line":16866},[92,32558,32559],{"class":102},"        val_num",[92,32561,148],{"class":98},[92,32563,3064],{"class":151},[92,32565,32566],{"class":94,"line":16879},[92,32567,32568],{"class":161},"        # 将数据放到设备,并开始训练\n",[92,32570,32571,32573,32575,32577,32579],{"class":94,"line":16884},[92,32572,3382],{"class":98},[92,32574,31582],{"class":102},[92,32576,26024],{"class":98},[92,32578,31587],{"class":151},[92,32580,32581],{"class":102},"(train_dataloader):\n",[92,32583,32584],{"class":94,"line":16889},[92,32585,32586],{"class":161},"            # 将特征放入到训练设备\n",[92,32588,32589,32592,32594],{"class":94,"line":16894},[92,32590,32591],{"class":102},"            b_x",[92,32593,148],{"class":98},[92,32595,32596],{"class":102},"b_x.to(device)\n",[92,32598,32599],{"class":94,"line":16907},[92,32600,32601],{"class":161},"            # 将标签放入到训练设备当中\n",[92,32603,32604,32607,32609],{"class":94,"line":16912},[92,32605,32606],{"class":102},"            b_y",[92,32608,148],{"class":98},[92,32610,32611],{"class":102},"b_y.to(device)\n",[92,32613,32615],{"class":94,"line":32614},98,[92,32616,32617],{"class":161},"            # 设置模型为训练模式\n",[92,32619,32621],{"class":94,"line":32620},99,[92,32622,32623],{"class":102},"            model.train()\n",[92,32625,32627],{"class":94,"line":32626},100,[92,32628,32629],{"class":161},"            # 将数据放到模型当中,开始前向传播\n",[92,32631,32633],{"class":94,"line":32632},101,[92,32634,32635],{"class":161},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[92,32637,32639,32642,32644],{"class":94,"line":32638},102,[92,32640,32641],{"class":102},"            output",[92,32643,148],{"class":98},[92,32645,32646],{"class":102},"model(b_x)\n",[92,32648,32650],{"class":94,"line":32649},103,[92,32651,32652],{"class":161},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[92,32654,32656,32659,32661,32664,32667,32669,32671],{"class":94,"line":32655},104,[92,32657,32658],{"class":102},"            pre_lab",[92,32660,148],{"class":98},[92,32662,32663],{"class":102},"torch.argmax(output,",[92,32665,32666],{"class":5196},"dim",[92,32668,148],{"class":98},[92,32670,320],{"class":151},[92,32672,109],{"class":102},[92,32674,32676],{"class":94,"line":32675},105,[92,32677,32678],{"class":161},"            # 计算每一个batch的损失函数\n",[92,32680,32682,32685,32687],{"class":94,"line":32681},106,[92,32683,32684],{"class":102},"            loss",[92,32686,148],{"class":98},[92,32688,32689],{"class":102},"criterion(output,b_y)\n",[92,32691,32693],{"class":94,"line":32692},107,[92,32694,32695],{"class":161},"            # 将梯度初始化为0\n",[92,32697,32699],{"class":94,"line":32698},108,[92,32700,32701],{"class":102},"            optimizer.zero_grad()\n",[92,32703,32705],{"class":94,"line":32704},109,[92,32706,32707],{"class":161},"            # 梯度置为0后再进行反向传播\n",[92,32709,32711],{"class":94,"line":32710},110,[92,32712,32713],{"class":102},"            loss.backward()\n",[92,32715,32717],{"class":94,"line":32716},111,[92,32718,32719],{"class":161},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[92,32721,32723],{"class":94,"line":32722},112,[92,32724,32725],{"class":102},"            optimizer.step()\n",[92,32727,32729],{"class":94,"line":32728},113,[92,32730,32731],{"class":161},"            # loss.item()指的是batch的平均损失\n",[92,32733,32735,32738,32740,32743,32745,32748,32750],{"class":94,"line":32734},114,[92,32736,32737],{"class":102},"            train_loss",[92,32739,9457],{"class":98},[92,32741,32742],{"class":102},"loss.item()",[92,32744,558],{"class":98},[92,32746,32747],{"class":102},"b_x.size(",[92,32749,294],{"class":151},[92,32751,109],{"class":102},[92,32753,32755],{"class":94,"line":32754},115,[92,32756,32757],{"class":161},"            # 计算每个批次中正确预测的数量\n",[92,32759,32761,32764,32766,32769,32771],{"class":94,"line":32760},116,[92,32762,32763],{"class":102},"            train_corrects",[92,32765,9457],{"class":98},[92,32767,32768],{"class":102},"torch.sum(pre_lab",[92,32770,2928],{"class":98},[92,32772,32773],{"class":102},"b_y.data)\n",[92,32775,32777],{"class":94,"line":32776},117,[92,32778,32779],{"class":161},"            # 计算目前为止一共处理了多少样本\n",[92,32781,32783,32786,32788,32790,32792],{"class":94,"line":32782},118,[92,32784,32785],{"class":102},"            train_num",[92,32787,9457],{"class":98},[92,32789,32747],{"class":102},[92,32791,294],{"class":151},[92,32793,109],{"class":102},[92,32795,32797],{"class":94,"line":32796},119,[92,32798,32799],{"class":161},"        # 验证数据\n",[92,32801,32803,32805,32808,32810,32812],{"class":94,"line":32802},120,[92,32804,3382],{"class":98},[92,32806,32807],{"class":102}," step ,(b_x,b_y) ",[92,32809,26024],{"class":98},[92,32811,31587],{"class":151},[92,32813,32814],{"class":102},"(val_dataloader):\n",[92,32816,32818],{"class":94,"line":32817},121,[92,32819,32820],{"class":161},"            # 将特征放到验证设备当中\n",[92,32822,32824,32826,32828],{"class":94,"line":32823},122,[92,32825,32591],{"class":102},[92,32827,148],{"class":98},[92,32829,32596],{"class":102},[92,32831,32833],{"class":94,"line":32832},123,[92,32834,32835],{"class":161},"            # 将标签放到放到训练设备当中\n",[92,32837,32839,32841,32843],{"class":94,"line":32838},124,[92,32840,32606],{"class":102},[92,32842,148],{"class":98},[92,32844,32611],{"class":102},[92,32846,32848],{"class":94,"line":32847},125,[92,32849,32850],{"class":161},"            # 开启验证模式，设置模型为评估模式\n",[92,32852,32854],{"class":94,"line":32853},126,[92,32855,32856],{"class":102},"            model.eval()\n",[92,32858,32860,32863],{"class":94,"line":32859},127,[92,32861,32862],{"class":98},"            with",[92,32864,32865],{"class":102}," torch.no_grad():\n",[92,32867,32869],{"class":94,"line":32868},128,[92,32870,32871],{"class":161},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[92,32873,32875,32878,32880],{"class":94,"line":32874},129,[92,32876,32877],{"class":102},"                output ",[92,32879,148],{"class":98},[92,32881,32882],{"class":102}," model(b_x)\n",[92,32884,32886],{"class":94,"line":32885},130,[92,32887,32888],{"class":161},"                # 查找每一行中最大值对应的下标\n",[92,32890,32892,32895,32897,32900,32902,32904,32906],{"class":94,"line":32891},131,[92,32893,32894],{"class":102},"                pre_lab ",[92,32896,148],{"class":98},[92,32898,32899],{"class":102}," torch.argmax(output, ",[92,32901,32666],{"class":5196},[92,32903,148],{"class":98},[92,32905,320],{"class":151},[92,32907,109],{"class":102},[92,32909,32911],{"class":94,"line":32910},132,[92,32912,32913],{"class":161},"                # 计算验证集上的当前 batch 损失\n",[92,32915,32917,32920,32922],{"class":94,"line":32916},133,[92,32918,32919],{"class":102},"                val_batch_loss ",[92,32921,148],{"class":98},[92,32923,32924],{"class":102}," criterion(output, b_y)\n",[92,32926,32928],{"class":94,"line":32927},134,[92,32929,32930],{"class":161},"                # 对损失函数进行累加（按样本数加权）\n",[92,32932,32934,32937,32939,32942,32944,32947,32949],{"class":94,"line":32933},135,[92,32935,32936],{"class":102},"                val_loss ",[92,32938,9457],{"class":98},[92,32940,32941],{"class":102}," val_batch_loss.item() ",[92,32943,558],{"class":98},[92,32945,32946],{"class":102}," b_x.size(",[92,32948,294],{"class":151},[92,32950,109],{"class":102},[92,32952,32954,32957,32959,32962,32964],{"class":94,"line":32953},136,[92,32955,32956],{"class":102},"                val_corrects ",[92,32958,9457],{"class":98},[92,32960,32961],{"class":102}," torch.sum(pre_lab ",[92,32963,2928],{"class":98},[92,32965,32966],{"class":102}," b_y.data)\n",[92,32968,32970],{"class":94,"line":32969},137,[92,32971,32972],{"class":161},"                # 当前用于验证的样本数量\n",[92,32974,32976,32979,32981,32983,32985],{"class":94,"line":32975},138,[92,32977,32978],{"class":102},"            val_num ",[92,32980,9457],{"class":98},[92,32982,32946],{"class":102},[92,32984,294],{"class":151},[92,32986,109],{"class":102},[92,32988,32990],{"class":94,"line":32989},139,[92,32991,32992],{"class":161},"        # 计算并保存每一次迭代的loss值和准确率\n",[92,32994,32996],{"class":94,"line":32995},140,[92,32997,32998],{"class":161},"        # 计算并保存训练集的loss值\n",[92,33000,33002,33005,33007],{"class":94,"line":33001},141,[92,33003,33004],{"class":102},"        train_loss_all.append(train_loss",[92,33006,687],{"class":98},[92,33008,33009],{"class":102},"train_num)\n",[92,33011,33013],{"class":94,"line":33012},142,[92,33014,33015],{"class":161},"        # 取双精度\n",[92,33017,33019],{"class":94,"line":33018},143,[92,33020,33021],{"class":161},"        # 计算并保存训练集的准确率\n",[92,33023,33025,33028,33030],{"class":94,"line":33024},144,[92,33026,33027],{"class":102},"        train_acc_all.append(train_corrects.double().item()",[92,33029,687],{"class":98},[92,33031,33009],{"class":102},[92,33033,33035],{"class":94,"line":33034},145,[92,33036,33037],{"class":161},"        # 计算并保存验证集的loss值\n",[92,33039,33041,33044,33046],{"class":94,"line":33040},146,[92,33042,33043],{"class":102},"        val_loss_all.append(val_loss",[92,33045,687],{"class":98},[92,33047,33048],{"class":102},"val_num)\n",[92,33050,33052],{"class":94,"line":33051},147,[92,33053,33054],{"class":161},"        # 计算并保存验证集的准确率\n",[92,33056,33058,33061,33063],{"class":94,"line":33057},148,[92,33059,33060],{"class":102},"        val_acc_all.append(val_corrects.double().item()",[92,33062,687],{"class":98},[92,33064,33048],{"class":102},[92,33066,33068],{"class":94,"line":33067},149,[92,33069,2379],{"emptyLinePlaceholder":17},[92,33071,33073],{"class":94,"line":33072},150,[92,33074,33075],{"class":161},"        # 打印训练一轮的loss值和准确率\n",[92,33077,33079,33081,33083,33085,33087,33090,33092,33095,33097,33100,33102,33104,33106,33108,33111,33113,33115,33118,33120,33122],{"class":94,"line":33078},151,[92,33080,32432],{"class":151},[92,33082,103],{"class":102},[92,33084,3571],{"class":207},[92,33086,32440],{"class":151},[92,33088,33089],{"class":207},"train loss:",[92,33091,999],{"class":151},[92,33093,33094],{"class":98},":.4f",[92,33096,1049],{"class":151},[92,33098,33099],{"class":207}," train acc:",[92,33101,999],{"class":151},[92,33103,33094],{"class":98},[92,33105,1049],{"class":151},[92,33107,3571],{"class":207},[92,33109,33110],{"class":102},".format(epoch,train_loss_all[",[92,33112,635],{"class":98},[92,33114,320],{"class":151},[92,33116,33117],{"class":102},"],train_acc_all[",[92,33119,635],{"class":98},[92,33121,320],{"class":151},[92,33123,33124],{"class":102},"]))\n",[92,33126,33128,33130,33132,33134,33136,33139,33141,33143,33145,33148,33150,33152,33154,33156,33159,33161,33163,33166,33168,33170],{"class":94,"line":33127},152,[92,33129,32432],{"class":151},[92,33131,103],{"class":102},[92,33133,3571],{"class":207},[92,33135,32440],{"class":151},[92,33137,33138],{"class":207},"val loss:",[92,33140,999],{"class":151},[92,33142,33094],{"class":98},[92,33144,1049],{"class":151},[92,33146,33147],{"class":207}," val acc:",[92,33149,999],{"class":151},[92,33151,33094],{"class":98},[92,33153,1049],{"class":151},[92,33155,3571],{"class":207},[92,33157,33158],{"class":102},".format(epoch,val_loss_all[",[92,33160,635],{"class":98},[92,33162,320],{"class":151},[92,33164,33165],{"class":102},"],val_acc_all[",[92,33167,635],{"class":98},[92,33169,320],{"class":151},[92,33171,33124],{"class":102},[92,33173,33175],{"class":94,"line":33174},153,[92,33176,2379],{"emptyLinePlaceholder":17},[92,33178,33180],{"class":94,"line":33179},154,[92,33181,33182],{"class":161},"        # 判断准确度--->保存最优模型\n",[92,33184,33186,33188,33191,33193,33195,33197,33199],{"class":94,"line":33185},155,[92,33187,2476],{"class":98},[92,33189,33190],{"class":102}," val_acc_all[",[92,33192,635],{"class":98},[92,33194,320],{"class":151},[92,33196,1043],{"class":102},[92,33198,1063],{"class":98},[92,33200,33201],{"class":102},"best_acc:\n",[92,33203,33205],{"class":94,"line":33204},156,[92,33206,33207],{"class":161},"            # 保存当前模型准确度\n",[92,33209,33211,33214,33216,33218,33221,33223,33225],{"class":94,"line":33210},157,[92,33212,33213],{"class":102},"            best_acc:",[92,33215,142],{"class":151},[92,33217,148],{"class":98},[92,33219,33220],{"class":102},"val_acc_all[",[92,33222,635],{"class":98},[92,33224,320],{"class":151},[92,33226,33227],{"class":102},"]\n",[92,33229,33231],{"class":94,"line":33230},158,[92,33232,33233],{"class":161},"            # 保存当前的准确度\n",[92,33235,33237],{"class":94,"line":33236},159,[92,33238,33239],{"class":161},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[92,33241,33243,33246,33248],{"class":94,"line":33242},160,[92,33244,33245],{"class":102},"            best_model_wts",[92,33247,148],{"class":98},[92,33249,32295],{"class":102},[92,33251,33253],{"class":94,"line":33252},161,[92,33254,2379],{"emptyLinePlaceholder":17},[92,33256,33258],{"class":94,"line":33257},162,[92,33259,33260],{"class":161},"        # 计算耗时\n",[92,33262,33264,33267,33269,33272,33274],{"class":94,"line":33263},163,[92,33265,33266],{"class":102},"        time_use",[92,33268,148],{"class":98},[92,33270,33271],{"class":102},"time.time()",[92,33273,635],{"class":98},[92,33275,33276],{"class":102},"since\n",[92,33278,33280,33282,33284,33287,33289,33292,33294,33296,33298,33300,33302,33305,33308,33311,33313,33316,33318,33320],{"class":94,"line":33279},164,[92,33281,32432],{"class":151},[92,33283,103],{"class":102},[92,33285,33286],{"class":207},"'训练和验证耗费的时间",[92,33288,999],{"class":151},[92,33290,33291],{"class":98},":.0f",[92,33293,1049],{"class":151},[92,33295,647],{"class":207},[92,33297,999],{"class":151},[92,33299,33291],{"class":98},[92,33301,1049],{"class":151},[92,33303,33304],{"class":207},"s'",[92,33306,33307],{"class":102},".format(time_use",[92,33309,33310],{"class":98},"\u002F\u002F",[92,33312,1010],{"class":151},[92,33314,33315],{"class":102},",time_use",[92,33317,431],{"class":98},[92,33319,1010],{"class":151},[92,33321,30478],{"class":102},[92,33323,33325],{"class":94,"line":33324},165,[92,33326,33327],{"class":161},"    # 选择最优参数\n",[92,33329,33331],{"class":94,"line":33330},166,[92,33332,33333],{"class":161},"    # 加载最高准确率下的模型参数\n",[92,33335,33337],{"class":94,"line":33336},167,[92,33338,33339],{"class":161},"    # model.load_state_dict(best_model_wts)\n",[92,33341,33343,33346,33349],{"class":94,"line":33342},168,[92,33344,33345],{"class":102},"    torch.save(model.state_dict(best_model_wts), ",[92,33347,33348],{"class":207},"'.\u002Fbest_model.pth'",[92,33350,109],{"class":102},[92,33352,33354],{"class":94,"line":33353},169,[92,33355,33356],{"class":161},"    # 或者写成\n",[92,33358,33360],{"class":94,"line":33359},170,[92,33361,33362],{"class":161},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[92,33364,33366],{"class":94,"line":33365},171,[92,33367,33368],{"class":161},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[92,33370,33372,33375,33377,33380,33383,33385],{"class":94,"line":33371},172,[92,33373,33374],{"class":102},"    train_process",[92,33376,148],{"class":98},[92,33378,33379],{"class":102},"pd.DataFrame(",[92,33381,33382],{"class":5196},"data",[92,33384,148],{"class":98},[92,33386,1525],{"class":102},[92,33388,33390,33393,33395,33398],{"class":94,"line":33389},173,[92,33391,33392],{"class":207},"        \"epoch\"",[92,33394,962],{"class":102},[92,33396,33397],{"class":151},"range",[92,33399,33400],{"class":102},"(num_epochs),\n",[92,33402,33404,33407],{"class":94,"line":33403},174,[92,33405,33406],{"class":207},"        \"train_loss_all\"",[92,33408,33409],{"class":102},":train_loss_all,\n",[92,33411,33413,33416],{"class":94,"line":33412},175,[92,33414,33415],{"class":207},"        \"val_loss_all\"",[92,33417,33418],{"class":102},":val_loss_all,\n",[92,33420,33422,33425],{"class":94,"line":33421},176,[92,33423,33424],{"class":207},"        \"train_acc_all\"",[92,33426,33427],{"class":102},":train_acc_all,\n",[92,33429,33431,33434],{"class":94,"line":33430},177,[92,33432,33433],{"class":207},"        \"val_acc_all\"",[92,33435,33436],{"class":102},":val_acc_all\n",[92,33438,33440],{"class":94,"line":33439},178,[92,33441,33442],{"class":102},"    })\n",[92,33444,33446],{"class":94,"line":33445},179,[92,33447,33448],{"class":161},"    # 返回训练保存的过程\n",[92,33450,33452,33454],{"class":94,"line":33451},180,[92,33453,4069],{"class":98},[92,33455,33456],{"class":102}," train_process\n",[92,33458,33460],{"class":94,"line":33459},181,[92,33461,2379],{"emptyLinePlaceholder":17},[92,33463,33465],{"class":94,"line":33464},182,[92,33466,33467],{"class":161},"# 将loss值和精度按照图片的形式展示出来\n",[92,33469,33471,33473,33476],{"class":94,"line":33470},183,[92,33472,31928],{"class":98},[92,33474,33475],{"class":1942}," matplot_acc_loss",[92,33477,33478],{"class":102},"(train_process):\n",[92,33480,33482],{"class":94,"line":33481},184,[92,33483,33484],{"class":161},"    # 设置图的大小\n",[92,33486,33488,33491,33493,33495,33497,33499,33501,33503],{"class":94,"line":33487},185,[92,33489,33490],{"class":102},"    plt.figure(",[92,33492,31674],{"class":5196},[92,33494,148],{"class":98},[92,33496,103],{"class":102},[92,33498,601],{"class":151},[92,33500,481],{"class":102},[92,33502,396],{"class":151},[92,33504,30478],{"class":102},[92,33506,33508],{"class":94,"line":33507},186,[92,33509,33510],{"class":161},"    # 设置图中有几张图\n",[92,33512,33514],{"class":94,"line":33513},187,[92,33515,33516],{"class":161},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[92,33518,33520],{"class":94,"line":33519},188,[92,33521,33522],{"class":161},"    # ①loss图\n",[92,33524,33526,33528,33530,33532,33534,33536,33538],{"class":94,"line":33525},189,[92,33527,31708],{"class":102},[92,33529,320],{"class":151},[92,33531,481],{"class":102},[92,33533,180],{"class":151},[92,33535,481],{"class":102},[92,33537,320],{"class":151},[92,33539,109],{"class":102},[92,33541,33543],{"class":94,"line":33542},190,[92,33544,33545],{"class":161},"    # 补充:\n",[92,33547,33549],{"class":94,"line":33548},191,[92,33550,33551],{"class":161},"    # plt.subplot(nrows, ncols, index)\n",[92,33553,33555],{"class":94,"line":33554},192,[92,33556,33557],{"class":161},"    # nrows：行数\n",[92,33559,33561],{"class":94,"line":33560},193,[92,33562,33563],{"class":161},"    # ncols：列数\n",[92,33565,33567],{"class":94,"line":33566},194,[92,33568,33569],{"class":161},"    # index：目前选中第几个子图（从1开始）\n",[92,33571,33573,33576,33579,33582,33585,33587,33590,33592,33595],{"class":94,"line":33572},195,[92,33574,33575],{"class":102},"    plt.plot(train_process[",[92,33577,33578],{"class":207},"\"epoch\"",[92,33580,33581],{"class":102},"],train_process.train_loss_all,",[92,33583,33584],{"class":207},"'ro-'",[92,33586,481],{"class":102},[92,33588,33589],{"class":5196},"label",[92,33591,148],{"class":98},[92,33593,33594],{"class":207},"'train loss'",[92,33596,109],{"class":102},[92,33598,33600,33602,33604,33607,33610,33612,33614,33616,33619],{"class":94,"line":33599},196,[92,33601,33575],{"class":102},[92,33603,33578],{"class":207},[92,33605,33606],{"class":102},"],train_process.val_loss_all,",[92,33608,33609],{"class":207},"'bs--'",[92,33611,481],{"class":102},[92,33613,33589],{"class":5196},[92,33615,148],{"class":98},[92,33617,33618],{"class":207},"'val loss'",[92,33620,109],{"class":102},[92,33622,33624],{"class":94,"line":33623},197,[92,33625,33626],{"class":161},"    # 添加一个图例\n",[92,33628,33630],{"class":94,"line":33629},198,[92,33631,33632],{"class":102},"    plt.legend()\n",[92,33634,33636],{"class":94,"line":33635},199,[92,33637,33638],{"class":161},"    # 给轴添加标签\n",[92,33640,33642,33645,33648],{"class":94,"line":33641},200,[92,33643,33644],{"class":102},"    plt.xlabel(",[92,33646,33647],{"class":207},"'epoch'",[92,33649,109],{"class":102},[92,33651,33653,33656,33659],{"class":94,"line":33652},201,[92,33654,33655],{"class":102},"    plt.ylabel(",[92,33657,33658],{"class":207},"'loss'",[92,33660,109],{"class":102},[92,33662,33664],{"class":94,"line":33663},202,[92,33665,33666],{"class":161},"    # ②准确度图\n",[92,33668,33670,33672,33674,33676,33678,33680,33682],{"class":94,"line":33669},203,[92,33671,31708],{"class":102},[92,33673,320],{"class":151},[92,33675,481],{"class":102},[92,33677,180],{"class":151},[92,33679,481],{"class":102},[92,33681,180],{"class":151},[92,33683,109],{"class":102},[92,33685,33687,33689,33691,33694,33696,33698,33700,33702,33705],{"class":94,"line":33686},204,[92,33688,33575],{"class":102},[92,33690,33578],{"class":207},[92,33692,33693],{"class":102},"],train_process.train_acc_all,",[92,33695,33584],{"class":207},[92,33697,481],{"class":102},[92,33699,33589],{"class":5196},[92,33701,148],{"class":98},[92,33703,33704],{"class":207},"'train acc'",[92,33706,109],{"class":102},[92,33708,33710,33712,33714,33717,33719,33721,33723,33725,33728],{"class":94,"line":33709},205,[92,33711,33575],{"class":102},[92,33713,33578],{"class":207},[92,33715,33716],{"class":102},"],train_process.val_acc_all,",[92,33718,33609],{"class":207},[92,33720,481],{"class":102},[92,33722,33589],{"class":5196},[92,33724,148],{"class":98},[92,33726,33727],{"class":207},"'val acc'",[92,33729,109],{"class":102},[92,33731,33733],{"class":94,"line":33732},206,[92,33734,33735],{"class":161},"    # 添加图例\n",[92,33737,33739],{"class":94,"line":33738},207,[92,33740,33632],{"class":102},[92,33742,33744,33746,33748],{"class":94,"line":33743},208,[92,33745,33644],{"class":102},[92,33747,33578],{"class":207},[92,33749,109],{"class":102},[92,33751,33753,33755,33758],{"class":94,"line":33752},209,[92,33754,33655],{"class":102},[92,33756,33757],{"class":207},"\"acc\"",[92,33759,109],{"class":102},[92,33761,33763],{"class":94,"line":33762},210,[92,33764,33765],{"class":102},"    plt.show()\n",[92,33767,33769],{"class":94,"line":33768},211,[92,33770,2379],{"emptyLinePlaceholder":17},[92,33772,33774],{"class":94,"line":33773},212,[92,33775,33776],{"class":161},"# 正式开始训练:\n",[92,33778,33780,33782,33784,33786,33788],{"class":94,"line":33779},213,[92,33781,1510],{"class":98},[92,33783,31201],{"class":151},[92,33785,2928],{"class":98},[92,33787,31206],{"class":207},[92,33789,3718],{"class":102},[92,33791,33793],{"class":94,"line":33792},214,[92,33794,33795],{"class":161},"    # 将模型实例化\n",[92,33797,33799,33802,33804],{"class":94,"line":33798},215,[92,33800,33801],{"class":102},"    LeNet",[92,33803,148],{"class":98},[92,33805,33806],{"class":102},"LeNet()\n",[92,33808,33810,33813,33815],{"class":94,"line":33809},216,[92,33811,33812],{"class":102},"    train_dataloader,val_dataloader",[92,33814,148],{"class":98},[92,33816,33817],{"class":102},"train_val_data_process()\n",[92,33819,33821,33823,33825,33828,33831,33833,33835],{"class":94,"line":33820},217,[92,33822,33374],{"class":102},[92,33824,148],{"class":98},[92,33826,33827],{"class":102},"train_model_process(LeNet,train_dataloader,val_dataloader,",[92,33829,33830],{"class":5196},"num_epochs",[92,33832,148],{"class":98},[92,33834,803],{"class":151},[92,33836,109],{"class":102},[92,33838,33840],{"class":94,"line":33839},218,[92,33841,33842],{"class":102},"    matplot_acc_loss(train_process)\n",[38,33844,33845],{},"画图的补充点学习：",[38,33847,33848],{},[1441,33849],{"alt":10,"src":33850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-014.png",[46,33852,33853],{"start":1158},[49,33854,33855],{},"测试",[83,33857,33859],{"className":30359,"code":33858,"language":30361,"meta":10,"style":10},"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",[89,33860,33861,33867,33877,33889,33899,33904,33914,33924,33928,33933,33942,33959,33971,33988,33999,34015,34020,34031,34042,34053,34060,34064,34069,34079,34084,34101,34109,34113,34118,34127,34136,34140,34145,34150,34155,34162,34167,34179,34189,34199,34204,34208,34213,34222,34227,34243,34248,34253,34258,34272,34277,34291,34295,34300,34315,34320,34332,34336,34341,34353,34358,34366,34371,34376,34386,34391,34400,34405,34410,34414,34419,34424,34440,34448,34453,34458,34517,34523,34528,34539,34547,34555,34559,34564,34568,34573,34581,34586,34602,34607,34617,34627],{"__ignoreMap":10},[92,33862,33863,33865],{"class":94,"line":95},[92,33864,30373],{"class":98},[92,33866,30376],{"class":102},[92,33868,33869,33871,33873,33875],{"class":94,"line":11},[92,33870,30373],{"class":98},[92,33872,31396],{"class":102},[92,33874,31364],{"class":98},[92,33876,31401],{"class":102},[92,33878,33879,33881,33884,33886],{"class":94,"line":1158},[92,33880,30718],{"class":98},[92,33882,33883],{"class":102}," jupyter_client.consoleapp ",[92,33885,30373],{"class":98},[92,33887,33888],{"class":102}," classes\n",[92,33890,33891,33893,33895,33897],{"class":94,"line":1173},[92,33892,30718],{"class":98},[92,33894,31379],{"class":102},[92,33896,30373],{"class":98},[92,33898,31384],{"class":102},[92,33900,33901],{"class":94,"line":1179},[92,33902,33903],{"class":161},"# 导入数据集\n",[92,33905,33906,33908,33910,33912],{"class":94,"line":1193},[92,33907,30718],{"class":98},[92,33909,31349],{"class":102},[92,33911,30373],{"class":98},[92,33913,31354],{"class":102},[92,33915,33916,33918,33920,33922],{"class":94,"line":1199},[92,33917,30718],{"class":98},[92,33919,31895],{"class":102},[92,33921,30373],{"class":98},[92,33923,31900],{"class":102},[92,33925,33926],{"class":94,"line":1290},[92,33927,2379],{"emptyLinePlaceholder":17},[92,33929,33930],{"class":94,"line":1296},[92,33931,33932],{"class":161},"# 测试数据处理\n",[92,33934,33935,33937,33940],{"class":94,"line":1308},[92,33936,31928],{"class":98},[92,33938,33939],{"class":1942}," test_data_process",[92,33941,31934],{"class":102},[92,33943,33944,33947,33949,33951,33953,33955,33957],{"class":94,"line":1591},[92,33945,33946],{"class":102},"    test_data",[92,33948,148],{"class":98},[92,33950,31436],{"class":102},[92,33952,31439],{"class":5196},[92,33954,148],{"class":98},[92,33956,31444],{"class":207},[92,33958,31447],{"class":102},[92,33960,33961,33964,33966,33969],{"class":94,"line":1596},[92,33962,33963],{"class":5196},"                           train",[92,33965,148],{"class":98},[92,33967,33968],{"class":151},"False",[92,33970,31447],{"class":102},[92,33972,33973,33976,33978,33980,33982,33984,33986],{"class":94,"line":1602},[92,33974,33975],{"class":5196},"                           transform",[92,33977,148],{"class":98},[92,33979,31474],{"class":102},[92,33981,31477],{"class":5196},[92,33983,148],{"class":98},[92,33985,1004],{"class":151},[92,33987,31485],{"class":102},[92,33989,33990,33993,33995,33997],{"class":94,"line":1607},[92,33991,33992],{"class":5196},"                           download",[92,33994,148],{"class":98},[92,33996,31457],{"class":151},[92,33998,109],{"class":102},[92,34000,34001,34004,34006,34008,34010,34012],{"class":94,"line":1621},[92,34002,34003],{"class":102},"    test_dataloader",[92,34005,148],{"class":98},[92,34007,31515],{"class":102},[92,34009,31518],{"class":5196},[92,34011,148],{"class":98},[92,34013,34014],{"class":102},"test_data,\n",[92,34016,34017],{"class":94,"line":1626},[92,34018,34019],{"class":161},"                                    # 这里是一张一张进行测试\n",[92,34021,34022,34025,34027,34029],{"class":94,"line":1632},[92,34023,34024],{"class":5196},"                                    batch_size",[92,34026,148],{"class":98},[92,34028,320],{"class":151},[92,34030,31447],{"class":102},[92,34032,34033,34036,34038,34040],{"class":94,"line":1653},[92,34034,34035],{"class":5196},"                                    shuffle",[92,34037,148],{"class":98},[92,34039,31457],{"class":151},[92,34041,31447],{"class":102},[92,34043,34044,34047,34049,34051],{"class":94,"line":1658},[92,34045,34046],{"class":5196},"                                    num_workers",[92,34048,148],{"class":98},[92,34050,294],{"class":151},[92,34052,109],{"class":102},[92,34054,34055,34057],{"class":94,"line":1672},[92,34056,4069],{"class":98},[92,34058,34059],{"class":102}," test_dataloader\n",[92,34061,34062],{"class":94,"line":1677},[92,34063,2379],{"emptyLinePlaceholder":17},[92,34065,34066],{"class":94,"line":1706},[92,34067,34068],{"class":161},"# 定义模型测试函数\n",[92,34070,34071,34073,34076],{"class":94,"line":1711},[92,34072,31928],{"class":98},[92,34074,34075],{"class":1942}," test_model_process",[92,34077,34078],{"class":102},"(model,test_dataloader):\n",[92,34080,34081],{"class":94,"line":1728},[92,34082,34083],{"class":161},"    # 将模型放到设备当中，先进行判断\n",[92,34085,34086,34088,34090,34092,34094,34096,34098],{"class":94,"line":1733},[92,34087,31218],{"class":102},[92,34089,148],{"class":98},[92,34091,31225],{"class":207},[92,34093,1683],{"class":98},[92,34095,31230],{"class":102},[92,34097,1680],{"class":98},[92,34099,34100],{"class":207}," \"cpu\"\n",[92,34102,34103,34105,34107],{"class":94,"line":1738},[92,34104,31270],{"class":102},[92,34106,148],{"class":98},[92,34108,32270],{"class":102},[92,34110,34111],{"class":94,"line":1743},[92,34112,2379],{"emptyLinePlaceholder":17},[92,34114,34115],{"class":94,"line":1757},[92,34116,34117],{"class":161},"    # 设置初始化参数\n",[92,34119,34120,34123,34125],{"class":94,"line":1762},[92,34121,34122],{"class":102},"    test_corrects",[92,34124,148],{"class":98},[92,34126,32323],{"class":151},[92,34128,34129,34132,34134],{"class":94,"line":2556},[92,34130,34131],{"class":102},"    test_num",[92,34133,148],{"class":98},[92,34135,3064],{"class":151},[92,34137,34138],{"class":94,"line":2570},[92,34139,2379],{"emptyLinePlaceholder":17},[92,34141,34142],{"class":94,"line":2578},[92,34143,34144],{"class":161},"    # 进行模型测试\n",[92,34146,34147],{"class":94,"line":2583},[92,34148,34149],{"class":161},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[92,34151,34152],{"class":94,"line":2589},[92,34153,34154],{"class":161},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[92,34156,34157,34160],{"class":94,"line":2595},[92,34158,34159],{"class":98},"    with",[92,34161,32865],{"class":102},[92,34163,34164],{"class":94,"line":2600},[92,34165,34166],{"class":161},"        # 从数据中进行\n",[92,34168,34169,34171,34174,34176],{"class":94,"line":7928},[92,34170,3382],{"class":98},[92,34172,34173],{"class":102}," test_data_x,test_data_y ",[92,34175,26024],{"class":98},[92,34177,34178],{"class":102}," test_dataloader:\n",[92,34180,34181,34184,34186],{"class":94,"line":7952},[92,34182,34183],{"class":102},"            test_data_x",[92,34185,148],{"class":98},[92,34187,34188],{"class":102},"test_data_x.to(device)\n",[92,34190,34191,34194,34196],{"class":94,"line":7957},[92,34192,34193],{"class":102},"            test_data_y",[92,34195,148],{"class":98},[92,34197,34198],{"class":102},"test_data_y.to(device)\n",[92,34200,34201],{"class":94,"line":7963},[92,34202,34203],{"class":161},"            # 设置为验证模式\n",[92,34205,34206],{"class":94,"line":7990},[92,34207,32856],{"class":102},[92,34209,34210],{"class":94,"line":7995},[92,34211,34212],{"class":161},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[92,34214,34215,34217,34219],{"class":94,"line":8001},[92,34216,32641],{"class":102},[92,34218,148],{"class":98},[92,34220,34221],{"class":102},"model(test_data_x)\n",[92,34223,34224],{"class":94,"line":8013},[92,34225,34226],{"class":161},"            # 查找每一行中最大值对应的下标\n",[92,34228,34229,34231,34233,34235,34237,34239,34241],{"class":94,"line":8025},[92,34230,32658],{"class":102},[92,34232,148],{"class":98},[92,34234,32663],{"class":102},[92,34236,32666],{"class":5196},[92,34238,148],{"class":98},[92,34240,320],{"class":151},[92,34242,109],{"class":102},[92,34244,34245],{"class":94,"line":8037},[92,34246,34247],{"class":161},"            # 计算正确率\n",[92,34249,34250],{"class":94,"line":9696},[92,34251,34252],{"class":161},"            # .data表示是一个不带梯度信息的tensor\n",[92,34254,34255],{"class":94,"line":9721},[92,34256,34257],{"class":161},"            # 如果预测正确，则准确度test_corrects加1\n",[92,34259,34260,34263,34265,34267,34269],{"class":94,"line":9744},[92,34261,34262],{"class":102},"            test_corrects",[92,34264,9457],{"class":98},[92,34266,32768],{"class":102},[92,34268,2928],{"class":98},[92,34270,34271],{"class":102},"test_data_y.data)\n",[92,34273,34274],{"class":94,"line":9768},[92,34275,34276],{"class":161},"            # 将所有的测试样本进行累计\n",[92,34278,34279,34282,34284,34287,34289],{"class":94,"line":9773},[92,34280,34281],{"class":102},"            test_num",[92,34283,9457],{"class":98},[92,34285,34286],{"class":102},"test_data_x.size(",[92,34288,294],{"class":151},[92,34290,109],{"class":102},[92,34292,34293],{"class":94,"line":9778},[92,34294,2379],{"emptyLinePlaceholder":17},[92,34296,34297],{"class":94,"line":9783},[92,34298,34299],{"class":161},"        # 计算准确度\n",[92,34301,34302,34305,34307,34310,34312],{"class":94,"line":9792},[92,34303,34304],{"class":102},"        test_acc",[92,34306,148],{"class":98},[92,34308,34309],{"class":102},"test_corrects.double().item()",[92,34311,687],{"class":98},[92,34313,34314],{"class":102},"test_num\n",[92,34316,34317],{"class":94,"line":9797},[92,34318,34319],{"class":161},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[92,34321,34322,34324,34326,34329],{"class":94,"line":9803},[92,34323,32432],{"class":151},[92,34325,103],{"class":102},[92,34327,34328],{"class":207},"\"测试的准确率：\"",[92,34330,34331],{"class":102},",test_acc)\n",[92,34333,34334],{"class":94,"line":9824},[92,34335,2379],{"emptyLinePlaceholder":17},[92,34337,34338],{"class":94,"line":9830},[92,34339,34340],{"class":161},"# 实现模型的测试功能\n",[92,34342,34343,34345,34347,34349,34351],{"class":94,"line":9844},[92,34344,1510],{"class":98},[92,34346,31201],{"class":151},[92,34348,2928],{"class":98},[92,34350,31206],{"class":207},[92,34352,3718],{"class":102},[92,34354,34355],{"class":94,"line":9850},[92,34356,34357],{"class":161},"    # 加载模型\n",[92,34359,34360,34362,34364],{"class":94,"line":9877},[92,34361,31270],{"class":102},[92,34363,148],{"class":98},[92,34365,33806],{"class":102},[92,34367,34368],{"class":94,"line":9886},[92,34369,34370],{"class":161},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[92,34372,34373],{"class":94,"line":9892},[92,34374,34375],{"class":161},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[92,34377,34378,34381,34384],{"class":94,"line":9900},[92,34379,34380],{"class":102},"    model.load_state_dict(torch.load(",[92,34382,34383],{"class":207},"'best_model.pth'",[92,34385,30478],{"class":102},[92,34387,34388],{"class":94,"line":9905},[92,34389,34390],{"class":161},"    # 数据加载\n",[92,34392,34393,34395,34397],{"class":94,"line":16584},[92,34394,34003],{"class":102},[92,34396,148],{"class":98},[92,34398,34399],{"class":102},"test_data_process()\n",[92,34401,34402],{"class":94,"line":16590},[92,34403,34404],{"class":161},"    # 加载模型测试的函数\n",[92,34406,34407],{"class":94,"line":16613},[92,34408,34409],{"class":102},"    test_model_process(model,test_dataloader)\n",[92,34411,34412],{"class":94,"line":16619},[92,34413,2379],{"emptyLinePlaceholder":17},[92,34415,34416],{"class":94,"line":16642},[92,34417,34418],{"class":161},"    # 验证集推理实现：\n",[92,34420,34421],{"class":94,"line":16656},[92,34422,34423],{"class":161},"    # 加载数据加载的更详细一些\n",[92,34425,34426,34428,34430,34432,34434,34436,34438],{"class":94,"line":16676},[92,34427,31218],{"class":102},[92,34429,148],{"class":98},[92,34431,31225],{"class":207},[92,34433,1683],{"class":98},[92,34435,31230],{"class":102},[92,34437,1680],{"class":98},[92,34439,34100],{"class":207},[92,34441,34442,34444,34446],{"class":94,"line":16682},[92,34443,31270],{"class":102},[92,34445,148],{"class":98},[92,34447,32270],{"class":102},[92,34449,34450],{"class":94,"line":16693},[92,34451,34452],{"class":161},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[92,34454,34455],{"class":94,"line":16716},[92,34456,34457],{"class":161},"    # 顺序不可改变\n",[92,34459,34460,34463,34465,34467,34470,34472,34475,34477,34480,34482,34485,34487,34490,34492,34495,34497,34500,34502,34505,34507,34510,34512,34515],{"class":94,"line":16738},[92,34461,34462],{"class":102},"    classes",[92,34464,148],{"class":98},[92,34466,993],{"class":102},[92,34468,34469],{"class":207},"'T-shirt\u002Ftop'",[92,34471,481],{"class":102},[92,34473,34474],{"class":207},"'Trouser'",[92,34476,481],{"class":102},[92,34478,34479],{"class":207},"'Pullover'",[92,34481,481],{"class":102},[92,34483,34484],{"class":207},"'Dress'",[92,34486,481],{"class":102},[92,34488,34489],{"class":207},"'Coat'",[92,34491,481],{"class":102},[92,34493,34494],{"class":207},"'Sandal'",[92,34496,481],{"class":102},[92,34498,34499],{"class":207},"'Shirt'",[92,34501,481],{"class":102},[92,34503,34504],{"class":207},"'Sneaker'",[92,34506,481],{"class":102},[92,34508,34509],{"class":207},"'Bag'",[92,34511,481],{"class":102},[92,34513,34514],{"class":207},"'Ankle boot'",[92,34516,33227],{"class":102},[92,34518,34519,34521],{"class":94,"line":16743},[92,34520,34159],{"class":98},[92,34522,32865],{"class":102},[92,34524,34525],{"class":94,"line":16749},[92,34526,34527],{"class":161},"        # 将数据和标签都放到设备当中\n",[92,34529,34530,34532,34535,34537],{"class":94,"line":16763},[92,34531,3382],{"class":98},[92,34533,34534],{"class":102}," b_x,b_y ",[92,34536,26024],{"class":98},[92,34538,34178],{"class":102},[92,34540,34541,34543,34545],{"class":94,"line":16776},[92,34542,32591],{"class":102},[92,34544,148],{"class":98},[92,34546,32596],{"class":102},[92,34548,34549,34551,34553],{"class":94,"line":16781},[92,34550,32606],{"class":102},[92,34552,148],{"class":98},[92,34554,32611],{"class":102},[92,34556,34557],{"class":94,"line":16795},[92,34558,2379],{"emptyLinePlaceholder":17},[92,34560,34561],{"class":94,"line":16800},[92,34562,34563],{"class":161},"            # 设置模型为验证模式\n",[92,34565,34566],{"class":94,"line":16806},[92,34567,32856],{"class":102},[92,34569,34570],{"class":94,"line":16811},[92,34571,34572],{"class":161},"            # 模型推理结果\n",[92,34574,34575,34577,34579],{"class":94,"line":16825},[92,34576,32641],{"class":102},[92,34578,148],{"class":98},[92,34580,32646],{"class":102},[92,34582,34583],{"class":94,"line":16830},[92,34584,34585],{"class":161},"            # 获取最大下标，最大下标就是类别号\n",[92,34587,34588,34590,34592,34594,34596,34598,34600],{"class":94,"line":16835},[92,34589,32658],{"class":102},[92,34591,148],{"class":98},[92,34593,32663],{"class":102},[92,34595,32666],{"class":5196},[92,34597,148],{"class":98},[92,34599,320],{"class":151},[92,34601,109],{"class":102},[92,34603,34604],{"class":94,"line":16849},[92,34605,34606],{"class":161},"            # 取出张量中的数值\n",[92,34608,34609,34612,34614],{"class":94,"line":16861},[92,34610,34611],{"class":102},"            result",[92,34613,148],{"class":98},[92,34615,34616],{"class":102},"pre_lab.item()\n",[92,34618,34619,34622,34624],{"class":94,"line":16866},[92,34620,34621],{"class":102},"            label",[92,34623,148],{"class":98},[92,34625,34626],{"class":102},"b_y.item()\n",[92,34628,34629,34632,34634,34637,34640,34643,34645,34648],{"class":94,"line":16879},[92,34630,34631],{"class":151},"            print",[92,34633,103],{"class":102},[92,34635,34636],{"class":207},"\"预测值：\"",[92,34638,34639],{"class":102},",classes[result],",[92,34641,34642],{"class":207},"\"------\"",[92,34644,481],{"class":102},[92,34646,34647],{"class":207},"\"真实值：\"",[92,34649,34650],{"class":102},",classes[label])\n",[38,34652,34653],{},"（2）AlexNet",[46,34655,34656],{},[49,34657,34658],{},"神经网络构建",[83,34660,34662],{"className":30359,"code":34661,"language":30361,"meta":10,"style":10},"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",[89,34663,34664,34670,34680,34690,34702,34706,34723,34731,34746,34758,34800,34827,34870,34896,34940,34983,35026,35053,35057,35067,35072,35100,35119,35138,35142,35147,35155,35170,35180,35194,35204,35219,35234,35249,35260,35264,35269,35279,35294,35299,35313,35328,35340,35345,35356,35361,35367,35372,35384,35404,35409,35418],{"__ignoreMap":10},[92,34665,34666,34668],{"class":94,"line":95},[92,34667,30373],{"class":98},[92,34669,30376],{"class":102},[92,34671,34672,34674,34676,34678],{"class":94,"line":11},[92,34673,30718],{"class":98},[92,34675,30721],{"class":102},[92,34677,30373],{"class":98},[92,34679,30726],{"class":102},[92,34681,34682,34684,34686,34688],{"class":94,"line":1158},[92,34683,30718],{"class":98},[92,34685,30738],{"class":102},[92,34687,30373],{"class":98},[92,34689,30743],{"class":102},[92,34691,34692,34694,34697,34699],{"class":94,"line":1173},[92,34693,30373],{"class":98},[92,34695,34696],{"class":102}," torch.nn.functional ",[92,34698,31364],{"class":98},[92,34700,34701],{"class":102}," F\n",[92,34703,34704],{"class":94,"line":1179},[92,34705,2379],{"emptyLinePlaceholder":17},[92,34707,34708,34710,34713,34715,34717,34719,34721],{"class":94,"line":1193},[92,34709,14674],{"class":98},[92,34711,34712],{"class":1942}," AlexNet",[92,34714,103],{"class":102},[92,34716,30759],{"class":1942},[92,34718,661],{"class":102},[92,34720,30764],{"class":1942},[92,34722,30767],{"class":102},[92,34724,34725,34727,34729],{"class":94,"line":1199},[92,34726,30782],{"class":98},[92,34728,30785],{"class":151},[92,34730,30788],{"class":102},[92,34732,34733,34735,34738,34740,34742,34744],{"class":94,"line":1290},[92,34734,30798],{"class":151},[92,34736,34737],{"class":102},"(AlexNet,",[92,34739,30804],{"class":151},[92,34741,30807],{"class":102},[92,34743,30810],{"class":151},[92,34745,1955],{"class":102},[92,34747,34748,34750,34753,34755],{"class":94,"line":1296},[92,34749,30826],{"class":151},[92,34751,34752],{"class":102},".ReLu",[92,34754,148],{"class":98},[92,34756,34757],{"class":102},"nn.ReLU()\n",[92,34759,34760,34762,34764,34766,34768,34770,34772,34774,34776,34778,34780,34782,34784,34786,34788,34790,34792,34794,34796,34798],{"class":94,"line":1308},[92,34761,30826],{"class":151},[92,34763,30829],{"class":102},[92,34765,148],{"class":98},[92,34767,30834],{"class":102},[92,34769,30837],{"class":5196},[92,34771,148],{"class":98},[92,34773,320],{"class":151},[92,34775,481],{"class":102},[92,34777,30846],{"class":5196},[92,34779,148],{"class":98},[92,34781,312],{"class":151},[92,34783,481],{"class":102},[92,34785,30855],{"class":5196},[92,34787,148],{"class":98},[92,34789,575],{"class":151},[92,34791,481],{"class":102},[92,34793,30910],{"class":5196},[92,34795,148],{"class":98},[92,34797,396],{"class":151},[92,34799,109],{"class":102},[92,34801,34802,34804,34806,34808,34811,34813,34815,34817,34819,34821,34823,34825],{"class":94,"line":1591},[92,34803,30826],{"class":151},[92,34805,30894],{"class":102},[92,34807,148],{"class":98},[92,34809,34810],{"class":102},"nn.MaxPool2d(",[92,34812,30855],{"class":5196},[92,34814,148],{"class":98},[92,34816,174],{"class":151},[92,34818,481],{"class":102},[92,34820,30910],{"class":5196},[92,34822,148],{"class":98},[92,34824,180],{"class":151},[92,34826,109],{"class":102},[92,34828,34829,34831,34833,34835,34837,34839,34841,34843,34845,34847,34849,34852,34854,34856,34858,34860,34862,34864,34866,34868],{"class":94,"line":1596},[92,34830,30826],{"class":151},[92,34832,30923],{"class":102},[92,34834,148],{"class":98},[92,34836,30834],{"class":102},[92,34838,30837],{"class":5196},[92,34840,148],{"class":98},[92,34842,312],{"class":151},[92,34844,481],{"class":102},[92,34846,30846],{"class":5196},[92,34848,148],{"class":98},[92,34850,34851],{"class":151},"256",[92,34853,481],{"class":102},[92,34855,30855],{"class":5196},[92,34857,148],{"class":98},[92,34859,422],{"class":151},[92,34861,481],{"class":102},[92,34863,30864],{"class":5196},[92,34865,148],{"class":98},[92,34867,180],{"class":151},[92,34869,109],{"class":102},[92,34871,34872,34874,34876,34878,34880,34882,34884,34886,34888,34890,34892,34894],{"class":94,"line":1602},[92,34873,30826],{"class":151},[92,34875,30958],{"class":102},[92,34877,148],{"class":98},[92,34879,34810],{"class":102},[92,34881,30855],{"class":5196},[92,34883,148],{"class":98},[92,34885,174],{"class":151},[92,34887,481],{"class":102},[92,34889,30910],{"class":5196},[92,34891,148],{"class":98},[92,34893,180],{"class":151},[92,34895,109],{"class":102},[92,34897,34898,34900,34903,34905,34907,34909,34911,34913,34915,34917,34919,34922,34924,34926,34928,34930,34932,34934,34936,34938],{"class":94,"line":1607},[92,34899,30826],{"class":151},[92,34901,34902],{"class":102},".c5",[92,34904,148],{"class":98},[92,34906,30834],{"class":102},[92,34908,30837],{"class":5196},[92,34910,148],{"class":98},[92,34912,34851],{"class":151},[92,34914,481],{"class":102},[92,34916,30846],{"class":5196},[92,34918,148],{"class":98},[92,34920,34921],{"class":151},"384",[92,34923,481],{"class":102},[92,34925,30855],{"class":5196},[92,34927,148],{"class":98},[92,34929,174],{"class":151},[92,34931,481],{"class":102},[92,34933,30864],{"class":5196},[92,34935,148],{"class":98},[92,34937,320],{"class":151},[92,34939,109],{"class":102},[92,34941,34942,34944,34947,34949,34951,34953,34955,34957,34959,34961,34963,34965,34967,34969,34971,34973,34975,34977,34979,34981],{"class":94,"line":1621},[92,34943,30826],{"class":151},[92,34945,34946],{"class":102},".c6",[92,34948,148],{"class":98},[92,34950,30834],{"class":102},[92,34952,30837],{"class":5196},[92,34954,148],{"class":98},[92,34956,34921],{"class":151},[92,34958,481],{"class":102},[92,34960,30846],{"class":5196},[92,34962,148],{"class":98},[92,34964,34921],{"class":151},[92,34966,481],{"class":102},[92,34968,30855],{"class":5196},[92,34970,148],{"class":98},[92,34972,174],{"class":151},[92,34974,481],{"class":102},[92,34976,30864],{"class":5196},[92,34978,148],{"class":98},[92,34980,320],{"class":151},[92,34982,109],{"class":102},[92,34984,34985,34987,34990,34992,34994,34996,34998,35000,35002,35004,35006,35008,35010,35012,35014,35016,35018,35020,35022,35024],{"class":94,"line":1626},[92,34986,30826],{"class":151},[92,34988,34989],{"class":102},".c7",[92,34991,148],{"class":98},[92,34993,30834],{"class":102},[92,34995,30837],{"class":5196},[92,34997,148],{"class":98},[92,34999,34921],{"class":151},[92,35001,481],{"class":102},[92,35003,30846],{"class":5196},[92,35005,148],{"class":98},[92,35007,34851],{"class":151},[92,35009,481],{"class":102},[92,35011,30855],{"class":5196},[92,35013,148],{"class":98},[92,35015,174],{"class":151},[92,35017,481],{"class":102},[92,35019,30864],{"class":5196},[92,35021,148],{"class":98},[92,35023,320],{"class":151},[92,35025,109],{"class":102},[92,35027,35028,35030,35033,35035,35037,35039,35041,35043,35045,35047,35049,35051],{"class":94,"line":1632},[92,35029,30826],{"class":151},[92,35031,35032],{"class":102},".s8",[92,35034,148],{"class":98},[92,35036,34810],{"class":102},[92,35038,30855],{"class":5196},[92,35040,148],{"class":98},[92,35042,174],{"class":151},[92,35044,481],{"class":102},[92,35046,30910],{"class":5196},[92,35048,148],{"class":98},[92,35050,180],{"class":151},[92,35052,109],{"class":102},[92,35054,35055],{"class":94,"line":1653},[92,35056,30983],{"class":161},[92,35058,35059,35061,35063,35065],{"class":94,"line":1658},[92,35060,30826],{"class":151},[92,35062,30990],{"class":102},[92,35064,148],{"class":98},[92,35066,30995],{"class":102},[92,35068,35069],{"class":94,"line":1672},[92,35070,35071],{"class":161},"       # 定义全连接层\n",[92,35073,35074,35076,35079,35081,35083,35085,35087,35089,35091,35093,35095,35098],{"class":94,"line":1677},[92,35075,30826],{"class":151},[92,35077,35078],{"class":102},".f1",[92,35080,148],{"class":98},[92,35082,31012],{"class":102},[92,35084,447],{"class":151},[92,35086,558],{"class":98},[92,35088,447],{"class":151},[92,35090,558],{"class":98},[92,35092,34851],{"class":151},[92,35094,481],{"class":102},[92,35096,35097],{"class":151},"4096",[92,35099,109],{"class":102},[92,35101,35102,35104,35107,35109,35111,35113,35115,35117],{"class":94,"line":1706},[92,35103,30826],{"class":151},[92,35105,35106],{"class":102},".f2",[92,35108,148],{"class":98},[92,35110,31012],{"class":102},[92,35112,35097],{"class":151},[92,35114,481],{"class":102},[92,35116,35097],{"class":151},[92,35118,109],{"class":102},[92,35120,35121,35123,35126,35128,35130,35132,35134,35136],{"class":94,"line":1711},[92,35122,30826],{"class":151},[92,35124,35125],{"class":102},".f3",[92,35127,148],{"class":98},[92,35129,31012],{"class":102},[92,35131,35097],{"class":151},[92,35133,481],{"class":102},[92,35135,549],{"class":151},[92,35137,109],{"class":102},[92,35139,35140],{"class":94,"line":1728},[92,35141,2379],{"emptyLinePlaceholder":17},[92,35143,35144],{"class":94,"line":1733},[92,35145,35146],{"class":161},"    # 定义前向传播\n",[92,35148,35149,35151,35153],{"class":94,"line":1738},[92,35150,30782],{"class":98},[92,35152,31074],{"class":1942},[92,35154,31077],{"class":102},[92,35156,35157,35159,35161,35163,35166,35168],{"class":94,"line":1743},[92,35158,31082],{"class":102},[92,35160,148],{"class":98},[92,35162,30804],{"class":151},[92,35164,35165],{"class":102},".ReLu(",[92,35167,30804],{"class":151},[92,35169,31094],{"class":102},[92,35171,35172,35174,35176,35178],{"class":94,"line":1757},[92,35173,31082],{"class":102},[92,35175,148],{"class":98},[92,35177,30804],{"class":151},[92,35179,31105],{"class":102},[92,35181,35182,35184,35186,35188,35190,35192],{"class":94,"line":1762},[92,35183,31082],{"class":102},[92,35185,148],{"class":98},[92,35187,30804],{"class":151},[92,35189,35165],{"class":102},[92,35191,30804],{"class":151},[92,35193,31120],{"class":102},[92,35195,35196,35198,35200,35202],{"class":94,"line":2556},[92,35197,31082],{"class":102},[92,35199,148],{"class":98},[92,35201,30804],{"class":151},[92,35203,31131],{"class":102},[92,35205,35206,35208,35210,35212,35214,35216],{"class":94,"line":2570},[92,35207,31082],{"class":102},[92,35209,148],{"class":98},[92,35211,30804],{"class":151},[92,35213,35165],{"class":102},[92,35215,30804],{"class":151},[92,35217,35218],{"class":102},".c5(x))\n",[92,35220,35221,35223,35225,35227,35229,35231],{"class":94,"line":2578},[92,35222,31082],{"class":102},[92,35224,148],{"class":98},[92,35226,30804],{"class":151},[92,35228,35165],{"class":102},[92,35230,30804],{"class":151},[92,35232,35233],{"class":102},".c6(x))\n",[92,35235,35236,35238,35240,35242,35244,35246],{"class":94,"line":2583},[92,35237,31082],{"class":102},[92,35239,148],{"class":98},[92,35241,30804],{"class":151},[92,35243,35165],{"class":102},[92,35245,30804],{"class":151},[92,35247,35248],{"class":102},".c7(x))\n",[92,35250,35251,35253,35255,35257],{"class":94,"line":2589},[92,35252,31082],{"class":102},[92,35254,148],{"class":98},[92,35256,30804],{"class":151},[92,35258,35259],{"class":102},".s8(x)\n",[92,35261,35262],{"class":94,"line":2595},[92,35263,2379],{"emptyLinePlaceholder":17},[92,35265,35266],{"class":94,"line":2600},[92,35267,35268],{"class":161},"        # 展平加线性全连接层\n",[92,35270,35271,35273,35275,35277],{"class":94,"line":7928},[92,35272,31082],{"class":102},[92,35274,148],{"class":98},[92,35276,30804],{"class":151},[92,35278,31142],{"class":102},[92,35280,35281,35283,35285,35287,35289,35291],{"class":94,"line":7952},[92,35282,31082],{"class":102},[92,35284,148],{"class":98},[92,35286,30804],{"class":151},[92,35288,35165],{"class":102},[92,35290,30804],{"class":151},[92,35292,35293],{"class":102},".f1(x))\n",[92,35295,35296],{"class":94,"line":7957},[92,35297,35298],{"class":161},"        # 还需要dropout对神经元随机进行失活\n",[92,35300,35301,35303,35305,35308,35311],{"class":94,"line":7963},[92,35302,31082],{"class":102},[92,35304,148],{"class":98},[92,35306,35307],{"class":102},"F.dropout(x,",[92,35309,35310],{"class":151},"0.5",[92,35312,109],{"class":102},[92,35314,35315,35317,35319,35321,35323,35325],{"class":94,"line":7990},[92,35316,31082],{"class":102},[92,35318,148],{"class":98},[92,35320,30804],{"class":151},[92,35322,35165],{"class":102},[92,35324,30804],{"class":151},[92,35326,35327],{"class":102},".f2(x))\n",[92,35329,35330,35332,35334,35336,35338],{"class":94,"line":7995},[92,35331,31082],{"class":102},[92,35333,148],{"class":98},[92,35335,35307],{"class":102},[92,35337,35310],{"class":151},[92,35339,109],{"class":102},[92,35341,35342],{"class":94,"line":8001},[92,35343,35344],{"class":161},"        # 直接输出\n",[92,35346,35347,35349,35351,35353],{"class":94,"line":8013},[92,35348,31082],{"class":102},[92,35350,148],{"class":98},[92,35352,30804],{"class":151},[92,35354,35355],{"class":102},".f3(x)\n",[92,35357,35358],{"class":94,"line":8025},[92,35359,35360],{"class":161},"        # 前向传播输出\n",[92,35362,35363,35365],{"class":94,"line":8037},[92,35364,14732],{"class":98},[92,35366,31190],{"class":102},[92,35368,35369],{"class":94,"line":9696},[92,35370,35371],{"class":161},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[92,35373,35374,35376,35378,35380,35382],{"class":94,"line":9721},[92,35375,1510],{"class":98},[92,35377,31201],{"class":151},[92,35379,2928],{"class":98},[92,35381,31206],{"class":207},[92,35383,3718],{"class":102},[92,35385,35386,35388,35390,35392,35394,35396,35398,35400,35402],{"class":94,"line":9744},[92,35387,31218],{"class":102},[92,35389,148],{"class":98},[92,35391,30432],{"class":102},[92,35393,31225],{"class":207},[92,35395,1683],{"class":98},[92,35397,31230],{"class":102},[92,35399,1680],{"class":98},[92,35401,30457],{"class":207},[92,35403,109],{"class":102},[92,35405,35406],{"class":94,"line":9768},[92,35407,35408],{"class":161},"    # 模型实例化，然后将实例化的模型放到设备中\n",[92,35410,35411,35413,35415],{"class":94,"line":9773},[92,35412,31270],{"class":102},[92,35414,148],{"class":98},[92,35416,35417],{"class":102},"AlexNet().to(device)\n",[92,35419,35420,35422,35424,35426,35428,35431,35433,35435],{"class":94,"line":9778},[92,35421,31280],{"class":151},[92,35423,31283],{"class":102},[92,35425,320],{"class":151},[92,35427,481],{"class":102},[92,35429,35430],{"class":151},"227",[92,35432,481],{"class":102},[92,35434,35430],{"class":151},[92,35436,31296],{"class":102},[46,35438,35439],{"start":11},[49,35440,31309],{},[83,35442,35444],{"className":30359,"code":35443,"language":30361,"meta":10,"style":10},"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",[89,35445,35446,35452,35458,35468,35474,35484,35494,35504,35514,35524,35528,35539,35549,35553,35557,35561,35569,35581,35591,35607,35617,35649,35663,35673,35683,35687,35697,35711,35721,35731,35741,35747,35751,35755,35759,35763,35767,35775,35795,35799,35803,35807,35811,35815,35831,35835,35839,35847,35851,35855,35863,35867,35871,35875,35883,35887,35891,35895,35899,35907,35911,35919,35923,35931,35935,35943,35947,35955,35959,35963,35971,35975,35979,35983,35995,36019,36033,36037,36041,36045,36053,36057,36065,36069,36077,36081,36089,36093,36101,36105,36113,36117,36129,36133,36141,36145,36153,36157,36161,36165,36169,36177,36181,36197,36201,36209,36213,36217,36221,36225,36229,36233,36237,36253,36257,36269,36273,36285,36289,36301,36305,36313,36317,36325,36329,36333,36338,36344,36348,36357,36361,36378,36382,36391,36395,36413,36426,36431,36444,36448,36452,36460,36464,36468,36476,36480,36488,36492,36500,36504,36508,36550,36592,36596,36600,36616,36620,36636,36640,36644,36652,36656,36660,36672,36710,36715,36720,36729,36733,36747,36757,36763,36769,36775,36781,36785,36789,36795,36799,36803,36811,36815,36833,36837,36841,36845,36861,36865,36869,36873,36877,36881,36901,36921,36925,36929,36933,36941,36949,36953,36969,36989,37009,37013,37017,37025,37033,37037,37041,37045,37057,37061,37071,37079,37096],{"__ignoreMap":10},[92,35447,35448,35450],{"class":94,"line":95},[92,35449,30373],{"class":98},[92,35451,31803],{"class":102},[92,35453,35454,35456],{"class":94,"line":11},[92,35455,30373],{"class":98},[92,35457,31810],{"class":102},[92,35459,35460,35462,35464,35466],{"class":94,"line":1158},[92,35461,30373],{"class":98},[92,35463,31821],{"class":102},[92,35465,31364],{"class":98},[92,35467,31826],{"class":102},[92,35469,35470,35472],{"class":94,"line":1173},[92,35471,30373],{"class":98},[92,35473,30376],{"class":102},[92,35475,35476,35478,35480,35482],{"class":94,"line":1179},[92,35477,30718],{"class":98},[92,35479,31396],{"class":102},[92,35481,30373],{"class":98},[92,35483,31843],{"class":102},[92,35485,35486,35488,35490,35492],{"class":94,"line":1193},[92,35487,30718],{"class":98},[92,35489,31349],{"class":102},[92,35491,30373],{"class":98},[92,35493,31354],{"class":102},[92,35495,35496,35498,35500,35502],{"class":94,"line":1199},[92,35497,30718],{"class":98},[92,35499,31379],{"class":102},[92,35501,30373],{"class":98},[92,35503,31384],{"class":102},[92,35505,35506,35508,35510,35512],{"class":94,"line":1290},[92,35507,30373],{"class":98},[92,35509,31396],{"class":102},[92,35511,31364],{"class":98},[92,35513,31401],{"class":102},[92,35515,35516,35518,35520,35522],{"class":94,"line":1296},[92,35517,30373],{"class":98},[92,35519,31413],{"class":102},[92,35521,31364],{"class":98},[92,35523,31418],{"class":102},[92,35525,35526],{"class":94,"line":1308},[92,35527,31888],{"class":161},[92,35529,35530,35532,35534,35536],{"class":94,"line":1591},[92,35531,30718],{"class":98},[92,35533,31895],{"class":102},[92,35535,30373],{"class":98},[92,35537,35538],{"class":102}," AlexNet\n",[92,35540,35541,35543,35545,35547],{"class":94,"line":1596},[92,35542,30718],{"class":98},[92,35544,30721],{"class":102},[92,35546,30373],{"class":98},[92,35548,30726],{"class":102},[92,35550,35551],{"class":94,"line":1602},[92,35552,2379],{"emptyLinePlaceholder":17},[92,35554,35555],{"class":94,"line":1607},[92,35556,2379],{"emptyLinePlaceholder":17},[92,35558,35559],{"class":94,"line":1621},[92,35560,31923],{"class":161},[92,35562,35563,35565,35567],{"class":94,"line":1626},[92,35564,31928],{"class":98},[92,35566,31931],{"class":1942},[92,35568,31934],{"class":102},[92,35570,35571,35573,35575,35577,35579],{"class":94,"line":1632},[92,35572,31939],{"class":102},[92,35574,148],{"class":98},[92,35576,31436],{"class":102},[92,35578,31444],{"class":207},[92,35580,31447],{"class":102},[92,35582,35583,35585,35587,35589],{"class":94,"line":1653},[92,35584,31952],{"class":5196},[92,35586,148],{"class":98},[92,35588,31457],{"class":151},[92,35590,31447],{"class":102},[92,35592,35593,35595,35597,35599,35601,35603,35605],{"class":94,"line":1658},[92,35594,31963],{"class":5196},[92,35596,148],{"class":98},[92,35598,31474],{"class":102},[92,35600,31477],{"class":5196},[92,35602,148],{"class":98},[92,35604,35430],{"class":151},[92,35606,31485],{"class":102},[92,35608,35609,35611,35613,35615],{"class":94,"line":1672},[92,35610,31980],{"class":5196},[92,35612,148],{"class":98},[92,35614,31457],{"class":151},[92,35616,109],{"class":102},[92,35618,35619,35621,35623,35625,35627,35629,35631,35633,35635,35637,35639,35641,35643,35645,35647],{"class":94,"line":1677},[92,35620,31991],{"class":102},[92,35622,148],{"class":98},[92,35624,31996],{"class":102},[92,35626,31999],{"class":151},[92,35628,103],{"class":102},[92,35630,32004],{"class":151},[92,35632,558],{"class":98},[92,35634,7338],{"class":151},[92,35636,32011],{"class":102},[92,35638,31999],{"class":151},[92,35640,103],{"class":102},[92,35642,32018],{"class":151},[92,35644,558],{"class":98},[92,35646,7338],{"class":151},[92,35648,32025],{"class":102},[92,35650,35651,35653,35655,35657,35659,35661],{"class":94,"line":1706},[92,35652,32030],{"class":102},[92,35654,148],{"class":98},[92,35656,32035],{"class":102},[92,35658,31518],{"class":5196},[92,35660,148],{"class":98},[92,35662,31523],{"class":102},[92,35664,35665,35667,35669,35671],{"class":94,"line":1711},[92,35666,32046],{"class":5196},[92,35668,148],{"class":98},[92,35670,32051],{"class":151},[92,35672,31447],{"class":102},[92,35674,35675,35677,35679,35681],{"class":94,"line":1728},[92,35676,32058],{"class":5196},[92,35678,148],{"class":98},[92,35680,31457],{"class":151},[92,35682,31447],{"class":102},[92,35684,35685],{"class":94,"line":1733},[92,35686,32069],{"class":161},[92,35688,35689,35691,35693,35695],{"class":94,"line":1738},[92,35690,32074],{"class":5196},[92,35692,148],{"class":98},[92,35694,498],{"class":151},[92,35696,109],{"class":102},[92,35698,35699,35701,35703,35705,35707,35709],{"class":94,"line":1743},[92,35700,32085],{"class":102},[92,35702,148],{"class":98},[92,35704,31515],{"class":102},[92,35706,31518],{"class":5196},[92,35708,148],{"class":98},[92,35710,32096],{"class":102},[92,35712,35713,35715,35717,35719],{"class":94,"line":1757},[92,35714,32101],{"class":5196},[92,35716,148],{"class":98},[92,35718,32051],{"class":151},[92,35720,31447],{"class":102},[92,35722,35723,35725,35727,35729],{"class":94,"line":1762},[92,35724,32112],{"class":5196},[92,35726,148],{"class":98},[92,35728,31457],{"class":151},[92,35730,31447],{"class":102},[92,35732,35733,35735,35737,35739],{"class":94,"line":2556},[92,35734,32123],{"class":5196},[92,35736,148],{"class":98},[92,35738,498],{"class":151},[92,35740,109],{"class":102},[92,35742,35743,35745],{"class":94,"line":2570},[92,35744,4069],{"class":98},[92,35746,32136],{"class":102},[92,35748,35749],{"class":94,"line":2578},[92,35750,2379],{"emptyLinePlaceholder":17},[92,35752,35753],{"class":94,"line":2583},[92,35754,32145],{"class":161},[92,35756,35757],{"class":94,"line":2589},[92,35758,32150],{"class":161},[92,35760,35761],{"class":94,"line":2595},[92,35762,2379],{"emptyLinePlaceholder":17},[92,35764,35765],{"class":94,"line":2600},[92,35766,32159],{"class":161},[92,35768,35769,35771,35773],{"class":94,"line":7928},[92,35770,31928],{"class":98},[92,35772,32166],{"class":1942},[92,35774,32169],{"class":102},[92,35776,35777,35779,35781,35783,35785,35787,35789,35791,35793],{"class":94,"line":7952},[92,35778,31218],{"class":102},[92,35780,148],{"class":98},[92,35782,30432],{"class":102},[92,35784,31225],{"class":207},[92,35786,1683],{"class":98},[92,35788,31230],{"class":102},[92,35790,1680],{"class":98},[92,35792,32188],{"class":207},[92,35794,109],{"class":102},[92,35796,35797],{"class":94,"line":7957},[92,35798,2379],{"emptyLinePlaceholder":17},[92,35800,35801],{"class":94,"line":7963},[92,35802,2379],{"emptyLinePlaceholder":17},[92,35804,35805],{"class":94,"line":7990},[92,35806,32203],{"class":161},[92,35808,35809],{"class":94,"line":7995},[92,35810,32208],{"class":161},[92,35812,35813],{"class":94,"line":8001},[92,35814,32213],{"class":161},[92,35816,35817,35819,35821,35823,35825,35827,35829],{"class":94,"line":8013},[92,35818,32218],{"class":102},[92,35820,148],{"class":98},[92,35822,32223],{"class":102},[92,35824,32226],{"class":5196},[92,35826,148],{"class":98},[92,35828,32231],{"class":151},[92,35830,109],{"class":102},[92,35832,35833],{"class":94,"line":8025},[92,35834,2379],{"emptyLinePlaceholder":17},[92,35836,35837],{"class":94,"line":8037},[92,35838,32242],{"class":161},[92,35840,35841,35843,35845],{"class":94,"line":9696},[92,35842,32247],{"class":102},[92,35844,148],{"class":98},[92,35846,32252],{"class":102},[92,35848,35849],{"class":94,"line":9721},[92,35850,2379],{"emptyLinePlaceholder":17},[92,35852,35853],{"class":94,"line":9744},[92,35854,32261],{"class":161},[92,35856,35857,35859,35861],{"class":94,"line":9768},[92,35858,31270],{"class":102},[92,35860,148],{"class":98},[92,35862,32270],{"class":102},[92,35864,35865],{"class":94,"line":9773},[92,35866,32275],{"class":161},[92,35868,35869],{"class":94,"line":9778},[92,35870,32280],{"class":161},[92,35872,35873],{"class":94,"line":9783},[92,35874,32285],{"class":161},[92,35876,35877,35879,35881],{"class":94,"line":9792},[92,35878,32290],{"class":102},[92,35880,148],{"class":98},[92,35882,32295],{"class":102},[92,35884,35885],{"class":94,"line":9797},[92,35886,2379],{"emptyLinePlaceholder":17},[92,35888,35889],{"class":94,"line":9803},[92,35890,2379],{"emptyLinePlaceholder":17},[92,35892,35893],{"class":94,"line":9824},[92,35894,32308],{"class":161},[92,35896,35897],{"class":94,"line":9830},[92,35898,32313],{"class":161},[92,35900,35901,35903,35905],{"class":94,"line":9844},[92,35902,32318],{"class":102},[92,35904,148],{"class":98},[92,35906,32323],{"class":151},[92,35908,35909],{"class":94,"line":9850},[92,35910,32328],{"class":161},[92,35912,35913,35915,35917],{"class":94,"line":9877},[92,35914,32333],{"class":102},[92,35916,148],{"class":98},[92,35918,32338],{"class":102},[92,35920,35921],{"class":94,"line":9886},[92,35922,32343],{"class":161},[92,35924,35925,35927,35929],{"class":94,"line":9892},[92,35926,32348],{"class":102},[92,35928,148],{"class":98},[92,35930,32338],{"class":102},[92,35932,35933],{"class":94,"line":9900},[92,35934,32357],{"class":161},[92,35936,35937,35939,35941],{"class":94,"line":9905},[92,35938,32362],{"class":102},[92,35940,148],{"class":98},[92,35942,32338],{"class":102},[92,35944,35945],{"class":94,"line":16584},[92,35946,32371],{"class":161},[92,35948,35949,35951,35953],{"class":94,"line":16590},[92,35950,32376],{"class":102},[92,35952,148],{"class":98},[92,35954,32338],{"class":102},[92,35956,35957],{"class":94,"line":16613},[92,35958,2379],{"emptyLinePlaceholder":17},[92,35960,35961],{"class":94,"line":16619},[92,35962,32389],{"class":161},[92,35964,35965,35967,35969],{"class":94,"line":16642},[92,35966,32394],{"class":102},[92,35968,148],{"class":98},[92,35970,32399],{"class":102},[92,35972,35973],{"class":94,"line":16656},[92,35974,2379],{"emptyLinePlaceholder":17},[92,35976,35977],{"class":94,"line":16676},[92,35978,2379],{"emptyLinePlaceholder":17},[92,35980,35981],{"class":94,"line":16682},[92,35982,32412],{"class":161},[92,35984,35985,35987,35989,35991,35993],{"class":94,"line":16693},[92,35986,3180],{"class":98},[92,35988,32419],{"class":102},[92,35990,26024],{"class":98},[92,35992,32424],{"class":151},[92,35994,32427],{"class":102},[92,35996,35997,35999,36001,36003,36005,36007,36009,36011,36013,36015,36017],{"class":94,"line":16716},[92,35998,32432],{"class":151},[92,36000,103],{"class":102},[92,36002,32437],{"class":207},[92,36004,32440],{"class":151},[92,36006,687],{"class":207},[92,36008,32440],{"class":151},[92,36010,354],{"class":207},[92,36012,32449],{"class":102},[92,36014,635],{"class":98},[92,36016,320],{"class":151},[92,36018,30478],{"class":102},[92,36020,36021,36023,36025,36027,36029,36031],{"class":94,"line":16738},[92,36022,32432],{"class":151},[92,36024,103],{"class":102},[92,36026,32464],{"class":207},[92,36028,558],{"class":98},[92,36030,549],{"class":151},[92,36032,109],{"class":102},[92,36034,36035],{"class":94,"line":16743},[92,36036,2379],{"emptyLinePlaceholder":17},[92,36038,36039],{"class":94,"line":16749},[92,36040,32479],{"class":161},[92,36042,36043],{"class":94,"line":16763},[92,36044,32484],{"class":161},[92,36046,36047,36049,36051],{"class":94,"line":16776},[92,36048,32489],{"class":102},[92,36050,148],{"class":98},[92,36052,32323],{"class":151},[92,36054,36055],{"class":94,"line":16781},[92,36056,32498],{"class":161},[92,36058,36059,36061,36063],{"class":94,"line":16795},[92,36060,32503],{"class":102},[92,36062,148],{"class":98},[92,36064,3064],{"class":151},[92,36066,36067],{"class":94,"line":16800},[92,36068,32512],{"class":161},[92,36070,36071,36073,36075],{"class":94,"line":16806},[92,36072,32517],{"class":102},[92,36074,148],{"class":98},[92,36076,32323],{"class":151},[92,36078,36079],{"class":94,"line":16811},[92,36080,32526],{"class":161},[92,36082,36083,36085,36087],{"class":94,"line":16825},[92,36084,32531],{"class":102},[92,36086,148],{"class":98},[92,36088,3064],{"class":151},[92,36090,36091],{"class":94,"line":16830},[92,36092,32540],{"class":161},[92,36094,36095,36097,36099],{"class":94,"line":16835},[92,36096,32545],{"class":102},[92,36098,148],{"class":98},[92,36100,3064],{"class":151},[92,36102,36103],{"class":94,"line":16849},[92,36104,32554],{"class":161},[92,36106,36107,36109,36111],{"class":94,"line":16861},[92,36108,32559],{"class":102},[92,36110,148],{"class":98},[92,36112,3064],{"class":151},[92,36114,36115],{"class":94,"line":16866},[92,36116,32568],{"class":161},[92,36118,36119,36121,36123,36125,36127],{"class":94,"line":16879},[92,36120,3382],{"class":98},[92,36122,31582],{"class":102},[92,36124,26024],{"class":98},[92,36126,31587],{"class":151},[92,36128,32581],{"class":102},[92,36130,36131],{"class":94,"line":16884},[92,36132,32586],{"class":161},[92,36134,36135,36137,36139],{"class":94,"line":16889},[92,36136,32591],{"class":102},[92,36138,148],{"class":98},[92,36140,32596],{"class":102},[92,36142,36143],{"class":94,"line":16894},[92,36144,32601],{"class":161},[92,36146,36147,36149,36151],{"class":94,"line":16907},[92,36148,32606],{"class":102},[92,36150,148],{"class":98},[92,36152,32611],{"class":102},[92,36154,36155],{"class":94,"line":16912},[92,36156,32617],{"class":161},[92,36158,36159],{"class":94,"line":32614},[92,36160,32623],{"class":102},[92,36162,36163],{"class":94,"line":32620},[92,36164,32629],{"class":161},[92,36166,36167],{"class":94,"line":32626},[92,36168,32635],{"class":161},[92,36170,36171,36173,36175],{"class":94,"line":32632},[92,36172,32641],{"class":102},[92,36174,148],{"class":98},[92,36176,32646],{"class":102},[92,36178,36179],{"class":94,"line":32638},[92,36180,32652],{"class":161},[92,36182,36183,36185,36187,36189,36191,36193,36195],{"class":94,"line":32649},[92,36184,32658],{"class":102},[92,36186,148],{"class":98},[92,36188,32663],{"class":102},[92,36190,32666],{"class":5196},[92,36192,148],{"class":98},[92,36194,320],{"class":151},[92,36196,109],{"class":102},[92,36198,36199],{"class":94,"line":32655},[92,36200,32678],{"class":161},[92,36202,36203,36205,36207],{"class":94,"line":32675},[92,36204,32684],{"class":102},[92,36206,148],{"class":98},[92,36208,32689],{"class":102},[92,36210,36211],{"class":94,"line":32681},[92,36212,32695],{"class":161},[92,36214,36215],{"class":94,"line":32692},[92,36216,32701],{"class":102},[92,36218,36219],{"class":94,"line":32698},[92,36220,32707],{"class":161},[92,36222,36223],{"class":94,"line":32704},[92,36224,32713],{"class":102},[92,36226,36227],{"class":94,"line":32710},[92,36228,32719],{"class":161},[92,36230,36231],{"class":94,"line":32716},[92,36232,32725],{"class":102},[92,36234,36235],{"class":94,"line":32722},[92,36236,32731],{"class":161},[92,36238,36239,36241,36243,36245,36247,36249,36251],{"class":94,"line":32728},[92,36240,32737],{"class":102},[92,36242,9457],{"class":98},[92,36244,32742],{"class":102},[92,36246,558],{"class":98},[92,36248,32747],{"class":102},[92,36250,294],{"class":151},[92,36252,109],{"class":102},[92,36254,36255],{"class":94,"line":32734},[92,36256,32757],{"class":161},[92,36258,36259,36261,36263,36265,36267],{"class":94,"line":32754},[92,36260,32763],{"class":102},[92,36262,9457],{"class":98},[92,36264,32768],{"class":102},[92,36266,2928],{"class":98},[92,36268,32773],{"class":102},[92,36270,36271],{"class":94,"line":32760},[92,36272,32779],{"class":161},[92,36274,36275,36277,36279,36281,36283],{"class":94,"line":32776},[92,36276,32785],{"class":102},[92,36278,9457],{"class":98},[92,36280,32747],{"class":102},[92,36282,294],{"class":151},[92,36284,109],{"class":102},[92,36286,36287],{"class":94,"line":32782},[92,36288,32799],{"class":161},[92,36290,36291,36293,36295,36297,36299],{"class":94,"line":32796},[92,36292,3382],{"class":98},[92,36294,32807],{"class":102},[92,36296,26024],{"class":98},[92,36298,31587],{"class":151},[92,36300,32814],{"class":102},[92,36302,36303],{"class":94,"line":32802},[92,36304,32820],{"class":161},[92,36306,36307,36309,36311],{"class":94,"line":32817},[92,36308,32591],{"class":102},[92,36310,148],{"class":98},[92,36312,32596],{"class":102},[92,36314,36315],{"class":94,"line":32823},[92,36316,32835],{"class":161},[92,36318,36319,36321,36323],{"class":94,"line":32832},[92,36320,32606],{"class":102},[92,36322,148],{"class":98},[92,36324,32611],{"class":102},[92,36326,36327],{"class":94,"line":32838},[92,36328,32850],{"class":161},[92,36330,36331],{"class":94,"line":32847},[92,36332,32856],{"class":102},[92,36334,36335],{"class":94,"line":32853},[92,36336,36337],{"class":161},"            # 验证时不计算梯度以节省内存\u002F计算\n",[92,36339,36340,36342],{"class":94,"line":32859},[92,36341,32862],{"class":98},[92,36343,32865],{"class":102},[92,36345,36346],{"class":94,"line":32868},[92,36347,32871],{"class":161},[92,36349,36350,36353,36355],{"class":94,"line":32874},[92,36351,36352],{"class":102},"                output",[92,36354,148],{"class":98},[92,36356,32646],{"class":102},[92,36358,36359],{"class":94,"line":32885},[92,36360,32888],{"class":161},[92,36362,36363,36366,36368,36370,36372,36374,36376],{"class":94,"line":32891},[92,36364,36365],{"class":102},"                pre_lab",[92,36367,148],{"class":98},[92,36369,32663],{"class":102},[92,36371,32666],{"class":5196},[92,36373,148],{"class":98},[92,36375,320],{"class":151},[92,36377,109],{"class":102},[92,36379,36380],{"class":94,"line":32910},[92,36381,32913],{"class":161},[92,36383,36384,36387,36389],{"class":94,"line":32916},[92,36385,36386],{"class":102},"                val_batch_loss",[92,36388,148],{"class":98},[92,36390,32689],{"class":102},[92,36392,36393],{"class":94,"line":32927},[92,36394,32930],{"class":161},[92,36396,36397,36400,36402,36405,36407,36409,36411],{"class":94,"line":32933},[92,36398,36399],{"class":102},"                val_loss",[92,36401,9457],{"class":98},[92,36403,36404],{"class":102},"val_batch_loss.item()",[92,36406,558],{"class":98},[92,36408,32747],{"class":102},[92,36410,294],{"class":151},[92,36412,109],{"class":102},[92,36414,36415,36418,36420,36422,36424],{"class":94,"line":32953},[92,36416,36417],{"class":102},"                val_corrects",[92,36419,9457],{"class":98},[92,36421,32768],{"class":102},[92,36423,2928],{"class":98},[92,36425,32773],{"class":102},[92,36427,36428],{"class":94,"line":32969},[92,36429,36430],{"class":161},"            # 当前用于验证的样本数量\n",[92,36432,36433,36436,36438,36440,36442],{"class":94,"line":32975},[92,36434,36435],{"class":102},"            val_num",[92,36437,9457],{"class":98},[92,36439,32747],{"class":102},[92,36441,294],{"class":151},[92,36443,109],{"class":102},[92,36445,36446],{"class":94,"line":32989},[92,36447,32992],{"class":161},[92,36449,36450],{"class":94,"line":32995},[92,36451,32998],{"class":161},[92,36453,36454,36456,36458],{"class":94,"line":33001},[92,36455,33004],{"class":102},[92,36457,687],{"class":98},[92,36459,33009],{"class":102},[92,36461,36462],{"class":94,"line":33012},[92,36463,33015],{"class":161},[92,36465,36466],{"class":94,"line":33018},[92,36467,33021],{"class":161},[92,36469,36470,36472,36474],{"class":94,"line":33024},[92,36471,33027],{"class":102},[92,36473,687],{"class":98},[92,36475,33009],{"class":102},[92,36477,36478],{"class":94,"line":33034},[92,36479,33037],{"class":161},[92,36481,36482,36484,36486],{"class":94,"line":33040},[92,36483,33043],{"class":102},[92,36485,687],{"class":98},[92,36487,33048],{"class":102},[92,36489,36490],{"class":94,"line":33051},[92,36491,33054],{"class":161},[92,36493,36494,36496,36498],{"class":94,"line":33057},[92,36495,33060],{"class":102},[92,36497,687],{"class":98},[92,36499,33048],{"class":102},[92,36501,36502],{"class":94,"line":33067},[92,36503,2379],{"emptyLinePlaceholder":17},[92,36505,36506],{"class":94,"line":33072},[92,36507,33075],{"class":161},[92,36509,36510,36512,36514,36516,36518,36520,36522,36524,36526,36528,36530,36532,36534,36536,36538,36540,36542,36544,36546,36548],{"class":94,"line":33078},[92,36511,32432],{"class":151},[92,36513,103],{"class":102},[92,36515,3571],{"class":207},[92,36517,32440],{"class":151},[92,36519,33089],{"class":207},[92,36521,999],{"class":151},[92,36523,33094],{"class":98},[92,36525,1049],{"class":151},[92,36527,33099],{"class":207},[92,36529,999],{"class":151},[92,36531,33094],{"class":98},[92,36533,1049],{"class":151},[92,36535,3571],{"class":207},[92,36537,33110],{"class":102},[92,36539,635],{"class":98},[92,36541,320],{"class":151},[92,36543,33117],{"class":102},[92,36545,635],{"class":98},[92,36547,320],{"class":151},[92,36549,33124],{"class":102},[92,36551,36552,36554,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584,36586,36588,36590],{"class":94,"line":33127},[92,36553,32432],{"class":151},[92,36555,103],{"class":102},[92,36557,3571],{"class":207},[92,36559,32440],{"class":151},[92,36561,33138],{"class":207},[92,36563,999],{"class":151},[92,36565,33094],{"class":98},[92,36567,1049],{"class":151},[92,36569,33147],{"class":207},[92,36571,999],{"class":151},[92,36573,33094],{"class":98},[92,36575,1049],{"class":151},[92,36577,3571],{"class":207},[92,36579,33158],{"class":102},[92,36581,635],{"class":98},[92,36583,320],{"class":151},[92,36585,33165],{"class":102},[92,36587,635],{"class":98},[92,36589,320],{"class":151},[92,36591,33124],{"class":102},[92,36593,36594],{"class":94,"line":33174},[92,36595,2379],{"emptyLinePlaceholder":17},[92,36597,36598],{"class":94,"line":33179},[92,36599,33182],{"class":161},[92,36601,36602,36604,36606,36608,36610,36612,36614],{"class":94,"line":33185},[92,36603,2476],{"class":98},[92,36605,33190],{"class":102},[92,36607,635],{"class":98},[92,36609,320],{"class":151},[92,36611,1043],{"class":102},[92,36613,1063],{"class":98},[92,36615,33201],{"class":102},[92,36617,36618],{"class":94,"line":33204},[92,36619,33207],{"class":161},[92,36621,36622,36624,36626,36628,36630,36632,36634],{"class":94,"line":33210},[92,36623,33213],{"class":102},[92,36625,142],{"class":151},[92,36627,148],{"class":98},[92,36629,33220],{"class":102},[92,36631,635],{"class":98},[92,36633,320],{"class":151},[92,36635,33227],{"class":102},[92,36637,36638],{"class":94,"line":33230},[92,36639,33233],{"class":161},[92,36641,36642],{"class":94,"line":33236},[92,36643,33239],{"class":161},[92,36645,36646,36648,36650],{"class":94,"line":33242},[92,36647,33245],{"class":102},[92,36649,148],{"class":98},[92,36651,32295],{"class":102},[92,36653,36654],{"class":94,"line":33252},[92,36655,2379],{"emptyLinePlaceholder":17},[92,36657,36658],{"class":94,"line":33257},[92,36659,33260],{"class":161},[92,36661,36662,36664,36666,36668,36670],{"class":94,"line":33263},[92,36663,33266],{"class":102},[92,36665,148],{"class":98},[92,36667,33271],{"class":102},[92,36669,635],{"class":98},[92,36671,33276],{"class":102},[92,36673,36674,36676,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708],{"class":94,"line":33279},[92,36675,32432],{"class":151},[92,36677,103],{"class":102},[92,36679,33286],{"class":207},[92,36681,999],{"class":151},[92,36683,33291],{"class":98},[92,36685,1049],{"class":151},[92,36687,647],{"class":207},[92,36689,999],{"class":151},[92,36691,33291],{"class":98},[92,36693,1049],{"class":151},[92,36695,33304],{"class":207},[92,36697,33307],{"class":102},[92,36699,33310],{"class":98},[92,36701,1010],{"class":151},[92,36703,33315],{"class":102},[92,36705,431],{"class":98},[92,36707,1010],{"class":151},[92,36709,30478],{"class":102},[92,36711,36712],{"class":94,"line":33324},[92,36713,36714],{"class":161},"    # 选择最优参数并保存\n",[92,36716,36717],{"class":94,"line":33330},[92,36718,36719],{"class":161},"    # 保存最佳模型权重字典\n",[92,36721,36722,36725,36727],{"class":94,"line":33336},[92,36723,36724],{"class":102},"    torch.save(best_model_wts,",[92,36726,33348],{"class":207},[92,36728,109],{"class":102},[92,36730,36731],{"class":94,"line":33342},[92,36732,33368],{"class":161},[92,36734,36735,36737,36739,36741,36743,36745],{"class":94,"line":33353},[92,36736,33374],{"class":102},[92,36738,148],{"class":98},[92,36740,33379],{"class":102},[92,36742,33382],{"class":5196},[92,36744,148],{"class":98},[92,36746,1525],{"class":102},[92,36748,36749,36751,36753,36755],{"class":94,"line":33359},[92,36750,33392],{"class":207},[92,36752,962],{"class":102},[92,36754,33397],{"class":151},[92,36756,33400],{"class":102},[92,36758,36759,36761],{"class":94,"line":33365},[92,36760,33406],{"class":207},[92,36762,33409],{"class":102},[92,36764,36765,36767],{"class":94,"line":33371},[92,36766,33415],{"class":207},[92,36768,33418],{"class":102},[92,36770,36771,36773],{"class":94,"line":33389},[92,36772,33424],{"class":207},[92,36774,33427],{"class":102},[92,36776,36777,36779],{"class":94,"line":33403},[92,36778,33433],{"class":207},[92,36780,33436],{"class":102},[92,36782,36783],{"class":94,"line":33412},[92,36784,33442],{"class":102},[92,36786,36787],{"class":94,"line":33421},[92,36788,33448],{"class":161},[92,36790,36791,36793],{"class":94,"line":33430},[92,36792,4069],{"class":98},[92,36794,33456],{"class":102},[92,36796,36797],{"class":94,"line":33439},[92,36798,2379],{"emptyLinePlaceholder":17},[92,36800,36801],{"class":94,"line":33445},[92,36802,33467],{"class":161},[92,36804,36805,36807,36809],{"class":94,"line":33451},[92,36806,31928],{"class":98},[92,36808,33475],{"class":1942},[92,36810,33478],{"class":102},[92,36812,36813],{"class":94,"line":33459},[92,36814,33484],{"class":161},[92,36816,36817,36819,36821,36823,36825,36827,36829,36831],{"class":94,"line":33464},[92,36818,33490],{"class":102},[92,36820,31674],{"class":5196},[92,36822,148],{"class":98},[92,36824,103],{"class":102},[92,36826,601],{"class":151},[92,36828,481],{"class":102},[92,36830,396],{"class":151},[92,36832,30478],{"class":102},[92,36834,36835],{"class":94,"line":33470},[92,36836,33510],{"class":161},[92,36838,36839],{"class":94,"line":33481},[92,36840,33516],{"class":161},[92,36842,36843],{"class":94,"line":33487},[92,36844,33522],{"class":161},[92,36846,36847,36849,36851,36853,36855,36857,36859],{"class":94,"line":33507},[92,36848,31708],{"class":102},[92,36850,320],{"class":151},[92,36852,481],{"class":102},[92,36854,180],{"class":151},[92,36856,481],{"class":102},[92,36858,320],{"class":151},[92,36860,109],{"class":102},[92,36862,36863],{"class":94,"line":33513},[92,36864,33545],{"class":161},[92,36866,36867],{"class":94,"line":33519},[92,36868,33551],{"class":161},[92,36870,36871],{"class":94,"line":33525},[92,36872,33557],{"class":161},[92,36874,36875],{"class":94,"line":33542},[92,36876,33563],{"class":161},[92,36878,36879],{"class":94,"line":33548},[92,36880,33569],{"class":161},[92,36882,36883,36885,36887,36889,36891,36893,36895,36897,36899],{"class":94,"line":33554},[92,36884,33575],{"class":102},[92,36886,33578],{"class":207},[92,36888,33581],{"class":102},[92,36890,33584],{"class":207},[92,36892,481],{"class":102},[92,36894,33589],{"class":5196},[92,36896,148],{"class":98},[92,36898,33594],{"class":207},[92,36900,109],{"class":102},[92,36902,36903,36905,36907,36909,36911,36913,36915,36917,36919],{"class":94,"line":33560},[92,36904,33575],{"class":102},[92,36906,33578],{"class":207},[92,36908,33606],{"class":102},[92,36910,33609],{"class":207},[92,36912,481],{"class":102},[92,36914,33589],{"class":5196},[92,36916,148],{"class":98},[92,36918,33618],{"class":207},[92,36920,109],{"class":102},[92,36922,36923],{"class":94,"line":33566},[92,36924,33626],{"class":161},[92,36926,36927],{"class":94,"line":33572},[92,36928,33632],{"class":102},[92,36930,36931],{"class":94,"line":33599},[92,36932,33638],{"class":161},[92,36934,36935,36937,36939],{"class":94,"line":33623},[92,36936,33644],{"class":102},[92,36938,33647],{"class":207},[92,36940,109],{"class":102},[92,36942,36943,36945,36947],{"class":94,"line":33629},[92,36944,33655],{"class":102},[92,36946,33658],{"class":207},[92,36948,109],{"class":102},[92,36950,36951],{"class":94,"line":33635},[92,36952,33666],{"class":161},[92,36954,36955,36957,36959,36961,36963,36965,36967],{"class":94,"line":33641},[92,36956,31708],{"class":102},[92,36958,320],{"class":151},[92,36960,481],{"class":102},[92,36962,180],{"class":151},[92,36964,481],{"class":102},[92,36966,180],{"class":151},[92,36968,109],{"class":102},[92,36970,36971,36973,36975,36977,36979,36981,36983,36985,36987],{"class":94,"line":33652},[92,36972,33575],{"class":102},[92,36974,33578],{"class":207},[92,36976,33693],{"class":102},[92,36978,33584],{"class":207},[92,36980,481],{"class":102},[92,36982,33589],{"class":5196},[92,36984,148],{"class":98},[92,36986,33704],{"class":207},[92,36988,109],{"class":102},[92,36990,36991,36993,36995,36997,36999,37001,37003,37005,37007],{"class":94,"line":33663},[92,36992,33575],{"class":102},[92,36994,33578],{"class":207},[92,36996,33716],{"class":102},[92,36998,33609],{"class":207},[92,37000,481],{"class":102},[92,37002,33589],{"class":5196},[92,37004,148],{"class":98},[92,37006,33727],{"class":207},[92,37008,109],{"class":102},[92,37010,37011],{"class":94,"line":33669},[92,37012,33735],{"class":161},[92,37014,37015],{"class":94,"line":33686},[92,37016,33632],{"class":102},[92,37018,37019,37021,37023],{"class":94,"line":33709},[92,37020,33644],{"class":102},[92,37022,33578],{"class":207},[92,37024,109],{"class":102},[92,37026,37027,37029,37031],{"class":94,"line":33732},[92,37028,33655],{"class":102},[92,37030,33757],{"class":207},[92,37032,109],{"class":102},[92,37034,37035],{"class":94,"line":33738},[92,37036,33765],{"class":102},[92,37038,37039],{"class":94,"line":33743},[92,37040,2379],{"emptyLinePlaceholder":17},[92,37042,37043],{"class":94,"line":33752},[92,37044,33776],{"class":161},[92,37046,37047,37049,37051,37053,37055],{"class":94,"line":33762},[92,37048,1510],{"class":98},[92,37050,31201],{"class":151},[92,37052,2928],{"class":98},[92,37054,31206],{"class":207},[92,37056,3718],{"class":102},[92,37058,37059],{"class":94,"line":33768},[92,37060,33795],{"class":161},[92,37062,37063,37066,37068],{"class":94,"line":33773},[92,37064,37065],{"class":102},"    AlexNet",[92,37067,148],{"class":98},[92,37069,37070],{"class":102},"AlexNet()\n",[92,37072,37073,37075,37077],{"class":94,"line":33779},[92,37074,33812],{"class":102},[92,37076,148],{"class":98},[92,37078,33817],{"class":102},[92,37080,37081,37083,37085,37088,37090,37092,37094],{"class":94,"line":33792},[92,37082,33374],{"class":102},[92,37084,148],{"class":98},[92,37086,37087],{"class":102},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[92,37089,33830],{"class":5196},[92,37091,148],{"class":98},[92,37093,803],{"class":151},[92,37095,109],{"class":102},[92,37097,37098],{"class":94,"line":33798},[92,37099,33842],{"class":102},[46,37101,37102],{"start":1158},[49,37103,33855],{},[83,37105,37107],{"className":30359,"code":37106,"language":30361,"meta":10,"style":10},"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",[89,37108,37109,37115,37125,37135,37145,37149,37159,37169,37180,37184,37188,37192,37200,37216,37226,37242,37252,37266,37270,37280,37290,37300,37306,37310,37314,37322,37326,37342,37350,37354,37358,37366,37374,37378,37382,37386,37390,37396,37400,37410,37418,37426,37430,37434,37438,37446,37450,37466,37470,37474,37478,37490,37494,37506,37510,37514,37526,37530,37540,37544,37548,37560,37564,37572,37576,37580,37588,37592,37600,37604,37608,37612,37616,37620,37636,37644,37648,37652,37700,37706,37710,37720,37728,37736,37740,37744,37748,37752,37760,37764,37780,37784,37792,37800],{"__ignoreMap":10},[92,37110,37111,37113],{"class":94,"line":95},[92,37112,30373],{"class":98},[92,37114,30376],{"class":102},[92,37116,37117,37119,37121,37123],{"class":94,"line":11},[92,37118,30373],{"class":98},[92,37120,31396],{"class":102},[92,37122,31364],{"class":98},[92,37124,31401],{"class":102},[92,37126,37127,37129,37131,37133],{"class":94,"line":1158},[92,37128,30718],{"class":98},[92,37130,33883],{"class":102},[92,37132,30373],{"class":98},[92,37134,33888],{"class":102},[92,37136,37137,37139,37141,37143],{"class":94,"line":1173},[92,37138,30718],{"class":98},[92,37140,31379],{"class":102},[92,37142,30373],{"class":98},[92,37144,31384],{"class":102},[92,37146,37147],{"class":94,"line":1179},[92,37148,33903],{"class":161},[92,37150,37151,37153,37155,37157],{"class":94,"line":1193},[92,37152,30718],{"class":98},[92,37154,31349],{"class":102},[92,37156,30373],{"class":98},[92,37158,31354],{"class":102},[92,37160,37161,37163,37165,37167],{"class":94,"line":1199},[92,37162,30718],{"class":98},[92,37164,31895],{"class":102},[92,37166,30373],{"class":98},[92,37168,35538],{"class":102},[92,37170,37171,37173,37176,37178],{"class":94,"line":1290},[92,37172,30718],{"class":98},[92,37174,37175],{"class":102}," 练习.AlexNet.model ",[92,37177,30373],{"class":98},[92,37179,35538],{"class":102},[92,37181,37182],{"class":94,"line":1296},[92,37183,2379],{"emptyLinePlaceholder":17},[92,37185,37186],{"class":94,"line":1308},[92,37187,2379],{"emptyLinePlaceholder":17},[92,37189,37190],{"class":94,"line":1591},[92,37191,33932],{"class":161},[92,37193,37194,37196,37198],{"class":94,"line":1596},[92,37195,31928],{"class":98},[92,37197,33939],{"class":1942},[92,37199,31934],{"class":102},[92,37201,37202,37204,37206,37208,37210,37212,37214],{"class":94,"line":1602},[92,37203,33946],{"class":102},[92,37205,148],{"class":98},[92,37207,31436],{"class":102},[92,37209,31439],{"class":5196},[92,37211,148],{"class":98},[92,37213,31444],{"class":207},[92,37215,31447],{"class":102},[92,37217,37218,37220,37222,37224],{"class":94,"line":1607},[92,37219,33963],{"class":5196},[92,37221,148],{"class":98},[92,37223,33968],{"class":151},[92,37225,31447],{"class":102},[92,37227,37228,37230,37232,37234,37236,37238,37240],{"class":94,"line":1621},[92,37229,33975],{"class":5196},[92,37231,148],{"class":98},[92,37233,31474],{"class":102},[92,37235,31477],{"class":5196},[92,37237,148],{"class":98},[92,37239,35430],{"class":151},[92,37241,31485],{"class":102},[92,37243,37244,37246,37248,37250],{"class":94,"line":1626},[92,37245,33992],{"class":5196},[92,37247,148],{"class":98},[92,37249,31457],{"class":151},[92,37251,109],{"class":102},[92,37253,37254,37256,37258,37260,37262,37264],{"class":94,"line":1632},[92,37255,34003],{"class":102},[92,37257,148],{"class":98},[92,37259,31515],{"class":102},[92,37261,31518],{"class":5196},[92,37263,148],{"class":98},[92,37265,34014],{"class":102},[92,37267,37268],{"class":94,"line":1653},[92,37269,34019],{"class":161},[92,37271,37272,37274,37276,37278],{"class":94,"line":1658},[92,37273,34024],{"class":5196},[92,37275,148],{"class":98},[92,37277,320],{"class":151},[92,37279,31447],{"class":102},[92,37281,37282,37284,37286,37288],{"class":94,"line":1672},[92,37283,34035],{"class":5196},[92,37285,148],{"class":98},[92,37287,31457],{"class":151},[92,37289,31447],{"class":102},[92,37291,37292,37294,37296,37298],{"class":94,"line":1677},[92,37293,34046],{"class":5196},[92,37295,148],{"class":98},[92,37297,294],{"class":151},[92,37299,109],{"class":102},[92,37301,37302,37304],{"class":94,"line":1706},[92,37303,4069],{"class":98},[92,37305,34059],{"class":102},[92,37307,37308],{"class":94,"line":1711},[92,37309,2379],{"emptyLinePlaceholder":17},[92,37311,37312],{"class":94,"line":1728},[92,37313,34068],{"class":161},[92,37315,37316,37318,37320],{"class":94,"line":1733},[92,37317,31928],{"class":98},[92,37319,34075],{"class":1942},[92,37321,34078],{"class":102},[92,37323,37324],{"class":94,"line":1738},[92,37325,34083],{"class":161},[92,37327,37328,37330,37332,37334,37336,37338,37340],{"class":94,"line":1743},[92,37329,31218],{"class":102},[92,37331,148],{"class":98},[92,37333,31225],{"class":207},[92,37335,1683],{"class":98},[92,37337,31230],{"class":102},[92,37339,1680],{"class":98},[92,37341,34100],{"class":207},[92,37343,37344,37346,37348],{"class":94,"line":1757},[92,37345,31270],{"class":102},[92,37347,148],{"class":98},[92,37349,32270],{"class":102},[92,37351,37352],{"class":94,"line":1762},[92,37353,2379],{"emptyLinePlaceholder":17},[92,37355,37356],{"class":94,"line":2556},[92,37357,34117],{"class":161},[92,37359,37360,37362,37364],{"class":94,"line":2570},[92,37361,34122],{"class":102},[92,37363,148],{"class":98},[92,37365,32323],{"class":151},[92,37367,37368,37370,37372],{"class":94,"line":2578},[92,37369,34131],{"class":102},[92,37371,148],{"class":98},[92,37373,3064],{"class":151},[92,37375,37376],{"class":94,"line":2583},[92,37377,2379],{"emptyLinePlaceholder":17},[92,37379,37380],{"class":94,"line":2589},[92,37381,34144],{"class":161},[92,37383,37384],{"class":94,"line":2595},[92,37385,34149],{"class":161},[92,37387,37388],{"class":94,"line":2600},[92,37389,34154],{"class":161},[92,37391,37392,37394],{"class":94,"line":7928},[92,37393,34159],{"class":98},[92,37395,32865],{"class":102},[92,37397,37398],{"class":94,"line":7952},[92,37399,34166],{"class":161},[92,37401,37402,37404,37406,37408],{"class":94,"line":7957},[92,37403,3382],{"class":98},[92,37405,34173],{"class":102},[92,37407,26024],{"class":98},[92,37409,34178],{"class":102},[92,37411,37412,37414,37416],{"class":94,"line":7963},[92,37413,34183],{"class":102},[92,37415,148],{"class":98},[92,37417,34188],{"class":102},[92,37419,37420,37422,37424],{"class":94,"line":7990},[92,37421,34193],{"class":102},[92,37423,148],{"class":98},[92,37425,34198],{"class":102},[92,37427,37428],{"class":94,"line":7995},[92,37429,34203],{"class":161},[92,37431,37432],{"class":94,"line":8001},[92,37433,32856],{"class":102},[92,37435,37436],{"class":94,"line":8013},[92,37437,34212],{"class":161},[92,37439,37440,37442,37444],{"class":94,"line":8025},[92,37441,32641],{"class":102},[92,37443,148],{"class":98},[92,37445,34221],{"class":102},[92,37447,37448],{"class":94,"line":8037},[92,37449,34226],{"class":161},[92,37451,37452,37454,37456,37458,37460,37462,37464],{"class":94,"line":9696},[92,37453,32658],{"class":102},[92,37455,148],{"class":98},[92,37457,32663],{"class":102},[92,37459,32666],{"class":5196},[92,37461,148],{"class":98},[92,37463,320],{"class":151},[92,37465,109],{"class":102},[92,37467,37468],{"class":94,"line":9721},[92,37469,34247],{"class":161},[92,37471,37472],{"class":94,"line":9744},[92,37473,34252],{"class":161},[92,37475,37476],{"class":94,"line":9768},[92,37477,34257],{"class":161},[92,37479,37480,37482,37484,37486,37488],{"class":94,"line":9773},[92,37481,34262],{"class":102},[92,37483,9457],{"class":98},[92,37485,32768],{"class":102},[92,37487,2928],{"class":98},[92,37489,34271],{"class":102},[92,37491,37492],{"class":94,"line":9778},[92,37493,34276],{"class":161},[92,37495,37496,37498,37500,37502,37504],{"class":94,"line":9783},[92,37497,34281],{"class":102},[92,37499,9457],{"class":98},[92,37501,34286],{"class":102},[92,37503,294],{"class":151},[92,37505,109],{"class":102},[92,37507,37508],{"class":94,"line":9792},[92,37509,2379],{"emptyLinePlaceholder":17},[92,37511,37512],{"class":94,"line":9797},[92,37513,34299],{"class":161},[92,37515,37516,37518,37520,37522,37524],{"class":94,"line":9803},[92,37517,34304],{"class":102},[92,37519,148],{"class":98},[92,37521,34309],{"class":102},[92,37523,687],{"class":98},[92,37525,34314],{"class":102},[92,37527,37528],{"class":94,"line":9824},[92,37529,34319],{"class":161},[92,37531,37532,37534,37536,37538],{"class":94,"line":9830},[92,37533,32432],{"class":151},[92,37535,103],{"class":102},[92,37537,34328],{"class":207},[92,37539,34331],{"class":102},[92,37541,37542],{"class":94,"line":9844},[92,37543,2379],{"emptyLinePlaceholder":17},[92,37545,37546],{"class":94,"line":9850},[92,37547,34340],{"class":161},[92,37549,37550,37552,37554,37556,37558],{"class":94,"line":9877},[92,37551,1510],{"class":98},[92,37553,31201],{"class":151},[92,37555,2928],{"class":98},[92,37557,31206],{"class":207},[92,37559,3718],{"class":102},[92,37561,37562],{"class":94,"line":9886},[92,37563,34357],{"class":161},[92,37565,37566,37568,37570],{"class":94,"line":9892},[92,37567,31270],{"class":102},[92,37569,148],{"class":98},[92,37571,37070],{"class":102},[92,37573,37574],{"class":94,"line":9900},[92,37575,34370],{"class":161},[92,37577,37578],{"class":94,"line":9905},[92,37579,34375],{"class":161},[92,37581,37582,37584,37586],{"class":94,"line":16584},[92,37583,34380],{"class":102},[92,37585,34383],{"class":207},[92,37587,30478],{"class":102},[92,37589,37590],{"class":94,"line":16590},[92,37591,34390],{"class":161},[92,37593,37594,37596,37598],{"class":94,"line":16613},[92,37595,34003],{"class":102},[92,37597,148],{"class":98},[92,37599,34399],{"class":102},[92,37601,37602],{"class":94,"line":16619},[92,37603,34404],{"class":161},[92,37605,37606],{"class":94,"line":16642},[92,37607,34409],{"class":102},[92,37609,37610],{"class":94,"line":16656},[92,37611,2379],{"emptyLinePlaceholder":17},[92,37613,37614],{"class":94,"line":16676},[92,37615,34418],{"class":161},[92,37617,37618],{"class":94,"line":16682},[92,37619,34423],{"class":161},[92,37621,37622,37624,37626,37628,37630,37632,37634],{"class":94,"line":16693},[92,37623,31218],{"class":102},[92,37625,148],{"class":98},[92,37627,31225],{"class":207},[92,37629,1683],{"class":98},[92,37631,31230],{"class":102},[92,37633,1680],{"class":98},[92,37635,34100],{"class":207},[92,37637,37638,37640,37642],{"class":94,"line":16716},[92,37639,31270],{"class":102},[92,37641,148],{"class":98},[92,37643,32270],{"class":102},[92,37645,37646],{"class":94,"line":16738},[92,37647,34452],{"class":161},[92,37649,37650],{"class":94,"line":16743},[92,37651,34457],{"class":161},[92,37653,37654,37656,37658,37660,37662,37664,37666,37668,37670,37672,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696,37698],{"class":94,"line":16749},[92,37655,34462],{"class":102},[92,37657,148],{"class":98},[92,37659,993],{"class":102},[92,37661,34469],{"class":207},[92,37663,481],{"class":102},[92,37665,34474],{"class":207},[92,37667,481],{"class":102},[92,37669,34479],{"class":207},[92,37671,481],{"class":102},[92,37673,34484],{"class":207},[92,37675,481],{"class":102},[92,37677,34489],{"class":207},[92,37679,481],{"class":102},[92,37681,34494],{"class":207},[92,37683,481],{"class":102},[92,37685,34499],{"class":207},[92,37687,481],{"class":102},[92,37689,34504],{"class":207},[92,37691,481],{"class":102},[92,37693,34509],{"class":207},[92,37695,481],{"class":102},[92,37697,34514],{"class":207},[92,37699,33227],{"class":102},[92,37701,37702,37704],{"class":94,"line":16763},[92,37703,34159],{"class":98},[92,37705,32865],{"class":102},[92,37707,37708],{"class":94,"line":16776},[92,37709,34527],{"class":161},[92,37711,37712,37714,37716,37718],{"class":94,"line":16781},[92,37713,3382],{"class":98},[92,37715,34534],{"class":102},[92,37717,26024],{"class":98},[92,37719,34178],{"class":102},[92,37721,37722,37724,37726],{"class":94,"line":16795},[92,37723,32591],{"class":102},[92,37725,148],{"class":98},[92,37727,32596],{"class":102},[92,37729,37730,37732,37734],{"class":94,"line":16800},[92,37731,32606],{"class":102},[92,37733,148],{"class":98},[92,37735,32611],{"class":102},[92,37737,37738],{"class":94,"line":16806},[92,37739,2379],{"emptyLinePlaceholder":17},[92,37741,37742],{"class":94,"line":16811},[92,37743,34563],{"class":161},[92,37745,37746],{"class":94,"line":16825},[92,37747,32856],{"class":102},[92,37749,37750],{"class":94,"line":16830},[92,37751,34572],{"class":161},[92,37753,37754,37756,37758],{"class":94,"line":16835},[92,37755,32641],{"class":102},[92,37757,148],{"class":98},[92,37759,32646],{"class":102},[92,37761,37762],{"class":94,"line":16849},[92,37763,34585],{"class":161},[92,37765,37766,37768,37770,37772,37774,37776,37778],{"class":94,"line":16861},[92,37767,32658],{"class":102},[92,37769,148],{"class":98},[92,37771,32663],{"class":102},[92,37773,32666],{"class":5196},[92,37775,148],{"class":98},[92,37777,320],{"class":151},[92,37779,109],{"class":102},[92,37781,37782],{"class":94,"line":16866},[92,37783,34606],{"class":161},[92,37785,37786,37788,37790],{"class":94,"line":16879},[92,37787,34611],{"class":102},[92,37789,148],{"class":98},[92,37791,34616],{"class":102},[92,37793,37794,37796,37798],{"class":94,"line":16884},[92,37795,34621],{"class":102},[92,37797,148],{"class":98},[92,37799,34626],{"class":102},[92,37801,37802,37804,37806,37808,37810,37812,37814,37816],{"class":94,"line":16889},[92,37803,34631],{"class":151},[92,37805,103],{"class":102},[92,37807,34636],{"class":207},[92,37809,34639],{"class":102},[92,37811,34642],{"class":207},[92,37813,481],{"class":102},[92,37815,34647],{"class":207},[92,37817,34650],{"class":102},[63,37819,37821],{"id":37820},"_22vgg","2.2.VGG",[21978,37823,37825],{"id":37824},"_221原理","2.2.1.原理",[38,37827,37828],{},[1441,37829],{"alt":10,"src":37830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[38,37832,37833],{},[1441,37834],{"alt":10,"src":37835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[38,37837,37838],{},[1441,37839],{"alt":10,"src":37840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[38,37842,37843],{},"参数详细描述：",[38,37845,37846],{},[1441,37847],{"alt":10,"src":37848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[38,37850,37851],{},[1441,37852],{"alt":10,"src":37853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[38,37855,37856],{},[1441,37857],{"alt":10,"src":37858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[38,37860,37861],{},[1441,37862],{"alt":10,"src":37863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[38,37865,37866],{},[1441,37867],{"alt":10,"src":37868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-022.png",[21978,37870,37872],{"id":37871},"_222代码实现","2.2.2.代码实现",[46,37874,37875],{},[49,37876,37877],{},"网络搭建",[83,37879,37881],{"className":30359,"code":37880,"language":30361,"meta":10,"style":10},"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",[89,37882,37883,37889,37901,37911,37921,37925,37942,37950,37969,37974,37979,37991,38029,38034,38070,38074,38103,38108,38113,38124,38160,38164,38200,38204,38232,38236,38241,38252,38288,38292,38328,38332,38368,38372,38400,38404,38409,38420,38457,38461,38497,38501,38537,38541,38569,38573,38578,38589,38625,38629,38665,38669,38705,38709,38737,38741,38746,38757,38762,38767,38772,38793,38797,38809,38813,38825,38829,38833,38838,38843,38858,38863,38873,38878,38893,38898,38917,38922,38931,38936,38946,38951,38956,38970,38975,38989,38997,39001,39005,39013,39024,39035,39046,39057,39068,39079,39085,39089,39094,39107,39127,39133,39142],{"__ignoreMap":10},[92,37884,37885,37887],{"class":94,"line":95},[92,37886,30373],{"class":98},[92,37888,30376],{"class":102},[92,37890,37891,37893,37896,37898],{"class":94,"line":11},[92,37892,30718],{"class":98},[92,37894,37895],{"class":102}," sympy.core.sympify ",[92,37897,30373],{"class":98},[92,37899,37900],{"class":102}," kernS\n",[92,37902,37903,37905,37907,37909],{"class":94,"line":1158},[92,37904,30718],{"class":98},[92,37906,30721],{"class":102},[92,37908,30373],{"class":98},[92,37910,30726],{"class":102},[92,37912,37913,37915,37917,37919],{"class":94,"line":1173},[92,37914,30718],{"class":98},[92,37916,30738],{"class":102},[92,37918,30373],{"class":98},[92,37920,30743],{"class":102},[92,37922,37923],{"class":94,"line":1179},[92,37924,2379],{"emptyLinePlaceholder":17},[92,37926,37927,37929,37932,37934,37936,37938,37940],{"class":94,"line":1193},[92,37928,14674],{"class":98},[92,37930,37931],{"class":1942}," VGG16",[92,37933,103],{"class":102},[92,37935,30759],{"class":1942},[92,37937,661],{"class":102},[92,37939,30764],{"class":1942},[92,37941,30767],{"class":102},[92,37943,37944,37946,37948],{"class":94,"line":1199},[92,37945,30782],{"class":98},[92,37947,30785],{"class":151},[92,37949,30788],{"class":102},[92,37951,37952,37954,37956,37959,37961,37963,37965,37967],{"class":94,"line":1290},[92,37953,30798],{"class":151},[92,37955,103],{"class":102},[92,37957,37958],{"class":151},"VGG16",[92,37960,12415],{"class":102},[92,37962,30804],{"class":151},[92,37964,30807],{"class":102},[92,37966,30810],{"class":151},[92,37968,1955],{"class":102},[92,37970,37971],{"class":94,"line":1296},[92,37972,37973],{"class":161},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[92,37975,37976],{"class":94,"line":1308},[92,37977,37978],{"class":161},"        # 这里用的是灰度图\n",[92,37980,37981,37983,37986,37988],{"class":94,"line":1591},[92,37982,30826],{"class":151},[92,37984,37985],{"class":102},".block1",[92,37987,148],{"class":98},[92,37989,37990],{"class":102},"nn.Sequential(\n",[92,37992,37993,37996,37998,38000,38002,38004,38006,38008,38010,38012,38014,38016,38018,38020,38022,38024,38026],{"class":94,"line":1596},[92,37994,37995],{"class":102},"            nn.Conv2d(",[92,37997,30837],{"class":5196},[92,37999,148],{"class":98},[92,38001,320],{"class":151},[92,38003,481],{"class":102},[92,38005,30846],{"class":5196},[92,38007,148],{"class":98},[92,38009,306],{"class":151},[92,38011,481],{"class":102},[92,38013,30855],{"class":5196},[92,38015,148],{"class":98},[92,38017,174],{"class":151},[92,38019,481],{"class":102},[92,38021,30864],{"class":5196},[92,38023,148],{"class":98},[92,38025,320],{"class":151},[92,38027,38028],{"class":102},"),\n",[92,38030,38031],{"class":94,"line":1602},[92,38032,38033],{"class":102},"            nn.ReLU(),\n",[92,38035,38036,38038,38040,38042,38044,38046,38048,38050,38052,38054,38056,38058,38060,38062,38064,38066,38068],{"class":94,"line":1607},[92,38037,37995],{"class":102},[92,38039,30837],{"class":5196},[92,38041,148],{"class":98},[92,38043,306],{"class":151},[92,38045,481],{"class":102},[92,38047,30846],{"class":5196},[92,38049,148],{"class":98},[92,38051,306],{"class":151},[92,38053,481],{"class":102},[92,38055,30855],{"class":5196},[92,38057,148],{"class":98},[92,38059,174],{"class":151},[92,38061,481],{"class":102},[92,38063,30864],{"class":5196},[92,38065,148],{"class":98},[92,38067,320],{"class":151},[92,38069,38028],{"class":102},[92,38071,38072],{"class":94,"line":1621},[92,38073,38033],{"class":102},[92,38075,38076,38079,38081,38083,38085,38087,38089,38091,38093,38095,38097,38099,38101],{"class":94,"line":1626},[92,38077,38078],{"class":102},"            nn.MaxPool2d(",[92,38080,30855],{"class":5196},[92,38082,148],{"class":98},[92,38084,180],{"class":151},[92,38086,481],{"class":102},[92,38088,30910],{"class":5196},[92,38090,148],{"class":98},[92,38092,180],{"class":151},[92,38094,481],{"class":102},[92,38096,30864],{"class":5196},[92,38098,148],{"class":98},[92,38100,294],{"class":151},[92,38102,109],{"class":102},[92,38104,38105],{"class":94,"line":1632},[92,38106,38107],{"class":102},"        )\n",[92,38109,38110],{"class":94,"line":1653},[92,38111,38112],{"class":161},"        # 第二层\n",[92,38114,38115,38117,38120,38122],{"class":94,"line":1658},[92,38116,30826],{"class":151},[92,38118,38119],{"class":102},".block2",[92,38121,148],{"class":98},[92,38123,37990],{"class":102},[92,38125,38126,38128,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158],{"class":94,"line":1672},[92,38127,37995],{"class":102},[92,38129,30837],{"class":5196},[92,38131,148],{"class":98},[92,38133,306],{"class":151},[92,38135,481],{"class":102},[92,38137,30846],{"class":5196},[92,38139,148],{"class":98},[92,38141,32051],{"class":151},[92,38143,481],{"class":102},[92,38145,30855],{"class":5196},[92,38147,148],{"class":98},[92,38149,174],{"class":151},[92,38151,481],{"class":102},[92,38153,30864],{"class":5196},[92,38155,148],{"class":98},[92,38157,320],{"class":151},[92,38159,38028],{"class":102},[92,38161,38162],{"class":94,"line":1677},[92,38163,38033],{"class":102},[92,38165,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198],{"class":94,"line":1706},[92,38167,37995],{"class":102},[92,38169,30837],{"class":5196},[92,38171,148],{"class":98},[92,38173,32051],{"class":151},[92,38175,481],{"class":102},[92,38177,30846],{"class":5196},[92,38179,148],{"class":98},[92,38181,32051],{"class":151},[92,38183,481],{"class":102},[92,38185,30855],{"class":5196},[92,38187,148],{"class":98},[92,38189,174],{"class":151},[92,38191,481],{"class":102},[92,38193,30864],{"class":5196},[92,38195,148],{"class":98},[92,38197,320],{"class":151},[92,38199,38028],{"class":102},[92,38201,38202],{"class":94,"line":1711},[92,38203,38033],{"class":102},[92,38205,38206,38208,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230],{"class":94,"line":1728},[92,38207,38078],{"class":102},[92,38209,30855],{"class":5196},[92,38211,148],{"class":98},[92,38213,180],{"class":151},[92,38215,481],{"class":102},[92,38217,30910],{"class":5196},[92,38219,148],{"class":98},[92,38221,180],{"class":151},[92,38223,481],{"class":102},[92,38225,30864],{"class":5196},[92,38227,148],{"class":98},[92,38229,294],{"class":151},[92,38231,109],{"class":102},[92,38233,38234],{"class":94,"line":1733},[92,38235,38107],{"class":102},[92,38237,38238],{"class":94,"line":1738},[92,38239,38240],{"class":161},"        # 第三层\n",[92,38242,38243,38245,38248,38250],{"class":94,"line":1743},[92,38244,30826],{"class":151},[92,38246,38247],{"class":102},".block3",[92,38249,148],{"class":98},[92,38251,37990],{"class":102},[92,38253,38254,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286],{"class":94,"line":1757},[92,38255,37995],{"class":102},[92,38257,30837],{"class":5196},[92,38259,148],{"class":98},[92,38261,32051],{"class":151},[92,38263,481],{"class":102},[92,38265,30846],{"class":5196},[92,38267,148],{"class":98},[92,38269,34851],{"class":151},[92,38271,481],{"class":102},[92,38273,30855],{"class":5196},[92,38275,148],{"class":98},[92,38277,174],{"class":151},[92,38279,481],{"class":102},[92,38281,30864],{"class":5196},[92,38283,148],{"class":98},[92,38285,320],{"class":151},[92,38287,38028],{"class":102},[92,38289,38290],{"class":94,"line":1762},[92,38291,38033],{"class":102},[92,38293,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324,38326],{"class":94,"line":2556},[92,38295,37995],{"class":102},[92,38297,30837],{"class":5196},[92,38299,148],{"class":98},[92,38301,34851],{"class":151},[92,38303,481],{"class":102},[92,38305,30846],{"class":5196},[92,38307,148],{"class":98},[92,38309,34851],{"class":151},[92,38311,481],{"class":102},[92,38313,30855],{"class":5196},[92,38315,148],{"class":98},[92,38317,174],{"class":151},[92,38319,481],{"class":102},[92,38321,30864],{"class":5196},[92,38323,148],{"class":98},[92,38325,320],{"class":151},[92,38327,38028],{"class":102},[92,38329,38330],{"class":94,"line":2570},[92,38331,38033],{"class":102},[92,38333,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366],{"class":94,"line":2578},[92,38335,37995],{"class":102},[92,38337,30837],{"class":5196},[92,38339,148],{"class":98},[92,38341,34851],{"class":151},[92,38343,481],{"class":102},[92,38345,30846],{"class":5196},[92,38347,148],{"class":98},[92,38349,34851],{"class":151},[92,38351,481],{"class":102},[92,38353,30855],{"class":5196},[92,38355,148],{"class":98},[92,38357,174],{"class":151},[92,38359,481],{"class":102},[92,38361,30864],{"class":5196},[92,38363,148],{"class":98},[92,38365,320],{"class":151},[92,38367,38028],{"class":102},[92,38369,38370],{"class":94,"line":2583},[92,38371,38033],{"class":102},[92,38373,38374,38376,38378,38380,38382,38384,38386,38388,38390,38392,38394,38396,38398],{"class":94,"line":2589},[92,38375,38078],{"class":102},[92,38377,30855],{"class":5196},[92,38379,148],{"class":98},[92,38381,180],{"class":151},[92,38383,481],{"class":102},[92,38385,30910],{"class":5196},[92,38387,148],{"class":98},[92,38389,180],{"class":151},[92,38391,481],{"class":102},[92,38393,30864],{"class":5196},[92,38395,148],{"class":98},[92,38397,294],{"class":151},[92,38399,109],{"class":102},[92,38401,38402],{"class":94,"line":2595},[92,38403,38107],{"class":102},[92,38405,38406],{"class":94,"line":2600},[92,38407,38408],{"class":161},"        # 第四层\n",[92,38410,38411,38413,38416,38418],{"class":94,"line":7928},[92,38412,30826],{"class":151},[92,38414,38415],{"class":102},".block4",[92,38417,148],{"class":98},[92,38419,37990],{"class":102},[92,38421,38422,38424,38426,38428,38430,38432,38434,38436,38439,38441,38443,38445,38447,38449,38451,38453,38455],{"class":94,"line":7952},[92,38423,37995],{"class":102},[92,38425,30837],{"class":5196},[92,38427,148],{"class":98},[92,38429,34851],{"class":151},[92,38431,481],{"class":102},[92,38433,30846],{"class":5196},[92,38435,148],{"class":98},[92,38437,38438],{"class":151},"512",[92,38440,481],{"class":102},[92,38442,30855],{"class":5196},[92,38444,148],{"class":98},[92,38446,174],{"class":151},[92,38448,481],{"class":102},[92,38450,30864],{"class":5196},[92,38452,148],{"class":98},[92,38454,320],{"class":151},[92,38456,38028],{"class":102},[92,38458,38459],{"class":94,"line":7957},[92,38460,38033],{"class":102},[92,38462,38463,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495],{"class":94,"line":7963},[92,38464,37995],{"class":102},[92,38466,30837],{"class":5196},[92,38468,148],{"class":98},[92,38470,38438],{"class":151},[92,38472,481],{"class":102},[92,38474,30846],{"class":5196},[92,38476,148],{"class":98},[92,38478,38438],{"class":151},[92,38480,481],{"class":102},[92,38482,30855],{"class":5196},[92,38484,148],{"class":98},[92,38486,174],{"class":151},[92,38488,481],{"class":102},[92,38490,30864],{"class":5196},[92,38492,148],{"class":98},[92,38494,320],{"class":151},[92,38496,38028],{"class":102},[92,38498,38499],{"class":94,"line":7990},[92,38500,38033],{"class":102},[92,38502,38503,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535],{"class":94,"line":7995},[92,38504,37995],{"class":102},[92,38506,30837],{"class":5196},[92,38508,148],{"class":98},[92,38510,38438],{"class":151},[92,38512,481],{"class":102},[92,38514,30846],{"class":5196},[92,38516,148],{"class":98},[92,38518,38438],{"class":151},[92,38520,481],{"class":102},[92,38522,30855],{"class":5196},[92,38524,148],{"class":98},[92,38526,174],{"class":151},[92,38528,481],{"class":102},[92,38530,30864],{"class":5196},[92,38532,148],{"class":98},[92,38534,320],{"class":151},[92,38536,38028],{"class":102},[92,38538,38539],{"class":94,"line":8001},[92,38540,38033],{"class":102},[92,38542,38543,38545,38547,38549,38551,38553,38555,38557,38559,38561,38563,38565,38567],{"class":94,"line":8013},[92,38544,38078],{"class":102},[92,38546,30855],{"class":5196},[92,38548,148],{"class":98},[92,38550,180],{"class":151},[92,38552,481],{"class":102},[92,38554,30910],{"class":5196},[92,38556,148],{"class":98},[92,38558,180],{"class":151},[92,38560,481],{"class":102},[92,38562,30864],{"class":5196},[92,38564,148],{"class":98},[92,38566,294],{"class":151},[92,38568,109],{"class":102},[92,38570,38571],{"class":94,"line":8025},[92,38572,38107],{"class":102},[92,38574,38575],{"class":94,"line":8037},[92,38576,38577],{"class":161},"        # 第五层\n",[92,38579,38580,38582,38585,38587],{"class":94,"line":9696},[92,38581,30826],{"class":151},[92,38583,38584],{"class":102},".block5",[92,38586,148],{"class":98},[92,38588,37990],{"class":102},[92,38590,38591,38593,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623],{"class":94,"line":9721},[92,38592,37995],{"class":102},[92,38594,30837],{"class":5196},[92,38596,148],{"class":98},[92,38598,38438],{"class":151},[92,38600,481],{"class":102},[92,38602,30846],{"class":5196},[92,38604,148],{"class":98},[92,38606,38438],{"class":151},[92,38608,481],{"class":102},[92,38610,30855],{"class":5196},[92,38612,148],{"class":98},[92,38614,174],{"class":151},[92,38616,481],{"class":102},[92,38618,30864],{"class":5196},[92,38620,148],{"class":98},[92,38622,320],{"class":151},[92,38624,38028],{"class":102},[92,38626,38627],{"class":94,"line":9744},[92,38628,38033],{"class":102},[92,38630,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663],{"class":94,"line":9768},[92,38632,37995],{"class":102},[92,38634,30837],{"class":5196},[92,38636,148],{"class":98},[92,38638,38438],{"class":151},[92,38640,481],{"class":102},[92,38642,30846],{"class":5196},[92,38644,148],{"class":98},[92,38646,38438],{"class":151},[92,38648,481],{"class":102},[92,38650,30855],{"class":5196},[92,38652,148],{"class":98},[92,38654,174],{"class":151},[92,38656,481],{"class":102},[92,38658,30864],{"class":5196},[92,38660,148],{"class":98},[92,38662,320],{"class":151},[92,38664,38028],{"class":102},[92,38666,38667],{"class":94,"line":9773},[92,38668,38033],{"class":102},[92,38670,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703],{"class":94,"line":9778},[92,38672,37995],{"class":102},[92,38674,30837],{"class":5196},[92,38676,148],{"class":98},[92,38678,38438],{"class":151},[92,38680,481],{"class":102},[92,38682,30846],{"class":5196},[92,38684,148],{"class":98},[92,38686,38438],{"class":151},[92,38688,481],{"class":102},[92,38690,30855],{"class":5196},[92,38692,148],{"class":98},[92,38694,174],{"class":151},[92,38696,481],{"class":102},[92,38698,30864],{"class":5196},[92,38700,148],{"class":98},[92,38702,320],{"class":151},[92,38704,38028],{"class":102},[92,38706,38707],{"class":94,"line":9783},[92,38708,38033],{"class":102},[92,38710,38711,38713,38715,38717,38719,38721,38723,38725,38727,38729,38731,38733,38735],{"class":94,"line":9792},[92,38712,38078],{"class":102},[92,38714,30855],{"class":5196},[92,38716,148],{"class":98},[92,38718,180],{"class":151},[92,38720,481],{"class":102},[92,38722,30910],{"class":5196},[92,38724,148],{"class":98},[92,38726,180],{"class":151},[92,38728,481],{"class":102},[92,38730,30864],{"class":5196},[92,38732,148],{"class":98},[92,38734,294],{"class":151},[92,38736,109],{"class":102},[92,38738,38739],{"class":94,"line":9797},[92,38740,38107],{"class":102},[92,38742,38743],{"class":94,"line":9803},[92,38744,38745],{"class":161},"        # 全连接层\n",[92,38747,38748,38750,38753,38755],{"class":94,"line":9824},[92,38749,30826],{"class":151},[92,38751,38752],{"class":102},".block6",[92,38754,148],{"class":98},[92,38756,37990],{"class":102},[92,38758,38759],{"class":94,"line":9830},[92,38760,38761],{"class":161},"            # 平展操作\n",[92,38763,38764],{"class":94,"line":9844},[92,38765,38766],{"class":161},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[92,38768,38769],{"class":94,"line":9850},[92,38770,38771],{"class":102},"            nn.Flatten(),\n",[92,38773,38774,38777,38779,38781,38783,38785,38787,38789,38791],{"class":94,"line":9877},[92,38775,38776],{"class":102},"            nn.Linear(",[92,38778,472],{"class":151},[92,38780,558],{"class":98},[92,38782,472],{"class":151},[92,38784,558],{"class":98},[92,38786,38438],{"class":151},[92,38788,481],{"class":102},[92,38790,34851],{"class":151},[92,38792,38028],{"class":102},[92,38794,38795],{"class":94,"line":9886},[92,38796,38033],{"class":102},[92,38798,38799,38801,38803,38805,38807],{"class":94,"line":9892},[92,38800,38776],{"class":102},[92,38802,34851],{"class":151},[92,38804,481],{"class":102},[92,38806,32051],{"class":151},[92,38808,38028],{"class":102},[92,38810,38811],{"class":94,"line":9900},[92,38812,38033],{"class":102},[92,38814,38815,38817,38819,38821,38823],{"class":94,"line":9905},[92,38816,38776],{"class":102},[92,38818,32051],{"class":151},[92,38820,481],{"class":102},[92,38822,549],{"class":151},[92,38824,109],{"class":102},[92,38826,38827],{"class":94,"line":16584},[92,38828,38107],{"class":102},[92,38830,38831],{"class":94,"line":16590},[92,38832,2379],{"emptyLinePlaceholder":17},[92,38834,38835],{"class":94,"line":16613},[92,38836,38837],{"class":161},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[92,38839,38840],{"class":94,"line":16619},[92,38841,38842],{"class":161},"        # 循环遍历模型\n",[92,38844,38845,38847,38850,38852,38855],{"class":94,"line":16642},[92,38846,3382],{"class":98},[92,38848,38849],{"class":102}," m ",[92,38851,26024],{"class":98},[92,38853,38854],{"class":151}," self",[92,38856,38857],{"class":102},".modules():\n",[92,38859,38860],{"class":94,"line":16656},[92,38861,38862],{"class":161},"            # print(m)\n",[92,38864,38865,38867,38870],{"class":94,"line":16676},[92,38866,4621],{"class":98},[92,38868,38869],{"class":151}," isinstance",[92,38871,38872],{"class":102},"(m,nn.Conv2d):\n",[92,38874,38875],{"class":94,"line":16682},[92,38876,38877],{"class":161},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[92,38879,38880,38883,38886,38888,38891],{"class":94,"line":16693},[92,38881,38882],{"class":102},"                nn.init.kaiming_normal_(m.weight,",[92,38884,38885],{"class":5196},"nonlinearity",[92,38887,148],{"class":98},[92,38889,38890],{"class":207},"'relu'",[92,38892,109],{"class":102},[92,38894,38895],{"class":94,"line":16716},[92,38896,38897],{"class":161},"                # 判断b参数是否存在\n",[92,38899,38900,38903,38906,38909,38912,38915],{"class":94,"line":16738},[92,38901,38902],{"class":98},"                if",[92,38904,38905],{"class":102}," m.bias ",[92,38907,38908],{"class":98},"is",[92,38910,38911],{"class":98}," not",[92,38913,38914],{"class":151}," None",[92,38916,3718],{"class":102},[92,38918,38919],{"class":94,"line":16743},[92,38920,38921],{"class":161},"                    # 如果参数不存在的化初始化b=0\n",[92,38923,38924,38927,38929],{"class":94,"line":16749},[92,38925,38926],{"class":102},"                    nn.init.constant_(m.bias,",[92,38928,294],{"class":151},[92,38930,109],{"class":102},[92,38932,38933],{"class":94,"line":16763},[92,38934,38935],{"class":161},"            # 全连接层初始化\n",[92,38937,38938,38941,38943],{"class":94,"line":16776},[92,38939,38940],{"class":98},"            elif",[92,38942,38869],{"class":151},[92,38944,38945],{"class":102},"(m,nn.Linear):\n",[92,38947,38948],{"class":94,"line":16781},[92,38949,38950],{"class":161},"                # 这个初始化方法是利用的是正太分布的方式\n",[92,38952,38953],{"class":94,"line":16795},[92,38954,38955],{"class":161},"                # 均值为0，方差为0.01\n",[92,38957,38958,38961,38963,38965,38968],{"class":94,"line":16800},[92,38959,38960],{"class":102},"                nn.init.normal_(m.weight,",[92,38962,294],{"class":151},[92,38964,481],{"class":102},[92,38966,38967],{"class":151},"0.01",[92,38969,109],{"class":102},[92,38971,38972],{"class":94,"line":16806},[92,38973,38974],{"class":161},"                # 初始化b参数\n",[92,38976,38977,38979,38981,38983,38985,38987],{"class":94,"line":16811},[92,38978,38902],{"class":98},[92,38980,38905],{"class":102},[92,38982,38908],{"class":98},[92,38984,38911],{"class":98},[92,38986,38914],{"class":151},[92,38988,3718],{"class":102},[92,38990,38991,38993,38995],{"class":94,"line":16825},[92,38992,38926],{"class":102},[92,38994,294],{"class":151},[92,38996,109],{"class":102},[92,38998,38999],{"class":94,"line":16830},[92,39000,2379],{"emptyLinePlaceholder":17},[92,39002,39003],{"class":94,"line":16835},[92,39004,35146],{"class":161},[92,39006,39007,39009,39011],{"class":94,"line":16849},[92,39008,30782],{"class":98},[92,39010,31074],{"class":1942},[92,39012,31077],{"class":102},[92,39014,39015,39017,39019,39021],{"class":94,"line":16861},[92,39016,31082],{"class":102},[92,39018,148],{"class":98},[92,39020,30804],{"class":151},[92,39022,39023],{"class":102},".block1(x)\n",[92,39025,39026,39028,39030,39032],{"class":94,"line":16866},[92,39027,31082],{"class":102},[92,39029,148],{"class":98},[92,39031,30804],{"class":151},[92,39033,39034],{"class":102},".block2(x)\n",[92,39036,39037,39039,39041,39043],{"class":94,"line":16879},[92,39038,31082],{"class":102},[92,39040,148],{"class":98},[92,39042,30804],{"class":151},[92,39044,39045],{"class":102},".block3(x)\n",[92,39047,39048,39050,39052,39054],{"class":94,"line":16884},[92,39049,31082],{"class":102},[92,39051,148],{"class":98},[92,39053,30804],{"class":151},[92,39055,39056],{"class":102},".block4(x)\n",[92,39058,39059,39061,39063,39065],{"class":94,"line":16889},[92,39060,31082],{"class":102},[92,39062,148],{"class":98},[92,39064,30804],{"class":151},[92,39066,39067],{"class":102},".block5(x)\n",[92,39069,39070,39072,39074,39076],{"class":94,"line":16894},[92,39071,31082],{"class":102},[92,39073,148],{"class":98},[92,39075,30804],{"class":151},[92,39077,39078],{"class":102},".block6(x)\n",[92,39080,39081,39083],{"class":94,"line":16907},[92,39082,14732],{"class":98},[92,39084,31190],{"class":102},[92,39086,39087],{"class":94,"line":16912},[92,39088,2379],{"emptyLinePlaceholder":17},[92,39090,39091],{"class":94,"line":32614},[92,39092,39093],{"class":161},"# 验证模型\n",[92,39095,39096,39098,39100,39102,39105],{"class":94,"line":32620},[92,39097,1510],{"class":98},[92,39099,31201],{"class":151},[92,39101,2928],{"class":98},[92,39103,39104],{"class":207},"'__main__'",[92,39106,3718],{"class":102},[92,39108,39109,39111,39113,39115,39117,39119,39121,39123,39125],{"class":94,"line":32626},[92,39110,31218],{"class":102},[92,39112,148],{"class":98},[92,39114,30432],{"class":102},[92,39116,31225],{"class":207},[92,39118,1683],{"class":98},[92,39120,31230],{"class":102},[92,39122,1680],{"class":98},[92,39124,30457],{"class":207},[92,39126,109],{"class":102},[92,39128,39129,39131],{"class":94,"line":32632},[92,39130,31280],{"class":151},[92,39132,30466],{"class":102},[92,39134,39135,39137,39139],{"class":94,"line":32638},[92,39136,31270],{"class":102},[92,39138,148],{"class":98},[92,39140,39141],{"class":102},"VGG16().to(device)\n",[92,39143,39144,39146,39148,39150,39152,39154,39156,39158],{"class":94,"line":32649},[92,39145,31280],{"class":151},[92,39147,31283],{"class":102},[92,39149,320],{"class":151},[92,39151,481],{"class":102},[92,39153,31482],{"class":151},[92,39155,481],{"class":102},[92,39157,31482],{"class":151},[92,39159,31296],{"class":102},[46,39161,39162],{"start":11},[49,39163,39164],{},"训练代码",[38,39166,39167],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[38,39169,39170],{},"解决方式:",[38,39172,39173],{},"①权重初始化",[83,39175,39177],{"className":30359,"code":39176,"language":30361,"meta":10,"style":10},"# 权重初始化,保证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",[89,39178,39179,39184,39189,39201,39206,39214,39219,39232,39237,39251,39256,39265,39270,39279,39284,39289,39302,39307,39321],{"__ignoreMap":10},[92,39180,39181],{"class":94,"line":95},[92,39182,39183],{"class":161},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[92,39185,39186],{"class":94,"line":11},[92,39187,39188],{"class":161},"# 循环遍历模型\n",[92,39190,39191,39193,39195,39197,39199],{"class":94,"line":1158},[92,39192,3004],{"class":98},[92,39194,38849],{"class":102},[92,39196,26024],{"class":98},[92,39198,38854],{"class":151},[92,39200,38857],{"class":102},[92,39202,39203],{"class":94,"line":1173},[92,39204,39205],{"class":161},"    # print(m)\n",[92,39207,39208,39210,39212],{"class":94,"line":1179},[92,39209,3080],{"class":98},[92,39211,38869],{"class":151},[92,39213,38872],{"class":102},[92,39215,39216],{"class":94,"line":1193},[92,39217,39218],{"class":161},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[92,39220,39221,39224,39226,39228,39230],{"class":94,"line":1199},[92,39222,39223],{"class":102},"        nn.init.kaiming_normal_(m.weight,",[92,39225,38885],{"class":5196},[92,39227,148],{"class":98},[92,39229,38890],{"class":207},[92,39231,109],{"class":102},[92,39233,39234],{"class":94,"line":1290},[92,39235,39236],{"class":161},"        # 判断b参数是否存在\n",[92,39238,39239,39241,39243,39245,39247,39249],{"class":94,"line":1296},[92,39240,2476],{"class":98},[92,39242,38905],{"class":102},[92,39244,38908],{"class":98},[92,39246,38911],{"class":98},[92,39248,38914],{"class":151},[92,39250,3718],{"class":102},[92,39252,39253],{"class":94,"line":1308},[92,39254,39255],{"class":161},"            # 如果参数不存在的化初始化b=0\n",[92,39257,39258,39261,39263],{"class":94,"line":1591},[92,39259,39260],{"class":102},"            nn.init.constant_(m.bias,",[92,39262,294],{"class":151},[92,39264,109],{"class":102},[92,39266,39267],{"class":94,"line":1596},[92,39268,39269],{"class":161},"    # 全连接层初始化\n",[92,39271,39272,39275,39277],{"class":94,"line":1602},[92,39273,39274],{"class":98},"    elif",[92,39276,38869],{"class":151},[92,39278,38945],{"class":102},[92,39280,39281],{"class":94,"line":1607},[92,39282,39283],{"class":161},"        # 这个初始化方法是利用的是正太分布的方式\n",[92,39285,39286],{"class":94,"line":1621},[92,39287,39288],{"class":161},"        # 均值为0，方差为0.01\n",[92,39290,39291,39294,39296,39298,39300],{"class":94,"line":1626},[92,39292,39293],{"class":102},"        nn.init.normal_(m.weight,",[92,39295,294],{"class":151},[92,39297,481],{"class":102},[92,39299,38967],{"class":151},[92,39301,109],{"class":102},[92,39303,39304],{"class":94,"line":1632},[92,39305,39306],{"class":161},"        # 初始化b参数\n",[92,39308,39309,39311,39313,39315,39317,39319],{"class":94,"line":1653},[92,39310,2476],{"class":98},[92,39312,38905],{"class":102},[92,39314,38908],{"class":98},[92,39316,38911],{"class":98},[92,39318,38914],{"class":151},[92,39320,3718],{"class":102},[92,39322,39323,39325,39327],{"class":94,"line":1658},[92,39324,39260],{"class":102},[92,39326,294],{"class":151},[92,39328,109],{"class":102},[38,39330,39331],{},"②尽可能地增加批次",[38,39333,39334],{},"训练完整代码：",[83,39336,39337],{"className":30359,"code":37880,"language":30361,"meta":10,"style":10},[89,39338,39339,39345,39355,39365,39375,39379,39395,39403,39421,39425,39429,39439,39475,39479,39515,39519,39547,39551,39555,39565,39601,39605,39641,39645,39673,39677,39681,39691,39727,39731,39767,39771,39807,39811,39839,39843,39847,39857,39893,39897,39933,39937,39973,39977,40005,40009,40013,40023,40059,40063,40099,40103,40139,40143,40171,40175,40179,40189,40193,40197,40201,40221,40225,40237,40241,40253,40257,40261,40265,40269,40281,40285,40293,40297,40309,40313,40327,40331,40339,40343,40351,40355,40359,40371,40375,40389,40397,40401,40405,40413,40423,40433,40443,40453,40463,40473,40479,40483,40487,40499,40519,40525,40533],{"__ignoreMap":10},[92,39340,39341,39343],{"class":94,"line":95},[92,39342,30373],{"class":98},[92,39344,30376],{"class":102},[92,39346,39347,39349,39351,39353],{"class":94,"line":11},[92,39348,30718],{"class":98},[92,39350,37895],{"class":102},[92,39352,30373],{"class":98},[92,39354,37900],{"class":102},[92,39356,39357,39359,39361,39363],{"class":94,"line":1158},[92,39358,30718],{"class":98},[92,39360,30721],{"class":102},[92,39362,30373],{"class":98},[92,39364,30726],{"class":102},[92,39366,39367,39369,39371,39373],{"class":94,"line":1173},[92,39368,30718],{"class":98},[92,39370,30738],{"class":102},[92,39372,30373],{"class":98},[92,39374,30743],{"class":102},[92,39376,39377],{"class":94,"line":1179},[92,39378,2379],{"emptyLinePlaceholder":17},[92,39380,39381,39383,39385,39387,39389,39391,39393],{"class":94,"line":1193},[92,39382,14674],{"class":98},[92,39384,37931],{"class":1942},[92,39386,103],{"class":102},[92,39388,30759],{"class":1942},[92,39390,661],{"class":102},[92,39392,30764],{"class":1942},[92,39394,30767],{"class":102},[92,39396,39397,39399,39401],{"class":94,"line":1199},[92,39398,30782],{"class":98},[92,39400,30785],{"class":151},[92,39402,30788],{"class":102},[92,39404,39405,39407,39409,39411,39413,39415,39417,39419],{"class":94,"line":1290},[92,39406,30798],{"class":151},[92,39408,103],{"class":102},[92,39410,37958],{"class":151},[92,39412,12415],{"class":102},[92,39414,30804],{"class":151},[92,39416,30807],{"class":102},[92,39418,30810],{"class":151},[92,39420,1955],{"class":102},[92,39422,39423],{"class":94,"line":1296},[92,39424,37973],{"class":161},[92,39426,39427],{"class":94,"line":1308},[92,39428,37978],{"class":161},[92,39430,39431,39433,39435,39437],{"class":94,"line":1591},[92,39432,30826],{"class":151},[92,39434,37985],{"class":102},[92,39436,148],{"class":98},[92,39438,37990],{"class":102},[92,39440,39441,39443,39445,39447,39449,39451,39453,39455,39457,39459,39461,39463,39465,39467,39469,39471,39473],{"class":94,"line":1596},[92,39442,37995],{"class":102},[92,39444,30837],{"class":5196},[92,39446,148],{"class":98},[92,39448,320],{"class":151},[92,39450,481],{"class":102},[92,39452,30846],{"class":5196},[92,39454,148],{"class":98},[92,39456,306],{"class":151},[92,39458,481],{"class":102},[92,39460,30855],{"class":5196},[92,39462,148],{"class":98},[92,39464,174],{"class":151},[92,39466,481],{"class":102},[92,39468,30864],{"class":5196},[92,39470,148],{"class":98},[92,39472,320],{"class":151},[92,39474,38028],{"class":102},[92,39476,39477],{"class":94,"line":1602},[92,39478,38033],{"class":102},[92,39480,39481,39483,39485,39487,39489,39491,39493,39495,39497,39499,39501,39503,39505,39507,39509,39511,39513],{"class":94,"line":1607},[92,39482,37995],{"class":102},[92,39484,30837],{"class":5196},[92,39486,148],{"class":98},[92,39488,306],{"class":151},[92,39490,481],{"class":102},[92,39492,30846],{"class":5196},[92,39494,148],{"class":98},[92,39496,306],{"class":151},[92,39498,481],{"class":102},[92,39500,30855],{"class":5196},[92,39502,148],{"class":98},[92,39504,174],{"class":151},[92,39506,481],{"class":102},[92,39508,30864],{"class":5196},[92,39510,148],{"class":98},[92,39512,320],{"class":151},[92,39514,38028],{"class":102},[92,39516,39517],{"class":94,"line":1621},[92,39518,38033],{"class":102},[92,39520,39521,39523,39525,39527,39529,39531,39533,39535,39537,39539,39541,39543,39545],{"class":94,"line":1626},[92,39522,38078],{"class":102},[92,39524,30855],{"class":5196},[92,39526,148],{"class":98},[92,39528,180],{"class":151},[92,39530,481],{"class":102},[92,39532,30910],{"class":5196},[92,39534,148],{"class":98},[92,39536,180],{"class":151},[92,39538,481],{"class":102},[92,39540,30864],{"class":5196},[92,39542,148],{"class":98},[92,39544,294],{"class":151},[92,39546,109],{"class":102},[92,39548,39549],{"class":94,"line":1632},[92,39550,38107],{"class":102},[92,39552,39553],{"class":94,"line":1653},[92,39554,38112],{"class":161},[92,39556,39557,39559,39561,39563],{"class":94,"line":1658},[92,39558,30826],{"class":151},[92,39560,38119],{"class":102},[92,39562,148],{"class":98},[92,39564,37990],{"class":102},[92,39566,39567,39569,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599],{"class":94,"line":1672},[92,39568,37995],{"class":102},[92,39570,30837],{"class":5196},[92,39572,148],{"class":98},[92,39574,306],{"class":151},[92,39576,481],{"class":102},[92,39578,30846],{"class":5196},[92,39580,148],{"class":98},[92,39582,32051],{"class":151},[92,39584,481],{"class":102},[92,39586,30855],{"class":5196},[92,39588,148],{"class":98},[92,39590,174],{"class":151},[92,39592,481],{"class":102},[92,39594,30864],{"class":5196},[92,39596,148],{"class":98},[92,39598,320],{"class":151},[92,39600,38028],{"class":102},[92,39602,39603],{"class":94,"line":1677},[92,39604,38033],{"class":102},[92,39606,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639],{"class":94,"line":1706},[92,39608,37995],{"class":102},[92,39610,30837],{"class":5196},[92,39612,148],{"class":98},[92,39614,32051],{"class":151},[92,39616,481],{"class":102},[92,39618,30846],{"class":5196},[92,39620,148],{"class":98},[92,39622,32051],{"class":151},[92,39624,481],{"class":102},[92,39626,30855],{"class":5196},[92,39628,148],{"class":98},[92,39630,174],{"class":151},[92,39632,481],{"class":102},[92,39634,30864],{"class":5196},[92,39636,148],{"class":98},[92,39638,320],{"class":151},[92,39640,38028],{"class":102},[92,39642,39643],{"class":94,"line":1711},[92,39644,38033],{"class":102},[92,39646,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669,39671],{"class":94,"line":1728},[92,39648,38078],{"class":102},[92,39650,30855],{"class":5196},[92,39652,148],{"class":98},[92,39654,180],{"class":151},[92,39656,481],{"class":102},[92,39658,30910],{"class":5196},[92,39660,148],{"class":98},[92,39662,180],{"class":151},[92,39664,481],{"class":102},[92,39666,30864],{"class":5196},[92,39668,148],{"class":98},[92,39670,294],{"class":151},[92,39672,109],{"class":102},[92,39674,39675],{"class":94,"line":1733},[92,39676,38107],{"class":102},[92,39678,39679],{"class":94,"line":1738},[92,39680,38240],{"class":161},[92,39682,39683,39685,39687,39689],{"class":94,"line":1743},[92,39684,30826],{"class":151},[92,39686,38247],{"class":102},[92,39688,148],{"class":98},[92,39690,37990],{"class":102},[92,39692,39693,39695,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725],{"class":94,"line":1757},[92,39694,37995],{"class":102},[92,39696,30837],{"class":5196},[92,39698,148],{"class":98},[92,39700,32051],{"class":151},[92,39702,481],{"class":102},[92,39704,30846],{"class":5196},[92,39706,148],{"class":98},[92,39708,34851],{"class":151},[92,39710,481],{"class":102},[92,39712,30855],{"class":5196},[92,39714,148],{"class":98},[92,39716,174],{"class":151},[92,39718,481],{"class":102},[92,39720,30864],{"class":5196},[92,39722,148],{"class":98},[92,39724,320],{"class":151},[92,39726,38028],{"class":102},[92,39728,39729],{"class":94,"line":1762},[92,39730,38033],{"class":102},[92,39732,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765],{"class":94,"line":2556},[92,39734,37995],{"class":102},[92,39736,30837],{"class":5196},[92,39738,148],{"class":98},[92,39740,34851],{"class":151},[92,39742,481],{"class":102},[92,39744,30846],{"class":5196},[92,39746,148],{"class":98},[92,39748,34851],{"class":151},[92,39750,481],{"class":102},[92,39752,30855],{"class":5196},[92,39754,148],{"class":98},[92,39756,174],{"class":151},[92,39758,481],{"class":102},[92,39760,30864],{"class":5196},[92,39762,148],{"class":98},[92,39764,320],{"class":151},[92,39766,38028],{"class":102},[92,39768,39769],{"class":94,"line":2570},[92,39770,38033],{"class":102},[92,39772,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805],{"class":94,"line":2578},[92,39774,37995],{"class":102},[92,39776,30837],{"class":5196},[92,39778,148],{"class":98},[92,39780,34851],{"class":151},[92,39782,481],{"class":102},[92,39784,30846],{"class":5196},[92,39786,148],{"class":98},[92,39788,34851],{"class":151},[92,39790,481],{"class":102},[92,39792,30855],{"class":5196},[92,39794,148],{"class":98},[92,39796,174],{"class":151},[92,39798,481],{"class":102},[92,39800,30864],{"class":5196},[92,39802,148],{"class":98},[92,39804,320],{"class":151},[92,39806,38028],{"class":102},[92,39808,39809],{"class":94,"line":2583},[92,39810,38033],{"class":102},[92,39812,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835,39837],{"class":94,"line":2589},[92,39814,38078],{"class":102},[92,39816,30855],{"class":5196},[92,39818,148],{"class":98},[92,39820,180],{"class":151},[92,39822,481],{"class":102},[92,39824,30910],{"class":5196},[92,39826,148],{"class":98},[92,39828,180],{"class":151},[92,39830,481],{"class":102},[92,39832,30864],{"class":5196},[92,39834,148],{"class":98},[92,39836,294],{"class":151},[92,39838,109],{"class":102},[92,39840,39841],{"class":94,"line":2595},[92,39842,38107],{"class":102},[92,39844,39845],{"class":94,"line":2600},[92,39846,38408],{"class":161},[92,39848,39849,39851,39853,39855],{"class":94,"line":7928},[92,39850,30826],{"class":151},[92,39852,38415],{"class":102},[92,39854,148],{"class":98},[92,39856,37990],{"class":102},[92,39858,39859,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891],{"class":94,"line":7952},[92,39860,37995],{"class":102},[92,39862,30837],{"class":5196},[92,39864,148],{"class":98},[92,39866,34851],{"class":151},[92,39868,481],{"class":102},[92,39870,30846],{"class":5196},[92,39872,148],{"class":98},[92,39874,38438],{"class":151},[92,39876,481],{"class":102},[92,39878,30855],{"class":5196},[92,39880,148],{"class":98},[92,39882,174],{"class":151},[92,39884,481],{"class":102},[92,39886,30864],{"class":5196},[92,39888,148],{"class":98},[92,39890,320],{"class":151},[92,39892,38028],{"class":102},[92,39894,39895],{"class":94,"line":7957},[92,39896,38033],{"class":102},[92,39898,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931],{"class":94,"line":7963},[92,39900,37995],{"class":102},[92,39902,30837],{"class":5196},[92,39904,148],{"class":98},[92,39906,38438],{"class":151},[92,39908,481],{"class":102},[92,39910,30846],{"class":5196},[92,39912,148],{"class":98},[92,39914,38438],{"class":151},[92,39916,481],{"class":102},[92,39918,30855],{"class":5196},[92,39920,148],{"class":98},[92,39922,174],{"class":151},[92,39924,481],{"class":102},[92,39926,30864],{"class":5196},[92,39928,148],{"class":98},[92,39930,320],{"class":151},[92,39932,38028],{"class":102},[92,39934,39935],{"class":94,"line":7990},[92,39936,38033],{"class":102},[92,39938,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971],{"class":94,"line":7995},[92,39940,37995],{"class":102},[92,39942,30837],{"class":5196},[92,39944,148],{"class":98},[92,39946,38438],{"class":151},[92,39948,481],{"class":102},[92,39950,30846],{"class":5196},[92,39952,148],{"class":98},[92,39954,38438],{"class":151},[92,39956,481],{"class":102},[92,39958,30855],{"class":5196},[92,39960,148],{"class":98},[92,39962,174],{"class":151},[92,39964,481],{"class":102},[92,39966,30864],{"class":5196},[92,39968,148],{"class":98},[92,39970,320],{"class":151},[92,39972,38028],{"class":102},[92,39974,39975],{"class":94,"line":8001},[92,39976,38033],{"class":102},[92,39978,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003],{"class":94,"line":8013},[92,39980,38078],{"class":102},[92,39982,30855],{"class":5196},[92,39984,148],{"class":98},[92,39986,180],{"class":151},[92,39988,481],{"class":102},[92,39990,30910],{"class":5196},[92,39992,148],{"class":98},[92,39994,180],{"class":151},[92,39996,481],{"class":102},[92,39998,30864],{"class":5196},[92,40000,148],{"class":98},[92,40002,294],{"class":151},[92,40004,109],{"class":102},[92,40006,40007],{"class":94,"line":8025},[92,40008,38107],{"class":102},[92,40010,40011],{"class":94,"line":8037},[92,40012,38577],{"class":161},[92,40014,40015,40017,40019,40021],{"class":94,"line":9696},[92,40016,30826],{"class":151},[92,40018,38584],{"class":102},[92,40020,148],{"class":98},[92,40022,37990],{"class":102},[92,40024,40025,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057],{"class":94,"line":9721},[92,40026,37995],{"class":102},[92,40028,30837],{"class":5196},[92,40030,148],{"class":98},[92,40032,38438],{"class":151},[92,40034,481],{"class":102},[92,40036,30846],{"class":5196},[92,40038,148],{"class":98},[92,40040,38438],{"class":151},[92,40042,481],{"class":102},[92,40044,30855],{"class":5196},[92,40046,148],{"class":98},[92,40048,174],{"class":151},[92,40050,481],{"class":102},[92,40052,30864],{"class":5196},[92,40054,148],{"class":98},[92,40056,320],{"class":151},[92,40058,38028],{"class":102},[92,40060,40061],{"class":94,"line":9744},[92,40062,38033],{"class":102},[92,40064,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097],{"class":94,"line":9768},[92,40066,37995],{"class":102},[92,40068,30837],{"class":5196},[92,40070,148],{"class":98},[92,40072,38438],{"class":151},[92,40074,481],{"class":102},[92,40076,30846],{"class":5196},[92,40078,148],{"class":98},[92,40080,38438],{"class":151},[92,40082,481],{"class":102},[92,40084,30855],{"class":5196},[92,40086,148],{"class":98},[92,40088,174],{"class":151},[92,40090,481],{"class":102},[92,40092,30864],{"class":5196},[92,40094,148],{"class":98},[92,40096,320],{"class":151},[92,40098,38028],{"class":102},[92,40100,40101],{"class":94,"line":9773},[92,40102,38033],{"class":102},[92,40104,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137],{"class":94,"line":9778},[92,40106,37995],{"class":102},[92,40108,30837],{"class":5196},[92,40110,148],{"class":98},[92,40112,38438],{"class":151},[92,40114,481],{"class":102},[92,40116,30846],{"class":5196},[92,40118,148],{"class":98},[92,40120,38438],{"class":151},[92,40122,481],{"class":102},[92,40124,30855],{"class":5196},[92,40126,148],{"class":98},[92,40128,174],{"class":151},[92,40130,481],{"class":102},[92,40132,30864],{"class":5196},[92,40134,148],{"class":98},[92,40136,320],{"class":151},[92,40138,38028],{"class":102},[92,40140,40141],{"class":94,"line":9783},[92,40142,38033],{"class":102},[92,40144,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169],{"class":94,"line":9792},[92,40146,38078],{"class":102},[92,40148,30855],{"class":5196},[92,40150,148],{"class":98},[92,40152,180],{"class":151},[92,40154,481],{"class":102},[92,40156,30910],{"class":5196},[92,40158,148],{"class":98},[92,40160,180],{"class":151},[92,40162,481],{"class":102},[92,40164,30864],{"class":5196},[92,40166,148],{"class":98},[92,40168,294],{"class":151},[92,40170,109],{"class":102},[92,40172,40173],{"class":94,"line":9797},[92,40174,38107],{"class":102},[92,40176,40177],{"class":94,"line":9803},[92,40178,38745],{"class":161},[92,40180,40181,40183,40185,40187],{"class":94,"line":9824},[92,40182,30826],{"class":151},[92,40184,38752],{"class":102},[92,40186,148],{"class":98},[92,40188,37990],{"class":102},[92,40190,40191],{"class":94,"line":9830},[92,40192,38761],{"class":161},[92,40194,40195],{"class":94,"line":9844},[92,40196,38766],{"class":161},[92,40198,40199],{"class":94,"line":9850},[92,40200,38771],{"class":102},[92,40202,40203,40205,40207,40209,40211,40213,40215,40217,40219],{"class":94,"line":9877},[92,40204,38776],{"class":102},[92,40206,472],{"class":151},[92,40208,558],{"class":98},[92,40210,472],{"class":151},[92,40212,558],{"class":98},[92,40214,38438],{"class":151},[92,40216,481],{"class":102},[92,40218,34851],{"class":151},[92,40220,38028],{"class":102},[92,40222,40223],{"class":94,"line":9886},[92,40224,38033],{"class":102},[92,40226,40227,40229,40231,40233,40235],{"class":94,"line":9892},[92,40228,38776],{"class":102},[92,40230,34851],{"class":151},[92,40232,481],{"class":102},[92,40234,32051],{"class":151},[92,40236,38028],{"class":102},[92,40238,40239],{"class":94,"line":9900},[92,40240,38033],{"class":102},[92,40242,40243,40245,40247,40249,40251],{"class":94,"line":9905},[92,40244,38776],{"class":102},[92,40246,32051],{"class":151},[92,40248,481],{"class":102},[92,40250,549],{"class":151},[92,40252,109],{"class":102},[92,40254,40255],{"class":94,"line":16584},[92,40256,38107],{"class":102},[92,40258,40259],{"class":94,"line":16590},[92,40260,2379],{"emptyLinePlaceholder":17},[92,40262,40263],{"class":94,"line":16613},[92,40264,38837],{"class":161},[92,40266,40267],{"class":94,"line":16619},[92,40268,38842],{"class":161},[92,40270,40271,40273,40275,40277,40279],{"class":94,"line":16642},[92,40272,3382],{"class":98},[92,40274,38849],{"class":102},[92,40276,26024],{"class":98},[92,40278,38854],{"class":151},[92,40280,38857],{"class":102},[92,40282,40283],{"class":94,"line":16656},[92,40284,38862],{"class":161},[92,40286,40287,40289,40291],{"class":94,"line":16676},[92,40288,4621],{"class":98},[92,40290,38869],{"class":151},[92,40292,38872],{"class":102},[92,40294,40295],{"class":94,"line":16682},[92,40296,38877],{"class":161},[92,40298,40299,40301,40303,40305,40307],{"class":94,"line":16693},[92,40300,38882],{"class":102},[92,40302,38885],{"class":5196},[92,40304,148],{"class":98},[92,40306,38890],{"class":207},[92,40308,109],{"class":102},[92,40310,40311],{"class":94,"line":16716},[92,40312,38897],{"class":161},[92,40314,40315,40317,40319,40321,40323,40325],{"class":94,"line":16738},[92,40316,38902],{"class":98},[92,40318,38905],{"class":102},[92,40320,38908],{"class":98},[92,40322,38911],{"class":98},[92,40324,38914],{"class":151},[92,40326,3718],{"class":102},[92,40328,40329],{"class":94,"line":16743},[92,40330,38921],{"class":161},[92,40332,40333,40335,40337],{"class":94,"line":16749},[92,40334,38926],{"class":102},[92,40336,294],{"class":151},[92,40338,109],{"class":102},[92,40340,40341],{"class":94,"line":16763},[92,40342,38935],{"class":161},[92,40344,40345,40347,40349],{"class":94,"line":16776},[92,40346,38940],{"class":98},[92,40348,38869],{"class":151},[92,40350,38945],{"class":102},[92,40352,40353],{"class":94,"line":16781},[92,40354,38950],{"class":161},[92,40356,40357],{"class":94,"line":16795},[92,40358,38955],{"class":161},[92,40360,40361,40363,40365,40367,40369],{"class":94,"line":16800},[92,40362,38960],{"class":102},[92,40364,294],{"class":151},[92,40366,481],{"class":102},[92,40368,38967],{"class":151},[92,40370,109],{"class":102},[92,40372,40373],{"class":94,"line":16806},[92,40374,38974],{"class":161},[92,40376,40377,40379,40381,40383,40385,40387],{"class":94,"line":16811},[92,40378,38902],{"class":98},[92,40380,38905],{"class":102},[92,40382,38908],{"class":98},[92,40384,38911],{"class":98},[92,40386,38914],{"class":151},[92,40388,3718],{"class":102},[92,40390,40391,40393,40395],{"class":94,"line":16825},[92,40392,38926],{"class":102},[92,40394,294],{"class":151},[92,40396,109],{"class":102},[92,40398,40399],{"class":94,"line":16830},[92,40400,2379],{"emptyLinePlaceholder":17},[92,40402,40403],{"class":94,"line":16835},[92,40404,35146],{"class":161},[92,40406,40407,40409,40411],{"class":94,"line":16849},[92,40408,30782],{"class":98},[92,40410,31074],{"class":1942},[92,40412,31077],{"class":102},[92,40414,40415,40417,40419,40421],{"class":94,"line":16861},[92,40416,31082],{"class":102},[92,40418,148],{"class":98},[92,40420,30804],{"class":151},[92,40422,39023],{"class":102},[92,40424,40425,40427,40429,40431],{"class":94,"line":16866},[92,40426,31082],{"class":102},[92,40428,148],{"class":98},[92,40430,30804],{"class":151},[92,40432,39034],{"class":102},[92,40434,40435,40437,40439,40441],{"class":94,"line":16879},[92,40436,31082],{"class":102},[92,40438,148],{"class":98},[92,40440,30804],{"class":151},[92,40442,39045],{"class":102},[92,40444,40445,40447,40449,40451],{"class":94,"line":16884},[92,40446,31082],{"class":102},[92,40448,148],{"class":98},[92,40450,30804],{"class":151},[92,40452,39056],{"class":102},[92,40454,40455,40457,40459,40461],{"class":94,"line":16889},[92,40456,31082],{"class":102},[92,40458,148],{"class":98},[92,40460,30804],{"class":151},[92,40462,39067],{"class":102},[92,40464,40465,40467,40469,40471],{"class":94,"line":16894},[92,40466,31082],{"class":102},[92,40468,148],{"class":98},[92,40470,30804],{"class":151},[92,40472,39078],{"class":102},[92,40474,40475,40477],{"class":94,"line":16907},[92,40476,14732],{"class":98},[92,40478,31190],{"class":102},[92,40480,40481],{"class":94,"line":16912},[92,40482,2379],{"emptyLinePlaceholder":17},[92,40484,40485],{"class":94,"line":32614},[92,40486,39093],{"class":161},[92,40488,40489,40491,40493,40495,40497],{"class":94,"line":32620},[92,40490,1510],{"class":98},[92,40492,31201],{"class":151},[92,40494,2928],{"class":98},[92,40496,39104],{"class":207},[92,40498,3718],{"class":102},[92,40500,40501,40503,40505,40507,40509,40511,40513,40515,40517],{"class":94,"line":32626},[92,40502,31218],{"class":102},[92,40504,148],{"class":98},[92,40506,30432],{"class":102},[92,40508,31225],{"class":207},[92,40510,1683],{"class":98},[92,40512,31230],{"class":102},[92,40514,1680],{"class":98},[92,40516,30457],{"class":207},[92,40518,109],{"class":102},[92,40520,40521,40523],{"class":94,"line":32632},[92,40522,31280],{"class":151},[92,40524,30466],{"class":102},[92,40526,40527,40529,40531],{"class":94,"line":32638},[92,40528,31270],{"class":102},[92,40530,148],{"class":98},[92,40532,39141],{"class":102},[92,40534,40535,40537,40539,40541,40543,40545,40547,40549],{"class":94,"line":32649},[92,40536,31280],{"class":151},[92,40538,31283],{"class":102},[92,40540,320],{"class":151},[92,40542,481],{"class":102},[92,40544,31482],{"class":151},[92,40546,481],{"class":102},[92,40548,31482],{"class":151},[92,40550,31296],{"class":102},[46,40552,40553],{"start":1158},[49,40554,40555],{},"测试代码",[83,40557,40559],{"className":30359,"code":40558,"language":30361,"meta":10,"style":10},"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",[89,40560,40561,40567,40577,40587,40591,40601,40612,40616,40620,40624,40632,40648,40658,40674,40684,40698,40702,40712,40722,40732,40738,40742,40746,40754,40758,40774,40782,40786,40790,40798,40806,40810,40814,40818,40822,40828,40832,40842,40850,40858,40862,40866,40870,40878,40882,40898,40902,40906,40910,40922,40926,40938,40942,40946,40958,40962,40972,40976,40980,40992,40996,41005,41009,41013,41021,41025,41033,41037,41041,41045,41049,41053,41069,41077,41081,41085,41133,41139,41143,41153,41161,41169,41173,41177,41181,41185,41193,41197,41213,41217,41225,41233],{"__ignoreMap":10},[92,40562,40563,40565],{"class":94,"line":95},[92,40564,30373],{"class":98},[92,40566,30376],{"class":102},[92,40568,40569,40571,40573,40575],{"class":94,"line":11},[92,40570,30373],{"class":98},[92,40572,31396],{"class":102},[92,40574,31364],{"class":98},[92,40576,31401],{"class":102},[92,40578,40579,40581,40583,40585],{"class":94,"line":1158},[92,40580,30718],{"class":98},[92,40582,31379],{"class":102},[92,40584,30373],{"class":98},[92,40586,31384],{"class":102},[92,40588,40589],{"class":94,"line":1173},[92,40590,33903],{"class":161},[92,40592,40593,40595,40597,40599],{"class":94,"line":1179},[92,40594,30718],{"class":98},[92,40596,31349],{"class":102},[92,40598,30373],{"class":98},[92,40600,31354],{"class":102},[92,40602,40603,40605,40607,40609],{"class":94,"line":1193},[92,40604,30718],{"class":98},[92,40606,31895],{"class":102},[92,40608,30373],{"class":98},[92,40610,40611],{"class":151}," VGG16\n",[92,40613,40614],{"class":94,"line":1199},[92,40615,2379],{"emptyLinePlaceholder":17},[92,40617,40618],{"class":94,"line":1290},[92,40619,2379],{"emptyLinePlaceholder":17},[92,40621,40622],{"class":94,"line":1296},[92,40623,33932],{"class":161},[92,40625,40626,40628,40630],{"class":94,"line":1308},[92,40627,31928],{"class":98},[92,40629,33939],{"class":1942},[92,40631,31934],{"class":102},[92,40633,40634,40636,40638,40640,40642,40644,40646],{"class":94,"line":1591},[92,40635,33946],{"class":102},[92,40637,148],{"class":98},[92,40639,31436],{"class":102},[92,40641,31439],{"class":5196},[92,40643,148],{"class":98},[92,40645,31444],{"class":207},[92,40647,31447],{"class":102},[92,40649,40650,40652,40654,40656],{"class":94,"line":1596},[92,40651,33963],{"class":5196},[92,40653,148],{"class":98},[92,40655,33968],{"class":151},[92,40657,31447],{"class":102},[92,40659,40660,40662,40664,40666,40668,40670,40672],{"class":94,"line":1602},[92,40661,33975],{"class":5196},[92,40663,148],{"class":98},[92,40665,31474],{"class":102},[92,40667,31477],{"class":5196},[92,40669,148],{"class":98},[92,40671,31482],{"class":151},[92,40673,31485],{"class":102},[92,40675,40676,40678,40680,40682],{"class":94,"line":1607},[92,40677,33992],{"class":5196},[92,40679,148],{"class":98},[92,40681,31457],{"class":151},[92,40683,109],{"class":102},[92,40685,40686,40688,40690,40692,40694,40696],{"class":94,"line":1621},[92,40687,34003],{"class":102},[92,40689,148],{"class":98},[92,40691,31515],{"class":102},[92,40693,31518],{"class":5196},[92,40695,148],{"class":98},[92,40697,34014],{"class":102},[92,40699,40700],{"class":94,"line":1626},[92,40701,34019],{"class":161},[92,40703,40704,40706,40708,40710],{"class":94,"line":1632},[92,40705,34024],{"class":5196},[92,40707,148],{"class":98},[92,40709,320],{"class":151},[92,40711,31447],{"class":102},[92,40713,40714,40716,40718,40720],{"class":94,"line":1653},[92,40715,34035],{"class":5196},[92,40717,148],{"class":98},[92,40719,31457],{"class":151},[92,40721,31447],{"class":102},[92,40723,40724,40726,40728,40730],{"class":94,"line":1658},[92,40725,34046],{"class":5196},[92,40727,148],{"class":98},[92,40729,294],{"class":151},[92,40731,109],{"class":102},[92,40733,40734,40736],{"class":94,"line":1672},[92,40735,4069],{"class":98},[92,40737,34059],{"class":102},[92,40739,40740],{"class":94,"line":1677},[92,40741,2379],{"emptyLinePlaceholder":17},[92,40743,40744],{"class":94,"line":1706},[92,40745,34068],{"class":161},[92,40747,40748,40750,40752],{"class":94,"line":1711},[92,40749,31928],{"class":98},[92,40751,34075],{"class":1942},[92,40753,34078],{"class":102},[92,40755,40756],{"class":94,"line":1728},[92,40757,34083],{"class":161},[92,40759,40760,40762,40764,40766,40768,40770,40772],{"class":94,"line":1733},[92,40761,31218],{"class":102},[92,40763,148],{"class":98},[92,40765,31225],{"class":207},[92,40767,1683],{"class":98},[92,40769,31230],{"class":102},[92,40771,1680],{"class":98},[92,40773,34100],{"class":207},[92,40775,40776,40778,40780],{"class":94,"line":1738},[92,40777,31270],{"class":102},[92,40779,148],{"class":98},[92,40781,32270],{"class":102},[92,40783,40784],{"class":94,"line":1743},[92,40785,2379],{"emptyLinePlaceholder":17},[92,40787,40788],{"class":94,"line":1757},[92,40789,34117],{"class":161},[92,40791,40792,40794,40796],{"class":94,"line":1762},[92,40793,34122],{"class":102},[92,40795,148],{"class":98},[92,40797,32323],{"class":151},[92,40799,40800,40802,40804],{"class":94,"line":2556},[92,40801,34131],{"class":102},[92,40803,148],{"class":98},[92,40805,3064],{"class":151},[92,40807,40808],{"class":94,"line":2570},[92,40809,2379],{"emptyLinePlaceholder":17},[92,40811,40812],{"class":94,"line":2578},[92,40813,34144],{"class":161},[92,40815,40816],{"class":94,"line":2583},[92,40817,34149],{"class":161},[92,40819,40820],{"class":94,"line":2589},[92,40821,34154],{"class":161},[92,40823,40824,40826],{"class":94,"line":2595},[92,40825,34159],{"class":98},[92,40827,32865],{"class":102},[92,40829,40830],{"class":94,"line":2600},[92,40831,34166],{"class":161},[92,40833,40834,40836,40838,40840],{"class":94,"line":7928},[92,40835,3382],{"class":98},[92,40837,34173],{"class":102},[92,40839,26024],{"class":98},[92,40841,34178],{"class":102},[92,40843,40844,40846,40848],{"class":94,"line":7952},[92,40845,34183],{"class":102},[92,40847,148],{"class":98},[92,40849,34188],{"class":102},[92,40851,40852,40854,40856],{"class":94,"line":7957},[92,40853,34193],{"class":102},[92,40855,148],{"class":98},[92,40857,34198],{"class":102},[92,40859,40860],{"class":94,"line":7963},[92,40861,34203],{"class":161},[92,40863,40864],{"class":94,"line":7990},[92,40865,32856],{"class":102},[92,40867,40868],{"class":94,"line":7995},[92,40869,34212],{"class":161},[92,40871,40872,40874,40876],{"class":94,"line":8001},[92,40873,32641],{"class":102},[92,40875,148],{"class":98},[92,40877,34221],{"class":102},[92,40879,40880],{"class":94,"line":8013},[92,40881,34226],{"class":161},[92,40883,40884,40886,40888,40890,40892,40894,40896],{"class":94,"line":8025},[92,40885,32658],{"class":102},[92,40887,148],{"class":98},[92,40889,32663],{"class":102},[92,40891,32666],{"class":5196},[92,40893,148],{"class":98},[92,40895,320],{"class":151},[92,40897,109],{"class":102},[92,40899,40900],{"class":94,"line":8037},[92,40901,34247],{"class":161},[92,40903,40904],{"class":94,"line":9696},[92,40905,34252],{"class":161},[92,40907,40908],{"class":94,"line":9721},[92,40909,34257],{"class":161},[92,40911,40912,40914,40916,40918,40920],{"class":94,"line":9744},[92,40913,34262],{"class":102},[92,40915,9457],{"class":98},[92,40917,32768],{"class":102},[92,40919,2928],{"class":98},[92,40921,34271],{"class":102},[92,40923,40924],{"class":94,"line":9768},[92,40925,34276],{"class":161},[92,40927,40928,40930,40932,40934,40936],{"class":94,"line":9773},[92,40929,34281],{"class":102},[92,40931,9457],{"class":98},[92,40933,34286],{"class":102},[92,40935,294],{"class":151},[92,40937,109],{"class":102},[92,40939,40940],{"class":94,"line":9778},[92,40941,2379],{"emptyLinePlaceholder":17},[92,40943,40944],{"class":94,"line":9783},[92,40945,34299],{"class":161},[92,40947,40948,40950,40952,40954,40956],{"class":94,"line":9792},[92,40949,34304],{"class":102},[92,40951,148],{"class":98},[92,40953,34309],{"class":102},[92,40955,687],{"class":98},[92,40957,34314],{"class":102},[92,40959,40960],{"class":94,"line":9797},[92,40961,34319],{"class":161},[92,40963,40964,40966,40968,40970],{"class":94,"line":9803},[92,40965,32432],{"class":151},[92,40967,103],{"class":102},[92,40969,34328],{"class":207},[92,40971,34331],{"class":102},[92,40973,40974],{"class":94,"line":9824},[92,40975,2379],{"emptyLinePlaceholder":17},[92,40977,40978],{"class":94,"line":9830},[92,40979,34340],{"class":161},[92,40981,40982,40984,40986,40988,40990],{"class":94,"line":9844},[92,40983,1510],{"class":98},[92,40985,31201],{"class":151},[92,40987,2928],{"class":98},[92,40989,31206],{"class":207},[92,40991,3718],{"class":102},[92,40993,40994],{"class":94,"line":9850},[92,40995,34357],{"class":161},[92,40997,40998,41000,41002],{"class":94,"line":9877},[92,40999,31270],{"class":102},[92,41001,148],{"class":98},[92,41003,41004],{"class":102},"VGG16()\n",[92,41006,41007],{"class":94,"line":9886},[92,41008,34370],{"class":161},[92,41010,41011],{"class":94,"line":9892},[92,41012,34375],{"class":161},[92,41014,41015,41017,41019],{"class":94,"line":9900},[92,41016,34380],{"class":102},[92,41018,34383],{"class":207},[92,41020,30478],{"class":102},[92,41022,41023],{"class":94,"line":9905},[92,41024,34390],{"class":161},[92,41026,41027,41029,41031],{"class":94,"line":16584},[92,41028,34003],{"class":102},[92,41030,148],{"class":98},[92,41032,34399],{"class":102},[92,41034,41035],{"class":94,"line":16590},[92,41036,34404],{"class":161},[92,41038,41039],{"class":94,"line":16613},[92,41040,34409],{"class":102},[92,41042,41043],{"class":94,"line":16619},[92,41044,2379],{"emptyLinePlaceholder":17},[92,41046,41047],{"class":94,"line":16642},[92,41048,34418],{"class":161},[92,41050,41051],{"class":94,"line":16656},[92,41052,34423],{"class":161},[92,41054,41055,41057,41059,41061,41063,41065,41067],{"class":94,"line":16676},[92,41056,31218],{"class":102},[92,41058,148],{"class":98},[92,41060,31225],{"class":207},[92,41062,1683],{"class":98},[92,41064,31230],{"class":102},[92,41066,1680],{"class":98},[92,41068,34100],{"class":207},[92,41070,41071,41073,41075],{"class":94,"line":16682},[92,41072,31270],{"class":102},[92,41074,148],{"class":98},[92,41076,32270],{"class":102},[92,41078,41079],{"class":94,"line":16693},[92,41080,34452],{"class":161},[92,41082,41083],{"class":94,"line":16716},[92,41084,34457],{"class":161},[92,41086,41087,41089,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131],{"class":94,"line":16738},[92,41088,34462],{"class":102},[92,41090,148],{"class":98},[92,41092,993],{"class":102},[92,41094,34469],{"class":207},[92,41096,481],{"class":102},[92,41098,34474],{"class":207},[92,41100,481],{"class":102},[92,41102,34479],{"class":207},[92,41104,481],{"class":102},[92,41106,34484],{"class":207},[92,41108,481],{"class":102},[92,41110,34489],{"class":207},[92,41112,481],{"class":102},[92,41114,34494],{"class":207},[92,41116,481],{"class":102},[92,41118,34499],{"class":207},[92,41120,481],{"class":102},[92,41122,34504],{"class":207},[92,41124,481],{"class":102},[92,41126,34509],{"class":207},[92,41128,481],{"class":102},[92,41130,34514],{"class":207},[92,41132,33227],{"class":102},[92,41134,41135,41137],{"class":94,"line":16743},[92,41136,34159],{"class":98},[92,41138,32865],{"class":102},[92,41140,41141],{"class":94,"line":16749},[92,41142,34527],{"class":161},[92,41144,41145,41147,41149,41151],{"class":94,"line":16763},[92,41146,3382],{"class":98},[92,41148,34534],{"class":102},[92,41150,26024],{"class":98},[92,41152,34178],{"class":102},[92,41154,41155,41157,41159],{"class":94,"line":16776},[92,41156,32591],{"class":102},[92,41158,148],{"class":98},[92,41160,32596],{"class":102},[92,41162,41163,41165,41167],{"class":94,"line":16781},[92,41164,32606],{"class":102},[92,41166,148],{"class":98},[92,41168,32611],{"class":102},[92,41170,41171],{"class":94,"line":16795},[92,41172,2379],{"emptyLinePlaceholder":17},[92,41174,41175],{"class":94,"line":16800},[92,41176,34563],{"class":161},[92,41178,41179],{"class":94,"line":16806},[92,41180,32856],{"class":102},[92,41182,41183],{"class":94,"line":16811},[92,41184,34572],{"class":161},[92,41186,41187,41189,41191],{"class":94,"line":16825},[92,41188,32641],{"class":102},[92,41190,148],{"class":98},[92,41192,32646],{"class":102},[92,41194,41195],{"class":94,"line":16830},[92,41196,34585],{"class":161},[92,41198,41199,41201,41203,41205,41207,41209,41211],{"class":94,"line":16835},[92,41200,32658],{"class":102},[92,41202,148],{"class":98},[92,41204,32663],{"class":102},[92,41206,32666],{"class":5196},[92,41208,148],{"class":98},[92,41210,320],{"class":151},[92,41212,109],{"class":102},[92,41214,41215],{"class":94,"line":16849},[92,41216,34606],{"class":161},[92,41218,41219,41221,41223],{"class":94,"line":16861},[92,41220,34611],{"class":102},[92,41222,148],{"class":98},[92,41224,34616],{"class":102},[92,41226,41227,41229,41231],{"class":94,"line":16866},[92,41228,34621],{"class":102},[92,41230,148],{"class":98},[92,41232,34626],{"class":102},[92,41234,41235,41237,41239,41241,41243,41245,41247,41249],{"class":94,"line":16879},[92,41236,34631],{"class":151},[92,41238,103],{"class":102},[92,41240,34636],{"class":207},[92,41242,34639],{"class":102},[92,41244,34642],{"class":207},[92,41246,481],{"class":102},[92,41248,34647],{"class":207},[92,41250,34650],{"class":102},[63,41252,41254],{"id":41253},"_23googlenet","2.3.GoogLeNet",[21978,41256,41258],{"id":41257},"_231原理","2.3.1.原理",[46,41260,41261],{},[49,41262,41263],{},"网络结构",[38,41265,41266],{},[1441,41267],{"alt":10,"src":41268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[38,41270,41271],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[38,41273,41274],{},[1441,41275],{"alt":10,"src":41276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[38,41278,41279],{},[1441,41280],{"alt":10,"src":41281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[38,41283,41284],{},[1441,41285],{"alt":10,"src":41286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[46,41288,41289],{"start":11},[49,41290,41291],{},"1x1卷积的优点",[38,41293,41294],{},[1441,41295],{"alt":10,"src":41296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[46,41298,41299],{"start":1158},[49,41300,41301],{},"全局平均池化层优点",[38,41303,41304],{},[1441,41305],{"alt":10,"src":41306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[38,41308,41309],{},[1441,41310],{"alt":10,"src":41311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[46,41313,41314],{"start":1173},[49,41315,41316],{},"参数详细描述",[38,41318,41319],{},[1441,41320],{"alt":10,"src":41321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[38,41323,41324],{},[1441,41325],{"alt":10,"src":41326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[38,41328,41329],{},[1441,41330],{"alt":10,"src":41331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[38,41333,41334],{},[1441,41335],{"alt":10,"src":41336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[38,41338,41339],{},[1441,41340],{"alt":10,"src":41341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[38,41343,41344],{},[1441,41345],{"alt":10,"src":41346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[38,41348,41349],{},[1441,41350],{"alt":10,"src":41351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[38,41353,41354],{},[1441,41355],{"alt":10,"src":41356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[38,41358,41359],{},[1441,41360],{"alt":10,"src":41361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[38,41363,41364],{},[1441,41365],{"alt":10,"src":41366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[38,41368,41369],{},[1441,41370],{"alt":10,"src":41371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[38,41373,41374],{},[1441,41375],{"alt":10,"src":41376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[38,41378,41379],{},[1441,41380],{"alt":10,"src":41381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[38,41383,41384],{},[1441,41385],{"alt":10,"src":41386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[38,41388,41389],{},[1441,41390],{"alt":10,"src":41391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[38,41393,41394],{},[1441,41395],{"alt":10,"src":41396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[38,41398,41399],{},[1441,41400],{"alt":10,"src":41401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[38,41403,41404],{},[1441,41405],{"alt":10,"src":41406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[38,41408,41409],{},[1441,41410],{"alt":10,"src":41411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[38,41413,41414],{},[1441,41415],{"alt":10,"src":41416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[38,41418,41419],{},[1441,41420],{"alt":10,"src":41421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-050.png",[21978,41423,41425],{"id":41424},"_232代码实现","2.3.2.代码实现",[46,41427,41428],{},[49,41429,30692],{},[38,41431,41432],{},"根据原理一步一步搭建即可",[83,41434,41436],{"className":30359,"code":41435,"language":30361,"meta":10,"style":10},"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",[89,41437,41438,41444,41454,41464,41468,41485,41494,41509,41519,41524,41557,41562,41599,41646,41651,41687,41734,41739,41744,41779,41811,41815,41823,41839,41863,41888,41909,41914,41929,41933,41937,41942,41959,41964,41973,41988,41999,42043,42047,42075,42079,42090,42118,42122,42159,42163,42191,42195,42206,42242,42274,42302,42306,42317,42351,42383,42415,42448,42482,42510,42514,42525,42558,42590,42604,42608,42621,42625,42630,42642,42650,42672,42677,42682,42687,42692,42697,42702,42716,42724,42733,42746,42761,42770,42774,42782,42793,42804,42815,42826,42837,42843,42847,42852,42864,42884,42893],{"__ignoreMap":10},[92,41439,41440,41442],{"class":94,"line":95},[92,41441,30373],{"class":98},[92,41443,30376],{"class":102},[92,41445,41446,41448,41450,41452],{"class":94,"line":11},[92,41447,30718],{"class":98},[92,41449,30721],{"class":102},[92,41451,30373],{"class":98},[92,41453,30726],{"class":102},[92,41455,41456,41458,41460,41462],{"class":94,"line":1158},[92,41457,30718],{"class":98},[92,41459,30738],{"class":102},[92,41461,30373],{"class":98},[92,41463,30743],{"class":102},[92,41465,41466],{"class":94,"line":1173},[92,41467,2379],{"emptyLinePlaceholder":17},[92,41469,41470,41472,41475,41477,41479,41481,41483],{"class":94,"line":1179},[92,41471,14674],{"class":98},[92,41473,41474],{"class":1942}," Inception",[92,41476,103],{"class":102},[92,41478,30759],{"class":1942},[92,41480,661],{"class":102},[92,41482,30764],{"class":1942},[92,41484,30767],{"class":102},[92,41486,41487,41489,41491],{"class":94,"line":1193},[92,41488,30782],{"class":98},[92,41490,30785],{"class":151},[92,41492,41493],{"class":102},"(self,in_channels,c1,c2,c3,c4):\n",[92,41495,41496,41498,41501,41503,41505,41507],{"class":94,"line":1199},[92,41497,30798],{"class":151},[92,41499,41500],{"class":102},"(Inception,",[92,41502,30804],{"class":151},[92,41504,30807],{"class":102},[92,41506,30810],{"class":151},[92,41508,1955],{"class":102},[92,41510,41511,41513,41515,41517],{"class":94,"line":1290},[92,41512,30826],{"class":151},[92,41514,34752],{"class":102},[92,41516,148],{"class":98},[92,41518,34757],{"class":102},[92,41520,41521],{"class":94,"line":1296},[92,41522,41523],{"class":161},"        # 路线1：定义1*1卷积\n",[92,41525,41526,41528,41531,41533,41535,41537,41539,41542,41544,41546,41549,41551,41553,41555],{"class":94,"line":1308},[92,41527,30826],{"class":151},[92,41529,41530],{"class":102},".p1_1",[92,41532,148],{"class":98},[92,41534,30834],{"class":102},[92,41536,30837],{"class":5196},[92,41538,148],{"class":98},[92,41540,41541],{"class":102},"in_channels,",[92,41543,30846],{"class":5196},[92,41545,148],{"class":98},[92,41547,41548],{"class":102},"c1,",[92,41550,30855],{"class":5196},[92,41552,148],{"class":98},[92,41554,320],{"class":151},[92,41556,109],{"class":102},[92,41558,41559],{"class":94,"line":1591},[92,41560,41561],{"class":161},"        # 路线2：定义1*1卷积和3*3\n",[92,41563,41564,41566,41569,41571,41573,41575,41577,41579,41581,41583,41586,41588,41591,41593,41595,41597],{"class":94,"line":1596},[92,41565,30826],{"class":151},[92,41567,41568],{"class":102},".p2_1",[92,41570,148],{"class":98},[92,41572,30834],{"class":102},[92,41574,30837],{"class":5196},[92,41576,148],{"class":98},[92,41578,41541],{"class":102},[92,41580,30846],{"class":5196},[92,41582,148],{"class":98},[92,41584,41585],{"class":102},"c2[",[92,41587,294],{"class":151},[92,41589,41590],{"class":102},"],",[92,41592,30855],{"class":5196},[92,41594,148],{"class":98},[92,41596,320],{"class":151},[92,41598,109],{"class":102},[92,41600,41601,41603,41606,41608,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644],{"class":94,"line":1602},[92,41602,30826],{"class":151},[92,41604,41605],{"class":102},".p2_2",[92,41607,148],{"class":98},[92,41609,30834],{"class":102},[92,41611,30837],{"class":5196},[92,41613,148],{"class":98},[92,41615,41585],{"class":102},[92,41617,294],{"class":151},[92,41619,41590],{"class":102},[92,41621,30846],{"class":5196},[92,41623,148],{"class":98},[92,41625,41585],{"class":102},[92,41627,320],{"class":151},[92,41629,41590],{"class":102},[92,41631,30855],{"class":5196},[92,41633,148],{"class":98},[92,41635,174],{"class":151},[92,41637,481],{"class":102},[92,41639,30864],{"class":5196},[92,41641,148],{"class":98},[92,41643,320],{"class":151},[92,41645,109],{"class":102},[92,41647,41648],{"class":94,"line":1607},[92,41649,41650],{"class":161},"        # 路线3：定义1*1卷积和5*5\n",[92,41652,41653,41655,41658,41660,41662,41664,41666,41668,41670,41672,41675,41677,41679,41681,41683,41685],{"class":94,"line":1621},[92,41654,30826],{"class":151},[92,41656,41657],{"class":102},".p3_1",[92,41659,148],{"class":98},[92,41661,30834],{"class":102},[92,41663,30837],{"class":5196},[92,41665,148],{"class":98},[92,41667,41541],{"class":102},[92,41669,30846],{"class":5196},[92,41671,148],{"class":98},[92,41673,41674],{"class":102},"c3[",[92,41676,294],{"class":151},[92,41678,41590],{"class":102},[92,41680,30855],{"class":5196},[92,41682,148],{"class":98},[92,41684,320],{"class":151},[92,41686,109],{"class":102},[92,41688,41689,41691,41694,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732],{"class":94,"line":1626},[92,41690,30826],{"class":151},[92,41692,41693],{"class":102},".p3_2",[92,41695,148],{"class":98},[92,41697,30834],{"class":102},[92,41699,30837],{"class":5196},[92,41701,148],{"class":98},[92,41703,41674],{"class":102},[92,41705,294],{"class":151},[92,41707,41590],{"class":102},[92,41709,30846],{"class":5196},[92,41711,148],{"class":98},[92,41713,41674],{"class":102},[92,41715,320],{"class":151},[92,41717,41590],{"class":102},[92,41719,30855],{"class":5196},[92,41721,148],{"class":98},[92,41723,422],{"class":151},[92,41725,481],{"class":102},[92,41727,30864],{"class":5196},[92,41729,148],{"class":98},[92,41731,180],{"class":151},[92,41733,109],{"class":102},[92,41735,41736],{"class":94,"line":1632},[92,41737,41738],{"class":161},"        # 路线4：定义3*3最大池化和1*1卷积\n",[92,41740,41741],{"class":94,"line":1653},[92,41742,41743],{"class":161},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[92,41745,41746,41748,41751,41753,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777],{"class":94,"line":1658},[92,41747,30826],{"class":151},[92,41749,41750],{"class":102},".p4_1",[92,41752,148],{"class":98},[92,41754,34810],{"class":102},[92,41756,30855],{"class":5196},[92,41758,148],{"class":98},[92,41760,174],{"class":151},[92,41762,481],{"class":102},[92,41764,30910],{"class":5196},[92,41766,148],{"class":98},[92,41768,320],{"class":151},[92,41770,481],{"class":102},[92,41772,30864],{"class":5196},[92,41774,148],{"class":98},[92,41776,320],{"class":151},[92,41778,109],{"class":102},[92,41780,41781,41783,41786,41788,41790,41792,41794,41796,41798,41800,41803,41805,41807,41809],{"class":94,"line":1672},[92,41782,30826],{"class":151},[92,41784,41785],{"class":102},".p4_2",[92,41787,148],{"class":98},[92,41789,30834],{"class":102},[92,41791,30837],{"class":5196},[92,41793,148],{"class":98},[92,41795,41541],{"class":102},[92,41797,30846],{"class":5196},[92,41799,148],{"class":98},[92,41801,41802],{"class":102},"c4,",[92,41804,30855],{"class":5196},[92,41806,148],{"class":98},[92,41808,320],{"class":151},[92,41810,109],{"class":102},[92,41812,41813],{"class":94,"line":1677},[92,41814,2379],{"emptyLinePlaceholder":17},[92,41816,41817,41819,41821],{"class":94,"line":1706},[92,41818,30782],{"class":98},[92,41820,31074],{"class":1942},[92,41822,31077],{"class":102},[92,41824,41825,41828,41830,41832,41834,41836],{"class":94,"line":1711},[92,41826,41827],{"class":102},"        p1",[92,41829,148],{"class":98},[92,41831,30804],{"class":151},[92,41833,35165],{"class":102},[92,41835,30804],{"class":151},[92,41837,41838],{"class":102},".p1_1(x))\n",[92,41840,41841,41843,41845,41847,41849,41851,41854,41856,41858,41860],{"class":94,"line":1728},[92,41842,7065],{"class":102},[92,41844,148],{"class":98},[92,41846,30804],{"class":151},[92,41848,35165],{"class":102},[92,41850,30804],{"class":151},[92,41852,41853],{"class":102},".p2_2(",[92,41855,30804],{"class":151},[92,41857,35165],{"class":102},[92,41859,30804],{"class":151},[92,41861,41862],{"class":102},".p2_1(x))))\n",[92,41864,41865,41868,41870,41872,41874,41876,41879,41881,41883,41885],{"class":94,"line":1733},[92,41866,41867],{"class":102},"        p3",[92,41869,148],{"class":98},[92,41871,30804],{"class":151},[92,41873,35165],{"class":102},[92,41875,30804],{"class":151},[92,41877,41878],{"class":102},".p3_2(",[92,41880,30804],{"class":151},[92,41882,35165],{"class":102},[92,41884,30804],{"class":151},[92,41886,41887],{"class":102},".p3_1(x))))\n",[92,41889,41890,41893,41895,41897,41899,41901,41904,41906],{"class":94,"line":1738},[92,41891,41892],{"class":102},"        p4",[92,41894,148],{"class":98},[92,41896,30804],{"class":151},[92,41898,35165],{"class":102},[92,41900,30804],{"class":151},[92,41902,41903],{"class":102},".p4_2(",[92,41905,30804],{"class":151},[92,41907,41908],{"class":102},".p4_1(x)))\n",[92,41910,41911],{"class":94,"line":1743},[92,41912,41913],{"class":161},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[92,41915,41916,41918,41921,41923,41925,41927],{"class":94,"line":1757},[92,41917,14732],{"class":98},[92,41919,41920],{"class":102}," torch.cat((p1,p2,p3,p4),",[92,41922,32666],{"class":5196},[92,41924,148],{"class":98},[92,41926,320],{"class":151},[92,41928,109],{"class":102},[92,41930,41931],{"class":94,"line":1762},[92,41932,2379],{"emptyLinePlaceholder":17},[92,41934,41935],{"class":94,"line":2556},[92,41936,2379],{"emptyLinePlaceholder":17},[92,41938,41939],{"class":94,"line":2570},[92,41940,41941],{"class":161},"# 搭建GoogLeNet网络\n",[92,41943,41944,41946,41949,41951,41953,41955,41957],{"class":94,"line":2578},[92,41945,14674],{"class":98},[92,41947,41948],{"class":1942}," GoogLeNet",[92,41950,103],{"class":102},[92,41952,30759],{"class":1942},[92,41954,661],{"class":102},[92,41956,30764],{"class":1942},[92,41958,30767],{"class":102},[92,41960,41961],{"class":94,"line":2583},[92,41962,41963],{"class":161},"    # 必须把Inception导入到里边\n",[92,41965,41966,41968,41970],{"class":94,"line":2589},[92,41967,30782],{"class":98},[92,41969,30785],{"class":151},[92,41971,41972],{"class":102},"(self,Inception):\n",[92,41974,41975,41977,41980,41982,41984,41986],{"class":94,"line":2595},[92,41976,30798],{"class":151},[92,41978,41979],{"class":102},"(GoogLeNet,",[92,41981,30804],{"class":151},[92,41983,30807],{"class":102},[92,41985,30810],{"class":151},[92,41987,1955],{"class":102},[92,41989,41990,41992,41995,41997],{"class":94,"line":2600},[92,41991,30826],{"class":151},[92,41993,41994],{"class":102},".b1",[92,41996,148],{"class":98},[92,41998,37990],{"class":102},[92,42000,42001,42003,42005,42007,42009,42011,42013,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039,42041],{"class":94,"line":7928},[92,42002,37995],{"class":102},[92,42004,30837],{"class":5196},[92,42006,148],{"class":98},[92,42008,320],{"class":151},[92,42010,481],{"class":102},[92,42012,30846],{"class":5196},[92,42014,148],{"class":98},[92,42016,306],{"class":151},[92,42018,481],{"class":102},[92,42020,30855],{"class":5196},[92,42022,148],{"class":98},[92,42024,472],{"class":151},[92,42026,481],{"class":102},[92,42028,30910],{"class":5196},[92,42030,148],{"class":98},[92,42032,180],{"class":151},[92,42034,481],{"class":102},[92,42036,30864],{"class":5196},[92,42038,148],{"class":98},[92,42040,174],{"class":151},[92,42042,38028],{"class":102},[92,42044,42045],{"class":94,"line":7952},[92,42046,38033],{"class":102},[92,42048,42049,42051,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071,42073],{"class":94,"line":7957},[92,42050,38078],{"class":102},[92,42052,30855],{"class":5196},[92,42054,148],{"class":98},[92,42056,174],{"class":151},[92,42058,481],{"class":102},[92,42060,30910],{"class":5196},[92,42062,148],{"class":98},[92,42064,180],{"class":151},[92,42066,481],{"class":102},[92,42068,30864],{"class":5196},[92,42070,148],{"class":98},[92,42072,320],{"class":151},[92,42074,109],{"class":102},[92,42076,42077],{"class":94,"line":7963},[92,42078,38107],{"class":102},[92,42080,42081,42083,42086,42088],{"class":94,"line":7990},[92,42082,30826],{"class":151},[92,42084,42085],{"class":102},".b2",[92,42087,148],{"class":98},[92,42089,37990],{"class":102},[92,42091,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116],{"class":94,"line":7995},[92,42093,37995],{"class":102},[92,42095,30837],{"class":5196},[92,42097,148],{"class":98},[92,42099,306],{"class":151},[92,42101,481],{"class":102},[92,42103,30846],{"class":5196},[92,42105,148],{"class":98},[92,42107,306],{"class":151},[92,42109,481],{"class":102},[92,42111,30855],{"class":5196},[92,42113,148],{"class":98},[92,42115,320],{"class":151},[92,42117,38028],{"class":102},[92,42119,42120],{"class":94,"line":8001},[92,42121,38033],{"class":102},[92,42123,42124,42126,42128,42130,42132,42134,42136,42138,42141,42143,42145,42147,42149,42151,42153,42155,42157],{"class":94,"line":8013},[92,42125,37995],{"class":102},[92,42127,30837],{"class":5196},[92,42129,148],{"class":98},[92,42131,306],{"class":151},[92,42133,481],{"class":102},[92,42135,30846],{"class":5196},[92,42137,148],{"class":98},[92,42139,42140],{"class":151},"192",[92,42142,481],{"class":102},[92,42144,30855],{"class":5196},[92,42146,148],{"class":98},[92,42148,174],{"class":151},[92,42150,481],{"class":102},[92,42152,30864],{"class":5196},[92,42154,148],{"class":98},[92,42156,320],{"class":151},[92,42158,38028],{"class":102},[92,42160,42161],{"class":94,"line":8025},[92,42162,38033],{"class":102},[92,42164,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189],{"class":94,"line":8037},[92,42166,38078],{"class":102},[92,42168,30855],{"class":5196},[92,42170,148],{"class":98},[92,42172,174],{"class":151},[92,42174,481],{"class":102},[92,42176,30910],{"class":5196},[92,42178,148],{"class":98},[92,42180,180],{"class":151},[92,42182,481],{"class":102},[92,42184,30864],{"class":5196},[92,42186,148],{"class":98},[92,42188,320],{"class":151},[92,42190,109],{"class":102},[92,42192,42193],{"class":94,"line":9696},[92,42194,38107],{"class":102},[92,42196,42197,42199,42202,42204],{"class":94,"line":9721},[92,42198,30826],{"class":151},[92,42200,42201],{"class":102},".b3",[92,42203,148],{"class":98},[92,42205,37990],{"class":102},[92,42207,42208,42211,42213,42215,42217,42220,42222,42224,42226,42229,42231,42233,42235,42238,42240],{"class":94,"line":9744},[92,42209,42210],{"class":102},"            Inception(",[92,42212,42140],{"class":151},[92,42214,481],{"class":102},[92,42216,306],{"class":151},[92,42218,42219],{"class":102},",(",[92,42221,312],{"class":151},[92,42223,481],{"class":102},[92,42225,32051],{"class":151},[92,42227,42228],{"class":102},"),(",[92,42230,704],{"class":151},[92,42232,481],{"class":102},[92,42234,300],{"class":151},[92,42236,42237],{"class":102},"),",[92,42239,300],{"class":151},[92,42241,38028],{"class":102},[92,42243,42244,42246,42248,42250,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272],{"class":94,"line":9768},[92,42245,42210],{"class":102},[92,42247,34851],{"class":151},[92,42249,481],{"class":102},[92,42251,32051],{"class":151},[92,42253,42219],{"class":102},[92,42255,32051],{"class":151},[92,42257,481],{"class":102},[92,42259,42140],{"class":151},[92,42261,42228],{"class":102},[92,42263,300],{"class":151},[92,42265,481],{"class":102},[92,42267,312],{"class":151},[92,42269,42237],{"class":102},[92,42271,306],{"class":151},[92,42273,38028],{"class":102},[92,42275,42276,42278,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300],{"class":94,"line":9773},[92,42277,38078],{"class":102},[92,42279,30855],{"class":5196},[92,42281,148],{"class":98},[92,42283,174],{"class":151},[92,42285,481],{"class":102},[92,42287,30910],{"class":5196},[92,42289,148],{"class":98},[92,42291,180],{"class":151},[92,42293,481],{"class":102},[92,42295,30864],{"class":5196},[92,42297,148],{"class":98},[92,42299,320],{"class":151},[92,42301,109],{"class":102},[92,42303,42304],{"class":94,"line":9778},[92,42305,38107],{"class":102},[92,42307,42308,42310,42313,42315],{"class":94,"line":9783},[92,42309,30826],{"class":151},[92,42311,42312],{"class":102},".b4",[92,42314,148],{"class":98},[92,42316,37990],{"class":102},[92,42318,42319,42321,42324,42326,42328,42330,42332,42334,42337,42339,42341,42343,42345,42347,42349],{"class":94,"line":9792},[92,42320,42210],{"class":102},[92,42322,42323],{"class":151},"480",[92,42325,481],{"class":102},[92,42327,42140],{"class":151},[92,42329,42219],{"class":102},[92,42331,312],{"class":151},[92,42333,481],{"class":102},[92,42335,42336],{"class":151},"208",[92,42338,42228],{"class":102},[92,42340,704],{"class":151},[92,42342,481],{"class":102},[92,42344,710],{"class":151},[92,42346,42237],{"class":102},[92,42348,306],{"class":151},[92,42350,38028],{"class":102},[92,42352,42353,42355,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381],{"class":94,"line":9797},[92,42354,42210],{"class":102},[92,42356,38438],{"class":151},[92,42358,481],{"class":102},[92,42360,21028],{"class":151},[92,42362,42219],{"class":102},[92,42364,721],{"class":151},[92,42366,481],{"class":102},[92,42368,31482],{"class":151},[92,42370,42228],{"class":102},[92,42372,903],{"class":151},[92,42374,481],{"class":102},[92,42376,306],{"class":151},[92,42378,42237],{"class":102},[92,42380,306],{"class":151},[92,42382,38028],{"class":102},[92,42384,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405,42407,42409,42411,42413],{"class":94,"line":9803},[92,42386,42210],{"class":102},[92,42388,38438],{"class":151},[92,42390,481],{"class":102},[92,42392,32051],{"class":151},[92,42394,42219],{"class":102},[92,42396,32051],{"class":151},[92,42398,481],{"class":102},[92,42400,34851],{"class":151},[92,42402,42228],{"class":102},[92,42404,903],{"class":151},[92,42406,481],{"class":102},[92,42408,306],{"class":151},[92,42410,42237],{"class":102},[92,42412,306],{"class":151},[92,42414,38028],{"class":102},[92,42416,42417,42419,42421,42423,42425,42427,42429,42431,42434,42436,42438,42440,42442,42444,42446],{"class":94,"line":9824},[92,42418,42210],{"class":102},[92,42420,38438],{"class":151},[92,42422,481],{"class":102},[92,42424,721],{"class":151},[92,42426,42219],{"class":102},[92,42428,32051],{"class":151},[92,42430,481],{"class":102},[92,42432,42433],{"class":151},"288",[92,42435,42228],{"class":102},[92,42437,300],{"class":151},[92,42439,481],{"class":102},[92,42441,306],{"class":151},[92,42443,42237],{"class":102},[92,42445,306],{"class":151},[92,42447,38028],{"class":102},[92,42449,42450,42452,42455,42457,42459,42461,42463,42465,42468,42470,42472,42474,42476,42478,42480],{"class":94,"line":9830},[92,42451,42210],{"class":102},[92,42453,42454],{"class":151},"528",[92,42456,481],{"class":102},[92,42458,34851],{"class":151},[92,42460,42219],{"class":102},[92,42462,21028],{"class":151},[92,42464,481],{"class":102},[92,42466,42467],{"class":151},"320",[92,42469,42228],{"class":102},[92,42471,300],{"class":151},[92,42473,481],{"class":102},[92,42475,32051],{"class":151},[92,42477,42237],{"class":102},[92,42479,32051],{"class":151},[92,42481,38028],{"class":102},[92,42483,42484,42486,42488,42490,42492,42494,42496,42498,42500,42502,42504,42506,42508],{"class":94,"line":9844},[92,42485,38078],{"class":102},[92,42487,30855],{"class":5196},[92,42489,148],{"class":98},[92,42491,174],{"class":151},[92,42493,481],{"class":102},[92,42495,30910],{"class":5196},[92,42497,148],{"class":98},[92,42499,180],{"class":151},[92,42501,481],{"class":102},[92,42503,30864],{"class":5196},[92,42505,148],{"class":98},[92,42507,320],{"class":151},[92,42509,109],{"class":102},[92,42511,42512],{"class":94,"line":9850},[92,42513,38107],{"class":102},[92,42515,42516,42518,42521,42523],{"class":94,"line":9877},[92,42517,30826],{"class":151},[92,42519,42520],{"class":102},".b5",[92,42522,148],{"class":98},[92,42524,37990],{"class":102},[92,42526,42527,42529,42532,42534,42536,42538,42540,42542,42544,42546,42548,42550,42552,42554,42556],{"class":94,"line":9886},[92,42528,42210],{"class":102},[92,42530,42531],{"class":151},"832",[92,42533,481],{"class":102},[92,42535,34851],{"class":151},[92,42537,42219],{"class":102},[92,42539,21028],{"class":151},[92,42541,481],{"class":102},[92,42543,42467],{"class":151},[92,42545,42228],{"class":102},[92,42547,300],{"class":151},[92,42549,481],{"class":102},[92,42551,32051],{"class":151},[92,42553,42237],{"class":102},[92,42555,32051],{"class":151},[92,42557,38028],{"class":102},[92,42559,42560,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588],{"class":94,"line":9892},[92,42561,42210],{"class":102},[92,42563,42531],{"class":151},[92,42565,481],{"class":102},[92,42567,34921],{"class":151},[92,42569,42219],{"class":102},[92,42571,42140],{"class":151},[92,42573,481],{"class":102},[92,42575,34921],{"class":151},[92,42577,42228],{"class":102},[92,42579,710],{"class":151},[92,42581,481],{"class":102},[92,42583,32051],{"class":151},[92,42585,42237],{"class":102},[92,42587,32051],{"class":151},[92,42589,38028],{"class":102},[92,42591,42592,42595,42597,42599,42601],{"class":94,"line":9900},[92,42593,42594],{"class":102},"            nn.AdaptiveAvgPool2d((",[92,42596,320],{"class":151},[92,42598,481],{"class":102},[92,42600,320],{"class":151},[92,42602,42603],{"class":102},")),\n",[92,42605,42606],{"class":94,"line":9905},[92,42607,38771],{"class":102},[92,42609,42610,42612,42615,42617,42619],{"class":94,"line":16584},[92,42611,38776],{"class":102},[92,42613,42614],{"class":151},"1024",[92,42616,481],{"class":102},[92,42618,549],{"class":151},[92,42620,109],{"class":102},[92,42622,42623],{"class":94,"line":16590},[92,42624,38107],{"class":102},[92,42626,42627],{"class":94,"line":16613},[92,42628,42629],{"class":161},"        # 对模型参数初始化\n",[92,42631,42632,42634,42636,42638,42640],{"class":94,"line":16619},[92,42633,3382],{"class":98},[92,42635,38849],{"class":102},[92,42637,26024],{"class":98},[92,42639,38854],{"class":151},[92,42641,38857],{"class":102},[92,42643,42644,42646,42648],{"class":94,"line":16642},[92,42645,4621],{"class":98},[92,42647,38869],{"class":151},[92,42649,38872],{"class":102},[92,42651,42652,42654,42657,42659,42662,42664,42666,42668,42670],{"class":94,"line":16656},[92,42653,38882],{"class":102},[92,42655,42656],{"class":5196},"mode",[92,42658,148],{"class":98},[92,42660,42661],{"class":207},"'fan_out'",[92,42663,481],{"class":102},[92,42665,38885],{"class":5196},[92,42667,148],{"class":98},[92,42669,38890],{"class":207},[92,42671,109],{"class":102},[92,42673,42674],{"class":94,"line":16676},[92,42675,42676],{"class":161},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[92,42678,42679],{"class":94,"line":16682},[92,42680,42681],{"class":161},"                # ② mode = 'fan_out'决定使用的fan值：\n",[92,42683,42684],{"class":94,"line":16693},[92,42685,42686],{"class":161},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[92,42688,42689],{"class":94,"line":16716},[92,42690,42691],{"class":161},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[92,42693,42694],{"class":94,"line":16738},[92,42695,42696],{"class":161},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[92,42698,42699],{"class":94,"line":16743},[92,42700,42701],{"class":161},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[92,42703,42704,42706,42708,42710,42712,42714],{"class":94,"line":16749},[92,42705,38902],{"class":98},[92,42707,38905],{"class":102},[92,42709,38908],{"class":98},[92,42711,38911],{"class":98},[92,42713,38914],{"class":151},[92,42715,3718],{"class":102},[92,42717,42718,42720,42722],{"class":94,"line":16763},[92,42719,38926],{"class":102},[92,42721,294],{"class":151},[92,42723,109],{"class":102},[92,42725,42726,42729,42731],{"class":94,"line":16776},[92,42727,42728],{"class":98},"                elif",[92,42730,38869],{"class":151},[92,42732,38945],{"class":102},[92,42734,42735,42738,42740,42742,42744],{"class":94,"line":16781},[92,42736,42737],{"class":102},"                    nn.init.normal_(m.weight,",[92,42739,294],{"class":151},[92,42741,481],{"class":102},[92,42743,38967],{"class":151},[92,42745,109],{"class":102},[92,42747,42748,42751,42753,42755,42757,42759],{"class":94,"line":16795},[92,42749,42750],{"class":98},"                    if",[92,42752,38905],{"class":102},[92,42754,38908],{"class":98},[92,42756,38911],{"class":98},[92,42758,38914],{"class":151},[92,42760,3718],{"class":102},[92,42762,42763,42766,42768],{"class":94,"line":16800},[92,42764,42765],{"class":102},"                        nn.init.constant_(m.bias,",[92,42767,294],{"class":151},[92,42769,109],{"class":102},[92,42771,42772],{"class":94,"line":16806},[92,42773,35146],{"class":161},[92,42775,42776,42778,42780],{"class":94,"line":16811},[92,42777,30782],{"class":98},[92,42779,31074],{"class":1942},[92,42781,31077],{"class":102},[92,42783,42784,42786,42788,42790],{"class":94,"line":16825},[92,42785,31082],{"class":102},[92,42787,148],{"class":98},[92,42789,30804],{"class":151},[92,42791,42792],{"class":102},".b1(x)\n",[92,42794,42795,42797,42799,42801],{"class":94,"line":16830},[92,42796,31082],{"class":102},[92,42798,148],{"class":98},[92,42800,30804],{"class":151},[92,42802,42803],{"class":102},".b2(x)\n",[92,42805,42806,42808,42810,42812],{"class":94,"line":16835},[92,42807,31082],{"class":102},[92,42809,148],{"class":98},[92,42811,30804],{"class":151},[92,42813,42814],{"class":102},".b3(x)\n",[92,42816,42817,42819,42821,42823],{"class":94,"line":16849},[92,42818,31082],{"class":102},[92,42820,148],{"class":98},[92,42822,30804],{"class":151},[92,42824,42825],{"class":102},".b4(x)\n",[92,42827,42828,42830,42832,42834],{"class":94,"line":16861},[92,42829,31082],{"class":102},[92,42831,148],{"class":98},[92,42833,30804],{"class":151},[92,42835,42836],{"class":102},".b5(x)\n",[92,42838,42839,42841],{"class":94,"line":16866},[92,42840,14732],{"class":98},[92,42842,31190],{"class":102},[92,42844,42845],{"class":94,"line":16879},[92,42846,2379],{"emptyLinePlaceholder":17},[92,42848,42849],{"class":94,"line":16884},[92,42850,42851],{"class":161},"# 模型展示\n",[92,42853,42854,42856,42858,42860,42862],{"class":94,"line":16889},[92,42855,1510],{"class":98},[92,42857,31201],{"class":151},[92,42859,2928],{"class":98},[92,42861,31206],{"class":207},[92,42863,3718],{"class":102},[92,42865,42866,42868,42870,42872,42874,42876,42878,42880,42882],{"class":94,"line":16894},[92,42867,31218],{"class":102},[92,42869,148],{"class":98},[92,42871,30432],{"class":102},[92,42873,31225],{"class":207},[92,42875,1683],{"class":98},[92,42877,31230],{"class":102},[92,42879,1680],{"class":98},[92,42881,30457],{"class":207},[92,42883,109],{"class":102},[92,42885,42886,42888,42890],{"class":94,"line":16907},[92,42887,31270],{"class":102},[92,42889,148],{"class":98},[92,42891,42892],{"class":102},"GoogLeNet(Inception).to(device)\n",[92,42894,42895,42897,42899,42901,42903,42905,42907,42909],{"class":94,"line":16912},[92,42896,31280],{"class":151},[92,42898,31283],{"class":102},[92,42900,320],{"class":151},[92,42902,481],{"class":102},[92,42904,31482],{"class":151},[92,42906,481],{"class":102},[92,42908,31482],{"class":151},[92,42910,31296],{"class":102},[46,42912,42913],{"start":11},[49,42914,39164],{},[83,42916,42918],{"className":30359,"code":42917,"language":30361,"meta":10,"style":10},"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",[89,42919,42920,42926,42932,42942,42948,42958,42968,42978,42988,42998,43002,43013,43023,43027,43031,43035,43043,43055,43065,43081,43091,43123,43137,43147,43157,43161,43171,43185,43195,43205,43215,43221,43225,43229,43233,43237,43241,43249,43269,43273,43277,43281,43285,43289,43305,43309,43313,43321,43325,43329,43337,43341,43345,43349,43357,43361,43365,43369,43373,43381,43385,43393,43397,43405,43409,43417,43421,43429,43433,43437,43445,43449,43453,43457,43469,43493,43507,43511,43515,43519,43527,43531,43539,43543,43551,43555,43563,43567,43575,43579,43587,43591,43603,43607,43615,43619,43627,43631,43635,43639,43643,43651,43655,43671,43675,43683,43687,43691,43695,43699,43703,43707,43711,43727,43731,43743,43747,43759,43763,43775,43779,43787,43791,43799,43803,43807,43811,43817,43821,43829,43833,43849,43853,43861,43865,43881,43893,43897,43909,43913,43917,43925,43929,43933,43941,43945,43953,43957,43965,43969,43973,44015,44057,44061,44065,44081,44085,44101,44105,44109,44117,44121,44125,44137,44175,44179,44183,44191,44195,44209,44219,44225,44231,44237,44243,44247,44251,44257,44261,44265,44273,44277,44295,44299,44303,44307,44323,44327,44331,44335,44339,44343,44363,44383,44387,44391,44395,44403,44411,44415,44431,44451,44471,44475,44479,44487,44495,44499,44503,44507,44519,44523,44533,44541,44558],{"__ignoreMap":10},[92,42921,42922,42924],{"class":94,"line":95},[92,42923,30373],{"class":98},[92,42925,31803],{"class":102},[92,42927,42928,42930],{"class":94,"line":11},[92,42929,30373],{"class":98},[92,42931,31810],{"class":102},[92,42933,42934,42936,42938,42940],{"class":94,"line":1158},[92,42935,30373],{"class":98},[92,42937,31821],{"class":102},[92,42939,31364],{"class":98},[92,42941,31826],{"class":102},[92,42943,42944,42946],{"class":94,"line":1173},[92,42945,30373],{"class":98},[92,42947,30376],{"class":102},[92,42949,42950,42952,42954,42956],{"class":94,"line":1179},[92,42951,30718],{"class":98},[92,42953,31396],{"class":102},[92,42955,30373],{"class":98},[92,42957,31843],{"class":102},[92,42959,42960,42962,42964,42966],{"class":94,"line":1193},[92,42961,30718],{"class":98},[92,42963,31349],{"class":102},[92,42965,30373],{"class":98},[92,42967,31354],{"class":102},[92,42969,42970,42972,42974,42976],{"class":94,"line":1199},[92,42971,30718],{"class":98},[92,42973,31379],{"class":102},[92,42975,30373],{"class":98},[92,42977,31384],{"class":102},[92,42979,42980,42982,42984,42986],{"class":94,"line":1290},[92,42981,30373],{"class":98},[92,42983,31396],{"class":102},[92,42985,31364],{"class":98},[92,42987,31401],{"class":102},[92,42989,42990,42992,42994,42996],{"class":94,"line":1296},[92,42991,30373],{"class":98},[92,42993,31413],{"class":102},[92,42995,31364],{"class":98},[92,42997,31418],{"class":102},[92,42999,43000],{"class":94,"line":1308},[92,43001,31888],{"class":161},[92,43003,43004,43006,43008,43010],{"class":94,"line":1591},[92,43005,30718],{"class":98},[92,43007,31895],{"class":102},[92,43009,30373],{"class":98},[92,43011,43012],{"class":102}," GoogLeNet, Inception\n",[92,43014,43015,43017,43019,43021],{"class":94,"line":1596},[92,43016,30718],{"class":98},[92,43018,30721],{"class":102},[92,43020,30373],{"class":98},[92,43022,30726],{"class":102},[92,43024,43025],{"class":94,"line":1602},[92,43026,2379],{"emptyLinePlaceholder":17},[92,43028,43029],{"class":94,"line":1607},[92,43030,2379],{"emptyLinePlaceholder":17},[92,43032,43033],{"class":94,"line":1621},[92,43034,31923],{"class":161},[92,43036,43037,43039,43041],{"class":94,"line":1626},[92,43038,31928],{"class":98},[92,43040,31931],{"class":1942},[92,43042,31934],{"class":102},[92,43044,43045,43047,43049,43051,43053],{"class":94,"line":1632},[92,43046,31939],{"class":102},[92,43048,148],{"class":98},[92,43050,31436],{"class":102},[92,43052,31444],{"class":207},[92,43054,31447],{"class":102},[92,43056,43057,43059,43061,43063],{"class":94,"line":1653},[92,43058,31952],{"class":5196},[92,43060,148],{"class":98},[92,43062,31457],{"class":151},[92,43064,31447],{"class":102},[92,43066,43067,43069,43071,43073,43075,43077,43079],{"class":94,"line":1658},[92,43068,31963],{"class":5196},[92,43070,148],{"class":98},[92,43072,31474],{"class":102},[92,43074,31477],{"class":5196},[92,43076,148],{"class":98},[92,43078,35430],{"class":151},[92,43080,31485],{"class":102},[92,43082,43083,43085,43087,43089],{"class":94,"line":1672},[92,43084,31980],{"class":5196},[92,43086,148],{"class":98},[92,43088,31457],{"class":151},[92,43090,109],{"class":102},[92,43092,43093,43095,43097,43099,43101,43103,43105,43107,43109,43111,43113,43115,43117,43119,43121],{"class":94,"line":1677},[92,43094,31991],{"class":102},[92,43096,148],{"class":98},[92,43098,31996],{"class":102},[92,43100,31999],{"class":151},[92,43102,103],{"class":102},[92,43104,32004],{"class":151},[92,43106,558],{"class":98},[92,43108,7338],{"class":151},[92,43110,32011],{"class":102},[92,43112,31999],{"class":151},[92,43114,103],{"class":102},[92,43116,32018],{"class":151},[92,43118,558],{"class":98},[92,43120,7338],{"class":151},[92,43122,32025],{"class":102},[92,43124,43125,43127,43129,43131,43133,43135],{"class":94,"line":1706},[92,43126,32030],{"class":102},[92,43128,148],{"class":98},[92,43130,32035],{"class":102},[92,43132,31518],{"class":5196},[92,43134,148],{"class":98},[92,43136,31523],{"class":102},[92,43138,43139,43141,43143,43145],{"class":94,"line":1711},[92,43140,32046],{"class":5196},[92,43142,148],{"class":98},[92,43144,300],{"class":151},[92,43146,31447],{"class":102},[92,43148,43149,43151,43153,43155],{"class":94,"line":1728},[92,43150,32058],{"class":5196},[92,43152,148],{"class":98},[92,43154,31457],{"class":151},[92,43156,31447],{"class":102},[92,43158,43159],{"class":94,"line":1733},[92,43160,32069],{"class":161},[92,43162,43163,43165,43167,43169],{"class":94,"line":1738},[92,43164,32074],{"class":5196},[92,43166,148],{"class":98},[92,43168,498],{"class":151},[92,43170,109],{"class":102},[92,43172,43173,43175,43177,43179,43181,43183],{"class":94,"line":1743},[92,43174,32085],{"class":102},[92,43176,148],{"class":98},[92,43178,31515],{"class":102},[92,43180,31518],{"class":5196},[92,43182,148],{"class":98},[92,43184,32096],{"class":102},[92,43186,43187,43189,43191,43193],{"class":94,"line":1757},[92,43188,32101],{"class":5196},[92,43190,148],{"class":98},[92,43192,300],{"class":151},[92,43194,31447],{"class":102},[92,43196,43197,43199,43201,43203],{"class":94,"line":1762},[92,43198,32112],{"class":5196},[92,43200,148],{"class":98},[92,43202,31457],{"class":151},[92,43204,31447],{"class":102},[92,43206,43207,43209,43211,43213],{"class":94,"line":2556},[92,43208,32123],{"class":5196},[92,43210,148],{"class":98},[92,43212,498],{"class":151},[92,43214,109],{"class":102},[92,43216,43217,43219],{"class":94,"line":2570},[92,43218,4069],{"class":98},[92,43220,32136],{"class":102},[92,43222,43223],{"class":94,"line":2578},[92,43224,2379],{"emptyLinePlaceholder":17},[92,43226,43227],{"class":94,"line":2583},[92,43228,32145],{"class":161},[92,43230,43231],{"class":94,"line":2589},[92,43232,32150],{"class":161},[92,43234,43235],{"class":94,"line":2595},[92,43236,2379],{"emptyLinePlaceholder":17},[92,43238,43239],{"class":94,"line":2600},[92,43240,32159],{"class":161},[92,43242,43243,43245,43247],{"class":94,"line":7928},[92,43244,31928],{"class":98},[92,43246,32166],{"class":1942},[92,43248,32169],{"class":102},[92,43250,43251,43253,43255,43257,43259,43261,43263,43265,43267],{"class":94,"line":7952},[92,43252,31218],{"class":102},[92,43254,148],{"class":98},[92,43256,30432],{"class":102},[92,43258,31225],{"class":207},[92,43260,1683],{"class":98},[92,43262,31230],{"class":102},[92,43264,1680],{"class":98},[92,43266,32188],{"class":207},[92,43268,109],{"class":102},[92,43270,43271],{"class":94,"line":7957},[92,43272,2379],{"emptyLinePlaceholder":17},[92,43274,43275],{"class":94,"line":7963},[92,43276,2379],{"emptyLinePlaceholder":17},[92,43278,43279],{"class":94,"line":7990},[92,43280,32203],{"class":161},[92,43282,43283],{"class":94,"line":7995},[92,43284,32208],{"class":161},[92,43286,43287],{"class":94,"line":8001},[92,43288,32213],{"class":161},[92,43290,43291,43293,43295,43297,43299,43301,43303],{"class":94,"line":8013},[92,43292,32218],{"class":102},[92,43294,148],{"class":98},[92,43296,32223],{"class":102},[92,43298,32226],{"class":5196},[92,43300,148],{"class":98},[92,43302,32231],{"class":151},[92,43304,109],{"class":102},[92,43306,43307],{"class":94,"line":8025},[92,43308,2379],{"emptyLinePlaceholder":17},[92,43310,43311],{"class":94,"line":8037},[92,43312,32242],{"class":161},[92,43314,43315,43317,43319],{"class":94,"line":9696},[92,43316,32247],{"class":102},[92,43318,148],{"class":98},[92,43320,32252],{"class":102},[92,43322,43323],{"class":94,"line":9721},[92,43324,2379],{"emptyLinePlaceholder":17},[92,43326,43327],{"class":94,"line":9744},[92,43328,32261],{"class":161},[92,43330,43331,43333,43335],{"class":94,"line":9768},[92,43332,31270],{"class":102},[92,43334,148],{"class":98},[92,43336,32270],{"class":102},[92,43338,43339],{"class":94,"line":9773},[92,43340,32275],{"class":161},[92,43342,43343],{"class":94,"line":9778},[92,43344,32280],{"class":161},[92,43346,43347],{"class":94,"line":9783},[92,43348,32285],{"class":161},[92,43350,43351,43353,43355],{"class":94,"line":9792},[92,43352,32290],{"class":102},[92,43354,148],{"class":98},[92,43356,32295],{"class":102},[92,43358,43359],{"class":94,"line":9797},[92,43360,2379],{"emptyLinePlaceholder":17},[92,43362,43363],{"class":94,"line":9803},[92,43364,2379],{"emptyLinePlaceholder":17},[92,43366,43367],{"class":94,"line":9824},[92,43368,32308],{"class":161},[92,43370,43371],{"class":94,"line":9830},[92,43372,32313],{"class":161},[92,43374,43375,43377,43379],{"class":94,"line":9844},[92,43376,32318],{"class":102},[92,43378,148],{"class":98},[92,43380,32323],{"class":151},[92,43382,43383],{"class":94,"line":9850},[92,43384,32328],{"class":161},[92,43386,43387,43389,43391],{"class":94,"line":9877},[92,43388,32333],{"class":102},[92,43390,148],{"class":98},[92,43392,32338],{"class":102},[92,43394,43395],{"class":94,"line":9886},[92,43396,32343],{"class":161},[92,43398,43399,43401,43403],{"class":94,"line":9892},[92,43400,32348],{"class":102},[92,43402,148],{"class":98},[92,43404,32338],{"class":102},[92,43406,43407],{"class":94,"line":9900},[92,43408,32357],{"class":161},[92,43410,43411,43413,43415],{"class":94,"line":9905},[92,43412,32362],{"class":102},[92,43414,148],{"class":98},[92,43416,32338],{"class":102},[92,43418,43419],{"class":94,"line":16584},[92,43420,32371],{"class":161},[92,43422,43423,43425,43427],{"class":94,"line":16590},[92,43424,32376],{"class":102},[92,43426,148],{"class":98},[92,43428,32338],{"class":102},[92,43430,43431],{"class":94,"line":16613},[92,43432,2379],{"emptyLinePlaceholder":17},[92,43434,43435],{"class":94,"line":16619},[92,43436,32389],{"class":161},[92,43438,43439,43441,43443],{"class":94,"line":16642},[92,43440,32394],{"class":102},[92,43442,148],{"class":98},[92,43444,32399],{"class":102},[92,43446,43447],{"class":94,"line":16656},[92,43448,2379],{"emptyLinePlaceholder":17},[92,43450,43451],{"class":94,"line":16676},[92,43452,2379],{"emptyLinePlaceholder":17},[92,43454,43455],{"class":94,"line":16682},[92,43456,32412],{"class":161},[92,43458,43459,43461,43463,43465,43467],{"class":94,"line":16693},[92,43460,3180],{"class":98},[92,43462,32419],{"class":102},[92,43464,26024],{"class":98},[92,43466,32424],{"class":151},[92,43468,32427],{"class":102},[92,43470,43471,43473,43475,43477,43479,43481,43483,43485,43487,43489,43491],{"class":94,"line":16716},[92,43472,32432],{"class":151},[92,43474,103],{"class":102},[92,43476,32437],{"class":207},[92,43478,32440],{"class":151},[92,43480,687],{"class":207},[92,43482,32440],{"class":151},[92,43484,354],{"class":207},[92,43486,32449],{"class":102},[92,43488,635],{"class":98},[92,43490,320],{"class":151},[92,43492,30478],{"class":102},[92,43494,43495,43497,43499,43501,43503,43505],{"class":94,"line":16738},[92,43496,32432],{"class":151},[92,43498,103],{"class":102},[92,43500,32464],{"class":207},[92,43502,558],{"class":98},[92,43504,549],{"class":151},[92,43506,109],{"class":102},[92,43508,43509],{"class":94,"line":16743},[92,43510,2379],{"emptyLinePlaceholder":17},[92,43512,43513],{"class":94,"line":16749},[92,43514,32479],{"class":161},[92,43516,43517],{"class":94,"line":16763},[92,43518,32484],{"class":161},[92,43520,43521,43523,43525],{"class":94,"line":16776},[92,43522,32489],{"class":102},[92,43524,148],{"class":98},[92,43526,32323],{"class":151},[92,43528,43529],{"class":94,"line":16781},[92,43530,32498],{"class":161},[92,43532,43533,43535,43537],{"class":94,"line":16795},[92,43534,32503],{"class":102},[92,43536,148],{"class":98},[92,43538,3064],{"class":151},[92,43540,43541],{"class":94,"line":16800},[92,43542,32512],{"class":161},[92,43544,43545,43547,43549],{"class":94,"line":16806},[92,43546,32517],{"class":102},[92,43548,148],{"class":98},[92,43550,32323],{"class":151},[92,43552,43553],{"class":94,"line":16811},[92,43554,32526],{"class":161},[92,43556,43557,43559,43561],{"class":94,"line":16825},[92,43558,32531],{"class":102},[92,43560,148],{"class":98},[92,43562,3064],{"class":151},[92,43564,43565],{"class":94,"line":16830},[92,43566,32540],{"class":161},[92,43568,43569,43571,43573],{"class":94,"line":16835},[92,43570,32545],{"class":102},[92,43572,148],{"class":98},[92,43574,3064],{"class":151},[92,43576,43577],{"class":94,"line":16849},[92,43578,32554],{"class":161},[92,43580,43581,43583,43585],{"class":94,"line":16861},[92,43582,32559],{"class":102},[92,43584,148],{"class":98},[92,43586,3064],{"class":151},[92,43588,43589],{"class":94,"line":16866},[92,43590,32568],{"class":161},[92,43592,43593,43595,43597,43599,43601],{"class":94,"line":16879},[92,43594,3382],{"class":98},[92,43596,31582],{"class":102},[92,43598,26024],{"class":98},[92,43600,31587],{"class":151},[92,43602,32581],{"class":102},[92,43604,43605],{"class":94,"line":16884},[92,43606,32586],{"class":161},[92,43608,43609,43611,43613],{"class":94,"line":16889},[92,43610,32591],{"class":102},[92,43612,148],{"class":98},[92,43614,32596],{"class":102},[92,43616,43617],{"class":94,"line":16894},[92,43618,32601],{"class":161},[92,43620,43621,43623,43625],{"class":94,"line":16907},[92,43622,32606],{"class":102},[92,43624,148],{"class":98},[92,43626,32611],{"class":102},[92,43628,43629],{"class":94,"line":16912},[92,43630,32617],{"class":161},[92,43632,43633],{"class":94,"line":32614},[92,43634,32623],{"class":102},[92,43636,43637],{"class":94,"line":32620},[92,43638,32629],{"class":161},[92,43640,43641],{"class":94,"line":32626},[92,43642,32635],{"class":161},[92,43644,43645,43647,43649],{"class":94,"line":32632},[92,43646,32641],{"class":102},[92,43648,148],{"class":98},[92,43650,32646],{"class":102},[92,43652,43653],{"class":94,"line":32638},[92,43654,32652],{"class":161},[92,43656,43657,43659,43661,43663,43665,43667,43669],{"class":94,"line":32649},[92,43658,32658],{"class":102},[92,43660,148],{"class":98},[92,43662,32663],{"class":102},[92,43664,32666],{"class":5196},[92,43666,148],{"class":98},[92,43668,320],{"class":151},[92,43670,109],{"class":102},[92,43672,43673],{"class":94,"line":32655},[92,43674,32678],{"class":161},[92,43676,43677,43679,43681],{"class":94,"line":32675},[92,43678,32684],{"class":102},[92,43680,148],{"class":98},[92,43682,32689],{"class":102},[92,43684,43685],{"class":94,"line":32681},[92,43686,32695],{"class":161},[92,43688,43689],{"class":94,"line":32692},[92,43690,32701],{"class":102},[92,43692,43693],{"class":94,"line":32698},[92,43694,32707],{"class":161},[92,43696,43697],{"class":94,"line":32704},[92,43698,32713],{"class":102},[92,43700,43701],{"class":94,"line":32710},[92,43702,32719],{"class":161},[92,43704,43705],{"class":94,"line":32716},[92,43706,32725],{"class":102},[92,43708,43709],{"class":94,"line":32722},[92,43710,32731],{"class":161},[92,43712,43713,43715,43717,43719,43721,43723,43725],{"class":94,"line":32728},[92,43714,32737],{"class":102},[92,43716,9457],{"class":98},[92,43718,32742],{"class":102},[92,43720,558],{"class":98},[92,43722,32747],{"class":102},[92,43724,294],{"class":151},[92,43726,109],{"class":102},[92,43728,43729],{"class":94,"line":32734},[92,43730,32757],{"class":161},[92,43732,43733,43735,43737,43739,43741],{"class":94,"line":32754},[92,43734,32763],{"class":102},[92,43736,9457],{"class":98},[92,43738,32768],{"class":102},[92,43740,2928],{"class":98},[92,43742,32773],{"class":102},[92,43744,43745],{"class":94,"line":32760},[92,43746,32779],{"class":161},[92,43748,43749,43751,43753,43755,43757],{"class":94,"line":32776},[92,43750,32785],{"class":102},[92,43752,9457],{"class":98},[92,43754,32747],{"class":102},[92,43756,294],{"class":151},[92,43758,109],{"class":102},[92,43760,43761],{"class":94,"line":32782},[92,43762,32799],{"class":161},[92,43764,43765,43767,43769,43771,43773],{"class":94,"line":32796},[92,43766,3382],{"class":98},[92,43768,32807],{"class":102},[92,43770,26024],{"class":98},[92,43772,31587],{"class":151},[92,43774,32814],{"class":102},[92,43776,43777],{"class":94,"line":32802},[92,43778,32820],{"class":161},[92,43780,43781,43783,43785],{"class":94,"line":32817},[92,43782,32591],{"class":102},[92,43784,148],{"class":98},[92,43786,32596],{"class":102},[92,43788,43789],{"class":94,"line":32823},[92,43790,32835],{"class":161},[92,43792,43793,43795,43797],{"class":94,"line":32832},[92,43794,32606],{"class":102},[92,43796,148],{"class":98},[92,43798,32611],{"class":102},[92,43800,43801],{"class":94,"line":32838},[92,43802,32850],{"class":161},[92,43804,43805],{"class":94,"line":32847},[92,43806,32856],{"class":102},[92,43808,43809],{"class":94,"line":32853},[92,43810,36337],{"class":161},[92,43812,43813,43815],{"class":94,"line":32859},[92,43814,32862],{"class":98},[92,43816,32865],{"class":102},[92,43818,43819],{"class":94,"line":32868},[92,43820,32871],{"class":161},[92,43822,43823,43825,43827],{"class":94,"line":32874},[92,43824,36352],{"class":102},[92,43826,148],{"class":98},[92,43828,32646],{"class":102},[92,43830,43831],{"class":94,"line":32885},[92,43832,32888],{"class":161},[92,43834,43835,43837,43839,43841,43843,43845,43847],{"class":94,"line":32891},[92,43836,36365],{"class":102},[92,43838,148],{"class":98},[92,43840,32663],{"class":102},[92,43842,32666],{"class":5196},[92,43844,148],{"class":98},[92,43846,320],{"class":151},[92,43848,109],{"class":102},[92,43850,43851],{"class":94,"line":32910},[92,43852,32913],{"class":161},[92,43854,43855,43857,43859],{"class":94,"line":32916},[92,43856,36386],{"class":102},[92,43858,148],{"class":98},[92,43860,32689],{"class":102},[92,43862,43863],{"class":94,"line":32927},[92,43864,32930],{"class":161},[92,43866,43867,43869,43871,43873,43875,43877,43879],{"class":94,"line":32933},[92,43868,36399],{"class":102},[92,43870,9457],{"class":98},[92,43872,36404],{"class":102},[92,43874,558],{"class":98},[92,43876,32747],{"class":102},[92,43878,294],{"class":151},[92,43880,109],{"class":102},[92,43882,43883,43885,43887,43889,43891],{"class":94,"line":32953},[92,43884,36417],{"class":102},[92,43886,9457],{"class":98},[92,43888,32768],{"class":102},[92,43890,2928],{"class":98},[92,43892,32773],{"class":102},[92,43894,43895],{"class":94,"line":32969},[92,43896,36430],{"class":161},[92,43898,43899,43901,43903,43905,43907],{"class":94,"line":32975},[92,43900,36435],{"class":102},[92,43902,9457],{"class":98},[92,43904,32747],{"class":102},[92,43906,294],{"class":151},[92,43908,109],{"class":102},[92,43910,43911],{"class":94,"line":32989},[92,43912,32992],{"class":161},[92,43914,43915],{"class":94,"line":32995},[92,43916,32998],{"class":161},[92,43918,43919,43921,43923],{"class":94,"line":33001},[92,43920,33004],{"class":102},[92,43922,687],{"class":98},[92,43924,33009],{"class":102},[92,43926,43927],{"class":94,"line":33012},[92,43928,33015],{"class":161},[92,43930,43931],{"class":94,"line":33018},[92,43932,33021],{"class":161},[92,43934,43935,43937,43939],{"class":94,"line":33024},[92,43936,33027],{"class":102},[92,43938,687],{"class":98},[92,43940,33009],{"class":102},[92,43942,43943],{"class":94,"line":33034},[92,43944,33037],{"class":161},[92,43946,43947,43949,43951],{"class":94,"line":33040},[92,43948,33043],{"class":102},[92,43950,687],{"class":98},[92,43952,33048],{"class":102},[92,43954,43955],{"class":94,"line":33051},[92,43956,33054],{"class":161},[92,43958,43959,43961,43963],{"class":94,"line":33057},[92,43960,33060],{"class":102},[92,43962,687],{"class":98},[92,43964,33048],{"class":102},[92,43966,43967],{"class":94,"line":33067},[92,43968,2379],{"emptyLinePlaceholder":17},[92,43970,43971],{"class":94,"line":33072},[92,43972,33075],{"class":161},[92,43974,43975,43977,43979,43981,43983,43985,43987,43989,43991,43993,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013],{"class":94,"line":33078},[92,43976,32432],{"class":151},[92,43978,103],{"class":102},[92,43980,3571],{"class":207},[92,43982,32440],{"class":151},[92,43984,33089],{"class":207},[92,43986,999],{"class":151},[92,43988,33094],{"class":98},[92,43990,1049],{"class":151},[92,43992,33099],{"class":207},[92,43994,999],{"class":151},[92,43996,33094],{"class":98},[92,43998,1049],{"class":151},[92,44000,3571],{"class":207},[92,44002,33110],{"class":102},[92,44004,635],{"class":98},[92,44006,320],{"class":151},[92,44008,33117],{"class":102},[92,44010,635],{"class":98},[92,44012,320],{"class":151},[92,44014,33124],{"class":102},[92,44016,44017,44019,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055],{"class":94,"line":33127},[92,44018,32432],{"class":151},[92,44020,103],{"class":102},[92,44022,3571],{"class":207},[92,44024,32440],{"class":151},[92,44026,33138],{"class":207},[92,44028,999],{"class":151},[92,44030,33094],{"class":98},[92,44032,1049],{"class":151},[92,44034,33147],{"class":207},[92,44036,999],{"class":151},[92,44038,33094],{"class":98},[92,44040,1049],{"class":151},[92,44042,3571],{"class":207},[92,44044,33158],{"class":102},[92,44046,635],{"class":98},[92,44048,320],{"class":151},[92,44050,33165],{"class":102},[92,44052,635],{"class":98},[92,44054,320],{"class":151},[92,44056,33124],{"class":102},[92,44058,44059],{"class":94,"line":33174},[92,44060,2379],{"emptyLinePlaceholder":17},[92,44062,44063],{"class":94,"line":33179},[92,44064,33182],{"class":161},[92,44066,44067,44069,44071,44073,44075,44077,44079],{"class":94,"line":33185},[92,44068,2476],{"class":98},[92,44070,33190],{"class":102},[92,44072,635],{"class":98},[92,44074,320],{"class":151},[92,44076,1043],{"class":102},[92,44078,1063],{"class":98},[92,44080,33201],{"class":102},[92,44082,44083],{"class":94,"line":33204},[92,44084,33207],{"class":161},[92,44086,44087,44089,44091,44093,44095,44097,44099],{"class":94,"line":33210},[92,44088,33213],{"class":102},[92,44090,142],{"class":151},[92,44092,148],{"class":98},[92,44094,33220],{"class":102},[92,44096,635],{"class":98},[92,44098,320],{"class":151},[92,44100,33227],{"class":102},[92,44102,44103],{"class":94,"line":33230},[92,44104,33233],{"class":161},[92,44106,44107],{"class":94,"line":33236},[92,44108,33239],{"class":161},[92,44110,44111,44113,44115],{"class":94,"line":33242},[92,44112,33245],{"class":102},[92,44114,148],{"class":98},[92,44116,32295],{"class":102},[92,44118,44119],{"class":94,"line":33252},[92,44120,2379],{"emptyLinePlaceholder":17},[92,44122,44123],{"class":94,"line":33257},[92,44124,33260],{"class":161},[92,44126,44127,44129,44131,44133,44135],{"class":94,"line":33263},[92,44128,33266],{"class":102},[92,44130,148],{"class":98},[92,44132,33271],{"class":102},[92,44134,635],{"class":98},[92,44136,33276],{"class":102},[92,44138,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173],{"class":94,"line":33279},[92,44140,32432],{"class":151},[92,44142,103],{"class":102},[92,44144,33286],{"class":207},[92,44146,999],{"class":151},[92,44148,33291],{"class":98},[92,44150,1049],{"class":151},[92,44152,647],{"class":207},[92,44154,999],{"class":151},[92,44156,33291],{"class":98},[92,44158,1049],{"class":151},[92,44160,33304],{"class":207},[92,44162,33307],{"class":102},[92,44164,33310],{"class":98},[92,44166,1010],{"class":151},[92,44168,33315],{"class":102},[92,44170,431],{"class":98},[92,44172,1010],{"class":151},[92,44174,30478],{"class":102},[92,44176,44177],{"class":94,"line":33324},[92,44178,36714],{"class":161},[92,44180,44181],{"class":94,"line":33330},[92,44182,36719],{"class":161},[92,44184,44185,44187,44189],{"class":94,"line":33336},[92,44186,36724],{"class":102},[92,44188,33348],{"class":207},[92,44190,109],{"class":102},[92,44192,44193],{"class":94,"line":33342},[92,44194,33368],{"class":161},[92,44196,44197,44199,44201,44203,44205,44207],{"class":94,"line":33353},[92,44198,33374],{"class":102},[92,44200,148],{"class":98},[92,44202,33379],{"class":102},[92,44204,33382],{"class":5196},[92,44206,148],{"class":98},[92,44208,1525],{"class":102},[92,44210,44211,44213,44215,44217],{"class":94,"line":33359},[92,44212,33392],{"class":207},[92,44214,962],{"class":102},[92,44216,33397],{"class":151},[92,44218,33400],{"class":102},[92,44220,44221,44223],{"class":94,"line":33365},[92,44222,33406],{"class":207},[92,44224,33409],{"class":102},[92,44226,44227,44229],{"class":94,"line":33371},[92,44228,33415],{"class":207},[92,44230,33418],{"class":102},[92,44232,44233,44235],{"class":94,"line":33389},[92,44234,33424],{"class":207},[92,44236,33427],{"class":102},[92,44238,44239,44241],{"class":94,"line":33403},[92,44240,33433],{"class":207},[92,44242,33436],{"class":102},[92,44244,44245],{"class":94,"line":33412},[92,44246,33442],{"class":102},[92,44248,44249],{"class":94,"line":33421},[92,44250,33448],{"class":161},[92,44252,44253,44255],{"class":94,"line":33430},[92,44254,4069],{"class":98},[92,44256,33456],{"class":102},[92,44258,44259],{"class":94,"line":33439},[92,44260,2379],{"emptyLinePlaceholder":17},[92,44262,44263],{"class":94,"line":33445},[92,44264,33467],{"class":161},[92,44266,44267,44269,44271],{"class":94,"line":33451},[92,44268,31928],{"class":98},[92,44270,33475],{"class":1942},[92,44272,33478],{"class":102},[92,44274,44275],{"class":94,"line":33459},[92,44276,33484],{"class":161},[92,44278,44279,44281,44283,44285,44287,44289,44291,44293],{"class":94,"line":33464},[92,44280,33490],{"class":102},[92,44282,31674],{"class":5196},[92,44284,148],{"class":98},[92,44286,103],{"class":102},[92,44288,601],{"class":151},[92,44290,481],{"class":102},[92,44292,396],{"class":151},[92,44294,30478],{"class":102},[92,44296,44297],{"class":94,"line":33470},[92,44298,33510],{"class":161},[92,44300,44301],{"class":94,"line":33481},[92,44302,33516],{"class":161},[92,44304,44305],{"class":94,"line":33487},[92,44306,33522],{"class":161},[92,44308,44309,44311,44313,44315,44317,44319,44321],{"class":94,"line":33507},[92,44310,31708],{"class":102},[92,44312,320],{"class":151},[92,44314,481],{"class":102},[92,44316,180],{"class":151},[92,44318,481],{"class":102},[92,44320,320],{"class":151},[92,44322,109],{"class":102},[92,44324,44325],{"class":94,"line":33513},[92,44326,33545],{"class":161},[92,44328,44329],{"class":94,"line":33519},[92,44330,33551],{"class":161},[92,44332,44333],{"class":94,"line":33525},[92,44334,33557],{"class":161},[92,44336,44337],{"class":94,"line":33542},[92,44338,33563],{"class":161},[92,44340,44341],{"class":94,"line":33548},[92,44342,33569],{"class":161},[92,44344,44345,44347,44349,44351,44353,44355,44357,44359,44361],{"class":94,"line":33554},[92,44346,33575],{"class":102},[92,44348,33578],{"class":207},[92,44350,33581],{"class":102},[92,44352,33584],{"class":207},[92,44354,481],{"class":102},[92,44356,33589],{"class":5196},[92,44358,148],{"class":98},[92,44360,33594],{"class":207},[92,44362,109],{"class":102},[92,44364,44365,44367,44369,44371,44373,44375,44377,44379,44381],{"class":94,"line":33560},[92,44366,33575],{"class":102},[92,44368,33578],{"class":207},[92,44370,33606],{"class":102},[92,44372,33609],{"class":207},[92,44374,481],{"class":102},[92,44376,33589],{"class":5196},[92,44378,148],{"class":98},[92,44380,33618],{"class":207},[92,44382,109],{"class":102},[92,44384,44385],{"class":94,"line":33566},[92,44386,33626],{"class":161},[92,44388,44389],{"class":94,"line":33572},[92,44390,33632],{"class":102},[92,44392,44393],{"class":94,"line":33599},[92,44394,33638],{"class":161},[92,44396,44397,44399,44401],{"class":94,"line":33623},[92,44398,33644],{"class":102},[92,44400,33647],{"class":207},[92,44402,109],{"class":102},[92,44404,44405,44407,44409],{"class":94,"line":33629},[92,44406,33655],{"class":102},[92,44408,33658],{"class":207},[92,44410,109],{"class":102},[92,44412,44413],{"class":94,"line":33635},[92,44414,33666],{"class":161},[92,44416,44417,44419,44421,44423,44425,44427,44429],{"class":94,"line":33641},[92,44418,31708],{"class":102},[92,44420,320],{"class":151},[92,44422,481],{"class":102},[92,44424,180],{"class":151},[92,44426,481],{"class":102},[92,44428,180],{"class":151},[92,44430,109],{"class":102},[92,44432,44433,44435,44437,44439,44441,44443,44445,44447,44449],{"class":94,"line":33652},[92,44434,33575],{"class":102},[92,44436,33578],{"class":207},[92,44438,33693],{"class":102},[92,44440,33584],{"class":207},[92,44442,481],{"class":102},[92,44444,33589],{"class":5196},[92,44446,148],{"class":98},[92,44448,33704],{"class":207},[92,44450,109],{"class":102},[92,44452,44453,44455,44457,44459,44461,44463,44465,44467,44469],{"class":94,"line":33663},[92,44454,33575],{"class":102},[92,44456,33578],{"class":207},[92,44458,33716],{"class":102},[92,44460,33609],{"class":207},[92,44462,481],{"class":102},[92,44464,33589],{"class":5196},[92,44466,148],{"class":98},[92,44468,33727],{"class":207},[92,44470,109],{"class":102},[92,44472,44473],{"class":94,"line":33669},[92,44474,33735],{"class":161},[92,44476,44477],{"class":94,"line":33686},[92,44478,33632],{"class":102},[92,44480,44481,44483,44485],{"class":94,"line":33709},[92,44482,33644],{"class":102},[92,44484,33578],{"class":207},[92,44486,109],{"class":102},[92,44488,44489,44491,44493],{"class":94,"line":33732},[92,44490,33655],{"class":102},[92,44492,33757],{"class":207},[92,44494,109],{"class":102},[92,44496,44497],{"class":94,"line":33738},[92,44498,33765],{"class":102},[92,44500,44501],{"class":94,"line":33743},[92,44502,2379],{"emptyLinePlaceholder":17},[92,44504,44505],{"class":94,"line":33752},[92,44506,33776],{"class":161},[92,44508,44509,44511,44513,44515,44517],{"class":94,"line":33762},[92,44510,1510],{"class":98},[92,44512,31201],{"class":151},[92,44514,2928],{"class":98},[92,44516,31206],{"class":207},[92,44518,3718],{"class":102},[92,44520,44521],{"class":94,"line":33768},[92,44522,33795],{"class":161},[92,44524,44525,44528,44530],{"class":94,"line":33773},[92,44526,44527],{"class":102},"    GoogLeNet",[92,44529,148],{"class":98},[92,44531,44532],{"class":102},"GoogLeNet(Inception)\n",[92,44534,44535,44537,44539],{"class":94,"line":33779},[92,44536,33812],{"class":102},[92,44538,148],{"class":98},[92,44540,33817],{"class":102},[92,44542,44543,44545,44547,44550,44552,44554,44556],{"class":94,"line":33792},[92,44544,33374],{"class":102},[92,44546,148],{"class":98},[92,44548,44549],{"class":102},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[92,44551,33830],{"class":5196},[92,44553,148],{"class":98},[92,44555,1054],{"class":151},[92,44557,109],{"class":102},[92,44559,44560],{"class":94,"line":33798},[92,44561,33842],{"class":102},[46,44563,44564],{"start":1158},[49,44565,40555],{},[83,44567,44569],{"className":30359,"code":44568,"language":30361,"meta":10,"style":10},"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",[89,44570,44571,44577,44587,44597,44601,44611,44622,44626,44630,44634,44642,44658,44668,44684,44694,44708,44712,44722,44732,44742,44748,44752,44756,44764,44768,44784,44792,44796,44800,44808,44816,44820,44824,44828,44832,44838,44842,44852,44860,44868,44872,44876,44880,44888,44892,44908,44912,44916,44920,44932,44936,44948,44952,44956,44968,44972,44982,44986,44990,45002,45006,45014,45018,45022,45030,45034,45042,45046,45050,45054,45058,45062,45078,45086,45090,45094,45142,45148,45152,45162,45170,45178,45182,45186,45190,45194,45202,45206,45222,45226,45234,45242],{"__ignoreMap":10},[92,44572,44573,44575],{"class":94,"line":95},[92,44574,30373],{"class":98},[92,44576,30376],{"class":102},[92,44578,44579,44581,44583,44585],{"class":94,"line":11},[92,44580,30373],{"class":98},[92,44582,31396],{"class":102},[92,44584,31364],{"class":98},[92,44586,31401],{"class":102},[92,44588,44589,44591,44593,44595],{"class":94,"line":1158},[92,44590,30718],{"class":98},[92,44592,31379],{"class":102},[92,44594,30373],{"class":98},[92,44596,31384],{"class":102},[92,44598,44599],{"class":94,"line":1173},[92,44600,33903],{"class":161},[92,44602,44603,44605,44607,44609],{"class":94,"line":1179},[92,44604,30718],{"class":98},[92,44606,31349],{"class":102},[92,44608,30373],{"class":98},[92,44610,31354],{"class":102},[92,44612,44613,44615,44617,44619],{"class":94,"line":1193},[92,44614,30718],{"class":98},[92,44616,31895],{"class":102},[92,44618,30373],{"class":98},[92,44620,44621],{"class":102}," GoogLeNet,Inception\n",[92,44623,44624],{"class":94,"line":1199},[92,44625,2379],{"emptyLinePlaceholder":17},[92,44627,44628],{"class":94,"line":1290},[92,44629,2379],{"emptyLinePlaceholder":17},[92,44631,44632],{"class":94,"line":1296},[92,44633,33932],{"class":161},[92,44635,44636,44638,44640],{"class":94,"line":1308},[92,44637,31928],{"class":98},[92,44639,33939],{"class":1942},[92,44641,31934],{"class":102},[92,44643,44644,44646,44648,44650,44652,44654,44656],{"class":94,"line":1591},[92,44645,33946],{"class":102},[92,44647,148],{"class":98},[92,44649,31436],{"class":102},[92,44651,31439],{"class":5196},[92,44653,148],{"class":98},[92,44655,31444],{"class":207},[92,44657,31447],{"class":102},[92,44659,44660,44662,44664,44666],{"class":94,"line":1596},[92,44661,33963],{"class":5196},[92,44663,148],{"class":98},[92,44665,33968],{"class":151},[92,44667,31447],{"class":102},[92,44669,44670,44672,44674,44676,44678,44680,44682],{"class":94,"line":1602},[92,44671,33975],{"class":5196},[92,44673,148],{"class":98},[92,44675,31474],{"class":102},[92,44677,31477],{"class":5196},[92,44679,148],{"class":98},[92,44681,35430],{"class":151},[92,44683,31485],{"class":102},[92,44685,44686,44688,44690,44692],{"class":94,"line":1607},[92,44687,33992],{"class":5196},[92,44689,148],{"class":98},[92,44691,31457],{"class":151},[92,44693,109],{"class":102},[92,44695,44696,44698,44700,44702,44704,44706],{"class":94,"line":1621},[92,44697,34003],{"class":102},[92,44699,148],{"class":98},[92,44701,31515],{"class":102},[92,44703,31518],{"class":5196},[92,44705,148],{"class":98},[92,44707,34014],{"class":102},[92,44709,44710],{"class":94,"line":1626},[92,44711,34019],{"class":161},[92,44713,44714,44716,44718,44720],{"class":94,"line":1632},[92,44715,34024],{"class":5196},[92,44717,148],{"class":98},[92,44719,320],{"class":151},[92,44721,31447],{"class":102},[92,44723,44724,44726,44728,44730],{"class":94,"line":1653},[92,44725,34035],{"class":5196},[92,44727,148],{"class":98},[92,44729,31457],{"class":151},[92,44731,31447],{"class":102},[92,44733,44734,44736,44738,44740],{"class":94,"line":1658},[92,44735,34046],{"class":5196},[92,44737,148],{"class":98},[92,44739,294],{"class":151},[92,44741,109],{"class":102},[92,44743,44744,44746],{"class":94,"line":1672},[92,44745,4069],{"class":98},[92,44747,34059],{"class":102},[92,44749,44750],{"class":94,"line":1677},[92,44751,2379],{"emptyLinePlaceholder":17},[92,44753,44754],{"class":94,"line":1706},[92,44755,34068],{"class":161},[92,44757,44758,44760,44762],{"class":94,"line":1711},[92,44759,31928],{"class":98},[92,44761,34075],{"class":1942},[92,44763,34078],{"class":102},[92,44765,44766],{"class":94,"line":1728},[92,44767,34083],{"class":161},[92,44769,44770,44772,44774,44776,44778,44780,44782],{"class":94,"line":1733},[92,44771,31218],{"class":102},[92,44773,148],{"class":98},[92,44775,31225],{"class":207},[92,44777,1683],{"class":98},[92,44779,31230],{"class":102},[92,44781,1680],{"class":98},[92,44783,34100],{"class":207},[92,44785,44786,44788,44790],{"class":94,"line":1738},[92,44787,31270],{"class":102},[92,44789,148],{"class":98},[92,44791,32270],{"class":102},[92,44793,44794],{"class":94,"line":1743},[92,44795,2379],{"emptyLinePlaceholder":17},[92,44797,44798],{"class":94,"line":1757},[92,44799,34117],{"class":161},[92,44801,44802,44804,44806],{"class":94,"line":1762},[92,44803,34122],{"class":102},[92,44805,148],{"class":98},[92,44807,32323],{"class":151},[92,44809,44810,44812,44814],{"class":94,"line":2556},[92,44811,34131],{"class":102},[92,44813,148],{"class":98},[92,44815,3064],{"class":151},[92,44817,44818],{"class":94,"line":2570},[92,44819,2379],{"emptyLinePlaceholder":17},[92,44821,44822],{"class":94,"line":2578},[92,44823,34144],{"class":161},[92,44825,44826],{"class":94,"line":2583},[92,44827,34149],{"class":161},[92,44829,44830],{"class":94,"line":2589},[92,44831,34154],{"class":161},[92,44833,44834,44836],{"class":94,"line":2595},[92,44835,34159],{"class":98},[92,44837,32865],{"class":102},[92,44839,44840],{"class":94,"line":2600},[92,44841,34166],{"class":161},[92,44843,44844,44846,44848,44850],{"class":94,"line":7928},[92,44845,3382],{"class":98},[92,44847,34173],{"class":102},[92,44849,26024],{"class":98},[92,44851,34178],{"class":102},[92,44853,44854,44856,44858],{"class":94,"line":7952},[92,44855,34183],{"class":102},[92,44857,148],{"class":98},[92,44859,34188],{"class":102},[92,44861,44862,44864,44866],{"class":94,"line":7957},[92,44863,34193],{"class":102},[92,44865,148],{"class":98},[92,44867,34198],{"class":102},[92,44869,44870],{"class":94,"line":7963},[92,44871,34203],{"class":161},[92,44873,44874],{"class":94,"line":7990},[92,44875,32856],{"class":102},[92,44877,44878],{"class":94,"line":7995},[92,44879,34212],{"class":161},[92,44881,44882,44884,44886],{"class":94,"line":8001},[92,44883,32641],{"class":102},[92,44885,148],{"class":98},[92,44887,34221],{"class":102},[92,44889,44890],{"class":94,"line":8013},[92,44891,34226],{"class":161},[92,44893,44894,44896,44898,44900,44902,44904,44906],{"class":94,"line":8025},[92,44895,32658],{"class":102},[92,44897,148],{"class":98},[92,44899,32663],{"class":102},[92,44901,32666],{"class":5196},[92,44903,148],{"class":98},[92,44905,320],{"class":151},[92,44907,109],{"class":102},[92,44909,44910],{"class":94,"line":8037},[92,44911,34247],{"class":161},[92,44913,44914],{"class":94,"line":9696},[92,44915,34252],{"class":161},[92,44917,44918],{"class":94,"line":9721},[92,44919,34257],{"class":161},[92,44921,44922,44924,44926,44928,44930],{"class":94,"line":9744},[92,44923,34262],{"class":102},[92,44925,9457],{"class":98},[92,44927,32768],{"class":102},[92,44929,2928],{"class":98},[92,44931,34271],{"class":102},[92,44933,44934],{"class":94,"line":9768},[92,44935,34276],{"class":161},[92,44937,44938,44940,44942,44944,44946],{"class":94,"line":9773},[92,44939,34281],{"class":102},[92,44941,9457],{"class":98},[92,44943,34286],{"class":102},[92,44945,294],{"class":151},[92,44947,109],{"class":102},[92,44949,44950],{"class":94,"line":9778},[92,44951,2379],{"emptyLinePlaceholder":17},[92,44953,44954],{"class":94,"line":9783},[92,44955,34299],{"class":161},[92,44957,44958,44960,44962,44964,44966],{"class":94,"line":9792},[92,44959,34304],{"class":102},[92,44961,148],{"class":98},[92,44963,34309],{"class":102},[92,44965,687],{"class":98},[92,44967,34314],{"class":102},[92,44969,44970],{"class":94,"line":9797},[92,44971,34319],{"class":161},[92,44973,44974,44976,44978,44980],{"class":94,"line":9803},[92,44975,32432],{"class":151},[92,44977,103],{"class":102},[92,44979,34328],{"class":207},[92,44981,34331],{"class":102},[92,44983,44984],{"class":94,"line":9824},[92,44985,2379],{"emptyLinePlaceholder":17},[92,44987,44988],{"class":94,"line":9830},[92,44989,34340],{"class":161},[92,44991,44992,44994,44996,44998,45000],{"class":94,"line":9844},[92,44993,1510],{"class":98},[92,44995,31201],{"class":151},[92,44997,2928],{"class":98},[92,44999,31206],{"class":207},[92,45001,3718],{"class":102},[92,45003,45004],{"class":94,"line":9850},[92,45005,34357],{"class":161},[92,45007,45008,45010,45012],{"class":94,"line":9877},[92,45009,31270],{"class":102},[92,45011,148],{"class":98},[92,45013,44532],{"class":102},[92,45015,45016],{"class":94,"line":9886},[92,45017,34370],{"class":161},[92,45019,45020],{"class":94,"line":9892},[92,45021,34375],{"class":161},[92,45023,45024,45026,45028],{"class":94,"line":9900},[92,45025,34380],{"class":102},[92,45027,34383],{"class":207},[92,45029,30478],{"class":102},[92,45031,45032],{"class":94,"line":9905},[92,45033,34390],{"class":161},[92,45035,45036,45038,45040],{"class":94,"line":16584},[92,45037,34003],{"class":102},[92,45039,148],{"class":98},[92,45041,34399],{"class":102},[92,45043,45044],{"class":94,"line":16590},[92,45045,34404],{"class":161},[92,45047,45048],{"class":94,"line":16613},[92,45049,34409],{"class":102},[92,45051,45052],{"class":94,"line":16619},[92,45053,2379],{"emptyLinePlaceholder":17},[92,45055,45056],{"class":94,"line":16642},[92,45057,34418],{"class":161},[92,45059,45060],{"class":94,"line":16656},[92,45061,34423],{"class":161},[92,45063,45064,45066,45068,45070,45072,45074,45076],{"class":94,"line":16676},[92,45065,31218],{"class":102},[92,45067,148],{"class":98},[92,45069,31225],{"class":207},[92,45071,1683],{"class":98},[92,45073,31230],{"class":102},[92,45075,1680],{"class":98},[92,45077,34100],{"class":207},[92,45079,45080,45082,45084],{"class":94,"line":16682},[92,45081,31270],{"class":102},[92,45083,148],{"class":98},[92,45085,32270],{"class":102},[92,45087,45088],{"class":94,"line":16693},[92,45089,34452],{"class":161},[92,45091,45092],{"class":94,"line":16716},[92,45093,34457],{"class":161},[92,45095,45096,45098,45100,45102,45104,45106,45108,45110,45112,45114,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140],{"class":94,"line":16738},[92,45097,34462],{"class":102},[92,45099,148],{"class":98},[92,45101,993],{"class":102},[92,45103,34469],{"class":207},[92,45105,481],{"class":102},[92,45107,34474],{"class":207},[92,45109,481],{"class":102},[92,45111,34479],{"class":207},[92,45113,481],{"class":102},[92,45115,34484],{"class":207},[92,45117,481],{"class":102},[92,45119,34489],{"class":207},[92,45121,481],{"class":102},[92,45123,34494],{"class":207},[92,45125,481],{"class":102},[92,45127,34499],{"class":207},[92,45129,481],{"class":102},[92,45131,34504],{"class":207},[92,45133,481],{"class":102},[92,45135,34509],{"class":207},[92,45137,481],{"class":102},[92,45139,34514],{"class":207},[92,45141,33227],{"class":102},[92,45143,45144,45146],{"class":94,"line":16743},[92,45145,34159],{"class":98},[92,45147,32865],{"class":102},[92,45149,45150],{"class":94,"line":16749},[92,45151,34527],{"class":161},[92,45153,45154,45156,45158,45160],{"class":94,"line":16763},[92,45155,3382],{"class":98},[92,45157,34534],{"class":102},[92,45159,26024],{"class":98},[92,45161,34178],{"class":102},[92,45163,45164,45166,45168],{"class":94,"line":16776},[92,45165,32591],{"class":102},[92,45167,148],{"class":98},[92,45169,32596],{"class":102},[92,45171,45172,45174,45176],{"class":94,"line":16781},[92,45173,32606],{"class":102},[92,45175,148],{"class":98},[92,45177,32611],{"class":102},[92,45179,45180],{"class":94,"line":16795},[92,45181,2379],{"emptyLinePlaceholder":17},[92,45183,45184],{"class":94,"line":16800},[92,45185,34563],{"class":161},[92,45187,45188],{"class":94,"line":16806},[92,45189,32856],{"class":102},[92,45191,45192],{"class":94,"line":16811},[92,45193,34572],{"class":161},[92,45195,45196,45198,45200],{"class":94,"line":16825},[92,45197,32641],{"class":102},[92,45199,148],{"class":98},[92,45201,32646],{"class":102},[92,45203,45204],{"class":94,"line":16830},[92,45205,34585],{"class":161},[92,45207,45208,45210,45212,45214,45216,45218,45220],{"class":94,"line":16835},[92,45209,32658],{"class":102},[92,45211,148],{"class":98},[92,45213,32663],{"class":102},[92,45215,32666],{"class":5196},[92,45217,148],{"class":98},[92,45219,320],{"class":151},[92,45221,109],{"class":102},[92,45223,45224],{"class":94,"line":16849},[92,45225,34606],{"class":161},[92,45227,45228,45230,45232],{"class":94,"line":16861},[92,45229,34611],{"class":102},[92,45231,148],{"class":98},[92,45233,34616],{"class":102},[92,45235,45236,45238,45240],{"class":94,"line":16866},[92,45237,34621],{"class":102},[92,45239,148],{"class":98},[92,45241,34626],{"class":102},[92,45243,45244,45246,45248,45250,45252,45254,45256,45258],{"class":94,"line":16879},[92,45245,34631],{"class":151},[92,45247,103],{"class":102},[92,45249,34636],{"class":207},[92,45251,34639],{"class":102},[92,45253,34642],{"class":207},[92,45255,481],{"class":102},[92,45257,34647],{"class":207},[92,45259,34650],{"class":102},[63,45261,45263],{"id":45262},"_24训练自己的数据集","2.4.训练自己的数据集",[38,45265,45266],{},"猫狗分类任务",[38,45268,45269],{},"划分数据集和验证集",[83,45271,45273],{"className":30359,"code":45272,"language":30361,"meta":10,"style":10},"# 创建脚本，用于划分数据集和验证集\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",[89,45274,45275,45280,45287,45292,45303,45310,45314,45324,45338,45347,45351,45356,45366,45386,45390,45395,45405,45416,45429,45433,45438,45447,45457,45468,45472,45477,45487,45491,45496,45501,45506,45511,45516,45520,45530,45557,45570,45582,45609,45614,45619,45633,45638,45650,45665,45680,45688,45692,45697,45703,45715,45728,45733,45738,45743,45793,45799,45803],{"__ignoreMap":10},[92,45276,45277],{"class":94,"line":95},[92,45278,45279],{"class":161},"# 创建脚本，用于划分数据集和验证集\n",[92,45281,45282,45284],{"class":94,"line":11},[92,45283,30373],{"class":98},[92,45285,45286],{"class":102}," os\n",[92,45288,45289],{"class":94,"line":1158},[92,45290,45291],{"class":161},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[92,45293,45294,45296,45299,45301],{"class":94,"line":1173},[92,45295,30718],{"class":98},[92,45297,45298],{"class":102}," shutil ",[92,45300,30373],{"class":98},[92,45302,31803],{"class":102},[92,45304,45305,45307],{"class":94,"line":1179},[92,45306,30373],{"class":98},[92,45308,45309],{"class":102}," random\n",[92,45311,45312],{"class":94,"line":1193},[92,45313,2379],{"emptyLinePlaceholder":17},[92,45315,45316,45318,45321],{"class":94,"line":1199},[92,45317,31928],{"class":98},[92,45319,45320],{"class":1942}," mkfile",[92,45322,45323],{"class":102},"(file):\n",[92,45325,45326,45328,45330,45333,45336],{"class":94,"line":1290},[92,45327,3080],{"class":98},[92,45329,38911],{"class":98},[92,45331,45332],{"class":102}," os.path.exists(",[92,45334,45335],{"class":5196},"file",[92,45337,30767],{"class":102},[92,45339,45340,45343,45345],{"class":94,"line":1296},[92,45341,45342],{"class":102},"        os.makedirs(",[92,45344,45335],{"class":5196},[92,45346,109],{"class":102},[92,45348,45349],{"class":94,"line":1308},[92,45350,2379],{"emptyLinePlaceholder":17},[92,45352,45353],{"class":94,"line":1591},[92,45354,45355],{"class":161},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[92,45357,45358,45361,45363],{"class":94,"line":1596},[92,45359,45360],{"class":102},"file_path",[92,45362,148],{"class":98},[92,45364,45365],{"class":207},"'data_cat_dog'\n",[92,45367,45368,45371,45373,45376,45378,45381,45383],{"class":94,"line":1602},[92,45369,45370],{"class":102},"flower_class",[92,45372,148],{"class":98},[92,45374,45375],{"class":102},"[cla ",[92,45377,3004],{"class":98},[92,45379,45380],{"class":102}," cla ",[92,45382,26024],{"class":98},[92,45384,45385],{"class":102}," os.listdir(file_path)]\n",[92,45387,45388],{"class":94,"line":1607},[92,45389,2379],{"emptyLinePlaceholder":17},[92,45391,45392],{"class":94,"line":1621},[92,45393,45394],{"class":161},"# 创建训练集train文件夹\n",[92,45396,45397,45400,45403],{"class":94,"line":1626},[92,45398,45399],{"class":102},"mkfile(",[92,45401,45402],{"class":207},"'data\u002Ftrain'",[92,45404,109],{"class":102},[92,45406,45407,45409,45411,45413],{"class":94,"line":1632},[92,45408,3004],{"class":98},[92,45410,45380],{"class":102},[92,45412,26024],{"class":98},[92,45414,45415],{"class":102}," flower_class:\n",[92,45417,45418,45421,45424,45426],{"class":94,"line":1653},[92,45419,45420],{"class":102},"    mkfile(",[92,45422,45423],{"class":207},"'data\u002Ftrain\u002F'",[92,45425,584],{"class":98},[92,45427,45428],{"class":102},"cla)\n",[92,45430,45431],{"class":94,"line":1658},[92,45432,2379],{"emptyLinePlaceholder":17},[92,45434,45435],{"class":94,"line":1672},[92,45436,45437],{"class":161},"# 创建验证集val文件夹\n",[92,45439,45440,45442,45445],{"class":94,"line":1677},[92,45441,45399],{"class":102},[92,45443,45444],{"class":207},"'data\u002Ftest'",[92,45446,109],{"class":102},[92,45448,45449,45451,45453,45455],{"class":94,"line":1706},[92,45450,3004],{"class":98},[92,45452,45380],{"class":102},[92,45454,26024],{"class":98},[92,45456,45415],{"class":102},[92,45458,45459,45461,45464,45466],{"class":94,"line":1711},[92,45460,45420],{"class":102},[92,45462,45463],{"class":207},"'data\u002Ftest\u002F'",[92,45465,584],{"class":98},[92,45467,45428],{"class":102},[92,45469,45470],{"class":94,"line":1728},[92,45471,2379],{"emptyLinePlaceholder":17},[92,45473,45474],{"class":94,"line":1733},[92,45475,45476],{"class":161},"# 划分比例，训练集：测试集=9：1\n",[92,45478,45479,45482,45484],{"class":94,"line":1738},[92,45480,45481],{"class":102},"split_rate",[92,45483,148],{"class":98},[92,45485,45486],{"class":151},"0.1\n",[92,45488,45489],{"class":94,"line":1743},[92,45490,2379],{"emptyLinePlaceholder":17},[92,45492,45493],{"class":94,"line":1757},[92,45494,45495],{"class":161},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[92,45497,45498],{"class":94,"line":1762},[92,45499,45500],{"class":161},"# cla_path：当前类别的原始图片路径\n",[92,45502,45503],{"class":94,"line":2556},[92,45504,45505],{"class":161},"# images：当前类别下所有图片的文件名列表\n",[92,45507,45508],{"class":94,"line":2570},[92,45509,45510],{"class":161},"# num：该类别图片总数\n",[92,45512,45513],{"class":94,"line":2578},[92,45514,45515],{"class":161},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[92,45517,45518],{"class":94,"line":2583},[92,45519,2379],{"emptyLinePlaceholder":17},[92,45521,45522,45524,45526,45528],{"class":94,"line":2589},[92,45523,3004],{"class":98},[92,45525,45380],{"class":102},[92,45527,26024],{"class":98},[92,45529,45415],{"class":102},[92,45531,45532,45535,45537,45540,45542,45545,45548,45550,45552,45554],{"class":94,"line":2595},[92,45533,45534],{"class":102},"    cla_path ",[92,45536,148],{"class":98},[92,45538,45539],{"class":102}," file_path ",[92,45541,584],{"class":98},[92,45543,45544],{"class":207}," '\u002F'",[92,45546,45547],{"class":98}," +",[92,45549,45380],{"class":102},[92,45551,584],{"class":98},[92,45553,45544],{"class":207},[92,45555,45556],{"class":161},"  # 某一类别的子目录\n",[92,45558,45559,45562,45564,45567],{"class":94,"line":2600},[92,45560,45561],{"class":102},"    images ",[92,45563,148],{"class":98},[92,45565,45566],{"class":102}," os.listdir(cla_path)  ",[92,45568,45569],{"class":161},"# iamges 列表存储了该目录下所有图像的名称\n",[92,45571,45572,45575,45577,45579],{"class":94,"line":7928},[92,45573,45574],{"class":102},"    num ",[92,45576,148],{"class":98},[92,45578,7311],{"class":151},[92,45580,45581],{"class":102},"(images)\n",[92,45583,45584,45587,45589,45592,45594,45596,45598,45601,45603,45606],{"class":94,"line":7952},[92,45585,45586],{"class":102},"    eval_index ",[92,45588,148],{"class":98},[92,45590,45591],{"class":102}," random.sample(images, ",[92,45593,596],{"class":5196},[92,45595,148],{"class":98},[92,45597,106],{"class":151},[92,45599,45600],{"class":102},"(num ",[92,45602,558],{"class":98},[92,45604,45605],{"class":102}," split_rate))  ",[92,45607,45608],{"class":161},"# 从images列表中随机抽取 k 个图像名称\n",[92,45610,45611],{"class":94,"line":7957},[92,45612,45613],{"class":161},"    # 遍历该类别下的所有图片\n",[92,45615,45616],{"class":94,"line":7963},[92,45617,45618],{"class":161},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[92,45620,45621,45623,45626,45628,45630],{"class":94,"line":7990},[92,45622,3180],{"class":98},[92,45624,45625],{"class":102}," index, image ",[92,45627,26024],{"class":98},[92,45629,31587],{"class":151},[92,45631,45632],{"class":102},"(images):\n",[92,45634,45635],{"class":94,"line":7995},[92,45636,45637],{"class":161},"        # eval_index 中保存验证集val的图像名称\n",[92,45639,45640,45642,45645,45647],{"class":94,"line":8001},[92,45641,2476],{"class":98},[92,45643,45644],{"class":102}," image ",[92,45646,26024],{"class":98},[92,45648,45649],{"class":102}," eval_index:\n",[92,45651,45652,45655,45657,45660,45662],{"class":94,"line":8013},[92,45653,45654],{"class":102},"            image_path ",[92,45656,148],{"class":98},[92,45658,45659],{"class":102}," cla_path ",[92,45661,584],{"class":98},[92,45663,45664],{"class":102}," image\n",[92,45666,45667,45670,45672,45675,45677],{"class":94,"line":8025},[92,45668,45669],{"class":102},"            new_path ",[92,45671,148],{"class":98},[92,45673,45674],{"class":207}," 'data\u002Ftest\u002F'",[92,45676,45547],{"class":98},[92,45678,45679],{"class":102}," cla\n",[92,45681,45682,45685],{"class":94,"line":8037},[92,45683,45684],{"class":102},"            copy(image_path, new_path)  ",[92,45686,45687],{"class":161},"# 将选中的图像复制到新路径\n",[92,45689,45690],{"class":94,"line":9696},[92,45691,2379],{"emptyLinePlaceholder":17},[92,45693,45694],{"class":94,"line":9721},[92,45695,45696],{"class":161},"        # 其余的图像保存在训练集train中\n",[92,45698,45699,45701],{"class":94,"line":9744},[92,45700,2513],{"class":98},[92,45702,3718],{"class":102},[92,45704,45705,45707,45709,45711,45713],{"class":94,"line":9768},[92,45706,45654],{"class":102},[92,45708,148],{"class":98},[92,45710,45659],{"class":102},[92,45712,584],{"class":98},[92,45714,45664],{"class":102},[92,45716,45717,45719,45721,45724,45726],{"class":94,"line":9773},[92,45718,45669],{"class":102},[92,45720,148],{"class":98},[92,45722,45723],{"class":207}," 'data\u002Ftrain\u002F'",[92,45725,45547],{"class":98},[92,45727,45679],{"class":102},[92,45729,45730],{"class":94,"line":9778},[92,45731,45732],{"class":102},"            copy(image_path, new_path)\n",[92,45734,45735],{"class":94,"line":9783},[92,45736,45737],{"class":161},"            # 打印进度条信息\n",[92,45739,45740],{"class":94,"line":9792},[92,45741,45742],{"class":161},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[92,45744,45745,45747,45749,45751,45754,45756,45758,45761,45763,45765,45767,45770,45773,45775,45777,45780,45783,45785,45787,45790],{"class":94,"line":9797},[92,45746,32432],{"class":151},[92,45748,103],{"class":102},[92,45750,354],{"class":207},[92,45752,45753],{"class":151},"\\r",[92,45755,993],{"class":207},[92,45757,32440],{"class":151},[92,45759,45760],{"class":207},"] processing [",[92,45762,32440],{"class":151},[92,45764,687],{"class":207},[92,45766,32440],{"class":151},[92,45768,45769],{"class":207},"]\"",[92,45771,45772],{"class":102},".format(cla, index ",[92,45774,584],{"class":98},[92,45776,25099],{"class":151},[92,45778,45779],{"class":102},", num), ",[92,45781,45782],{"class":5196},"end",[92,45784,148],{"class":98},[92,45786,7632],{"class":207},[92,45788,45789],{"class":102},")  ",[92,45791,45792],{"class":161},"# processing bar\n",[92,45794,45795,45797],{"class":94,"line":9803},[92,45796,31280],{"class":151},[92,45798,1955],{"class":102},[92,45800,45801],{"class":94,"line":9824},[92,45802,2379],{"emptyLinePlaceholder":17},[92,45804,45805,45807,45809,45812],{"class":94,"line":9830},[92,45806,30396],{"class":151},[92,45808,103],{"class":102},[92,45810,45811],{"class":207},"\"processing done!\"",[92,45813,109],{"class":102},[38,45815,45816],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21978,45818,45820],{"id":45819},"_242模型代码","2.4.2.模型代码",[38,45822,45823],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[83,45825,45827],{"className":30359,"code":45826,"language":30361,"meta":10,"style":10},"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",[89,45828,45829,45835,45845,45855,45859,45875,45883,45897,45907,45911,45941,45945,45979,46025,46029,46063,46109,46113,46117,46151,46181,46185,46193,46207,46229,46251,46269,46273,46287,46291,46295,46311,46315,46323,46337,46347,46391,46395,46423,46427,46437,46465,46469,46505,46509,46537,46541,46551,46583,46615,46643,46647,46657,46689,46721,46753,46785,46817,46845,46849,46859,46891,46923,46935,46939,46951,46955,46959,46971,46979,46999,47003,47007,47011,47015,47019,47023,47037,47045,47053,47065,47079,47087,47091,47099,47109,47119,47129,47139,47149,47155,47159,47163,47175,47195,47203],{"__ignoreMap":10},[92,45830,45831,45833],{"class":94,"line":95},[92,45832,30373],{"class":98},[92,45834,30376],{"class":102},[92,45836,45837,45839,45841,45843],{"class":94,"line":11},[92,45838,30718],{"class":98},[92,45840,30721],{"class":102},[92,45842,30373],{"class":98},[92,45844,30726],{"class":102},[92,45846,45847,45849,45851,45853],{"class":94,"line":1158},[92,45848,30718],{"class":98},[92,45850,30738],{"class":102},[92,45852,30373],{"class":98},[92,45854,30743],{"class":102},[92,45856,45857],{"class":94,"line":1173},[92,45858,2379],{"emptyLinePlaceholder":17},[92,45860,45861,45863,45865,45867,45869,45871,45873],{"class":94,"line":1179},[92,45862,14674],{"class":98},[92,45864,41474],{"class":1942},[92,45866,103],{"class":102},[92,45868,30759],{"class":1942},[92,45870,661],{"class":102},[92,45872,30764],{"class":1942},[92,45874,30767],{"class":102},[92,45876,45877,45879,45881],{"class":94,"line":1193},[92,45878,30782],{"class":98},[92,45880,30785],{"class":151},[92,45882,41493],{"class":102},[92,45884,45885,45887,45889,45891,45893,45895],{"class":94,"line":1199},[92,45886,30798],{"class":151},[92,45888,41500],{"class":102},[92,45890,30804],{"class":151},[92,45892,30807],{"class":102},[92,45894,30810],{"class":151},[92,45896,1955],{"class":102},[92,45898,45899,45901,45903,45905],{"class":94,"line":1290},[92,45900,30826],{"class":151},[92,45902,34752],{"class":102},[92,45904,148],{"class":98},[92,45906,34757],{"class":102},[92,45908,45909],{"class":94,"line":1296},[92,45910,41523],{"class":161},[92,45912,45913,45915,45917,45919,45921,45923,45925,45927,45929,45931,45933,45935,45937,45939],{"class":94,"line":1308},[92,45914,30826],{"class":151},[92,45916,41530],{"class":102},[92,45918,148],{"class":98},[92,45920,30834],{"class":102},[92,45922,30837],{"class":5196},[92,45924,148],{"class":98},[92,45926,41541],{"class":102},[92,45928,30846],{"class":5196},[92,45930,148],{"class":98},[92,45932,41548],{"class":102},[92,45934,30855],{"class":5196},[92,45936,148],{"class":98},[92,45938,320],{"class":151},[92,45940,109],{"class":102},[92,45942,45943],{"class":94,"line":1591},[92,45944,41561],{"class":161},[92,45946,45947,45949,45951,45953,45955,45957,45959,45961,45963,45965,45967,45969,45971,45973,45975,45977],{"class":94,"line":1596},[92,45948,30826],{"class":151},[92,45950,41568],{"class":102},[92,45952,148],{"class":98},[92,45954,30834],{"class":102},[92,45956,30837],{"class":5196},[92,45958,148],{"class":98},[92,45960,41541],{"class":102},[92,45962,30846],{"class":5196},[92,45964,148],{"class":98},[92,45966,41585],{"class":102},[92,45968,294],{"class":151},[92,45970,41590],{"class":102},[92,45972,30855],{"class":5196},[92,45974,148],{"class":98},[92,45976,320],{"class":151},[92,45978,109],{"class":102},[92,45980,45981,45983,45985,45987,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023],{"class":94,"line":1602},[92,45982,30826],{"class":151},[92,45984,41605],{"class":102},[92,45986,148],{"class":98},[92,45988,30834],{"class":102},[92,45990,30837],{"class":5196},[92,45992,148],{"class":98},[92,45994,41585],{"class":102},[92,45996,294],{"class":151},[92,45998,41590],{"class":102},[92,46000,30846],{"class":5196},[92,46002,148],{"class":98},[92,46004,41585],{"class":102},[92,46006,320],{"class":151},[92,46008,41590],{"class":102},[92,46010,30855],{"class":5196},[92,46012,148],{"class":98},[92,46014,174],{"class":151},[92,46016,481],{"class":102},[92,46018,30864],{"class":5196},[92,46020,148],{"class":98},[92,46022,320],{"class":151},[92,46024,109],{"class":102},[92,46026,46027],{"class":94,"line":1607},[92,46028,41650],{"class":161},[92,46030,46031,46033,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061],{"class":94,"line":1621},[92,46032,30826],{"class":151},[92,46034,41657],{"class":102},[92,46036,148],{"class":98},[92,46038,30834],{"class":102},[92,46040,30837],{"class":5196},[92,46042,148],{"class":98},[92,46044,41541],{"class":102},[92,46046,30846],{"class":5196},[92,46048,148],{"class":98},[92,46050,41674],{"class":102},[92,46052,294],{"class":151},[92,46054,41590],{"class":102},[92,46056,30855],{"class":5196},[92,46058,148],{"class":98},[92,46060,320],{"class":151},[92,46062,109],{"class":102},[92,46064,46065,46067,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107],{"class":94,"line":1626},[92,46066,30826],{"class":151},[92,46068,41693],{"class":102},[92,46070,148],{"class":98},[92,46072,30834],{"class":102},[92,46074,30837],{"class":5196},[92,46076,148],{"class":98},[92,46078,41674],{"class":102},[92,46080,294],{"class":151},[92,46082,41590],{"class":102},[92,46084,30846],{"class":5196},[92,46086,148],{"class":98},[92,46088,41674],{"class":102},[92,46090,320],{"class":151},[92,46092,41590],{"class":102},[92,46094,30855],{"class":5196},[92,46096,148],{"class":98},[92,46098,422],{"class":151},[92,46100,481],{"class":102},[92,46102,30864],{"class":5196},[92,46104,148],{"class":98},[92,46106,180],{"class":151},[92,46108,109],{"class":102},[92,46110,46111],{"class":94,"line":1632},[92,46112,41738],{"class":161},[92,46114,46115],{"class":94,"line":1653},[92,46116,41743],{"class":161},[92,46118,46119,46121,46123,46125,46127,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149],{"class":94,"line":1658},[92,46120,30826],{"class":151},[92,46122,41750],{"class":102},[92,46124,148],{"class":98},[92,46126,34810],{"class":102},[92,46128,30855],{"class":5196},[92,46130,148],{"class":98},[92,46132,174],{"class":151},[92,46134,481],{"class":102},[92,46136,30910],{"class":5196},[92,46138,148],{"class":98},[92,46140,320],{"class":151},[92,46142,481],{"class":102},[92,46144,30864],{"class":5196},[92,46146,148],{"class":98},[92,46148,320],{"class":151},[92,46150,109],{"class":102},[92,46152,46153,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179],{"class":94,"line":1672},[92,46154,30826],{"class":151},[92,46156,41785],{"class":102},[92,46158,148],{"class":98},[92,46160,30834],{"class":102},[92,46162,30837],{"class":5196},[92,46164,148],{"class":98},[92,46166,41541],{"class":102},[92,46168,30846],{"class":5196},[92,46170,148],{"class":98},[92,46172,41802],{"class":102},[92,46174,30855],{"class":5196},[92,46176,148],{"class":98},[92,46178,320],{"class":151},[92,46180,109],{"class":102},[92,46182,46183],{"class":94,"line":1677},[92,46184,2379],{"emptyLinePlaceholder":17},[92,46186,46187,46189,46191],{"class":94,"line":1706},[92,46188,30782],{"class":98},[92,46190,31074],{"class":1942},[92,46192,31077],{"class":102},[92,46194,46195,46197,46199,46201,46203,46205],{"class":94,"line":1711},[92,46196,41827],{"class":102},[92,46198,148],{"class":98},[92,46200,30804],{"class":151},[92,46202,35165],{"class":102},[92,46204,30804],{"class":151},[92,46206,41838],{"class":102},[92,46208,46209,46211,46213,46215,46217,46219,46221,46223,46225,46227],{"class":94,"line":1728},[92,46210,7065],{"class":102},[92,46212,148],{"class":98},[92,46214,30804],{"class":151},[92,46216,35165],{"class":102},[92,46218,30804],{"class":151},[92,46220,41853],{"class":102},[92,46222,30804],{"class":151},[92,46224,35165],{"class":102},[92,46226,30804],{"class":151},[92,46228,41862],{"class":102},[92,46230,46231,46233,46235,46237,46239,46241,46243,46245,46247,46249],{"class":94,"line":1733},[92,46232,41867],{"class":102},[92,46234,148],{"class":98},[92,46236,30804],{"class":151},[92,46238,35165],{"class":102},[92,46240,30804],{"class":151},[92,46242,41878],{"class":102},[92,46244,30804],{"class":151},[92,46246,35165],{"class":102},[92,46248,30804],{"class":151},[92,46250,41887],{"class":102},[92,46252,46253,46255,46257,46259,46261,46263,46265,46267],{"class":94,"line":1738},[92,46254,41892],{"class":102},[92,46256,148],{"class":98},[92,46258,30804],{"class":151},[92,46260,35165],{"class":102},[92,46262,30804],{"class":151},[92,46264,41903],{"class":102},[92,46266,30804],{"class":151},[92,46268,41908],{"class":102},[92,46270,46271],{"class":94,"line":1743},[92,46272,41913],{"class":161},[92,46274,46275,46277,46279,46281,46283,46285],{"class":94,"line":1757},[92,46276,14732],{"class":98},[92,46278,41920],{"class":102},[92,46280,32666],{"class":5196},[92,46282,148],{"class":98},[92,46284,320],{"class":151},[92,46286,109],{"class":102},[92,46288,46289],{"class":94,"line":1762},[92,46290,2379],{"emptyLinePlaceholder":17},[92,46292,46293],{"class":94,"line":2556},[92,46294,41941],{"class":161},[92,46296,46297,46299,46301,46303,46305,46307,46309],{"class":94,"line":2570},[92,46298,14674],{"class":98},[92,46300,41948],{"class":1942},[92,46302,103],{"class":102},[92,46304,30759],{"class":1942},[92,46306,661],{"class":102},[92,46308,30764],{"class":1942},[92,46310,30767],{"class":102},[92,46312,46313],{"class":94,"line":2578},[92,46314,41963],{"class":161},[92,46316,46317,46319,46321],{"class":94,"line":2583},[92,46318,30782],{"class":98},[92,46320,30785],{"class":151},[92,46322,41972],{"class":102},[92,46324,46325,46327,46329,46331,46333,46335],{"class":94,"line":2589},[92,46326,30798],{"class":151},[92,46328,41979],{"class":102},[92,46330,30804],{"class":151},[92,46332,30807],{"class":102},[92,46334,30810],{"class":151},[92,46336,1955],{"class":102},[92,46338,46339,46341,46343,46345],{"class":94,"line":2595},[92,46340,30826],{"class":151},[92,46342,41994],{"class":102},[92,46344,148],{"class":98},[92,46346,37990],{"class":102},[92,46348,46349,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389],{"class":94,"line":2600},[92,46350,37995],{"class":102},[92,46352,30837],{"class":5196},[92,46354,148],{"class":98},[92,46356,174],{"class":151},[92,46358,481],{"class":102},[92,46360,30846],{"class":5196},[92,46362,148],{"class":98},[92,46364,306],{"class":151},[92,46366,481],{"class":102},[92,46368,30855],{"class":5196},[92,46370,148],{"class":98},[92,46372,472],{"class":151},[92,46374,481],{"class":102},[92,46376,30910],{"class":5196},[92,46378,148],{"class":98},[92,46380,180],{"class":151},[92,46382,481],{"class":102},[92,46384,30864],{"class":5196},[92,46386,148],{"class":98},[92,46388,174],{"class":151},[92,46390,38028],{"class":102},[92,46392,46393],{"class":94,"line":7928},[92,46394,38033],{"class":102},[92,46396,46397,46399,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419,46421],{"class":94,"line":7952},[92,46398,38078],{"class":102},[92,46400,30855],{"class":5196},[92,46402,148],{"class":98},[92,46404,174],{"class":151},[92,46406,481],{"class":102},[92,46408,30910],{"class":5196},[92,46410,148],{"class":98},[92,46412,180],{"class":151},[92,46414,481],{"class":102},[92,46416,30864],{"class":5196},[92,46418,148],{"class":98},[92,46420,320],{"class":151},[92,46422,109],{"class":102},[92,46424,46425],{"class":94,"line":7957},[92,46426,38107],{"class":102},[92,46428,46429,46431,46433,46435],{"class":94,"line":7963},[92,46430,30826],{"class":151},[92,46432,42085],{"class":102},[92,46434,148],{"class":98},[92,46436,37990],{"class":102},[92,46438,46439,46441,46443,46445,46447,46449,46451,46453,46455,46457,46459,46461,46463],{"class":94,"line":7990},[92,46440,37995],{"class":102},[92,46442,30837],{"class":5196},[92,46444,148],{"class":98},[92,46446,306],{"class":151},[92,46448,481],{"class":102},[92,46450,30846],{"class":5196},[92,46452,148],{"class":98},[92,46454,306],{"class":151},[92,46456,481],{"class":102},[92,46458,30855],{"class":5196},[92,46460,148],{"class":98},[92,46462,320],{"class":151},[92,46464,38028],{"class":102},[92,46466,46467],{"class":94,"line":7995},[92,46468,38033],{"class":102},[92,46470,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503],{"class":94,"line":8001},[92,46472,37995],{"class":102},[92,46474,30837],{"class":5196},[92,46476,148],{"class":98},[92,46478,306],{"class":151},[92,46480,481],{"class":102},[92,46482,30846],{"class":5196},[92,46484,148],{"class":98},[92,46486,42140],{"class":151},[92,46488,481],{"class":102},[92,46490,30855],{"class":5196},[92,46492,148],{"class":98},[92,46494,174],{"class":151},[92,46496,481],{"class":102},[92,46498,30864],{"class":5196},[92,46500,148],{"class":98},[92,46502,320],{"class":151},[92,46504,38028],{"class":102},[92,46506,46507],{"class":94,"line":8013},[92,46508,38033],{"class":102},[92,46510,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535],{"class":94,"line":8025},[92,46512,38078],{"class":102},[92,46514,30855],{"class":5196},[92,46516,148],{"class":98},[92,46518,174],{"class":151},[92,46520,481],{"class":102},[92,46522,30910],{"class":5196},[92,46524,148],{"class":98},[92,46526,180],{"class":151},[92,46528,481],{"class":102},[92,46530,30864],{"class":5196},[92,46532,148],{"class":98},[92,46534,320],{"class":151},[92,46536,109],{"class":102},[92,46538,46539],{"class":94,"line":8037},[92,46540,38107],{"class":102},[92,46542,46543,46545,46547,46549],{"class":94,"line":9696},[92,46544,30826],{"class":151},[92,46546,42201],{"class":102},[92,46548,148],{"class":98},[92,46550,37990],{"class":102},[92,46552,46553,46555,46557,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581],{"class":94,"line":9721},[92,46554,42210],{"class":102},[92,46556,42140],{"class":151},[92,46558,481],{"class":102},[92,46560,306],{"class":151},[92,46562,42219],{"class":102},[92,46564,312],{"class":151},[92,46566,481],{"class":102},[92,46568,32051],{"class":151},[92,46570,42228],{"class":102},[92,46572,704],{"class":151},[92,46574,481],{"class":102},[92,46576,300],{"class":151},[92,46578,42237],{"class":102},[92,46580,300],{"class":151},[92,46582,38028],{"class":102},[92,46584,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613],{"class":94,"line":9744},[92,46586,42210],{"class":102},[92,46588,34851],{"class":151},[92,46590,481],{"class":102},[92,46592,32051],{"class":151},[92,46594,42219],{"class":102},[92,46596,32051],{"class":151},[92,46598,481],{"class":102},[92,46600,42140],{"class":151},[92,46602,42228],{"class":102},[92,46604,300],{"class":151},[92,46606,481],{"class":102},[92,46608,312],{"class":151},[92,46610,42237],{"class":102},[92,46612,306],{"class":151},[92,46614,38028],{"class":102},[92,46616,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641],{"class":94,"line":9768},[92,46618,38078],{"class":102},[92,46620,30855],{"class":5196},[92,46622,148],{"class":98},[92,46624,174],{"class":151},[92,46626,481],{"class":102},[92,46628,30910],{"class":5196},[92,46630,148],{"class":98},[92,46632,180],{"class":151},[92,46634,481],{"class":102},[92,46636,30864],{"class":5196},[92,46638,148],{"class":98},[92,46640,320],{"class":151},[92,46642,109],{"class":102},[92,46644,46645],{"class":94,"line":9773},[92,46646,38107],{"class":102},[92,46648,46649,46651,46653,46655],{"class":94,"line":9778},[92,46650,30826],{"class":151},[92,46652,42312],{"class":102},[92,46654,148],{"class":98},[92,46656,37990],{"class":102},[92,46658,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687],{"class":94,"line":9783},[92,46660,42210],{"class":102},[92,46662,42323],{"class":151},[92,46664,481],{"class":102},[92,46666,42140],{"class":151},[92,46668,42219],{"class":102},[92,46670,312],{"class":151},[92,46672,481],{"class":102},[92,46674,42336],{"class":151},[92,46676,42228],{"class":102},[92,46678,704],{"class":151},[92,46680,481],{"class":102},[92,46682,710],{"class":151},[92,46684,42237],{"class":102},[92,46686,306],{"class":151},[92,46688,38028],{"class":102},[92,46690,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719],{"class":94,"line":9792},[92,46692,42210],{"class":102},[92,46694,38438],{"class":151},[92,46696,481],{"class":102},[92,46698,21028],{"class":151},[92,46700,42219],{"class":102},[92,46702,721],{"class":151},[92,46704,481],{"class":102},[92,46706,31482],{"class":151},[92,46708,42228],{"class":102},[92,46710,903],{"class":151},[92,46712,481],{"class":102},[92,46714,306],{"class":151},[92,46716,42237],{"class":102},[92,46718,306],{"class":151},[92,46720,38028],{"class":102},[92,46722,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751],{"class":94,"line":9797},[92,46724,42210],{"class":102},[92,46726,38438],{"class":151},[92,46728,481],{"class":102},[92,46730,32051],{"class":151},[92,46732,42219],{"class":102},[92,46734,32051],{"class":151},[92,46736,481],{"class":102},[92,46738,34851],{"class":151},[92,46740,42228],{"class":102},[92,46742,903],{"class":151},[92,46744,481],{"class":102},[92,46746,306],{"class":151},[92,46748,42237],{"class":102},[92,46750,306],{"class":151},[92,46752,38028],{"class":102},[92,46754,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783],{"class":94,"line":9803},[92,46756,42210],{"class":102},[92,46758,38438],{"class":151},[92,46760,481],{"class":102},[92,46762,721],{"class":151},[92,46764,42219],{"class":102},[92,46766,32051],{"class":151},[92,46768,481],{"class":102},[92,46770,42433],{"class":151},[92,46772,42228],{"class":102},[92,46774,300],{"class":151},[92,46776,481],{"class":102},[92,46778,306],{"class":151},[92,46780,42237],{"class":102},[92,46782,306],{"class":151},[92,46784,38028],{"class":102},[92,46786,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815],{"class":94,"line":9824},[92,46788,42210],{"class":102},[92,46790,42454],{"class":151},[92,46792,481],{"class":102},[92,46794,34851],{"class":151},[92,46796,42219],{"class":102},[92,46798,21028],{"class":151},[92,46800,481],{"class":102},[92,46802,42467],{"class":151},[92,46804,42228],{"class":102},[92,46806,300],{"class":151},[92,46808,481],{"class":102},[92,46810,32051],{"class":151},[92,46812,42237],{"class":102},[92,46814,32051],{"class":151},[92,46816,38028],{"class":102},[92,46818,46819,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843],{"class":94,"line":9830},[92,46820,38078],{"class":102},[92,46822,30855],{"class":5196},[92,46824,148],{"class":98},[92,46826,174],{"class":151},[92,46828,481],{"class":102},[92,46830,30910],{"class":5196},[92,46832,148],{"class":98},[92,46834,180],{"class":151},[92,46836,481],{"class":102},[92,46838,30864],{"class":5196},[92,46840,148],{"class":98},[92,46842,320],{"class":151},[92,46844,109],{"class":102},[92,46846,46847],{"class":94,"line":9844},[92,46848,38107],{"class":102},[92,46850,46851,46853,46855,46857],{"class":94,"line":9850},[92,46852,30826],{"class":151},[92,46854,42520],{"class":102},[92,46856,148],{"class":98},[92,46858,37990],{"class":102},[92,46860,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889],{"class":94,"line":9877},[92,46862,42210],{"class":102},[92,46864,42531],{"class":151},[92,46866,481],{"class":102},[92,46868,34851],{"class":151},[92,46870,42219],{"class":102},[92,46872,21028],{"class":151},[92,46874,481],{"class":102},[92,46876,42467],{"class":151},[92,46878,42228],{"class":102},[92,46880,300],{"class":151},[92,46882,481],{"class":102},[92,46884,32051],{"class":151},[92,46886,42237],{"class":102},[92,46888,32051],{"class":151},[92,46890,38028],{"class":102},[92,46892,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921],{"class":94,"line":9886},[92,46894,42210],{"class":102},[92,46896,42531],{"class":151},[92,46898,481],{"class":102},[92,46900,34921],{"class":151},[92,46902,42219],{"class":102},[92,46904,42140],{"class":151},[92,46906,481],{"class":102},[92,46908,34921],{"class":151},[92,46910,42228],{"class":102},[92,46912,710],{"class":151},[92,46914,481],{"class":102},[92,46916,32051],{"class":151},[92,46918,42237],{"class":102},[92,46920,32051],{"class":151},[92,46922,38028],{"class":102},[92,46924,46925,46927,46929,46931,46933],{"class":94,"line":9892},[92,46926,42594],{"class":102},[92,46928,320],{"class":151},[92,46930,481],{"class":102},[92,46932,320],{"class":151},[92,46934,42603],{"class":102},[92,46936,46937],{"class":94,"line":9900},[92,46938,38771],{"class":102},[92,46940,46941,46943,46945,46947,46949],{"class":94,"line":9905},[92,46942,38776],{"class":102},[92,46944,42614],{"class":151},[92,46946,481],{"class":102},[92,46948,180],{"class":151},[92,46950,109],{"class":102},[92,46952,46953],{"class":94,"line":16584},[92,46954,38107],{"class":102},[92,46956,46957],{"class":94,"line":16590},[92,46958,42629],{"class":161},[92,46960,46961,46963,46965,46967,46969],{"class":94,"line":16613},[92,46962,3382],{"class":98},[92,46964,38849],{"class":102},[92,46966,26024],{"class":98},[92,46968,38854],{"class":151},[92,46970,38857],{"class":102},[92,46972,46973,46975,46977],{"class":94,"line":16619},[92,46974,4621],{"class":98},[92,46976,38869],{"class":151},[92,46978,38872],{"class":102},[92,46980,46981,46983,46985,46987,46989,46991,46993,46995,46997],{"class":94,"line":16642},[92,46982,38882],{"class":102},[92,46984,42656],{"class":5196},[92,46986,148],{"class":98},[92,46988,42661],{"class":207},[92,46990,481],{"class":102},[92,46992,38885],{"class":5196},[92,46994,148],{"class":98},[92,46996,38890],{"class":207},[92,46998,109],{"class":102},[92,47000,47001],{"class":94,"line":16656},[92,47002,42676],{"class":161},[92,47004,47005],{"class":94,"line":16676},[92,47006,42681],{"class":161},[92,47008,47009],{"class":94,"line":16682},[92,47010,42686],{"class":161},[92,47012,47013],{"class":94,"line":16693},[92,47014,42691],{"class":161},[92,47016,47017],{"class":94,"line":16716},[92,47018,42696],{"class":161},[92,47020,47021],{"class":94,"line":16738},[92,47022,42701],{"class":161},[92,47024,47025,47027,47029,47031,47033,47035],{"class":94,"line":16743},[92,47026,38902],{"class":98},[92,47028,38905],{"class":102},[92,47030,38908],{"class":98},[92,47032,38911],{"class":98},[92,47034,38914],{"class":151},[92,47036,3718],{"class":102},[92,47038,47039,47041,47043],{"class":94,"line":16749},[92,47040,38926],{"class":102},[92,47042,294],{"class":151},[92,47044,109],{"class":102},[92,47046,47047,47049,47051],{"class":94,"line":16763},[92,47048,42728],{"class":98},[92,47050,38869],{"class":151},[92,47052,38945],{"class":102},[92,47054,47055,47057,47059,47061,47063],{"class":94,"line":16776},[92,47056,42737],{"class":102},[92,47058,294],{"class":151},[92,47060,481],{"class":102},[92,47062,38967],{"class":151},[92,47064,109],{"class":102},[92,47066,47067,47069,47071,47073,47075,47077],{"class":94,"line":16781},[92,47068,42750],{"class":98},[92,47070,38905],{"class":102},[92,47072,38908],{"class":98},[92,47074,38911],{"class":98},[92,47076,38914],{"class":151},[92,47078,3718],{"class":102},[92,47080,47081,47083,47085],{"class":94,"line":16795},[92,47082,42765],{"class":102},[92,47084,294],{"class":151},[92,47086,109],{"class":102},[92,47088,47089],{"class":94,"line":16800},[92,47090,35146],{"class":161},[92,47092,47093,47095,47097],{"class":94,"line":16806},[92,47094,30782],{"class":98},[92,47096,31074],{"class":1942},[92,47098,31077],{"class":102},[92,47100,47101,47103,47105,47107],{"class":94,"line":16811},[92,47102,31082],{"class":102},[92,47104,148],{"class":98},[92,47106,30804],{"class":151},[92,47108,42792],{"class":102},[92,47110,47111,47113,47115,47117],{"class":94,"line":16825},[92,47112,31082],{"class":102},[92,47114,148],{"class":98},[92,47116,30804],{"class":151},[92,47118,42803],{"class":102},[92,47120,47121,47123,47125,47127],{"class":94,"line":16830},[92,47122,31082],{"class":102},[92,47124,148],{"class":98},[92,47126,30804],{"class":151},[92,47128,42814],{"class":102},[92,47130,47131,47133,47135,47137],{"class":94,"line":16835},[92,47132,31082],{"class":102},[92,47134,148],{"class":98},[92,47136,30804],{"class":151},[92,47138,42825],{"class":102},[92,47140,47141,47143,47145,47147],{"class":94,"line":16849},[92,47142,31082],{"class":102},[92,47144,148],{"class":98},[92,47146,30804],{"class":151},[92,47148,42836],{"class":102},[92,47150,47151,47153],{"class":94,"line":16861},[92,47152,14732],{"class":98},[92,47154,31190],{"class":102},[92,47156,47157],{"class":94,"line":16866},[92,47158,2379],{"emptyLinePlaceholder":17},[92,47160,47161],{"class":94,"line":16879},[92,47162,42851],{"class":161},[92,47164,47165,47167,47169,47171,47173],{"class":94,"line":16884},[92,47166,1510],{"class":98},[92,47168,31201],{"class":151},[92,47170,2928],{"class":98},[92,47172,31206],{"class":207},[92,47174,3718],{"class":102},[92,47176,47177,47179,47181,47183,47185,47187,47189,47191,47193],{"class":94,"line":16889},[92,47178,31218],{"class":102},[92,47180,148],{"class":98},[92,47182,30432],{"class":102},[92,47184,31225],{"class":207},[92,47186,1683],{"class":98},[92,47188,31230],{"class":102},[92,47190,1680],{"class":98},[92,47192,30457],{"class":207},[92,47194,109],{"class":102},[92,47196,47197,47199,47201],{"class":94,"line":16894},[92,47198,31270],{"class":102},[92,47200,148],{"class":98},[92,47202,42892],{"class":102},[92,47204,47205,47207,47209,47211,47213,47215,47217,47219],{"class":94,"line":16907},[92,47206,31280],{"class":151},[92,47208,31283],{"class":102},[92,47210,320],{"class":151},[92,47212,481],{"class":102},[92,47214,31482],{"class":151},[92,47216,481],{"class":102},[92,47218,31482],{"class":151},[92,47220,31296],{"class":102},[21978,47222,47224],{"id":47223},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[38,47226,47227],{},"计算图片的均值与方差，用于训练中归一化处理操作",[83,47229,47231],{"className":30359,"code":47230,"language":30361,"meta":10,"style":10},"# 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",[89,47232,47233,47238,47251,47256,47262,47267,47277,47281,47286,47296,47300,47305,47315,47332,47336,47341,47353,47365,47396,47405,47415,47425,47429,47434,47449,47453,47458,47463,47468,47478,47483,47508,47512,47517,47532,47536,47549,47553,47558,47563,47568,47573,47578,47588,47598,47621,47629,47637,47645,47649,47661,47665,47670,47674,47678,47685,47705,47729,47736,47750,47755,47760,47764,47778,47782,47794],{"__ignoreMap":10},[92,47234,47235],{"class":94,"line":95},[92,47236,47237],{"class":161},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[92,47239,47240,47242,47245,47248],{"class":94,"line":11},[92,47241,30718],{"class":98},[92,47243,47244],{"class":151}," PIL",[92,47246,47247],{"class":98}," import",[92,47249,47250],{"class":102}," Image\n",[92,47252,47253],{"class":94,"line":1158},[92,47254,47255],{"class":161},"# os 用来处理文件夹和文件路径\n",[92,47257,47258,47260],{"class":94,"line":1173},[92,47259,30373],{"class":98},[92,47261,45286],{"class":102},[92,47263,47264],{"class":94,"line":1179},[92,47265,47266],{"class":161},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[92,47268,47269,47271,47273,47275],{"class":94,"line":1193},[92,47270,30373],{"class":98},[92,47272,31361],{"class":102},[92,47274,31364],{"class":98},[92,47276,31367],{"class":102},[92,47278,47279],{"class":94,"line":1199},[92,47280,2379],{"emptyLinePlaceholder":17},[92,47282,47283],{"class":94,"line":1290},[92,47284,47285],{"class":161},"# 文件夹路径，包含所有图片文件\n",[92,47287,47288,47291,47293],{"class":94,"line":1296},[92,47289,47290],{"class":102},"folder_path ",[92,47292,148],{"class":98},[92,47294,47295],{"class":207}," 'data_cat_dog'\n",[92,47297,47298],{"class":94,"line":1308},[92,47299,2379],{"emptyLinePlaceholder":17},[92,47301,47302],{"class":94,"line":1591},[92,47303,47304],{"class":161},"# 初始化累积变量\n",[92,47306,47307,47310,47312],{"class":94,"line":1596},[92,47308,47309],{"class":102},"total_pixels ",[92,47311,148],{"class":98},[92,47313,47314],{"class":151}," 0\n",[92,47316,47317,47320,47322,47325,47327,47329],{"class":94,"line":1602},[92,47318,47319],{"class":102},"sum_normalized_pixel_values ",[92,47321,148],{"class":98},[92,47323,47324],{"class":102}," np.zeros(",[92,47326,174],{"class":151},[92,47328,45789],{"class":102},[92,47330,47331],{"class":161},"# 如果是RGB图像，需要三个通道的均值和方差\n",[92,47333,47334],{"class":94,"line":1607},[92,47335,2379],{"emptyLinePlaceholder":17},[92,47337,47338],{"class":94,"line":1621},[92,47339,47340],{"class":161},"# 遍历文件夹中的图片文件\n",[92,47342,47343,47345,47348,47350],{"class":94,"line":1626},[92,47344,3004],{"class":98},[92,47346,47347],{"class":102}," root, dirs, files ",[92,47349,26024],{"class":98},[92,47351,47352],{"class":102}," os.walk(folder_path):\n",[92,47354,47355,47357,47360,47362],{"class":94,"line":1632},[92,47356,3180],{"class":98},[92,47358,47359],{"class":102}," filename ",[92,47361,26024],{"class":98},[92,47363,47364],{"class":102}," files:\n",[92,47366,47367,47369,47372,47375,47377,47380,47382,47385,47387,47390,47393],{"class":94,"line":1653},[92,47368,2476],{"class":98},[92,47370,47371],{"class":102}," filename.endswith((",[92,47373,47374],{"class":207},"'.jpg'",[92,47376,12415],{"class":102},[92,47378,47379],{"class":207},"'.jpeg'",[92,47381,12415],{"class":102},[92,47383,47384],{"class":207},"'.png'",[92,47386,12415],{"class":102},[92,47388,47389],{"class":207},"'.bmp'",[92,47391,47392],{"class":102},")):  ",[92,47394,47395],{"class":161},"# 可根据实际情况添加其他格式\n",[92,47397,47398,47400,47402],{"class":94,"line":1658},[92,47399,45654],{"class":102},[92,47401,148],{"class":98},[92,47403,47404],{"class":102}," os.path.join(root, filename)\n",[92,47406,47407,47410,47412],{"class":94,"line":1672},[92,47408,47409],{"class":102},"            image ",[92,47411,148],{"class":98},[92,47413,47414],{"class":102}," Image.open(image_path)\n",[92,47416,47417,47420,47422],{"class":94,"line":1677},[92,47418,47419],{"class":102},"            image_array ",[92,47421,148],{"class":98},[92,47423,47424],{"class":102}," np.array(image)\n",[92,47426,47427],{"class":94,"line":1706},[92,47428,2379],{"emptyLinePlaceholder":17},[92,47430,47431],{"class":94,"line":1711},[92,47432,47433],{"class":161},"            # 归一化像素值到0-1之间\n",[92,47435,47436,47439,47441,47444,47446],{"class":94,"line":1728},[92,47437,47438],{"class":102},"            normalized_image_array ",[92,47440,148],{"class":98},[92,47442,47443],{"class":102}," image_array ",[92,47445,687],{"class":98},[92,47447,47448],{"class":151}," 255.0\n",[92,47450,47451],{"class":94,"line":1733},[92,47452,2379],{"emptyLinePlaceholder":17},[92,47454,47455],{"class":94,"line":1738},[92,47456,47457],{"class":161},"            # print(image_path)\n",[92,47459,47460],{"class":94,"line":1743},[92,47461,47462],{"class":161},"            # print(normalized_image_array.shape)\n",[92,47464,47465],{"class":94,"line":1757},[92,47466,47467],{"class":161},"            # 累积归一化后的像素值和像素数量\n",[92,47469,47470,47473,47475],{"class":94,"line":1762},[92,47471,47472],{"class":102},"            total_pixels ",[92,47474,9457],{"class":98},[92,47476,47477],{"class":102}," normalized_image_array.size\n",[92,47479,47480],{"class":94,"line":2556},[92,47481,47482],{"class":161},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[92,47484,47485,47488,47490,47493,47496,47498,47500,47502,47504,47506],{"class":94,"line":2570},[92,47486,47487],{"class":102},"            sum_normalized_pixel_values ",[92,47489,9457],{"class":98},[92,47491,47492],{"class":102}," np.sum(normalized_image_array, ",[92,47494,47495],{"class":5196},"axis",[92,47497,148],{"class":98},[92,47499,103],{"class":102},[92,47501,294],{"class":151},[92,47503,12415],{"class":102},[92,47505,320],{"class":151},[92,47507,30478],{"class":102},[92,47509,47510],{"class":94,"line":2578},[92,47511,2379],{"emptyLinePlaceholder":17},[92,47513,47514],{"class":94,"line":2583},[92,47515,47516],{"class":161},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[92,47518,47519,47522,47524,47527,47529],{"class":94,"line":2589},[92,47520,47521],{"class":102},"mean ",[92,47523,148],{"class":98},[92,47525,47526],{"class":102}," sum_normalized_pixel_values ",[92,47528,687],{"class":98},[92,47530,47531],{"class":102}," total_pixels\n",[92,47533,47534],{"class":94,"line":2595},[92,47535,2379],{"emptyLinePlaceholder":17},[92,47537,47538,47541,47543,47545,47547],{"class":94,"line":2600},[92,47539,47540],{"class":102},"sum_squared_diff ",[92,47542,148],{"class":98},[92,47544,47324],{"class":102},[92,47546,174],{"class":151},[92,47548,109],{"class":102},[92,47550,47551],{"class":94,"line":7928},[92,47552,2379],{"emptyLinePlaceholder":17},[92,47554,47555],{"class":94,"line":7952},[92,47556,47557],{"class":161},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[92,47559,47560],{"class":94,"line":7957},[92,47561,47562],{"class":161},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[92,47564,47565],{"class":94,"line":7963},[92,47566,47567],{"class":161},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[92,47569,47570],{"class":94,"line":7990},[92,47571,47572],{"class":161},"# Image.open(image_path)：打开图片\n",[92,47574,47575],{"class":94,"line":7995},[92,47576,47577],{"class":161},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[92,47579,47580,47582,47584,47586],{"class":94,"line":8001},[92,47581,3004],{"class":98},[92,47583,47347],{"class":102},[92,47585,26024],{"class":98},[92,47587,47352],{"class":102},[92,47589,47590,47592,47594,47596],{"class":94,"line":8013},[92,47591,3180],{"class":98},[92,47593,47359],{"class":102},[92,47595,26024],{"class":98},[92,47597,47364],{"class":102},[92,47599,47600,47602,47604,47606,47608,47610,47612,47614,47616,47618],{"class":94,"line":8025},[92,47601,2476],{"class":98},[92,47603,47371],{"class":102},[92,47605,47374],{"class":207},[92,47607,12415],{"class":102},[92,47609,47379],{"class":207},[92,47611,12415],{"class":102},[92,47613,47384],{"class":207},[92,47615,12415],{"class":102},[92,47617,47389],{"class":207},[92,47619,47620],{"class":102},")):\n",[92,47622,47623,47625,47627],{"class":94,"line":8037},[92,47624,45654],{"class":102},[92,47626,148],{"class":98},[92,47628,47404],{"class":102},[92,47630,47631,47633,47635],{"class":94,"line":9696},[92,47632,47409],{"class":102},[92,47634,148],{"class":98},[92,47636,47414],{"class":102},[92,47638,47639,47641,47643],{"class":94,"line":9721},[92,47640,47419],{"class":102},[92,47642,148],{"class":98},[92,47644,47424],{"class":102},[92,47646,47647],{"class":94,"line":9744},[92,47648,47433],{"class":161},[92,47650,47651,47653,47655,47657,47659],{"class":94,"line":9768},[92,47652,47438],{"class":102},[92,47654,148],{"class":98},[92,47656,47443],{"class":102},[92,47658,687],{"class":98},[92,47660,47448],{"class":151},[92,47662,47663],{"class":94,"line":9773},[92,47664,47462],{"class":161},[92,47666,47667],{"class":94,"line":9778},[92,47668,47669],{"class":161},"            # print(mean.shape)\n",[92,47671,47672],{"class":94,"line":9783},[92,47673,47457],{"class":161},[92,47675,47676],{"class":94,"line":9792},[92,47677,2379],{"emptyLinePlaceholder":17},[92,47679,47680,47683],{"class":94,"line":9797},[92,47681,47682],{"class":98},"            try",[92,47684,3718],{"class":102},[92,47686,47687,47690,47692,47695,47697,47700,47702],{"class":94,"line":9803},[92,47688,47689],{"class":102},"                diff ",[92,47691,148],{"class":98},[92,47693,47694],{"class":102}," (normalized_image_array ",[92,47696,635],{"class":98},[92,47698,47699],{"class":102}," mean) ",[92,47701,10641],{"class":98},[92,47703,47704],{"class":151}," 2\n",[92,47706,47707,47710,47712,47715,47717,47719,47721,47723,47725,47727],{"class":94,"line":9824},[92,47708,47709],{"class":102},"                sum_squared_diff ",[92,47711,9457],{"class":98},[92,47713,47714],{"class":102}," np.sum(diff, ",[92,47716,47495],{"class":5196},[92,47718,148],{"class":98},[92,47720,103],{"class":102},[92,47722,294],{"class":151},[92,47724,12415],{"class":102},[92,47726,320],{"class":151},[92,47728,30478],{"class":102},[92,47730,47731,47734],{"class":94,"line":9830},[92,47732,47733],{"class":98},"            except",[92,47735,3718],{"class":102},[92,47737,47738,47741,47743,47745,47748],{"class":94,"line":9844},[92,47739,47740],{"class":151},"                print",[92,47742,103],{"class":102},[92,47744,155],{"class":98},[92,47746,47747],{"class":207},"\"捕获到自定义异常\"",[92,47749,109],{"class":102},[92,47751,47752],{"class":94,"line":9850},[92,47753,47754],{"class":161},"            # diff = (normalized_image_array - mean) ** 2\n",[92,47756,47757],{"class":94,"line":9877},[92,47758,47759],{"class":161},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[92,47761,47762],{"class":94,"line":9886},[92,47763,2379],{"emptyLinePlaceholder":17},[92,47765,47766,47769,47771,47774,47776],{"class":94,"line":9892},[92,47767,47768],{"class":102},"variance ",[92,47770,148],{"class":98},[92,47772,47773],{"class":102}," sum_squared_diff ",[92,47775,687],{"class":98},[92,47777,47531],{"class":102},[92,47779,47780],{"class":94,"line":9900},[92,47781,2379],{"emptyLinePlaceholder":17},[92,47783,47784,47786,47788,47791],{"class":94,"line":9905},[92,47785,30396],{"class":151},[92,47787,103],{"class":102},[92,47789,47790],{"class":207},"\"Mean:\"",[92,47792,47793],{"class":102},", mean)\n",[92,47795,47796,47798,47800,47803],{"class":94,"line":16584},[92,47797,30396],{"class":151},[92,47799,103],{"class":102},[92,47801,47802],{"class":207},"\"Variance:\"",[92,47804,47805],{"class":102},", variance)\n",[83,47807,47809],{"className":30359,"code":47808,"language":30361,"meta":10,"style":10},"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",[89,47810,47811,47817,47823,47833,47839,47849,47863,47873,47883,47893,47897,47907,47917,47921,47925,47933,47938,47943,47962,47966,47971,47976,47981,47986,48027,48032,48042,48047,48060,48065,48070,48075,48080,48085,48089,48094,48099,48121,48125,48157,48171,48181,48191,48195,48205,48219,48229,48239,48249,48255,48259,48263,48267,48271,48275,48283,48303,48307,48311,48315,48319,48335,48339,48343,48351,48355,48359,48367,48371,48375,48379,48387,48391,48395,48399,48407,48411,48419,48423,48431,48435,48443,48447,48455,48459,48463,48471,48475,48479,48491,48515,48529,48533,48537,48541,48549,48553,48561,48565,48573,48577,48585,48589,48597,48601,48609,48613,48625,48629,48637,48641,48649,48653,48657,48661,48665,48673,48677,48693,48697,48705,48709,48713,48717,48721,48725,48729,48733,48749,48753,48765,48769,48781,48785,48797,48801,48809,48813,48821,48825,48829,48833,48839,48843,48851,48855,48871,48875,48883,48887,48903,48915,48919,48931,48935,48939,48947,48951,48955,48963,48967,48975,48979,48987,48991,48995,49037,49079,49083,49087,49103,49107,49123,49127,49131,49139,49143,49147,49159,49197,49201,49205,49213,49217,49231,49241,49247,49253,49259,49265,49269,49273,49279,49283,49287,49295,49299,49317,49321,49325,49329,49345,49349,49353,49357,49361,49365,49385,49405,49409,49413,49417,49425,49433,49437,49453,49473,49493,49497,49502,49511,49520,49525,49530,49535,49548,49553,49562,49571,49588],{"__ignoreMap":10},[92,47812,47813,47815],{"class":94,"line":95},[92,47814,30373],{"class":98},[92,47816,31803],{"class":102},[92,47818,47819,47821],{"class":94,"line":11},[92,47820,30373],{"class":98},[92,47822,31810],{"class":102},[92,47824,47825,47827,47829,47831],{"class":94,"line":1158},[92,47826,30373],{"class":98},[92,47828,31821],{"class":102},[92,47830,31364],{"class":98},[92,47832,31826],{"class":102},[92,47834,47835,47837],{"class":94,"line":1173},[92,47836,30373],{"class":98},[92,47838,30376],{"class":102},[92,47840,47841,47843,47845,47847],{"class":94,"line":1179},[92,47842,30718],{"class":98},[92,47844,31396],{"class":102},[92,47846,30373],{"class":98},[92,47848,31843],{"class":102},[92,47850,47851,47853,47855,47857,47860],{"class":94,"line":1193},[92,47852,30718],{"class":98},[92,47854,31349],{"class":102},[92,47856,30373],{"class":98},[92,47858,47859],{"class":102}," ImageFolder ",[92,47861,47862],{"class":161},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[92,47864,47865,47867,47869,47871],{"class":94,"line":1199},[92,47866,30718],{"class":98},[92,47868,31379],{"class":102},[92,47870,30373],{"class":98},[92,47872,31384],{"class":102},[92,47874,47875,47877,47879,47881],{"class":94,"line":1290},[92,47876,30373],{"class":98},[92,47878,31396],{"class":102},[92,47880,31364],{"class":98},[92,47882,31401],{"class":102},[92,47884,47885,47887,47889,47891],{"class":94,"line":1296},[92,47886,30373],{"class":98},[92,47888,31413],{"class":102},[92,47890,31364],{"class":98},[92,47892,31418],{"class":102},[92,47894,47895],{"class":94,"line":1308},[92,47896,31888],{"class":161},[92,47898,47899,47901,47903,47905],{"class":94,"line":1591},[92,47900,30718],{"class":98},[92,47902,31895],{"class":102},[92,47904,30373],{"class":98},[92,47906,43012],{"class":102},[92,47908,47909,47911,47913,47915],{"class":94,"line":1596},[92,47910,30718],{"class":98},[92,47912,30721],{"class":102},[92,47914,30373],{"class":98},[92,47916,30726],{"class":102},[92,47918,47919],{"class":94,"line":1602},[92,47920,2379],{"emptyLinePlaceholder":17},[92,47922,47923],{"class":94,"line":1607},[92,47924,31923],{"class":161},[92,47926,47927,47929,47931],{"class":94,"line":1621},[92,47928,31928],{"class":98},[92,47930,31931],{"class":1942},[92,47932,31934],{"class":102},[92,47934,47935],{"class":94,"line":1626},[92,47936,47937],{"class":161},"    # 导入自己的数据集，并进行数据处理\n",[92,47939,47940],{"class":94,"line":1632},[92,47941,47942],{"class":161},"    # 定义数据集的路径\n",[92,47944,47945,47948,47950,47952,47954,47956,47960],{"class":94,"line":1653},[92,47946,47947],{"class":151},"    ROOT_PATH",[92,47949,148],{"class":98},[92,47951,773],{"class":98},[92,47953,354],{"class":207},[92,47955,661],{"class":151},[92,47957,47959],{"class":47958},"sA_wV","\u002Fdata\u002Ftrain",[92,47961,25114],{"class":207},[92,47963,47964],{"class":94,"line":1658},[92,47965,2379],{"emptyLinePlaceholder":17},[92,47967,47968],{"class":94,"line":1672},[92,47969,47970],{"class":161},"    # 定义归一化方法\n",[92,47972,47973],{"class":94,"line":1677},[92,47974,47975],{"class":161},"    # 这里需要先计算一下数据集的均值和方差\n",[92,47977,47978],{"class":94,"line":1706},[92,47979,47980],{"class":161},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[92,47982,47983],{"class":94,"line":1711},[92,47984,47985],{"class":161},"    # 第一个参数是均值，第二个参数是方差\n",[92,47987,47988,47991,47993,47996,47999,48001,48004,48006,48009,48012,48015,48017,48020,48022,48025],{"class":94,"line":1728},[92,47989,47990],{"class":102},"    normalize",[92,47992,148],{"class":98},[92,47994,47995],{"class":102},"transforms.Normalize([",[92,47997,47998],{"class":151},"0.162",[92,48000,481],{"class":102},[92,48002,48003],{"class":151},"0.151",[92,48005,481],{"class":102},[92,48007,48008],{"class":151},"0.138",[92,48010,48011],{"class":102},"],[",[92,48013,48014],{"class":151},"0.058",[92,48016,481],{"class":102},[92,48018,48019],{"class":151},"0.052",[92,48021,481],{"class":102},[92,48023,48024],{"class":151},"0.048",[92,48026,4636],{"class":102},[92,48028,48029],{"class":94,"line":1733},[92,48030,48031],{"class":161},"    # 定义数据集处理方法变量\n",[92,48033,48034,48037,48039],{"class":94,"line":1738},[92,48035,48036],{"class":102},"    train_transform",[92,48038,148],{"class":98},[92,48040,48041],{"class":102},"transforms.Compose([\n",[92,48043,48044],{"class":94,"line":1743},[92,48045,48046],{"class":161},"        # 调整图像大小为224*224\n",[92,48048,48049,48052,48054,48056,48058],{"class":94,"line":1757},[92,48050,48051],{"class":102},"        transforms.Resize((",[92,48053,31482],{"class":151},[92,48055,481],{"class":102},[92,48057,31482],{"class":151},[92,48059,42603],{"class":102},[92,48061,48062],{"class":94,"line":1762},[92,48063,48064],{"class":161},"        # 将图像转换为张量\n",[92,48066,48067],{"class":94,"line":2556},[92,48068,48069],{"class":102},"        transforms.ToTensor(),\n",[92,48071,48072],{"class":94,"line":2570},[92,48073,48074],{"class":102},"        normalize])\n",[92,48076,48077],{"class":94,"line":2578},[92,48078,48079],{"class":161},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[92,48081,48082],{"class":94,"line":2583},[92,48083,48084],{"class":161},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[92,48086,48087],{"class":94,"line":2589},[92,48088,2379],{"emptyLinePlaceholder":17},[92,48090,48091],{"class":94,"line":2595},[92,48092,48093],{"class":161},"    # 加载数据集\n",[92,48095,48096],{"class":94,"line":2600},[92,48097,48098],{"class":161},"    # 传入数据集路径与处理方法\n",[92,48100,48101,48103,48105,48108,48111,48113,48116,48118],{"class":94,"line":7928},[92,48102,31939],{"class":102},[92,48104,148],{"class":98},[92,48106,48107],{"class":102},"ImageFolder(",[92,48109,48110],{"class":151},"ROOT_PATH",[92,48112,481],{"class":102},[92,48114,48115],{"class":5196},"transform",[92,48117,148],{"class":98},[92,48119,48120],{"class":102},"train_transform)\n",[92,48122,48123],{"class":94,"line":7952},[92,48124,2379],{"emptyLinePlaceholder":17},[92,48126,48127,48129,48131,48133,48135,48137,48139,48141,48143,48145,48147,48149,48151,48153,48155],{"class":94,"line":7957},[92,48128,31991],{"class":102},[92,48130,148],{"class":98},[92,48132,31996],{"class":102},[92,48134,31999],{"class":151},[92,48136,103],{"class":102},[92,48138,32004],{"class":151},[92,48140,558],{"class":98},[92,48142,7338],{"class":151},[92,48144,32011],{"class":102},[92,48146,31999],{"class":151},[92,48148,103],{"class":102},[92,48150,32018],{"class":151},[92,48152,558],{"class":98},[92,48154,7338],{"class":151},[92,48156,32025],{"class":102},[92,48158,48159,48161,48163,48165,48167,48169],{"class":94,"line":7963},[92,48160,32030],{"class":102},[92,48162,148],{"class":98},[92,48164,32035],{"class":102},[92,48166,31518],{"class":5196},[92,48168,148],{"class":98},[92,48170,31523],{"class":102},[92,48172,48173,48175,48177,48179],{"class":94,"line":7990},[92,48174,32046],{"class":5196},[92,48176,148],{"class":98},[92,48178,300],{"class":151},[92,48180,31447],{"class":102},[92,48182,48183,48185,48187,48189],{"class":94,"line":7995},[92,48184,32058],{"class":5196},[92,48186,148],{"class":98},[92,48188,31457],{"class":151},[92,48190,31447],{"class":102},[92,48192,48193],{"class":94,"line":8001},[92,48194,32069],{"class":161},[92,48196,48197,48199,48201,48203],{"class":94,"line":8013},[92,48198,32074],{"class":5196},[92,48200,148],{"class":98},[92,48202,498],{"class":151},[92,48204,109],{"class":102},[92,48206,48207,48209,48211,48213,48215,48217],{"class":94,"line":8025},[92,48208,32085],{"class":102},[92,48210,148],{"class":98},[92,48212,31515],{"class":102},[92,48214,31518],{"class":5196},[92,48216,148],{"class":98},[92,48218,32096],{"class":102},[92,48220,48221,48223,48225,48227],{"class":94,"line":8037},[92,48222,32101],{"class":5196},[92,48224,148],{"class":98},[92,48226,300],{"class":151},[92,48228,31447],{"class":102},[92,48230,48231,48233,48235,48237],{"class":94,"line":9696},[92,48232,32112],{"class":5196},[92,48234,148],{"class":98},[92,48236,31457],{"class":151},[92,48238,31447],{"class":102},[92,48240,48241,48243,48245,48247],{"class":94,"line":9721},[92,48242,32123],{"class":5196},[92,48244,148],{"class":98},[92,48246,498],{"class":151},[92,48248,109],{"class":102},[92,48250,48251,48253],{"class":94,"line":9744},[92,48252,4069],{"class":98},[92,48254,32136],{"class":102},[92,48256,48257],{"class":94,"line":9768},[92,48258,2379],{"emptyLinePlaceholder":17},[92,48260,48261],{"class":94,"line":9773},[92,48262,32145],{"class":161},[92,48264,48265],{"class":94,"line":9778},[92,48266,32150],{"class":161},[92,48268,48269],{"class":94,"line":9783},[92,48270,2379],{"emptyLinePlaceholder":17},[92,48272,48273],{"class":94,"line":9792},[92,48274,32159],{"class":161},[92,48276,48277,48279,48281],{"class":94,"line":9797},[92,48278,31928],{"class":98},[92,48280,32166],{"class":1942},[92,48282,32169],{"class":102},[92,48284,48285,48287,48289,48291,48293,48295,48297,48299,48301],{"class":94,"line":9803},[92,48286,31218],{"class":102},[92,48288,148],{"class":98},[92,48290,30432],{"class":102},[92,48292,31225],{"class":207},[92,48294,1683],{"class":98},[92,48296,31230],{"class":102},[92,48298,1680],{"class":98},[92,48300,32188],{"class":207},[92,48302,109],{"class":102},[92,48304,48305],{"class":94,"line":9824},[92,48306,2379],{"emptyLinePlaceholder":17},[92,48308,48309],{"class":94,"line":9830},[92,48310,32203],{"class":161},[92,48312,48313],{"class":94,"line":9844},[92,48314,32208],{"class":161},[92,48316,48317],{"class":94,"line":9850},[92,48318,32213],{"class":161},[92,48320,48321,48323,48325,48327,48329,48331,48333],{"class":94,"line":9877},[92,48322,32218],{"class":102},[92,48324,148],{"class":98},[92,48326,32223],{"class":102},[92,48328,32226],{"class":5196},[92,48330,148],{"class":98},[92,48332,32231],{"class":151},[92,48334,109],{"class":102},[92,48336,48337],{"class":94,"line":9886},[92,48338,2379],{"emptyLinePlaceholder":17},[92,48340,48341],{"class":94,"line":9892},[92,48342,32242],{"class":161},[92,48344,48345,48347,48349],{"class":94,"line":9900},[92,48346,32247],{"class":102},[92,48348,148],{"class":98},[92,48350,32252],{"class":102},[92,48352,48353],{"class":94,"line":9905},[92,48354,2379],{"emptyLinePlaceholder":17},[92,48356,48357],{"class":94,"line":16584},[92,48358,32261],{"class":161},[92,48360,48361,48363,48365],{"class":94,"line":16590},[92,48362,31270],{"class":102},[92,48364,148],{"class":98},[92,48366,32270],{"class":102},[92,48368,48369],{"class":94,"line":16613},[92,48370,32275],{"class":161},[92,48372,48373],{"class":94,"line":16619},[92,48374,32280],{"class":161},[92,48376,48377],{"class":94,"line":16642},[92,48378,32285],{"class":161},[92,48380,48381,48383,48385],{"class":94,"line":16656},[92,48382,32290],{"class":102},[92,48384,148],{"class":98},[92,48386,32295],{"class":102},[92,48388,48389],{"class":94,"line":16676},[92,48390,2379],{"emptyLinePlaceholder":17},[92,48392,48393],{"class":94,"line":16682},[92,48394,32308],{"class":161},[92,48396,48397],{"class":94,"line":16693},[92,48398,32313],{"class":161},[92,48400,48401,48403,48405],{"class":94,"line":16716},[92,48402,32318],{"class":102},[92,48404,148],{"class":98},[92,48406,32323],{"class":151},[92,48408,48409],{"class":94,"line":16738},[92,48410,32328],{"class":161},[92,48412,48413,48415,48417],{"class":94,"line":16743},[92,48414,32333],{"class":102},[92,48416,148],{"class":98},[92,48418,32338],{"class":102},[92,48420,48421],{"class":94,"line":16749},[92,48422,32343],{"class":161},[92,48424,48425,48427,48429],{"class":94,"line":16763},[92,48426,32348],{"class":102},[92,48428,148],{"class":98},[92,48430,32338],{"class":102},[92,48432,48433],{"class":94,"line":16776},[92,48434,32357],{"class":161},[92,48436,48437,48439,48441],{"class":94,"line":16781},[92,48438,32362],{"class":102},[92,48440,148],{"class":98},[92,48442,32338],{"class":102},[92,48444,48445],{"class":94,"line":16795},[92,48446,32371],{"class":161},[92,48448,48449,48451,48453],{"class":94,"line":16800},[92,48450,32376],{"class":102},[92,48452,148],{"class":98},[92,48454,32338],{"class":102},[92,48456,48457],{"class":94,"line":16806},[92,48458,2379],{"emptyLinePlaceholder":17},[92,48460,48461],{"class":94,"line":16811},[92,48462,32389],{"class":161},[92,48464,48465,48467,48469],{"class":94,"line":16825},[92,48466,32394],{"class":102},[92,48468,148],{"class":98},[92,48470,32399],{"class":102},[92,48472,48473],{"class":94,"line":16830},[92,48474,2379],{"emptyLinePlaceholder":17},[92,48476,48477],{"class":94,"line":16835},[92,48478,32412],{"class":161},[92,48480,48481,48483,48485,48487,48489],{"class":94,"line":16849},[92,48482,3180],{"class":98},[92,48484,32419],{"class":102},[92,48486,26024],{"class":98},[92,48488,32424],{"class":151},[92,48490,32427],{"class":102},[92,48492,48493,48495,48497,48499,48501,48503,48505,48507,48509,48511,48513],{"class":94,"line":16861},[92,48494,32432],{"class":151},[92,48496,103],{"class":102},[92,48498,32437],{"class":207},[92,48500,32440],{"class":151},[92,48502,687],{"class":207},[92,48504,32440],{"class":151},[92,48506,354],{"class":207},[92,48508,32449],{"class":102},[92,48510,635],{"class":98},[92,48512,320],{"class":151},[92,48514,30478],{"class":102},[92,48516,48517,48519,48521,48523,48525,48527],{"class":94,"line":16866},[92,48518,32432],{"class":151},[92,48520,103],{"class":102},[92,48522,32464],{"class":207},[92,48524,558],{"class":98},[92,48526,549],{"class":151},[92,48528,109],{"class":102},[92,48530,48531],{"class":94,"line":16879},[92,48532,2379],{"emptyLinePlaceholder":17},[92,48534,48535],{"class":94,"line":16884},[92,48536,32479],{"class":161},[92,48538,48539],{"class":94,"line":16889},[92,48540,32484],{"class":161},[92,48542,48543,48545,48547],{"class":94,"line":16894},[92,48544,32489],{"class":102},[92,48546,148],{"class":98},[92,48548,32323],{"class":151},[92,48550,48551],{"class":94,"line":16907},[92,48552,32498],{"class":161},[92,48554,48555,48557,48559],{"class":94,"line":16912},[92,48556,32503],{"class":102},[92,48558,148],{"class":98},[92,48560,3064],{"class":151},[92,48562,48563],{"class":94,"line":32614},[92,48564,32512],{"class":161},[92,48566,48567,48569,48571],{"class":94,"line":32620},[92,48568,32517],{"class":102},[92,48570,148],{"class":98},[92,48572,32323],{"class":151},[92,48574,48575],{"class":94,"line":32626},[92,48576,32526],{"class":161},[92,48578,48579,48581,48583],{"class":94,"line":32632},[92,48580,32531],{"class":102},[92,48582,148],{"class":98},[92,48584,3064],{"class":151},[92,48586,48587],{"class":94,"line":32638},[92,48588,32540],{"class":161},[92,48590,48591,48593,48595],{"class":94,"line":32649},[92,48592,32545],{"class":102},[92,48594,148],{"class":98},[92,48596,3064],{"class":151},[92,48598,48599],{"class":94,"line":32655},[92,48600,32554],{"class":161},[92,48602,48603,48605,48607],{"class":94,"line":32675},[92,48604,32559],{"class":102},[92,48606,148],{"class":98},[92,48608,3064],{"class":151},[92,48610,48611],{"class":94,"line":32681},[92,48612,32568],{"class":161},[92,48614,48615,48617,48619,48621,48623],{"class":94,"line":32692},[92,48616,3382],{"class":98},[92,48618,31582],{"class":102},[92,48620,26024],{"class":98},[92,48622,31587],{"class":151},[92,48624,32581],{"class":102},[92,48626,48627],{"class":94,"line":32698},[92,48628,32586],{"class":161},[92,48630,48631,48633,48635],{"class":94,"line":32704},[92,48632,32591],{"class":102},[92,48634,148],{"class":98},[92,48636,32596],{"class":102},[92,48638,48639],{"class":94,"line":32710},[92,48640,32601],{"class":161},[92,48642,48643,48645,48647],{"class":94,"line":32716},[92,48644,32606],{"class":102},[92,48646,148],{"class":98},[92,48648,32611],{"class":102},[92,48650,48651],{"class":94,"line":32722},[92,48652,32617],{"class":161},[92,48654,48655],{"class":94,"line":32728},[92,48656,32623],{"class":102},[92,48658,48659],{"class":94,"line":32734},[92,48660,32629],{"class":161},[92,48662,48663],{"class":94,"line":32754},[92,48664,32635],{"class":161},[92,48666,48667,48669,48671],{"class":94,"line":32760},[92,48668,32641],{"class":102},[92,48670,148],{"class":98},[92,48672,32646],{"class":102},[92,48674,48675],{"class":94,"line":32776},[92,48676,32652],{"class":161},[92,48678,48679,48681,48683,48685,48687,48689,48691],{"class":94,"line":32782},[92,48680,32658],{"class":102},[92,48682,148],{"class":98},[92,48684,32663],{"class":102},[92,48686,32666],{"class":5196},[92,48688,148],{"class":98},[92,48690,320],{"class":151},[92,48692,109],{"class":102},[92,48694,48695],{"class":94,"line":32796},[92,48696,32678],{"class":161},[92,48698,48699,48701,48703],{"class":94,"line":32802},[92,48700,32684],{"class":102},[92,48702,148],{"class":98},[92,48704,32689],{"class":102},[92,48706,48707],{"class":94,"line":32817},[92,48708,32695],{"class":161},[92,48710,48711],{"class":94,"line":32823},[92,48712,32701],{"class":102},[92,48714,48715],{"class":94,"line":32832},[92,48716,32707],{"class":161},[92,48718,48719],{"class":94,"line":32838},[92,48720,32713],{"class":102},[92,48722,48723],{"class":94,"line":32847},[92,48724,32719],{"class":161},[92,48726,48727],{"class":94,"line":32853},[92,48728,32725],{"class":102},[92,48730,48731],{"class":94,"line":32859},[92,48732,32731],{"class":161},[92,48734,48735,48737,48739,48741,48743,48745,48747],{"class":94,"line":32868},[92,48736,32737],{"class":102},[92,48738,9457],{"class":98},[92,48740,32742],{"class":102},[92,48742,558],{"class":98},[92,48744,32747],{"class":102},[92,48746,294],{"class":151},[92,48748,109],{"class":102},[92,48750,48751],{"class":94,"line":32874},[92,48752,32757],{"class":161},[92,48754,48755,48757,48759,48761,48763],{"class":94,"line":32885},[92,48756,32763],{"class":102},[92,48758,9457],{"class":98},[92,48760,32768],{"class":102},[92,48762,2928],{"class":98},[92,48764,32773],{"class":102},[92,48766,48767],{"class":94,"line":32891},[92,48768,32779],{"class":161},[92,48770,48771,48773,48775,48777,48779],{"class":94,"line":32910},[92,48772,32785],{"class":102},[92,48774,9457],{"class":98},[92,48776,32747],{"class":102},[92,48778,294],{"class":151},[92,48780,109],{"class":102},[92,48782,48783],{"class":94,"line":32916},[92,48784,32799],{"class":161},[92,48786,48787,48789,48791,48793,48795],{"class":94,"line":32927},[92,48788,3382],{"class":98},[92,48790,32807],{"class":102},[92,48792,26024],{"class":98},[92,48794,31587],{"class":151},[92,48796,32814],{"class":102},[92,48798,48799],{"class":94,"line":32933},[92,48800,32820],{"class":161},[92,48802,48803,48805,48807],{"class":94,"line":32953},[92,48804,32591],{"class":102},[92,48806,148],{"class":98},[92,48808,32596],{"class":102},[92,48810,48811],{"class":94,"line":32969},[92,48812,32835],{"class":161},[92,48814,48815,48817,48819],{"class":94,"line":32975},[92,48816,32606],{"class":102},[92,48818,148],{"class":98},[92,48820,32611],{"class":102},[92,48822,48823],{"class":94,"line":32989},[92,48824,32850],{"class":161},[92,48826,48827],{"class":94,"line":32995},[92,48828,32856],{"class":102},[92,48830,48831],{"class":94,"line":33001},[92,48832,36337],{"class":161},[92,48834,48835,48837],{"class":94,"line":33012},[92,48836,32862],{"class":98},[92,48838,32865],{"class":102},[92,48840,48841],{"class":94,"line":33018},[92,48842,32871],{"class":161},[92,48844,48845,48847,48849],{"class":94,"line":33024},[92,48846,36352],{"class":102},[92,48848,148],{"class":98},[92,48850,32646],{"class":102},[92,48852,48853],{"class":94,"line":33034},[92,48854,32888],{"class":161},[92,48856,48857,48859,48861,48863,48865,48867,48869],{"class":94,"line":33040},[92,48858,36365],{"class":102},[92,48860,148],{"class":98},[92,48862,32663],{"class":102},[92,48864,32666],{"class":5196},[92,48866,148],{"class":98},[92,48868,320],{"class":151},[92,48870,109],{"class":102},[92,48872,48873],{"class":94,"line":33051},[92,48874,32913],{"class":161},[92,48876,48877,48879,48881],{"class":94,"line":33057},[92,48878,36386],{"class":102},[92,48880,148],{"class":98},[92,48882,32689],{"class":102},[92,48884,48885],{"class":94,"line":33067},[92,48886,32930],{"class":161},[92,48888,48889,48891,48893,48895,48897,48899,48901],{"class":94,"line":33072},[92,48890,36399],{"class":102},[92,48892,9457],{"class":98},[92,48894,36404],{"class":102},[92,48896,558],{"class":98},[92,48898,32747],{"class":102},[92,48900,294],{"class":151},[92,48902,109],{"class":102},[92,48904,48905,48907,48909,48911,48913],{"class":94,"line":33078},[92,48906,36417],{"class":102},[92,48908,9457],{"class":98},[92,48910,32768],{"class":102},[92,48912,2928],{"class":98},[92,48914,32773],{"class":102},[92,48916,48917],{"class":94,"line":33127},[92,48918,36430],{"class":161},[92,48920,48921,48923,48925,48927,48929],{"class":94,"line":33174},[92,48922,36435],{"class":102},[92,48924,9457],{"class":98},[92,48926,32747],{"class":102},[92,48928,294],{"class":151},[92,48930,109],{"class":102},[92,48932,48933],{"class":94,"line":33179},[92,48934,32992],{"class":161},[92,48936,48937],{"class":94,"line":33185},[92,48938,32998],{"class":161},[92,48940,48941,48943,48945],{"class":94,"line":33204},[92,48942,33004],{"class":102},[92,48944,687],{"class":98},[92,48946,33009],{"class":102},[92,48948,48949],{"class":94,"line":33210},[92,48950,33015],{"class":161},[92,48952,48953],{"class":94,"line":33230},[92,48954,33021],{"class":161},[92,48956,48957,48959,48961],{"class":94,"line":33236},[92,48958,33027],{"class":102},[92,48960,687],{"class":98},[92,48962,33009],{"class":102},[92,48964,48965],{"class":94,"line":33242},[92,48966,33037],{"class":161},[92,48968,48969,48971,48973],{"class":94,"line":33252},[92,48970,33043],{"class":102},[92,48972,687],{"class":98},[92,48974,33048],{"class":102},[92,48976,48977],{"class":94,"line":33257},[92,48978,33054],{"class":161},[92,48980,48981,48983,48985],{"class":94,"line":33263},[92,48982,33060],{"class":102},[92,48984,687],{"class":98},[92,48986,33048],{"class":102},[92,48988,48989],{"class":94,"line":33279},[92,48990,2379],{"emptyLinePlaceholder":17},[92,48992,48993],{"class":94,"line":33324},[92,48994,33075],{"class":161},[92,48996,48997,48999,49001,49003,49005,49007,49009,49011,49013,49015,49017,49019,49021,49023,49025,49027,49029,49031,49033,49035],{"class":94,"line":33330},[92,48998,32432],{"class":151},[92,49000,103],{"class":102},[92,49002,3571],{"class":207},[92,49004,32440],{"class":151},[92,49006,33089],{"class":207},[92,49008,999],{"class":151},[92,49010,33094],{"class":98},[92,49012,1049],{"class":151},[92,49014,33099],{"class":207},[92,49016,999],{"class":151},[92,49018,33094],{"class":98},[92,49020,1049],{"class":151},[92,49022,3571],{"class":207},[92,49024,33110],{"class":102},[92,49026,635],{"class":98},[92,49028,320],{"class":151},[92,49030,33117],{"class":102},[92,49032,635],{"class":98},[92,49034,320],{"class":151},[92,49036,33124],{"class":102},[92,49038,49039,49041,49043,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067,49069,49071,49073,49075,49077],{"class":94,"line":33336},[92,49040,32432],{"class":151},[92,49042,103],{"class":102},[92,49044,3571],{"class":207},[92,49046,32440],{"class":151},[92,49048,33138],{"class":207},[92,49050,999],{"class":151},[92,49052,33094],{"class":98},[92,49054,1049],{"class":151},[92,49056,33147],{"class":207},[92,49058,999],{"class":151},[92,49060,33094],{"class":98},[92,49062,1049],{"class":151},[92,49064,3571],{"class":207},[92,49066,33158],{"class":102},[92,49068,635],{"class":98},[92,49070,320],{"class":151},[92,49072,33165],{"class":102},[92,49074,635],{"class":98},[92,49076,320],{"class":151},[92,49078,33124],{"class":102},[92,49080,49081],{"class":94,"line":33342},[92,49082,2379],{"emptyLinePlaceholder":17},[92,49084,49085],{"class":94,"line":33353},[92,49086,33182],{"class":161},[92,49088,49089,49091,49093,49095,49097,49099,49101],{"class":94,"line":33359},[92,49090,2476],{"class":98},[92,49092,33190],{"class":102},[92,49094,635],{"class":98},[92,49096,320],{"class":151},[92,49098,1043],{"class":102},[92,49100,1063],{"class":98},[92,49102,33201],{"class":102},[92,49104,49105],{"class":94,"line":33365},[92,49106,33207],{"class":161},[92,49108,49109,49111,49113,49115,49117,49119,49121],{"class":94,"line":33371},[92,49110,33213],{"class":102},[92,49112,142],{"class":151},[92,49114,148],{"class":98},[92,49116,33220],{"class":102},[92,49118,635],{"class":98},[92,49120,320],{"class":151},[92,49122,33227],{"class":102},[92,49124,49125],{"class":94,"line":33389},[92,49126,33233],{"class":161},[92,49128,49129],{"class":94,"line":33403},[92,49130,33239],{"class":161},[92,49132,49133,49135,49137],{"class":94,"line":33412},[92,49134,33245],{"class":102},[92,49136,148],{"class":98},[92,49138,32295],{"class":102},[92,49140,49141],{"class":94,"line":33421},[92,49142,2379],{"emptyLinePlaceholder":17},[92,49144,49145],{"class":94,"line":33430},[92,49146,33260],{"class":161},[92,49148,49149,49151,49153,49155,49157],{"class":94,"line":33439},[92,49150,33266],{"class":102},[92,49152,148],{"class":98},[92,49154,33271],{"class":102},[92,49156,635],{"class":98},[92,49158,33276],{"class":102},[92,49160,49161,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195],{"class":94,"line":33445},[92,49162,32432],{"class":151},[92,49164,103],{"class":102},[92,49166,33286],{"class":207},[92,49168,999],{"class":151},[92,49170,33291],{"class":98},[92,49172,1049],{"class":151},[92,49174,647],{"class":207},[92,49176,999],{"class":151},[92,49178,33291],{"class":98},[92,49180,1049],{"class":151},[92,49182,33304],{"class":207},[92,49184,33307],{"class":102},[92,49186,33310],{"class":98},[92,49188,1010],{"class":151},[92,49190,33315],{"class":102},[92,49192,431],{"class":98},[92,49194,1010],{"class":151},[92,49196,30478],{"class":102},[92,49198,49199],{"class":94,"line":33451},[92,49200,36714],{"class":161},[92,49202,49203],{"class":94,"line":33459},[92,49204,36719],{"class":161},[92,49206,49207,49209,49211],{"class":94,"line":33464},[92,49208,36724],{"class":102},[92,49210,33348],{"class":207},[92,49212,109],{"class":102},[92,49214,49215],{"class":94,"line":33470},[92,49216,33368],{"class":161},[92,49218,49219,49221,49223,49225,49227,49229],{"class":94,"line":33481},[92,49220,33374],{"class":102},[92,49222,148],{"class":98},[92,49224,33379],{"class":102},[92,49226,33382],{"class":5196},[92,49228,148],{"class":98},[92,49230,1525],{"class":102},[92,49232,49233,49235,49237,49239],{"class":94,"line":33487},[92,49234,33392],{"class":207},[92,49236,962],{"class":102},[92,49238,33397],{"class":151},[92,49240,33400],{"class":102},[92,49242,49243,49245],{"class":94,"line":33507},[92,49244,33406],{"class":207},[92,49246,33409],{"class":102},[92,49248,49249,49251],{"class":94,"line":33513},[92,49250,33415],{"class":207},[92,49252,33418],{"class":102},[92,49254,49255,49257],{"class":94,"line":33519},[92,49256,33424],{"class":207},[92,49258,33427],{"class":102},[92,49260,49261,49263],{"class":94,"line":33525},[92,49262,33433],{"class":207},[92,49264,33436],{"class":102},[92,49266,49267],{"class":94,"line":33542},[92,49268,33442],{"class":102},[92,49270,49271],{"class":94,"line":33548},[92,49272,33448],{"class":161},[92,49274,49275,49277],{"class":94,"line":33554},[92,49276,4069],{"class":98},[92,49278,33456],{"class":102},[92,49280,49281],{"class":94,"line":33560},[92,49282,2379],{"emptyLinePlaceholder":17},[92,49284,49285],{"class":94,"line":33566},[92,49286,33467],{"class":161},[92,49288,49289,49291,49293],{"class":94,"line":33572},[92,49290,31928],{"class":98},[92,49292,33475],{"class":1942},[92,49294,33478],{"class":102},[92,49296,49297],{"class":94,"line":33599},[92,49298,33484],{"class":161},[92,49300,49301,49303,49305,49307,49309,49311,49313,49315],{"class":94,"line":33623},[92,49302,33490],{"class":102},[92,49304,31674],{"class":5196},[92,49306,148],{"class":98},[92,49308,103],{"class":102},[92,49310,601],{"class":151},[92,49312,481],{"class":102},[92,49314,396],{"class":151},[92,49316,30478],{"class":102},[92,49318,49319],{"class":94,"line":33629},[92,49320,33510],{"class":161},[92,49322,49323],{"class":94,"line":33635},[92,49324,33516],{"class":161},[92,49326,49327],{"class":94,"line":33641},[92,49328,33522],{"class":161},[92,49330,49331,49333,49335,49337,49339,49341,49343],{"class":94,"line":33652},[92,49332,31708],{"class":102},[92,49334,320],{"class":151},[92,49336,481],{"class":102},[92,49338,180],{"class":151},[92,49340,481],{"class":102},[92,49342,320],{"class":151},[92,49344,109],{"class":102},[92,49346,49347],{"class":94,"line":33663},[92,49348,33545],{"class":161},[92,49350,49351],{"class":94,"line":33669},[92,49352,33551],{"class":161},[92,49354,49355],{"class":94,"line":33686},[92,49356,33557],{"class":161},[92,49358,49359],{"class":94,"line":33709},[92,49360,33563],{"class":161},[92,49362,49363],{"class":94,"line":33732},[92,49364,33569],{"class":161},[92,49366,49367,49369,49371,49373,49375,49377,49379,49381,49383],{"class":94,"line":33738},[92,49368,33575],{"class":102},[92,49370,33578],{"class":207},[92,49372,33581],{"class":102},[92,49374,33584],{"class":207},[92,49376,481],{"class":102},[92,49378,33589],{"class":5196},[92,49380,148],{"class":98},[92,49382,33594],{"class":207},[92,49384,109],{"class":102},[92,49386,49387,49389,49391,49393,49395,49397,49399,49401,49403],{"class":94,"line":33743},[92,49388,33575],{"class":102},[92,49390,33578],{"class":207},[92,49392,33606],{"class":102},[92,49394,33609],{"class":207},[92,49396,481],{"class":102},[92,49398,33589],{"class":5196},[92,49400,148],{"class":98},[92,49402,33618],{"class":207},[92,49404,109],{"class":102},[92,49406,49407],{"class":94,"line":33752},[92,49408,33626],{"class":161},[92,49410,49411],{"class":94,"line":33762},[92,49412,33632],{"class":102},[92,49414,49415],{"class":94,"line":33768},[92,49416,33638],{"class":161},[92,49418,49419,49421,49423],{"class":94,"line":33773},[92,49420,33644],{"class":102},[92,49422,33647],{"class":207},[92,49424,109],{"class":102},[92,49426,49427,49429,49431],{"class":94,"line":33779},[92,49428,33655],{"class":102},[92,49430,33658],{"class":207},[92,49432,109],{"class":102},[92,49434,49435],{"class":94,"line":33792},[92,49436,33666],{"class":161},[92,49438,49439,49441,49443,49445,49447,49449,49451],{"class":94,"line":33798},[92,49440,31708],{"class":102},[92,49442,320],{"class":151},[92,49444,481],{"class":102},[92,49446,180],{"class":151},[92,49448,481],{"class":102},[92,49450,180],{"class":151},[92,49452,109],{"class":102},[92,49454,49455,49457,49459,49461,49463,49465,49467,49469,49471],{"class":94,"line":33809},[92,49456,33575],{"class":102},[92,49458,33578],{"class":207},[92,49460,33693],{"class":102},[92,49462,33584],{"class":207},[92,49464,481],{"class":102},[92,49466,33589],{"class":5196},[92,49468,148],{"class":98},[92,49470,33704],{"class":207},[92,49472,109],{"class":102},[92,49474,49475,49477,49479,49481,49483,49485,49487,49489,49491],{"class":94,"line":33820},[92,49476,33575],{"class":102},[92,49478,33578],{"class":207},[92,49480,33716],{"class":102},[92,49482,33609],{"class":207},[92,49484,481],{"class":102},[92,49486,33589],{"class":5196},[92,49488,148],{"class":98},[92,49490,33727],{"class":207},[92,49492,109],{"class":102},[92,49494,49495],{"class":94,"line":33839},[92,49496,33735],{"class":161},[92,49498,49500],{"class":94,"line":49499},219,[92,49501,33632],{"class":102},[92,49503,49505,49507,49509],{"class":94,"line":49504},220,[92,49506,33644],{"class":102},[92,49508,33578],{"class":207},[92,49510,109],{"class":102},[92,49512,49514,49516,49518],{"class":94,"line":49513},221,[92,49515,33655],{"class":102},[92,49517,33757],{"class":207},[92,49519,109],{"class":102},[92,49521,49523],{"class":94,"line":49522},222,[92,49524,33765],{"class":102},[92,49526,49528],{"class":94,"line":49527},223,[92,49529,2379],{"emptyLinePlaceholder":17},[92,49531,49533],{"class":94,"line":49532},224,[92,49534,33776],{"class":161},[92,49536,49538,49540,49542,49544,49546],{"class":94,"line":49537},225,[92,49539,1510],{"class":98},[92,49541,31201],{"class":151},[92,49543,2928],{"class":98},[92,49545,31206],{"class":207},[92,49547,3718],{"class":102},[92,49549,49551],{"class":94,"line":49550},226,[92,49552,33795],{"class":161},[92,49554,49556,49558,49560],{"class":94,"line":49555},227,[92,49557,44527],{"class":102},[92,49559,148],{"class":98},[92,49561,44532],{"class":102},[92,49563,49565,49567,49569],{"class":94,"line":49564},228,[92,49566,33812],{"class":102},[92,49568,148],{"class":98},[92,49570,33817],{"class":102},[92,49572,49574,49576,49578,49580,49582,49584,49586],{"class":94,"line":49573},229,[92,49575,33374],{"class":102},[92,49577,148],{"class":98},[92,49579,44549],{"class":102},[92,49581,33830],{"class":5196},[92,49583,148],{"class":98},[92,49585,1010],{"class":151},[92,49587,109],{"class":102},[92,49589,49591],{"class":94,"line":49590},230,[92,49592,33842],{"class":102},[21978,49594,49596],{"id":49595},"_242测试代码","2.4.2.测试代码",[38,49598,49599],{},"使用测试集进行测试与推理",[83,49601,49603],{"className":30359,"code":49602,"language":30361,"meta":10,"style":10},"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",[89,49604,49605,49611,49621,49631,49642,49652,49656,49660,49668,49673,49677,49694,49698,49702,49706,49710,49714,49746,49750,49758,49762,49774,49778,49782,49786,49790,49794,49798,49802,49806,49824,49838,49842,49852,49862,49872,49878,49882,49886,49894,49898,49914,49922,49926,49930,49938,49946,49950,49954,49958,49962,49968,49972,49982,49990,49998,50002,50006,50010,50018,50022,50038,50042,50046,50050,50062,50066,50078,50082,50086,50098,50102,50112,50116,50120,50132,50136,50144,50148,50152,50160,50164,50172,50176,50180,50184,50188,50192,50208,50216,50220,50224,50242,50248,50252,50262,50270,50278,50282,50286,50290,50294,50302,50306,50322,50326,50334,50342],{"__ignoreMap":10},[92,49606,49607,49609],{"class":94,"line":95},[92,49608,30373],{"class":98},[92,49610,30376],{"class":102},[92,49612,49613,49615,49617,49619],{"class":94,"line":11},[92,49614,30373],{"class":98},[92,49616,31396],{"class":102},[92,49618,31364],{"class":98},[92,49620,31401],{"class":102},[92,49622,49623,49625,49627,49629],{"class":94,"line":1158},[92,49624,30718],{"class":98},[92,49626,31379],{"class":102},[92,49628,30373],{"class":98},[92,49630,31384],{"class":102},[92,49632,49633,49635,49637,49639],{"class":94,"line":1173},[92,49634,30718],{"class":98},[92,49636,31349],{"class":102},[92,49638,30373],{"class":98},[92,49640,49641],{"class":102}," ImageFolder\n",[92,49643,49644,49646,49648,49650],{"class":94,"line":1179},[92,49645,30718],{"class":98},[92,49647,31895],{"class":102},[92,49649,30373],{"class":98},[92,49651,44621],{"class":102},[92,49653,49654],{"class":94,"line":1193},[92,49655,2379],{"emptyLinePlaceholder":17},[92,49657,49658],{"class":94,"line":1199},[92,49659,33932],{"class":161},[92,49661,49662,49664,49666],{"class":94,"line":1290},[92,49663,31928],{"class":98},[92,49665,33939],{"class":1942},[92,49667,31934],{"class":102},[92,49669,49670],{"class":94,"line":1296},[92,49671,49672],{"class":161},"   # 导入自己的数据集，并进行数据处理\n",[92,49674,49675],{"class":94,"line":1308},[92,49676,47942],{"class":161},[92,49678,49679,49681,49683,49685,49687,49689,49692],{"class":94,"line":1591},[92,49680,47947],{"class":151},[92,49682,148],{"class":98},[92,49684,773],{"class":98},[92,49686,354],{"class":207},[92,49688,661],{"class":151},[92,49690,49691],{"class":47958},"\u002Fdata\u002Ftest",[92,49693,25114],{"class":207},[92,49695,49696],{"class":94,"line":1596},[92,49697,2379],{"emptyLinePlaceholder":17},[92,49699,49700],{"class":94,"line":1602},[92,49701,47970],{"class":161},[92,49703,49704],{"class":94,"line":1607},[92,49705,47975],{"class":161},[92,49707,49708],{"class":94,"line":1621},[92,49709,47980],{"class":161},[92,49711,49712],{"class":94,"line":1626},[92,49713,47985],{"class":161},[92,49715,49716,49718,49720,49722,49724,49726,49728,49730,49732,49734,49736,49738,49740,49742,49744],{"class":94,"line":1632},[92,49717,47990],{"class":102},[92,49719,148],{"class":98},[92,49721,47995],{"class":102},[92,49723,47998],{"class":151},[92,49725,481],{"class":102},[92,49727,48003],{"class":151},[92,49729,481],{"class":102},[92,49731,48008],{"class":151},[92,49733,48011],{"class":102},[92,49735,48014],{"class":151},[92,49737,481],{"class":102},[92,49739,48019],{"class":151},[92,49741,481],{"class":102},[92,49743,48024],{"class":151},[92,49745,4636],{"class":102},[92,49747,49748],{"class":94,"line":1653},[92,49749,48031],{"class":161},[92,49751,49752,49754,49756],{"class":94,"line":1658},[92,49753,48036],{"class":102},[92,49755,148],{"class":98},[92,49757,48041],{"class":102},[92,49759,49760],{"class":94,"line":1672},[92,49761,48046],{"class":161},[92,49763,49764,49766,49768,49770,49772],{"class":94,"line":1677},[92,49765,48051],{"class":102},[92,49767,31482],{"class":151},[92,49769,481],{"class":102},[92,49771,31482],{"class":151},[92,49773,42603],{"class":102},[92,49775,49776],{"class":94,"line":1706},[92,49777,48064],{"class":161},[92,49779,49780],{"class":94,"line":1711},[92,49781,48069],{"class":102},[92,49783,49784],{"class":94,"line":1728},[92,49785,48074],{"class":102},[92,49787,49788],{"class":94,"line":1733},[92,49789,48079],{"class":161},[92,49791,49792],{"class":94,"line":1738},[92,49793,48084],{"class":161},[92,49795,49796],{"class":94,"line":1743},[92,49797,2379],{"emptyLinePlaceholder":17},[92,49799,49800],{"class":94,"line":1757},[92,49801,48093],{"class":161},[92,49803,49804],{"class":94,"line":1762},[92,49805,48098],{"class":161},[92,49807,49808,49810,49812,49814,49816,49818,49820,49822],{"class":94,"line":2556},[92,49809,33946],{"class":102},[92,49811,148],{"class":98},[92,49813,48107],{"class":102},[92,49815,48110],{"class":151},[92,49817,481],{"class":102},[92,49819,48115],{"class":5196},[92,49821,148],{"class":98},[92,49823,48120],{"class":102},[92,49825,49826,49828,49830,49832,49834,49836],{"class":94,"line":2570},[92,49827,34003],{"class":102},[92,49829,148],{"class":98},[92,49831,31515],{"class":102},[92,49833,31518],{"class":5196},[92,49835,148],{"class":98},[92,49837,34014],{"class":102},[92,49839,49840],{"class":94,"line":2578},[92,49841,34019],{"class":161},[92,49843,49844,49846,49848,49850],{"class":94,"line":2583},[92,49845,34024],{"class":5196},[92,49847,148],{"class":98},[92,49849,320],{"class":151},[92,49851,31447],{"class":102},[92,49853,49854,49856,49858,49860],{"class":94,"line":2589},[92,49855,34035],{"class":5196},[92,49857,148],{"class":98},[92,49859,31457],{"class":151},[92,49861,31447],{"class":102},[92,49863,49864,49866,49868,49870],{"class":94,"line":2595},[92,49865,34046],{"class":5196},[92,49867,148],{"class":98},[92,49869,294],{"class":151},[92,49871,109],{"class":102},[92,49873,49874,49876],{"class":94,"line":2600},[92,49875,4069],{"class":98},[92,49877,34059],{"class":102},[92,49879,49880],{"class":94,"line":7928},[92,49881,2379],{"emptyLinePlaceholder":17},[92,49883,49884],{"class":94,"line":7952},[92,49885,34068],{"class":161},[92,49887,49888,49890,49892],{"class":94,"line":7957},[92,49889,31928],{"class":98},[92,49891,34075],{"class":1942},[92,49893,34078],{"class":102},[92,49895,49896],{"class":94,"line":7963},[92,49897,34083],{"class":161},[92,49899,49900,49902,49904,49906,49908,49910,49912],{"class":94,"line":7990},[92,49901,31218],{"class":102},[92,49903,148],{"class":98},[92,49905,31225],{"class":207},[92,49907,1683],{"class":98},[92,49909,31230],{"class":102},[92,49911,1680],{"class":98},[92,49913,34100],{"class":207},[92,49915,49916,49918,49920],{"class":94,"line":7995},[92,49917,31270],{"class":102},[92,49919,148],{"class":98},[92,49921,32270],{"class":102},[92,49923,49924],{"class":94,"line":8001},[92,49925,2379],{"emptyLinePlaceholder":17},[92,49927,49928],{"class":94,"line":8013},[92,49929,34117],{"class":161},[92,49931,49932,49934,49936],{"class":94,"line":8025},[92,49933,34122],{"class":102},[92,49935,148],{"class":98},[92,49937,32323],{"class":151},[92,49939,49940,49942,49944],{"class":94,"line":8037},[92,49941,34131],{"class":102},[92,49943,148],{"class":98},[92,49945,3064],{"class":151},[92,49947,49948],{"class":94,"line":9696},[92,49949,2379],{"emptyLinePlaceholder":17},[92,49951,49952],{"class":94,"line":9721},[92,49953,34144],{"class":161},[92,49955,49956],{"class":94,"line":9744},[92,49957,34149],{"class":161},[92,49959,49960],{"class":94,"line":9768},[92,49961,34154],{"class":161},[92,49963,49964,49966],{"class":94,"line":9773},[92,49965,34159],{"class":98},[92,49967,32865],{"class":102},[92,49969,49970],{"class":94,"line":9778},[92,49971,34166],{"class":161},[92,49973,49974,49976,49978,49980],{"class":94,"line":9783},[92,49975,3382],{"class":98},[92,49977,34173],{"class":102},[92,49979,26024],{"class":98},[92,49981,34178],{"class":102},[92,49983,49984,49986,49988],{"class":94,"line":9792},[92,49985,34183],{"class":102},[92,49987,148],{"class":98},[92,49989,34188],{"class":102},[92,49991,49992,49994,49996],{"class":94,"line":9797},[92,49993,34193],{"class":102},[92,49995,148],{"class":98},[92,49997,34198],{"class":102},[92,49999,50000],{"class":94,"line":9803},[92,50001,34203],{"class":161},[92,50003,50004],{"class":94,"line":9824},[92,50005,32856],{"class":102},[92,50007,50008],{"class":94,"line":9830},[92,50009,34212],{"class":161},[92,50011,50012,50014,50016],{"class":94,"line":9844},[92,50013,32641],{"class":102},[92,50015,148],{"class":98},[92,50017,34221],{"class":102},[92,50019,50020],{"class":94,"line":9850},[92,50021,34226],{"class":161},[92,50023,50024,50026,50028,50030,50032,50034,50036],{"class":94,"line":9877},[92,50025,32658],{"class":102},[92,50027,148],{"class":98},[92,50029,32663],{"class":102},[92,50031,32666],{"class":5196},[92,50033,148],{"class":98},[92,50035,320],{"class":151},[92,50037,109],{"class":102},[92,50039,50040],{"class":94,"line":9886},[92,50041,34247],{"class":161},[92,50043,50044],{"class":94,"line":9892},[92,50045,34252],{"class":161},[92,50047,50048],{"class":94,"line":9900},[92,50049,34257],{"class":161},[92,50051,50052,50054,50056,50058,50060],{"class":94,"line":9905},[92,50053,34262],{"class":102},[92,50055,9457],{"class":98},[92,50057,32768],{"class":102},[92,50059,2928],{"class":98},[92,50061,34271],{"class":102},[92,50063,50064],{"class":94,"line":16584},[92,50065,34276],{"class":161},[92,50067,50068,50070,50072,50074,50076],{"class":94,"line":16590},[92,50069,34281],{"class":102},[92,50071,9457],{"class":98},[92,50073,34286],{"class":102},[92,50075,294],{"class":151},[92,50077,109],{"class":102},[92,50079,50080],{"class":94,"line":16613},[92,50081,2379],{"emptyLinePlaceholder":17},[92,50083,50084],{"class":94,"line":16619},[92,50085,34299],{"class":161},[92,50087,50088,50090,50092,50094,50096],{"class":94,"line":16642},[92,50089,34304],{"class":102},[92,50091,148],{"class":98},[92,50093,34309],{"class":102},[92,50095,687],{"class":98},[92,50097,34314],{"class":102},[92,50099,50100],{"class":94,"line":16656},[92,50101,34319],{"class":161},[92,50103,50104,50106,50108,50110],{"class":94,"line":16676},[92,50105,32432],{"class":151},[92,50107,103],{"class":102},[92,50109,34328],{"class":207},[92,50111,34331],{"class":102},[92,50113,50114],{"class":94,"line":16682},[92,50115,2379],{"emptyLinePlaceholder":17},[92,50117,50118],{"class":94,"line":16693},[92,50119,34340],{"class":161},[92,50121,50122,50124,50126,50128,50130],{"class":94,"line":16716},[92,50123,1510],{"class":98},[92,50125,31201],{"class":151},[92,50127,2928],{"class":98},[92,50129,31206],{"class":207},[92,50131,3718],{"class":102},[92,50133,50134],{"class":94,"line":16738},[92,50135,34357],{"class":161},[92,50137,50138,50140,50142],{"class":94,"line":16743},[92,50139,31270],{"class":102},[92,50141,148],{"class":98},[92,50143,44532],{"class":102},[92,50145,50146],{"class":94,"line":16749},[92,50147,34370],{"class":161},[92,50149,50150],{"class":94,"line":16763},[92,50151,34375],{"class":161},[92,50153,50154,50156,50158],{"class":94,"line":16776},[92,50155,34380],{"class":102},[92,50157,34383],{"class":207},[92,50159,30478],{"class":102},[92,50161,50162],{"class":94,"line":16781},[92,50163,34390],{"class":161},[92,50165,50166,50168,50170],{"class":94,"line":16795},[92,50167,34003],{"class":102},[92,50169,148],{"class":98},[92,50171,34399],{"class":102},[92,50173,50174],{"class":94,"line":16800},[92,50175,34404],{"class":161},[92,50177,50178],{"class":94,"line":16806},[92,50179,34409],{"class":102},[92,50181,50182],{"class":94,"line":16811},[92,50183,2379],{"emptyLinePlaceholder":17},[92,50185,50186],{"class":94,"line":16825},[92,50187,34418],{"class":161},[92,50189,50190],{"class":94,"line":16830},[92,50191,34423],{"class":161},[92,50193,50194,50196,50198,50200,50202,50204,50206],{"class":94,"line":16835},[92,50195,31218],{"class":102},[92,50197,148],{"class":98},[92,50199,31225],{"class":207},[92,50201,1683],{"class":98},[92,50203,31230],{"class":102},[92,50205,1680],{"class":98},[92,50207,34100],{"class":207},[92,50209,50210,50212,50214],{"class":94,"line":16849},[92,50211,31270],{"class":102},[92,50213,148],{"class":98},[92,50215,32270],{"class":102},[92,50217,50218],{"class":94,"line":16861},[92,50219,34452],{"class":161},[92,50221,50222],{"class":94,"line":16866},[92,50223,34457],{"class":161},[92,50225,50226,50228,50230,50232,50235,50237,50240],{"class":94,"line":16879},[92,50227,34462],{"class":102},[92,50229,148],{"class":98},[92,50231,993],{"class":102},[92,50233,50234],{"class":207},"'猫'",[92,50236,481],{"class":102},[92,50238,50239],{"class":207},"'狗'",[92,50241,33227],{"class":102},[92,50243,50244,50246],{"class":94,"line":16884},[92,50245,34159],{"class":98},[92,50247,32865],{"class":102},[92,50249,50250],{"class":94,"line":16889},[92,50251,34527],{"class":161},[92,50253,50254,50256,50258,50260],{"class":94,"line":16894},[92,50255,3382],{"class":98},[92,50257,34534],{"class":102},[92,50259,26024],{"class":98},[92,50261,34178],{"class":102},[92,50263,50264,50266,50268],{"class":94,"line":16907},[92,50265,32591],{"class":102},[92,50267,148],{"class":98},[92,50269,32596],{"class":102},[92,50271,50272,50274,50276],{"class":94,"line":16912},[92,50273,32606],{"class":102},[92,50275,148],{"class":98},[92,50277,32611],{"class":102},[92,50279,50280],{"class":94,"line":32614},[92,50281,2379],{"emptyLinePlaceholder":17},[92,50283,50284],{"class":94,"line":32620},[92,50285,34563],{"class":161},[92,50287,50288],{"class":94,"line":32626},[92,50289,32856],{"class":102},[92,50291,50292],{"class":94,"line":32632},[92,50293,34572],{"class":161},[92,50295,50296,50298,50300],{"class":94,"line":32638},[92,50297,32641],{"class":102},[92,50299,148],{"class":98},[92,50301,32646],{"class":102},[92,50303,50304],{"class":94,"line":32649},[92,50305,34585],{"class":161},[92,50307,50308,50310,50312,50314,50316,50318,50320],{"class":94,"line":32655},[92,50309,32658],{"class":102},[92,50311,148],{"class":98},[92,50313,32663],{"class":102},[92,50315,32666],{"class":5196},[92,50317,148],{"class":98},[92,50319,320],{"class":151},[92,50321,109],{"class":102},[92,50323,50324],{"class":94,"line":32675},[92,50325,34606],{"class":161},[92,50327,50328,50330,50332],{"class":94,"line":32681},[92,50329,34611],{"class":102},[92,50331,148],{"class":98},[92,50333,34616],{"class":102},[92,50335,50336,50338,50340],{"class":94,"line":32692},[92,50337,34621],{"class":102},[92,50339,148],{"class":98},[92,50341,34626],{"class":102},[92,50343,50344,50346,50348,50350,50352,50354,50356,50358],{"class":94,"line":32698},[92,50345,34631],{"class":151},[92,50347,103],{"class":102},[92,50349,34636],{"class":207},[92,50351,34639],{"class":102},[92,50353,34642],{"class":207},[92,50355,481],{"class":102},[92,50357,34647],{"class":207},[92,50359,34650],{"class":102},[5106,50361,50362],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":10,"searchDepth":11,"depth":11,"links":50364},[50365,50366,50367,50368],{"id":30572,"depth":1158,"text":30573},{"id":37820,"depth":1158,"text":37821},{"id":41253,"depth":1158,"text":41254},{"id":45262,"depth":1158,"text":45263},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30564,"description":13},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50375,"title":50376,"body":50377,"description":13,"extension":14,"meta":50384,"navigation":17,"path":50385,"seo":50386,"stem":50387,"__hash__":50388},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50378,"toc":50382},[50379],[29,50380,50376],{"id":50381},"_3yolo模型学习",{"title":10,"searchDepth":11,"depth":11,"links":50383},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50376,"description":13},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50390,"title":50391,"body":50392,"description":50399,"extension":14,"meta":50400,"navigation":17,"path":50401,"seo":50402,"stem":50403,"__hash__":50404},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50393,"toc":50397},[50394],[38,50395,50396],{},"yolo模型还未补充",{"title":10,"searchDepth":11,"depth":11,"links":50398},[],"深度学习学习",{"category":16},"\u002Fwiki\u002F2025-11-03-cnn",{"title":50391,"description":50399},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50406,"title":50407,"body":50408,"description":13,"extension":14,"meta":50433,"navigation":17,"path":50434,"seo":50435,"stem":50436,"__hash__":50437},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50409,"toc":50431},[50410,50413,50416,50421,50428],[29,50411,50407],{"id":50412},"_1工具",[38,50414,50415],{},"提示错误插件：有问题会提前报错",[38,50417,50418],{},[1441,50419],{"alt":10,"src":50420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[38,50422,50423],{},[341,50424,50427],{"href":50425,"rel":50426},"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",[23845],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[38,50429,50430],{},"alt键加上下箭头可以实现语句的移动",{"title":10,"searchDepth":11,"depth":11,"links":50432},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50407,"description":13},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50439,"title":50440,"body":50441,"description":13,"extension":14,"meta":53305,"navigation":17,"path":53306,"seo":53307,"stem":53308,"__hash__":53309},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50442,"toc":53256},[50443,50446,50450,50454,50459,50462,50467,50471,50478,50483,50490,50495,50502,50507,50511,50516,50519,50523,50528,50532,50537,50540,50543,50546,50549,50552,50555,50558,50561,50566,50571,50576,50580,50583,50586,50590,50595,50598,50606,50611,50628,50636,50641,50646,50651,50656,50661,50664,50669,50674,50678,50687,50692,50697,50701,50706,50709,50713,50718,50726,50731,50736,50739,50744,50749,50754,50757,50760,50763,50768,50773,50776,50781,50784,50789,50792,50795,50798,50803,50806,50809,50824,50829,50834,50839,50842,50845,50848,50862,50865,50870,50875,50878,50881,50884,50887,50890,50893,50896,50900,50904,50909,50913,50916,50921,50926,50929,50934,50937,50941,50946,50949,50952,50955,50958,50961,50964,50967,50970,50973,50977,50982,50987,50992,50995,50998,51002,51007,51010,51014,51017,51020,51025,51028,51031,51035,51039,51042,51047,51052,51055,51084,51089,51094,51099,51104,51108,51113,51117,51122,51125,51129,51133,51138,51142,51147,51152,51156,51161,51164,51166,51169,51174,51178,51183,51187,51191,51196,51201,51206,51211,51215,51220,51225,51230,51233,51236,51241,51244,51249,51254,51259,51264,51268,52075,52079,52422,52427,52430,52433,52436,52439,52442,52445,52448,52451,52453,52456,52458,52461,52465,52470,52473,52476,52479,52483,52488,52493,52513,52516,52520,52525,52530,52547,52551,52580,52584,52606,52608,52647,52655,52661,52665,52668,52671,52676,52681,52684,52687,52690,52695,52700,52703,52706,52709,52712,52715,52718,52721,52724,52727,52730,52733,52735,52738,52741,52744,52747,52750,52753,52756,52759,52763,52768,52771,52776,52779,52782,52785,52788,52791,52794,52797,52799,52802,52805,52808,52811,52814,52817,52821,52824,52833,52836,52841,52844,52849,52852,52855,52858,52861,52864,52867,52870,52874,52878,52881,52884,52889,52894,52899,52903,52908,52913,52916,52919,52922,52925,52928,52933,52936,52941,52943,52948,52951,52955,52960,52963,52966,52971,52975,52978,52983,52986,52989,53018,53023,53026,53029,53032,53035,53038,53042,53045,53131,53135,53138,53143,53148,53155,53158,53161,53164,53167,53170,53175,53180,53183,53186,53189,53192,53195,53198,53201,53204,53207,53209,53212,53216,53221,53226,53231,53234,53239,53244,53247,53250,53253],[29,50444,50440],{"id":50445},"_2基础语法",[33,50447,50449],{"id":50448},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[63,50451,50453],{"id":50452},"_211-js组成","2.1.1 js组成",[46,50455,50456],{},[49,50457,50458],{},"js是编程语言，html和css不是编程语言，是标记语言",[38,50460,50461],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[46,50463,50464],{"start":11},[49,50465,50466],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[63,50468,50470],{"id":50469},"_212-js书写位置","2.1.2 js书写位置",[46,50472,50473],{},[49,50474,50475],{},[252,50476,50477],{},"内部 JavaScript",[38,50479,50480],{},[1441,50481],{"alt":10,"src":50482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[46,50484,50485],{"start":11},[49,50486,50487],{},[252,50488,50489],{},"外部 JavaScript",[38,50491,50492],{},[1441,50493],{"alt":10,"src":50494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[46,50496,50497],{"start":1158},[49,50498,50499],{},[252,50500,50501],{},"内联 JavaScript",[38,50503,50504],{},[1441,50505],{"alt":10,"src":50506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[63,50508,50510],{"id":50509},"_213-javascript注释","2.1.3 JavaScript注释",[38,50512,50513],{},[1441,50514],{"alt":10,"src":50515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[38,50517,50518],{},"alt+shift+a一定要记住！",[63,50520,50522],{"id":50521},"_214-javascript结束符","2.1.4 JavaScript结束符",[38,50524,50525],{},[1441,50526],{"alt":10,"src":50527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[63,50529,50531],{"id":50530},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[46,50533,50534],{},[49,50535,50536],{},"输出语法：",[38,50538,50539],{},"①document.write('要出的内容')",[38,50541,50542],{},"向body内输出内容；",[38,50544,50545],{},"如果输出的内容写的是标签，也会被解析cheng",[38,50547,50548],{},"②alert('要出的内容')",[38,50550,50551],{},"页面弹出警告对话框",[38,50553,50554],{},"③console.log('控制台打印')",[38,50556,50557],{},"控制台输出语法，程序员调试使用",[38,50559,50560],{},"输入log就行，自动生成：",[38,50562,50563],{},[1441,50564],{"alt":10,"src":50565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[46,50567,50568],{"start":11},[49,50569,50570],{},"输入语法：",[38,50572,50573],{},[1441,50574],{"alt":10,"src":50575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[63,50577,50579],{"id":50578},"_2116-字面量","21.1.6 字面量",[38,50581,50582],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[38,50584,50585],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[33,50587,50589],{"id":50588},"_22-变量","2.2 变量",[46,50591,50592],{},[49,50593,50594],{},"变量声明",[38,50596,50597],{},"let 变量名",[1110,50599,50600,50603],{},[49,50601,50602],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[49,50604,50605],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[46,50607,50608],{"start":11},[49,50609,50610],{},"变量赋值",[83,50612,50616],{"className":50613,"code":50614,"language":50615,"meta":10,"style":10},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[89,50617,50618,50623],{"__ignoreMap":10},[92,50619,50620],{"class":94,"line":95},[92,50621,50622],{"class":102},"let age\n",[92,50624,50625],{"class":94,"line":11},[92,50626,50627],{"class":102},"age=18\n",[46,50629,50630,50633],{"start":1158},[49,50631,50632],{},"连这些（变量的初始化）：let age=18",[49,50634,50635],{},"更新变量",[38,50637,50638],{},[1441,50639],{"alt":10,"src":50640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[46,50642,50643],{"start":1179},[49,50644,50645],{},"声明多个变量",[38,50647,50648],{},[1441,50649],{"alt":10,"src":50650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[46,50652,50653],{"start":1193},[49,50654,50655],{},"变量命名规则与规范",[38,50657,50658],{},[1441,50659],{"alt":10,"src":50660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[38,50662,50663],{},"遵守小驼峰！",[46,50665,50666],{"start":1199},[49,50667,50668],{},"变量拓展-let和var的区别",[38,50670,50671],{},[1441,50672],{"alt":10,"src":50673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[33,50675,50677],{"id":50676},"_23-数组","2.3 数组",[83,50679,50681],{"className":50613,"code":50680,"language":50615,"meta":10,"style":10},"let arr = []\n",[89,50682,50683],{"__ignoreMap":10},[92,50684,50685],{"class":94,"line":95},[92,50686,50680],{"class":102},[38,50688,50689],{},[1441,50690],{"alt":10,"src":50691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[38,50693,50694],{},[1441,50695],{"alt":10,"src":50696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[33,50698,50700],{"id":50699},"_24-常量","2.4 常量",[38,50702,50703],{},[1441,50704],{"alt":10,"src":50705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[38,50707,50708],{},"const — 类似于 let ，但是变量的值无法被修改",[33,50710,50712],{"id":50711},"_25-数据类型","2.5 数据类型",[38,50714,50715],{},[1441,50716],{"alt":10,"src":50717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[46,50719,50720,50723],{},[49,50721,50722],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[49,50724,50725],{},"算数运算符：",[38,50727,50728],{},[1441,50729],{"alt":10,"src":50730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[46,50732,50733],{"start":1158},[49,50734,50735],{},"数字类型（Number）",[38,50737,50738],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[38,50740,50741],{},[1441,50742],{"alt":10,"src":50743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[46,50745,50746],{"start":1173},[49,50747,50748],{},"字符串类型（string）",[38,50750,50751],{},[1441,50752],{"alt":10,"src":50753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[38,50755,50756],{},"反引号也是可以使用的",[38,50758,50759],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[38,50761,50762],{},"例如：document.write(\"我今年\"+age+\"岁\")",[46,50764,50765],{"start":1179},[49,50766,50767],{},"模板字符串",[38,50769,50770],{},[1441,50771],{"alt":10,"src":50772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[38,50774,50775],{},"类似于python的字符串格式化",[46,50777,50778],{"start":1193},[49,50779,50780],{},"布尔类型",[38,50782,50783],{},"true 和 false",[46,50785,50786],{"start":1199},[49,50787,50788],{},"未定义类型（underfined）",[38,50790,50791],{},"表示没有赋值",[38,50793,50794],{},"未定义类型是比较特殊的类型，只有一个值undefined",[38,50796,50797],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[46,50799,50800],{"start":1290},[49,50801,50802],{},"null（空类型）",[38,50804,50805],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[38,50807,50808],{},"赋值了，但是内容为空",[83,50810,50812],{"className":50613,"code":50811,"language":50615,"meta":10,"style":10},"typeof null\n输出的是'object'，是一个对象数据类型\n",[89,50813,50814,50819],{"__ignoreMap":10},[92,50815,50816],{"class":94,"line":95},[92,50817,50818],{"class":102},"typeof null\n",[92,50820,50821],{"class":94,"line":11},[92,50822,50823],{"class":102},"输出的是'object'，是一个对象数据类型\n",[46,50825,50826],{"start":1296},[49,50827,50828],{},"控制台检测数据类型",[38,50830,50831],{},[1441,50832],{"alt":10,"src":50833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[46,50835,50836],{"start":1308},[49,50837,50838],{},"类型转换",[38,50840,50841],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[38,50843,50844],{},"转换方式：隐式转换和显示转换",[38,50846,50847],{},"①隐式转换",[1110,50849,50850,50853,50856,50859],{},[49,50851,50852],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[49,50854,50855],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[49,50857,50858],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[49,50860,50861],{},"任何数据和字符串相加结果都是字符串",[38,50863,50864],{},"②显示转换",[38,50866,50867],{},[1441,50868],{"alt":10,"src":50869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[38,50871,50872],{},[1441,50873],{"alt":10,"src":50874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[38,50876,50877],{},"在输入的时候要用好隐式转换，简单写起来",[38,50879,50880],{},"let num = +prompt(’请输入数字：‘)",[38,50882,50883],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[38,50885,50886],{},"console.log(parseInt('12.333px'))",[38,50888,50889],{},"输出为：12",[38,50891,50892],{},"console.log(parseInt('a'a'a12.333px'))",[38,50894,50895],{},"输出：NaN",[33,50897,50899],{"id":50898},"_26-运算符","2.6 运算符",[63,50901,50903],{"id":50902},"_261-赋值运算符","2.6.1 赋值运算符",[38,50905,50906],{},[1441,50907],{"alt":10,"src":50908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[63,50910,50912],{"id":50911},"_262-一元运算符","2.6.2 一元运算符",[38,50914,50915],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[38,50917,50918],{},[1441,50919],{"alt":10,"src":50920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[38,50922,50923],{},[1441,50924],{"alt":10,"src":50925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[38,50927,50928],{},"两者的区别：",[38,50930,50931],{},[1441,50932],{"alt":10,"src":50933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[38,50935,50936],{},"前置先自加；后置后加，代码执行完之后再加",[63,50938,50940],{"id":50939},"_263-比较运算符","2.6.3 比较运算符",[38,50942,50943],{},[1441,50944],{"alt":10,"src":50945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[38,50947,50948],{},"比较运算符也有隐式转换",[38,50950,50951],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[38,50953,50954],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[38,50956,50957],{},"要使用三等，开发的时候",[38,50959,50960],{},"NaN不等于任何人，包括它自己",[38,50962,50963],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[38,50965,50966],{},"7\u002F10=0.7",[38,50968,50969],{},"最后：0.5+0.2=0.7",[38,50971,50972],{},"字符串比较，比较的是字符对应的ASCII码",[63,50974,50976],{"id":50975},"_264-逻辑运算符","2.6.4 逻辑运算符",[38,50978,50979],{},[1441,50980],{"alt":10,"src":50981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[38,50983,50984],{},[1441,50985],{"alt":10,"src":50986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[38,50988,50989],{},[1441,50990],{"alt":10,"src":50991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[38,50993,50994],{},"上述题目选D",[38,50996,50997],{},"与真2假1；或真1假2",[63,50999,51001],{"id":51000},"_265-运算符优先级","2.6.5 运算符优先级",[38,51003,51004],{},[1441,51005],{"alt":10,"src":51006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[38,51008,51009],{},"先算逻辑与，后算逻辑或",[33,51011,51013],{"id":51012},"_27-语句","2.7 语句",[38,51015,51016],{},"表达式：是可以被求值的代码，会有结果给我们",[38,51018,51019],{},"语句：语句是可以被执行的代码，例如prompt()",[38,51021,51022],{},[1441,51023],{"alt":10,"src":51024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[38,51026,51027],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[38,51029,51030],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[63,51032,51034],{"id":51033},"_271-分支语句","2.7.1 分支语句",[21978,51036,51038],{"id":51037},"_2711-if分支语句","2.7.1.1 if分支语句",[38,51040,51041],{},"if语句单行简单的话，可以不写{}，写在一行就行",[46,51043,51044],{},[49,51045,51046],{},"单分支语句",[38,51048,51049],{},[1441,51050],{"alt":10,"src":51051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[38,51053,51054],{},"除了0，所有数字都为真",[83,51056,51058],{"className":50613,"code":51057,"language":50615,"meta":10,"style":10},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[89,51059,51060,51065,51070,51075,51079],{"__ignoreMap":10},[92,51061,51062],{"class":94,"line":95},[92,51063,51064],{"class":102},"if（0) {\n",[92,51066,51067],{"class":94,"line":11},[92,51068,51069],{"class":102},"    let a=1\n",[92,51071,51072],{"class":94,"line":1158},[92,51073,51074],{"class":102},"    alert(typeof a)\n",[92,51076,51077],{"class":94,"line":1173},[92,51078,1544],{"class":102},[92,51080,51081],{"class":94,"line":1179},[92,51082,51083],{"class":102},"不输出，括号为假\n",[46,51085,51086],{"start":11},[49,51087,51088],{},"双分支语句",[38,51090,51091],{},[1441,51092],{"alt":10,"src":51093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[46,51095,51096],{"start":1158},[49,51097,51098],{},"多分支语句",[38,51100,51101],{},[1441,51102],{"alt":10,"src":51103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21978,51105,51107],{"id":51106},"_2712-三元运算符","2.7.1.2 三元运算符",[38,51109,51110],{},[1441,51111],{"alt":10,"src":51112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21978,51114,51116],{"id":51115},"_2713-switch语句","2.7.1.3 switch语句",[38,51118,51119],{},[1441,51120],{"alt":10,"src":51121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[38,51123,51124],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[63,51126,51128],{"id":51127},"_272-循环语句","2.7.2 循环语句",[21978,51130,51132],{"id":51131},"_2721-断点演示","2.7.2.1 断点演示",[38,51134,51135],{},[1441,51136],{"alt":10,"src":51137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21978,51139,51141],{"id":51140},"_2722-while循环","2.7.2.2 while循环",[38,51143,51144],{},[1441,51145],{"alt":10,"src":51146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[38,51148,51149],{},[1441,51150],{"alt":10,"src":51151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21978,51153,51155],{"id":51154},"_2723-for循环","2.7.2.3 for循环",[38,51157,51158],{},[1441,51159],{"alt":10,"src":51160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[38,51162,51163],{},"for(;;) {",[38,51165,1049],{},[38,51167,51168],{},"表示无限循环",[38,51170,51171],{},[1441,51172],{"alt":10,"src":51173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21978,51175,51177],{"id":51176},"_2724-循环的退出","2.7.2.4 循环的退出",[38,51179,51180],{},[1441,51181],{"alt":10,"src":51182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[33,51184,51186],{"id":51185},"_28-数组","2.8 数组",[63,51188,51190],{"id":51189},"_281-基础认识","2.8.1 基础认识",[38,51192,51193],{},[1441,51194],{"alt":10,"src":51195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[38,51197,51198],{},[1441,51199],{"alt":10,"src":51200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[38,51202,51203],{},[1441,51204],{"alt":10,"src":51205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[38,51207,51208],{},[1441,51209],{"alt":10,"src":51210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[63,51212,51214],{"id":51213},"_282-操作数组","2.8.2 操作数组",[38,51216,51217],{},[1441,51218],{"alt":10,"src":51219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[46,51221,51222],{},[49,51223,51224],{},"添加元素",[38,51226,51227],{},[1441,51228],{"alt":10,"src":51229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[38,51231,51232],{},"console.log(arr.push('green'))",[38,51234,51235],{},"输出结果：为新数组的长度",[38,51237,51238],{},[1441,51239],{"alt":10,"src":51240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[38,51242,51243],{},"push用的非常多，一定要记住",[46,51245,51246],{},[49,51247,51248],{},"删除元素",[38,51250,51251],{},[1441,51252],{"alt":10,"src":51253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[38,51255,51256],{},[1441,51257],{"alt":10,"src":51258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[38,51260,51261],{},[1441,51262],{"alt":10,"src":51263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[63,51265,51267],{"id":51266},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[83,51269,51271],{"className":50613,"code":51270,"language":50615,"meta":10,"style":10},"\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",[89,51272,51273,51288,51304,51308,51317,51335,51359,51381,51395,51403,51410,51422,51433,51437,51441,51448,51460,51475,51488,51507,51524,51539,51551,51563,51575,51579,51583,51594,51604,51616,51628,51640,51651,51655,51659,51671,51675,51689,51693,51697,51708,51722,51734,51748,51752,51761,51770,51774,51783,51787,51796,51801,51806,51819,51847,51852,51857,51882,51887,51891,51896,51901,51916,51920,51925,51955,51967,51983,51999,52013,52018,52025,52029,52034,52047,52055,52063,52067],{"__ignoreMap":10},[92,51274,51275,51278,51282,51285],{"class":94,"line":95},[92,51276,51277],{"class":102},"\u003C!",[92,51279,51281],{"class":51280},"s9eBZ","DOCTYPE",[92,51283,51284],{"class":1942}," html",[92,51286,51287],{"class":102},">\n",[92,51289,51290,51292,51294,51297,51299,51302],{"class":94,"line":11},[92,51291,1013],{"class":102},[92,51293,50615],{"class":51280},[92,51295,51296],{"class":1942}," lang",[92,51298,148],{"class":102},[92,51300,51301],{"class":207},"\"en\"",[92,51303,51287],{"class":102},[92,51305,51306],{"class":94,"line":1158},[92,51307,2379],{"emptyLinePlaceholder":17},[92,51309,51310,51312,51315],{"class":94,"line":1173},[92,51311,1013],{"class":102},[92,51313,51314],{"class":51280},"head",[92,51316,51287],{"class":102},[92,51318,51319,51322,51325,51328,51330,51333],{"class":94,"line":1179},[92,51320,51321],{"class":102},"    \u003C",[92,51323,51324],{"class":51280},"meta",[92,51326,51327],{"class":1942}," charset",[92,51329,148],{"class":102},[92,51331,51332],{"class":207},"\"UTF-8\"",[92,51334,51287],{"class":102},[92,51336,51337,51339,51341,51344,51346,51349,51352,51354,51357],{"class":94,"line":1193},[92,51338,51321],{"class":102},[92,51340,51324],{"class":51280},[92,51342,51343],{"class":1942}," http-equiv",[92,51345,148],{"class":102},[92,51347,51348],{"class":207},"\"X-UA-Compatible\"",[92,51350,51351],{"class":1942}," content",[92,51353,148],{"class":102},[92,51355,51356],{"class":207},"\"IE=edge\"",[92,51358,51287],{"class":102},[92,51360,51361,51363,51365,51367,51369,51372,51374,51376,51379],{"class":94,"line":1199},[92,51362,51321],{"class":102},[92,51364,51324],{"class":51280},[92,51366,14900],{"class":1942},[92,51368,148],{"class":102},[92,51370,51371],{"class":207},"\"viewport\"",[92,51373,51351],{"class":1942},[92,51375,148],{"class":102},[92,51377,51378],{"class":207},"\"width=device-width, initial-scale=1.0\"",[92,51380,51287],{"class":102},[92,51382,51383,51385,51388,51391,51393],{"class":94,"line":1290},[92,51384,51321],{"class":102},[92,51386,51387],{"class":51280},"title",[92,51389,51390],{"class":102},">Document\u003C\u002F",[92,51392,51387],{"class":51280},[92,51394,51287],{"class":102},[92,51396,51397,51399,51401],{"class":94,"line":1296},[92,51398,51321],{"class":102},[92,51400,5106],{"class":51280},[92,51402,51287],{"class":102},[92,51404,51405,51408],{"class":94,"line":1308},[92,51406,51407],{"class":51280},"        *",[92,51409,15552],{"class":102},[92,51411,51412,51415,51418,51420],{"class":94,"line":1591},[92,51413,51414],{"class":151},"            margin",[92,51416,51417],{"class":102},": ",[92,51419,294],{"class":151},[92,51421,1269],{"class":102},[92,51423,51424,51427,51429,51431],{"class":94,"line":1596},[92,51425,51426],{"class":151},"            padding",[92,51428,51417],{"class":102},[92,51430,294],{"class":151},[92,51432,1269],{"class":102},[92,51434,51435],{"class":94,"line":1602},[92,51436,2508],{"class":102},[92,51438,51439],{"class":94,"line":1607},[92,51440,2379],{"emptyLinePlaceholder":17},[92,51442,51443,51446],{"class":94,"line":1621},[92,51444,51445],{"class":1942},"        .box",[92,51447,15552],{"class":102},[92,51449,51450,51453,51455,51458],{"class":94,"line":1626},[92,51451,51452],{"class":151},"            display",[92,51454,51417],{"class":102},[92,51456,51457],{"class":151},"flex",[92,51459,1269],{"class":102},[92,51461,51462,51465,51467,51470,51473],{"class":94,"line":1632},[92,51463,51464],{"class":151},"            width",[92,51466,51417],{"class":102},[92,51468,51469],{"class":151},"700",[92,51471,51472],{"class":98},"px",[92,51474,1269],{"class":102},[92,51476,51477,51480,51482,51484,51486],{"class":94,"line":1653},[92,51478,51479],{"class":151},"            height",[92,51481,51417],{"class":102},[92,51483,3952],{"class":151},[92,51485,51472],{"class":98},[92,51487,1269],{"class":102},[92,51489,51490,51493,51495,51497,51499,51502,51505],{"class":94,"line":1658},[92,51491,51492],{"class":151},"            border-left",[92,51494,51417],{"class":102},[92,51496,320],{"class":151},[92,51498,51472],{"class":98},[92,51500,51501],{"class":151}," solid",[92,51503,51504],{"class":151}," pink",[92,51506,1269],{"class":102},[92,51508,51509,51512,51514,51516,51518,51520,51522],{"class":94,"line":1672},[92,51510,51511],{"class":151},"            border-bottom",[92,51513,51417],{"class":102},[92,51515,320],{"class":151},[92,51517,51472],{"class":98},[92,51519,51501],{"class":151},[92,51521,51504],{"class":151},[92,51523,1269],{"class":102},[92,51525,51526,51528,51530,51532,51534,51537],{"class":94,"line":1677},[92,51527,51414],{"class":151},[92,51529,51417],{"class":102},[92,51531,759],{"class":151},[92,51533,51472],{"class":98},[92,51535,51536],{"class":151}," auto",[92,51538,1269],{"class":102},[92,51540,51541,51544,51546,51549],{"class":94,"line":1706},[92,51542,51543],{"class":151},"            justify-content",[92,51545,51417],{"class":102},[92,51547,51548],{"class":151},"space-around",[92,51550,1269],{"class":102},[92,51552,51553,51556,51558,51561],{"class":94,"line":1711},[92,51554,51555],{"class":151},"            align-items",[92,51557,51417],{"class":102},[92,51559,51560],{"class":151},"flex-end",[92,51562,1269],{"class":102},[92,51564,51565,51568,51570,51573],{"class":94,"line":1728},[92,51566,51567],{"class":151},"            text-align",[92,51569,51417],{"class":102},[92,51571,51572],{"class":151},"center",[92,51574,1269],{"class":102},[92,51576,51577],{"class":94,"line":1733},[92,51578,2508],{"class":102},[92,51580,51581],{"class":94,"line":1738},[92,51582,2379],{"emptyLinePlaceholder":17},[92,51584,51585,51587,51589,51592],{"class":94,"line":1743},[92,51586,51445],{"class":1942},[92,51588,1063],{"class":98},[92,51590,51591],{"class":51280},"div",[92,51593,15552],{"class":102},[92,51595,51596,51598,51600,51602],{"class":94,"line":1757},[92,51597,51452],{"class":151},[92,51599,51417],{"class":102},[92,51601,51457],{"class":151},[92,51603,1269],{"class":102},[92,51605,51606,51608,51610,51612,51614],{"class":94,"line":1762},[92,51607,51464],{"class":151},[92,51609,51417],{"class":102},[92,51611,759],{"class":151},[92,51613,51472],{"class":98},[92,51615,1269],{"class":102},[92,51617,51618,51621,51623,51626],{"class":94,"line":2556},[92,51619,51620],{"class":151},"            background-color",[92,51622,51417],{"class":102},[92,51624,51625],{"class":151},"pink",[92,51627,1269],{"class":102},[92,51629,51630,51633,51635,51638],{"class":94,"line":2570},[92,51631,51632],{"class":151},"            flex-direction",[92,51634,51417],{"class":102},[92,51636,51637],{"class":151},"column",[92,51639,1269],{"class":102},[92,51641,51642,51644,51646,51649],{"class":94,"line":2578},[92,51643,51543],{"class":151},[92,51645,51417],{"class":102},[92,51647,51648],{"class":151},"space-between",[92,51650,1269],{"class":102},[92,51652,51653],{"class":94,"line":2583},[92,51654,2508],{"class":102},[92,51656,51657],{"class":94,"line":2589},[92,51658,2379],{"emptyLinePlaceholder":17},[92,51660,51661,51663,51666,51669],{"class":94,"line":2595},[92,51662,51445],{"class":1942},[92,51664,51665],{"class":51280}," div",[92,51667,51668],{"class":51280}," span",[92,51670,15552],{"class":102},[92,51672,51673],{"class":94,"line":2600},[92,51674,2379],{"emptyLinePlaceholder":17},[92,51676,51677,51680,51682,51685,51687],{"class":94,"line":7928},[92,51678,51679],{"class":151},"            margin-top",[92,51681,51417],{"class":102},[92,51683,51684],{"class":151},"-20",[92,51686,51472],{"class":98},[92,51688,1269],{"class":102},[92,51690,51691],{"class":94,"line":7952},[92,51692,2508],{"class":102},[92,51694,51695],{"class":94,"line":7957},[92,51696,2379],{"emptyLinePlaceholder":17},[92,51698,51699,51701,51703,51706],{"class":94,"line":7963},[92,51700,51445],{"class":1942},[92,51702,51665],{"class":51280},[92,51704,51705],{"class":51280}," h4",[92,51707,15552],{"class":102},[92,51709,51710,51713,51715,51718,51720],{"class":94,"line":7990},[92,51711,51712],{"class":151},"            margin-bottom",[92,51714,51417],{"class":102},[92,51716,51717],{"class":151},"-35",[92,51719,51472],{"class":98},[92,51721,1269],{"class":102},[92,51723,51724,51726,51728,51730,51732],{"class":94,"line":7995},[92,51725,51464],{"class":151},[92,51727,51417],{"class":102},[92,51729,459],{"class":151},[92,51731,51472],{"class":98},[92,51733,1269],{"class":102},[92,51735,51736,51739,51741,51744,51746],{"class":94,"line":8001},[92,51737,51738],{"class":151},"            margin-left",[92,51740,51417],{"class":102},[92,51742,51743],{"class":151},"-10",[92,51745,51472],{"class":98},[92,51747,1269],{"class":102},[92,51749,51750],{"class":94,"line":8013},[92,51751,2508],{"class":102},[92,51753,51754,51757,51759],{"class":94,"line":8025},[92,51755,51756],{"class":102},"    \u003C\u002F",[92,51758,5106],{"class":51280},[92,51760,51287],{"class":102},[92,51762,51763,51766,51768],{"class":94,"line":8037},[92,51764,51765],{"class":102},"\u003C\u002F",[92,51767,51314],{"class":51280},[92,51769,51287],{"class":102},[92,51771,51772],{"class":94,"line":9696},[92,51773,2379],{"emptyLinePlaceholder":17},[92,51775,51776,51778,51781],{"class":94,"line":9721},[92,51777,1013],{"class":102},[92,51779,51780],{"class":51280},"body",[92,51782,51287],{"class":102},[92,51784,51785],{"class":94,"line":9744},[92,51786,2379],{"emptyLinePlaceholder":17},[92,51788,51789,51791,51794],{"class":94,"line":9768},[92,51790,51321],{"class":102},[92,51792,51793],{"class":51280},"script",[92,51795,51287],{"class":102},[92,51797,51798],{"class":94,"line":9773},[92,51799,51800],{"class":161},"        \u002F\u002F 1. 四次弹框效果\n",[92,51802,51803],{"class":94,"line":9778},[92,51804,51805],{"class":161},"        \u002F\u002F 声明一个新的数组\n",[92,51807,51808,51811,51814,51816],{"class":94,"line":9783},[92,51809,51810],{"class":98},"        let",[92,51812,51813],{"class":102}," arr ",[92,51815,148],{"class":98},[92,51817,51818],{"class":102}," []\n",[92,51820,51821,51823,51825,51828,51830,51832,51834,51836,51838,51841,51843,51845],{"class":94,"line":9792},[92,51822,3382],{"class":98},[92,51824,1637],{"class":102},[92,51826,51827],{"class":98},"let",[92,51829,9418],{"class":102},[92,51831,148],{"class":98},[92,51833,25099],{"class":151},[92,51835,9425],{"class":102},[92,51837,1567],{"class":98},[92,51839,51840],{"class":151}," 4",[92,51842,3193],{"class":102},[92,51844,2271],{"class":98},[92,51846,12422],{"class":102},[92,51848,51849],{"class":94,"line":9797},[92,51850,51851],{"class":161},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[92,51853,51854],{"class":94,"line":9803},[92,51855,51856],{"class":161},"            \u002F\u002F arr.push(num)\n",[92,51858,51859,51862,51865,51867,51870,51872,51875,51877,51880],{"class":94,"line":9824},[92,51860,51861],{"class":102},"            arr.",[92,51863,51864],{"class":1942},"push",[92,51866,103],{"class":102},[92,51868,51869],{"class":1942},"prompt",[92,51871,103],{"class":102},[92,51873,51874],{"class":207},"`请输入第${",[92,51876,544],{"class":102},[92,51878,51879],{"class":207},"}季度的数据:`",[92,51881,30478],{"class":102},[92,51883,51884],{"class":94,"line":9830},[92,51885,51886],{"class":161},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[92,51888,51889],{"class":94,"line":9844},[92,51890,2508],{"class":102},[92,51892,51893],{"class":94,"line":9850},[92,51894,51895],{"class":161},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[92,51897,51898],{"class":94,"line":9877},[92,51899,51900],{"class":161},"        \u002F\u002F 盒子开头\n",[92,51902,51903,51906,51909,51911,51914],{"class":94,"line":9886},[92,51904,51905],{"class":102},"        document.",[92,51907,51908],{"class":1942},"write",[92,51910,103],{"class":102},[92,51912,51913],{"class":207},"` \u003Cdiv class=\"box\">`",[92,51915,109],{"class":102},[92,51917,51918],{"class":94,"line":9892},[92,51919,2379],{"emptyLinePlaceholder":17},[92,51921,51922],{"class":94,"line":9900},[92,51923,51924],{"class":161},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[92,51926,51927,51929,51931,51933,51935,51937,51939,51941,51943,51946,51949,51951,51953],{"class":94,"line":9905},[92,51928,3382],{"class":98},[92,51930,1637],{"class":102},[92,51932,51827],{"class":98},[92,51934,9418],{"class":102},[92,51936,148],{"class":98},[92,51938,4072],{"class":151},[92,51940,9425],{"class":102},[92,51942,1013],{"class":98},[92,51944,51945],{"class":102}," arr.",[92,51947,51948],{"class":151},"length",[92,51950,3193],{"class":102},[92,51952,2271],{"class":98},[92,51954,12422],{"class":102},[92,51956,51957,51960,51962,51964],{"class":94,"line":16584},[92,51958,51959],{"class":102},"            document.",[92,51961,51908],{"class":1942},[92,51963,103],{"class":102},[92,51965,51966],{"class":207},"`\n",[92,51968,51969,51972,51974,51976,51978,51980],{"class":94,"line":16590},[92,51970,51971],{"class":207},"              \u003Cdiv style=\"height: ${",[92,51973,3859],{"class":102},[92,51975,993],{"class":207},[92,51977,544],{"class":102},[92,51979,1043],{"class":207},[92,51981,51982],{"class":207},"}px;\">\n",[92,51984,51985,51988,51990,51992,51994,51996],{"class":94,"line":16613},[92,51986,51987],{"class":207},"                \u003Cspan>${",[92,51989,3859],{"class":102},[92,51991,993],{"class":207},[92,51993,544],{"class":102},[92,51995,1043],{"class":207},[92,51997,51998],{"class":207},"}\u003C\u002Fspan>\n",[92,52000,52001,52004,52006,52008,52010],{"class":94,"line":16619},[92,52002,52003],{"class":207},"                \u003Ch4>第${",[92,52005,544],{"class":102},[92,52007,45547],{"class":98},[92,52009,25099],{"class":151},[92,52011,52012],{"class":207},"}季度\u003C\u002Fh4>\n",[92,52014,52015],{"class":94,"line":16642},[92,52016,52017],{"class":207},"              \u003C\u002Fdiv>          \n",[92,52019,52020,52023],{"class":94,"line":16656},[92,52021,52022],{"class":207},"            `",[92,52024,109],{"class":102},[92,52026,52027],{"class":94,"line":16676},[92,52028,2508],{"class":102},[92,52030,52031],{"class":94,"line":16682},[92,52032,52033],{"class":161},"        \u002F\u002F 盒子结尾\n",[92,52035,52036,52038,52040,52042,52045],{"class":94,"line":16693},[92,52037,51905],{"class":102},[92,52039,51908],{"class":1942},[92,52041,103],{"class":102},[92,52043,52044],{"class":207},"` \u003C\u002Fdiv>`",[92,52046,109],{"class":102},[92,52048,52049,52051,52053],{"class":94,"line":16716},[92,52050,51756],{"class":102},[92,52052,51793],{"class":51280},[92,52054,51287],{"class":102},[92,52056,52057,52059,52061],{"class":94,"line":16738},[92,52058,51765],{"class":102},[92,52060,51780],{"class":51280},[92,52062,51287],{"class":102},[92,52064,52065],{"class":94,"line":16743},[92,52066,2379],{"emptyLinePlaceholder":17},[92,52068,52069,52071,52073],{"class":94,"line":16749},[92,52070,51765],{"class":102},[92,52072,50615],{"class":51280},[92,52074,51287],{"class":102},[63,52076,52078],{"id":52077},"_284-冒泡排序","2.8.4 冒泡排序",[83,52080,52082],{"className":50613,"code":52081,"language":50615,"meta":10,"style":10},"\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",[89,52083,52084,52094,52108,52112,52120,52135,52155,52167,52175,52179,52187,52195,52227,52260,52297,52302,52321,52326,52339,52354,52370,52374,52379,52383,52393,52402,52410,52414],{"__ignoreMap":10},[92,52085,52086,52088,52090,52092],{"class":94,"line":95},[92,52087,51277],{"class":102},[92,52089,51281],{"class":51280},[92,52091,51284],{"class":1942},[92,52093,51287],{"class":102},[92,52095,52096,52098,52100,52102,52104,52106],{"class":94,"line":11},[92,52097,1013],{"class":102},[92,52099,50615],{"class":51280},[92,52101,51296],{"class":1942},[92,52103,148],{"class":102},[92,52105,51301],{"class":207},[92,52107,51287],{"class":102},[92,52109,52110],{"class":94,"line":1158},[92,52111,2379],{"emptyLinePlaceholder":17},[92,52113,52114,52116,52118],{"class":94,"line":1173},[92,52115,1013],{"class":102},[92,52117,51314],{"class":51280},[92,52119,51287],{"class":102},[92,52121,52122,52125,52127,52129,52131,52133],{"class":94,"line":1179},[92,52123,52124],{"class":102},"  \u003C",[92,52126,51324],{"class":51280},[92,52128,51327],{"class":1942},[92,52130,148],{"class":102},[92,52132,51332],{"class":207},[92,52134,51287],{"class":102},[92,52136,52137,52139,52141,52143,52145,52147,52149,52151,52153],{"class":94,"line":1193},[92,52138,52124],{"class":102},[92,52140,51324],{"class":51280},[92,52142,14900],{"class":1942},[92,52144,148],{"class":102},[92,52146,51371],{"class":207},[92,52148,51351],{"class":1942},[92,52150,148],{"class":102},[92,52152,51378],{"class":207},[92,52154,51287],{"class":102},[92,52156,52157,52159,52161,52163,52165],{"class":94,"line":1199},[92,52158,52124],{"class":102},[92,52160,51387],{"class":51280},[92,52162,51390],{"class":102},[92,52164,51387],{"class":51280},[92,52166,51287],{"class":102},[92,52168,52169,52171,52173],{"class":94,"line":1290},[92,52170,51765],{"class":102},[92,52172,51314],{"class":51280},[92,52174,51287],{"class":102},[92,52176,52177],{"class":94,"line":1296},[92,52178,2379],{"emptyLinePlaceholder":17},[92,52180,52181,52183,52185],{"class":94,"line":1308},[92,52182,1013],{"class":102},[92,52184,51780],{"class":51280},[92,52186,51287],{"class":102},[92,52188,52189,52191,52193],{"class":94,"line":1591},[92,52190,52124],{"class":102},[92,52192,51793],{"class":51280},[92,52194,51287],{"class":102},[92,52196,52197,52200,52202,52204,52207,52209,52211,52213,52215,52217,52219,52221,52223,52225],{"class":94,"line":1596},[92,52198,52199],{"class":98},"    let",[92,52201,51813],{"class":102},[92,52203,148],{"class":98},[92,52205,52206],{"class":102}," [",[92,52208,422],{"class":151},[92,52210,12415],{"class":102},[92,52212,396],{"class":151},[92,52214,12415],{"class":102},[92,52216,174],{"class":151},[92,52218,12415],{"class":102},[92,52220,180],{"class":151},[92,52222,12415],{"class":102},[92,52224,320],{"class":151},[92,52226,33227],{"class":102},[92,52228,52229,52231,52233,52235,52237,52239,52241,52243,52245,52247,52249,52252,52254,52256,52258],{"class":94,"line":1602},[92,52230,3180],{"class":98},[92,52232,1637],{"class":102},[92,52234,51827],{"class":98},[92,52236,9418],{"class":102},[92,52238,148],{"class":98},[92,52240,4072],{"class":151},[92,52242,9425],{"class":102},[92,52244,1013],{"class":98},[92,52246,51945],{"class":102},[92,52248,51948],{"class":151},[92,52250,52251],{"class":98}," -",[92,52253,25099],{"class":151},[92,52255,3193],{"class":102},[92,52257,2271],{"class":98},[92,52259,12422],{"class":102},[92,52261,52262,52265,52267,52269,52271,52273,52275,52277,52279,52281,52283,52285,52287,52289,52291,52293,52295],{"class":94,"line":1607},[92,52263,52264],{"class":98},"      for",[92,52266,1637],{"class":102},[92,52268,51827],{"class":98},[92,52270,9480],{"class":102},[92,52272,148],{"class":98},[92,52274,4072],{"class":151},[92,52276,9487],{"class":102},[92,52278,1013],{"class":98},[92,52280,51945],{"class":102},[92,52282,51948],{"class":151},[92,52284,52251],{"class":98},[92,52286,9418],{"class":102},[92,52288,635],{"class":98},[92,52290,25099],{"class":151},[92,52292,9494],{"class":102},[92,52294,2271],{"class":98},[92,52296,12422],{"class":102},[92,52298,52299],{"class":94,"line":1621},[92,52300,52301],{"class":161},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[92,52303,52304,52306,52309,52311,52314,52316,52318],{"class":94,"line":1626},[92,52305,2476],{"class":98},[92,52307,52308],{"class":102}," (arr[j] ",[92,52310,1063],{"class":98},[92,52312,52313],{"class":102}," arr[j ",[92,52315,584],{"class":98},[92,52317,25099],{"class":151},[92,52319,52320],{"class":102},"]) {\n",[92,52322,52323],{"class":94,"line":1632},[92,52324,52325],{"class":161},"          \u002F\u002F 交换两个变量\n",[92,52327,52328,52331,52334,52336],{"class":94,"line":1653},[92,52329,52330],{"class":98},"          let",[92,52332,52333],{"class":102}," tmp ",[92,52335,148],{"class":98},[92,52337,52338],{"class":102}," arr[j]\n",[92,52340,52341,52344,52346,52348,52350,52352],{"class":94,"line":1658},[92,52342,52343],{"class":102},"          arr[j] ",[92,52345,148],{"class":98},[92,52347,52313],{"class":102},[92,52349,584],{"class":98},[92,52351,25099],{"class":151},[92,52353,33227],{"class":102},[92,52355,52356,52359,52361,52363,52365,52367],{"class":94,"line":1672},[92,52357,52358],{"class":102},"          arr[j ",[92,52360,584],{"class":98},[92,52362,25099],{"class":151},[92,52364,4422],{"class":102},[92,52366,148],{"class":98},[92,52368,52369],{"class":102}," tmp\n",[92,52371,52372],{"class":94,"line":1677},[92,52373,2508],{"class":102},[92,52375,52376],{"class":94,"line":1706},[92,52377,52378],{"class":102},"      }\n",[92,52380,52381],{"class":94,"line":1711},[92,52382,2166],{"class":102},[92,52384,52385,52388,52390],{"class":94,"line":1728},[92,52386,52387],{"class":102},"    document.",[92,52389,51908],{"class":1942},[92,52391,52392],{"class":102},"(arr)\n",[92,52394,52395,52398,52400],{"class":94,"line":1733},[92,52396,52397],{"class":102},"  \u003C\u002F",[92,52399,51793],{"class":51280},[92,52401,51287],{"class":102},[92,52403,52404,52406,52408],{"class":94,"line":1738},[92,52405,51765],{"class":102},[92,52407,51780],{"class":51280},[92,52409,51287],{"class":102},[92,52411,52412],{"class":94,"line":1743},[92,52413,2379],{"emptyLinePlaceholder":17},[92,52415,52416,52418,52420],{"class":94,"line":1757},[92,52417,51765],{"class":102},[92,52419,50615],{"class":51280},[92,52421,51287],{"class":102},[38,52423,52424],{},[1441,52425],{"alt":10,"src":52426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[38,52428,52429],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[38,52431,52432],{},"let arr = [4, 2, 5, 1, 3]",[38,52434,52435],{},"\u002F\u002F 1.升序排列写法",[38,52437,52438],{},"arr.sort(function (a, b) {",[38,52440,52441],{},"return a - b",[38,52443,52444],{},"})",[38,52446,52447],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[38,52449,52450],{},"\u002F\u002F 降序排列写法",[38,52452,52438],{},[38,52454,52455],{},"return b - a",[38,52457,52444],{},[38,52459,52460],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[33,52462,52464],{"id":52463},"_29-函数","2.9 函数",[38,52466,52467],{},[1441,52468],{"alt":10,"src":52469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[38,52471,52472],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[38,52474,52475],{},"函数的声明用function",[38,52477,52478],{},"函数里边可以嵌套函数",[63,52480,52482],{"id":52481},"_291-函数传参","2.9.1 函数传参",[38,52484,52485],{},[1441,52486],{"alt":10,"src":52487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[38,52489,52490],{},[1441,52491],{"alt":10,"src":52492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1110,52494,52495,52498,52501,52504,52507,52510],{},[49,52496,52497],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[49,52499,52500],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[49,52502,52503],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[49,52505,52506],{},"开发中尽量保持形参和实参个数一致",[49,52508,52509],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[49,52511,52512],{},"形参只在函数中有用，所以不需要进行声明这个变量",[38,52514,52515],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[63,52517,52519],{"id":52518},"_292-函数的返回值","2.9.2 函数的返回值",[38,52521,52522],{},[1441,52523],{"alt":10,"src":52524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[38,52526,52527],{},[1441,52528],{"alt":10,"src":52529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1110,52531,52532,52535,52538,52541,52544],{},[49,52533,52534],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[49,52536,52537],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[49,52539,52540],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[49,52542,52543],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[49,52545,52546],{},"断点调试:进入函数内部看执行过程F11",[63,52548,52550],{"id":52549},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[83,52552,52554],{"className":50613,"code":52553,"language":50615,"meta":10,"style":10},"    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",[89,52555,52556,52561,52566,52570,52575],{"__ignoreMap":10},[92,52557,52558],{"class":94,"line":95},[92,52559,52560],{"class":102},"    function fn(a, b) {\n",[92,52562,52563],{"class":94,"line":11},[92,52564,52565],{"class":102},"      console.log(a + b);\n",[92,52567,52568],{"class":94,"line":1158},[92,52569,2166],{"class":102},[92,52571,52572],{"class":94,"line":1173},[92,52573,52574],{"class":102},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[92,52576,52577],{"class":94,"line":1179},[92,52578,52579],{"class":102},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[63,52581,52583],{"id":52582},"_294-作用域","2.9.4 作用域",[1110,52585,52586,52592,52597,52600,52603],{},[49,52587,52588,52589],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[252,52590,52591],{},"作用域",[49,52593,52594],{},[252,52595,52596],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[49,52598,52599],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[49,52601,52602],{},"函数内部可以直接所使用全局变量",[49,52604,52605],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[38,52607,14613],{},[83,52609,52611],{"className":50613,"code":52610,"language":50615,"meta":10,"style":10},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[89,52612,52613,52618,52623,52627,52632,52637,52642],{"__ignoreMap":10},[92,52614,52615],{"class":94,"line":95},[92,52616,52617],{"class":102},"    function fun() {\n",[92,52619,52620],{"class":94,"line":11},[92,52621,52622],{"class":102},"      num = 10\n",[92,52624,52625],{"class":94,"line":1158},[92,52626,2166],{"class":102},[92,52628,52629],{"class":94,"line":1173},[92,52630,52631],{"class":102},"    fun()\n",[92,52633,52634],{"class":94,"line":1179},[92,52635,52636],{"class":102},"    console.log(num)\n",[92,52638,52639],{"class":94,"line":1193},[92,52640,52641],{"class":102},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[92,52643,52644],{"class":94,"line":1199},[92,52645,52646],{"class":102},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1110,52648,52649,52652],{},[49,52650,52651],{},"函数内部的形参可以看做是局部变量",[49,52653,52654],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[38,52656,52657,52658],{},"变量访问原则： ",[252,52659,52660],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[63,52662,52664],{"id":52663},"_295-匿名函数","2.9.5 匿名函数",[38,52666,52667],{},"函数可以分为具名函数和匿名函数",[38,52669,52670],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[46,52672,52673],{},[49,52674,52675],{},"函数表达式",[38,52677,52678],{},[1441,52679],{"alt":10,"src":52680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[38,52682,52683],{},"里边也可以写参数",[38,52685,52686],{},"具名函数调用位置可以随意调整；",[38,52688,52689],{},"匿名函数函数表达式形式只能在声明后才可以使用",[46,52691,52692],{"start":11},[49,52693,52694],{},"立即执行函数",[38,52696,52697],{},[1441,52698],{"alt":10,"src":52699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[38,52701,52702],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[38,52704,52705],{},"写法：两个小括号，然后在第一个小括号中写function",[38,52707,52708],{},"(function () {})();",[38,52710,52711],{},"不要落下最后的;",[38,52713,52714],{},"立即执行函数必须要加;",[38,52716,52717],{},"分号写前写后都没问题",[38,52719,52720],{},"写前：",[38,52722,52723],{},"(function() {})()",[38,52725,52726],{},";(function () {})();",[38,52728,52729],{},"写后:",[38,52731,52732],{},"(function() {})();",[38,52734,52708],{},[38,52736,52737],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[38,52739,52740],{},"还有一种写法：",[38,52742,52743],{},"(function(){}());",[38,52745,52746],{},"或者:",[38,52748,52749],{},"!function(){}();",[38,52751,52752],{},"立即执行函数有时候也是可以加名字的：",[38,52754,52755],{},"(function flexible(window,document) {}(window,document));",[38,52757,52758],{},"省一些调用方法",[63,52760,52762],{"id":52761},"_296-逻辑中断","2.9.6 逻辑中断!!!",[38,52764,52765],{},[1441,52766],{"alt":10,"src":52767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[38,52769,52770],{},"这样就不用非得给x,y初始化了",[38,52772,52773],{},[1441,52774],{"alt":10,"src":52775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[38,52777,52778],{},"代码执行时先看左边",[38,52780,52781],{},"例如：console.log(false && 3+5)",[38,52783,52784],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[38,52786,52787],{},"&&都是真时，就返回最后一个真值",[38,52789,52790],{},"console.log(11 && 22)",[38,52792,52793],{},"输出22",[38,52795,52796],{},"逻辑与：遇真则真",[38,52798,14613],{},[38,52800,52801],{},"let age=1",[38,52803,52804],{},"console.log(11 || age++)",[38,52806,52807],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[38,52809,52810],{},"console.log(11 || 22)",[38,52812,52813],{},"||逻辑或遇到真就直接输出，输出结果为11",[38,52815,52816],{},"||如果都是假的话，就取最后一个假的值了",[63,52818,52820],{"id":52819},"_297-转换为boolean型","2.9.7 转换为Boolean型",[38,52822,52823],{},"显示转换：",[38,52825,52826,52829,52830],{},[252,52827,52828],{},"记忆","： ",[252,52831,52832],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[38,52834,52835],{},"空字符串为假，其他字符串全为真",[38,52837,52838],{},[1441,52839],{"alt":10,"src":52840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[38,52842,52843],{},"隐式转换：",[38,52845,52846],{},[1441,52847],{"alt":10,"src":52848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[38,52850,52851],{},"隐式转换:",[38,52853,52854],{},"null+3=3",[38,52856,52857],{},"undefined+3=NaN",[38,52859,52860],{},"null==undefined 输出true,他两个都当0看",[38,52862,52863],{},"null===undefined 输出false",[38,52865,52866],{},"undefined做任何操作都是NaN",[38,52868,52869],{},"NaN不等于NaN，NaN表示计算错误",[33,52871,52873],{"id":52872},"_210-对象","2.10 对象",[63,52875,52877],{"id":52876},"_2101-对象的介绍","2.10.1 对象的介绍",[38,52879,52880],{},"对象也是一种数据类型，里边的数据是无序的",[38,52882,52883],{},"对象由属性和方法组成",[38,52885,52886],{},[1441,52887],{"alt":10,"src":52888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[38,52890,52891],{},[1441,52892],{"alt":10,"src":52893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[38,52895,52896],{},[1441,52897],{"alt":10,"src":52898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[63,52900,52902],{"id":52901},"_2102-对象属性","2.10.2 对象属性",[38,52904,52905],{},[1441,52906],{"alt":10,"src":52907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[46,52909,52910],{},[49,52911,52912],{},"查询对象",[38,52914,52915],{},"对象名.属性 goods.uname",[38,52917,52918],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[38,52920,52921],{},"不带字符串的属性名也可以使用 对象名['属性名']",[38,52923,52924],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[38,52926,52927],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[46,52929,52930],{"start":11},[49,52931,52932],{},"重新赋值",[38,52934,52935],{},"对象名.属性=新值",[46,52937,52938],{"start":1158},[49,52939,52940],{},"增加新数据",[38,52942,52935],{},[46,52944,52945],{"start":1173},[49,52946,52947],{},"删除对象中的属性",[38,52949,52950],{},"delete 对象名.属性",[63,52952,52954],{"id":52953},"_2103-对象方法","2.10.3 对象方法",[38,52956,52957],{},[1441,52958],{"alt":10,"src":52959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[38,52961,52962],{},"后边跟的是匿名函数",[38,52964,52965],{},"对象外面的叫函数；对象内部的叫方法",[38,52967,52968],{},[1441,52969],{"alt":10,"src":52970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[63,52972,52974],{"id":52973},"_2104-遍历对象","2.10.4 遍历对象",[38,52976,52977],{},"理解为加括号的python字典遍历",[38,52979,52980],{},[1441,52981],{"alt":10,"src":52982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[38,52984,52985],{},"k是字符串类型",[38,52987,52988],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[83,52990,52992],{"className":50613,"code":52991,"language":50615,"meta":10,"style":10},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[89,52993,52994,52999,53004,53009,53014],{"__ignoreMap":10},[92,52995,52996],{"class":94,"line":95},[92,52997,52998],{"class":102},"   let arr = [1, 2, 3]\n",[92,53000,53001],{"class":94,"line":11},[92,53002,53003],{"class":102},"    for (let k in arr) {\n",[92,53005,53006],{"class":94,"line":1158},[92,53007,53008],{"class":102},"      console.log(k)\n",[92,53010,53011],{"class":94,"line":1173},[92,53012,53013],{"class":102},"      console.log(arr[k])\n",[92,53015,53016],{"class":94,"line":1179},[92,53017,2166],{"class":102},[38,53019,53020],{},[1441,53021],{"alt":10,"src":53022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[38,53024,53025],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[38,53027,53028],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[38,53030,53031],{},"for in 得到的k是属性名",[51793,53033,53034],{},"\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",[38,53036,53037],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[63,53039,53041],{"id":53040},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[38,53043,53044],{},"数组中放对象信息",[83,53046,53050],{"className":53047,"code":53048,"language":53049,"meta":10,"style":10},"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",[89,53051,53052,53060,53065,53070,53075,53080,53085,53090,53095,53100,53105,53110,53115,53119,53123],{"__ignoreMap":10},[92,53053,53054,53056,53058],{"class":94,"line":95},[92,53055,1013],{"class":102},[92,53057,51793],{"class":51280},[92,53059,51287],{"class":102},[92,53061,53062],{"class":94,"line":11},[92,53063,53064],{"class":102},"    let students = [\n",[92,53066,53067],{"class":94,"line":1158},[92,53068,53069],{"class":102},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[92,53071,53072],{"class":94,"line":1173},[92,53073,53074],{"class":102},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[92,53076,53077],{"class":94,"line":1179},[92,53078,53079],{"class":102},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[92,53081,53082],{"class":94,"line":1193},[92,53083,53084],{"class":102},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[92,53086,53087],{"class":94,"line":1199},[92,53088,53089],{"class":102},"    ]\n",[92,53091,53092],{"class":94,"line":1290},[92,53093,53094],{"class":102},"    for (let i = 0; i \u003C students.length; i++) {\n",[92,53096,53097],{"class":94,"line":1296},[92,53098,53099],{"class":102},"      for (let k in students[i]) {\n",[92,53101,53102],{"class":94,"line":1308},[92,53103,53104],{"class":102},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[92,53106,53107],{"class":94,"line":1591},[92,53108,53109],{"class":102},"        \u002F\u002F输出每个人的名字：\n",[92,53111,53112],{"class":94,"line":1596},[92,53113,53114],{"class":102},"        \u002F\u002Fconsole.log(students[i].name)\n",[92,53116,53117],{"class":94,"line":1602},[92,53118,52378],{"class":102},[92,53120,53121],{"class":94,"line":1607},[92,53122,2166],{"class":102},[92,53124,53125,53127,53129],{"class":94,"line":1621},[92,53126,52397],{"class":102},[92,53128,51793],{"class":51280},[92,53130,51287],{"class":102},[63,53132,53134],{"id":53133},"_2106-内置对象","2.10.6 内置对象",[38,53136,53137],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[46,53139,53140],{},[49,53141,53142],{},"数学对象Math",[38,53144,53145],{},[1441,53146],{"alt":10,"src":53147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[38,53149,53150],{},[341,53151,53154],{"href":53152,"rel":53153},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23845],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[38,53156,53157],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[38,53159,53160],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[38,53162,53163],{},"数组不可以使用Math中的max,min来求最大值与最小值",[38,53165,53166],{},"null是一个空对象，可以认为：null类似于let obj={}",[38,53168,53169],{},"null属于对象数据类型",[46,53171,53172],{"start":11},[49,53173,53174],{},"生成任意范围随机数",[38,53176,53177],{},[1441,53178],{"alt":10,"src":53179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[38,53181,53182],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[38,53184,53185],{},"乘以几就取不到几",[38,53187,53188],{},"取数组中的随机元素：",[38,53190,53191],{},"let arr = ['red', 'green', 'blue']",[38,53193,53194],{},"let random = Math.floor(Math.random() * arr.length)",[38,53196,53197],{},"console.log(arr[random])",[38,53199,53200],{},"这个函数得到的是全闭区间",[38,53202,53203],{},"function getRandom(N, M) {",[38,53205,53206],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[38,53208,1049],{},[38,53210,53211],{},"console.log(getRandom(4, 8))",[63,53213,53215],{"id":53214},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[38,53217,53218],{},[1441,53219],{"alt":10,"src":53220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[38,53222,53223],{},[1441,53224],{"alt":10,"src":53225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[38,53227,53228],{},[1441,53229],{"alt":10,"src":53230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[38,53232,53233],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[38,53235,53236],{},[1441,53237],{"alt":10,"src":53238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[38,53240,53241],{},[1441,53242],{"alt":10,"src":53243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[38,53245,53246],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[38,53248,53249],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[38,53251,53252],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5106,53254,53255],{},"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":10,"searchDepth":11,"depth":11,"links":53257},[53258,53266,53267,53268,53269,53270,53277,53281,53287,53296],{"id":50448,"depth":11,"text":50449,"children":53259},[53260,53261,53262,53263,53264,53265],{"id":50452,"depth":1158,"text":50453},{"id":50469,"depth":1158,"text":50470},{"id":50509,"depth":1158,"text":50510},{"id":50521,"depth":1158,"text":50522},{"id":50530,"depth":1158,"text":50531},{"id":50578,"depth":1158,"text":50579},{"id":50588,"depth":11,"text":50589},{"id":50676,"depth":11,"text":50677},{"id":50699,"depth":11,"text":50700},{"id":50711,"depth":11,"text":50712},{"id":50898,"depth":11,"text":50899,"children":53271},[53272,53273,53274,53275,53276],{"id":50902,"depth":1158,"text":50903},{"id":50911,"depth":1158,"text":50912},{"id":50939,"depth":1158,"text":50940},{"id":50975,"depth":1158,"text":50976},{"id":51000,"depth":1158,"text":51001},{"id":51012,"depth":11,"text":51013,"children":53278},[53279,53280],{"id":51033,"depth":1158,"text":51034},{"id":51127,"depth":1158,"text":51128},{"id":51185,"depth":11,"text":51186,"children":53282},[53283,53284,53285,53286],{"id":51189,"depth":1158,"text":51190},{"id":51213,"depth":1158,"text":51214},{"id":51266,"depth":1158,"text":51267},{"id":52077,"depth":1158,"text":52078},{"id":52463,"depth":11,"text":52464,"children":53288},[53289,53290,53291,53292,53293,53294,53295],{"id":52481,"depth":1158,"text":52482},{"id":52518,"depth":1158,"text":52519},{"id":52549,"depth":1158,"text":52550},{"id":52582,"depth":1158,"text":52583},{"id":52663,"depth":1158,"text":52664},{"id":52761,"depth":1158,"text":52762},{"id":52819,"depth":1158,"text":52820},{"id":52872,"depth":11,"text":52873,"children":53297},[53298,53299,53300,53301,53302,53303,53304],{"id":52876,"depth":1158,"text":52877},{"id":52901,"depth":1158,"text":52902},{"id":52953,"depth":1158,"text":52954},{"id":52973,"depth":1158,"text":52974},{"id":53040,"depth":1158,"text":53041},{"id":53133,"depth":1158,"text":53134},{"id":53214,"depth":1158,"text":53215},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50440,"description":13},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53311,"title":53312,"body":53313,"description":13,"extension":14,"meta":76653,"navigation":17,"path":76654,"seo":76655,"stem":76656,"__hash__":76657},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53314,"toc":76593},[53315,53318,53321,53324,53329,53332,53335,53338,53342,53346,53352,53357,53365,53372,53375,53379,53384,53389,53394,53397,53400,53411,53414,53418,53421,53424,53429,53434,53439,53442,53445,53537,53540,53545,53548,53553,53556,53559,53564,53567,53572,53576,53579,53593,53597,53602,53605,53608,53612,53617,53620,53624,53628,53633,53637,53642,53645,53648,53651,53654,53657,53660,53665,53670,53698,53701,53704,53707,53712,53715,53718,53721,53724,53728,53757,53761,53766,53771,53774,53777,53780,53785,53900,53905,53910,54071,54076,54079,54083,54088,54093,54096,54099,54102,54105,54108,54111,54114,54117,54120,54123,54126,54129,54132,54135,54137,54140,54143,54146,54151,54155,54552,54555,54561,54565,54570,55852,55857,55860,55863,55866,55871,57067,57071,57077,57082,57085,57090,57095,57099,57103,57108,57111,57116,57119,57122,57126,58034,58037,58041,58262,58265,58268,58271,58497,58500,58724,58727,58731,58736,58739,58742,58970,58973,59006,59009,59013,59018,59022,59025,59028,59031,59034,59037,59040,59043,59048,60328,60332,60335,61428,61432,61435,61438,61441,61444,61448,61451,61454,61456,61464,62945,62949,62952,62955,62958,63167,63170,63174,63178,63183,63188,63191,63194,63199,63203,63208,63211,63320,63324,63329,63334,63337,63340,63344,63349,63354,63359,63362,63365,63376,63379,63384,63389,63392,63395,63468,63472,63477,63480,63482,63493,63497,63502,64828,64831,64834,64837,64839,64842,64845,64848,64851,64854,64857,64860,64863,64866,64869,64872,64875,64877,64879,64882,64886,65980,65983,65986,66002,66016,66019,66024,66030,66035,66039,66043,66048,66052,66057,66499,66504,66507,66511,66516,66519,66522,66526,66531,66535,66540,66545,66549,66554,66559,66562,66567,66572,66576,66581,66586,66690,66693,66697,66702,67068,67071,67074,67077,67080,67083,67086,67089,67092,68388,68392,68397,68402,68405,68408,68411,68414,68416,68421,68426,68429,68433,68438,68443,68448,68451,68454,68457,68460,68463,68468,68471,68475,68480,68485,68489,68494,68497,68502,68505,68508,68511,68514,68517,68522,68525,68528,68531,68534,68538,68543,68546,68550,68555,68558,68561,68565,68594,68597,68601,68605,68610,68614,68619,68622,68625,68628,68631,68634,68637,68640,68643,68646,68649,68652,68655,68658,68661,68665,68670,68675,68678,68682,68686,68691,68694,68698,68701,68704,68709,68714,68719,68724,68729,68732,68735,68740,68745,68749,68754,68757,68762,68765,68768,68771,68774,68779,68782,68791,68795,68800,68803,68806,68810,68813,68818,68822,68825,68831,68837,68841,68867,68870,70431,70434,70930,70933,70938,70943,70948,70952,70957,70962,70967,70971,70976,70979,70982,70985,70988,70992,70995,71000,71003,71008,71012,71017,71020,71025,71030,71035,71038,71041,71046,71051,71054,71057,71061,71064,71069,71072,71077,71080,71085,71090,71095,71098,71103,71168,71171,71182,71186,71191,71363,71367,71372,71375,71378,71381,71385,71396,71400,71403,71408,71413,71416,71419,71422,71425,71428,71430,71433,71436,71439,71444,71447,71452,71455,71459,71462,71465,71479,71483,71486,71541,71546,71549,71552,71557,71560,71564,71569,71699,71703,71708,71713,71794,71799,71803,71806,71811,71816,71822,71825,71828,71831,71835,71840,71843,71854,71858,71875,74922,74926,74929,74932,74935,74956,74960,74963,74971,74974,74979,74982,74985,74990,74995,74999,75020,75024,75029,75032,75035,75038,75041,75045,75050,75053,75057,75062,75065,75070,75073,75078,75081,75086,76289,76293,76298,76301,76306,76590],[29,53316,53312],{"id":53317},"_3web-apis",[38,53319,53320],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[38,53322,53323],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[38,53325,53326],{},[1441,53327],{"alt":10,"src":53328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[38,53330,53331],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[38,53333,53334],{},"建议数组和对象使用 const 来声明",[38,53336,53337],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[33,53339,53341],{"id":53340},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[63,53343,53345],{"id":53344},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[38,53347,53348,53351],{},[89,53349,53350],{},"document"," = HTML 文件解析后的对象化表示；",[38,53353,53354,53356],{},[89,53355,53350],{}," ≠ HTML 文件本身",[38,53358,53359,53364],{},[252,53360,53361],{},[89,53362,53363],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[38,53366,53367,53371],{},[252,53368,53369],{},[89,53370,53350],{}," ：容器里的内容，代表当前加载的网页（DOM）",[38,53373,53374],{},"document实际上为window.document的简写",[63,53376,53378],{"id":53377},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[38,53380,53381],{},[1441,53382],{"alt":10,"src":53383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[38,53385,53386],{},[1441,53387],{"alt":10,"src":53388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[38,53390,53391],{},[1441,53392],{"alt":10,"src":53393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[38,53395,53396],{},"console.dir()",[38,53398,53399],{},"dir用来打印对象",[1110,53401,53402,53405,53408],{},[49,53403,53404],{},"任何一个标签，都是一个对象",[49,53406,53407],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[49,53409,53410],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[38,53412,53413],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[63,53415,53417],{"id":53416},"_312-获取dom对象","3.1.2 获取DoM对象",[38,53419,53420],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[38,53422,53423],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[38,53425,53426],{},[252,53427,53428],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[46,53430,53431],{},[49,53432,53433],{},"利用CSS选择器来获取标签元素",[38,53435,53436],{},[1441,53437],{"alt":10,"src":53438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[38,53440,53441],{},"里边的选择器必须必须加引号！！！",[38,53443,53444],{},"只选择第一个元素",[83,53446,53448],{"className":53047,"code":53447,"language":53049,"meta":10,"style":10},"\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",[89,53449,53450,53458,53479,53498,53506,53511,53516,53521,53529],{"__ignoreMap":10},[92,53451,53452,53454,53456],{"class":94,"line":95},[92,53453,1013],{"class":102},[92,53455,51780],{"class":51280},[92,53457,51287],{"class":102},[92,53459,53460,53462,53464,53467,53469,53472,53475,53477],{"class":94,"line":11},[92,53461,52124],{"class":102},[92,53463,51591],{"class":51280},[92,53465,53466],{"class":1942}," class",[92,53468,148],{"class":102},[92,53470,53471],{"class":207},"\"box\"",[92,53473,53474],{"class":102},">123\u003C\u002F",[92,53476,51591],{"class":51280},[92,53478,51287],{"class":102},[92,53480,53481,53483,53485,53487,53489,53491,53494,53496],{"class":94,"line":1158},[92,53482,52124],{"class":102},[92,53484,51591],{"class":51280},[92,53486,53466],{"class":1942},[92,53488,148],{"class":102},[92,53490,53471],{"class":207},[92,53492,53493],{"class":102},">456\u003C\u002F",[92,53495,51591],{"class":51280},[92,53497,51287],{"class":102},[92,53499,53500,53502,53504],{"class":94,"line":1173},[92,53501,52124],{"class":102},[92,53503,51793],{"class":51280},[92,53505,51287],{"class":102},[92,53507,53508],{"class":94,"line":1179},[92,53509,53510],{"class":102},"    \u002F\u002F 1.获取匹配的第一个元素\n",[92,53512,53513],{"class":94,"line":1193},[92,53514,53515],{"class":102},"    const box = document.querySelector('div')\n",[92,53517,53518],{"class":94,"line":1199},[92,53519,53520],{"class":102},"    console.dir(box)\n",[92,53522,53523,53525,53527],{"class":94,"line":1290},[92,53524,52397],{"class":102},[92,53526,51793],{"class":51280},[92,53528,51287],{"class":102},[92,53530,53531,53533,53535],{"class":94,"line":1296},[92,53532,51765],{"class":102},[92,53534,51780],{"class":51280},[92,53536,51287],{"class":102},[38,53538,53539],{},"只选123，不选456",[38,53541,53542],{},[1441,53543],{"alt":10,"src":53544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[38,53546,53547],{},"返回的是一个数组的集合，不能对其进行直接修改",[38,53549,53550],{},[1441,53551],{"alt":10,"src":53552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[38,53554,53555],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[38,53557,53558],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[46,53560,53561],{"start":11},[49,53562,53563],{},"其他方法来获取标签元素",[38,53565,53566],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[38,53568,53569],{},[1441,53570],{"alt":10,"src":53571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[63,53573,53575],{"id":53574},"_313-操作元素的内容","3.1.3 操作元素的内容",[38,53577,53578],{},"设置修改DOM元素内容有两种方式：",[1110,53580,53581,53584,53587,53590],{},[49,53582,53583],{},"元素.innerText=''",[49,53585,53586],{},"元素.innerHTML=''",[49,53588,53589],{},"不写字符串输出数字也是可以的",[49,53591,53592],{},"元素.innerHtml=1",[21978,53594,53596],{"id":53595},"_3131-innertext","3.1.3.1 innerText",[38,53598,53599],{},[1441,53600],{"alt":10,"src":53601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[38,53603,53604],{},"思路：实现了修改盒子中的内容！",[38,53606,53607],{},"它只显示纯文本，不解析标签",[21978,53609,53611],{"id":53610},"_3132-innerhtml","3.1.3.2 innerHTML",[38,53613,53614],{},[1441,53615],{"alt":10,"src":53616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[38,53618,53619],{},"相比于innerText，他的强大之处在于可以解析标签",[63,53621,53623],{"id":53622},"_314-操作元素属性","3.1.4 操作元素属性",[21978,53625,53627],{"id":53626},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[38,53629,53630],{},[1441,53631],{"alt":10,"src":53632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21978,53634,53636],{"id":53635},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[38,53638,53639],{},[1441,53640],{"alt":10,"src":53641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[38,53643,53644],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[38,53646,53647],{},"div.style.backgroundColor = 'hotpink'",[38,53649,53650],{},"如果按照css的写法，-表示减，就会出错",[38,53652,53653],{},"body元素不需要再获取，直接用就行！！！！！！",[38,53655,53656],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[38,53658,53659],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[38,53661,53662],{},[1441,53663],{"alt":10,"src":53664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[38,53666,53667],{},[1441,53668],{"alt":10,"src":53669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[46,53671,53672,53675,53678,53681,53684,53687],{},[49,53673,53674],{},"className这个方式就是修改很多样式的时候来使用的！",[49,53676,53677],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[49,53679,53680],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[49,53682,53683],{},"className为属性名，如果还用class的话就导致与关键字冲突",[49,53685,53686],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[49,53688,53689,53690,53695],{},"解析标签的时候就变为了",[51591,53691],{"className":53692},[53693,53694],"nav","box",[53696,53697],"br",{},[38,53699,53700],{},"例子：",[51591,53702],{"className":53703},[53693],[51793,53705,53706],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[38,53708,53709],{},[1441,53710],{"alt":10,"src":53711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[38,53713,53714],{},"追加和删除类名用classList",[38,53716,53717],{},"常用于类似于开关的操作",[38,53719,53720],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[38,53722,53723],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21978,53725,53727],{"id":53726},"_3143-牢记点","3.1.4.3 牢记点",[46,53729,53730,53733,53736,53739,53742,53745,53748,53751,53754],{},[49,53731,53732],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[49,53734,53735],{},"使用style属性操作css时不要忘记引号",[49,53737,53738],{},"使用className或者classList时也不要忘记引号",[49,53740,53741],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[49,53743,53744],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[49,53746,53747],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[49,53749,53750],{},"若： let arr=['1','2',3] arr[0]=1",[49,53752,53753],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[49,53755,53756],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[63,53758,53760],{"id":53759},"_315-操作表单元素","3.1.5 操作表单元素",[46,53762,53763],{},[49,53764,53765],{},"天生的属性",[38,53767,53768],{},[1441,53769],{"alt":10,"src":53770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[38,53772,53773],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[38,53775,53776],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[38,53778,53779],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[38,53781,53782],{},[1441,53783],{"alt":10,"src":53784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[83,53786,53788],{"className":50613,"code":53787,"language":50615,"meta":10,"style":10},"在复选框中如果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",[89,53789,53790,53795,53827,53832,53837,53842,53847,53851,53856,53861,53878,53890,53895],{"__ignoreMap":10},[92,53791,53792],{"class":94,"line":95},[92,53793,53794],{"class":102},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[92,53796,53797,53799,53802,53805,53807,53810,53812,53814,53816,53818,53820,53822,53825],{"class":94,"line":11},[92,53798,1013],{"class":102},[92,53800,53801],{"class":51280},"input",[92,53803,53804],{"class":1942}," type",[92,53806,148],{"class":102},[92,53808,53809],{"class":207},"\"checkbox\"",[92,53811,14900],{"class":1942},[92,53813,148],{"class":102},[92,53815,7632],{"class":207},[92,53817,14939],{"class":1942},[92,53819,148],{"class":102},[92,53821,7632],{"class":207},[92,53823,53824],{"class":1942}," checked",[92,53826,51287],{"class":102},[92,53828,53829],{"class":94,"line":1158},[92,53830,53831],{"class":102},"不选的话：\n",[92,53833,53834],{"class":94,"line":1173},[92,53835,53836],{"class":102},"const input = document.querySelector('input')\n",[92,53838,53839],{"class":94,"line":1179},[92,53840,53841],{"class":102},"input.checked=false\n",[92,53843,53844],{"class":94,"line":1193},[92,53845,53846],{"class":102},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[92,53848,53849],{"class":94,"line":1199},[92,53850,2379],{"emptyLinePlaceholder":17},[92,53852,53853],{"class":94,"line":1290},[92,53854,53855],{"class":102},"禁用按钮：\n",[92,53857,53858],{"class":94,"line":1296},[92,53859,53860],{"class":102},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[92,53862,53863,53865,53868,53871,53874,53876],{"class":94,"line":1308},[92,53864,1013],{"class":102},[92,53866,53867],{"class":51280},"button",[92,53869,53870],{"class":1942}," disabled",[92,53872,53873],{"class":102},">点击\u003C\u002F",[92,53875,53867],{"class":51280},[92,53877,51287],{"class":102},[92,53879,53880,53882,53884,53886,53888],{"class":94,"line":1591},[92,53881,1013],{"class":102},[92,53883,53867],{"class":51280},[92,53885,53873],{"class":102},[92,53887,53867],{"class":51280},[92,53889,51287],{"class":102},[92,53891,53892],{"class":94,"line":1596},[92,53893,53894],{"class":102},"const bt = document.querySelector('button')\n",[92,53896,53897],{"class":94,"line":1602},[92,53898,53899],{"class":102},"bt.disabled = false\n",[46,53901,53902],{"start":11},[49,53903,53904],{},"自定义属性",[38,53906,53907],{},[1441,53908],{"alt":10,"src":53909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[83,53911,53913],{"className":53047,"code":53912,"language":53049,"meta":10,"style":10},"\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",[89,53914,53915,53923,53951,53970,53989,54008,54027,54035,54040,54045,54050,54055,54063],{"__ignoreMap":10},[92,53916,53917,53919,53921],{"class":94,"line":95},[92,53918,1013],{"class":102},[92,53920,51780],{"class":51280},[92,53922,51287],{"class":102},[92,53924,53925,53927,53929,53932,53934,53936,53939,53941,53944,53947,53949],{"class":94,"line":11},[92,53926,52124],{"class":102},[92,53928,51591],{"class":51280},[92,53930,53931],{"class":1942}," data-id",[92,53933,148],{"class":102},[92,53935,3657],{"class":207},[92,53937,53938],{"class":1942}," data-spm",[92,53940,148],{"class":102},[92,53942,53943],{"class":207},"\"我不知道\"",[92,53945,53946],{"class":102},">1\u003C\u002F",[92,53948,51591],{"class":51280},[92,53950,51287],{"class":102},[92,53952,53953,53955,53957,53959,53961,53963,53966,53968],{"class":94,"line":1158},[92,53954,52124],{"class":102},[92,53956,51591],{"class":51280},[92,53958,53931],{"class":1942},[92,53960,148],{"class":102},[92,53962,3680],{"class":207},[92,53964,53965],{"class":102},">2\u003C\u002F",[92,53967,51591],{"class":51280},[92,53969,51287],{"class":102},[92,53971,53972,53974,53976,53978,53980,53982,53985,53987],{"class":94,"line":1173},[92,53973,52124],{"class":102},[92,53975,51591],{"class":51280},[92,53977,53931],{"class":1942},[92,53979,148],{"class":102},[92,53981,3693],{"class":207},[92,53983,53984],{"class":102},">3\u003C\u002F",[92,53986,51591],{"class":51280},[92,53988,51287],{"class":102},[92,53990,53991,53993,53995,53997,53999,54001,54004,54006],{"class":94,"line":1179},[92,53992,52124],{"class":102},[92,53994,51591],{"class":51280},[92,53996,53931],{"class":1942},[92,53998,148],{"class":102},[92,54000,3706],{"class":207},[92,54002,54003],{"class":102},">4\u003C\u002F",[92,54005,51591],{"class":51280},[92,54007,51287],{"class":102},[92,54009,54010,54012,54014,54016,54018,54020,54023,54025],{"class":94,"line":1193},[92,54011,52124],{"class":102},[92,54013,51591],{"class":51280},[92,54015,53931],{"class":1942},[92,54017,148],{"class":102},[92,54019,3727],{"class":207},[92,54021,54022],{"class":102},">5\u003C\u002F",[92,54024,51591],{"class":51280},[92,54026,51287],{"class":102},[92,54028,54029,54031,54033],{"class":94,"line":1199},[92,54030,52124],{"class":102},[92,54032,51793],{"class":51280},[92,54034,51287],{"class":102},[92,54036,54037],{"class":94,"line":1290},[92,54038,54039],{"class":102},"    const one = document.querySelector('div')\n",[92,54041,54042],{"class":94,"line":1296},[92,54043,54044],{"class":102},"    console.log(one.dataset)\n",[92,54046,54047],{"class":94,"line":1308},[92,54048,54049],{"class":102},"    console.log(one.dataset.id)\n",[92,54051,54052],{"class":94,"line":1591},[92,54053,54054],{"class":102},"    console.log(one.dataset.spm)\n",[92,54056,54057,54059,54061],{"class":94,"line":1596},[92,54058,52397],{"class":102},[92,54060,51793],{"class":51280},[92,54062,51287],{"class":102},[92,54064,54065,54067,54069],{"class":94,"line":1602},[92,54066,51765],{"class":102},[92,54068,51780],{"class":51280},[92,54070,51287],{"class":102},[38,54072,54073],{},[1441,54074],{"alt":10,"src":54075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[38,54077,54078],{},"document.querySelector选择的是第一个对象（元素）",[63,54080,54082],{"id":54081},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[38,54084,54085],{},[1441,54086],{"alt":10,"src":54087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[38,54089,54090],{},[1441,54091],{"alt":10,"src":54092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[38,54094,54095],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51793,54097,54098],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[38,54100,54101],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51793,54103,54104],{},"\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",[38,54106,54107],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[38,54109,54110],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[38,54112,54113],{},"单位为毫秒！！！",[38,54115,54116],{},"可以搭配匿名函数来用！！！",[38,54118,54119],{},"setInterval(function () {",[38,54121,54122],{},"alert('两秒执行一次')",[38,54124,54125],{},"}, 2000)",[38,54127,54128],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[38,54130,54131],{},"function fn() {",[38,54133,54134],{},"document.write(1)",[38,54136,1049],{},[38,54138,54139],{},"setInterval(fn, 1000)",[38,54141,54142],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[38,54144,54145],{},"setInterval('fn()', 1000)",[38,54147,54148],{},[1441,54149],{"alt":10,"src":54150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21978,54152,54154],{"id":54153},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[83,54156,54158],{"className":50613,"code":54157,"language":50615,"meta":10,"style":10},"\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",[89,54159,54160,54170,54184,54188,54196,54210,54230,54242,54250,54254,54262,54299,54304,54309,54314,54322,54330,54352,54360,54365,54387,54392,54397,54408,54413,54433,54441,54456,54471,54482,54487,54497,54507,54511,54520,54524,54532,54540,54544],{"__ignoreMap":10},[92,54161,54162,54164,54166,54168],{"class":94,"line":95},[92,54163,51277],{"class":102},[92,54165,51281],{"class":51280},[92,54167,51284],{"class":1942},[92,54169,51287],{"class":102},[92,54171,54172,54174,54176,54178,54180,54182],{"class":94,"line":11},[92,54173,1013],{"class":102},[92,54175,50615],{"class":51280},[92,54177,51296],{"class":1942},[92,54179,148],{"class":102},[92,54181,51301],{"class":207},[92,54183,51287],{"class":102},[92,54185,54186],{"class":94,"line":1158},[92,54187,2379],{"emptyLinePlaceholder":17},[92,54189,54190,54192,54194],{"class":94,"line":1173},[92,54191,1013],{"class":102},[92,54193,51314],{"class":51280},[92,54195,51287],{"class":102},[92,54197,54198,54200,54202,54204,54206,54208],{"class":94,"line":1179},[92,54199,52124],{"class":102},[92,54201,51324],{"class":51280},[92,54203,51327],{"class":1942},[92,54205,148],{"class":102},[92,54207,51332],{"class":207},[92,54209,51287],{"class":102},[92,54211,54212,54214,54216,54218,54220,54222,54224,54226,54228],{"class":94,"line":1193},[92,54213,52124],{"class":102},[92,54215,51324],{"class":51280},[92,54217,14900],{"class":1942},[92,54219,148],{"class":102},[92,54221,51371],{"class":207},[92,54223,51351],{"class":1942},[92,54225,148],{"class":102},[92,54227,51378],{"class":207},[92,54229,51287],{"class":102},[92,54231,54232,54234,54236,54238,54240],{"class":94,"line":1199},[92,54233,52124],{"class":102},[92,54235,51387],{"class":51280},[92,54237,51390],{"class":102},[92,54239,51387],{"class":51280},[92,54241,51287],{"class":102},[92,54243,54244,54246,54248],{"class":94,"line":1290},[92,54245,51765],{"class":102},[92,54247,51314],{"class":51280},[92,54249,51287],{"class":102},[92,54251,54252],{"class":94,"line":1296},[92,54253,2379],{"emptyLinePlaceholder":17},[92,54255,54256,54258,54260],{"class":94,"line":1308},[92,54257,1013],{"class":102},[92,54259,51780],{"class":51280},[92,54261,51287],{"class":102},[92,54263,54264,54266,54269,54271,54273,54275,54277,54279,54281,54284,54286,54289,54292,54294,54297],{"class":94,"line":1591},[92,54265,52124],{"class":102},[92,54267,54268],{"class":51280},"textarea",[92,54270,14900],{"class":1942},[92,54272,148],{"class":102},[92,54274,7632],{"class":207},[92,54276,14939],{"class":1942},[92,54278,148],{"class":102},[92,54280,7632],{"class":207},[92,54282,54283],{"class":1942}," cols",[92,54285,148],{"class":102},[92,54287,54288],{"class":207},"\"30\"",[92,54290,54291],{"class":1942}," rows",[92,54293,148],{"class":102},[92,54295,54296],{"class":207},"\"10\"",[92,54298,51287],{"class":102},[92,54300,54301],{"class":94,"line":1596},[92,54302,54303],{"class":102},"        用户注册协议\n",[92,54305,54306],{"class":94,"line":1602},[92,54307,54308],{"class":102},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[92,54310,54311],{"class":94,"line":1607},[92,54312,54313],{"class":102},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[92,54315,54316,54318,54320],{"class":94,"line":1621},[92,54317,51756],{"class":102},[92,54319,54268],{"class":51280},[92,54321,51287],{"class":102},[92,54323,54324,54326,54328],{"class":94,"line":1626},[92,54325,52124],{"class":102},[92,54327,53696],{"class":51280},[92,54329,51287],{"class":102},[92,54331,54332,54334,54336,54338,54340,54343,54345,54348,54350],{"class":94,"line":1632},[92,54333,52124],{"class":102},[92,54335,53867],{"class":51280},[92,54337,53466],{"class":1942},[92,54339,148],{"class":102},[92,54341,54342],{"class":207},"\"btn\"",[92,54344,53870],{"class":1942},[92,54346,54347],{"class":102},">我已经阅读用户协议(5)\u003C\u002F",[92,54349,53867],{"class":51280},[92,54351,51287],{"class":102},[92,54353,54354,54356,54358],{"class":94,"line":1653},[92,54355,52124],{"class":102},[92,54357,51793],{"class":51280},[92,54359,51287],{"class":102},[92,54361,54362],{"class":94,"line":1658},[92,54363,54364],{"class":161},"    \u002F\u002F 1. 获取元素\n",[92,54366,54367,54369,54372,54374,54377,54380,54382,54385],{"class":94,"line":1672},[92,54368,11201],{"class":98},[92,54370,54371],{"class":151}," btn",[92,54373,13544],{"class":98},[92,54375,54376],{"class":102}," document.",[92,54378,54379],{"class":1942},"querySelector",[92,54381,103],{"class":102},[92,54383,54384],{"class":207},"'.btn'",[92,54386,109],{"class":102},[92,54388,54389],{"class":94,"line":1677},[92,54390,54391],{"class":161},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[92,54393,54394],{"class":94,"line":1706},[92,54395,54396],{"class":161},"    \u002F\u002F 2. 倒计时\n",[92,54398,54399,54401,54403,54405],{"class":94,"line":1711},[92,54400,52199],{"class":98},[92,54402,9418],{"class":102},[92,54404,148],{"class":98},[92,54406,54407],{"class":151}," 5\n",[92,54409,54410],{"class":94,"line":1728},[92,54411,54412],{"class":161},"    \u002F\u002F 2.1 开启定时器\n",[92,54414,54415,54417,54420,54422,54425,54427,54430],{"class":94,"line":1733},[92,54416,52199],{"class":98},[92,54418,54419],{"class":102}," n ",[92,54421,148],{"class":98},[92,54423,54424],{"class":1942}," setInterval",[92,54426,103],{"class":102},[92,54428,54429],{"class":98},"function",[92,54431,54432],{"class":102}," () {\n",[92,54434,54435,54438],{"class":94,"line":1738},[92,54436,54437],{"class":102},"      i",[92,54439,54440],{"class":98},"--\n",[92,54442,54443,54446,54448,54451,54453],{"class":94,"line":1743},[92,54444,54445],{"class":102},"      btn.innerHTML ",[92,54447,148],{"class":98},[92,54449,54450],{"class":207}," `我已经阅读用户协议(${",[92,54452,544],{"class":102},[92,54454,54455],{"class":207},"})`\n",[92,54457,54458,54461,54464,54467,54469],{"class":94,"line":1757},[92,54459,54460],{"class":98},"      if",[92,54462,54463],{"class":102}," (i ",[92,54465,54466],{"class":98},"===",[92,54468,4072],{"class":151},[92,54470,12422],{"class":102},[92,54472,54473,54476,54479],{"class":94,"line":1762},[92,54474,54475],{"class":1942},"        clearInterval",[92,54477,54478],{"class":102},"(n)  ",[92,54480,54481],{"class":161},"\u002F\u002F 关闭定时器\n",[92,54483,54484],{"class":94,"line":2556},[92,54485,54486],{"class":161},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[92,54488,54489,54492,54494],{"class":94,"line":2570},[92,54490,54491],{"class":102},"        btn.disabled ",[92,54493,148],{"class":98},[92,54495,54496],{"class":151}," false\n",[92,54498,54499,54502,54504],{"class":94,"line":2578},[92,54500,54501],{"class":102},"        btn.innerHTML ",[92,54503,148],{"class":98},[92,54505,54506],{"class":207}," '同意'\n",[92,54508,54509],{"class":94,"line":2583},[92,54510,52378],{"class":102},[92,54512,54513,54516,54518],{"class":94,"line":2589},[92,54514,54515],{"class":102},"    }, ",[92,54517,6390],{"class":151},[92,54519,109],{"class":102},[92,54521,54522],{"class":94,"line":2595},[92,54523,2379],{"emptyLinePlaceholder":17},[92,54525,54526,54528,54530],{"class":94,"line":2600},[92,54527,52397],{"class":102},[92,54529,51793],{"class":51280},[92,54531,51287],{"class":102},[92,54533,54534,54536,54538],{"class":94,"line":7928},[92,54535,51765],{"class":102},[92,54537,51780],{"class":51280},[92,54539,51287],{"class":102},[92,54541,54542],{"class":94,"line":7952},[92,54543,2379],{"emptyLinePlaceholder":17},[92,54545,54546,54548,54550],{"class":94,"line":7957},[92,54547,51765],{"class":102},[92,54549,50615],{"class":51280},[92,54551,51287],{"class":102},[38,54553,54554],{},"不要一直想着用死循环,避免死循环",[38,54556,54557,54560],{},[89,54558,54559],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21978,54562,54564],{"id":54563},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[46,54566,54567],{},[49,54568,54569],{},"法1",[83,54571,54573],{"className":50613,"code":54572,"language":50615,"meta":10,"style":10},"\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",[89,54574,54575,54585,54599,54603,54611,54625,54645,54657,54665,54671,54682,54693,54697,54701,54708,54720,54724,54728,54735,54747,54761,54774,54788,54792,54796,54803,54814,54825,54836,54848,54860,54872,54876,54880,54888,54898,54911,54923,54936,54940,54944,54951,54961,54973,54985,54996,55007,55017,55029,55041,55045,55049,55058,55070,55082,55110,55123,55127,55131,55138,55149,55153,55161,55169,55173,55181,55195,55210,55234,55242,55257,55270,55278,55299,55311,55323,55335,55347,55359,55371,55383,55392,55400,55408,55416,55428,55451,55470,55489,55508,55527,55546,55565,55585,55589,55609,55628,55648,55669,55680,55697,55707,55717,55727,55732,55737,55742,55747,55772,55785,55789,55812,55816,55824,55832,55840,55844],{"__ignoreMap":10},[92,54576,54577,54579,54581,54583],{"class":94,"line":95},[92,54578,51277],{"class":102},[92,54580,51281],{"class":51280},[92,54582,51284],{"class":1942},[92,54584,51287],{"class":102},[92,54586,54587,54589,54591,54593,54595,54597],{"class":94,"line":11},[92,54588,1013],{"class":102},[92,54590,50615],{"class":51280},[92,54592,51296],{"class":1942},[92,54594,148],{"class":102},[92,54596,51301],{"class":207},[92,54598,51287],{"class":102},[92,54600,54601],{"class":94,"line":1158},[92,54602,2379],{"emptyLinePlaceholder":17},[92,54604,54605,54607,54609],{"class":94,"line":1173},[92,54606,1013],{"class":102},[92,54608,51314],{"class":51280},[92,54610,51287],{"class":102},[92,54612,54613,54615,54617,54619,54621,54623],{"class":94,"line":1179},[92,54614,52124],{"class":102},[92,54616,51324],{"class":51280},[92,54618,51327],{"class":1942},[92,54620,148],{"class":102},[92,54622,51332],{"class":207},[92,54624,51287],{"class":102},[92,54626,54627,54629,54631,54633,54635,54637,54639,54641,54643],{"class":94,"line":1193},[92,54628,52124],{"class":102},[92,54630,51324],{"class":51280},[92,54632,14900],{"class":1942},[92,54634,148],{"class":102},[92,54636,51371],{"class":207},[92,54638,51351],{"class":1942},[92,54640,148],{"class":102},[92,54642,51378],{"class":207},[92,54644,51287],{"class":102},[92,54646,54647,54649,54651,54653,54655],{"class":94,"line":1199},[92,54648,52124],{"class":102},[92,54650,51387],{"class":51280},[92,54652,51390],{"class":102},[92,54654,51387],{"class":51280},[92,54656,51287],{"class":102},[92,54658,54659,54661,54663],{"class":94,"line":1290},[92,54660,52124],{"class":102},[92,54662,5106],{"class":51280},[92,54664,51287],{"class":102},[92,54666,54667,54669],{"class":94,"line":1296},[92,54668,6383],{"class":51280},[92,54670,15552],{"class":102},[92,54672,54673,54676,54678,54680],{"class":94,"line":1308},[92,54674,54675],{"class":151},"      padding",[92,54677,51417],{"class":102},[92,54679,294],{"class":151},[92,54681,1269],{"class":102},[92,54683,54684,54687,54689,54691],{"class":94,"line":1591},[92,54685,54686],{"class":151},"      margin",[92,54688,51417],{"class":102},[92,54690,294],{"class":151},[92,54692,1269],{"class":102},[92,54694,54695],{"class":94,"line":1596},[92,54696,2166],{"class":102},[92,54698,54699],{"class":94,"line":1602},[92,54700,2379],{"emptyLinePlaceholder":17},[92,54702,54703,54706],{"class":94,"line":1607},[92,54704,54705],{"class":51280},"    li",[92,54707,15552],{"class":102},[92,54709,54710,54713,54715,54718],{"class":94,"line":1621},[92,54711,54712],{"class":151},"      list-style",[92,54714,51417],{"class":102},[92,54716,54717],{"class":151},"none",[92,54719,1269],{"class":102},[92,54721,54722],{"class":94,"line":1626},[92,54723,2166],{"class":102},[92,54725,54726],{"class":94,"line":1632},[92,54727,2379],{"emptyLinePlaceholder":17},[92,54729,54730,54733],{"class":94,"line":1653},[92,54731,54732],{"class":1942},"    .box",[92,54734,15552],{"class":102},[92,54736,54737,54740,54742,54745],{"class":94,"line":1658},[92,54738,54739],{"class":151},"      position",[92,54741,51417],{"class":102},[92,54743,54744],{"class":151},"relative",[92,54746,1269],{"class":102},[92,54748,54749,54752,54754,54757,54759],{"class":94,"line":1672},[92,54750,54751],{"class":151},"      width",[92,54753,51417],{"class":102},[92,54755,54756],{"class":151},"976",[92,54758,51472],{"class":98},[92,54760,1269],{"class":102},[92,54762,54763,54766,54768,54770,54772],{"class":94,"line":1677},[92,54764,54765],{"class":151},"      height",[92,54767,51417],{"class":102},[92,54769,1518],{"class":151},[92,54771,51472],{"class":98},[92,54773,1269],{"class":102},[92,54775,54776,54778,54780,54782,54784,54786],{"class":94,"line":1706},[92,54777,54686],{"class":151},[92,54779,51417],{"class":102},[92,54781,414],{"class":151},[92,54783,51472],{"class":98},[92,54785,51536],{"class":151},[92,54787,1269],{"class":102},[92,54789,54790],{"class":94,"line":1711},[92,54791,2166],{"class":102},[92,54793,54794],{"class":94,"line":1728},[92,54795,2379],{"emptyLinePlaceholder":17},[92,54797,54798,54801],{"class":94,"line":1733},[92,54799,54800],{"class":1942},"    .slider-footer",[92,54802,15552],{"class":102},[92,54804,54805,54807,54809,54812],{"class":94,"line":1738},[92,54806,54739],{"class":151},[92,54808,51417],{"class":102},[92,54810,54811],{"class":151},"absolute",[92,54813,1269],{"class":102},[92,54815,54816,54819,54821,54823],{"class":94,"line":1743},[92,54817,54818],{"class":151},"      left",[92,54820,51417],{"class":102},[92,54822,294],{"class":151},[92,54824,1269],{"class":102},[92,54826,54827,54830,54832,54834],{"class":94,"line":1757},[92,54828,54829],{"class":151},"      bottom",[92,54831,51417],{"class":102},[92,54833,294],{"class":151},[92,54835,1269],{"class":102},[92,54837,54838,54840,54842,54844,54846],{"class":94,"line":1762},[92,54839,54751],{"class":151},[92,54841,51417],{"class":102},[92,54843,414],{"class":151},[92,54845,431],{"class":98},[92,54847,1269],{"class":102},[92,54849,54850,54852,54854,54856,54858],{"class":94,"line":2556},[92,54851,54765],{"class":151},[92,54853,51417],{"class":102},[92,54855,678],{"class":151},[92,54857,431],{"class":98},[92,54859,1269],{"class":102},[92,54861,54862,54865,54867,54870],{"class":94,"line":2570},[92,54863,54864],{"class":151},"      background-color",[92,54866,51417],{"class":102},[92,54868,54869],{"class":151},"skyblue",[92,54871,1269],{"class":102},[92,54873,54874],{"class":94,"line":2578},[92,54875,2166],{"class":102},[92,54877,54878],{"class":94,"line":2583},[92,54879,2379],{"emptyLinePlaceholder":17},[92,54881,54882,54884,54886],{"class":94,"line":2589},[92,54883,54800],{"class":1942},[92,54885,6805],{"class":51280},[92,54887,15552],{"class":102},[92,54889,54890,54892,54894,54896],{"class":94,"line":2595},[92,54891,54739],{"class":151},[92,54893,51417],{"class":102},[92,54895,54811],{"class":151},[92,54897,1269],{"class":102},[92,54899,54900,54903,54905,54907,54909],{"class":94,"line":2600},[92,54901,54902],{"class":151},"      font-size",[92,54904,51417],{"class":102},[92,54906,1004],{"class":151},[92,54908,51472],{"class":98},[92,54910,1269],{"class":102},[92,54912,54913,54915,54917,54919,54921],{"class":94,"line":7928},[92,54914,54818],{"class":151},[92,54916,51417],{"class":102},[92,54918,803],{"class":151},[92,54920,51472],{"class":98},[92,54922,1269],{"class":102},[92,54924,54925,54928,54930,54932,54934],{"class":94,"line":7952},[92,54926,54927],{"class":151},"      top",[92,54929,51417],{"class":102},[92,54931,422],{"class":151},[92,54933,51472],{"class":98},[92,54935,1269],{"class":102},[92,54937,54938],{"class":94,"line":7957},[92,54939,2166],{"class":102},[92,54941,54942],{"class":94,"line":7963},[92,54943,2379],{"emptyLinePlaceholder":17},[92,54945,54946,54949],{"class":94,"line":7990},[92,54947,54948],{"class":51280},"    ul",[92,54950,15552],{"class":102},[92,54952,54953,54955,54957,54959],{"class":94,"line":7995},[92,54954,54739],{"class":151},[92,54956,51417],{"class":102},[92,54958,54811],{"class":151},[92,54960,1269],{"class":102},[92,54962,54963,54965,54967,54969,54971],{"class":94,"line":8001},[92,54964,54927],{"class":151},[92,54966,51417],{"class":102},[92,54968,884],{"class":151},[92,54970,51472],{"class":98},[92,54972,1269],{"class":102},[92,54974,54975,54977,54979,54981,54983],{"class":94,"line":8013},[92,54976,54818],{"class":151},[92,54978,51417],{"class":102},[92,54980,803],{"class":151},[92,54982,51472],{"class":98},[92,54984,1269],{"class":102},[92,54986,54987,54990,54992,54994],{"class":94,"line":8025},[92,54988,54989],{"class":151},"      display",[92,54991,51417],{"class":102},[92,54993,51457],{"class":151},[92,54995,1269],{"class":102},[92,54997,54998,55001,55003,55005],{"class":94,"line":8037},[92,54999,55000],{"class":151},"      justify-content",[92,55002,51417],{"class":102},[92,55004,51648],{"class":151},[92,55006,1269],{"class":102},[92,55008,55009,55011,55013,55015],{"class":94,"line":9696},[92,55010,54739],{"class":151},[92,55012,51417],{"class":102},[92,55014,54811],{"class":151},[92,55016,1269],{"class":102},[92,55018,55019,55021,55023,55025,55027],{"class":94,"line":9721},[92,55020,54751],{"class":151},[92,55022,51417],{"class":102},[92,55024,3971],{"class":151},[92,55026,51472],{"class":98},[92,55028,1269],{"class":102},[92,55030,55031,55033,55035,55037,55039],{"class":94,"line":9744},[92,55032,54765],{"class":151},[92,55034,51417],{"class":102},[92,55036,803],{"class":151},[92,55038,51472],{"class":98},[92,55040,1269],{"class":102},[92,55042,55043],{"class":94,"line":9768},[92,55044,2166],{"class":102},[92,55046,55047],{"class":94,"line":9773},[92,55048,2379],{"emptyLinePlaceholder":17},[92,55050,55051,55053,55056],{"class":94,"line":9778},[92,55052,54948],{"class":51280},[92,55054,55055],{"class":51280}," li",[92,55057,15552],{"class":102},[92,55059,55060,55062,55064,55066,55068],{"class":94,"line":9783},[92,55061,54751],{"class":151},[92,55063,51417],{"class":102},[92,55065,803],{"class":151},[92,55067,51472],{"class":98},[92,55069,1269],{"class":102},[92,55071,55072,55074,55076,55078,55080],{"class":94,"line":9792},[92,55073,54765],{"class":151},[92,55075,51417],{"class":102},[92,55077,803],{"class":151},[92,55079,51472],{"class":98},[92,55081,1269],{"class":102},[92,55083,55084,55086,55088,55091,55093,55095,55097,55099,55101,55103,55105,55108],{"class":94,"line":9797},[92,55085,54864],{"class":151},[92,55087,51417],{"class":102},[92,55089,55090],{"class":151},"rgba",[92,55092,103],{"class":102},[92,55094,294],{"class":151},[92,55096,12415],{"class":102},[92,55098,294],{"class":151},[92,55100,12415],{"class":102},[92,55102,294],{"class":151},[92,55104,12415],{"class":102},[92,55106,55107],{"class":151},".4",[92,55109,2698],{"class":102},[92,55111,55112,55115,55117,55119,55121],{"class":94,"line":9803},[92,55113,55114],{"class":151},"      border-radius",[92,55116,51417],{"class":102},[92,55118,549],{"class":151},[92,55120,51472],{"class":98},[92,55122,1269],{"class":102},[92,55124,55125],{"class":94,"line":9824},[92,55126,2166],{"class":102},[92,55128,55129],{"class":94,"line":9830},[92,55130,2379],{"emptyLinePlaceholder":17},[92,55132,55133,55136],{"class":94,"line":9844},[92,55134,55135],{"class":1942},"    .activate",[92,55137,15552],{"class":102},[92,55139,55140,55142,55144,55147],{"class":94,"line":9850},[92,55141,54864],{"class":151},[92,55143,51417],{"class":102},[92,55145,55146],{"class":151},"#f7f7f7",[92,55148,1269],{"class":102},[92,55150,55151],{"class":94,"line":9877},[92,55152,2166],{"class":102},[92,55154,55155,55157,55159],{"class":94,"line":9886},[92,55156,52397],{"class":102},[92,55158,5106],{"class":51280},[92,55160,51287],{"class":102},[92,55162,55163,55165,55167],{"class":94,"line":9892},[92,55164,51765],{"class":102},[92,55166,51314],{"class":51280},[92,55168,51287],{"class":102},[92,55170,55171],{"class":94,"line":9900},[92,55172,2379],{"emptyLinePlaceholder":17},[92,55174,55175,55177,55179],{"class":94,"line":9905},[92,55176,1013],{"class":102},[92,55178,51780],{"class":51280},[92,55180,51287],{"class":102},[92,55182,55183,55185,55187,55189,55191,55193],{"class":94,"line":16584},[92,55184,52124],{"class":102},[92,55186,51591],{"class":51280},[92,55188,53466],{"class":1942},[92,55190,148],{"class":102},[92,55192,53471],{"class":207},[92,55194,51287],{"class":102},[92,55196,55197,55199,55201,55203,55205,55208],{"class":94,"line":16590},[92,55198,51321],{"class":102},[92,55200,51591],{"class":51280},[92,55202,53466],{"class":1942},[92,55204,148],{"class":102},[92,55206,55207],{"class":207},"\"slider-wrapper\"",[92,55209,51287],{"class":102},[92,55211,55212,55215,55217,55220,55222,55225,55228,55230,55232],{"class":94,"line":16613},[92,55213,55214],{"class":102},"      \u003C",[92,55216,1441],{"class":51280},[92,55218,55219],{"class":1942}," src",[92,55221,148],{"class":102},[92,55223,55224],{"class":207},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[92,55226,55227],{"class":1942}," alt",[92,55229,148],{"class":102},[92,55231,7632],{"class":207},[92,55233,51287],{"class":102},[92,55235,55236,55238,55240],{"class":94,"line":16619},[92,55237,51756],{"class":102},[92,55239,51591],{"class":51280},[92,55241,51287],{"class":102},[92,55243,55244,55246,55248,55250,55252,55255],{"class":94,"line":16642},[92,55245,51321],{"class":102},[92,55247,51591],{"class":51280},[92,55249,53466],{"class":1942},[92,55251,148],{"class":102},[92,55253,55254],{"class":207},"\"slider-footer\"",[92,55256,51287],{"class":102},[92,55258,55259,55261,55263,55266,55268],{"class":94,"line":16656},[92,55260,55214],{"class":102},[92,55262,38],{"class":51280},[92,55264,55265],{"class":102},">对人类来说会不会太超前了?\u003C\u002F",[92,55267,38],{"class":51280},[92,55269,51287],{"class":102},[92,55271,55272,55274,55276],{"class":94,"line":16676},[92,55273,55214],{"class":102},[92,55275,1110],{"class":51280},[92,55277,51287],{"class":102},[92,55279,55280,55283,55285,55287,55289,55292,55295,55297],{"class":94,"line":16682},[92,55281,55282],{"class":102},"        \u003C",[92,55284,49],{"class":51280},[92,55286,53466],{"class":1942},[92,55288,148],{"class":102},[92,55290,55291],{"class":207},"\"activate\"",[92,55293,55294],{"class":102},">\u003C\u002F",[92,55296,49],{"class":51280},[92,55298,51287],{"class":102},[92,55300,55301,55303,55305,55307,55309],{"class":94,"line":16693},[92,55302,55282],{"class":102},[92,55304,49],{"class":51280},[92,55306,55294],{"class":102},[92,55308,49],{"class":51280},[92,55310,51287],{"class":102},[92,55312,55313,55315,55317,55319,55321],{"class":94,"line":16716},[92,55314,55282],{"class":102},[92,55316,49],{"class":51280},[92,55318,55294],{"class":102},[92,55320,49],{"class":51280},[92,55322,51287],{"class":102},[92,55324,55325,55327,55329,55331,55333],{"class":94,"line":16738},[92,55326,55282],{"class":102},[92,55328,49],{"class":51280},[92,55330,55294],{"class":102},[92,55332,49],{"class":51280},[92,55334,51287],{"class":102},[92,55336,55337,55339,55341,55343,55345],{"class":94,"line":16743},[92,55338,55282],{"class":102},[92,55340,49],{"class":51280},[92,55342,55294],{"class":102},[92,55344,49],{"class":51280},[92,55346,51287],{"class":102},[92,55348,55349,55351,55353,55355,55357],{"class":94,"line":16749},[92,55350,55282],{"class":102},[92,55352,49],{"class":51280},[92,55354,55294],{"class":102},[92,55356,49],{"class":51280},[92,55358,51287],{"class":102},[92,55360,55361,55363,55365,55367,55369],{"class":94,"line":16763},[92,55362,55282],{"class":102},[92,55364,49],{"class":51280},[92,55366,55294],{"class":102},[92,55368,49],{"class":51280},[92,55370,51287],{"class":102},[92,55372,55373,55375,55377,55379,55381],{"class":94,"line":16776},[92,55374,55282],{"class":102},[92,55376,49],{"class":51280},[92,55378,55294],{"class":102},[92,55380,49],{"class":51280},[92,55382,51287],{"class":102},[92,55384,55385,55388,55390],{"class":94,"line":16781},[92,55386,55387],{"class":102},"      \u003C\u002F",[92,55389,1110],{"class":51280},[92,55391,51287],{"class":102},[92,55393,55394,55396,55398],{"class":94,"line":16795},[92,55395,51756],{"class":102},[92,55397,51591],{"class":51280},[92,55399,51287],{"class":102},[92,55401,55402,55404,55406],{"class":94,"line":16800},[92,55403,52397],{"class":102},[92,55405,51591],{"class":51280},[92,55407,51287],{"class":102},[92,55409,55410,55412,55414],{"class":94,"line":16806},[92,55411,52124],{"class":102},[92,55413,51793],{"class":51280},[92,55415,51287],{"class":102},[92,55417,55418,55420,55423,55425],{"class":94,"line":16811},[92,55419,11201],{"class":98},[92,55421,55422],{"class":151}," arrImage",[92,55424,13544],{"class":98},[92,55426,55427],{"class":102}," [\n",[92,55429,55430,55433,55436,55439,55442,55445,55448],{"class":94,"line":16825},[92,55431,55432],{"class":102},"      { url: ",[92,55434,55435],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[92,55437,55438],{"class":102},", title: ",[92,55440,55441],{"class":207},"'对人类来说会不会太超前了?'",[92,55443,55444],{"class":102},", color: ",[92,55446,55447],{"class":207},"'rgba(100,67,68)'",[92,55449,55450],{"class":102}," },\n",[92,55452,55453,55455,55458,55460,55463,55465,55468],{"class":94,"line":16830},[92,55454,55432],{"class":102},[92,55456,55457],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[92,55459,55438],{"class":102},[92,55461,55462],{"class":207},"'开启剑与雪的黑暗传说!'",[92,55464,55444],{"class":102},[92,55466,55467],{"class":207},"'rgba(43,35,26)'",[92,55469,55450],{"class":102},[92,55471,55472,55474,55477,55479,55482,55484,55487],{"class":94,"line":16835},[92,55473,55432],{"class":102},[92,55475,55476],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[92,55478,55438],{"class":102},[92,55480,55481],{"class":207},"'真正的jo厨出现了!'",[92,55483,55444],{"class":102},[92,55485,55486],{"class":207},"'rgba(36,31,33)'",[92,55488,55450],{"class":102},[92,55490,55491,55493,55496,55498,55501,55503,55506],{"class":94,"line":16849},[92,55492,55432],{"class":102},[92,55494,55495],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[92,55497,55438],{"class":102},[92,55499,55500],{"class":207},"'李玉刚:让世界通过b站看到东方大国文化'",[92,55502,55444],{"class":102},[92,55504,55505],{"class":207},"'rgba(139,98,66)'",[92,55507,55450],{"class":102},[92,55509,55510,55512,55515,55517,55520,55522,55525],{"class":94,"line":16861},[92,55511,55432],{"class":102},[92,55513,55514],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[92,55516,55438],{"class":102},[92,55518,55519],{"class":207},"'快来分享你的寒假日常吧'",[92,55521,55444],{"class":102},[92,55523,55524],{"class":207},"'rgba(67,90,92)'",[92,55526,55450],{"class":102},[92,55528,55529,55531,55534,55536,55539,55541,55544],{"class":94,"line":16866},[92,55530,55432],{"class":102},[92,55532,55533],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[92,55535,55438],{"class":102},[92,55537,55538],{"class":207},"'哔哩哔哩小年YEAR'",[92,55540,55444],{"class":102},[92,55542,55543],{"class":207},"'rgba(166,131,143)'",[92,55545,55450],{"class":102},[92,55547,55548,55550,55553,55555,55558,55560,55563],{"class":94,"line":16879},[92,55549,55432],{"class":102},[92,55551,55552],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[92,55554,55438],{"class":102},[92,55556,55557],{"class":207},"'一站式解决你的电脑配置问题'",[92,55559,55444],{"class":102},[92,55561,55562],{"class":207},"'rgba(53,29,25)'",[92,55564,55450],{"class":102},[92,55566,55567,55569,55572,55574,55577,55579,55582],{"class":94,"line":16884},[92,55568,55432],{"class":102},[92,55570,55571],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[92,55573,55438],{"class":102},[92,55575,55576],{"class":207},"'谁不想和小猫咪贴贴呢?'",[92,55578,55444],{"class":102},[92,55580,55581],{"class":207},"'rgba(99,72,114)'",[92,55583,55584],{"class":102}," }\n",[92,55586,55587],{"class":94,"line":16889},[92,55588,53089],{"class":102},[92,55590,55591,55593,55596,55598,55600,55602,55604,55607],{"class":94,"line":16894},[92,55592,11201],{"class":98},[92,55594,55595],{"class":151}," img",[92,55597,13544],{"class":98},[92,55599,54376],{"class":102},[92,55601,54379],{"class":1942},[92,55603,103],{"class":102},[92,55605,55606],{"class":207},"'.slider-wrapper img'",[92,55608,109],{"class":102},[92,55610,55611,55613,55615,55617,55619,55621,55623,55626],{"class":94,"line":16907},[92,55612,11201],{"class":98},[92,55614,6805],{"class":151},[92,55616,13544],{"class":98},[92,55618,54376],{"class":102},[92,55620,54379],{"class":1942},[92,55622,103],{"class":102},[92,55624,55625],{"class":207},"'.slider-footer p'",[92,55627,109],{"class":102},[92,55629,55630,55632,55635,55637,55639,55641,55643,55646],{"class":94,"line":16912},[92,55631,11201],{"class":98},[92,55633,55634],{"class":151}," color",[92,55636,13544],{"class":98},[92,55638,54376],{"class":102},[92,55640,54379],{"class":1942},[92,55642,103],{"class":102},[92,55644,55645],{"class":207},"'.slider-footer'",[92,55647,109],{"class":102},[92,55649,55650,55652,55655,55657,55659,55662,55664,55667],{"class":94,"line":32614},[92,55651,11201],{"class":98},[92,55653,55654],{"class":151}," lis",[92,55656,13544],{"class":98},[92,55658,54376],{"class":102},[92,55660,55661],{"class":1942},"querySelectorAll",[92,55663,103],{"class":102},[92,55665,55666],{"class":207},"'.slider-footer ul li'",[92,55668,109],{"class":102},[92,55670,55671,55673,55675,55677],{"class":94,"line":32620},[92,55672,52199],{"class":98},[92,55674,9418],{"class":102},[92,55676,148],{"class":98},[92,55678,55679],{"class":151}," 1\n",[92,55681,55682,55684,55687,55689,55691,55693,55695],{"class":94,"line":32626},[92,55683,52199],{"class":98},[92,55685,55686],{"class":102}," timer ",[92,55688,148],{"class":98},[92,55690,54424],{"class":1942},[92,55692,103],{"class":102},[92,55694,54429],{"class":98},[92,55696,54432],{"class":102},[92,55698,55699,55702,55704],{"class":94,"line":32632},[92,55700,55701],{"class":102},"      img.src ",[92,55703,148],{"class":98},[92,55705,55706],{"class":102}," arrImage[i].url\n",[92,55708,55709,55712,55714],{"class":94,"line":32638},[92,55710,55711],{"class":102},"      p.innerHTML ",[92,55713,148],{"class":98},[92,55715,55716],{"class":102}," arrImage[i].title\n",[92,55718,55719,55722,55724],{"class":94,"line":32649},[92,55720,55721],{"class":102},"      color.style.backgroundColor ",[92,55723,148],{"class":98},[92,55725,55726],{"class":102}," arrImage[i].color\n",[92,55728,55729],{"class":94,"line":32655},[92,55730,55731],{"class":161},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[92,55733,55734],{"class":94,"line":32675},[92,55735,55736],{"class":161},"      \u002F\u002F li.classList.add('activate')\n",[92,55738,55739],{"class":94,"line":32681},[92,55740,55741],{"class":161},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[92,55743,55744],{"class":94,"line":32692},[92,55745,55746],{"class":161},"      \u002F\u002F lis[i].classList.remove('activate')\n",[92,55748,55749,55752,55754,55756,55759,55762,55765,55767,55770],{"class":94,"line":32698},[92,55750,55751],{"class":102},"      document.",[92,55753,54379],{"class":1942},[92,55755,103],{"class":102},[92,55757,55758],{"class":207},"'.activate'",[92,55760,55761],{"class":102},")?.classList.",[92,55763,55764],{"class":1942},"toggle",[92,55766,103],{"class":102},[92,55768,55769],{"class":207},"'activate'",[92,55771,109],{"class":102},[92,55773,55774,55777,55779,55781,55783],{"class":94,"line":32704},[92,55775,55776],{"class":102},"      lis[i].classList.",[92,55778,5314],{"class":1942},[92,55780,103],{"class":102},[92,55782,55769],{"class":207},[92,55784,109],{"class":102},[92,55786,55787],{"class":94,"line":32710},[92,55788,2379],{"emptyLinePlaceholder":17},[92,55790,55791,55794,55796,55798,55800,55802,55804,55806,55809],{"class":94,"line":32716},[92,55792,55793],{"class":102},"      i ",[92,55795,148],{"class":98},[92,55797,54463],{"class":102},[92,55799,584],{"class":98},[92,55801,25099],{"class":151},[92,55803,13694],{"class":102},[92,55805,431],{"class":98},[92,55807,55808],{"class":102}," arrImage.",[92,55810,55811],{"class":151},"length\n",[92,55813,55814],{"class":94,"line":32722},[92,55815,2379],{"emptyLinePlaceholder":17},[92,55817,55818,55820,55822],{"class":94,"line":32728},[92,55819,54515],{"class":102},[92,55821,6390],{"class":151},[92,55823,109],{"class":102},[92,55825,55826,55828,55830],{"class":94,"line":32734},[92,55827,52397],{"class":102},[92,55829,51793],{"class":51280},[92,55831,51287],{"class":102},[92,55833,55834,55836,55838],{"class":94,"line":32754},[92,55835,51765],{"class":102},[92,55837,51780],{"class":51280},[92,55839,51287],{"class":102},[92,55841,55842],{"class":94,"line":32760},[92,55843,2379],{"emptyLinePlaceholder":17},[92,55845,55846,55848,55850],{"class":94,"line":32776},[92,55847,51765],{"class":102},[92,55849,50615],{"class":51280},[92,55851,51287],{"class":102},[38,55853,55854],{},[1441,55855],{"alt":10,"src":55856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[38,55858,55859],{},"?.就是短路保护,确保输出正常进行",[38,55861,55862],{},"不要忘记取余%,有时候可以用",[38,55864,55865],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[46,55867,55868],{"start":11},[49,55869,55870],{},"法2",[83,55872,55874],{"className":50613,"code":55873,"language":50615,"meta":10,"style":10},"\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",[89,55875,55876,55886,55900,55904,55912,55926,55946,55958,55966,55972,55982,55992,55996,56000,56006,56016,56020,56024,56030,56040,56052,56064,56078,56082,56086,56092,56102,56112,56122,56134,56146,56156,56160,56164,56172,56182,56194,56206,56218,56222,56226,56232,56242,56254,56266,56276,56286,56296,56308,56320,56324,56328,56336,56348,56360,56386,56398,56402,56406,56412,56422,56426,56434,56442,56446,56454,56468,56482,56502,56510,56524,56536,56544,56562,56574,56586,56598,56610,56622,56634,56646,56654,56662,56670,56678,56689,56705,56721,56737,56753,56769,56785,56801,56817,56821,56826,56844,56862,56872,56877,56882,56893,56899,56914,56923,56927,56932,56941,56946,56955,56960,56965,56970,56993,57023,57027,57035,57039,57047,57055,57059],{"__ignoreMap":10},[92,55877,55878,55880,55882,55884],{"class":94,"line":95},[92,55879,51277],{"class":102},[92,55881,51281],{"class":51280},[92,55883,51284],{"class":1942},[92,55885,51287],{"class":102},[92,55887,55888,55890,55892,55894,55896,55898],{"class":94,"line":11},[92,55889,1013],{"class":102},[92,55891,50615],{"class":51280},[92,55893,51296],{"class":1942},[92,55895,148],{"class":102},[92,55897,51301],{"class":207},[92,55899,51287],{"class":102},[92,55901,55902],{"class":94,"line":1158},[92,55903,2379],{"emptyLinePlaceholder":17},[92,55905,55906,55908,55910],{"class":94,"line":1173},[92,55907,1013],{"class":102},[92,55909,51314],{"class":51280},[92,55911,51287],{"class":102},[92,55913,55914,55916,55918,55920,55922,55924],{"class":94,"line":1179},[92,55915,52124],{"class":102},[92,55917,51324],{"class":51280},[92,55919,51327],{"class":1942},[92,55921,148],{"class":102},[92,55923,51332],{"class":207},[92,55925,51287],{"class":102},[92,55927,55928,55930,55932,55934,55936,55938,55940,55942,55944],{"class":94,"line":1193},[92,55929,52124],{"class":102},[92,55931,51324],{"class":51280},[92,55933,14900],{"class":1942},[92,55935,148],{"class":102},[92,55937,51371],{"class":207},[92,55939,51351],{"class":1942},[92,55941,148],{"class":102},[92,55943,51378],{"class":207},[92,55945,51287],{"class":102},[92,55947,55948,55950,55952,55954,55956],{"class":94,"line":1199},[92,55949,52124],{"class":102},[92,55951,51387],{"class":51280},[92,55953,51390],{"class":102},[92,55955,51387],{"class":51280},[92,55957,51287],{"class":102},[92,55959,55960,55962,55964],{"class":94,"line":1290},[92,55961,52124],{"class":102},[92,55963,5106],{"class":51280},[92,55965,51287],{"class":102},[92,55967,55968,55970],{"class":94,"line":1296},[92,55969,6383],{"class":51280},[92,55971,15552],{"class":102},[92,55973,55974,55976,55978,55980],{"class":94,"line":1308},[92,55975,54675],{"class":151},[92,55977,51417],{"class":102},[92,55979,294],{"class":151},[92,55981,1269],{"class":102},[92,55983,55984,55986,55988,55990],{"class":94,"line":1591},[92,55985,54686],{"class":151},[92,55987,51417],{"class":102},[92,55989,294],{"class":151},[92,55991,1269],{"class":102},[92,55993,55994],{"class":94,"line":1596},[92,55995,2166],{"class":102},[92,55997,55998],{"class":94,"line":1602},[92,55999,2379],{"emptyLinePlaceholder":17},[92,56001,56002,56004],{"class":94,"line":1607},[92,56003,54705],{"class":51280},[92,56005,15552],{"class":102},[92,56007,56008,56010,56012,56014],{"class":94,"line":1621},[92,56009,54712],{"class":151},[92,56011,51417],{"class":102},[92,56013,54717],{"class":151},[92,56015,1269],{"class":102},[92,56017,56018],{"class":94,"line":1626},[92,56019,2166],{"class":102},[92,56021,56022],{"class":94,"line":1632},[92,56023,2379],{"emptyLinePlaceholder":17},[92,56025,56026,56028],{"class":94,"line":1653},[92,56027,54732],{"class":1942},[92,56029,15552],{"class":102},[92,56031,56032,56034,56036,56038],{"class":94,"line":1658},[92,56033,54739],{"class":151},[92,56035,51417],{"class":102},[92,56037,54744],{"class":151},[92,56039,1269],{"class":102},[92,56041,56042,56044,56046,56048,56050],{"class":94,"line":1672},[92,56043,54751],{"class":151},[92,56045,51417],{"class":102},[92,56047,54756],{"class":151},[92,56049,51472],{"class":98},[92,56051,1269],{"class":102},[92,56053,56054,56056,56058,56060,56062],{"class":94,"line":1677},[92,56055,54765],{"class":151},[92,56057,51417],{"class":102},[92,56059,1518],{"class":151},[92,56061,51472],{"class":98},[92,56063,1269],{"class":102},[92,56065,56066,56068,56070,56072,56074,56076],{"class":94,"line":1706},[92,56067,54686],{"class":151},[92,56069,51417],{"class":102},[92,56071,414],{"class":151},[92,56073,51472],{"class":98},[92,56075,51536],{"class":151},[92,56077,1269],{"class":102},[92,56079,56080],{"class":94,"line":1711},[92,56081,2166],{"class":102},[92,56083,56084],{"class":94,"line":1728},[92,56085,2379],{"emptyLinePlaceholder":17},[92,56087,56088,56090],{"class":94,"line":1733},[92,56089,54800],{"class":1942},[92,56091,15552],{"class":102},[92,56093,56094,56096,56098,56100],{"class":94,"line":1738},[92,56095,54739],{"class":151},[92,56097,51417],{"class":102},[92,56099,54811],{"class":151},[92,56101,1269],{"class":102},[92,56103,56104,56106,56108,56110],{"class":94,"line":1743},[92,56105,54818],{"class":151},[92,56107,51417],{"class":102},[92,56109,294],{"class":151},[92,56111,1269],{"class":102},[92,56113,56114,56116,56118,56120],{"class":94,"line":1757},[92,56115,54829],{"class":151},[92,56117,51417],{"class":102},[92,56119,294],{"class":151},[92,56121,1269],{"class":102},[92,56123,56124,56126,56128,56130,56132],{"class":94,"line":1762},[92,56125,54751],{"class":151},[92,56127,51417],{"class":102},[92,56129,414],{"class":151},[92,56131,431],{"class":98},[92,56133,1269],{"class":102},[92,56135,56136,56138,56140,56142,56144],{"class":94,"line":2556},[92,56137,54765],{"class":151},[92,56139,51417],{"class":102},[92,56141,678],{"class":151},[92,56143,431],{"class":98},[92,56145,1269],{"class":102},[92,56147,56148,56150,56152,56154],{"class":94,"line":2570},[92,56149,54864],{"class":151},[92,56151,51417],{"class":102},[92,56153,54869],{"class":151},[92,56155,1269],{"class":102},[92,56157,56158],{"class":94,"line":2578},[92,56159,2166],{"class":102},[92,56161,56162],{"class":94,"line":2583},[92,56163,2379],{"emptyLinePlaceholder":17},[92,56165,56166,56168,56170],{"class":94,"line":2589},[92,56167,54800],{"class":1942},[92,56169,6805],{"class":51280},[92,56171,15552],{"class":102},[92,56173,56174,56176,56178,56180],{"class":94,"line":2595},[92,56175,54739],{"class":151},[92,56177,51417],{"class":102},[92,56179,54811],{"class":151},[92,56181,1269],{"class":102},[92,56183,56184,56186,56188,56190,56192],{"class":94,"line":2600},[92,56185,54902],{"class":151},[92,56187,51417],{"class":102},[92,56189,1004],{"class":151},[92,56191,51472],{"class":98},[92,56193,1269],{"class":102},[92,56195,56196,56198,56200,56202,56204],{"class":94,"line":7928},[92,56197,54818],{"class":151},[92,56199,51417],{"class":102},[92,56201,803],{"class":151},[92,56203,51472],{"class":98},[92,56205,1269],{"class":102},[92,56207,56208,56210,56212,56214,56216],{"class":94,"line":7952},[92,56209,54927],{"class":151},[92,56211,51417],{"class":102},[92,56213,422],{"class":151},[92,56215,51472],{"class":98},[92,56217,1269],{"class":102},[92,56219,56220],{"class":94,"line":7957},[92,56221,2166],{"class":102},[92,56223,56224],{"class":94,"line":7963},[92,56225,2379],{"emptyLinePlaceholder":17},[92,56227,56228,56230],{"class":94,"line":7990},[92,56229,54948],{"class":51280},[92,56231,15552],{"class":102},[92,56233,56234,56236,56238,56240],{"class":94,"line":7995},[92,56235,54739],{"class":151},[92,56237,51417],{"class":102},[92,56239,54811],{"class":151},[92,56241,1269],{"class":102},[92,56243,56244,56246,56248,56250,56252],{"class":94,"line":8001},[92,56245,54927],{"class":151},[92,56247,51417],{"class":102},[92,56249,884],{"class":151},[92,56251,51472],{"class":98},[92,56253,1269],{"class":102},[92,56255,56256,56258,56260,56262,56264],{"class":94,"line":8013},[92,56257,54818],{"class":151},[92,56259,51417],{"class":102},[92,56261,803],{"class":151},[92,56263,51472],{"class":98},[92,56265,1269],{"class":102},[92,56267,56268,56270,56272,56274],{"class":94,"line":8025},[92,56269,54989],{"class":151},[92,56271,51417],{"class":102},[92,56273,51457],{"class":151},[92,56275,1269],{"class":102},[92,56277,56278,56280,56282,56284],{"class":94,"line":8037},[92,56279,55000],{"class":151},[92,56281,51417],{"class":102},[92,56283,51648],{"class":151},[92,56285,1269],{"class":102},[92,56287,56288,56290,56292,56294],{"class":94,"line":9696},[92,56289,54739],{"class":151},[92,56291,51417],{"class":102},[92,56293,54811],{"class":151},[92,56295,1269],{"class":102},[92,56297,56298,56300,56302,56304,56306],{"class":94,"line":9721},[92,56299,54751],{"class":151},[92,56301,51417],{"class":102},[92,56303,3971],{"class":151},[92,56305,51472],{"class":98},[92,56307,1269],{"class":102},[92,56309,56310,56312,56314,56316,56318],{"class":94,"line":9744},[92,56311,54765],{"class":151},[92,56313,51417],{"class":102},[92,56315,803],{"class":151},[92,56317,51472],{"class":98},[92,56319,1269],{"class":102},[92,56321,56322],{"class":94,"line":9768},[92,56323,2166],{"class":102},[92,56325,56326],{"class":94,"line":9773},[92,56327,2379],{"emptyLinePlaceholder":17},[92,56329,56330,56332,56334],{"class":94,"line":9778},[92,56331,54948],{"class":51280},[92,56333,55055],{"class":51280},[92,56335,15552],{"class":102},[92,56337,56338,56340,56342,56344,56346],{"class":94,"line":9783},[92,56339,54751],{"class":151},[92,56341,51417],{"class":102},[92,56343,803],{"class":151},[92,56345,51472],{"class":98},[92,56347,1269],{"class":102},[92,56349,56350,56352,56354,56356,56358],{"class":94,"line":9792},[92,56351,54765],{"class":151},[92,56353,51417],{"class":102},[92,56355,803],{"class":151},[92,56357,51472],{"class":98},[92,56359,1269],{"class":102},[92,56361,56362,56364,56366,56368,56370,56372,56374,56376,56378,56380,56382,56384],{"class":94,"line":9797},[92,56363,54864],{"class":151},[92,56365,51417],{"class":102},[92,56367,55090],{"class":151},[92,56369,103],{"class":102},[92,56371,294],{"class":151},[92,56373,12415],{"class":102},[92,56375,294],{"class":151},[92,56377,12415],{"class":102},[92,56379,294],{"class":151},[92,56381,12415],{"class":102},[92,56383,55107],{"class":151},[92,56385,2698],{"class":102},[92,56387,56388,56390,56392,56394,56396],{"class":94,"line":9803},[92,56389,55114],{"class":151},[92,56391,51417],{"class":102},[92,56393,549],{"class":151},[92,56395,51472],{"class":98},[92,56397,1269],{"class":102},[92,56399,56400],{"class":94,"line":9824},[92,56401,2166],{"class":102},[92,56403,56404],{"class":94,"line":9830},[92,56405,2379],{"emptyLinePlaceholder":17},[92,56407,56408,56410],{"class":94,"line":9844},[92,56409,55135],{"class":1942},[92,56411,15552],{"class":102},[92,56413,56414,56416,56418,56420],{"class":94,"line":9850},[92,56415,54864],{"class":151},[92,56417,51417],{"class":102},[92,56419,55146],{"class":151},[92,56421,1269],{"class":102},[92,56423,56424],{"class":94,"line":9877},[92,56425,2166],{"class":102},[92,56427,56428,56430,56432],{"class":94,"line":9886},[92,56429,52397],{"class":102},[92,56431,5106],{"class":51280},[92,56433,51287],{"class":102},[92,56435,56436,56438,56440],{"class":94,"line":9892},[92,56437,51765],{"class":102},[92,56439,51314],{"class":51280},[92,56441,51287],{"class":102},[92,56443,56444],{"class":94,"line":9900},[92,56445,2379],{"emptyLinePlaceholder":17},[92,56447,56448,56450,56452],{"class":94,"line":9905},[92,56449,1013],{"class":102},[92,56451,51780],{"class":51280},[92,56453,51287],{"class":102},[92,56455,56456,56458,56460,56462,56464,56466],{"class":94,"line":16584},[92,56457,52124],{"class":102},[92,56459,51591],{"class":51280},[92,56461,53466],{"class":1942},[92,56463,148],{"class":102},[92,56465,53471],{"class":207},[92,56467,51287],{"class":102},[92,56469,56470,56472,56474,56476,56478,56480],{"class":94,"line":16590},[92,56471,51321],{"class":102},[92,56473,51591],{"class":51280},[92,56475,53466],{"class":1942},[92,56477,148],{"class":102},[92,56479,55207],{"class":207},[92,56481,51287],{"class":102},[92,56483,56484,56486,56488,56490,56492,56494,56496,56498,56500],{"class":94,"line":16613},[92,56485,55214],{"class":102},[92,56487,1441],{"class":51280},[92,56489,55219],{"class":1942},[92,56491,148],{"class":102},[92,56493,55224],{"class":207},[92,56495,55227],{"class":1942},[92,56497,148],{"class":102},[92,56499,7632],{"class":207},[92,56501,51287],{"class":102},[92,56503,56504,56506,56508],{"class":94,"line":16619},[92,56505,51756],{"class":102},[92,56507,51591],{"class":51280},[92,56509,51287],{"class":102},[92,56511,56512,56514,56516,56518,56520,56522],{"class":94,"line":16642},[92,56513,51321],{"class":102},[92,56515,51591],{"class":51280},[92,56517,53466],{"class":1942},[92,56519,148],{"class":102},[92,56521,55254],{"class":207},[92,56523,51287],{"class":102},[92,56525,56526,56528,56530,56532,56534],{"class":94,"line":16656},[92,56527,55214],{"class":102},[92,56529,38],{"class":51280},[92,56531,55265],{"class":102},[92,56533,38],{"class":51280},[92,56535,51287],{"class":102},[92,56537,56538,56540,56542],{"class":94,"line":16676},[92,56539,55214],{"class":102},[92,56541,1110],{"class":51280},[92,56543,51287],{"class":102},[92,56545,56546,56548,56550,56552,56554,56556,56558,56560],{"class":94,"line":16682},[92,56547,55282],{"class":102},[92,56549,49],{"class":51280},[92,56551,53466],{"class":1942},[92,56553,148],{"class":102},[92,56555,55291],{"class":207},[92,56557,55294],{"class":102},[92,56559,49],{"class":51280},[92,56561,51287],{"class":102},[92,56563,56564,56566,56568,56570,56572],{"class":94,"line":16693},[92,56565,55282],{"class":102},[92,56567,49],{"class":51280},[92,56569,55294],{"class":102},[92,56571,49],{"class":51280},[92,56573,51287],{"class":102},[92,56575,56576,56578,56580,56582,56584],{"class":94,"line":16716},[92,56577,55282],{"class":102},[92,56579,49],{"class":51280},[92,56581,55294],{"class":102},[92,56583,49],{"class":51280},[92,56585,51287],{"class":102},[92,56587,56588,56590,56592,56594,56596],{"class":94,"line":16738},[92,56589,55282],{"class":102},[92,56591,49],{"class":51280},[92,56593,55294],{"class":102},[92,56595,49],{"class":51280},[92,56597,51287],{"class":102},[92,56599,56600,56602,56604,56606,56608],{"class":94,"line":16743},[92,56601,55282],{"class":102},[92,56603,49],{"class":51280},[92,56605,55294],{"class":102},[92,56607,49],{"class":51280},[92,56609,51287],{"class":102},[92,56611,56612,56614,56616,56618,56620],{"class":94,"line":16749},[92,56613,55282],{"class":102},[92,56615,49],{"class":51280},[92,56617,55294],{"class":102},[92,56619,49],{"class":51280},[92,56621,51287],{"class":102},[92,56623,56624,56626,56628,56630,56632],{"class":94,"line":16763},[92,56625,55282],{"class":102},[92,56627,49],{"class":51280},[92,56629,55294],{"class":102},[92,56631,49],{"class":51280},[92,56633,51287],{"class":102},[92,56635,56636,56638,56640,56642,56644],{"class":94,"line":16776},[92,56637,55282],{"class":102},[92,56639,49],{"class":51280},[92,56641,55294],{"class":102},[92,56643,49],{"class":51280},[92,56645,51287],{"class":102},[92,56647,56648,56650,56652],{"class":94,"line":16781},[92,56649,55387],{"class":102},[92,56651,1110],{"class":51280},[92,56653,51287],{"class":102},[92,56655,56656,56658,56660],{"class":94,"line":16795},[92,56657,51756],{"class":102},[92,56659,51591],{"class":51280},[92,56661,51287],{"class":102},[92,56663,56664,56666,56668],{"class":94,"line":16800},[92,56665,52397],{"class":102},[92,56667,51591],{"class":51280},[92,56669,51287],{"class":102},[92,56671,56672,56674,56676],{"class":94,"line":16806},[92,56673,52124],{"class":102},[92,56675,51793],{"class":51280},[92,56677,51287],{"class":102},[92,56679,56680,56682,56685,56687],{"class":94,"line":16811},[92,56681,11201],{"class":98},[92,56683,56684],{"class":151}," sliderData",[92,56686,13544],{"class":98},[92,56688,55427],{"class":102},[92,56690,56691,56693,56695,56697,56699,56701,56703],{"class":94,"line":16825},[92,56692,55432],{"class":102},[92,56694,55435],{"class":207},[92,56696,55438],{"class":102},[92,56698,55441],{"class":207},[92,56700,55444],{"class":102},[92,56702,55447],{"class":207},[92,56704,55450],{"class":102},[92,56706,56707,56709,56711,56713,56715,56717,56719],{"class":94,"line":16830},[92,56708,55432],{"class":102},[92,56710,55457],{"class":207},[92,56712,55438],{"class":102},[92,56714,55462],{"class":207},[92,56716,55444],{"class":102},[92,56718,55467],{"class":207},[92,56720,55450],{"class":102},[92,56722,56723,56725,56727,56729,56731,56733,56735],{"class":94,"line":16835},[92,56724,55432],{"class":102},[92,56726,55476],{"class":207},[92,56728,55438],{"class":102},[92,56730,55481],{"class":207},[92,56732,55444],{"class":102},[92,56734,55486],{"class":207},[92,56736,55450],{"class":102},[92,56738,56739,56741,56743,56745,56747,56749,56751],{"class":94,"line":16849},[92,56740,55432],{"class":102},[92,56742,55495],{"class":207},[92,56744,55438],{"class":102},[92,56746,55500],{"class":207},[92,56748,55444],{"class":102},[92,56750,55505],{"class":207},[92,56752,55450],{"class":102},[92,56754,56755,56757,56759,56761,56763,56765,56767],{"class":94,"line":16861},[92,56756,55432],{"class":102},[92,56758,55514],{"class":207},[92,56760,55438],{"class":102},[92,56762,55519],{"class":207},[92,56764,55444],{"class":102},[92,56766,55524],{"class":207},[92,56768,55450],{"class":102},[92,56770,56771,56773,56775,56777,56779,56781,56783],{"class":94,"line":16866},[92,56772,55432],{"class":102},[92,56774,55533],{"class":207},[92,56776,55438],{"class":102},[92,56778,55538],{"class":207},[92,56780,55444],{"class":102},[92,56782,55543],{"class":207},[92,56784,55450],{"class":102},[92,56786,56787,56789,56791,56793,56795,56797,56799],{"class":94,"line":16879},[92,56788,55432],{"class":102},[92,56790,55552],{"class":207},[92,56792,55438],{"class":102},[92,56794,55557],{"class":207},[92,56796,55444],{"class":102},[92,56798,55562],{"class":207},[92,56800,55450],{"class":102},[92,56802,56803,56805,56807,56809,56811,56813,56815],{"class":94,"line":16884},[92,56804,55432],{"class":102},[92,56806,55571],{"class":207},[92,56808,55438],{"class":102},[92,56810,55576],{"class":207},[92,56812,55444],{"class":102},[92,56814,55581],{"class":207},[92,56816,55584],{"class":102},[92,56818,56819],{"class":94,"line":16889},[92,56820,53089],{"class":102},[92,56822,56823],{"class":94,"line":16894},[92,56824,56825],{"class":161},"    \u002F\u002F 1.获取元素\n",[92,56827,56828,56830,56832,56834,56836,56838,56840,56842],{"class":94,"line":16907},[92,56829,11201],{"class":98},[92,56831,55595],{"class":151},[92,56833,13544],{"class":98},[92,56835,54376],{"class":102},[92,56837,54379],{"class":1942},[92,56839,103],{"class":102},[92,56841,55606],{"class":207},[92,56843,109],{"class":102},[92,56845,56846,56848,56850,56852,56854,56856,56858,56860],{"class":94,"line":16912},[92,56847,11201],{"class":98},[92,56849,6805],{"class":151},[92,56851,13544],{"class":98},[92,56853,54376],{"class":102},[92,56855,54379],{"class":1942},[92,56857,103],{"class":102},[92,56859,55625],{"class":207},[92,56861,109],{"class":102},[92,56863,56864,56866,56868,56870],{"class":94,"line":32614},[92,56865,52199],{"class":98},[92,56867,9418],{"class":102},[92,56869,148],{"class":98},[92,56871,47314],{"class":151},[92,56873,56874],{"class":94,"line":32620},[92,56875,56876],{"class":161},"    \u002F\u002F 2.开启定时器\n",[92,56878,56879],{"class":94,"line":32626},[92,56880,56881],{"class":161},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[92,56883,56884,56887,56889,56891],{"class":94,"line":32632},[92,56885,56886],{"class":1942},"    setInterval",[92,56888,103],{"class":102},[92,56890,54429],{"class":98},[92,56892,54432],{"class":102},[92,56894,56895,56897],{"class":94,"line":32638},[92,56896,54437],{"class":102},[92,56898,2681],{"class":98},[92,56900,56901,56903,56905,56907,56910,56912],{"class":94,"line":32649},[92,56902,54460],{"class":98},[92,56904,54463],{"class":102},[92,56906,1689],{"class":98},[92,56908,56909],{"class":102}," sliderData.",[92,56911,51948],{"class":151},[92,56913,12422],{"class":102},[92,56915,56916,56919,56921],{"class":94,"line":32655},[92,56917,56918],{"class":102},"        i ",[92,56920,148],{"class":98},[92,56922,47314],{"class":151},[92,56924,56925],{"class":94,"line":32675},[92,56926,52378],{"class":102},[92,56928,56929],{"class":94,"line":32681},[92,56930,56931],{"class":161},"      \u002F\u002F 更换图片路径\n",[92,56933,56934,56936,56938],{"class":94,"line":32692},[92,56935,55701],{"class":102},[92,56937,148],{"class":98},[92,56939,56940],{"class":102}," sliderData[i].url\n",[92,56942,56943],{"class":94,"line":32698},[92,56944,56945],{"class":161},"      \u002F\u002F 把文字写到p里面\n",[92,56947,56948,56950,56952],{"class":94,"line":32704},[92,56949,55711],{"class":102},[92,56951,148],{"class":98},[92,56953,56954],{"class":102}," sliderData[i].title\n",[92,56956,56957],{"class":94,"line":32710},[92,56958,56959],{"class":161},"      \u002F\u002F 小圆点\n",[92,56961,56962],{"class":94,"line":32716},[92,56963,56964],{"class":161},"      \u002F\u002F 先删除以前的active\n",[92,56966,56967],{"class":94,"line":32722},[92,56968,56969],{"class":161},"      \u002F\u002F 只让当前li添加active\n",[92,56971,56972,56974,56976,56978,56981,56984,56987,56989,56991],{"class":94,"line":32728},[92,56973,55751],{"class":102},[92,56975,54379],{"class":1942},[92,56977,103],{"class":102},[92,56979,56980],{"class":207},"'.slider-footer .activate'",[92,56982,56983],{"class":102},").classList.",[92,56985,56986],{"class":1942},"remove",[92,56988,103],{"class":102},[92,56990,55769],{"class":207},[92,56992,109],{"class":102},[92,56994,56995,56997,56999,57001,57004,57006,57008,57010,57013,57015,57017,57019,57021],{"class":94,"line":32734},[92,56996,55751],{"class":102},[92,56998,54379],{"class":1942},[92,57000,103],{"class":102},[92,57002,57003],{"class":207},"`.slider-footer ul li:nth-child(${",[92,57005,544],{"class":102},[92,57007,45547],{"class":98},[92,57009,25099],{"class":151},[92,57011,57012],{"class":207},"})`",[92,57014,56983],{"class":102},[92,57016,5314],{"class":1942},[92,57018,103],{"class":102},[92,57020,55769],{"class":207},[92,57022,109],{"class":102},[92,57024,57025],{"class":94,"line":32754},[92,57026,2379],{"emptyLinePlaceholder":17},[92,57028,57029,57031,57033],{"class":94,"line":32760},[92,57030,54515],{"class":102},[92,57032,6390],{"class":151},[92,57034,109],{"class":102},[92,57036,57037],{"class":94,"line":32776},[92,57038,2379],{"emptyLinePlaceholder":17},[92,57040,57041,57043,57045],{"class":94,"line":32782},[92,57042,52397],{"class":102},[92,57044,51793],{"class":51280},[92,57046,51287],{"class":102},[92,57048,57049,57051,57053],{"class":94,"line":32796},[92,57050,51765],{"class":102},[92,57052,51780],{"class":51280},[92,57054,51287],{"class":102},[92,57056,57057],{"class":94,"line":32802},[92,57058,2379],{"emptyLinePlaceholder":17},[92,57060,57061,57063,57065],{"class":94,"line":32817},[92,57062,51765],{"class":102},[92,57064,50615],{"class":51280},[92,57066,51287],{"class":102},[63,57068,57070],{"id":57069},"_317-重要知识点","3.1.7 重要知识点",[38,57072,57073,57074],{},"浏览器在渲染文本时， ",[252,57075,57076],{},"没有空格或换行符就没有“断行点”",[38,57078,57079],{},[1441,57080],{"alt":10,"src":57081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[38,57083,57084],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[38,57086,57087],{},[1441,57088],{"alt":10,"src":57089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[38,57091,57092],{},[1441,57093],{"alt":10,"src":57094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[33,57096,57098],{"id":57097},"_32-dom事件基础","3.2 DOM事件基础",[63,57100,57102],{"id":57101},"_321-事件监听","3.2.1 事件监听",[38,57104,57105],{},[1441,57106],{"alt":10,"src":57107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[38,57109,57110],{},"事件监听有响应的发生",[38,57112,57113],{},[1441,57114],{"alt":10,"src":57115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[38,57117,57118],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[38,57120,57121],{},"对于有名函数,要执行的函数名后边不要加()",[63,57123,57125],{"id":57124},"_322-随机点名案例","3.2.2 随机点名案例",[83,57127,57129],{"className":50613,"code":57128,"language":50615,"meta":10,"style":10},"\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",[89,57130,57131,57141,57155,57159,57167,57181,57201,57213,57221,57227,57237,57247,57251,57255,57262,57273,57277,57281,57287,57299,57313,57323,57335,57348,57352,57356,57363,57367,57380,57392,57404,57408,57412,57416,57423,57433,57437,57441,57450,57462,57474,57489,57493,57501,57509,57513,57521,57534,57548,57561,57581,57589,57604,57624,57644,57652,57656,57664,57669,57705,57725,57730,57749,57754,57765,57770,57781,57786,57805,57820,57825,57851,57861,57870,57875,57891,57896,57901,57906,57921,57925,57929,57934,57953,57970,57978,57983,57998,58002,58006,58014,58022,58026],{"__ignoreMap":10},[92,57132,57133,57135,57137,57139],{"class":94,"line":95},[92,57134,51277],{"class":102},[92,57136,51281],{"class":51280},[92,57138,51284],{"class":1942},[92,57140,51287],{"class":102},[92,57142,57143,57145,57147,57149,57151,57153],{"class":94,"line":11},[92,57144,1013],{"class":102},[92,57146,50615],{"class":51280},[92,57148,51296],{"class":1942},[92,57150,148],{"class":102},[92,57152,51301],{"class":207},[92,57154,51287],{"class":102},[92,57156,57157],{"class":94,"line":1158},[92,57158,2379],{"emptyLinePlaceholder":17},[92,57160,57161,57163,57165],{"class":94,"line":1173},[92,57162,1013],{"class":102},[92,57164,51314],{"class":51280},[92,57166,51287],{"class":102},[92,57168,57169,57171,57173,57175,57177,57179],{"class":94,"line":1179},[92,57170,52124],{"class":102},[92,57172,51324],{"class":51280},[92,57174,51327],{"class":1942},[92,57176,148],{"class":102},[92,57178,51332],{"class":207},[92,57180,51287],{"class":102},[92,57182,57183,57185,57187,57189,57191,57193,57195,57197,57199],{"class":94,"line":1193},[92,57184,52124],{"class":102},[92,57186,51324],{"class":51280},[92,57188,14900],{"class":1942},[92,57190,148],{"class":102},[92,57192,51371],{"class":207},[92,57194,51351],{"class":1942},[92,57196,148],{"class":102},[92,57198,51378],{"class":207},[92,57200,51287],{"class":102},[92,57202,57203,57205,57207,57209,57211],{"class":94,"line":1199},[92,57204,52124],{"class":102},[92,57206,51387],{"class":51280},[92,57208,51390],{"class":102},[92,57210,51387],{"class":51280},[92,57212,51287],{"class":102},[92,57214,57215,57217,57219],{"class":94,"line":1290},[92,57216,52124],{"class":102},[92,57218,5106],{"class":51280},[92,57220,51287],{"class":102},[92,57222,57223,57225],{"class":94,"line":1296},[92,57224,6383],{"class":51280},[92,57226,15552],{"class":102},[92,57228,57229,57231,57233,57235],{"class":94,"line":1308},[92,57230,54686],{"class":151},[92,57232,51417],{"class":102},[92,57234,294],{"class":151},[92,57236,1269],{"class":102},[92,57238,57239,57241,57243,57245],{"class":94,"line":1591},[92,57240,54675],{"class":151},[92,57242,51417],{"class":102},[92,57244,294],{"class":151},[92,57246,1269],{"class":102},[92,57248,57249],{"class":94,"line":1596},[92,57250,2166],{"class":102},[92,57252,57253],{"class":94,"line":1602},[92,57254,2379],{"emptyLinePlaceholder":17},[92,57256,57257,57260],{"class":94,"line":1607},[92,57258,57259],{"class":51280},"    h2",[92,57261,15552],{"class":102},[92,57263,57264,57267,57269,57271],{"class":94,"line":1621},[92,57265,57266],{"class":151},"      text-align",[92,57268,51417],{"class":102},[92,57270,51572],{"class":151},[92,57272,1269],{"class":102},[92,57274,57275],{"class":94,"line":1626},[92,57276,2166],{"class":102},[92,57278,57279],{"class":94,"line":1632},[92,57280,2379],{"emptyLinePlaceholder":17},[92,57282,57283,57285],{"class":94,"line":1653},[92,57284,54732],{"class":1942},[92,57286,15552],{"class":102},[92,57288,57289,57291,57293,57295,57297],{"class":94,"line":1658},[92,57290,54751],{"class":151},[92,57292,51417],{"class":102},[92,57294,1518],{"class":151},[92,57296,51472],{"class":98},[92,57298,1269],{"class":102},[92,57300,57301,57303,57305,57307,57309,57311],{"class":94,"line":1672},[92,57302,54686],{"class":151},[92,57304,51417],{"class":102},[92,57306,759],{"class":151},[92,57308,51472],{"class":98},[92,57310,51536],{"class":151},[92,57312,1269],{"class":102},[92,57314,57315,57317,57319,57321],{"class":94,"line":1677},[92,57316,54989],{"class":151},[92,57318,51417],{"class":102},[92,57320,51457],{"class":151},[92,57322,1269],{"class":102},[92,57324,57325,57327,57329,57331,57333],{"class":94,"line":1706},[92,57326,54902],{"class":151},[92,57328,51417],{"class":102},[92,57330,928],{"class":151},[92,57332,51472],{"class":98},[92,57334,1269],{"class":102},[92,57336,57337,57340,57342,57344,57346],{"class":94,"line":1711},[92,57338,57339],{"class":151},"      line-height",[92,57341,51417],{"class":102},[92,57343,504],{"class":151},[92,57345,51472],{"class":98},[92,57347,1269],{"class":102},[92,57349,57350],{"class":94,"line":1728},[92,57351,2166],{"class":102},[92,57353,57354],{"class":94,"line":1733},[92,57355,2379],{"emptyLinePlaceholder":17},[92,57357,57358,57361],{"class":94,"line":1738},[92,57359,57360],{"class":1942},"    .qs",[92,57362,15552],{"class":102},[92,57364,57365],{"class":94,"line":1743},[92,57366,2379],{"emptyLinePlaceholder":17},[92,57368,57369,57371,57373,57376,57378],{"class":94,"line":1757},[92,57370,54751],{"class":151},[92,57372,51417],{"class":102},[92,57374,57375],{"class":151},"450",[92,57377,51472],{"class":98},[92,57379,1269],{"class":102},[92,57381,57382,57384,57386,57388,57390],{"class":94,"line":1762},[92,57383,54765],{"class":151},[92,57385,51417],{"class":102},[92,57387,504],{"class":151},[92,57389,51472],{"class":98},[92,57391,1269],{"class":102},[92,57393,57394,57397,57399,57402],{"class":94,"line":2556},[92,57395,57396],{"class":151},"      color",[92,57398,51417],{"class":102},[92,57400,57401],{"class":151},"red",[92,57403,1269],{"class":102},[92,57405,57406],{"class":94,"line":2570},[92,57407,2379],{"emptyLinePlaceholder":17},[92,57409,57410],{"class":94,"line":2578},[92,57411,2166],{"class":102},[92,57413,57414],{"class":94,"line":2583},[92,57415,2379],{"emptyLinePlaceholder":17},[92,57417,57418,57421],{"class":94,"line":2589},[92,57419,57420],{"class":1942},"    .btns",[92,57422,15552],{"class":102},[92,57424,57425,57427,57429,57431],{"class":94,"line":2595},[92,57426,57266],{"class":151},[92,57428,51417],{"class":102},[92,57430,51572],{"class":151},[92,57432,1269],{"class":102},[92,57434,57435],{"class":94,"line":2600},[92,57436,2166],{"class":102},[92,57438,57439],{"class":94,"line":7928},[92,57440,2379],{"emptyLinePlaceholder":17},[92,57442,57443,57445,57448],{"class":94,"line":7952},[92,57444,57420],{"class":1942},[92,57446,57447],{"class":51280}," button",[92,57449,15552],{"class":102},[92,57451,57452,57454,57456,57458,57460],{"class":94,"line":7957},[92,57453,54751],{"class":151},[92,57455,51417],{"class":102},[92,57457,920],{"class":151},[92,57459,51472],{"class":98},[92,57461,1269],{"class":102},[92,57463,57464,57466,57468,57470,57472],{"class":94,"line":7963},[92,57465,54765],{"class":151},[92,57467,51417],{"class":102},[92,57469,376],{"class":151},[92,57471,51472],{"class":98},[92,57473,1269],{"class":102},[92,57475,57476,57478,57480,57482,57485,57487],{"class":94,"line":7990},[92,57477,54686],{"class":151},[92,57479,51417],{"class":102},[92,57481,294],{"class":151},[92,57483,57484],{"class":151}," 50",[92,57486,51472],{"class":98},[92,57488,1269],{"class":102},[92,57490,57491],{"class":94,"line":7995},[92,57492,2166],{"class":102},[92,57494,57495,57497,57499],{"class":94,"line":8001},[92,57496,52397],{"class":102},[92,57498,5106],{"class":51280},[92,57500,51287],{"class":102},[92,57502,57503,57505,57507],{"class":94,"line":8013},[92,57504,51765],{"class":102},[92,57506,51314],{"class":51280},[92,57508,51287],{"class":102},[92,57510,57511],{"class":94,"line":8025},[92,57512,2379],{"emptyLinePlaceholder":17},[92,57514,57515,57517,57519],{"class":94,"line":8037},[92,57516,1013],{"class":102},[92,57518,51780],{"class":51280},[92,57520,51287],{"class":102},[92,57522,57523,57525,57527,57530,57532],{"class":94,"line":9696},[92,57524,52124],{"class":102},[92,57526,33],{"class":51280},[92,57528,57529],{"class":102},">随机点名\u003C\u002F",[92,57531,33],{"class":51280},[92,57533,51287],{"class":102},[92,57535,57536,57538,57540,57542,57544,57546],{"class":94,"line":9721},[92,57537,52124],{"class":102},[92,57539,51591],{"class":51280},[92,57541,53466],{"class":1942},[92,57543,148],{"class":102},[92,57545,53471],{"class":207},[92,57547,51287],{"class":102},[92,57549,57550,57552,57554,57557,57559],{"class":94,"line":9744},[92,57551,51321],{"class":102},[92,57553,92],{"class":51280},[92,57555,57556],{"class":102},">名字是：\u003C\u002F",[92,57558,92],{"class":51280},[92,57560,51287],{"class":102},[92,57562,57563,57565,57567,57569,57571,57574,57577,57579],{"class":94,"line":9768},[92,57564,51321],{"class":102},[92,57566,51591],{"class":51280},[92,57568,53466],{"class":1942},[92,57570,148],{"class":102},[92,57572,57573],{"class":207},"\"qs\"",[92,57575,57576],{"class":102},">这里显示姓名\u003C\u002F",[92,57578,51591],{"class":51280},[92,57580,51287],{"class":102},[92,57582,57583,57585,57587],{"class":94,"line":9773},[92,57584,52397],{"class":102},[92,57586,51591],{"class":51280},[92,57588,51287],{"class":102},[92,57590,57591,57593,57595,57597,57599,57602],{"class":94,"line":9778},[92,57592,52124],{"class":102},[92,57594,51591],{"class":51280},[92,57596,53466],{"class":1942},[92,57598,148],{"class":102},[92,57600,57601],{"class":207},"\"btns\"",[92,57603,51287],{"class":102},[92,57605,57606,57608,57610,57612,57614,57617,57620,57622],{"class":94,"line":9783},[92,57607,51321],{"class":102},[92,57609,53867],{"class":51280},[92,57611,53466],{"class":1942},[92,57613,148],{"class":102},[92,57615,57616],{"class":207},"\"start\"",[92,57618,57619],{"class":102},">开始\u003C\u002F",[92,57621,53867],{"class":51280},[92,57623,51287],{"class":102},[92,57625,57626,57628,57630,57632,57634,57637,57640,57642],{"class":94,"line":9792},[92,57627,51321],{"class":102},[92,57629,53867],{"class":51280},[92,57631,53466],{"class":1942},[92,57633,148],{"class":102},[92,57635,57636],{"class":207},"\"end\"",[92,57638,57639],{"class":102},">结束\u003C\u002F",[92,57641,53867],{"class":51280},[92,57643,51287],{"class":102},[92,57645,57646,57648,57650],{"class":94,"line":9797},[92,57647,52397],{"class":102},[92,57649,51591],{"class":51280},[92,57651,51287],{"class":102},[92,57653,57654],{"class":94,"line":9803},[92,57655,2379],{"emptyLinePlaceholder":17},[92,57657,57658,57660,57662],{"class":94,"line":9824},[92,57659,52124],{"class":102},[92,57661,51793],{"class":51280},[92,57663,51287],{"class":102},[92,57665,57666],{"class":94,"line":9830},[92,57667,57668],{"class":161},"    \u002F\u002F 数据数组\n",[92,57670,57671,57673,57676,57678,57680,57683,57685,57688,57690,57693,57695,57698,57700,57703],{"class":94,"line":9844},[92,57672,11201],{"class":98},[92,57674,57675],{"class":151}," arr",[92,57677,13544],{"class":98},[92,57679,52206],{"class":102},[92,57681,57682],{"class":207},"'马超'",[92,57684,12415],{"class":102},[92,57686,57687],{"class":207},"'黄忠'",[92,57689,12415],{"class":102},[92,57691,57692],{"class":207},"'赵云'",[92,57694,12415],{"class":102},[92,57696,57697],{"class":207},"'关羽'",[92,57699,12415],{"class":102},[92,57701,57702],{"class":207},"'张飞'",[92,57704,33227],{"class":102},[92,57706,57707,57709,57712,57714,57716,57718,57720,57723],{"class":94,"line":9850},[92,57708,11201],{"class":98},[92,57710,57711],{"class":151}," qs",[92,57713,13544],{"class":98},[92,57715,54376],{"class":102},[92,57717,54379],{"class":1942},[92,57719,103],{"class":102},[92,57721,57722],{"class":207},"'.qs'",[92,57724,109],{"class":102},[92,57726,57727],{"class":94,"line":9877},[92,57728,57729],{"class":161},"    \u002F\u002F 1.业务1.开始按钮模块\n",[92,57731,57732,57734,57736,57738,57740,57742,57744,57747],{"class":94,"line":9886},[92,57733,11201],{"class":98},[92,57735,4163],{"class":151},[92,57737,13544],{"class":98},[92,57739,54376],{"class":102},[92,57741,54379],{"class":1942},[92,57743,103],{"class":102},[92,57745,57746],{"class":207},"'.start'",[92,57748,109],{"class":102},[92,57750,57751],{"class":94,"line":9892},[92,57752,57753],{"class":161},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[92,57755,57756,57758,57761,57763],{"class":94,"line":9900},[92,57757,52199],{"class":98},[92,57759,57760],{"class":102}," timerId ",[92,57762,148],{"class":98},[92,57764,47314],{"class":151},[92,57766,57767],{"class":94,"line":9905},[92,57768,57769],{"class":161},"    \u002F\u002F 随机号要全局变量\n",[92,57771,57772,57774,57777,57779],{"class":94,"line":16584},[92,57773,52199],{"class":98},[92,57775,57776],{"class":102}," random ",[92,57778,148],{"class":98},[92,57780,47314],{"class":151},[92,57782,57783],{"class":94,"line":16590},[92,57784,57785],{"class":161},"    \u002F\u002F 1.1 添加点击事件\n",[92,57787,57788,57791,57794,57796,57799,57801,57803],{"class":94,"line":16613},[92,57789,57790],{"class":102},"    start.",[92,57792,57793],{"class":1942},"addEventListener",[92,57795,103],{"class":102},[92,57797,57798],{"class":207},"'click'",[92,57800,12415],{"class":102},[92,57802,54429],{"class":98},[92,57804,54432],{"class":102},[92,57806,57807,57810,57812,57814,57816,57818],{"class":94,"line":16619},[92,57808,57809],{"class":102},"      timerId ",[92,57811,148],{"class":98},[92,57813,54424],{"class":1942},[92,57815,103],{"class":102},[92,57817,54429],{"class":98},[92,57819,54432],{"class":102},[92,57821,57822],{"class":94,"line":16642},[92,57823,57824],{"class":161},"        \u002F\u002F 随机数\n",[92,57826,57827,57830,57832,57835,57838,57841,57843,57845,57847,57849],{"class":94,"line":16656},[92,57828,57829],{"class":102},"        random ",[92,57831,148],{"class":98},[92,57833,57834],{"class":1942}," parseInt",[92,57836,57837],{"class":102},"(Math.",[92,57839,57840],{"class":1942},"random",[92,57842,13030],{"class":102},[92,57844,558],{"class":98},[92,57846,51945],{"class":102},[92,57848,51948],{"class":151},[92,57850,109],{"class":102},[92,57852,57853,57856,57858],{"class":94,"line":16676},[92,57854,57855],{"class":102},"        qs.innerHTML ",[92,57857,148],{"class":98},[92,57859,57860],{"class":102}," arr[random]\n",[92,57862,57863,57866,57868],{"class":94,"line":16682},[92,57864,57865],{"class":102},"      }, ",[92,57867,376],{"class":151},[92,57869,109],{"class":102},[92,57871,57872],{"class":94,"line":16693},[92,57873,57874],{"class":161},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[92,57876,57877,57879,57882,57884,57887,57889],{"class":94,"line":16716},[92,57878,54460],{"class":98},[92,57880,57881],{"class":102}," (arr.",[92,57883,51948],{"class":151},[92,57885,57886],{"class":98}," ===",[92,57888,25099],{"class":151},[92,57890,12422],{"class":102},[92,57892,57893],{"class":94,"line":16738},[92,57894,57895],{"class":161},"        \u002F\u002F start.disabled = true\n",[92,57897,57898],{"class":94,"line":16743},[92,57899,57900],{"class":161},"        \u002F\u002F end.disabled = true\n",[92,57902,57903],{"class":94,"line":16749},[92,57904,57905],{"class":161},"        \u002F\u002F 可以合起来写\n",[92,57907,57908,57911,57913,57916,57918],{"class":94,"line":16763},[92,57909,57910],{"class":102},"        start.disabled ",[92,57912,148],{"class":98},[92,57914,57915],{"class":102}," end.disabled ",[92,57917,148],{"class":98},[92,57919,57920],{"class":151}," true\n",[92,57922,57923],{"class":94,"line":16776},[92,57924,52378],{"class":102},[92,57926,57927],{"class":94,"line":16781},[92,57928,33442],{"class":102},[92,57930,57931],{"class":94,"line":16795},[92,57932,57933],{"class":161},"    \u002F\u002F 1.2 关闭按钮模块\n",[92,57935,57936,57938,57940,57942,57944,57946,57948,57951],{"class":94,"line":16800},[92,57937,11201],{"class":98},[92,57939,4179],{"class":151},[92,57941,13544],{"class":98},[92,57943,54376],{"class":102},[92,57945,54379],{"class":1942},[92,57947,103],{"class":102},[92,57949,57950],{"class":207},"'.end'",[92,57952,109],{"class":102},[92,57954,57955,57958,57960,57962,57964,57966,57968],{"class":94,"line":16806},[92,57956,57957],{"class":102},"    end.",[92,57959,57793],{"class":1942},[92,57961,103],{"class":102},[92,57963,57798],{"class":207},[92,57965,12415],{"class":102},[92,57967,54429],{"class":98},[92,57969,54432],{"class":102},[92,57971,57972,57975],{"class":94,"line":16811},[92,57973,57974],{"class":1942},"      clearInterval",[92,57976,57977],{"class":102},"(timerId)\n",[92,57979,57980],{"class":94,"line":16825},[92,57981,57982],{"class":161},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[92,57984,57985,57988,57991,57994,57996],{"class":94,"line":16830},[92,57986,57987],{"class":102},"      arr.",[92,57989,57990],{"class":1942},"splice",[92,57992,57993],{"class":102},"(random, ",[92,57995,320],{"class":151},[92,57997,109],{"class":102},[92,57999,58000],{"class":94,"line":16835},[92,58001,33442],{"class":102},[92,58003,58004],{"class":94,"line":16849},[92,58005,2379],{"emptyLinePlaceholder":17},[92,58007,58008,58010,58012],{"class":94,"line":16861},[92,58009,52397],{"class":102},[92,58011,51793],{"class":51280},[92,58013,51287],{"class":102},[92,58015,58016,58018,58020],{"class":94,"line":16866},[92,58017,51765],{"class":102},[92,58019,51780],{"class":51280},[92,58021,51287],{"class":102},[92,58023,58024],{"class":94,"line":16879},[92,58025,2379],{"emptyLinePlaceholder":17},[92,58027,58028,58030,58032],{"class":94,"line":16884},[92,58029,51765],{"class":102},[92,58031,50615],{"class":51280},[92,58033,51287],{"class":102},[38,58035,58036],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[63,58038,58040],{"id":58039},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[83,58042,58044],{"className":50613,"code":58043,"language":50615,"meta":10,"style":10},"\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",[89,58045,58046,58056,58070,58074,58082,58096,58116,58128,58136,58140,58148,58160,58168,58187,58204,58220,58230,58234,58242,58250,58254],{"__ignoreMap":10},[92,58047,58048,58050,58052,58054],{"class":94,"line":95},[92,58049,51277],{"class":102},[92,58051,51281],{"class":51280},[92,58053,51284],{"class":1942},[92,58055,51287],{"class":102},[92,58057,58058,58060,58062,58064,58066,58068],{"class":94,"line":11},[92,58059,1013],{"class":102},[92,58061,50615],{"class":51280},[92,58063,51296],{"class":1942},[92,58065,148],{"class":102},[92,58067,51301],{"class":207},[92,58069,51287],{"class":102},[92,58071,58072],{"class":94,"line":1158},[92,58073,2379],{"emptyLinePlaceholder":17},[92,58075,58076,58078,58080],{"class":94,"line":1173},[92,58077,1013],{"class":102},[92,58079,51314],{"class":51280},[92,58081,51287],{"class":102},[92,58083,58084,58086,58088,58090,58092,58094],{"class":94,"line":1179},[92,58085,52124],{"class":102},[92,58087,51324],{"class":51280},[92,58089,51327],{"class":1942},[92,58091,148],{"class":102},[92,58093,51332],{"class":207},[92,58095,51287],{"class":102},[92,58097,58098,58100,58102,58104,58106,58108,58110,58112,58114],{"class":94,"line":1193},[92,58099,52124],{"class":102},[92,58101,51324],{"class":51280},[92,58103,14900],{"class":1942},[92,58105,148],{"class":102},[92,58107,51371],{"class":207},[92,58109,51351],{"class":1942},[92,58111,148],{"class":102},[92,58113,51378],{"class":207},[92,58115,51287],{"class":102},[92,58117,58118,58120,58122,58124,58126],{"class":94,"line":1199},[92,58119,52124],{"class":102},[92,58121,51387],{"class":51280},[92,58123,51390],{"class":102},[92,58125,51387],{"class":51280},[92,58127,51287],{"class":102},[92,58129,58130,58132,58134],{"class":94,"line":1290},[92,58131,51765],{"class":102},[92,58133,51314],{"class":51280},[92,58135,51287],{"class":102},[92,58137,58138],{"class":94,"line":1296},[92,58139,2379],{"emptyLinePlaceholder":17},[92,58141,58142,58144,58146],{"class":94,"line":1308},[92,58143,1013],{"class":102},[92,58145,51780],{"class":51280},[92,58147,51287],{"class":102},[92,58149,58150,58152,58154,58156,58158],{"class":94,"line":1591},[92,58151,52124],{"class":102},[92,58153,53867],{"class":51280},[92,58155,53873],{"class":102},[92,58157,53867],{"class":51280},[92,58159,51287],{"class":102},[92,58161,58162,58164,58166],{"class":94,"line":1596},[92,58163,52124],{"class":102},[92,58165,51793],{"class":51280},[92,58167,51287],{"class":102},[92,58169,58170,58172,58174,58176,58178,58180,58182,58185],{"class":94,"line":1602},[92,58171,11201],{"class":98},[92,58173,54371],{"class":151},[92,58175,13544],{"class":98},[92,58177,54376],{"class":102},[92,58179,54379],{"class":1942},[92,58181,103],{"class":102},[92,58183,58184],{"class":207},"'button'",[92,58186,109],{"class":102},[92,58188,58189,58192,58194,58196,58198,58200,58202],{"class":94,"line":1607},[92,58190,58191],{"class":102},"    btn.",[92,58193,57793],{"class":1942},[92,58195,103],{"class":102},[92,58197,57798],{"class":207},[92,58199,12415],{"class":102},[92,58201,54429],{"class":98},[92,58203,54432],{"class":102},[92,58205,58206,58209,58211,58213,58216,58218],{"class":94,"line":1621},[92,58207,58208],{"class":98},"      const",[92,58210,2219],{"class":151},[92,58212,13544],{"class":98},[92,58214,58215],{"class":102}," Math.",[92,58217,57840],{"class":1942},[92,58219,1955],{"class":102},[92,58221,58222,58225,58228],{"class":94,"line":1626},[92,58223,58224],{"class":102},"      console.",[92,58226,58227],{"class":1942},"log",[92,58229,116],{"class":102},[92,58231,58232],{"class":94,"line":1632},[92,58233,33442],{"class":102},[92,58235,58236,58238,58240],{"class":94,"line":1653},[92,58237,52397],{"class":102},[92,58239,51793],{"class":51280},[92,58241,51287],{"class":102},[92,58243,58244,58246,58248],{"class":94,"line":1658},[92,58245,51765],{"class":102},[92,58247,51780],{"class":51280},[92,58249,51287],{"class":102},[92,58251,58252],{"class":94,"line":1672},[92,58253,2379],{"emptyLinePlaceholder":17},[92,58255,58256,58258,58260],{"class":94,"line":1677},[92,58257,51765],{"class":102},[92,58259,50615],{"class":51280},[92,58261,51287],{"class":102},[38,58263,58264],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[38,58266,58267],{},"常量不可以重新赋值",[38,58269,58270],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[83,58272,58274],{"className":50613,"code":58273,"language":50615,"meta":10,"style":10},"\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",[89,58275,58276,58286,58300,58304,58312,58326,58346,58358,58366,58370,58378,58390,58398,58409,58427,58443,58457,58465,58469,58477,58485,58489],{"__ignoreMap":10},[92,58277,58278,58280,58282,58284],{"class":94,"line":95},[92,58279,51277],{"class":102},[92,58281,51281],{"class":51280},[92,58283,51284],{"class":1942},[92,58285,51287],{"class":102},[92,58287,58288,58290,58292,58294,58296,58298],{"class":94,"line":11},[92,58289,1013],{"class":102},[92,58291,50615],{"class":51280},[92,58293,51296],{"class":1942},[92,58295,148],{"class":102},[92,58297,51301],{"class":207},[92,58299,51287],{"class":102},[92,58301,58302],{"class":94,"line":1158},[92,58303,2379],{"emptyLinePlaceholder":17},[92,58305,58306,58308,58310],{"class":94,"line":1173},[92,58307,1013],{"class":102},[92,58309,51314],{"class":51280},[92,58311,51287],{"class":102},[92,58313,58314,58316,58318,58320,58322,58324],{"class":94,"line":1179},[92,58315,52124],{"class":102},[92,58317,51324],{"class":51280},[92,58319,51327],{"class":1942},[92,58321,148],{"class":102},[92,58323,51332],{"class":207},[92,58325,51287],{"class":102},[92,58327,58328,58330,58332,58334,58336,58338,58340,58342,58344],{"class":94,"line":1193},[92,58329,52124],{"class":102},[92,58331,51324],{"class":51280},[92,58333,14900],{"class":1942},[92,58335,148],{"class":102},[92,58337,51371],{"class":207},[92,58339,51351],{"class":1942},[92,58341,148],{"class":102},[92,58343,51378],{"class":207},[92,58345,51287],{"class":102},[92,58347,58348,58350,58352,58354,58356],{"class":94,"line":1199},[92,58349,52124],{"class":102},[92,58351,51387],{"class":51280},[92,58353,51390],{"class":102},[92,58355,51387],{"class":51280},[92,58357,51287],{"class":102},[92,58359,58360,58362,58364],{"class":94,"line":1290},[92,58361,51765],{"class":102},[92,58363,51314],{"class":51280},[92,58365,51287],{"class":102},[92,58367,58368],{"class":94,"line":1296},[92,58369,2379],{"emptyLinePlaceholder":17},[92,58371,58372,58374,58376],{"class":94,"line":1308},[92,58373,1013],{"class":102},[92,58375,51780],{"class":51280},[92,58377,51287],{"class":102},[92,58379,58380,58382,58384,58386,58388],{"class":94,"line":1591},[92,58381,52124],{"class":102},[92,58383,53867],{"class":51280},[92,58385,53873],{"class":102},[92,58387,53867],{"class":51280},[92,58389,51287],{"class":102},[92,58391,58392,58394,58396],{"class":94,"line":1596},[92,58393,52124],{"class":102},[92,58395,51793],{"class":51280},[92,58397,51287],{"class":102},[92,58399,58400,58402,58404,58406],{"class":94,"line":1602},[92,58401,11201],{"class":98},[92,58403,2219],{"class":151},[92,58405,13544],{"class":98},[92,58407,58408],{"class":151}," 10\n",[92,58410,58411,58413,58415,58417,58419,58421,58423,58425],{"class":94,"line":1607},[92,58412,11201],{"class":98},[92,58414,54371],{"class":151},[92,58416,13544],{"class":98},[92,58418,54376],{"class":102},[92,58420,54379],{"class":1942},[92,58422,103],{"class":102},[92,58424,58184],{"class":207},[92,58426,109],{"class":102},[92,58428,58429,58431,58433,58435,58437,58439,58441],{"class":94,"line":1621},[92,58430,58191],{"class":102},[92,58432,57793],{"class":1942},[92,58434,103],{"class":102},[92,58436,57798],{"class":207},[92,58438,12415],{"class":102},[92,58440,54429],{"class":98},[92,58442,54432],{"class":102},[92,58444,58445,58447,58449,58451,58453,58455],{"class":94,"line":1626},[92,58446,58208],{"class":98},[92,58448,2219],{"class":151},[92,58450,13544],{"class":98},[92,58452,58215],{"class":102},[92,58454,57840],{"class":1942},[92,58456,1955],{"class":102},[92,58458,58459,58461,58463],{"class":94,"line":1632},[92,58460,58224],{"class":102},[92,58462,58227],{"class":1942},[92,58464,116],{"class":102},[92,58466,58467],{"class":94,"line":1653},[92,58468,33442],{"class":102},[92,58470,58471,58473,58475],{"class":94,"line":1658},[92,58472,52397],{"class":102},[92,58474,51793],{"class":51280},[92,58476,51287],{"class":102},[92,58478,58479,58481,58483],{"class":94,"line":1672},[92,58480,51765],{"class":102},[92,58482,51780],{"class":51280},[92,58484,51287],{"class":102},[92,58486,58487],{"class":94,"line":1677},[92,58488,2379],{"emptyLinePlaceholder":17},[92,58490,58491,58493,58495],{"class":94,"line":1706},[92,58492,51765],{"class":102},[92,58494,50615],{"class":51280},[92,58496,51287],{"class":102},[38,58498,58499],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[83,58501,58503],{"className":50613,"code":58502,"language":50615,"meta":10,"style":10},"\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",[89,58504,58505,58515,58529,58533,58541,58555,58575,58587,58595,58599,58607,58619,58627,58637,58655,58671,58684,58692,58696,58704,58712,58716],{"__ignoreMap":10},[92,58506,58507,58509,58511,58513],{"class":94,"line":95},[92,58508,51277],{"class":102},[92,58510,51281],{"class":51280},[92,58512,51284],{"class":1942},[92,58514,51287],{"class":102},[92,58516,58517,58519,58521,58523,58525,58527],{"class":94,"line":11},[92,58518,1013],{"class":102},[92,58520,50615],{"class":51280},[92,58522,51296],{"class":1942},[92,58524,148],{"class":102},[92,58526,51301],{"class":207},[92,58528,51287],{"class":102},[92,58530,58531],{"class":94,"line":1158},[92,58532,2379],{"emptyLinePlaceholder":17},[92,58534,58535,58537,58539],{"class":94,"line":1173},[92,58536,1013],{"class":102},[92,58538,51314],{"class":51280},[92,58540,51287],{"class":102},[92,58542,58543,58545,58547,58549,58551,58553],{"class":94,"line":1179},[92,58544,52124],{"class":102},[92,58546,51324],{"class":51280},[92,58548,51327],{"class":1942},[92,58550,148],{"class":102},[92,58552,51332],{"class":207},[92,58554,51287],{"class":102},[92,58556,58557,58559,58561,58563,58565,58567,58569,58571,58573],{"class":94,"line":1193},[92,58558,52124],{"class":102},[92,58560,51324],{"class":51280},[92,58562,14900],{"class":1942},[92,58564,148],{"class":102},[92,58566,51371],{"class":207},[92,58568,51351],{"class":1942},[92,58570,148],{"class":102},[92,58572,51378],{"class":207},[92,58574,51287],{"class":102},[92,58576,58577,58579,58581,58583,58585],{"class":94,"line":1199},[92,58578,52124],{"class":102},[92,58580,51387],{"class":51280},[92,58582,51390],{"class":102},[92,58584,51387],{"class":51280},[92,58586,51287],{"class":102},[92,58588,58589,58591,58593],{"class":94,"line":1290},[92,58590,51765],{"class":102},[92,58592,51314],{"class":51280},[92,58594,51287],{"class":102},[92,58596,58597],{"class":94,"line":1296},[92,58598,2379],{"emptyLinePlaceholder":17},[92,58600,58601,58603,58605],{"class":94,"line":1308},[92,58602,1013],{"class":102},[92,58604,51780],{"class":51280},[92,58606,51287],{"class":102},[92,58608,58609,58611,58613,58615,58617],{"class":94,"line":1591},[92,58610,52124],{"class":102},[92,58612,53867],{"class":51280},[92,58614,53873],{"class":102},[92,58616,53867],{"class":51280},[92,58618,51287],{"class":102},[92,58620,58621,58623,58625],{"class":94,"line":1596},[92,58622,52124],{"class":102},[92,58624,51793],{"class":51280},[92,58626,51287],{"class":102},[92,58628,58629,58631,58633,58635],{"class":94,"line":1602},[92,58630,11201],{"class":98},[92,58632,2219],{"class":151},[92,58634,13544],{"class":98},[92,58636,58408],{"class":151},[92,58638,58639,58641,58643,58645,58647,58649,58651,58653],{"class":94,"line":1607},[92,58640,11201],{"class":98},[92,58642,54371],{"class":151},[92,58644,13544],{"class":98},[92,58646,54376],{"class":102},[92,58648,54379],{"class":1942},[92,58650,103],{"class":102},[92,58652,58184],{"class":207},[92,58654,109],{"class":102},[92,58656,58657,58659,58661,58663,58665,58667,58669],{"class":94,"line":1621},[92,58658,58191],{"class":102},[92,58660,57793],{"class":1942},[92,58662,103],{"class":102},[92,58664,57798],{"class":207},[92,58666,12415],{"class":102},[92,58668,54429],{"class":98},[92,58670,54432],{"class":102},[92,58672,58673,58676,58678,58680,58682],{"class":94,"line":1626},[92,58674,58675],{"class":102},"      num ",[92,58677,148],{"class":98},[92,58679,58215],{"class":102},[92,58681,57840],{"class":1942},[92,58683,1955],{"class":102},[92,58685,58686,58688,58690],{"class":94,"line":1632},[92,58687,58224],{"class":102},[92,58689,58227],{"class":1942},[92,58691,116],{"class":102},[92,58693,58694],{"class":94,"line":1653},[92,58695,33442],{"class":102},[92,58697,58698,58700,58702],{"class":94,"line":1658},[92,58699,52397],{"class":102},[92,58701,51793],{"class":51280},[92,58703,51287],{"class":102},[92,58705,58706,58708,58710],{"class":94,"line":1672},[92,58707,51765],{"class":102},[92,58709,51780],{"class":51280},[92,58711,51287],{"class":102},[92,58713,58714],{"class":94,"line":1677},[92,58715,2379],{"emptyLinePlaceholder":17},[92,58717,58718,58720,58722],{"class":94,"line":1706},[92,58719,51765],{"class":102},[92,58721,50615],{"class":51280},[92,58723,51287],{"class":102},[38,58725,58726],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[63,58728,58730],{"id":58729},"_324-事件监听版本","3.2.4 事件监听版本",[38,58732,58733],{},[1441,58734],{"alt":10,"src":58735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[38,58737,58738],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[38,58740,58741],{},"这种方式会覆盖前边的事件监听:",[83,58743,58745],{"className":50613,"code":58744,"language":50615,"meta":10,"style":10},"\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",[89,58746,58747,58757,58771,58775,58783,58797,58817,58829,58837,58841,58849,58861,58869,58887,58901,58912,58916,58928,58938,58942,58950,58958,58962],{"__ignoreMap":10},[92,58748,58749,58751,58753,58755],{"class":94,"line":95},[92,58750,51277],{"class":102},[92,58752,51281],{"class":51280},[92,58754,51284],{"class":1942},[92,58756,51287],{"class":102},[92,58758,58759,58761,58763,58765,58767,58769],{"class":94,"line":11},[92,58760,1013],{"class":102},[92,58762,50615],{"class":51280},[92,58764,51296],{"class":1942},[92,58766,148],{"class":102},[92,58768,51301],{"class":207},[92,58770,51287],{"class":102},[92,58772,58773],{"class":94,"line":1158},[92,58774,2379],{"emptyLinePlaceholder":17},[92,58776,58777,58779,58781],{"class":94,"line":1173},[92,58778,1013],{"class":102},[92,58780,51314],{"class":51280},[92,58782,51287],{"class":102},[92,58784,58785,58787,58789,58791,58793,58795],{"class":94,"line":1179},[92,58786,52124],{"class":102},[92,58788,51324],{"class":51280},[92,58790,51327],{"class":1942},[92,58792,148],{"class":102},[92,58794,51332],{"class":207},[92,58796,51287],{"class":102},[92,58798,58799,58801,58803,58805,58807,58809,58811,58813,58815],{"class":94,"line":1193},[92,58800,52124],{"class":102},[92,58802,51324],{"class":51280},[92,58804,14900],{"class":1942},[92,58806,148],{"class":102},[92,58808,51371],{"class":207},[92,58810,51351],{"class":1942},[92,58812,148],{"class":102},[92,58814,51378],{"class":207},[92,58816,51287],{"class":102},[92,58818,58819,58821,58823,58825,58827],{"class":94,"line":1199},[92,58820,52124],{"class":102},[92,58822,51387],{"class":51280},[92,58824,51390],{"class":102},[92,58826,51387],{"class":51280},[92,58828,51287],{"class":102},[92,58830,58831,58833,58835],{"class":94,"line":1290},[92,58832,51765],{"class":102},[92,58834,51314],{"class":51280},[92,58836,51287],{"class":102},[92,58838,58839],{"class":94,"line":1296},[92,58840,2379],{"emptyLinePlaceholder":17},[92,58842,58843,58845,58847],{"class":94,"line":1308},[92,58844,1013],{"class":102},[92,58846,51780],{"class":51280},[92,58848,51287],{"class":102},[92,58850,58851,58853,58855,58857,58859],{"class":94,"line":1591},[92,58852,52124],{"class":102},[92,58854,53867],{"class":51280},[92,58856,53873],{"class":102},[92,58858,53867],{"class":51280},[92,58860,51287],{"class":102},[92,58862,58863,58865,58867],{"class":94,"line":1596},[92,58864,52124],{"class":102},[92,58866,51793],{"class":51280},[92,58868,51287],{"class":102},[92,58870,58871,58873,58875,58877,58879,58881,58883,58885],{"class":94,"line":1602},[92,58872,11201],{"class":98},[92,58874,54371],{"class":151},[92,58876,13544],{"class":98},[92,58878,54376],{"class":102},[92,58880,54379],{"class":1942},[92,58882,103],{"class":102},[92,58884,58184],{"class":207},[92,58886,109],{"class":102},[92,58888,58889,58891,58894,58896,58899],{"class":94,"line":1607},[92,58890,58191],{"class":102},[92,58892,58893],{"class":1942},"onclick",[92,58895,13544],{"class":98},[92,58897,58898],{"class":98}," function",[92,58900,54432],{"class":102},[92,58902,58903,58906,58908,58910],{"class":94,"line":1621},[92,58904,58905],{"class":1942},"      alert",[92,58907,103],{"class":102},[92,58909,575],{"class":151},[92,58911,109],{"class":102},[92,58913,58914],{"class":94,"line":1626},[92,58915,2166],{"class":102},[92,58917,58918,58920,58922,58924,58926],{"class":94,"line":1632},[92,58919,58191],{"class":102},[92,58921,58893],{"class":1942},[92,58923,13544],{"class":98},[92,58925,58898],{"class":98},[92,58927,54432],{"class":102},[92,58929,58930,58932,58934,58936],{"class":94,"line":1653},[92,58931,58905],{"class":1942},[92,58933,103],{"class":102},[92,58935,853],{"class":151},[92,58937,109],{"class":102},[92,58939,58940],{"class":94,"line":1658},[92,58941,2166],{"class":102},[92,58943,58944,58946,58948],{"class":94,"line":1672},[92,58945,52397],{"class":102},[92,58947,51793],{"class":51280},[92,58949,51287],{"class":102},[92,58951,58952,58954,58956],{"class":94,"line":1677},[92,58953,51765],{"class":102},[92,58955,51780],{"class":51280},[92,58957,51287],{"class":102},[92,58959,58960],{"class":94,"line":1706},[92,58961,2379],{"emptyLinePlaceholder":17},[92,58963,58964,58966,58968],{"class":94,"line":1711},[92,58965,51765],{"class":102},[92,58967,50615],{"class":51280},[92,58969,51287],{"class":102},[38,58971,58972],{},"只要点击就输出结果为22,前边11被覆盖了",[83,58974,58976],{"className":50613,"code":58975,"language":50615,"meta":10,"style":10},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[89,58977,58978,58983,58988,58992,58997,59002],{"__ignoreMap":10},[92,58979,58980],{"class":94,"line":95},[92,58981,58982],{"class":102},"  btn.addEventListener('click', function () {\n",[92,58984,58985],{"class":94,"line":11},[92,58986,58987],{"class":102},"      alert(11)\n",[92,58989,58990],{"class":94,"line":1158},[92,58991,33442],{"class":102},[92,58993,58994],{"class":94,"line":1173},[92,58995,58996],{"class":102},"    btn.addEventListener('click', function () {\n",[92,58998,58999],{"class":94,"line":1179},[92,59000,59001],{"class":102},"      alert(22)\n",[92,59003,59004],{"class":94,"line":1193},[92,59005,33442],{"class":102},[38,59007,59008],{},"点击第一次输出11,第二次点击为22",[63,59010,59012],{"id":59011},"_325-事件类型","3.2.5 事件类型",[38,59014,59015],{},[1441,59016],{"alt":10,"src":59017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21978,59019,59021],{"id":59020},"_3251-鼠标事件","3.2.5.1 鼠标事件",[38,59023,59024],{},"补充知识:",[38,59026,59027],{},"轮播图自动播放模块,可以使用",[38,59029,59030],{},"let timerId = setInterval(function () {",[38,59032,59033],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[38,59035,59036],{},"用js方法模拟进行点击事件,click必须加()",[38,59038,59039],{},"next.click()",[38,59041,59042],{},"}, 1000)",[38,59044,59045],{},[1441,59046],{"alt":10,"src":59047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[83,59049,59051],{"className":53047,"code":59050,"language":53049,"meta":10,"style":10},"\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",[89,59052,59053,59057,59067,59081,59085,59093,59108,59128,59148,59161,59169,59174,59179,59183,59187,59192,59197,59202,59207,59211,59215,59220,59225,59230,59234,59238,59243,59247,59252,59257,59261,59265,59270,59275,59280,59285,59290,59294,59298,59303,59308,59313,59318,59323,59327,59331,59336,59341,59346,59351,59356,59361,59366,59371,59376,59381,59385,59389,59394,59399,59403,59407,59412,59417,59421,59426,59431,59435,59439,59444,59448,59453,59458,59462,59467,59471,59475,59480,59485,59490,59495,59500,59505,59510,59514,59518,59522,59527,59532,59537,59542,59546,59554,59562,59566,59574,59589,59603,59624,59632,59646,59659,59674,59693,59705,59717,59729,59741,59753,59765,59777,59785,59800,59824,59848,59856,59864,59872,59880,59885,59890,59895,59900,59905,59910,59915,59920,59925,59930,59934,59939,59944,59949,59954,59959,59964,59969,59974,59979,59983,59988,59993,59998,60003,60008,60013,60018,60023,60028,60033,60038,60043,60047,60051,60056,60061,60066,60070,60075,60080,60085,60090,60095,60099,60104,60108,60112,60116,60120,60124,60128,60133,60138,60143,60148,60153,60158,60163,60168,60173,60177,60181,60186,60191,60196,60201,60206,60210,60215,60220,60225,60230,60235,60240,60244,60248,60253,60257,60262,60266,60271,60276,60281,60286,60291,60296,60300,60308,60316,60320],{"__ignoreMap":10},[92,59054,59055],{"class":94,"line":95},[92,59056,2379],{"emptyLinePlaceholder":17},[92,59058,59059,59061,59063,59065],{"class":94,"line":11},[92,59060,51277],{"class":102},[92,59062,51281],{"class":98},[92,59064,51284],{"class":151},[92,59066,51287],{"class":102},[92,59068,59069,59071,59073,59075,59077,59079],{"class":94,"line":1158},[92,59070,1013],{"class":102},[92,59072,50615],{"class":51280},[92,59074,51296],{"class":1942},[92,59076,148],{"class":102},[92,59078,51301],{"class":207},[92,59080,51287],{"class":102},[92,59082,59083],{"class":94,"line":1173},[92,59084,2379],{"emptyLinePlaceholder":17},[92,59086,59087,59089,59091],{"class":94,"line":1179},[92,59088,1013],{"class":102},[92,59090,51314],{"class":51280},[92,59092,51287],{"class":102},[92,59094,59095,59097,59099,59101,59103,59105],{"class":94,"line":1193},[92,59096,52124],{"class":102},[92,59098,51324],{"class":51280},[92,59100,51327],{"class":1942},[92,59102,148],{"class":102},[92,59104,51332],{"class":207},[92,59106,59107],{"class":102}," \u002F>\n",[92,59109,59110,59112,59114,59116,59118,59120,59122,59124,59126],{"class":94,"line":1199},[92,59111,52124],{"class":102},[92,59113,51324],{"class":51280},[92,59115,51343],{"class":1942},[92,59117,148],{"class":102},[92,59119,51348],{"class":207},[92,59121,51351],{"class":1942},[92,59123,148],{"class":102},[92,59125,51356],{"class":207},[92,59127,59107],{"class":102},[92,59129,59130,59132,59134,59136,59138,59140,59142,59144,59146],{"class":94,"line":1290},[92,59131,52124],{"class":102},[92,59133,51324],{"class":51280},[92,59135,14900],{"class":1942},[92,59137,148],{"class":102},[92,59139,51371],{"class":207},[92,59141,51351],{"class":1942},[92,59143,148],{"class":102},[92,59145,51378],{"class":207},[92,59147,59107],{"class":102},[92,59149,59150,59152,59154,59157,59159],{"class":94,"line":1296},[92,59151,52124],{"class":102},[92,59153,51387],{"class":51280},[92,59155,59156],{"class":102},">轮播图点击切换\u003C\u002F",[92,59158,51387],{"class":51280},[92,59160,51287],{"class":102},[92,59162,59163,59165,59167],{"class":94,"line":1308},[92,59164,52124],{"class":102},[92,59166,5106],{"class":51280},[92,59168,51287],{"class":102},[92,59170,59171],{"class":94,"line":1591},[92,59172,59173],{"class":102},"    * {\n",[92,59175,59176],{"class":94,"line":1596},[92,59177,59178],{"class":102},"      box-sizing: border-box;\n",[92,59180,59181],{"class":94,"line":1602},[92,59182,2166],{"class":102},[92,59184,59185],{"class":94,"line":1607},[92,59186,2379],{"emptyLinePlaceholder":17},[92,59188,59189],{"class":94,"line":1621},[92,59190,59191],{"class":102},"    .slider {\n",[92,59193,59194],{"class":94,"line":1626},[92,59195,59196],{"class":102},"      width: 560px;\n",[92,59198,59199],{"class":94,"line":1632},[92,59200,59201],{"class":102},"      height: 400px;\n",[92,59203,59204],{"class":94,"line":1653},[92,59205,59206],{"class":102},"      overflow: hidden;\n",[92,59208,59209],{"class":94,"line":1658},[92,59210,2166],{"class":102},[92,59212,59213],{"class":94,"line":1672},[92,59214,2379],{"emptyLinePlaceholder":17},[92,59216,59217],{"class":94,"line":1677},[92,59218,59219],{"class":102},"    .slider-wrapper {\n",[92,59221,59222],{"class":94,"line":1706},[92,59223,59224],{"class":102},"      width: 100%;\n",[92,59226,59227],{"class":94,"line":1711},[92,59228,59229],{"class":102},"      height: 320px;\n",[92,59231,59232],{"class":94,"line":1728},[92,59233,2166],{"class":102},[92,59235,59236],{"class":94,"line":1733},[92,59237,2379],{"emptyLinePlaceholder":17},[92,59239,59240],{"class":94,"line":1738},[92,59241,59242],{"class":102},"    .slider-wrapper img {\n",[92,59244,59245],{"class":94,"line":1743},[92,59246,59224],{"class":102},[92,59248,59249],{"class":94,"line":1757},[92,59250,59251],{"class":102},"      height: 100%;\n",[92,59253,59254],{"class":94,"line":1762},[92,59255,59256],{"class":102},"      display: block;\n",[92,59258,59259],{"class":94,"line":2556},[92,59260,2166],{"class":102},[92,59262,59263],{"class":94,"line":2570},[92,59264,2379],{"emptyLinePlaceholder":17},[92,59266,59267],{"class":94,"line":2578},[92,59268,59269],{"class":102},"    .slider-footer {\n",[92,59271,59272],{"class":94,"line":2583},[92,59273,59274],{"class":102},"      height: 80px;\n",[92,59276,59277],{"class":94,"line":2589},[92,59278,59279],{"class":102},"      background-color: rgb(100, 67, 68);\n",[92,59281,59282],{"class":94,"line":2595},[92,59283,59284],{"class":102},"      padding: 12px 12px 0 12px;\n",[92,59286,59287],{"class":94,"line":2600},[92,59288,59289],{"class":102},"      position: relative;\n",[92,59291,59292],{"class":94,"line":7928},[92,59293,2166],{"class":102},[92,59295,59296],{"class":94,"line":7952},[92,59297,2379],{"emptyLinePlaceholder":17},[92,59299,59300],{"class":94,"line":7957},[92,59301,59302],{"class":102},"    .slider-footer .toggle {\n",[92,59304,59305],{"class":94,"line":7963},[92,59306,59307],{"class":102},"      position: absolute;\n",[92,59309,59310],{"class":94,"line":7990},[92,59311,59312],{"class":102},"      right: 0;\n",[92,59314,59315],{"class":94,"line":7995},[92,59316,59317],{"class":102},"      top: 12px;\n",[92,59319,59320],{"class":94,"line":8001},[92,59321,59322],{"class":102},"      display: flex;\n",[92,59324,59325],{"class":94,"line":8013},[92,59326,2166],{"class":102},[92,59328,59329],{"class":94,"line":8025},[92,59330,2379],{"emptyLinePlaceholder":17},[92,59332,59333],{"class":94,"line":8037},[92,59334,59335],{"class":102},"    .slider-footer .toggle button {\n",[92,59337,59338],{"class":94,"line":9696},[92,59339,59340],{"class":102},"      margin-right: 12px;\n",[92,59342,59343],{"class":94,"line":9721},[92,59344,59345],{"class":102},"      width: 28px;\n",[92,59347,59348],{"class":94,"line":9744},[92,59349,59350],{"class":102},"      height: 28px;\n",[92,59352,59353],{"class":94,"line":9768},[92,59354,59355],{"class":102},"      appearance: none;\n",[92,59357,59358],{"class":94,"line":9773},[92,59359,59360],{"class":102},"      border: none;\n",[92,59362,59363],{"class":94,"line":9778},[92,59364,59365],{"class":102},"      background: rgba(255, 255, 255, 0.1);\n",[92,59367,59368],{"class":94,"line":9783},[92,59369,59370],{"class":102},"      color: #fff;\n",[92,59372,59373],{"class":94,"line":9792},[92,59374,59375],{"class":102},"      border-radius: 4px;\n",[92,59377,59378],{"class":94,"line":9797},[92,59379,59380],{"class":102},"      cursor: pointer;\n",[92,59382,59383],{"class":94,"line":9803},[92,59384,2166],{"class":102},[92,59386,59387],{"class":94,"line":9824},[92,59388,2379],{"emptyLinePlaceholder":17},[92,59390,59391],{"class":94,"line":9830},[92,59392,59393],{"class":102},"    .slider-footer .toggle button:hover {\n",[92,59395,59396],{"class":94,"line":9844},[92,59397,59398],{"class":102},"      background: rgba(255, 255, 255, 0.2);\n",[92,59400,59401],{"class":94,"line":9850},[92,59402,2166],{"class":102},[92,59404,59405],{"class":94,"line":9877},[92,59406,2379],{"emptyLinePlaceholder":17},[92,59408,59409],{"class":94,"line":9886},[92,59410,59411],{"class":102},"    .slider-footer p {\n",[92,59413,59414],{"class":94,"line":9892},[92,59415,59416],{"class":102},"      margin: 0;\n",[92,59418,59419],{"class":94,"line":9900},[92,59420,59370],{"class":102},[92,59422,59423],{"class":94,"line":9905},[92,59424,59425],{"class":102},"      font-size: 18px;\n",[92,59427,59428],{"class":94,"line":16584},[92,59429,59430],{"class":102},"      margin-bottom: 10px;\n",[92,59432,59433],{"class":94,"line":16590},[92,59434,2166],{"class":102},[92,59436,59437],{"class":94,"line":16613},[92,59438,2379],{"emptyLinePlaceholder":17},[92,59440,59441],{"class":94,"line":16619},[92,59442,59443],{"class":102},"    .slider-indicator {\n",[92,59445,59446],{"class":94,"line":16642},[92,59447,59416],{"class":102},[92,59449,59450],{"class":94,"line":16656},[92,59451,59452],{"class":102},"      padding: 0;\n",[92,59454,59455],{"class":94,"line":16676},[92,59456,59457],{"class":102},"      list-style: none;\n",[92,59459,59460],{"class":94,"line":16682},[92,59461,59322],{"class":102},[92,59463,59464],{"class":94,"line":16693},[92,59465,59466],{"class":102},"      align-items: center;\n",[92,59468,59469],{"class":94,"line":16716},[92,59470,2166],{"class":102},[92,59472,59473],{"class":94,"line":16738},[92,59474,2379],{"emptyLinePlaceholder":17},[92,59476,59477],{"class":94,"line":16743},[92,59478,59479],{"class":102},"    .slider-indicator li {\n",[92,59481,59482],{"class":94,"line":16749},[92,59483,59484],{"class":102},"      width: 8px;\n",[92,59486,59487],{"class":94,"line":16763},[92,59488,59489],{"class":102},"      height: 8px;\n",[92,59491,59492],{"class":94,"line":16776},[92,59493,59494],{"class":102},"      margin: 4px;\n",[92,59496,59497],{"class":94,"line":16781},[92,59498,59499],{"class":102},"      border-radius: 50%;\n",[92,59501,59502],{"class":94,"line":16795},[92,59503,59504],{"class":102},"      background: #fff;\n",[92,59506,59507],{"class":94,"line":16800},[92,59508,59509],{"class":102},"      opacity: 0.4;\n",[92,59511,59512],{"class":94,"line":16806},[92,59513,59380],{"class":102},[92,59515,59516],{"class":94,"line":16811},[92,59517,2166],{"class":102},[92,59519,59520],{"class":94,"line":16825},[92,59521,2379],{"emptyLinePlaceholder":17},[92,59523,59524],{"class":94,"line":16830},[92,59525,59526],{"class":102},"    .slider-indicator li.active {\n",[92,59528,59529],{"class":94,"line":16835},[92,59530,59531],{"class":102},"      width: 12px;\n",[92,59533,59534],{"class":94,"line":16849},[92,59535,59536],{"class":102},"      height: 12px;\n",[92,59538,59539],{"class":94,"line":16861},[92,59540,59541],{"class":102},"      opacity: 1;\n",[92,59543,59544],{"class":94,"line":16866},[92,59545,2166],{"class":102},[92,59547,59548,59550,59552],{"class":94,"line":16879},[92,59549,52397],{"class":102},[92,59551,5106],{"class":51280},[92,59553,51287],{"class":102},[92,59555,59556,59558,59560],{"class":94,"line":16884},[92,59557,51765],{"class":102},[92,59559,51314],{"class":51280},[92,59561,51287],{"class":102},[92,59563,59564],{"class":94,"line":16889},[92,59565,2379],{"emptyLinePlaceholder":17},[92,59567,59568,59570,59572],{"class":94,"line":16894},[92,59569,1013],{"class":102},[92,59571,51780],{"class":51280},[92,59573,51287],{"class":102},[92,59575,59576,59578,59580,59582,59584,59587],{"class":94,"line":16907},[92,59577,52124],{"class":102},[92,59579,51591],{"class":51280},[92,59581,53466],{"class":1942},[92,59583,148],{"class":102},[92,59585,59586],{"class":207},"\"slider\"",[92,59588,51287],{"class":102},[92,59590,59591,59593,59595,59597,59599,59601],{"class":94,"line":16912},[92,59592,51321],{"class":102},[92,59594,51591],{"class":51280},[92,59596,53466],{"class":1942},[92,59598,148],{"class":102},[92,59600,55207],{"class":207},[92,59602,51287],{"class":102},[92,59604,59605,59607,59609,59611,59613,59616,59618,59620,59622],{"class":94,"line":32614},[92,59606,55214],{"class":102},[92,59608,1441],{"class":51280},[92,59610,55219],{"class":1942},[92,59612,148],{"class":102},[92,59614,59615],{"class":207},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[92,59617,55227],{"class":1942},[92,59619,148],{"class":102},[92,59621,7632],{"class":207},[92,59623,59107],{"class":102},[92,59625,59626,59628,59630],{"class":94,"line":32620},[92,59627,51756],{"class":102},[92,59629,51591],{"class":51280},[92,59631,51287],{"class":102},[92,59633,59634,59636,59638,59640,59642,59644],{"class":94,"line":32626},[92,59635,51321],{"class":102},[92,59637,51591],{"class":51280},[92,59639,53466],{"class":1942},[92,59641,148],{"class":102},[92,59643,55254],{"class":207},[92,59645,51287],{"class":102},[92,59647,59648,59650,59652,59655,59657],{"class":94,"line":32632},[92,59649,55214],{"class":102},[92,59651,38],{"class":51280},[92,59653,59654],{"class":102},">对人类来说会不会太超前了？\u003C\u002F",[92,59656,38],{"class":51280},[92,59658,51287],{"class":102},[92,59660,59661,59663,59665,59667,59669,59672],{"class":94,"line":32638},[92,59662,55214],{"class":102},[92,59664,1110],{"class":51280},[92,59666,53466],{"class":1942},[92,59668,148],{"class":102},[92,59670,59671],{"class":207},"\"slider-indicator\"",[92,59673,51287],{"class":102},[92,59675,59676,59678,59680,59682,59684,59687,59689,59691],{"class":94,"line":32649},[92,59677,55282],{"class":102},[92,59679,49],{"class":51280},[92,59681,53466],{"class":1942},[92,59683,148],{"class":102},[92,59685,59686],{"class":207},"\"active\"",[92,59688,55294],{"class":102},[92,59690,49],{"class":51280},[92,59692,51287],{"class":102},[92,59694,59695,59697,59699,59701,59703],{"class":94,"line":32655},[92,59696,55282],{"class":102},[92,59698,49],{"class":51280},[92,59700,55294],{"class":102},[92,59702,49],{"class":51280},[92,59704,51287],{"class":102},[92,59706,59707,59709,59711,59713,59715],{"class":94,"line":32675},[92,59708,55282],{"class":102},[92,59710,49],{"class":51280},[92,59712,55294],{"class":102},[92,59714,49],{"class":51280},[92,59716,51287],{"class":102},[92,59718,59719,59721,59723,59725,59727],{"class":94,"line":32681},[92,59720,55282],{"class":102},[92,59722,49],{"class":51280},[92,59724,55294],{"class":102},[92,59726,49],{"class":51280},[92,59728,51287],{"class":102},[92,59730,59731,59733,59735,59737,59739],{"class":94,"line":32692},[92,59732,55282],{"class":102},[92,59734,49],{"class":51280},[92,59736,55294],{"class":102},[92,59738,49],{"class":51280},[92,59740,51287],{"class":102},[92,59742,59743,59745,59747,59749,59751],{"class":94,"line":32698},[92,59744,55282],{"class":102},[92,59746,49],{"class":51280},[92,59748,55294],{"class":102},[92,59750,49],{"class":51280},[92,59752,51287],{"class":102},[92,59754,59755,59757,59759,59761,59763],{"class":94,"line":32704},[92,59756,55282],{"class":102},[92,59758,49],{"class":51280},[92,59760,55294],{"class":102},[92,59762,49],{"class":51280},[92,59764,51287],{"class":102},[92,59766,59767,59769,59771,59773,59775],{"class":94,"line":32710},[92,59768,55282],{"class":102},[92,59770,49],{"class":51280},[92,59772,55294],{"class":102},[92,59774,49],{"class":51280},[92,59776,51287],{"class":102},[92,59778,59779,59781,59783],{"class":94,"line":32716},[92,59780,55387],{"class":102},[92,59782,1110],{"class":51280},[92,59784,51287],{"class":102},[92,59786,59787,59789,59791,59793,59795,59798],{"class":94,"line":32722},[92,59788,55214],{"class":102},[92,59790,51591],{"class":51280},[92,59792,53466],{"class":1942},[92,59794,148],{"class":102},[92,59796,59797],{"class":207},"\"toggle\"",[92,59799,51287],{"class":102},[92,59801,59802,59804,59806,59808,59810,59813,59815,59818,59820,59822],{"class":94,"line":32728},[92,59803,55282],{"class":102},[92,59805,53867],{"class":51280},[92,59807,53466],{"class":1942},[92,59809,148],{"class":102},[92,59811,59812],{"class":207},"\"prev\"",[92,59814,1063],{"class":102},[92,59816,59817],{"class":151},"&lt;",[92,59819,51765],{"class":102},[92,59821,53867],{"class":51280},[92,59823,51287],{"class":102},[92,59825,59826,59828,59830,59832,59834,59837,59839,59842,59844,59846],{"class":94,"line":32734},[92,59827,55282],{"class":102},[92,59829,53867],{"class":51280},[92,59831,53466],{"class":1942},[92,59833,148],{"class":102},[92,59835,59836],{"class":207},"\"next\"",[92,59838,1063],{"class":102},[92,59840,59841],{"class":151},"&gt;",[92,59843,51765],{"class":102},[92,59845,53867],{"class":51280},[92,59847,51287],{"class":102},[92,59849,59850,59852,59854],{"class":94,"line":32754},[92,59851,55387],{"class":102},[92,59853,51591],{"class":51280},[92,59855,51287],{"class":102},[92,59857,59858,59860,59862],{"class":94,"line":32760},[92,59859,51756],{"class":102},[92,59861,51591],{"class":51280},[92,59863,51287],{"class":102},[92,59865,59866,59868,59870],{"class":94,"line":32776},[92,59867,52397],{"class":102},[92,59869,51591],{"class":51280},[92,59871,51287],{"class":102},[92,59873,59874,59876,59878],{"class":94,"line":32782},[92,59875,52124],{"class":102},[92,59877,51793],{"class":51280},[92,59879,51287],{"class":102},[92,59881,59882],{"class":94,"line":32796},[92,59883,59884],{"class":102},"    \u002F\u002F 1. 初始数据\n",[92,59886,59887],{"class":94,"line":32802},[92,59888,59889],{"class":102},"    const data = [\n",[92,59891,59892],{"class":94,"line":32817},[92,59893,59894],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[92,59896,59897],{"class":94,"line":32823},[92,59898,59899],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[92,59901,59902],{"class":94,"line":32832},[92,59903,59904],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[92,59906,59907],{"class":94,"line":32838},[92,59908,59909],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[92,59911,59912],{"class":94,"line":32847},[92,59913,59914],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[92,59916,59917],{"class":94,"line":32853},[92,59918,59919],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[92,59921,59922],{"class":94,"line":32859},[92,59923,59924],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[92,59926,59927],{"class":94,"line":32868},[92,59928,59929],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[92,59931,59932],{"class":94,"line":32874},[92,59933,53089],{"class":102},[92,59935,59936],{"class":94,"line":32885},[92,59937,59938],{"class":102},"    \u002F\u002F 获取元素\n",[92,59940,59941],{"class":94,"line":32891},[92,59942,59943],{"class":102},"    const img = document.querySelector('.slider-wrapper img')\n",[92,59945,59946],{"class":94,"line":32910},[92,59947,59948],{"class":102},"    const p = document.querySelector('.slider-footer p')\n",[92,59950,59951],{"class":94,"line":32916},[92,59952,59953],{"class":102},"    const footer = document.querySelector('.slider-footer')\n",[92,59955,59956],{"class":94,"line":32927},[92,59957,59958],{"class":102},"    \u002F\u002F 1. 右按钮业务\n",[92,59960,59961],{"class":94,"line":32933},[92,59962,59963],{"class":102},"    \u002F\u002F 1.1 获取右侧按钮 \n",[92,59965,59966],{"class":94,"line":32953},[92,59967,59968],{"class":102},"    const next = document.querySelector('.next')\n",[92,59970,59971],{"class":94,"line":32969},[92,59972,59973],{"class":102},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[92,59975,59976],{"class":94,"line":32975},[92,59977,59978],{"class":102},"    \u002F\u002F 1.2 注册点击事件\n",[92,59980,59981],{"class":94,"line":32989},[92,59982,2379],{"emptyLinePlaceholder":17},[92,59984,59985],{"class":94,"line":32995},[92,59986,59987],{"class":102},"    next.addEventListener('click', function () {\n",[92,59989,59990],{"class":94,"line":33001},[92,59991,59992],{"class":102},"      \u002F\u002F console.log(11)\n",[92,59994,59995],{"class":94,"line":33012},[92,59996,59997],{"class":102},"      i++\n",[92,59999,60000],{"class":94,"line":33018},[92,60001,60002],{"class":102},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[92,60004,60005],{"class":94,"line":33024},[92,60006,60007],{"class":102},"      \u002F\u002F if (i >= 8) {\n",[92,60009,60010],{"class":94,"line":33034},[92,60011,60012],{"class":102},"      \u002F\u002F   i = 0\n",[92,60014,60015],{"class":94,"line":33040},[92,60016,60017],{"class":102},"      \u002F\u002F }\n",[92,60019,60020],{"class":94,"line":33051},[92,60021,60022],{"class":102},"      i = i >= data.length ? 0 : i\n",[92,60024,60025],{"class":94,"line":33057},[92,60026,60027],{"class":102},"      \u002F\u002F 1.3 得到对应的对象\n",[92,60029,60030],{"class":94,"line":33067},[92,60031,60032],{"class":102},"      \u002F\u002F console.log(data[i])\n",[92,60034,60035],{"class":94,"line":33072},[92,60036,60037],{"class":102},"      \u002F\u002F 调用函数\n",[92,60039,60040],{"class":94,"line":33078},[92,60041,60042],{"class":102},"      toggle()\n",[92,60044,60045],{"class":94,"line":33127},[92,60046,33442],{"class":102},[92,60048,60049],{"class":94,"line":33174},[92,60050,2379],{"emptyLinePlaceholder":17},[92,60052,60053],{"class":94,"line":33179},[92,60054,60055],{"class":102},"    \u002F\u002F 2. 左侧按钮业务\n",[92,60057,60058],{"class":94,"line":33185},[92,60059,60060],{"class":102},"    \u002F\u002F 2.1 获取左侧按钮 \n",[92,60062,60063],{"class":94,"line":33204},[92,60064,60065],{"class":102},"    const prev = document.querySelector('.prev')\n",[92,60067,60068],{"class":94,"line":33210},[92,60069,59978],{"class":102},[92,60071,60072],{"class":94,"line":33230},[92,60073,60074],{"class":102},"    prev.addEventListener('click', function () {\n",[92,60076,60077],{"class":94,"line":33236},[92,60078,60079],{"class":102},"      i--\n",[92,60081,60082],{"class":94,"line":33242},[92,60083,60084],{"class":102},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[92,60086,60087],{"class":94,"line":33252},[92,60088,60089],{"class":102},"      \u002F\u002F if (i \u003C 0) {\n",[92,60091,60092],{"class":94,"line":33257},[92,60093,60094],{"class":102},"      \u002F\u002F   i = 7\n",[92,60096,60097],{"class":94,"line":33263},[92,60098,60017],{"class":102},[92,60100,60101],{"class":94,"line":33279},[92,60102,60103],{"class":102},"      i = i \u003C 0 ? data.length - 1 : i\n",[92,60105,60106],{"class":94,"line":33324},[92,60107,60027],{"class":102},[92,60109,60110],{"class":94,"line":33330},[92,60111,60032],{"class":102},[92,60113,60114],{"class":94,"line":33336},[92,60115,60037],{"class":102},[92,60117,60118],{"class":94,"line":33342},[92,60119,60042],{"class":102},[92,60121,60122],{"class":94,"line":33353},[92,60123,33442],{"class":102},[92,60125,60126],{"class":94,"line":33359},[92,60127,2379],{"emptyLinePlaceholder":17},[92,60129,60130],{"class":94,"line":33365},[92,60131,60132],{"class":102},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[92,60134,60135],{"class":94,"line":33371},[92,60136,60137],{"class":102},"    function toggle() {\n",[92,60139,60140],{"class":94,"line":33389},[92,60141,60142],{"class":102},"      \u002F\u002F 1.4 渲染对应的数据\n",[92,60144,60145],{"class":94,"line":33403},[92,60146,60147],{"class":102},"      img.src = data[i].url\n",[92,60149,60150],{"class":94,"line":33412},[92,60151,60152],{"class":102},"      p.innerHTML = data[i].title\n",[92,60154,60155],{"class":94,"line":33421},[92,60156,60157],{"class":102},"      footer.style.backgroundColor = data[i].color\n",[92,60159,60160],{"class":94,"line":33430},[92,60161,60162],{"class":102},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[92,60164,60165],{"class":94,"line":33439},[92,60166,60167],{"class":102},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[92,60169,60170],{"class":94,"line":33445},[92,60171,60172],{"class":102},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[92,60174,60175],{"class":94,"line":33451},[92,60176,2166],{"class":102},[92,60178,60179],{"class":94,"line":33459},[92,60180,2379],{"emptyLinePlaceholder":17},[92,60182,60183],{"class":94,"line":33464},[92,60184,60185],{"class":102},"    \u002F\u002F 3. 自动播放模块\n",[92,60187,60188],{"class":94,"line":33470},[92,60189,60190],{"class":102},"    let timerId = setInterval(function () {\n",[92,60192,60193],{"class":94,"line":33481},[92,60194,60195],{"class":102},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[92,60197,60198],{"class":94,"line":33487},[92,60199,60200],{"class":102},"      next.click()\n",[92,60202,60203],{"class":94,"line":33507},[92,60204,60205],{"class":102},"    }, 1000)\n",[92,60207,60208],{"class":94,"line":33513},[92,60209,2379],{"emptyLinePlaceholder":17},[92,60211,60212],{"class":94,"line":33519},[92,60213,60214],{"class":102},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[92,60216,60217],{"class":94,"line":33525},[92,60218,60219],{"class":102},"    const slider = document.querySelector('.slider')\n",[92,60221,60222],{"class":94,"line":33542},[92,60223,60224],{"class":102},"    \u002F\u002F 注册事件\n",[92,60226,60227],{"class":94,"line":33548},[92,60228,60229],{"class":102},"    slider.addEventListener('mouseenter', function () {\n",[92,60231,60232],{"class":94,"line":33554},[92,60233,60234],{"class":102},"      \u002F\u002F 停止定时器\n",[92,60236,60237],{"class":94,"line":33560},[92,60238,60239],{"class":102},"      clearInterval(timerId)\n",[92,60241,60242],{"class":94,"line":33566},[92,60243,33442],{"class":102},[92,60245,60246],{"class":94,"line":33572},[92,60247,2379],{"emptyLinePlaceholder":17},[92,60249,60250],{"class":94,"line":33599},[92,60251,60252],{"class":102},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[92,60254,60255],{"class":94,"line":33623},[92,60256,60224],{"class":102},[92,60258,60259],{"class":94,"line":33629},[92,60260,60261],{"class":102},"    slider.addEventListener('mouseleave', function () {\n",[92,60263,60264],{"class":94,"line":33635},[92,60265,60234],{"class":102},[92,60267,60268],{"class":94,"line":33641},[92,60269,60270],{"class":102},"      if (timerId) clearInterval(timerId)\n",[92,60272,60273],{"class":94,"line":33652},[92,60274,60275],{"class":102},"      \u002F\u002F 开启定时器\n",[92,60277,60278],{"class":94,"line":33663},[92,60279,60280],{"class":102},"      timerId = setInterval(function () {\n",[92,60282,60283],{"class":94,"line":33669},[92,60284,60285],{"class":102},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[92,60287,60288],{"class":94,"line":33686},[92,60289,60290],{"class":102},"        next.click()\n",[92,60292,60293],{"class":94,"line":33709},[92,60294,60295],{"class":102},"      }, 1000)\n",[92,60297,60298],{"class":94,"line":33732},[92,60299,33442],{"class":102},[92,60301,60302,60304,60306],{"class":94,"line":33738},[92,60303,52397],{"class":102},[92,60305,51793],{"class":51280},[92,60307,51287],{"class":102},[92,60309,60310,60312,60314],{"class":94,"line":33743},[92,60311,51765],{"class":102},[92,60313,51780],{"class":51280},[92,60315,51287],{"class":102},[92,60317,60318],{"class":94,"line":33752},[92,60319,2379],{"emptyLinePlaceholder":17},[92,60321,60322,60324,60326],{"class":94,"line":33762},[92,60323,51765],{"class":102},[92,60325,50615],{"class":51280},[92,60327,51287],{"class":102},[21978,60329,60331],{"id":60330},"_3252-焦点事件","3.2.5.2 焦点事件",[38,60333,60334],{},"小米搜索框案例：",[83,60336,60338],{"className":50613,"code":60337,"language":50615,"meta":10,"style":10},"\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",[89,60339,60340,60350,60364,60368,60376,60390,60410,60430,60442,60450,60456,60466,60476,60488,60492,60496,60503,60507,60518,60522,60526,60533,60544,60557,60571,60575,60579,60588,60600,60612,60626,60639,60652,60670,60681,60685,60689,60698,60715,60719,60723,60730,60740,60750,60761,60774,60786,60802,60813,60825,60829,60833,60841,60852,60869,60881,60893,60904,60908,60912,60923,60934,60938,60946,60950,60958,60962,60970,60985,61008,61023,61054,61081,61108,61135,61162,61189,61216,61225,61233,61241,61246,61266,61286,61291,61296,61314,61319,61329,61334,61348,61353,61358,61375,61384,61396,61400,61408,61416,61420],{"__ignoreMap":10},[92,60341,60342,60344,60346,60348],{"class":94,"line":95},[92,60343,51277],{"class":102},[92,60345,51281],{"class":51280},[92,60347,51284],{"class":1942},[92,60349,51287],{"class":102},[92,60351,60352,60354,60356,60358,60360,60362],{"class":94,"line":11},[92,60353,1013],{"class":102},[92,60355,50615],{"class":51280},[92,60357,51296],{"class":1942},[92,60359,148],{"class":102},[92,60361,51301],{"class":207},[92,60363,51287],{"class":102},[92,60365,60366],{"class":94,"line":1158},[92,60367,2379],{"emptyLinePlaceholder":17},[92,60369,60370,60372,60374],{"class":94,"line":1173},[92,60371,1013],{"class":102},[92,60373,51314],{"class":51280},[92,60375,51287],{"class":102},[92,60377,60378,60380,60382,60384,60386,60388],{"class":94,"line":1179},[92,60379,51321],{"class":102},[92,60381,51324],{"class":51280},[92,60383,51327],{"class":1942},[92,60385,148],{"class":102},[92,60387,51332],{"class":207},[92,60389,51287],{"class":102},[92,60391,60392,60394,60396,60398,60400,60402,60404,60406,60408],{"class":94,"line":1193},[92,60393,51321],{"class":102},[92,60395,51324],{"class":51280},[92,60397,51343],{"class":1942},[92,60399,148],{"class":102},[92,60401,51348],{"class":207},[92,60403,51351],{"class":1942},[92,60405,148],{"class":102},[92,60407,51356],{"class":207},[92,60409,51287],{"class":102},[92,60411,60412,60414,60416,60418,60420,60422,60424,60426,60428],{"class":94,"line":1199},[92,60413,51321],{"class":102},[92,60415,51324],{"class":51280},[92,60417,14900],{"class":1942},[92,60419,148],{"class":102},[92,60421,51371],{"class":207},[92,60423,51351],{"class":1942},[92,60425,148],{"class":102},[92,60427,51378],{"class":207},[92,60429,51287],{"class":102},[92,60431,60432,60434,60436,60438,60440],{"class":94,"line":1290},[92,60433,51321],{"class":102},[92,60435,51387],{"class":51280},[92,60437,51390],{"class":102},[92,60439,51387],{"class":51280},[92,60441,51287],{"class":102},[92,60443,60444,60446,60448],{"class":94,"line":1296},[92,60445,51321],{"class":102},[92,60447,5106],{"class":51280},[92,60449,51287],{"class":102},[92,60451,60452,60454],{"class":94,"line":1308},[92,60453,51407],{"class":51280},[92,60455,15552],{"class":102},[92,60457,60458,60460,60462,60464],{"class":94,"line":1591},[92,60459,51414],{"class":151},[92,60461,51417],{"class":102},[92,60463,294],{"class":151},[92,60465,1269],{"class":102},[92,60467,60468,60470,60472,60474],{"class":94,"line":1596},[92,60469,51426],{"class":151},[92,60471,51417],{"class":102},[92,60473,294],{"class":151},[92,60475,1269],{"class":102},[92,60477,60478,60481,60483,60486],{"class":94,"line":1602},[92,60479,60480],{"class":151},"            box-sizing",[92,60482,51417],{"class":102},[92,60484,60485],{"class":151},"border-box",[92,60487,1269],{"class":102},[92,60489,60490],{"class":94,"line":1607},[92,60491,2508],{"class":102},[92,60493,60494],{"class":94,"line":1621},[92,60495,2379],{"emptyLinePlaceholder":17},[92,60497,60498,60501],{"class":94,"line":1626},[92,60499,60500],{"class":51280},"        ul",[92,60502,15552],{"class":102},[92,60504,60505],{"class":94,"line":1632},[92,60506,2379],{"emptyLinePlaceholder":17},[92,60508,60509,60512,60514,60516],{"class":94,"line":1653},[92,60510,60511],{"class":151},"            list-style",[92,60513,51417],{"class":102},[92,60515,54717],{"class":151},[92,60517,1269],{"class":102},[92,60519,60520],{"class":94,"line":1658},[92,60521,2508],{"class":102},[92,60523,60524],{"class":94,"line":1672},[92,60525,2379],{"emptyLinePlaceholder":17},[92,60527,60528,60531],{"class":94,"line":1677},[92,60529,60530],{"class":1942},"        .mi",[92,60532,15552],{"class":102},[92,60534,60535,60538,60540,60542],{"class":94,"line":1706},[92,60536,60537],{"class":151},"            position",[92,60539,51417],{"class":102},[92,60541,54744],{"class":151},[92,60543,1269],{"class":102},[92,60545,60546,60548,60550,60553,60555],{"class":94,"line":1711},[92,60547,51464],{"class":151},[92,60549,51417],{"class":102},[92,60551,60552],{"class":151},"223",[92,60554,51472],{"class":98},[92,60556,1269],{"class":102},[92,60558,60559,60561,60563,60565,60567,60569],{"class":94,"line":1728},[92,60560,51414],{"class":151},[92,60562,51417],{"class":102},[92,60564,414],{"class":151},[92,60566,51472],{"class":98},[92,60568,51536],{"class":151},[92,60570,1269],{"class":102},[92,60572,60573],{"class":94,"line":1733},[92,60574,2508],{"class":102},[92,60576,60577],{"class":94,"line":1738},[92,60578,2379],{"emptyLinePlaceholder":17},[92,60580,60581,60583,60586],{"class":94,"line":1743},[92,60582,60530],{"class":1942},[92,60584,60585],{"class":51280}," input",[92,60587,15552],{"class":102},[92,60589,60590,60592,60594,60596,60598],{"class":94,"line":1757},[92,60591,51464],{"class":151},[92,60593,51417],{"class":102},[92,60595,60552],{"class":151},[92,60597,51472],{"class":98},[92,60599,1269],{"class":102},[92,60601,60602,60604,60606,60608,60610],{"class":94,"line":1762},[92,60603,51479],{"class":151},[92,60605,51417],{"class":102},[92,60607,710],{"class":151},[92,60609,51472],{"class":98},[92,60611,1269],{"class":102},[92,60613,60614,60616,60618,60620,60622,60624],{"class":94,"line":2556},[92,60615,51426],{"class":151},[92,60617,51417],{"class":102},[92,60619,294],{"class":151},[92,60621,2017],{"class":151},[92,60623,51472],{"class":98},[92,60625,1269],{"class":102},[92,60627,60628,60631,60633,60635,60637],{"class":94,"line":2570},[92,60629,60630],{"class":151},"            font-size",[92,60632,51417],{"class":102},[92,60634,652],{"class":151},[92,60636,51472],{"class":98},[92,60638,1269],{"class":102},[92,60640,60641,60644,60646,60648,60650],{"class":94,"line":2578},[92,60642,60643],{"class":151},"            line-height",[92,60645,51417],{"class":102},[92,60647,710],{"class":151},[92,60649,51472],{"class":98},[92,60651,1269],{"class":102},[92,60653,60654,60657,60659,60661,60663,60665,60668],{"class":94,"line":2583},[92,60655,60656],{"class":151},"            border",[92,60658,51417],{"class":102},[92,60660,320],{"class":151},[92,60662,51472],{"class":98},[92,60664,51501],{"class":151},[92,60666,60667],{"class":151}," #e0e0e0",[92,60669,1269],{"class":102},[92,60671,60672,60675,60677,60679],{"class":94,"line":2589},[92,60673,60674],{"class":151},"            outline",[92,60676,51417],{"class":102},[92,60678,54717],{"class":151},[92,60680,1269],{"class":102},[92,60682,60683],{"class":94,"line":2595},[92,60684,2508],{"class":102},[92,60686,60687],{"class":94,"line":2600},[92,60688,2379],{"emptyLinePlaceholder":17},[92,60690,60691,60693,60696],{"class":94,"line":7928},[92,60692,60530],{"class":1942},[92,60694,60695],{"class":1942}," .search",[92,60697,15552],{"class":102},[92,60699,60700,60702,60704,60706,60708,60710,60713],{"class":94,"line":7952},[92,60701,60656],{"class":151},[92,60703,51417],{"class":102},[92,60705,320],{"class":151},[92,60707,51472],{"class":98},[92,60709,51501],{"class":151},[92,60711,60712],{"class":151}," #ff6700",[92,60714,1269],{"class":102},[92,60716,60717],{"class":94,"line":7957},[92,60718,2508],{"class":102},[92,60720,60721],{"class":94,"line":7963},[92,60722,2379],{"emptyLinePlaceholder":17},[92,60724,60725,60728],{"class":94,"line":7990},[92,60726,60727],{"class":1942},"        .result-list",[92,60729,15552],{"class":102},[92,60731,60732,60734,60736,60738],{"class":94,"line":7995},[92,60733,51452],{"class":151},[92,60735,51417],{"class":102},[92,60737,54717],{"class":151},[92,60739,1269],{"class":102},[92,60741,60742,60744,60746,60748],{"class":94,"line":8001},[92,60743,60537],{"class":151},[92,60745,51417],{"class":102},[92,60747,54811],{"class":151},[92,60749,1269],{"class":102},[92,60751,60752,60755,60757,60759],{"class":94,"line":8013},[92,60753,60754],{"class":151},"            left",[92,60756,51417],{"class":102},[92,60758,294],{"class":151},[92,60760,1269],{"class":102},[92,60762,60763,60766,60768,60770,60772],{"class":94,"line":8025},[92,60764,60765],{"class":151},"            top",[92,60767,51417],{"class":102},[92,60769,710],{"class":151},[92,60771,51472],{"class":98},[92,60773,1269],{"class":102},[92,60775,60776,60778,60780,60782,60784],{"class":94,"line":8037},[92,60777,51464],{"class":151},[92,60779,51417],{"class":102},[92,60781,60552],{"class":151},[92,60783,51472],{"class":98},[92,60785,1269],{"class":102},[92,60787,60788,60790,60792,60794,60796,60798,60800],{"class":94,"line":9696},[92,60789,60656],{"class":151},[92,60791,51417],{"class":102},[92,60793,320],{"class":151},[92,60795,51472],{"class":98},[92,60797,51501],{"class":151},[92,60799,60712],{"class":151},[92,60801,1269],{"class":102},[92,60803,60804,60807,60809,60811],{"class":94,"line":9721},[92,60805,60806],{"class":151},"            border-top",[92,60808,51417],{"class":102},[92,60810,294],{"class":151},[92,60812,1269],{"class":102},[92,60814,60815,60818,60820,60823],{"class":94,"line":9744},[92,60816,60817],{"class":151},"            background",[92,60819,51417],{"class":102},[92,60821,60822],{"class":151},"#fff",[92,60824,1269],{"class":102},[92,60826,60827],{"class":94,"line":9768},[92,60828,2508],{"class":102},[92,60830,60831],{"class":94,"line":9773},[92,60832,2379],{"emptyLinePlaceholder":17},[92,60834,60835,60837,60839],{"class":94,"line":9778},[92,60836,60727],{"class":1942},[92,60838,1377],{"class":51280},[92,60840,15552],{"class":102},[92,60842,60843,60845,60847,60850],{"class":94,"line":9783},[92,60844,51452],{"class":151},[92,60846,51417],{"class":102},[92,60848,60849],{"class":151},"block",[92,60851,1269],{"class":102},[92,60853,60854,60856,60858,60860,60862,60865,60867],{"class":94,"line":9792},[92,60855,51426],{"class":151},[92,60857,51417],{"class":102},[92,60859,447],{"class":151},[92,60861,51472],{"class":98},[92,60863,60864],{"class":151}," 15",[92,60866,51472],{"class":98},[92,60868,1269],{"class":102},[92,60870,60871,60873,60875,60877,60879],{"class":94,"line":9797},[92,60872,60630],{"class":151},[92,60874,51417],{"class":102},[92,60876,601],{"class":151},[92,60878,51472],{"class":98},[92,60880,1269],{"class":102},[92,60882,60883,60886,60888,60891],{"class":94,"line":9803},[92,60884,60885],{"class":151},"            color",[92,60887,51417],{"class":102},[92,60889,60890],{"class":151},"#424242",[92,60892,1269],{"class":102},[92,60894,60895,60898,60900,60902],{"class":94,"line":9824},[92,60896,60897],{"class":151},"            text-decoration",[92,60899,51417],{"class":102},[92,60901,54717],{"class":151},[92,60903,1269],{"class":102},[92,60905,60906],{"class":94,"line":9830},[92,60907,2508],{"class":102},[92,60909,60910],{"class":94,"line":9844},[92,60911,2379],{"emptyLinePlaceholder":17},[92,60913,60914,60916,60918,60921],{"class":94,"line":9850},[92,60915,60727],{"class":1942},[92,60917,1377],{"class":51280},[92,60919,60920],{"class":1942},":hover",[92,60922,15552],{"class":102},[92,60924,60925,60927,60929,60932],{"class":94,"line":9877},[92,60926,51620],{"class":151},[92,60928,51417],{"class":102},[92,60930,60931],{"class":151},"#eee",[92,60933,1269],{"class":102},[92,60935,60936],{"class":94,"line":9886},[92,60937,2508],{"class":102},[92,60939,60940,60942,60944],{"class":94,"line":9892},[92,60941,51756],{"class":102},[92,60943,5106],{"class":51280},[92,60945,51287],{"class":102},[92,60947,60948],{"class":94,"line":9900},[92,60949,2379],{"emptyLinePlaceholder":17},[92,60951,60952,60954,60956],{"class":94,"line":9905},[92,60953,51765],{"class":102},[92,60955,51314],{"class":51280},[92,60957,51287],{"class":102},[92,60959,60960],{"class":94,"line":16584},[92,60961,2379],{"emptyLinePlaceholder":17},[92,60963,60964,60966,60968],{"class":94,"line":16590},[92,60965,1013],{"class":102},[92,60967,51780],{"class":51280},[92,60969,51287],{"class":102},[92,60971,60972,60974,60976,60978,60980,60983],{"class":94,"line":16613},[92,60973,51321],{"class":102},[92,60975,51591],{"class":51280},[92,60977,53466],{"class":1942},[92,60979,148],{"class":102},[92,60981,60982],{"class":207},"\"mi\"",[92,60984,51287],{"class":102},[92,60986,60987,60989,60991,60993,60995,60998,61001,61003,61006],{"class":94,"line":16619},[92,60988,55282],{"class":102},[92,60990,53801],{"class":51280},[92,60992,53804],{"class":1942},[92,60994,148],{"class":102},[92,60996,60997],{"class":207},"\"search\"",[92,60999,61000],{"class":1942}," placeholder",[92,61002,148],{"class":102},[92,61004,61005],{"class":207},"\"小米笔记本\"",[92,61007,51287],{"class":102},[92,61009,61010,61012,61014,61016,61018,61021],{"class":94,"line":16642},[92,61011,55282],{"class":102},[92,61013,1110],{"class":51280},[92,61015,53466],{"class":1942},[92,61017,148],{"class":102},[92,61019,61020],{"class":207},"\"result-list\"",[92,61022,51287],{"class":102},[92,61024,61025,61028,61030,61033,61035,61038,61040,61043,61046,61048,61050,61052],{"class":94,"line":16656},[92,61026,61027],{"class":102},"            \u003C",[92,61029,49],{"class":51280},[92,61031,61032],{"class":102},">\u003C",[92,61034,341],{"class":51280},[92,61036,61037],{"class":1942}," href",[92,61039,148],{"class":102},[92,61041,61042],{"class":207},"\"#\"",[92,61044,61045],{"class":102},">全部商品\u003C\u002F",[92,61047,341],{"class":51280},[92,61049,55294],{"class":102},[92,61051,49],{"class":51280},[92,61053,51287],{"class":102},[92,61055,61056,61058,61060,61062,61064,61066,61068,61070,61073,61075,61077,61079],{"class":94,"line":16676},[92,61057,61027],{"class":102},[92,61059,49],{"class":51280},[92,61061,61032],{"class":102},[92,61063,341],{"class":51280},[92,61065,61037],{"class":1942},[92,61067,148],{"class":102},[92,61069,61042],{"class":207},[92,61071,61072],{"class":102},">小米11\u003C\u002F",[92,61074,341],{"class":51280},[92,61076,55294],{"class":102},[92,61078,49],{"class":51280},[92,61080,51287],{"class":102},[92,61082,61083,61085,61087,61089,61091,61093,61095,61097,61100,61102,61104,61106],{"class":94,"line":16682},[92,61084,61027],{"class":102},[92,61086,49],{"class":51280},[92,61088,61032],{"class":102},[92,61090,341],{"class":51280},[92,61092,61037],{"class":1942},[92,61094,148],{"class":102},[92,61096,61042],{"class":207},[92,61098,61099],{"class":102},">小米10S\u003C\u002F",[92,61101,341],{"class":51280},[92,61103,55294],{"class":102},[92,61105,49],{"class":51280},[92,61107,51287],{"class":102},[92,61109,61110,61112,61114,61116,61118,61120,61122,61124,61127,61129,61131,61133],{"class":94,"line":16693},[92,61111,61027],{"class":102},[92,61113,49],{"class":51280},[92,61115,61032],{"class":102},[92,61117,341],{"class":51280},[92,61119,61037],{"class":1942},[92,61121,148],{"class":102},[92,61123,61042],{"class":207},[92,61125,61126],{"class":102},">小米笔记本\u003C\u002F",[92,61128,341],{"class":51280},[92,61130,55294],{"class":102},[92,61132,49],{"class":51280},[92,61134,51287],{"class":102},[92,61136,61137,61139,61141,61143,61145,61147,61149,61151,61154,61156,61158,61160],{"class":94,"line":16716},[92,61138,61027],{"class":102},[92,61140,49],{"class":51280},[92,61142,61032],{"class":102},[92,61144,341],{"class":51280},[92,61146,61037],{"class":1942},[92,61148,148],{"class":102},[92,61150,61042],{"class":207},[92,61152,61153],{"class":102},">小米手机\u003C\u002F",[92,61155,341],{"class":51280},[92,61157,55294],{"class":102},[92,61159,49],{"class":51280},[92,61161,51287],{"class":102},[92,61163,61164,61166,61168,61170,61172,61174,61176,61178,61181,61183,61185,61187],{"class":94,"line":16738},[92,61165,61027],{"class":102},[92,61167,49],{"class":51280},[92,61169,61032],{"class":102},[92,61171,341],{"class":51280},[92,61173,61037],{"class":1942},[92,61175,148],{"class":102},[92,61177,61042],{"class":207},[92,61179,61180],{"class":102},">黑鲨4\u003C\u002F",[92,61182,341],{"class":51280},[92,61184,55294],{"class":102},[92,61186,49],{"class":51280},[92,61188,51287],{"class":102},[92,61190,61191,61193,61195,61197,61199,61201,61203,61205,61208,61210,61212,61214],{"class":94,"line":16743},[92,61192,61027],{"class":102},[92,61194,49],{"class":51280},[92,61196,61032],{"class":102},[92,61198,341],{"class":51280},[92,61200,61037],{"class":1942},[92,61202,148],{"class":102},[92,61204,61042],{"class":207},[92,61206,61207],{"class":102},">空调\u003C\u002F",[92,61209,341],{"class":51280},[92,61211,55294],{"class":102},[92,61213,49],{"class":51280},[92,61215,51287],{"class":102},[92,61217,61218,61221,61223],{"class":94,"line":16749},[92,61219,61220],{"class":102},"        \u003C\u002F",[92,61222,1110],{"class":51280},[92,61224,51287],{"class":102},[92,61226,61227,61229,61231],{"class":94,"line":16763},[92,61228,51756],{"class":102},[92,61230,51591],{"class":51280},[92,61232,51287],{"class":102},[92,61234,61235,61237,61239],{"class":94,"line":16776},[92,61236,51321],{"class":102},[92,61238,51793],{"class":51280},[92,61240,51287],{"class":102},[92,61242,61243],{"class":94,"line":16781},[92,61244,61245],{"class":161},"        \u002F\u002F 1. 获取元素\n",[92,61247,61248,61251,61253,61255,61257,61259,61261,61264],{"class":94,"line":16795},[92,61249,61250],{"class":98},"        const",[92,61252,60585],{"class":151},[92,61254,13544],{"class":98},[92,61256,54376],{"class":102},[92,61258,54379],{"class":1942},[92,61260,103],{"class":102},[92,61262,61263],{"class":207},"'[type=search]'",[92,61265,109],{"class":102},[92,61267,61268,61270,61273,61275,61277,61279,61281,61284],{"class":94,"line":16800},[92,61269,61250],{"class":98},[92,61271,61272],{"class":151}," ul",[92,61274,13544],{"class":98},[92,61276,54376],{"class":102},[92,61278,54379],{"class":1942},[92,61280,103],{"class":102},[92,61282,61283],{"class":207},"'.result-list'",[92,61285,109],{"class":102},[92,61287,61288],{"class":94,"line":16806},[92,61289,61290],{"class":161},"        \u002F\u002F console.log(input)\n",[92,61292,61293],{"class":94,"line":16811},[92,61294,61295],{"class":161},"        \u002F\u002F 2. 监听事件 获得焦点\n",[92,61297,61298,61301,61303,61305,61308,61310,61312],{"class":94,"line":16825},[92,61299,61300],{"class":102},"        input.",[92,61302,57793],{"class":1942},[92,61304,103],{"class":102},[92,61306,61307],{"class":207},"'focus'",[92,61309,12415],{"class":102},[92,61311,54429],{"class":98},[92,61313,54432],{"class":102},[92,61315,61316],{"class":94,"line":16830},[92,61317,61318],{"class":161},"            \u002F\u002F ul显示\n",[92,61320,61321,61324,61326],{"class":94,"line":16835},[92,61322,61323],{"class":102},"            ul.style.display ",[92,61325,148],{"class":98},[92,61327,61328],{"class":207}," 'block'\n",[92,61330,61331],{"class":94,"line":16849},[92,61332,61333],{"class":161},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[92,61335,61336,61339,61341,61343,61346],{"class":94,"line":16861},[92,61337,61338],{"class":102},"            input.classList.",[92,61340,5314],{"class":1942},[92,61342,103],{"class":102},[92,61344,61345],{"class":207},"'search'",[92,61347,109],{"class":102},[92,61349,61350],{"class":94,"line":16866},[92,61351,61352],{"class":102},"        })\n",[92,61354,61355],{"class":94,"line":16879},[92,61356,61357],{"class":161},"        \u002F\u002F 3. 监听事件 失去焦点\n",[92,61359,61360,61362,61364,61366,61369,61371,61373],{"class":94,"line":16884},[92,61361,61300],{"class":102},[92,61363,57793],{"class":1942},[92,61365,103],{"class":102},[92,61367,61368],{"class":207},"'blur'",[92,61370,12415],{"class":102},[92,61372,54429],{"class":98},[92,61374,54432],{"class":102},[92,61376,61377,61379,61381],{"class":94,"line":16889},[92,61378,61323],{"class":102},[92,61380,148],{"class":98},[92,61382,61383],{"class":207}," 'none'\n",[92,61385,61386,61388,61390,61392,61394],{"class":94,"line":16894},[92,61387,61338],{"class":102},[92,61389,56986],{"class":1942},[92,61391,103],{"class":102},[92,61393,61345],{"class":207},[92,61395,109],{"class":102},[92,61397,61398],{"class":94,"line":16907},[92,61399,61352],{"class":102},[92,61401,61402,61404,61406],{"class":94,"line":16912},[92,61403,51756],{"class":102},[92,61405,51793],{"class":51280},[92,61407,51287],{"class":102},[92,61409,61410,61412,61414],{"class":94,"line":32614},[92,61411,51765],{"class":102},[92,61413,51780],{"class":51280},[92,61415,51287],{"class":102},[92,61417,61418],{"class":94,"line":32620},[92,61419,2379],{"emptyLinePlaceholder":17},[92,61421,61422,61424,61426],{"class":94,"line":32626},[92,61423,51765],{"class":102},[92,61425,50615],{"class":51280},[92,61427,51287],{"class":102},[21978,61429,61431],{"id":61430},"_3253-键盘事件","3.2.5.3 键盘事件",[38,61433,61434],{},"评论字数统计案例",[38,61436,61437],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[38,61439,61440],{},"牢记focus伪类选择器",[51324,61442],{"charSet":61443},"UTF-8",[51324,61445],{"name":61446,"content":61447},"viewport","width=device-width, initial-scale=1.0",[51387,61449,61450],{},"Document",[5106,61452,61453],{},"\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",[53801,61455],{"type":5167},[1110,61457,61458,61461],{},[49,61459,61460],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[49,61462,61463],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[83,61465,61467],{"className":50613,"code":61466,"language":50615,"meta":10,"style":10},"\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",[89,61468,61469,61479,61493,61497,61505,61519,61539,61559,61572,61580,61587,61600,61614,61624,61634,61638,61642,61649,61661,61673,61685,61697,61726,61739,61743,61747,61756,61767,61779,61790,61801,61813,61824,61836,61852,61864,61868,61872,61883,61894,61904,61916,61920,61924,61932,61943,61953,61964,61976,61989,62001,62013,62017,62021,62030,62042,62053,62066,62077,62091,62095,62099,62106,62118,62130,62140,62144,62148,62157,62169,62179,62183,62187,62198,62208,62227,62240,62244,62248,62258,62268,62272,62276,62287,62298,62310,62322,62326,62330,62341,62352,62366,62370,62374,62385,62395,62407,62411,62419,62427,62431,62439,62454,62473,62513,62526,62534,62548,62568,62576,62591,62614,62632,62647,62667,62687,62707,62715,62723,62731,62739,62759,62779,62784,62801,62810,62814,62819,62835,62843,62847,62852,62869,62874,62899,62903,62907,62912,62917,62925,62933,62937],{"__ignoreMap":10},[92,61470,61471,61473,61475,61477],{"class":94,"line":95},[92,61472,51277],{"class":102},[92,61474,51281],{"class":51280},[92,61476,51284],{"class":1942},[92,61478,51287],{"class":102},[92,61480,61481,61483,61485,61487,61489,61491],{"class":94,"line":11},[92,61482,1013],{"class":102},[92,61484,50615],{"class":51280},[92,61486,51296],{"class":1942},[92,61488,148],{"class":102},[92,61490,51301],{"class":207},[92,61492,51287],{"class":102},[92,61494,61495],{"class":94,"line":1158},[92,61496,2379],{"emptyLinePlaceholder":17},[92,61498,61499,61501,61503],{"class":94,"line":1173},[92,61500,1013],{"class":102},[92,61502,51314],{"class":51280},[92,61504,51287],{"class":102},[92,61506,61507,61509,61511,61513,61515,61517],{"class":94,"line":1179},[92,61508,52124],{"class":102},[92,61510,51324],{"class":51280},[92,61512,51327],{"class":1942},[92,61514,148],{"class":102},[92,61516,51332],{"class":207},[92,61518,51287],{"class":102},[92,61520,61521,61523,61525,61527,61529,61531,61533,61535,61537],{"class":94,"line":1193},[92,61522,52124],{"class":102},[92,61524,51324],{"class":51280},[92,61526,51343],{"class":1942},[92,61528,148],{"class":102},[92,61530,51348],{"class":207},[92,61532,51351],{"class":1942},[92,61534,148],{"class":102},[92,61536,51356],{"class":207},[92,61538,51287],{"class":102},[92,61540,61541,61543,61545,61547,61549,61551,61553,61555,61557],{"class":94,"line":1199},[92,61542,52124],{"class":102},[92,61544,51324],{"class":51280},[92,61546,14900],{"class":1942},[92,61548,148],{"class":102},[92,61550,51371],{"class":207},[92,61552,51351],{"class":1942},[92,61554,148],{"class":102},[92,61556,51378],{"class":207},[92,61558,51287],{"class":102},[92,61560,61561,61563,61565,61568,61570],{"class":94,"line":1290},[92,61562,52124],{"class":102},[92,61564,51387],{"class":51280},[92,61566,61567],{"class":102},">评论回车发布\u003C\u002F",[92,61569,51387],{"class":51280},[92,61571,51287],{"class":102},[92,61573,61574,61576,61578],{"class":94,"line":1296},[92,61575,52124],{"class":102},[92,61577,5106],{"class":51280},[92,61579,51287],{"class":102},[92,61581,61582,61585],{"class":94,"line":1308},[92,61583,61584],{"class":1942},"    .wrapper",[92,61586,15552],{"class":102},[92,61588,61589,61592,61594,61596,61598],{"class":94,"line":1591},[92,61590,61591],{"class":151},"      min-width",[92,61593,51417],{"class":102},[92,61595,3966],{"class":151},[92,61597,51472],{"class":98},[92,61599,1269],{"class":102},[92,61601,61602,61605,61607,61610,61612],{"class":94,"line":1596},[92,61603,61604],{"class":151},"      max-width",[92,61606,51417],{"class":102},[92,61608,61609],{"class":151},"800",[92,61611,51472],{"class":98},[92,61613,1269],{"class":102},[92,61615,61616,61618,61620,61622],{"class":94,"line":1602},[92,61617,54989],{"class":151},[92,61619,51417],{"class":102},[92,61621,51457],{"class":151},[92,61623,1269],{"class":102},[92,61625,61626,61628,61630,61632],{"class":94,"line":1607},[92,61627,55000],{"class":151},[92,61629,51417],{"class":102},[92,61631,51560],{"class":151},[92,61633,1269],{"class":102},[92,61635,61636],{"class":94,"line":1621},[92,61637,2166],{"class":102},[92,61639,61640],{"class":94,"line":1626},[92,61641,2379],{"emptyLinePlaceholder":17},[92,61643,61644,61647],{"class":94,"line":1632},[92,61645,61646],{"class":1942},"    .avatar",[92,61648,15552],{"class":102},[92,61650,61651,61653,61655,61657,61659],{"class":94,"line":1653},[92,61652,54751],{"class":151},[92,61654,51417],{"class":102},[92,61656,710],{"class":151},[92,61658,51472],{"class":98},[92,61660,1269],{"class":102},[92,61662,61663,61665,61667,61669,61671],{"class":94,"line":1658},[92,61664,54765],{"class":151},[92,61666,51417],{"class":102},[92,61668,710],{"class":151},[92,61670,51472],{"class":98},[92,61672,1269],{"class":102},[92,61674,61675,61677,61679,61681,61683],{"class":94,"line":1672},[92,61676,55114],{"class":151},[92,61678,51417],{"class":102},[92,61680,759],{"class":151},[92,61682,431],{"class":98},[92,61684,1269],{"class":102},[92,61686,61687,61690,61692,61695],{"class":94,"line":1677},[92,61688,61689],{"class":151},"      overflow",[92,61691,51417],{"class":102},[92,61693,61694],{"class":151},"hidden",[92,61696,1269],{"class":102},[92,61698,61699,61702,61704,61707,61709,61712,61714,61717,61719,61721,61724],{"class":94,"line":1706},[92,61700,61701],{"class":151},"      background",[92,61703,51417],{"class":102},[92,61705,61706],{"class":151},"url",[92,61708,103],{"class":102},[92,61710,61711],{"class":5196},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[92,61713,13694],{"class":102},[92,61715,61716],{"class":151},"no-repeat",[92,61718,17124],{"class":151},[92,61720,24959],{"class":102},[92,61722,61723],{"class":151},"cover",[92,61725,1269],{"class":102},[92,61727,61728,61731,61733,61735,61737],{"class":94,"line":1711},[92,61729,61730],{"class":151},"      margin-right",[92,61732,51417],{"class":102},[92,61734,803],{"class":151},[92,61736,51472],{"class":98},[92,61738,1269],{"class":102},[92,61740,61741],{"class":94,"line":1728},[92,61742,2166],{"class":102},[92,61744,61745],{"class":94,"line":1733},[92,61746,2379],{"emptyLinePlaceholder":17},[92,61748,61749,61751,61754],{"class":94,"line":1738},[92,61750,61584],{"class":1942},[92,61752,61753],{"class":51280}," textarea",[92,61755,15552],{"class":102},[92,61757,61758,61761,61763,61765],{"class":94,"line":1743},[92,61759,61760],{"class":151},"      outline",[92,61762,51417],{"class":102},[92,61764,54717],{"class":151},[92,61766,1269],{"class":102},[92,61768,61769,61772,61774,61777],{"class":94,"line":1757},[92,61770,61771],{"class":151},"      border-color",[92,61773,51417],{"class":102},[92,61775,61776],{"class":151},"transparent",[92,61778,1269],{"class":102},[92,61780,61781,61784,61786,61788],{"class":94,"line":1762},[92,61782,61783],{"class":151},"      resize",[92,61785,51417],{"class":102},[92,61787,54717],{"class":151},[92,61789,1269],{"class":102},[92,61791,61792,61794,61796,61799],{"class":94,"line":2556},[92,61793,61701],{"class":151},[92,61795,51417],{"class":102},[92,61797,61798],{"class":151},"#f5f5f5",[92,61800,1269],{"class":102},[92,61802,61803,61805,61807,61809,61811],{"class":94,"line":2570},[92,61804,55114],{"class":151},[92,61806,51417],{"class":102},[92,61808,396],{"class":151},[92,61810,51472],{"class":98},[92,61812,1269],{"class":102},[92,61814,61815,61818,61820,61822],{"class":94,"line":2578},[92,61816,61817],{"class":151},"      flex",[92,61819,51417],{"class":102},[92,61821,320],{"class":151},[92,61823,1269],{"class":102},[92,61825,61826,61828,61830,61832,61834],{"class":94,"line":2583},[92,61827,54675],{"class":151},[92,61829,51417],{"class":102},[92,61831,549],{"class":151},[92,61833,51472],{"class":98},[92,61835,1269],{"class":102},[92,61837,61838,61841,61843,61845,61848,61850],{"class":94,"line":2589},[92,61839,61840],{"class":151},"      transition",[92,61842,51417],{"class":102},[92,61844,28102],{"class":151},[92,61846,61847],{"class":151}," 0.5",[92,61849,798],{"class":98},[92,61851,1269],{"class":102},[92,61853,61854,61856,61858,61860,61862],{"class":94,"line":2595},[92,61855,54765],{"class":151},[92,61857,51417],{"class":102},[92,61859,1054],{"class":151},[92,61861,51472],{"class":98},[92,61863,1269],{"class":102},[92,61865,61866],{"class":94,"line":2600},[92,61867,2166],{"class":102},[92,61869,61870],{"class":94,"line":7928},[92,61871,2379],{"emptyLinePlaceholder":17},[92,61873,61874,61876,61878,61881],{"class":94,"line":7952},[92,61875,61584],{"class":1942},[92,61877,61753],{"class":51280},[92,61879,61880],{"class":1942},":focus",[92,61882,15552],{"class":102},[92,61884,61885,61887,61889,61892],{"class":94,"line":7957},[92,61886,61771],{"class":151},[92,61888,51417],{"class":102},[92,61890,61891],{"class":151},"#e4e4e4",[92,61893,1269],{"class":102},[92,61895,61896,61898,61900,61902],{"class":94,"line":7963},[92,61897,61701],{"class":151},[92,61899,51417],{"class":102},[92,61901,60822],{"class":151},[92,61903,1269],{"class":102},[92,61905,61906,61908,61910,61912,61914],{"class":94,"line":7990},[92,61907,54765],{"class":151},[92,61909,51417],{"class":102},[92,61911,759],{"class":151},[92,61913,51472],{"class":98},[92,61915,1269],{"class":102},[92,61917,61918],{"class":94,"line":7995},[92,61919,2166],{"class":102},[92,61921,61922],{"class":94,"line":8001},[92,61923,2379],{"emptyLinePlaceholder":17},[92,61925,61926,61928,61930],{"class":94,"line":8013},[92,61927,61584],{"class":1942},[92,61929,57447],{"class":51280},[92,61931,15552],{"class":102},[92,61933,61934,61936,61938,61941],{"class":94,"line":8025},[92,61935,61701],{"class":151},[92,61937,51417],{"class":102},[92,61939,61940],{"class":151},"#00aeec",[92,61942,1269],{"class":102},[92,61944,61945,61947,61949,61951],{"class":94,"line":8037},[92,61946,57396],{"class":151},[92,61948,51417],{"class":102},[92,61950,60822],{"class":151},[92,61952,1269],{"class":102},[92,61954,61955,61958,61960,61962],{"class":94,"line":9696},[92,61956,61957],{"class":151},"      border",[92,61959,51417],{"class":102},[92,61961,54717],{"class":151},[92,61963,1269],{"class":102},[92,61965,61966,61968,61970,61972,61974],{"class":94,"line":9721},[92,61967,55114],{"class":151},[92,61969,51417],{"class":102},[92,61971,396],{"class":151},[92,61973,51472],{"class":98},[92,61975,1269],{"class":102},[92,61977,61978,61981,61983,61985,61987],{"class":94,"line":9744},[92,61979,61980],{"class":151},"      margin-left",[92,61982,51417],{"class":102},[92,61984,549],{"class":151},[92,61986,51472],{"class":98},[92,61988,1269],{"class":102},[92,61990,61991,61993,61995,61997,61999],{"class":94,"line":9768},[92,61992,54751],{"class":151},[92,61994,51417],{"class":102},[92,61996,459],{"class":151},[92,61998,51472],{"class":98},[92,62000,1269],{"class":102},[92,62002,62003,62006,62008,62011],{"class":94,"line":9773},[92,62004,62005],{"class":151},"      cursor",[92,62007,51417],{"class":102},[92,62009,62010],{"class":151},"pointer",[92,62012,1269],{"class":102},[92,62014,62015],{"class":94,"line":9778},[92,62016,2166],{"class":102},[92,62018,62019],{"class":94,"line":9783},[92,62020,2379],{"emptyLinePlaceholder":17},[92,62022,62023,62025,62028],{"class":94,"line":9792},[92,62024,61584],{"class":1942},[92,62026,62027],{"class":1942}," .total",[92,62029,15552],{"class":102},[92,62031,62032,62034,62036,62038,62040],{"class":94,"line":9797},[92,62033,61730],{"class":151},[92,62035,51417],{"class":102},[92,62037,715],{"class":151},[92,62039,51472],{"class":98},[92,62041,1269],{"class":102},[92,62043,62044,62046,62048,62051],{"class":94,"line":9803},[92,62045,57396],{"class":151},[92,62047,51417],{"class":102},[92,62049,62050],{"class":151},"#999",[92,62052,1269],{"class":102},[92,62054,62055,62058,62060,62062,62064],{"class":94,"line":9824},[92,62056,62057],{"class":151},"      margin-top",[92,62059,51417],{"class":102},[92,62061,422],{"class":151},[92,62063,51472],{"class":98},[92,62065,1269],{"class":102},[92,62067,62068,62071,62073,62075],{"class":94,"line":9830},[92,62069,62070],{"class":151},"      opacity",[92,62072,51417],{"class":102},[92,62074,294],{"class":151},[92,62076,1269],{"class":102},[92,62078,62079,62081,62083,62085,62087,62089],{"class":94,"line":9844},[92,62080,61840],{"class":151},[92,62082,51417],{"class":102},[92,62084,28102],{"class":151},[92,62086,61847],{"class":151},[92,62088,798],{"class":98},[92,62090,1269],{"class":102},[92,62092,62093],{"class":94,"line":9850},[92,62094,2166],{"class":102},[92,62096,62097],{"class":94,"line":9877},[92,62098,2379],{"emptyLinePlaceholder":17},[92,62100,62101,62104],{"class":94,"line":9886},[92,62102,62103],{"class":1942},"    .list",[92,62105,15552],{"class":102},[92,62107,62108,62110,62112,62114,62116],{"class":94,"line":9892},[92,62109,61591],{"class":151},[92,62111,51417],{"class":102},[92,62113,3966],{"class":151},[92,62115,51472],{"class":98},[92,62117,1269],{"class":102},[92,62119,62120,62122,62124,62126,62128],{"class":94,"line":9900},[92,62121,61604],{"class":151},[92,62123,51417],{"class":102},[92,62125,61609],{"class":151},[92,62127,51472],{"class":98},[92,62129,1269],{"class":102},[92,62131,62132,62134,62136,62138],{"class":94,"line":9905},[92,62133,54989],{"class":151},[92,62135,51417],{"class":102},[92,62137,51457],{"class":151},[92,62139,1269],{"class":102},[92,62141,62142],{"class":94,"line":16584},[92,62143,2166],{"class":102},[92,62145,62146],{"class":94,"line":16590},[92,62147,2379],{"emptyLinePlaceholder":17},[92,62149,62150,62152,62155],{"class":94,"line":16613},[92,62151,62103],{"class":1942},[92,62153,62154],{"class":1942}," .item",[92,62156,15552],{"class":102},[92,62158,62159,62161,62163,62165,62167],{"class":94,"line":16619},[92,62160,54751],{"class":151},[92,62162,51417],{"class":102},[92,62164,414],{"class":151},[92,62166,431],{"class":98},[92,62168,1269],{"class":102},[92,62170,62171,62173,62175,62177],{"class":94,"line":16642},[92,62172,54989],{"class":151},[92,62174,51417],{"class":102},[92,62176,51457],{"class":151},[92,62178,1269],{"class":102},[92,62180,62181],{"class":94,"line":16656},[92,62182,2166],{"class":102},[92,62184,62185],{"class":94,"line":16676},[92,62186,2379],{"emptyLinePlaceholder":17},[92,62188,62189,62191,62193,62196],{"class":94,"line":16682},[92,62190,62103],{"class":1942},[92,62192,62154],{"class":1942},[92,62194,62195],{"class":1942}," .info",[92,62197,15552],{"class":102},[92,62199,62200,62202,62204,62206],{"class":94,"line":16693},[92,62201,61817],{"class":151},[92,62203,51417],{"class":102},[92,62205,320],{"class":151},[92,62207,1269],{"class":102},[92,62209,62210,62213,62215,62217,62219,62222,62225],{"class":94,"line":16716},[92,62211,62212],{"class":151},"      border-bottom",[92,62214,51417],{"class":102},[92,62216,320],{"class":151},[92,62218,51472],{"class":98},[92,62220,62221],{"class":151}," dashed",[92,62223,62224],{"class":151}," #e4e4e4",[92,62226,1269],{"class":102},[92,62228,62229,62232,62234,62236,62238],{"class":94,"line":16738},[92,62230,62231],{"class":151},"      padding-bottom",[92,62233,51417],{"class":102},[92,62235,549],{"class":151},[92,62237,51472],{"class":98},[92,62239,1269],{"class":102},[92,62241,62242],{"class":94,"line":16743},[92,62243,2166],{"class":102},[92,62245,62246],{"class":94,"line":16749},[92,62247,2379],{"emptyLinePlaceholder":17},[92,62249,62250,62252,62254,62256],{"class":94,"line":16763},[92,62251,62103],{"class":1942},[92,62253,62154],{"class":1942},[92,62255,6805],{"class":51280},[92,62257,15552],{"class":102},[92,62259,62260,62262,62264,62266],{"class":94,"line":16776},[92,62261,54686],{"class":151},[92,62263,51417],{"class":102},[92,62265,294],{"class":151},[92,62267,1269],{"class":102},[92,62269,62270],{"class":94,"line":16781},[92,62271,2166],{"class":102},[92,62273,62274],{"class":94,"line":16795},[92,62275,2379],{"emptyLinePlaceholder":17},[92,62277,62278,62280,62282,62285],{"class":94,"line":16800},[92,62279,62103],{"class":1942},[92,62281,62154],{"class":1942},[92,62283,62284],{"class":1942}," .name",[92,62286,15552],{"class":102},[92,62288,62289,62291,62293,62296],{"class":94,"line":16806},[92,62290,57396],{"class":151},[92,62292,51417],{"class":102},[92,62294,62295],{"class":151},"#FB7299",[92,62297,1269],{"class":102},[92,62299,62300,62302,62304,62306,62308],{"class":94,"line":16811},[92,62301,54902],{"class":151},[92,62303,51417],{"class":102},[92,62305,652],{"class":151},[92,62307,51472],{"class":98},[92,62309,1269],{"class":102},[92,62311,62312,62315,62317,62320],{"class":94,"line":16825},[92,62313,62314],{"class":151},"      font-weight",[92,62316,51417],{"class":102},[92,62318,62319],{"class":151},"bold",[92,62321,1269],{"class":102},[92,62323,62324],{"class":94,"line":16830},[92,62325,2166],{"class":102},[92,62327,62328],{"class":94,"line":16835},[92,62329,2379],{"emptyLinePlaceholder":17},[92,62331,62332,62334,62336,62339],{"class":94,"line":16849},[92,62333,62103],{"class":1942},[92,62335,62154],{"class":1942},[92,62337,62338],{"class":1942}," .text",[92,62340,15552],{"class":102},[92,62342,62343,62345,62347,62350],{"class":94,"line":16861},[92,62344,57396],{"class":151},[92,62346,51417],{"class":102},[92,62348,62349],{"class":151},"#333",[92,62351,1269],{"class":102},[92,62353,62354,62356,62358,62360,62362,62364],{"class":94,"line":16866},[92,62355,54675],{"class":151},[92,62357,51417],{"class":102},[92,62359,549],{"class":151},[92,62361,51472],{"class":98},[92,62363,4072],{"class":151},[92,62365,1269],{"class":102},[92,62367,62368],{"class":94,"line":16879},[92,62369,2166],{"class":102},[92,62371,62372],{"class":94,"line":16884},[92,62373,2379],{"emptyLinePlaceholder":17},[92,62375,62376,62378,62380,62383],{"class":94,"line":16889},[92,62377,62103],{"class":1942},[92,62379,62154],{"class":1942},[92,62381,62382],{"class":1942}," .time",[92,62384,15552],{"class":102},[92,62386,62387,62389,62391,62393],{"class":94,"line":16894},[92,62388,57396],{"class":151},[92,62390,51417],{"class":102},[92,62392,62050],{"class":151},[92,62394,1269],{"class":102},[92,62396,62397,62399,62401,62403,62405],{"class":94,"line":16907},[92,62398,54902],{"class":151},[92,62400,51417],{"class":102},[92,62402,601],{"class":151},[92,62404,51472],{"class":98},[92,62406,1269],{"class":102},[92,62408,62409],{"class":94,"line":16912},[92,62410,2166],{"class":102},[92,62412,62413,62415,62417],{"class":94,"line":32614},[92,62414,52397],{"class":102},[92,62416,5106],{"class":51280},[92,62418,51287],{"class":102},[92,62420,62421,62423,62425],{"class":94,"line":32620},[92,62422,51765],{"class":102},[92,62424,51314],{"class":51280},[92,62426,51287],{"class":102},[92,62428,62429],{"class":94,"line":32626},[92,62430,2379],{"emptyLinePlaceholder":17},[92,62432,62433,62435,62437],{"class":94,"line":32632},[92,62434,1013],{"class":102},[92,62436,51780],{"class":51280},[92,62438,51287],{"class":102},[92,62440,62441,62443,62445,62447,62449,62452],{"class":94,"line":32638},[92,62442,52124],{"class":102},[92,62444,51591],{"class":51280},[92,62446,53466],{"class":1942},[92,62448,148],{"class":102},[92,62450,62451],{"class":207},"\"wrapper\"",[92,62453,51287],{"class":102},[92,62455,62456,62458,62460,62462,62464,62467,62469,62471],{"class":94,"line":32649},[92,62457,51321],{"class":102},[92,62459,544],{"class":51280},[92,62461,53466],{"class":1942},[92,62463,148],{"class":102},[92,62465,62466],{"class":207},"\"avatar\"",[92,62468,55294],{"class":102},[92,62470,544],{"class":51280},[92,62472,51287],{"class":102},[92,62474,62475,62477,62479,62481,62483,62486,62488,62490,62493,62495,62497,62499,62502,62504,62507,62509,62511],{"class":94,"line":32655},[92,62476,51321],{"class":102},[92,62478,54268],{"class":51280},[92,62480,14939],{"class":1942},[92,62482,148],{"class":102},[92,62484,62485],{"class":207},"\"tx\"",[92,62487,61000],{"class":1942},[92,62489,148],{"class":102},[92,62491,62492],{"class":207},"\"发一条友善的评论\"",[92,62494,54291],{"class":1942},[92,62496,148],{"class":102},[92,62498,3680],{"class":207},[92,62500,62501],{"class":1942}," maxlength",[92,62503,148],{"class":102},[92,62505,62506],{"class":207},"\"200\"",[92,62508,55294],{"class":102},[92,62510,54268],{"class":51280},[92,62512,51287],{"class":102},[92,62514,62515,62517,62519,62522,62524],{"class":94,"line":32675},[92,62516,51321],{"class":102},[92,62518,53867],{"class":51280},[92,62520,62521],{"class":102},">发布\u003C\u002F",[92,62523,53867],{"class":51280},[92,62525,51287],{"class":102},[92,62527,62528,62530,62532],{"class":94,"line":32681},[92,62529,52397],{"class":102},[92,62531,51591],{"class":51280},[92,62533,51287],{"class":102},[92,62535,62536,62538,62540,62542,62544,62546],{"class":94,"line":32692},[92,62537,52124],{"class":102},[92,62539,51591],{"class":51280},[92,62541,53466],{"class":1942},[92,62543,148],{"class":102},[92,62545,62451],{"class":207},[92,62547,51287],{"class":102},[92,62549,62550,62552,62554,62556,62558,62561,62564,62566],{"class":94,"line":32698},[92,62551,51321],{"class":102},[92,62553,92],{"class":51280},[92,62555,53466],{"class":1942},[92,62557,148],{"class":102},[92,62559,62560],{"class":207},"\"total\"",[92,62562,62563],{"class":102},">0\u002F200字\u003C\u002F",[92,62565,92],{"class":51280},[92,62567,51287],{"class":102},[92,62569,62570,62572,62574],{"class":94,"line":32704},[92,62571,52397],{"class":102},[92,62573,51591],{"class":51280},[92,62575,51287],{"class":102},[92,62577,62578,62580,62582,62584,62586,62589],{"class":94,"line":32710},[92,62579,52124],{"class":102},[92,62581,51591],{"class":51280},[92,62583,53466],{"class":1942},[92,62585,148],{"class":102},[92,62587,62588],{"class":207},"\"list\"",[92,62590,51287],{"class":102},[92,62592,62593,62595,62597,62599,62601,62604,62607,62609,62612],{"class":94,"line":32716},[92,62594,51321],{"class":102},[92,62596,51591],{"class":51280},[92,62598,53466],{"class":1942},[92,62600,148],{"class":102},[92,62602,62603],{"class":207},"\"item\"",[92,62605,62606],{"class":1942}," style",[92,62608,148],{"class":102},[92,62610,62611],{"class":207},"\"display: none;\"",[92,62613,51287],{"class":102},[92,62615,62616,62618,62620,62622,62624,62626,62628,62630],{"class":94,"line":32722},[92,62617,55214],{"class":102},[92,62619,544],{"class":51280},[92,62621,53466],{"class":1942},[92,62623,148],{"class":102},[92,62625,62466],{"class":207},[92,62627,55294],{"class":102},[92,62629,544],{"class":51280},[92,62631,51287],{"class":102},[92,62633,62634,62636,62638,62640,62642,62645],{"class":94,"line":32728},[92,62635,55214],{"class":102},[92,62637,51591],{"class":51280},[92,62639,53466],{"class":1942},[92,62641,148],{"class":102},[92,62643,62644],{"class":207},"\"info\"",[92,62646,51287],{"class":102},[92,62648,62649,62651,62653,62655,62657,62660,62663,62665],{"class":94,"line":32734},[92,62650,55282],{"class":102},[92,62652,38],{"class":51280},[92,62654,53466],{"class":1942},[92,62656,148],{"class":102},[92,62658,62659],{"class":207},"\"name\"",[92,62661,62662],{"class":102},">清风徐来\u003C\u002F",[92,62664,38],{"class":51280},[92,62666,51287],{"class":102},[92,62668,62669,62671,62673,62675,62677,62680,62683,62685],{"class":94,"line":32754},[92,62670,55282],{"class":102},[92,62672,38],{"class":51280},[92,62674,53466],{"class":1942},[92,62676,148],{"class":102},[92,62678,62679],{"class":207},"\"text\"",[92,62681,62682],{"class":102},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[92,62684,38],{"class":51280},[92,62686,51287],{"class":102},[92,62688,62689,62691,62693,62695,62697,62700,62703,62705],{"class":94,"line":32760},[92,62690,55282],{"class":102},[92,62692,38],{"class":51280},[92,62694,53466],{"class":1942},[92,62696,148],{"class":102},[92,62698,62699],{"class":207},"\"time\"",[92,62701,62702],{"class":102},">2022-10-10 20:29:21\u003C\u002F",[92,62704,38],{"class":51280},[92,62706,51287],{"class":102},[92,62708,62709,62711,62713],{"class":94,"line":32776},[92,62710,55387],{"class":102},[92,62712,51591],{"class":51280},[92,62714,51287],{"class":102},[92,62716,62717,62719,62721],{"class":94,"line":32782},[92,62718,51756],{"class":102},[92,62720,51591],{"class":51280},[92,62722,51287],{"class":102},[92,62724,62725,62727,62729],{"class":94,"line":32796},[92,62726,52397],{"class":102},[92,62728,51591],{"class":51280},[92,62730,51287],{"class":102},[92,62732,62733,62735,62737],{"class":94,"line":32802},[92,62734,52124],{"class":102},[92,62736,51793],{"class":51280},[92,62738,51287],{"class":102},[92,62740,62741,62743,62746,62748,62750,62752,62754,62757],{"class":94,"line":32817},[92,62742,11201],{"class":98},[92,62744,62745],{"class":151}," tx",[92,62747,13544],{"class":98},[92,62749,54376],{"class":102},[92,62751,54379],{"class":1942},[92,62753,103],{"class":102},[92,62755,62756],{"class":207},"'#tx'",[92,62758,109],{"class":102},[92,62760,62761,62763,62766,62768,62770,62772,62774,62777],{"class":94,"line":32823},[92,62762,11201],{"class":98},[92,62764,62765],{"class":151}," total",[92,62767,13544],{"class":98},[92,62769,54376],{"class":102},[92,62771,54379],{"class":1942},[92,62773,103],{"class":102},[92,62775,62776],{"class":207},"'.total'",[92,62778,109],{"class":102},[92,62780,62781],{"class":94,"line":32832},[92,62782,62783],{"class":161},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[92,62785,62786,62789,62791,62793,62795,62797,62799],{"class":94,"line":32838},[92,62787,62788],{"class":102},"    tx.",[92,62790,57793],{"class":1942},[92,62792,103],{"class":102},[92,62794,61307],{"class":207},[92,62796,12415],{"class":102},[92,62798,54429],{"class":98},[92,62800,54432],{"class":102},[92,62802,62803,62806,62808],{"class":94,"line":32847},[92,62804,62805],{"class":102},"      total.style.opacity ",[92,62807,148],{"class":98},[92,62809,55679],{"class":151},[92,62811,62812],{"class":94,"line":32853},[92,62813,33442],{"class":102},[92,62815,62816],{"class":94,"line":32859},[92,62817,62818],{"class":161},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[92,62820,62821,62823,62825,62827,62829,62831,62833],{"class":94,"line":32868},[92,62822,62788],{"class":102},[92,62824,57793],{"class":1942},[92,62826,103],{"class":102},[92,62828,61368],{"class":207},[92,62830,12415],{"class":102},[92,62832,54429],{"class":98},[92,62834,54432],{"class":102},[92,62836,62837,62839,62841],{"class":94,"line":32874},[92,62838,62805],{"class":102},[92,62840,148],{"class":98},[92,62842,47314],{"class":151},[92,62844,62845],{"class":94,"line":32885},[92,62846,33442],{"class":102},[92,62848,62849],{"class":94,"line":32891},[92,62850,62851],{"class":161},"    \u002F\u002F 3. 检测用户输入\n",[92,62853,62854,62856,62858,62860,62863,62865,62867],{"class":94,"line":32910},[92,62855,62788],{"class":102},[92,62857,57793],{"class":1942},[92,62859,103],{"class":102},[92,62861,62862],{"class":207},"'input'",[92,62864,12415],{"class":102},[92,62866,54429],{"class":98},[92,62868,54432],{"class":102},[92,62870,62871],{"class":94,"line":32916},[92,62872,62873],{"class":161},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[92,62875,62876,62879,62881,62884,62887,62889,62892,62894,62896],{"class":94,"line":32927},[92,62877,62878],{"class":102},"      total.innerHTML ",[92,62880,148],{"class":98},[92,62882,62883],{"class":207}," `${",[92,62885,62886],{"class":102},"tx",[92,62888,661],{"class":207},[92,62890,62891],{"class":102},"value",[92,62893,661],{"class":207},[92,62895,51948],{"class":151},[92,62897,62898],{"class":207},"}\u002F200字`\n",[92,62900,62901],{"class":94,"line":32933},[92,62902,33442],{"class":102},[92,62904,62905],{"class":94,"line":32953},[92,62906,2379],{"emptyLinePlaceholder":17},[92,62908,62909],{"class":94,"line":32969},[92,62910,62911],{"class":161},"    \u002F\u002F const str = 'andy'\n",[92,62913,62914],{"class":94,"line":32975},[92,62915,62916],{"class":161},"    \u002F\u002F console.log(str.length)\n",[92,62918,62919,62921,62923],{"class":94,"line":32989},[92,62920,52397],{"class":102},[92,62922,51793],{"class":51280},[92,62924,51287],{"class":102},[92,62926,62927,62929,62931],{"class":94,"line":32995},[92,62928,51765],{"class":102},[92,62930,51780],{"class":51280},[92,62932,51287],{"class":102},[92,62934,62935],{"class":94,"line":33001},[92,62936,2379],{"emptyLinePlaceholder":17},[92,62938,62939,62941,62943],{"class":94,"line":33012},[92,62940,51765],{"class":102},[92,62942,50615],{"class":51280},[92,62944,51287],{"class":102},[21978,62946,62948],{"id":62947},"_3254-change事件","3.2.5.4 change事件",[38,62950,62951],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[38,62953,62954],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[38,62956,62957],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[83,62959,62961],{"className":50613,"code":62960,"language":50615,"meta":10,"style":10},"\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",[89,62962,62963,62973,62987,62991,62999,63013,63033,63045,63053,63057,63065,63079,63087,63105,63123,63135,63139,63147,63155,63159],{"__ignoreMap":10},[92,62964,62965,62967,62969,62971],{"class":94,"line":95},[92,62966,51277],{"class":102},[92,62968,51281],{"class":51280},[92,62970,51284],{"class":1942},[92,62972,51287],{"class":102},[92,62974,62975,62977,62979,62981,62983,62985],{"class":94,"line":11},[92,62976,1013],{"class":102},[92,62978,50615],{"class":51280},[92,62980,51296],{"class":1942},[92,62982,148],{"class":102},[92,62984,51301],{"class":207},[92,62986,51287],{"class":102},[92,62988,62989],{"class":94,"line":1158},[92,62990,2379],{"emptyLinePlaceholder":17},[92,62992,62993,62995,62997],{"class":94,"line":1173},[92,62994,1013],{"class":102},[92,62996,51314],{"class":51280},[92,62998,51287],{"class":102},[92,63000,63001,63003,63005,63007,63009,63011],{"class":94,"line":1179},[92,63002,52124],{"class":102},[92,63004,51324],{"class":51280},[92,63006,51327],{"class":1942},[92,63008,148],{"class":102},[92,63010,51332],{"class":207},[92,63012,51287],{"class":102},[92,63014,63015,63017,63019,63021,63023,63025,63027,63029,63031],{"class":94,"line":1193},[92,63016,52124],{"class":102},[92,63018,51324],{"class":51280},[92,63020,14900],{"class":1942},[92,63022,148],{"class":102},[92,63024,51371],{"class":207},[92,63026,51351],{"class":1942},[92,63028,148],{"class":102},[92,63030,51378],{"class":207},[92,63032,51287],{"class":102},[92,63034,63035,63037,63039,63041,63043],{"class":94,"line":1199},[92,63036,52124],{"class":102},[92,63038,51387],{"class":51280},[92,63040,51390],{"class":102},[92,63042,51387],{"class":51280},[92,63044,51287],{"class":102},[92,63046,63047,63049,63051],{"class":94,"line":1290},[92,63048,51765],{"class":102},[92,63050,51314],{"class":51280},[92,63052,51287],{"class":102},[92,63054,63055],{"class":94,"line":1296},[92,63056,2379],{"emptyLinePlaceholder":17},[92,63058,63059,63061,63063],{"class":94,"line":1308},[92,63060,1013],{"class":102},[92,63062,51780],{"class":51280},[92,63064,51287],{"class":102},[92,63066,63067,63069,63071,63073,63075,63077],{"class":94,"line":1591},[92,63068,52124],{"class":102},[92,63070,53801],{"class":51280},[92,63072,53804],{"class":1942},[92,63074,148],{"class":102},[92,63076,62679],{"class":207},[92,63078,51287],{"class":102},[92,63080,63081,63083,63085],{"class":94,"line":1596},[92,63082,52124],{"class":102},[92,63084,51793],{"class":51280},[92,63086,51287],{"class":102},[92,63088,63089,63091,63093,63095,63097,63099,63101,63103],{"class":94,"line":1602},[92,63090,11201],{"class":98},[92,63092,60585],{"class":151},[92,63094,13544],{"class":98},[92,63096,54376],{"class":102},[92,63098,54379],{"class":1942},[92,63100,103],{"class":102},[92,63102,62862],{"class":207},[92,63104,109],{"class":102},[92,63106,63107,63110,63112,63114,63117,63119,63121],{"class":94,"line":1607},[92,63108,63109],{"class":102},"    input.",[92,63111,57793],{"class":1942},[92,63113,103],{"class":102},[92,63115,63116],{"class":207},"'change'",[92,63118,12415],{"class":102},[92,63120,54429],{"class":98},[92,63122,54432],{"class":102},[92,63124,63125,63127,63129,63131,63133],{"class":94,"line":1621},[92,63126,58224],{"class":102},[92,63128,58227],{"class":1942},[92,63130,103],{"class":102},[92,63132,696],{"class":151},[92,63134,109],{"class":102},[92,63136,63137],{"class":94,"line":1626},[92,63138,33442],{"class":102},[92,63140,63141,63143,63145],{"class":94,"line":1632},[92,63142,52397],{"class":102},[92,63144,51793],{"class":51280},[92,63146,51287],{"class":102},[92,63148,63149,63151,63153],{"class":94,"line":1653},[92,63150,51765],{"class":102},[92,63152,51780],{"class":51280},[92,63154,51287],{"class":102},[92,63156,63157],{"class":94,"line":1658},[92,63158,2379],{"emptyLinePlaceholder":17},[92,63160,63161,63163,63165],{"class":94,"line":1672},[92,63162,51765],{"class":102},[92,63164,50615],{"class":51280},[92,63166,51287],{"class":102},[38,63168,63169],{},"总结：内容发生改变才回去触发",[63,63171,63173],{"id":63172},"_326-事件对象","3.2.6 事件对象",[21978,63175,63177],{"id":63176},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[38,63179,63180],{},[1441,63181],{"alt":10,"src":63182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[38,63184,63185],{},[1441,63186],{"alt":10,"src":63187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[38,63189,63190],{},"点击一次，就输出了事件对象，它是个对象",[38,63192,63193],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[38,63195,63196],{},[1441,63197],{"alt":10,"src":63198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21978,63200,63202],{"id":63201},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[38,63204,63205],{},[1441,63206],{"alt":10,"src":63207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[38,63209,63210],{},"实现按特殊字符才是实现打印输出效果：",[83,63212,63214],{"className":53047,"code":63213,"language":53049,"meta":10,"style":10},"\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",[89,63215,63216,63224,63229,63243,63251,63256,63261,63266,63271,63276,63281,63286,63291,63296,63300,63304,63312],{"__ignoreMap":10},[92,63217,63218,63220,63222],{"class":94,"line":95},[92,63219,1013],{"class":102},[92,63221,51780],{"class":51280},[92,63223,51287],{"class":102},[92,63225,63226],{"class":94,"line":11},[92,63227,63228],{"class":161},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[92,63230,63231,63233,63235,63237,63239,63241],{"class":94,"line":1158},[92,63232,52124],{"class":102},[92,63234,53801],{"class":51280},[92,63236,53804],{"class":1942},[92,63238,148],{"class":102},[92,63240,62679],{"class":207},[92,63242,51287],{"class":102},[92,63244,63245,63247,63249],{"class":94,"line":1173},[92,63246,52124],{"class":102},[92,63248,51793],{"class":51280},[92,63250,51287],{"class":102},[92,63252,63253],{"class":94,"line":1179},[92,63254,63255],{"class":102},"    \u002F\u002F const btn = document.querySelector('button')\n",[92,63257,63258],{"class":94,"line":1193},[92,63259,63260],{"class":102},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[92,63262,63263],{"class":94,"line":1199},[92,63264,63265],{"class":102},"    \u002F\u002F   console.log(e);\n",[92,63267,63268],{"class":94,"line":1290},[92,63269,63270],{"class":102},"    \u002F\u002F })\n",[92,63272,63273],{"class":94,"line":1296},[92,63274,63275],{"class":102},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[92,63277,63278],{"class":94,"line":1308},[92,63279,63280],{"class":102},"    const input = document.querySelector('input')\n",[92,63282,63283],{"class":94,"line":1591},[92,63284,63285],{"class":102},"    input.addEventListener('keyup', function (e) {\n",[92,63287,63288],{"class":94,"line":1596},[92,63289,63290],{"class":102},"      if (e.key === 'Enter') {\n",[92,63292,63293],{"class":94,"line":1602},[92,63294,63295],{"class":102},"        console.log('我按下了回车键')\n",[92,63297,63298],{"class":94,"line":1607},[92,63299,52378],{"class":102},[92,63301,63302],{"class":94,"line":1621},[92,63303,33442],{"class":102},[92,63305,63306,63308,63310],{"class":94,"line":1626},[92,63307,52397],{"class":102},[92,63309,51793],{"class":51280},[92,63311,51287],{"class":102},[92,63313,63314,63316,63318],{"class":94,"line":1632},[92,63315,51765],{"class":102},[92,63317,51780],{"class":51280},[92,63319,51287],{"class":102},[21978,63321,63323],{"id":63322},"_3263-trim方法","3.2.6.3 trim方法",[38,63325,63326],{},[1441,63327],{"alt":10,"src":63328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[38,63330,63331],{},[1441,63332],{"alt":10,"src":63333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[38,63335,63336],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[38,63338,63339],{},"str.trim()",[63,63341,63343],{"id":63342},"_327-环境对象","3.2.7 环境对象",[38,63345,63346],{},[1441,63347],{"alt":10,"src":63348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[38,63350,63351],{},[1441,63352],{"alt":10,"src":63353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[38,63355,63356],{},[1441,63357],{"alt":10,"src":63358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[38,63360,63361],{},"实际函数调用是window.fn()",[38,63363,63364],{},"普通函数里面this指向的是window",[1110,63366,63367,63370,63373],{},[49,63368,63369],{},"在普通函数下，this指向的是window",[49,63371,63372],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[49,63374,63375],{},"箭头函数没有this",[38,63377,63378],{},"粗略记法就是：谁调用，this就指向谁",[38,63380,63381],{},[1441,63382],{"alt":10,"src":63383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[38,63385,63386],{},[1441,63387],{"alt":10,"src":63388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[38,63390,63391],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[38,63393,63394],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[83,63396,63398],{"className":53047,"code":63397,"language":53049,"meta":10,"style":10},"\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",[89,63399,63400,63408,63420,63428,63433,63438,63443,63448,63452,63460],{"__ignoreMap":10},[92,63401,63402,63404,63406],{"class":94,"line":95},[92,63403,1013],{"class":102},[92,63405,51780],{"class":51280},[92,63407,51287],{"class":102},[92,63409,63410,63412,63414,63416,63418],{"class":94,"line":11},[92,63411,52124],{"class":102},[92,63413,53867],{"class":51280},[92,63415,53873],{"class":102},[92,63417,53867],{"class":51280},[92,63419,51287],{"class":102},[92,63421,63422,63424,63426],{"class":94,"line":1158},[92,63423,52124],{"class":102},[92,63425,51793],{"class":51280},[92,63427,51287],{"class":102},[92,63429,63430],{"class":94,"line":1173},[92,63431,63432],{"class":102},"    const button = document.querySelector('button')\n",[92,63434,63435],{"class":94,"line":1179},[92,63436,63437],{"class":102},"    button.addEventListener('click', function () {\n",[92,63439,63440],{"class":94,"line":1193},[92,63441,63442],{"class":102},"      \u002F\u002F console.log(this);\n",[92,63444,63445],{"class":94,"line":1199},[92,63446,63447],{"class":102},"      this.style.color = 'pink'\n",[92,63449,63450],{"class":94,"line":1290},[92,63451,33442],{"class":102},[92,63453,63454,63456,63458],{"class":94,"line":1296},[92,63455,52397],{"class":102},[92,63457,51793],{"class":51280},[92,63459,51287],{"class":102},[92,63461,63462,63464,63466],{"class":94,"line":1308},[92,63463,51765],{"class":102},[92,63465,51780],{"class":51280},[92,63467,51287],{"class":102},[63,63469,63471],{"id":63470},"_328-回调函数","3.2.8 回调函数",[38,63473,63474],{},[1441,63475],{"alt":10,"src":63476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[38,63478,63479],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[38,63481,11312],{},[1110,63483,63484,63487,63490],{},[49,63485,63486],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[49,63488,63489],{},"回调函数本质还是函数，只不过把它当成参数使用",[49,63491,63492],{},"使用匿名函数做为回调函数比较常见",[63,63494,63496],{"id":63495},"_329-tab栏切换","3.2.9 tab栏切换",[38,63498,63499],{},[1441,63500],{"alt":10,"src":63501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[83,63503,63505],{"className":50613,"code":63504,"language":50615,"meta":10,"style":10},"\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",[89,63506,63507,63517,63531,63535,63543,63557,63577,63597,63610,63618,63624,63634,63644,63648,63652,63659,63672,63685,63697,63713,63717,63721,63728,63740,63752,63764,63774,63784,63788,63792,63801,63813,63824,63836,63840,63844,63852,63862,63872,63882,63886,63890,63900,63914,63926,63930,63934,63946,63957,63974,63984,63988,63992,64007,64018,64028,64032,64036,64043,64058,64062,64066,64074,64084,64088,64092,64101,64111,64115,64123,64131,64135,64143,64158,64173,64186,64194,64228,64255,64282,64309,64336,64344,64352,64367,64404,64439,64474,64509,64544,64552,64560,64568,64573,64578,64598,64603,64632,64637,64642,64660,64665,64670,64675,64697,64702,64718,64722,64727,64732,64753,64758,64787,64791,64796,64800,64808,64816,64820],{"__ignoreMap":10},[92,63508,63509,63511,63513,63515],{"class":94,"line":95},[92,63510,51277],{"class":102},[92,63512,51281],{"class":51280},[92,63514,51284],{"class":1942},[92,63516,51287],{"class":102},[92,63518,63519,63521,63523,63525,63527,63529],{"class":94,"line":11},[92,63520,1013],{"class":102},[92,63522,50615],{"class":51280},[92,63524,51296],{"class":1942},[92,63526,148],{"class":102},[92,63528,51301],{"class":207},[92,63530,51287],{"class":102},[92,63532,63533],{"class":94,"line":1158},[92,63534,2379],{"emptyLinePlaceholder":17},[92,63536,63537,63539,63541],{"class":94,"line":1173},[92,63538,1013],{"class":102},[92,63540,51314],{"class":51280},[92,63542,51287],{"class":102},[92,63544,63545,63547,63549,63551,63553,63555],{"class":94,"line":1179},[92,63546,52124],{"class":102},[92,63548,51324],{"class":51280},[92,63550,51327],{"class":1942},[92,63552,148],{"class":102},[92,63554,51332],{"class":207},[92,63556,59107],{"class":102},[92,63558,63559,63561,63563,63565,63567,63569,63571,63573,63575],{"class":94,"line":1193},[92,63560,52124],{"class":102},[92,63562,51324],{"class":51280},[92,63564,51343],{"class":1942},[92,63566,148],{"class":102},[92,63568,51348],{"class":207},[92,63570,51351],{"class":1942},[92,63572,148],{"class":102},[92,63574,51356],{"class":207},[92,63576,59107],{"class":102},[92,63578,63579,63581,63583,63585,63587,63589,63591,63593,63595],{"class":94,"line":1199},[92,63580,52124],{"class":102},[92,63582,51324],{"class":51280},[92,63584,14900],{"class":1942},[92,63586,148],{"class":102},[92,63588,51371],{"class":207},[92,63590,51351],{"class":1942},[92,63592,148],{"class":102},[92,63594,51378],{"class":207},[92,63596,59107],{"class":102},[92,63598,63599,63601,63603,63606,63608],{"class":94,"line":1290},[92,63600,52124],{"class":102},[92,63602,51387],{"class":51280},[92,63604,63605],{"class":102},">tab栏切换\u003C\u002F",[92,63607,51387],{"class":51280},[92,63609,51287],{"class":102},[92,63611,63612,63614,63616],{"class":94,"line":1296},[92,63613,52124],{"class":102},[92,63615,5106],{"class":51280},[92,63617,51287],{"class":102},[92,63619,63620,63622],{"class":94,"line":1308},[92,63621,6383],{"class":51280},[92,63623,15552],{"class":102},[92,63625,63626,63628,63630,63632],{"class":94,"line":1591},[92,63627,54686],{"class":151},[92,63629,51417],{"class":102},[92,63631,294],{"class":151},[92,63633,1269],{"class":102},[92,63635,63636,63638,63640,63642],{"class":94,"line":1596},[92,63637,54675],{"class":151},[92,63639,51417],{"class":102},[92,63641,294],{"class":151},[92,63643,1269],{"class":102},[92,63645,63646],{"class":94,"line":1602},[92,63647,2166],{"class":102},[92,63649,63650],{"class":94,"line":1607},[92,63651,2379],{"emptyLinePlaceholder":17},[92,63653,63654,63657],{"class":94,"line":1621},[92,63655,63656],{"class":1942},"    .tab",[92,63658,15552],{"class":102},[92,63660,63661,63663,63665,63668,63670],{"class":94,"line":1626},[92,63662,54751],{"class":151},[92,63664,51417],{"class":102},[92,63666,63667],{"class":151},"590",[92,63669,51472],{"class":98},[92,63671,1269],{"class":102},[92,63673,63674,63676,63678,63681,63683],{"class":94,"line":1632},[92,63675,54765],{"class":151},[92,63677,51417],{"class":102},[92,63679,63680],{"class":151},"340",[92,63682,51472],{"class":98},[92,63684,1269],{"class":102},[92,63686,63687,63689,63691,63693,63695],{"class":94,"line":1653},[92,63688,54686],{"class":151},[92,63690,51417],{"class":102},[92,63692,803],{"class":151},[92,63694,51472],{"class":98},[92,63696,1269],{"class":102},[92,63698,63699,63701,63703,63705,63707,63709,63711],{"class":94,"line":1658},[92,63700,61957],{"class":151},[92,63702,51417],{"class":102},[92,63704,320],{"class":151},[92,63706,51472],{"class":98},[92,63708,51501],{"class":151},[92,63710,62224],{"class":151},[92,63712,1269],{"class":102},[92,63714,63715],{"class":94,"line":1672},[92,63716,2166],{"class":102},[92,63718,63719],{"class":94,"line":1677},[92,63720,2379],{"emptyLinePlaceholder":17},[92,63722,63723,63726],{"class":94,"line":1706},[92,63724,63725],{"class":1942},"    .tab-nav",[92,63727,15552],{"class":102},[92,63729,63730,63732,63734,63736,63738],{"class":94,"line":1711},[92,63731,54751],{"class":151},[92,63733,51417],{"class":102},[92,63735,414],{"class":151},[92,63737,431],{"class":98},[92,63739,1269],{"class":102},[92,63741,63742,63744,63746,63748,63750],{"class":94,"line":1728},[92,63743,54765],{"class":151},[92,63745,51417],{"class":102},[92,63747,1010],{"class":151},[92,63749,51472],{"class":98},[92,63751,1269],{"class":102},[92,63753,63754,63756,63758,63760,63762],{"class":94,"line":1733},[92,63755,57339],{"class":151},[92,63757,51417],{"class":102},[92,63759,1010],{"class":151},[92,63761,51472],{"class":98},[92,63763,1269],{"class":102},[92,63765,63766,63768,63770,63772],{"class":94,"line":1738},[92,63767,54989],{"class":151},[92,63769,51417],{"class":102},[92,63771,51457],{"class":151},[92,63773,1269],{"class":102},[92,63775,63776,63778,63780,63782],{"class":94,"line":1743},[92,63777,55000],{"class":151},[92,63779,51417],{"class":102},[92,63781,51648],{"class":151},[92,63783,1269],{"class":102},[92,63785,63786],{"class":94,"line":1757},[92,63787,2166],{"class":102},[92,63789,63790],{"class":94,"line":1762},[92,63791,2379],{"emptyLinePlaceholder":17},[92,63793,63794,63796,63799],{"class":94,"line":2556},[92,63795,63725],{"class":1942},[92,63797,63798],{"class":51280}," h3",[92,63800,15552],{"class":102},[92,63802,63803,63805,63807,63809,63811],{"class":94,"line":2570},[92,63804,54902],{"class":151},[92,63806,51417],{"class":102},[92,63808,903],{"class":151},[92,63810,51472],{"class":98},[92,63812,1269],{"class":102},[92,63814,63815,63817,63819,63822],{"class":94,"line":2578},[92,63816,62314],{"class":151},[92,63818,51417],{"class":102},[92,63820,63821],{"class":151},"normal",[92,63823,1269],{"class":102},[92,63825,63826,63828,63830,63832,63834],{"class":94,"line":2583},[92,63827,61980],{"class":151},[92,63829,51417],{"class":102},[92,63831,803],{"class":151},[92,63833,51472],{"class":98},[92,63835,1269],{"class":102},[92,63837,63838],{"class":94,"line":2589},[92,63839,2166],{"class":102},[92,63841,63842],{"class":94,"line":2595},[92,63843,2379],{"emptyLinePlaceholder":17},[92,63845,63846,63848,63850],{"class":94,"line":2600},[92,63847,63725],{"class":1942},[92,63849,61272],{"class":51280},[92,63851,15552],{"class":102},[92,63853,63854,63856,63858,63860],{"class":94,"line":7928},[92,63855,54712],{"class":151},[92,63857,51417],{"class":102},[92,63859,54717],{"class":151},[92,63861,1269],{"class":102},[92,63863,63864,63866,63868,63870],{"class":94,"line":7952},[92,63865,54989],{"class":151},[92,63867,51417],{"class":102},[92,63869,51457],{"class":151},[92,63871,1269],{"class":102},[92,63873,63874,63876,63878,63880],{"class":94,"line":7957},[92,63875,55000],{"class":151},[92,63877,51417],{"class":102},[92,63879,51560],{"class":151},[92,63881,1269],{"class":102},[92,63883,63884],{"class":94,"line":7963},[92,63885,2166],{"class":102},[92,63887,63888],{"class":94,"line":7990},[92,63889,2379],{"emptyLinePlaceholder":17},[92,63891,63892,63894,63896,63898],{"class":94,"line":7995},[92,63893,63725],{"class":1942},[92,63895,61272],{"class":51280},[92,63897,55055],{"class":51280},[92,63899,15552],{"class":102},[92,63901,63902,63904,63906,63908,63910,63912],{"class":94,"line":8001},[92,63903,54686],{"class":151},[92,63905,51417],{"class":102},[92,63907,294],{"class":151},[92,63909,8930],{"class":151},[92,63911,51472],{"class":98},[92,63913,1269],{"class":102},[92,63915,63916,63918,63920,63922,63924],{"class":94,"line":8013},[92,63917,54902],{"class":151},[92,63919,51417],{"class":102},[92,63921,652],{"class":151},[92,63923,51472],{"class":98},[92,63925,1269],{"class":102},[92,63927,63928],{"class":94,"line":8025},[92,63929,2166],{"class":102},[92,63931,63932],{"class":94,"line":8037},[92,63933,2379],{"emptyLinePlaceholder":17},[92,63935,63936,63938,63940,63942,63944],{"class":94,"line":9696},[92,63937,63725],{"class":1942},[92,63939,61272],{"class":51280},[92,63941,55055],{"class":51280},[92,63943,1377],{"class":51280},[92,63945,15552],{"class":102},[92,63947,63948,63951,63953,63955],{"class":94,"line":9721},[92,63949,63950],{"class":151},"      text-decoration",[92,63952,51417],{"class":102},[92,63954,54717],{"class":151},[92,63956,1269],{"class":102},[92,63958,63959,63961,63963,63965,63967,63969,63972],{"class":94,"line":9744},[92,63960,62212],{"class":151},[92,63962,51417],{"class":102},[92,63964,180],{"class":151},[92,63966,51472],{"class":98},[92,63968,51501],{"class":151},[92,63970,63971],{"class":151}," transparent",[92,63973,1269],{"class":102},[92,63975,63976,63978,63980,63982],{"class":94,"line":9768},[92,63977,57396],{"class":151},[92,63979,51417],{"class":102},[92,63981,62349],{"class":151},[92,63983,1269],{"class":102},[92,63985,63986],{"class":94,"line":9773},[92,63987,2166],{"class":102},[92,63989,63990],{"class":94,"line":9778},[92,63991,2379],{"emptyLinePlaceholder":17},[92,63993,63994,63996,63998,64000,64002,64005],{"class":94,"line":9783},[92,63995,63725],{"class":1942},[92,63997,61272],{"class":51280},[92,63999,55055],{"class":51280},[92,64001,1377],{"class":51280},[92,64003,64004],{"class":1942},".active",[92,64006,15552],{"class":102},[92,64008,64009,64011,64013,64016],{"class":94,"line":9792},[92,64010,61771],{"class":151},[92,64012,51417],{"class":102},[92,64014,64015],{"class":151},"#e1251b",[92,64017,1269],{"class":102},[92,64019,64020,64022,64024,64026],{"class":94,"line":9797},[92,64021,57396],{"class":151},[92,64023,51417],{"class":102},[92,64025,64015],{"class":151},[92,64027,1269],{"class":102},[92,64029,64030],{"class":94,"line":9803},[92,64031,2166],{"class":102},[92,64033,64034],{"class":94,"line":9824},[92,64035,2379],{"emptyLinePlaceholder":17},[92,64037,64038,64041],{"class":94,"line":9830},[92,64039,64040],{"class":1942},"    .tab-content",[92,64042,15552],{"class":102},[92,64044,64045,64047,64049,64051,64054,64056],{"class":94,"line":9844},[92,64046,54675],{"class":151},[92,64048,51417],{"class":102},[92,64050,294],{"class":151},[92,64052,64053],{"class":151}," 16",[92,64055,51472],{"class":98},[92,64057,1269],{"class":102},[92,64059,64060],{"class":94,"line":9850},[92,64061,2166],{"class":102},[92,64063,64064],{"class":94,"line":9877},[92,64065,2379],{"emptyLinePlaceholder":17},[92,64067,64068,64070,64072],{"class":94,"line":9886},[92,64069,64040],{"class":1942},[92,64071,62154],{"class":1942},[92,64073,15552],{"class":102},[92,64075,64076,64078,64080,64082],{"class":94,"line":9892},[92,64077,54989],{"class":151},[92,64079,51417],{"class":102},[92,64081,54717],{"class":151},[92,64083,1269],{"class":102},[92,64085,64086],{"class":94,"line":9900},[92,64087,2166],{"class":102},[92,64089,64090],{"class":94,"line":9905},[92,64091,2379],{"emptyLinePlaceholder":17},[92,64093,64094,64096,64099],{"class":94,"line":16584},[92,64095,64040],{"class":1942},[92,64097,64098],{"class":1942}," .item.active",[92,64100,15552],{"class":102},[92,64102,64103,64105,64107,64109],{"class":94,"line":16590},[92,64104,54989],{"class":151},[92,64106,51417],{"class":102},[92,64108,60849],{"class":151},[92,64110,1269],{"class":102},[92,64112,64113],{"class":94,"line":16613},[92,64114,2166],{"class":102},[92,64116,64117,64119,64121],{"class":94,"line":16619},[92,64118,52397],{"class":102},[92,64120,5106],{"class":51280},[92,64122,51287],{"class":102},[92,64124,64125,64127,64129],{"class":94,"line":16642},[92,64126,51765],{"class":102},[92,64128,51314],{"class":51280},[92,64130,51287],{"class":102},[92,64132,64133],{"class":94,"line":16656},[92,64134,2379],{"emptyLinePlaceholder":17},[92,64136,64137,64139,64141],{"class":94,"line":16676},[92,64138,1013],{"class":102},[92,64140,51780],{"class":51280},[92,64142,51287],{"class":102},[92,64144,64145,64147,64149,64151,64153,64156],{"class":94,"line":16682},[92,64146,52124],{"class":102},[92,64148,51591],{"class":51280},[92,64150,53466],{"class":1942},[92,64152,148],{"class":102},[92,64154,64155],{"class":207},"\"tab\"",[92,64157,51287],{"class":102},[92,64159,64160,64162,64164,64166,64168,64171],{"class":94,"line":16693},[92,64161,51321],{"class":102},[92,64163,51591],{"class":51280},[92,64165,53466],{"class":1942},[92,64167,148],{"class":102},[92,64169,64170],{"class":207},"\"tab-nav\"",[92,64172,51287],{"class":102},[92,64174,64175,64177,64179,64182,64184],{"class":94,"line":16716},[92,64176,55214],{"class":102},[92,64178,63],{"class":51280},[92,64180,64181],{"class":102},">每日特价\u003C\u002F",[92,64183,63],{"class":51280},[92,64185,51287],{"class":102},[92,64187,64188,64190,64192],{"class":94,"line":16738},[92,64189,55214],{"class":102},[92,64191,1110],{"class":51280},[92,64193,51287],{"class":102},[92,64195,64196,64198,64200,64202,64204,64206,64208,64210,64212,64214,64217,64220,64222,64224,64226],{"class":94,"line":16743},[92,64197,55282],{"class":102},[92,64199,49],{"class":51280},[92,64201,61032],{"class":102},[92,64203,341],{"class":51280},[92,64205,53466],{"class":1942},[92,64207,148],{"class":102},[92,64209,59686],{"class":207},[92,64211,61037],{"class":1942},[92,64213,148],{"class":102},[92,64215,64216],{"class":207},"\"javascript:;\"",[92,64218,64219],{"class":102},">精选\u003C\u002F",[92,64221,341],{"class":51280},[92,64223,55294],{"class":102},[92,64225,49],{"class":51280},[92,64227,51287],{"class":102},[92,64229,64230,64232,64234,64236,64238,64240,64242,64244,64247,64249,64251,64253],{"class":94,"line":16749},[92,64231,55282],{"class":102},[92,64233,49],{"class":51280},[92,64235,61032],{"class":102},[92,64237,341],{"class":51280},[92,64239,61037],{"class":1942},[92,64241,148],{"class":102},[92,64243,64216],{"class":207},[92,64245,64246],{"class":102},">美食\u003C\u002F",[92,64248,341],{"class":51280},[92,64250,55294],{"class":102},[92,64252,49],{"class":51280},[92,64254,51287],{"class":102},[92,64256,64257,64259,64261,64263,64265,64267,64269,64271,64274,64276,64278,64280],{"class":94,"line":16763},[92,64258,55282],{"class":102},[92,64260,49],{"class":51280},[92,64262,61032],{"class":102},[92,64264,341],{"class":51280},[92,64266,61037],{"class":1942},[92,64268,148],{"class":102},[92,64270,64216],{"class":207},[92,64272,64273],{"class":102},">百货\u003C\u002F",[92,64275,341],{"class":51280},[92,64277,55294],{"class":102},[92,64279,49],{"class":51280},[92,64281,51287],{"class":102},[92,64283,64284,64286,64288,64290,64292,64294,64296,64298,64301,64303,64305,64307],{"class":94,"line":16776},[92,64285,55282],{"class":102},[92,64287,49],{"class":51280},[92,64289,61032],{"class":102},[92,64291,341],{"class":51280},[92,64293,61037],{"class":1942},[92,64295,148],{"class":102},[92,64297,64216],{"class":207},[92,64299,64300],{"class":102},">个护\u003C\u002F",[92,64302,341],{"class":51280},[92,64304,55294],{"class":102},[92,64306,49],{"class":51280},[92,64308,51287],{"class":102},[92,64310,64311,64313,64315,64317,64319,64321,64323,64325,64328,64330,64332,64334],{"class":94,"line":16781},[92,64312,55282],{"class":102},[92,64314,49],{"class":51280},[92,64316,61032],{"class":102},[92,64318,341],{"class":51280},[92,64320,61037],{"class":1942},[92,64322,148],{"class":102},[92,64324,64216],{"class":207},[92,64326,64327],{"class":102},">预告\u003C\u002F",[92,64329,341],{"class":51280},[92,64331,55294],{"class":102},[92,64333,49],{"class":51280},[92,64335,51287],{"class":102},[92,64337,64338,64340,64342],{"class":94,"line":16795},[92,64339,55387],{"class":102},[92,64341,1110],{"class":51280},[92,64343,51287],{"class":102},[92,64345,64346,64348,64350],{"class":94,"line":16800},[92,64347,51756],{"class":102},[92,64349,51591],{"class":51280},[92,64351,51287],{"class":102},[92,64353,64354,64356,64358,64360,64362,64365],{"class":94,"line":16806},[92,64355,51321],{"class":102},[92,64357,51591],{"class":51280},[92,64359,53466],{"class":1942},[92,64361,148],{"class":102},[92,64363,64364],{"class":207},"\"tab-content\"",[92,64366,51287],{"class":102},[92,64368,64369,64371,64373,64375,64377,64380,64382,64384,64386,64388,64391,64393,64395,64397,64400,64402],{"class":94,"line":16811},[92,64370,55214],{"class":102},[92,64372,51591],{"class":51280},[92,64374,53466],{"class":1942},[92,64376,148],{"class":102},[92,64378,64379],{"class":207},"\"item active\"",[92,64381,61032],{"class":102},[92,64383,1441],{"class":51280},[92,64385,55219],{"class":1942},[92,64387,148],{"class":102},[92,64389,64390],{"class":207},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[92,64392,55227],{"class":1942},[92,64394,148],{"class":102},[92,64396,7632],{"class":207},[92,64398,64399],{"class":102}," \u002F>\u003C\u002F",[92,64401,51591],{"class":51280},[92,64403,51287],{"class":102},[92,64405,64406,64408,64410,64412,64414,64416,64418,64420,64422,64424,64427,64429,64431,64433,64435,64437],{"class":94,"line":16825},[92,64407,55214],{"class":102},[92,64409,51591],{"class":51280},[92,64411,53466],{"class":1942},[92,64413,148],{"class":102},[92,64415,62603],{"class":207},[92,64417,61032],{"class":102},[92,64419,1441],{"class":51280},[92,64421,55219],{"class":1942},[92,64423,148],{"class":102},[92,64425,64426],{"class":207},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[92,64428,55227],{"class":1942},[92,64430,148],{"class":102},[92,64432,7632],{"class":207},[92,64434,64399],{"class":102},[92,64436,51591],{"class":51280},[92,64438,51287],{"class":102},[92,64440,64441,64443,64445,64447,64449,64451,64453,64455,64457,64459,64462,64464,64466,64468,64470,64472],{"class":94,"line":16830},[92,64442,55214],{"class":102},[92,64444,51591],{"class":51280},[92,64446,53466],{"class":1942},[92,64448,148],{"class":102},[92,64450,62603],{"class":207},[92,64452,61032],{"class":102},[92,64454,1441],{"class":51280},[92,64456,55219],{"class":1942},[92,64458,148],{"class":102},[92,64460,64461],{"class":207},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[92,64463,55227],{"class":1942},[92,64465,148],{"class":102},[92,64467,7632],{"class":207},[92,64469,64399],{"class":102},[92,64471,51591],{"class":51280},[92,64473,51287],{"class":102},[92,64475,64476,64478,64480,64482,64484,64486,64488,64490,64492,64494,64497,64499,64501,64503,64505,64507],{"class":94,"line":16835},[92,64477,55214],{"class":102},[92,64479,51591],{"class":51280},[92,64481,53466],{"class":1942},[92,64483,148],{"class":102},[92,64485,62603],{"class":207},[92,64487,61032],{"class":102},[92,64489,1441],{"class":51280},[92,64491,55219],{"class":1942},[92,64493,148],{"class":102},[92,64495,64496],{"class":207},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[92,64498,55227],{"class":1942},[92,64500,148],{"class":102},[92,64502,7632],{"class":207},[92,64504,64399],{"class":102},[92,64506,51591],{"class":51280},[92,64508,51287],{"class":102},[92,64510,64511,64513,64515,64517,64519,64521,64523,64525,64527,64529,64532,64534,64536,64538,64540,64542],{"class":94,"line":16849},[92,64512,55214],{"class":102},[92,64514,51591],{"class":51280},[92,64516,53466],{"class":1942},[92,64518,148],{"class":102},[92,64520,62603],{"class":207},[92,64522,61032],{"class":102},[92,64524,1441],{"class":51280},[92,64526,55219],{"class":1942},[92,64528,148],{"class":102},[92,64530,64531],{"class":207},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[92,64533,55227],{"class":1942},[92,64535,148],{"class":102},[92,64537,7632],{"class":207},[92,64539,64399],{"class":102},[92,64541,51591],{"class":51280},[92,64543,51287],{"class":102},[92,64545,64546,64548,64550],{"class":94,"line":16861},[92,64547,51756],{"class":102},[92,64549,51591],{"class":51280},[92,64551,51287],{"class":102},[92,64553,64554,64556,64558],{"class":94,"line":16866},[92,64555,52397],{"class":102},[92,64557,51591],{"class":51280},[92,64559,51287],{"class":102},[92,64561,64562,64564,64566],{"class":94,"line":16879},[92,64563,52124],{"class":102},[92,64565,51793],{"class":51280},[92,64567,51287],{"class":102},[92,64569,64570],{"class":94,"line":16884},[92,64571,64572],{"class":161},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[92,64574,64575],{"class":94,"line":16889},[92,64576,64577],{"class":161},"    \u002F\u002F 1.1 获取 a 元素 \n",[92,64579,64580,64582,64585,64587,64589,64591,64593,64596],{"class":94,"line":16894},[92,64581,11201],{"class":98},[92,64583,64584],{"class":151}," as",[92,64586,13544],{"class":98},[92,64588,54376],{"class":102},[92,64590,55661],{"class":1942},[92,64592,103],{"class":102},[92,64594,64595],{"class":207},"'.tab-nav a'",[92,64597,109],{"class":102},[92,64599,64600],{"class":94,"line":16907},[92,64601,64602],{"class":161},"    \u002F\u002F console.log(as) \n",[92,64604,64605,64607,64609,64611,64613,64615,64617,64619,64621,64624,64626,64628,64630],{"class":94,"line":16912},[92,64606,3180],{"class":98},[92,64608,1637],{"class":102},[92,64610,51827],{"class":98},[92,64612,9418],{"class":102},[92,64614,148],{"class":98},[92,64616,4072],{"class":151},[92,64618,9425],{"class":102},[92,64620,1013],{"class":98},[92,64622,64623],{"class":102}," as.",[92,64625,51948],{"class":151},[92,64627,3193],{"class":102},[92,64629,2271],{"class":98},[92,64631,12422],{"class":102},[92,64633,64634],{"class":94,"line":32614},[92,64635,64636],{"class":161},"      \u002F\u002F console.log(as[i])\n",[92,64638,64639],{"class":94,"line":32620},[92,64640,64641],{"class":161},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[92,64643,64644,64647,64649,64651,64654,64656,64658],{"class":94,"line":32626},[92,64645,64646],{"class":102},"      as[i].",[92,64648,57793],{"class":1942},[92,64650,103],{"class":102},[92,64652,64653],{"class":207},"'mouseenter'",[92,64655,12415],{"class":102},[92,64657,54429],{"class":98},[92,64659,54432],{"class":102},[92,64661,64662],{"class":94,"line":32632},[92,64663,64664],{"class":161},"        \u002F\u002F console.log('鼠标经过')\n",[92,64666,64667],{"class":94,"line":32638},[92,64668,64669],{"class":161},"        \u002F\u002F 排他思想  \n",[92,64671,64672],{"class":94,"line":32649},[92,64673,64674],{"class":161},"        \u002F\u002F 干掉别人 移除类active\n",[92,64676,64677,64679,64681,64683,64686,64688,64690,64692,64695],{"class":94,"line":32655},[92,64678,51905],{"class":102},[92,64680,54379],{"class":1942},[92,64682,103],{"class":102},[92,64684,64685],{"class":207},"'.tab-nav .active'",[92,64687,56983],{"class":102},[92,64689,56986],{"class":1942},[92,64691,103],{"class":102},[92,64693,64694],{"class":207},"'active'",[92,64696,109],{"class":102},[92,64698,64699],{"class":94,"line":32675},[92,64700,64701],{"class":161},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[92,64703,64704,64707,64710,64712,64714,64716],{"class":94,"line":32681},[92,64705,64706],{"class":151},"        this",[92,64708,64709],{"class":102},".classList.",[92,64711,5314],{"class":1942},[92,64713,103],{"class":102},[92,64715,64694],{"class":207},[92,64717,109],{"class":102},[92,64719,64720],{"class":94,"line":32692},[92,64721,2379],{"emptyLinePlaceholder":17},[92,64723,64724],{"class":94,"line":32698},[92,64725,64726],{"class":161},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[92,64728,64729],{"class":94,"line":32704},[92,64730,64731],{"class":161},"        \u002F\u002F 干掉别人\n",[92,64733,64734,64736,64738,64740,64743,64745,64747,64749,64751],{"class":94,"line":32710},[92,64735,51905],{"class":102},[92,64737,54379],{"class":1942},[92,64739,103],{"class":102},[92,64741,64742],{"class":207},"'.tab-content .active'",[92,64744,56983],{"class":102},[92,64746,56986],{"class":1942},[92,64748,103],{"class":102},[92,64750,64694],{"class":207},[92,64752,109],{"class":102},[92,64754,64755],{"class":94,"line":32716},[92,64756,64757],{"class":161},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[92,64759,64760,64762,64764,64766,64769,64771,64773,64775,64777,64779,64781,64783,64785],{"class":94,"line":32722},[92,64761,51905],{"class":102},[92,64763,54379],{"class":1942},[92,64765,103],{"class":102},[92,64767,64768],{"class":207},"`.tab-content .item:nth-child(${",[92,64770,544],{"class":102},[92,64772,45547],{"class":98},[92,64774,25099],{"class":151},[92,64776,57012],{"class":207},[92,64778,56983],{"class":102},[92,64780,5314],{"class":1942},[92,64782,103],{"class":102},[92,64784,64694],{"class":207},[92,64786,109],{"class":102},[92,64788,64789],{"class":94,"line":32728},[92,64790,2379],{"emptyLinePlaceholder":17},[92,64792,64793],{"class":94,"line":32734},[92,64794,64795],{"class":102},"      })\n",[92,64797,64798],{"class":94,"line":32754},[92,64799,2166],{"class":102},[92,64801,64802,64804,64806],{"class":94,"line":32760},[92,64803,52397],{"class":102},[92,64805,51793],{"class":51280},[92,64807,51287],{"class":102},[92,64809,64810,64812,64814],{"class":94,"line":32776},[92,64811,51765],{"class":102},[92,64813,51780],{"class":51280},[92,64815,51287],{"class":102},[92,64817,64818],{"class":94,"line":32782},[92,64819,2379],{"emptyLinePlaceholder":17},[92,64821,64822,64824,64826],{"class":94,"line":32796},[92,64823,51765],{"class":102},[92,64825,50615],{"class":51280},[92,64827,51287],{"class":102},[38,64829,64830],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[38,64832,64833],{},"在监听事件中，this指向的就是他的调用者",[38,64835,64836],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[38,64838,53700],{},[38,64840,64841],{},"(function () {",[38,64843,64844],{},"const list = document.querySelector('.xtx-elevator-list')",[38,64846,64847],{},"list.addEventListener('click', function (e) {",[38,64849,64850],{},"if (e.target.tagName === 'A') {",[38,64852,64853],{},"\u002F\u002F 排他思想",[38,64855,64856],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[38,64858,64859],{},"const old = document.querySelector('.xtx-elevator-list .active')",[38,64861,64862],{},"\u002F\u002F console.log(old);",[38,64864,64865],{},"\u002F\u002F 判断",[38,64867,64868],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[38,64870,64871],{},"if (old) old.classList.remove('active')",[38,64873,64874],{},"e.target.classList.add('active')",[38,64876,1049],{},[38,64878,52444],{},[38,64880,64881],{},"})();",[63,64883,64885],{"id":64884},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[83,64887,64889],{"className":50613,"code":64888,"language":50615,"meta":10,"style":10},"\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",[89,64890,64891,64901,64905,64913,64917,64931,64945,64957,64965,64971,64981,64991,64995,64999,65006,65018,65029,65046,65059,65073,65083,65087,65091,65098,65109,65127,65137,65149,65153,65157,65164,65181,65192,65204,65208,65212,65219,65231,65235,65243,65251,65255,65263,65271,65279,65294,65338,65346,65359,65372,65385,65393,65401,65409,65437,65445,65457,65470,65483,65491,65499,65507,65533,65541,65554,65566,65579,65587,65595,65603,65629,65637,65650,65662,65675,65683,65691,65699,65704,65724,65729,65749,65754,65771,65776,65784,65789,65818,65831,65835,65839,65844,65848,65876,65881,65898,65903,65908,65913,65918,65944,65948,65952,65960,65968,65972],{"__ignoreMap":10},[92,64892,64893,64895,64897,64899],{"class":94,"line":95},[92,64894,51277],{"class":102},[92,64896,51281],{"class":51280},[92,64898,51284],{"class":1942},[92,64900,51287],{"class":102},[92,64902,64903],{"class":94,"line":11},[92,64904,2379],{"emptyLinePlaceholder":17},[92,64906,64907,64909,64911],{"class":94,"line":1158},[92,64908,1013],{"class":102},[92,64910,50615],{"class":51280},[92,64912,51287],{"class":102},[92,64914,64915],{"class":94,"line":1173},[92,64916,2379],{"emptyLinePlaceholder":17},[92,64918,64919,64921,64923,64925,64927,64929],{"class":94,"line":1179},[92,64920,1013],{"class":102},[92,64922,51314],{"class":51280},[92,64924,51296],{"class":1942},[92,64926,148],{"class":102},[92,64928,51301],{"class":207},[92,64930,51287],{"class":102},[92,64932,64933,64935,64937,64939,64941,64943],{"class":94,"line":1193},[92,64934,52124],{"class":102},[92,64936,51324],{"class":51280},[92,64938,51327],{"class":1942},[92,64940,148],{"class":102},[92,64942,51332],{"class":207},[92,64944,51287],{"class":102},[92,64946,64947,64949,64951,64953,64955],{"class":94,"line":1199},[92,64948,52124],{"class":102},[92,64950,51387],{"class":51280},[92,64952,55294],{"class":102},[92,64954,51387],{"class":51280},[92,64956,51287],{"class":102},[92,64958,64959,64961,64963],{"class":94,"line":1290},[92,64960,52124],{"class":102},[92,64962,5106],{"class":51280},[92,64964,51287],{"class":102},[92,64966,64967,64969],{"class":94,"line":1296},[92,64968,6383],{"class":51280},[92,64970,15552],{"class":102},[92,64972,64973,64975,64977,64979],{"class":94,"line":1308},[92,64974,54686],{"class":151},[92,64976,51417],{"class":102},[92,64978,294],{"class":151},[92,64980,1269],{"class":102},[92,64982,64983,64985,64987,64989],{"class":94,"line":1591},[92,64984,54675],{"class":151},[92,64986,51417],{"class":102},[92,64988,294],{"class":151},[92,64990,1269],{"class":102},[92,64992,64993],{"class":94,"line":1596},[92,64994,2166],{"class":102},[92,64996,64997],{"class":94,"line":1602},[92,64998,2379],{"emptyLinePlaceholder":17},[92,65000,65001,65004],{"class":94,"line":1607},[92,65002,65003],{"class":51280},"    table",[92,65005,15552],{"class":102},[92,65007,65008,65011,65013,65016],{"class":94,"line":1621},[92,65009,65010],{"class":151},"      border-collapse",[92,65012,51417],{"class":102},[92,65014,65015],{"class":151},"collapse",[92,65017,1269],{"class":102},[92,65019,65020,65023,65025,65027],{"class":94,"line":1626},[92,65021,65022],{"class":151},"      border-spacing",[92,65024,51417],{"class":102},[92,65026,294],{"class":151},[92,65028,1269],{"class":102},[92,65030,65031,65033,65035,65037,65039,65041,65044],{"class":94,"line":1632},[92,65032,61957],{"class":151},[92,65034,51417],{"class":102},[92,65036,320],{"class":151},[92,65038,51472],{"class":98},[92,65040,51501],{"class":151},[92,65042,65043],{"class":151}," #c0c0c0",[92,65045,1269],{"class":102},[92,65047,65048,65050,65052,65055,65057],{"class":94,"line":1653},[92,65049,54751],{"class":151},[92,65051,51417],{"class":102},[92,65053,65054],{"class":151},"500",[92,65056,51472],{"class":98},[92,65058,1269],{"class":102},[92,65060,65061,65063,65065,65067,65069,65071],{"class":94,"line":1658},[92,65062,54686],{"class":151},[92,65064,51417],{"class":102},[92,65066,414],{"class":151},[92,65068,51472],{"class":98},[92,65070,51536],{"class":151},[92,65072,1269],{"class":102},[92,65074,65075,65077,65079,65081],{"class":94,"line":1672},[92,65076,57266],{"class":151},[92,65078,51417],{"class":102},[92,65080,51572],{"class":151},[92,65082,1269],{"class":102},[92,65084,65085],{"class":94,"line":1677},[92,65086,2166],{"class":102},[92,65088,65089],{"class":94,"line":1706},[92,65090,2379],{"emptyLinePlaceholder":17},[92,65092,65093,65096],{"class":94,"line":1711},[92,65094,65095],{"class":51280},"    th",[92,65097,15552],{"class":102},[92,65099,65100,65102,65104,65107],{"class":94,"line":1728},[92,65101,54864],{"class":151},[92,65103,51417],{"class":102},[92,65105,65106],{"class":151},"#09c",[92,65108,1269],{"class":102},[92,65110,65111,65114,65116,65118,65120,65122,65125],{"class":94,"line":1733},[92,65112,65113],{"class":151},"      font",[92,65115,51417],{"class":102},[92,65117,62319],{"class":151},[92,65119,64053],{"class":151},[92,65121,51472],{"class":98},[92,65123,65124],{"class":207}," \"微软雅黑\"",[92,65126,1269],{"class":102},[92,65128,65129,65131,65133,65135],{"class":94,"line":1738},[92,65130,57396],{"class":151},[92,65132,51417],{"class":102},[92,65134,60822],{"class":151},[92,65136,1269],{"class":102},[92,65138,65139,65141,65143,65145,65147],{"class":94,"line":1743},[92,65140,54765],{"class":151},[92,65142,51417],{"class":102},[92,65144,903],{"class":151},[92,65146,51472],{"class":98},[92,65148,1269],{"class":102},[92,65150,65151],{"class":94,"line":1757},[92,65152,2166],{"class":102},[92,65154,65155],{"class":94,"line":1762},[92,65156,2379],{"emptyLinePlaceholder":17},[92,65158,65159,65162],{"class":94,"line":2556},[92,65160,65161],{"class":51280},"    td",[92,65163,15552],{"class":102},[92,65165,65166,65168,65170,65172,65174,65176,65179],{"class":94,"line":2570},[92,65167,61957],{"class":151},[92,65169,51417],{"class":102},[92,65171,320],{"class":151},[92,65173,51472],{"class":98},[92,65175,51501],{"class":151},[92,65177,65178],{"class":151}," #d0d0d0",[92,65180,1269],{"class":102},[92,65182,65183,65185,65187,65190],{"class":94,"line":2578},[92,65184,57396],{"class":151},[92,65186,51417],{"class":102},[92,65188,65189],{"class":151},"#404060",[92,65191,1269],{"class":102},[92,65193,65194,65196,65198,65200,65202],{"class":94,"line":2583},[92,65195,54675],{"class":151},[92,65197,51417],{"class":102},[92,65199,549],{"class":151},[92,65201,51472],{"class":98},[92,65203,1269],{"class":102},[92,65205,65206],{"class":94,"line":2589},[92,65207,2166],{"class":102},[92,65209,65210],{"class":94,"line":2595},[92,65211,2379],{"emptyLinePlaceholder":17},[92,65213,65214,65217],{"class":94,"line":2600},[92,65215,65216],{"class":1942},"    .allCheck",[92,65218,15552],{"class":102},[92,65220,65221,65223,65225,65227,65229],{"class":94,"line":7928},[92,65222,54751],{"class":151},[92,65224,51417],{"class":102},[92,65226,715],{"class":151},[92,65228,51472],{"class":98},[92,65230,1269],{"class":102},[92,65232,65233],{"class":94,"line":7952},[92,65234,2166],{"class":102},[92,65236,65237,65239,65241],{"class":94,"line":7957},[92,65238,52397],{"class":102},[92,65240,5106],{"class":51280},[92,65242,51287],{"class":102},[92,65244,65245,65247,65249],{"class":94,"line":7963},[92,65246,51765],{"class":102},[92,65248,51314],{"class":51280},[92,65250,51287],{"class":102},[92,65252,65253],{"class":94,"line":7990},[92,65254,2379],{"emptyLinePlaceholder":17},[92,65256,65257,65259,65261],{"class":94,"line":7995},[92,65258,1013],{"class":102},[92,65260,51780],{"class":51280},[92,65262,51287],{"class":102},[92,65264,65265,65267,65269],{"class":94,"line":8001},[92,65266,52124],{"class":102},[92,65268,240],{"class":51280},[92,65270,51287],{"class":102},[92,65272,65273,65275,65277],{"class":94,"line":8013},[92,65274,51321],{"class":102},[92,65276,246],{"class":51280},[92,65278,51287],{"class":102},[92,65280,65281,65283,65285,65287,65289,65292],{"class":94,"line":8025},[92,65282,55214],{"class":102},[92,65284,249],{"class":51280},[92,65286,53466],{"class":1942},[92,65288,148],{"class":102},[92,65290,65291],{"class":207},"\"allCheck\"",[92,65293,51287],{"class":102},[92,65295,65296,65298,65300,65302,65304,65306,65308,65310,65312,65314,65316,65319,65322,65324,65326,65328,65331,65334,65336],{"class":94,"line":8037},[92,65297,55282],{"class":102},[92,65299,53801],{"class":51280},[92,65301,53804],{"class":1942},[92,65303,148],{"class":102},[92,65305,53809],{"class":207},[92,65307,14900],{"class":1942},[92,65309,148],{"class":102},[92,65311,7632],{"class":207},[92,65313,14939],{"class":1942},[92,65315,148],{"class":102},[92,65317,65318],{"class":207},"\"checkAll\"",[92,65320,65321],{"class":102},"> \u003C",[92,65323,92],{"class":51280},[92,65325,53466],{"class":1942},[92,65327,148],{"class":102},[92,65329,65330],{"class":207},"\"all\"",[92,65332,65333],{"class":102},">全选\u003C\u002F",[92,65335,92],{"class":51280},[92,65337,51287],{"class":102},[92,65339,65340,65342,65344],{"class":94,"line":9696},[92,65341,55387],{"class":102},[92,65343,249],{"class":51280},[92,65345,51287],{"class":102},[92,65347,65348,65350,65352,65355,65357],{"class":94,"line":9721},[92,65349,55214],{"class":102},[92,65351,249],{"class":51280},[92,65353,65354],{"class":102},">商品\u003C\u002F",[92,65356,249],{"class":51280},[92,65358,51287],{"class":102},[92,65360,65361,65363,65365,65368,65370],{"class":94,"line":9744},[92,65362,55214],{"class":102},[92,65364,249],{"class":51280},[92,65366,65367],{"class":102},">商家\u003C\u002F",[92,65369,249],{"class":51280},[92,65371,51287],{"class":102},[92,65373,65374,65376,65378,65381,65383],{"class":94,"line":9768},[92,65375,55214],{"class":102},[92,65377,249],{"class":51280},[92,65379,65380],{"class":102},">价格\u003C\u002F",[92,65382,249],{"class":51280},[92,65384,51287],{"class":102},[92,65386,65387,65389,65391],{"class":94,"line":9773},[92,65388,51756],{"class":102},[92,65390,246],{"class":51280},[92,65392,51287],{"class":102},[92,65394,65395,65397,65399],{"class":94,"line":9778},[92,65396,51321],{"class":102},[92,65398,246],{"class":51280},[92,65400,51287],{"class":102},[92,65402,65403,65405,65407],{"class":94,"line":9783},[92,65404,55214],{"class":102},[92,65406,292],{"class":51280},[92,65408,51287],{"class":102},[92,65410,65411,65413,65415,65417,65419,65421,65423,65425,65428,65430,65432,65435],{"class":94,"line":9792},[92,65412,55282],{"class":102},[92,65414,53801],{"class":51280},[92,65416,53804],{"class":1942},[92,65418,148],{"class":102},[92,65420,53809],{"class":207},[92,65422,14900],{"class":1942},[92,65424,148],{"class":102},[92,65426,65427],{"class":207},"\"check\"",[92,65429,53466],{"class":1942},[92,65431,148],{"class":102},[92,65433,65434],{"class":207},"\"ck\"",[92,65436,51287],{"class":102},[92,65438,65439,65441,65443],{"class":94,"line":9797},[92,65440,55387],{"class":102},[92,65442,292],{"class":51280},[92,65444,51287],{"class":102},[92,65446,65447,65449,65451,65453,65455],{"class":94,"line":9803},[92,65448,55214],{"class":102},[92,65450,292],{"class":51280},[92,65452,61153],{"class":102},[92,65454,292],{"class":51280},[92,65456,51287],{"class":102},[92,65458,65459,65461,65463,65466,65468],{"class":94,"line":9824},[92,65460,55214],{"class":102},[92,65462,292],{"class":51280},[92,65464,65465],{"class":102},">小米\u003C\u002F",[92,65467,292],{"class":51280},[92,65469,51287],{"class":102},[92,65471,65472,65474,65476,65479,65481],{"class":94,"line":9830},[92,65473,55214],{"class":102},[92,65475,292],{"class":51280},[92,65477,65478],{"class":102},">￥1999\u003C\u002F",[92,65480,292],{"class":51280},[92,65482,51287],{"class":102},[92,65484,65485,65487,65489],{"class":94,"line":9844},[92,65486,51756],{"class":102},[92,65488,246],{"class":51280},[92,65490,51287],{"class":102},[92,65492,65493,65495,65497],{"class":94,"line":9850},[92,65494,51321],{"class":102},[92,65496,246],{"class":51280},[92,65498,51287],{"class":102},[92,65500,65501,65503,65505],{"class":94,"line":9877},[92,65502,55214],{"class":102},[92,65504,292],{"class":51280},[92,65506,51287],{"class":102},[92,65508,65509,65511,65513,65515,65517,65519,65521,65523,65525,65527,65529,65531],{"class":94,"line":9886},[92,65510,55282],{"class":102},[92,65512,53801],{"class":51280},[92,65514,53804],{"class":1942},[92,65516,148],{"class":102},[92,65518,53809],{"class":207},[92,65520,14900],{"class":1942},[92,65522,148],{"class":102},[92,65524,65427],{"class":207},[92,65526,53466],{"class":1942},[92,65528,148],{"class":102},[92,65530,65434],{"class":207},[92,65532,51287],{"class":102},[92,65534,65535,65537,65539],{"class":94,"line":9892},[92,65536,55387],{"class":102},[92,65538,292],{"class":51280},[92,65540,51287],{"class":102},[92,65542,65543,65545,65547,65550,65552],{"class":94,"line":9900},[92,65544,55214],{"class":102},[92,65546,292],{"class":51280},[92,65548,65549],{"class":102},">小米净水器\u003C\u002F",[92,65551,292],{"class":51280},[92,65553,51287],{"class":102},[92,65555,65556,65558,65560,65562,65564],{"class":94,"line":9905},[92,65557,55214],{"class":102},[92,65559,292],{"class":51280},[92,65561,65465],{"class":102},[92,65563,292],{"class":51280},[92,65565,51287],{"class":102},[92,65567,65568,65570,65572,65575,65577],{"class":94,"line":16584},[92,65569,55214],{"class":102},[92,65571,292],{"class":51280},[92,65573,65574],{"class":102},">￥4999\u003C\u002F",[92,65576,292],{"class":51280},[92,65578,51287],{"class":102},[92,65580,65581,65583,65585],{"class":94,"line":16590},[92,65582,51756],{"class":102},[92,65584,246],{"class":51280},[92,65586,51287],{"class":102},[92,65588,65589,65591,65593],{"class":94,"line":16613},[92,65590,51321],{"class":102},[92,65592,246],{"class":51280},[92,65594,51287],{"class":102},[92,65596,65597,65599,65601],{"class":94,"line":16619},[92,65598,55214],{"class":102},[92,65600,292],{"class":51280},[92,65602,51287],{"class":102},[92,65604,65605,65607,65609,65611,65613,65615,65617,65619,65621,65623,65625,65627],{"class":94,"line":16642},[92,65606,55282],{"class":102},[92,65608,53801],{"class":51280},[92,65610,53804],{"class":1942},[92,65612,148],{"class":102},[92,65614,53809],{"class":207},[92,65616,14900],{"class":1942},[92,65618,148],{"class":102},[92,65620,65427],{"class":207},[92,65622,53466],{"class":1942},[92,65624,148],{"class":102},[92,65626,65434],{"class":207},[92,65628,51287],{"class":102},[92,65630,65631,65633,65635],{"class":94,"line":16656},[92,65632,55387],{"class":102},[92,65634,292],{"class":51280},[92,65636,51287],{"class":102},[92,65638,65639,65641,65643,65646,65648],{"class":94,"line":16676},[92,65640,55214],{"class":102},[92,65642,292],{"class":51280},[92,65644,65645],{"class":102},">小米电视\u003C\u002F",[92,65647,292],{"class":51280},[92,65649,51287],{"class":102},[92,65651,65652,65654,65656,65658,65660],{"class":94,"line":16682},[92,65653,55214],{"class":102},[92,65655,292],{"class":51280},[92,65657,65465],{"class":102},[92,65659,292],{"class":51280},[92,65661,51287],{"class":102},[92,65663,65664,65666,65668,65671,65673],{"class":94,"line":16693},[92,65665,55214],{"class":102},[92,65667,292],{"class":51280},[92,65669,65670],{"class":102},">￥5999\u003C\u002F",[92,65672,292],{"class":51280},[92,65674,51287],{"class":102},[92,65676,65677,65679,65681],{"class":94,"line":16716},[92,65678,51756],{"class":102},[92,65680,246],{"class":51280},[92,65682,51287],{"class":102},[92,65684,65685,65687,65689],{"class":94,"line":16738},[92,65686,52397],{"class":102},[92,65688,240],{"class":51280},[92,65690,51287],{"class":102},[92,65692,65693,65695,65697],{"class":94,"line":16743},[92,65694,52124],{"class":102},[92,65696,51793],{"class":51280},[92,65698,51287],{"class":102},[92,65700,65701],{"class":94,"line":16749},[92,65702,65703],{"class":161},"    \u002F\u002F 1. 获取大复选框\n",[92,65705,65706,65708,65711,65713,65715,65717,65719,65722],{"class":94,"line":16763},[92,65707,11201],{"class":98},[92,65709,65710],{"class":151}," checkAll",[92,65712,13544],{"class":98},[92,65714,54376],{"class":102},[92,65716,54379],{"class":1942},[92,65718,103],{"class":102},[92,65720,65721],{"class":207},"'#checkAll'",[92,65723,109],{"class":102},[92,65725,65726],{"class":94,"line":16776},[92,65727,65728],{"class":161},"    \u002F\u002F 2. 获取所有的小复选框\n",[92,65730,65731,65733,65736,65738,65740,65742,65744,65747],{"class":94,"line":16781},[92,65732,11201],{"class":98},[92,65734,65735],{"class":151}," cks",[92,65737,13544],{"class":98},[92,65739,54376],{"class":102},[92,65741,55661],{"class":1942},[92,65743,103],{"class":102},[92,65745,65746],{"class":207},"'.ck'",[92,65748,109],{"class":102},[92,65750,65751],{"class":94,"line":16795},[92,65752,65753],{"class":161},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[92,65755,65756,65759,65761,65763,65765,65767,65769],{"class":94,"line":16800},[92,65757,65758],{"class":102},"    checkAll.",[92,65760,57793],{"class":1942},[92,65762,103],{"class":102},[92,65764,57798],{"class":207},[92,65766,12415],{"class":102},[92,65768,54429],{"class":98},[92,65770,54432],{"class":102},[92,65772,65773],{"class":94,"line":16806},[92,65774,65775],{"class":161},"      \u002F\u002F 得到当前大复选框的选中状态\n",[92,65777,65778,65781],{"class":94,"line":16811},[92,65779,65780],{"class":161},"      \u002F\u002F console.log(checkAll.checked)",[92,65782,65783],{"class":161},"  \u002F\u002F 得到 是 true 或者是 false\n",[92,65785,65786],{"class":94,"line":16825},[92,65787,65788],{"class":161},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[92,65790,65791,65793,65795,65797,65799,65801,65803,65805,65807,65810,65812,65814,65816],{"class":94,"line":16830},[92,65792,52264],{"class":98},[92,65794,1637],{"class":102},[92,65796,51827],{"class":98},[92,65798,9418],{"class":102},[92,65800,148],{"class":98},[92,65802,4072],{"class":151},[92,65804,9425],{"class":102},[92,65806,1013],{"class":98},[92,65808,65809],{"class":102}," cks.",[92,65811,51948],{"class":151},[92,65813,3193],{"class":102},[92,65815,2271],{"class":98},[92,65817,12422],{"class":102},[92,65819,65820,65823,65825,65828],{"class":94,"line":16835},[92,65821,65822],{"class":102},"        cks[i].checked ",[92,65824,148],{"class":98},[92,65826,65827],{"class":151}," this",[92,65829,65830],{"class":102},".checked\n",[92,65832,65833],{"class":94,"line":16849},[92,65834,52378],{"class":102},[92,65836,65837],{"class":94,"line":16861},[92,65838,33442],{"class":102},[92,65840,65841],{"class":94,"line":16866},[92,65842,65843],{"class":161},"    \u002F\u002F 5. 小复选框控制大复选框\n",[92,65845,65846],{"class":94,"line":16879},[92,65847,2379],{"emptyLinePlaceholder":17},[92,65849,65850,65852,65854,65856,65858,65860,65862,65864,65866,65868,65870,65872,65874],{"class":94,"line":16884},[92,65851,3180],{"class":98},[92,65853,1637],{"class":102},[92,65855,51827],{"class":98},[92,65857,9418],{"class":102},[92,65859,148],{"class":98},[92,65861,4072],{"class":151},[92,65863,9425],{"class":102},[92,65865,1013],{"class":98},[92,65867,65809],{"class":102},[92,65869,51948],{"class":151},[92,65871,3193],{"class":102},[92,65873,2271],{"class":98},[92,65875,12422],{"class":102},[92,65877,65878],{"class":94,"line":16889},[92,65879,65880],{"class":161},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[92,65882,65883,65886,65888,65890,65892,65894,65896],{"class":94,"line":16894},[92,65884,65885],{"class":102},"      cks[i].",[92,65887,57793],{"class":1942},[92,65889,103],{"class":102},[92,65891,57798],{"class":207},[92,65893,12415],{"class":102},[92,65895,54429],{"class":98},[92,65897,54432],{"class":102},[92,65899,65900],{"class":94,"line":16907},[92,65901,65902],{"class":161},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[92,65904,65905],{"class":94,"line":16912},[92,65906,65907],{"class":161},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[92,65909,65910],{"class":94,"line":32614},[92,65911,65912],{"class":161},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[92,65914,65915],{"class":94,"line":32620},[92,65916,65917],{"class":161},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[92,65919,65920,65923,65925,65927,65929,65931,65934,65936,65938,65940,65942],{"class":94,"line":32626},[92,65921,65922],{"class":102},"        checkAll.checked ",[92,65924,148],{"class":98},[92,65926,54376],{"class":102},[92,65928,55661],{"class":1942},[92,65930,103],{"class":102},[92,65932,65933],{"class":207},"'.ck:checked'",[92,65935,30807],{"class":102},[92,65937,51948],{"class":151},[92,65939,57886],{"class":98},[92,65941,65809],{"class":102},[92,65943,55811],{"class":151},[92,65945,65946],{"class":94,"line":32632},[92,65947,64795],{"class":102},[92,65949,65950],{"class":94,"line":32638},[92,65951,2166],{"class":102},[92,65953,65954,65956,65958],{"class":94,"line":32649},[92,65955,52397],{"class":102},[92,65957,51793],{"class":51280},[92,65959,51287],{"class":102},[92,65961,65962,65964,65966],{"class":94,"line":32655},[92,65963,51765],{"class":102},[92,65965,51780],{"class":51280},[92,65967,51287],{"class":102},[92,65969,65970],{"class":94,"line":32675},[92,65971,2379],{"emptyLinePlaceholder":17},[92,65973,65974,65976,65978],{"class":94,"line":32681},[92,65975,51765],{"class":102},[92,65977,50615],{"class":51280},[92,65979,51287],{"class":102},[38,65981,65982],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[38,65984,65985],{},"用好之间比较得到的布尔值！！！",[38,65987,65988,65989,65992,65993,1637,65996,687,65998,66001],{},"在 JS 里访问的时候，",[89,65990,65991],{},"checkbox.checked"," 是一个 ",[252,65994,65995],{},"布尔值",[89,65997,1341],{},[89,65999,66000],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[38,66003,66004,66005,66008,66009],{},"HTML 的 ",[89,66006,66007],{},"checked=\"checked\""," 只是 ",[252,66010,66011,66012,66015],{},"初始值；JS 的 ",[89,66013,66014],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[38,66017,66018],{},"：checked是一个伪类选择器",[38,66020,66021],{},[1441,66022],{"alt":10,"src":66023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[38,66025,66026,66029],{},[66027,66028],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[38,66031,66032],{},[1441,66033],{"alt":10,"src":66034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[33,66036,66038],{"id":66037},"_33-dom事件进阶","3.3 DOM事件进阶",[63,66040,66042],{"id":66041},"_331-事件流","3.3.1 事件流",[38,66044,66045],{},[1441,66046],{"alt":10,"src":66047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21978,66049,66051],{"id":66050},"_3311-事件捕获","3.3.1.1 事件捕获",[38,66053,66054],{},[1441,66055],{"alt":10,"src":66056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[83,66058,66060],{"className":50613,"code":66059,"language":50615,"meta":10,"style":10},"\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",[89,66061,66062,66072,66086,66090,66098,66112,66132,66144,66152,66159,66171,66183,66193,66197,66201,66208,66220,66232,66242,66246,66254,66262,66266,66274,66289,66308,66316,66324,66344,66364,66380,66391,66399,66416,66427,66435,66452,66463,66471,66479,66487,66491],{"__ignoreMap":10},[92,66063,66064,66066,66068,66070],{"class":94,"line":95},[92,66065,51277],{"class":102},[92,66067,51281],{"class":51280},[92,66069,51284],{"class":1942},[92,66071,51287],{"class":102},[92,66073,66074,66076,66078,66080,66082,66084],{"class":94,"line":11},[92,66075,1013],{"class":102},[92,66077,50615],{"class":51280},[92,66079,51296],{"class":1942},[92,66081,148],{"class":102},[92,66083,51301],{"class":207},[92,66085,51287],{"class":102},[92,66087,66088],{"class":94,"line":1158},[92,66089,2379],{"emptyLinePlaceholder":17},[92,66091,66092,66094,66096],{"class":94,"line":1173},[92,66093,1013],{"class":102},[92,66095,51314],{"class":51280},[92,66097,51287],{"class":102},[92,66099,66100,66102,66104,66106,66108,66110],{"class":94,"line":1179},[92,66101,52124],{"class":102},[92,66103,51324],{"class":51280},[92,66105,51327],{"class":1942},[92,66107,148],{"class":102},[92,66109,51332],{"class":207},[92,66111,51287],{"class":102},[92,66113,66114,66116,66118,66120,66122,66124,66126,66128,66130],{"class":94,"line":1193},[92,66115,52124],{"class":102},[92,66117,51324],{"class":51280},[92,66119,14900],{"class":1942},[92,66121,148],{"class":102},[92,66123,51371],{"class":207},[92,66125,51351],{"class":1942},[92,66127,148],{"class":102},[92,66129,51378],{"class":207},[92,66131,51287],{"class":102},[92,66133,66134,66136,66138,66140,66142],{"class":94,"line":1199},[92,66135,52124],{"class":102},[92,66137,51387],{"class":51280},[92,66139,51390],{"class":102},[92,66141,51387],{"class":51280},[92,66143,51287],{"class":102},[92,66145,66146,66148,66150],{"class":94,"line":1290},[92,66147,52124],{"class":102},[92,66149,5106],{"class":51280},[92,66151,51287],{"class":102},[92,66153,66154,66157],{"class":94,"line":1296},[92,66155,66156],{"class":1942},"    .father",[92,66158,15552],{"class":102},[92,66160,66161,66163,66165,66167,66169],{"class":94,"line":1308},[92,66162,54751],{"class":151},[92,66164,51417],{"class":102},[92,66166,65054],{"class":151},[92,66168,51472],{"class":98},[92,66170,1269],{"class":102},[92,66172,66173,66175,66177,66179,66181],{"class":94,"line":1591},[92,66174,54765],{"class":151},[92,66176,51417],{"class":102},[92,66178,65054],{"class":151},[92,66180,51472],{"class":98},[92,66182,1269],{"class":102},[92,66184,66185,66187,66189,66191],{"class":94,"line":1596},[92,66186,54864],{"class":151},[92,66188,51417],{"class":102},[92,66190,51625],{"class":151},[92,66192,1269],{"class":102},[92,66194,66195],{"class":94,"line":1602},[92,66196,2166],{"class":102},[92,66198,66199],{"class":94,"line":1607},[92,66200,2379],{"emptyLinePlaceholder":17},[92,66202,66203,66206],{"class":94,"line":1621},[92,66204,66205],{"class":1942},"    .son",[92,66207,15552],{"class":102},[92,66209,66210,66212,66214,66216,66218],{"class":94,"line":1626},[92,66211,54751],{"class":151},[92,66213,51417],{"class":102},[92,66215,1701],{"class":151},[92,66217,51472],{"class":98},[92,66219,1269],{"class":102},[92,66221,66222,66224,66226,66228,66230],{"class":94,"line":1632},[92,66223,54765],{"class":151},[92,66225,51417],{"class":102},[92,66227,1701],{"class":151},[92,66229,51472],{"class":98},[92,66231,1269],{"class":102},[92,66233,66234,66236,66238,66240],{"class":94,"line":1653},[92,66235,54864],{"class":151},[92,66237,51417],{"class":102},[92,66239,54869],{"class":151},[92,66241,1269],{"class":102},[92,66243,66244],{"class":94,"line":1658},[92,66245,2166],{"class":102},[92,66247,66248,66250,66252],{"class":94,"line":1672},[92,66249,52397],{"class":102},[92,66251,5106],{"class":51280},[92,66253,51287],{"class":102},[92,66255,66256,66258,66260],{"class":94,"line":1677},[92,66257,51765],{"class":102},[92,66259,51314],{"class":51280},[92,66261,51287],{"class":102},[92,66263,66264],{"class":94,"line":1706},[92,66265,2379],{"emptyLinePlaceholder":17},[92,66267,66268,66270,66272],{"class":94,"line":1711},[92,66269,1013],{"class":102},[92,66271,51780],{"class":51280},[92,66273,51287],{"class":102},[92,66275,66276,66278,66280,66282,66284,66287],{"class":94,"line":1728},[92,66277,52124],{"class":102},[92,66279,51591],{"class":51280},[92,66281,53466],{"class":1942},[92,66283,148],{"class":102},[92,66285,66286],{"class":207},"\"father\"",[92,66288,51287],{"class":102},[92,66290,66291,66293,66295,66297,66299,66302,66304,66306],{"class":94,"line":1733},[92,66292,51321],{"class":102},[92,66294,51591],{"class":51280},[92,66296,53466],{"class":1942},[92,66298,148],{"class":102},[92,66300,66301],{"class":207},"\"son\"",[92,66303,55294],{"class":102},[92,66305,51591],{"class":51280},[92,66307,51287],{"class":102},[92,66309,66310,66312,66314],{"class":94,"line":1738},[92,66311,52397],{"class":102},[92,66313,51591],{"class":51280},[92,66315,51287],{"class":102},[92,66317,66318,66320,66322],{"class":94,"line":1743},[92,66319,52124],{"class":102},[92,66321,51793],{"class":51280},[92,66323,51287],{"class":102},[92,66325,66326,66328,66331,66333,66335,66337,66339,66342],{"class":94,"line":1757},[92,66327,11201],{"class":98},[92,66329,66330],{"class":151}," fa",[92,66332,13544],{"class":98},[92,66334,54376],{"class":102},[92,66336,54379],{"class":1942},[92,66338,103],{"class":102},[92,66340,66341],{"class":207},"'.father'",[92,66343,109],{"class":102},[92,66345,66346,66348,66351,66353,66355,66357,66359,66362],{"class":94,"line":1762},[92,66347,11201],{"class":98},[92,66349,66350],{"class":151}," son",[92,66352,13544],{"class":98},[92,66354,54376],{"class":102},[92,66356,54379],{"class":1942},[92,66358,103],{"class":102},[92,66360,66361],{"class":207},"'.son'",[92,66363,109],{"class":102},[92,66365,66366,66368,66370,66372,66374,66376,66378],{"class":94,"line":2556},[92,66367,52387],{"class":102},[92,66369,57793],{"class":1942},[92,66371,103],{"class":102},[92,66373,57798],{"class":207},[92,66375,12415],{"class":102},[92,66377,54429],{"class":98},[92,66379,54432],{"class":102},[92,66381,66382,66384,66386,66389],{"class":94,"line":2570},[92,66383,58905],{"class":1942},[92,66385,103],{"class":102},[92,66387,66388],{"class":207},"'woshiu1'",[92,66390,109],{"class":102},[92,66392,66393,66395,66397],{"class":94,"line":2578},[92,66394,54515],{"class":102},[92,66396,1341],{"class":151},[92,66398,109],{"class":102},[92,66400,66401,66404,66406,66408,66410,66412,66414],{"class":94,"line":2583},[92,66402,66403],{"class":102},"    fa.",[92,66405,57793],{"class":1942},[92,66407,103],{"class":102},[92,66409,57798],{"class":207},[92,66411,12415],{"class":102},[92,66413,54429],{"class":98},[92,66415,54432],{"class":102},[92,66417,66418,66420,66422,66425],{"class":94,"line":2589},[92,66419,58905],{"class":1942},[92,66421,103],{"class":102},[92,66423,66424],{"class":207},"'1'",[92,66426,109],{"class":102},[92,66428,66429,66431,66433],{"class":94,"line":2595},[92,66430,54515],{"class":102},[92,66432,1341],{"class":151},[92,66434,109],{"class":102},[92,66436,66437,66440,66442,66444,66446,66448,66450],{"class":94,"line":2600},[92,66438,66439],{"class":102},"    son.",[92,66441,57793],{"class":1942},[92,66443,103],{"class":102},[92,66445,57798],{"class":207},[92,66447,12415],{"class":102},[92,66449,54429],{"class":98},[92,66451,54432],{"class":102},[92,66453,66454,66456,66458,66461],{"class":94,"line":7928},[92,66455,58905],{"class":1942},[92,66457,103],{"class":102},[92,66459,66460],{"class":207},"'2'",[92,66462,109],{"class":102},[92,66464,66465,66467,66469],{"class":94,"line":7952},[92,66466,54515],{"class":102},[92,66468,1341],{"class":151},[92,66470,109],{"class":102},[92,66472,66473,66475,66477],{"class":94,"line":7957},[92,66474,52397],{"class":102},[92,66476,51793],{"class":51280},[92,66478,51287],{"class":102},[92,66480,66481,66483,66485],{"class":94,"line":7963},[92,66482,51765],{"class":102},[92,66484,51780],{"class":51280},[92,66486,51287],{"class":102},[92,66488,66489],{"class":94,"line":7990},[92,66490,2379],{"emptyLinePlaceholder":17},[92,66492,66493,66495,66497],{"class":94,"line":7995},[92,66494,51765],{"class":102},[92,66496,50615],{"class":51280},[92,66498,51287],{"class":102},[38,66500,66501],{},[1441,66502],{"alt":10,"src":66503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[38,66505,66506],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21978,66508,66510],{"id":66509},"_3312-事件冒泡","3.3.1.2 事件冒泡",[38,66512,66513],{},[1441,66514],{"alt":10,"src":66515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[38,66517,66518],{},"反着来",[38,66520,66521],{},"注意是同名事件，比如都是‘click’",[21978,66523,66525],{"id":66524},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[38,66527,66528],{},[1441,66529],{"alt":10,"src":66530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21978,66532,66534],{"id":66533},"_3314-解绑事件","3.3.1.4 解绑事件",[38,66536,66537],{},[1441,66538],{"alt":10,"src":66539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[38,66541,66542],{},[1441,66543],{"alt":10,"src":66544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21978,66546,66548],{"id":66547},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[46,66550,66551],{},[49,66552,66553],{},"事件类型的区别",[38,66555,66556],{},[1441,66557],{"alt":10,"src":66558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[38,66560,66561],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[46,66563,66564],{"start":11},[49,66565,66566],{},"注册事件的区别",[38,66568,66569],{},[1441,66570],{"alt":10,"src":66571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21978,66573,66575],{"id":66574},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[38,66577,66578],{},[1441,66579],{"alt":10,"src":66580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[38,66582,66583],{},[1441,66584],{"alt":10,"src":66585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[83,66587,66589],{"className":53047,"code":66588,"language":53049,"meta":10,"style":10},"\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",[89,66590,66591,66599,66616,66639,66647,66652,66657,66662,66666,66674,66682],{"__ignoreMap":10},[92,66592,66593,66595,66597],{"class":94,"line":95},[92,66594,1013],{"class":102},[92,66596,51780],{"class":51280},[92,66598,51287],{"class":102},[92,66600,66601,66603,66606,66609,66611,66614],{"class":94,"line":11},[92,66602,52124],{"class":102},[92,66604,66605],{"class":51280},"form",[92,66607,66608],{"class":1942}," action",[92,66610,148],{"class":102},[92,66612,66613],{"class":207},"\"http:\u002F\u002Fwww.itcast.cn\"",[92,66615,51287],{"class":102},[92,66617,66618,66620,66622,66624,66626,66629,66632,66634,66637],{"class":94,"line":1158},[92,66619,51321],{"class":102},[92,66621,53801],{"class":51280},[92,66623,53804],{"class":1942},[92,66625,148],{"class":102},[92,66627,66628],{"class":207},"\"submit\"",[92,66630,66631],{"class":1942}," value",[92,66633,148],{"class":102},[92,66635,66636],{"class":207},"\"免费注册\"",[92,66638,51287],{"class":102},[92,66640,66641,66643,66645],{"class":94,"line":1173},[92,66642,51321],{"class":102},[92,66644,51793],{"class":51280},[92,66646,51287],{"class":102},[92,66648,66649],{"class":94,"line":1179},[92,66650,66651],{"class":102},"      const form = document.querySelector('form')\n",[92,66653,66654],{"class":94,"line":1193},[92,66655,66656],{"class":102},"      form.addEventListener('submit', function (e) {\n",[92,66658,66659],{"class":94,"line":1199},[92,66660,66661],{"class":102},"        e.preventDefault()\n",[92,66663,66664],{"class":94,"line":1290},[92,66665,64795],{"class":102},[92,66667,66668,66670,66672],{"class":94,"line":1296},[92,66669,51756],{"class":102},[92,66671,51793],{"class":51280},[92,66673,51287],{"class":102},[92,66675,66676,66678,66680],{"class":94,"line":1308},[92,66677,52397],{"class":102},[92,66679,66605],{"class":51280},[92,66681,51287],{"class":102},[92,66683,66684,66686,66688],{"class":94,"line":1591},[92,66685,51765],{"class":102},[92,66687,51780],{"class":51280},[92,66689,51287],{"class":102},[38,66691,66692],{},"点击不在跳转！！！",[63,66694,66696],{"id":66695},"_332-事件委托","3.3.2 事件委托",[38,66698,66699],{},[1441,66700],{"alt":10,"src":66701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[83,66703,66705],{"className":50613,"code":66704,"language":50615,"meta":10,"style":10},"\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",[89,66706,66707,66717,66731,66735,66743,66757,66777,66789,66797,66801,66809,66817,66829,66841,66853,66865,66877,66890,66898,66906,66911,66930,66951,66956,66961,66966,66971,66980,66984,66994,66998,67003,67008,67022,67032,67036,67040,67048,67056,67060],{"__ignoreMap":10},[92,66708,66709,66711,66713,66715],{"class":94,"line":95},[92,66710,51277],{"class":102},[92,66712,51281],{"class":51280},[92,66714,51284],{"class":1942},[92,66716,51287],{"class":102},[92,66718,66719,66721,66723,66725,66727,66729],{"class":94,"line":11},[92,66720,1013],{"class":102},[92,66722,50615],{"class":51280},[92,66724,51296],{"class":1942},[92,66726,148],{"class":102},[92,66728,51301],{"class":207},[92,66730,51287],{"class":102},[92,66732,66733],{"class":94,"line":1158},[92,66734,2379],{"emptyLinePlaceholder":17},[92,66736,66737,66739,66741],{"class":94,"line":1173},[92,66738,1013],{"class":102},[92,66740,51314],{"class":51280},[92,66742,51287],{"class":102},[92,66744,66745,66747,66749,66751,66753,66755],{"class":94,"line":1179},[92,66746,52124],{"class":102},[92,66748,51324],{"class":51280},[92,66750,51327],{"class":1942},[92,66752,148],{"class":102},[92,66754,51332],{"class":207},[92,66756,51287],{"class":102},[92,66758,66759,66761,66763,66765,66767,66769,66771,66773,66775],{"class":94,"line":1193},[92,66760,52124],{"class":102},[92,66762,51324],{"class":51280},[92,66764,14900],{"class":1942},[92,66766,148],{"class":102},[92,66768,51371],{"class":207},[92,66770,51351],{"class":1942},[92,66772,148],{"class":102},[92,66774,51378],{"class":207},[92,66776,51287],{"class":102},[92,66778,66779,66781,66783,66785,66787],{"class":94,"line":1199},[92,66780,52124],{"class":102},[92,66782,51387],{"class":51280},[92,66784,51390],{"class":102},[92,66786,51387],{"class":51280},[92,66788,51287],{"class":102},[92,66790,66791,66793,66795],{"class":94,"line":1290},[92,66792,51765],{"class":102},[92,66794,51314],{"class":51280},[92,66796,51287],{"class":102},[92,66798,66799],{"class":94,"line":1296},[92,66800,2379],{"emptyLinePlaceholder":17},[92,66802,66803,66805,66807],{"class":94,"line":1308},[92,66804,1013],{"class":102},[92,66806,51780],{"class":51280},[92,66808,51287],{"class":102},[92,66810,66811,66813,66815],{"class":94,"line":1591},[92,66812,52124],{"class":102},[92,66814,1110],{"class":51280},[92,66816,51287],{"class":102},[92,66818,66819,66821,66823,66825,66827],{"class":94,"line":1596},[92,66820,51321],{"class":102},[92,66822,49],{"class":51280},[92,66824,53946],{"class":102},[92,66826,49],{"class":51280},[92,66828,51287],{"class":102},[92,66830,66831,66833,66835,66837,66839],{"class":94,"line":1602},[92,66832,51321],{"class":102},[92,66834,49],{"class":51280},[92,66836,53965],{"class":102},[92,66838,49],{"class":51280},[92,66840,51287],{"class":102},[92,66842,66843,66845,66847,66849,66851],{"class":94,"line":1607},[92,66844,51321],{"class":102},[92,66846,49],{"class":51280},[92,66848,53984],{"class":102},[92,66850,49],{"class":51280},[92,66852,51287],{"class":102},[92,66854,66855,66857,66859,66861,66863],{"class":94,"line":1621},[92,66856,51321],{"class":102},[92,66858,49],{"class":51280},[92,66860,54003],{"class":102},[92,66862,49],{"class":51280},[92,66864,51287],{"class":102},[92,66866,66867,66869,66871,66873,66875],{"class":94,"line":1626},[92,66868,51321],{"class":102},[92,66870,49],{"class":51280},[92,66872,54022],{"class":102},[92,66874,49],{"class":51280},[92,66876,51287],{"class":102},[92,66878,66879,66881,66883,66886,66888],{"class":94,"line":1632},[92,66880,51321],{"class":102},[92,66882,38],{"class":51280},[92,66884,66885],{"class":102},">我不需要变色\u003C\u002F",[92,66887,38],{"class":51280},[92,66889,51287],{"class":102},[92,66891,66892,66894,66896],{"class":94,"line":1653},[92,66893,52397],{"class":102},[92,66895,1110],{"class":51280},[92,66897,51287],{"class":102},[92,66899,66900,66902,66904],{"class":94,"line":1658},[92,66901,52124],{"class":102},[92,66903,51793],{"class":51280},[92,66905,51287],{"class":102},[92,66907,66908],{"class":94,"line":1672},[92,66909,66910],{"class":161},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[92,66912,66913,66915,66917,66919,66921,66923,66925,66928],{"class":94,"line":1677},[92,66914,11201],{"class":98},[92,66916,61272],{"class":151},[92,66918,13544],{"class":98},[92,66920,54376],{"class":102},[92,66922,54379],{"class":1942},[92,66924,103],{"class":102},[92,66926,66927],{"class":207},"'ul'",[92,66929,109],{"class":102},[92,66931,66932,66935,66937,66939,66941,66943,66945,66947,66949],{"class":94,"line":1706},[92,66933,66934],{"class":102},"    ul.",[92,66936,57793],{"class":1942},[92,66938,103],{"class":102},[92,66940,57798],{"class":207},[92,66942,12415],{"class":102},[92,66944,54429],{"class":98},[92,66946,1637],{"class":102},[92,66948,177],{"class":5196},[92,66950,12422],{"class":102},[92,66952,66953],{"class":94,"line":1711},[92,66954,66955],{"class":161},"      \u002F\u002F alert(1)\n",[92,66957,66958],{"class":94,"line":1728},[92,66959,66960],{"class":161},"      \u002F\u002F e.target就是我们点击的对象\n",[92,66962,66963],{"class":94,"line":1733},[92,66964,66965],{"class":161},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[92,66967,66968],{"class":94,"line":1738},[92,66969,66970],{"class":161},"      \u002F\u002F e.target.style.color = 'red'\n",[92,66972,66973,66975,66977],{"class":94,"line":1743},[92,66974,58224],{"class":102},[92,66976,58227],{"class":1942},[92,66978,66979],{"class":102},"(e)\n",[92,66981,66982],{"class":94,"line":1757},[92,66983,2379],{"emptyLinePlaceholder":17},[92,66985,66986,66988,66991],{"class":94,"line":1762},[92,66987,58224],{"class":102},[92,66989,66990],{"class":1942},"dir",[92,66992,66993],{"class":102},"(e.target)\n",[92,66995,66996],{"class":94,"line":2556},[92,66997,2379],{"emptyLinePlaceholder":17},[92,66999,67000],{"class":94,"line":2570},[92,67001,67002],{"class":161},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[92,67004,67005],{"class":94,"line":2578},[92,67006,67007],{"class":161},"      \u002F\u002F 通过tagName来进行判断\n",[92,67009,67010,67012,67015,67017,67020],{"class":94,"line":2583},[92,67011,54460],{"class":98},[92,67013,67014],{"class":102}," (e.target.tagName ",[92,67016,54466],{"class":98},[92,67018,67019],{"class":207}," 'LI'",[92,67021,12422],{"class":102},[92,67023,67024,67027,67029],{"class":94,"line":2589},[92,67025,67026],{"class":102},"        e.target.style.color ",[92,67028,148],{"class":98},[92,67030,67031],{"class":207}," 'red'\n",[92,67033,67034],{"class":94,"line":2595},[92,67035,52378],{"class":102},[92,67037,67038],{"class":94,"line":2600},[92,67039,33442],{"class":102},[92,67041,67042,67044,67046],{"class":94,"line":7928},[92,67043,52397],{"class":102},[92,67045,51793],{"class":51280},[92,67047,51287],{"class":102},[92,67049,67050,67052,67054],{"class":94,"line":7952},[92,67051,51765],{"class":102},[92,67053,51780],{"class":51280},[92,67055,51287],{"class":102},[92,67057,67058],{"class":94,"line":7957},[92,67059,2379],{"emptyLinePlaceholder":17},[92,67061,67062,67064,67066],{"class":94,"line":7963},[92,67063,51765],{"class":102},[92,67065,50615],{"class":51280},[92,67067,51287],{"class":102},[38,67069,67070],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[38,67072,67073],{},"if(e.target.ragName==='P') {}",[38,67075,67076],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[38,67078,67079],{},"通过事件委托的方式实现tab栏切换改造：",[38,67081,67082],{},"一定要记住自定义属性！！！！！！",[38,67084,67085],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[38,67087,67088],{},"id是自定义的属性名",[38,67090,67091],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[83,67093,67095],{"className":50613,"code":67094,"language":50615,"meta":10,"style":10},"\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",[89,67096,67097,67107,67121,67125,67133,67147,67167,67187,67199,67207,67213,67223,67233,67237,67241,67247,67259,67271,67283,67299,67303,67307,67313,67325,67337,67349,67359,67369,67373,67377,67385,67397,67407,67419,67423,67427,67435,67445,67455,67465,67469,67473,67483,67497,67509,67513,67517,67529,67539,67555,67565,67569,67573,67587,67597,67607,67611,67615,67621,67635,67639,67643,67651,67661,67665,67669,67678,67688,67692,67700,67708,67712,67720,67734,67748,67760,67768,67807,67839,67871,67903,67935,67943,67951,67965,67999,68033,68067,68101,68135,68143,68151,68159,68164,68169,68188,68193,68213,68221,68226,68239,68260,68273,68277,68282,68287,68300,68320,68348,68352,68356,68360,68368,68376,68380],{"__ignoreMap":10},[92,67098,67099,67101,67103,67105],{"class":94,"line":95},[92,67100,51277],{"class":102},[92,67102,51281],{"class":51280},[92,67104,51284],{"class":1942},[92,67106,51287],{"class":102},[92,67108,67109,67111,67113,67115,67117,67119],{"class":94,"line":11},[92,67110,1013],{"class":102},[92,67112,50615],{"class":51280},[92,67114,51296],{"class":1942},[92,67116,148],{"class":102},[92,67118,51301],{"class":207},[92,67120,51287],{"class":102},[92,67122,67123],{"class":94,"line":1158},[92,67124,2379],{"emptyLinePlaceholder":17},[92,67126,67127,67129,67131],{"class":94,"line":1173},[92,67128,1013],{"class":102},[92,67130,51314],{"class":51280},[92,67132,51287],{"class":102},[92,67134,67135,67137,67139,67141,67143,67145],{"class":94,"line":1179},[92,67136,52124],{"class":102},[92,67138,51324],{"class":51280},[92,67140,51327],{"class":1942},[92,67142,148],{"class":102},[92,67144,51332],{"class":207},[92,67146,59107],{"class":102},[92,67148,67149,67151,67153,67155,67157,67159,67161,67163,67165],{"class":94,"line":1193},[92,67150,52124],{"class":102},[92,67152,51324],{"class":51280},[92,67154,51343],{"class":1942},[92,67156,148],{"class":102},[92,67158,51348],{"class":207},[92,67160,51351],{"class":1942},[92,67162,148],{"class":102},[92,67164,51356],{"class":207},[92,67166,59107],{"class":102},[92,67168,67169,67171,67173,67175,67177,67179,67181,67183,67185],{"class":94,"line":1199},[92,67170,52124],{"class":102},[92,67172,51324],{"class":51280},[92,67174,14900],{"class":1942},[92,67176,148],{"class":102},[92,67178,51371],{"class":207},[92,67180,51351],{"class":1942},[92,67182,148],{"class":102},[92,67184,51378],{"class":207},[92,67186,59107],{"class":102},[92,67188,67189,67191,67193,67195,67197],{"class":94,"line":1290},[92,67190,52124],{"class":102},[92,67192,51387],{"class":51280},[92,67194,63605],{"class":102},[92,67196,51387],{"class":51280},[92,67198,51287],{"class":102},[92,67200,67201,67203,67205],{"class":94,"line":1296},[92,67202,52124],{"class":102},[92,67204,5106],{"class":51280},[92,67206,51287],{"class":102},[92,67208,67209,67211],{"class":94,"line":1308},[92,67210,6383],{"class":51280},[92,67212,15552],{"class":102},[92,67214,67215,67217,67219,67221],{"class":94,"line":1591},[92,67216,54686],{"class":151},[92,67218,51417],{"class":102},[92,67220,294],{"class":151},[92,67222,1269],{"class":102},[92,67224,67225,67227,67229,67231],{"class":94,"line":1596},[92,67226,54675],{"class":151},[92,67228,51417],{"class":102},[92,67230,294],{"class":151},[92,67232,1269],{"class":102},[92,67234,67235],{"class":94,"line":1602},[92,67236,2166],{"class":102},[92,67238,67239],{"class":94,"line":1607},[92,67240,2379],{"emptyLinePlaceholder":17},[92,67242,67243,67245],{"class":94,"line":1621},[92,67244,63656],{"class":1942},[92,67246,15552],{"class":102},[92,67248,67249,67251,67253,67255,67257],{"class":94,"line":1626},[92,67250,54751],{"class":151},[92,67252,51417],{"class":102},[92,67254,63667],{"class":151},[92,67256,51472],{"class":98},[92,67258,1269],{"class":102},[92,67260,67261,67263,67265,67267,67269],{"class":94,"line":1632},[92,67262,54765],{"class":151},[92,67264,51417],{"class":102},[92,67266,63680],{"class":151},[92,67268,51472],{"class":98},[92,67270,1269],{"class":102},[92,67272,67273,67275,67277,67279,67281],{"class":94,"line":1653},[92,67274,54686],{"class":151},[92,67276,51417],{"class":102},[92,67278,803],{"class":151},[92,67280,51472],{"class":98},[92,67282,1269],{"class":102},[92,67284,67285,67287,67289,67291,67293,67295,67297],{"class":94,"line":1658},[92,67286,61957],{"class":151},[92,67288,51417],{"class":102},[92,67290,320],{"class":151},[92,67292,51472],{"class":98},[92,67294,51501],{"class":151},[92,67296,62224],{"class":151},[92,67298,1269],{"class":102},[92,67300,67301],{"class":94,"line":1672},[92,67302,2166],{"class":102},[92,67304,67305],{"class":94,"line":1677},[92,67306,2379],{"emptyLinePlaceholder":17},[92,67308,67309,67311],{"class":94,"line":1706},[92,67310,63725],{"class":1942},[92,67312,15552],{"class":102},[92,67314,67315,67317,67319,67321,67323],{"class":94,"line":1711},[92,67316,54751],{"class":151},[92,67318,51417],{"class":102},[92,67320,414],{"class":151},[92,67322,431],{"class":98},[92,67324,1269],{"class":102},[92,67326,67327,67329,67331,67333,67335],{"class":94,"line":1728},[92,67328,54765],{"class":151},[92,67330,51417],{"class":102},[92,67332,1010],{"class":151},[92,67334,51472],{"class":98},[92,67336,1269],{"class":102},[92,67338,67339,67341,67343,67345,67347],{"class":94,"line":1733},[92,67340,57339],{"class":151},[92,67342,51417],{"class":102},[92,67344,1010],{"class":151},[92,67346,51472],{"class":98},[92,67348,1269],{"class":102},[92,67350,67351,67353,67355,67357],{"class":94,"line":1738},[92,67352,54989],{"class":151},[92,67354,51417],{"class":102},[92,67356,51457],{"class":151},[92,67358,1269],{"class":102},[92,67360,67361,67363,67365,67367],{"class":94,"line":1743},[92,67362,55000],{"class":151},[92,67364,51417],{"class":102},[92,67366,51648],{"class":151},[92,67368,1269],{"class":102},[92,67370,67371],{"class":94,"line":1757},[92,67372,2166],{"class":102},[92,67374,67375],{"class":94,"line":1762},[92,67376,2379],{"emptyLinePlaceholder":17},[92,67378,67379,67381,67383],{"class":94,"line":2556},[92,67380,63725],{"class":1942},[92,67382,63798],{"class":51280},[92,67384,15552],{"class":102},[92,67386,67387,67389,67391,67393,67395],{"class":94,"line":2570},[92,67388,54902],{"class":151},[92,67390,51417],{"class":102},[92,67392,903],{"class":151},[92,67394,51472],{"class":98},[92,67396,1269],{"class":102},[92,67398,67399,67401,67403,67405],{"class":94,"line":2578},[92,67400,62314],{"class":151},[92,67402,51417],{"class":102},[92,67404,63821],{"class":151},[92,67406,1269],{"class":102},[92,67408,67409,67411,67413,67415,67417],{"class":94,"line":2583},[92,67410,61980],{"class":151},[92,67412,51417],{"class":102},[92,67414,803],{"class":151},[92,67416,51472],{"class":98},[92,67418,1269],{"class":102},[92,67420,67421],{"class":94,"line":2589},[92,67422,2166],{"class":102},[92,67424,67425],{"class":94,"line":2595},[92,67426,2379],{"emptyLinePlaceholder":17},[92,67428,67429,67431,67433],{"class":94,"line":2600},[92,67430,63725],{"class":1942},[92,67432,61272],{"class":51280},[92,67434,15552],{"class":102},[92,67436,67437,67439,67441,67443],{"class":94,"line":7928},[92,67438,54712],{"class":151},[92,67440,51417],{"class":102},[92,67442,54717],{"class":151},[92,67444,1269],{"class":102},[92,67446,67447,67449,67451,67453],{"class":94,"line":7952},[92,67448,54989],{"class":151},[92,67450,51417],{"class":102},[92,67452,51457],{"class":151},[92,67454,1269],{"class":102},[92,67456,67457,67459,67461,67463],{"class":94,"line":7957},[92,67458,55000],{"class":151},[92,67460,51417],{"class":102},[92,67462,51560],{"class":151},[92,67464,1269],{"class":102},[92,67466,67467],{"class":94,"line":7963},[92,67468,2166],{"class":102},[92,67470,67471],{"class":94,"line":7990},[92,67472,2379],{"emptyLinePlaceholder":17},[92,67474,67475,67477,67479,67481],{"class":94,"line":7995},[92,67476,63725],{"class":1942},[92,67478,61272],{"class":51280},[92,67480,55055],{"class":51280},[92,67482,15552],{"class":102},[92,67484,67485,67487,67489,67491,67493,67495],{"class":94,"line":8001},[92,67486,54686],{"class":151},[92,67488,51417],{"class":102},[92,67490,294],{"class":151},[92,67492,8930],{"class":151},[92,67494,51472],{"class":98},[92,67496,1269],{"class":102},[92,67498,67499,67501,67503,67505,67507],{"class":94,"line":8013},[92,67500,54902],{"class":151},[92,67502,51417],{"class":102},[92,67504,652],{"class":151},[92,67506,51472],{"class":98},[92,67508,1269],{"class":102},[92,67510,67511],{"class":94,"line":8025},[92,67512,2166],{"class":102},[92,67514,67515],{"class":94,"line":8037},[92,67516,2379],{"emptyLinePlaceholder":17},[92,67518,67519,67521,67523,67525,67527],{"class":94,"line":9696},[92,67520,63725],{"class":1942},[92,67522,61272],{"class":51280},[92,67524,55055],{"class":51280},[92,67526,1377],{"class":51280},[92,67528,15552],{"class":102},[92,67530,67531,67533,67535,67537],{"class":94,"line":9721},[92,67532,63950],{"class":151},[92,67534,51417],{"class":102},[92,67536,54717],{"class":151},[92,67538,1269],{"class":102},[92,67540,67541,67543,67545,67547,67549,67551,67553],{"class":94,"line":9744},[92,67542,62212],{"class":151},[92,67544,51417],{"class":102},[92,67546,180],{"class":151},[92,67548,51472],{"class":98},[92,67550,51501],{"class":151},[92,67552,63971],{"class":151},[92,67554,1269],{"class":102},[92,67556,67557,67559,67561,67563],{"class":94,"line":9768},[92,67558,57396],{"class":151},[92,67560,51417],{"class":102},[92,67562,62349],{"class":151},[92,67564,1269],{"class":102},[92,67566,67567],{"class":94,"line":9773},[92,67568,2166],{"class":102},[92,67570,67571],{"class":94,"line":9778},[92,67572,2379],{"emptyLinePlaceholder":17},[92,67574,67575,67577,67579,67581,67583,67585],{"class":94,"line":9783},[92,67576,63725],{"class":1942},[92,67578,61272],{"class":51280},[92,67580,55055],{"class":51280},[92,67582,1377],{"class":51280},[92,67584,64004],{"class":1942},[92,67586,15552],{"class":102},[92,67588,67589,67591,67593,67595],{"class":94,"line":9792},[92,67590,61771],{"class":151},[92,67592,51417],{"class":102},[92,67594,64015],{"class":151},[92,67596,1269],{"class":102},[92,67598,67599,67601,67603,67605],{"class":94,"line":9797},[92,67600,57396],{"class":151},[92,67602,51417],{"class":102},[92,67604,64015],{"class":151},[92,67606,1269],{"class":102},[92,67608,67609],{"class":94,"line":9803},[92,67610,2166],{"class":102},[92,67612,67613],{"class":94,"line":9824},[92,67614,2379],{"emptyLinePlaceholder":17},[92,67616,67617,67619],{"class":94,"line":9830},[92,67618,64040],{"class":1942},[92,67620,15552],{"class":102},[92,67622,67623,67625,67627,67629,67631,67633],{"class":94,"line":9844},[92,67624,54675],{"class":151},[92,67626,51417],{"class":102},[92,67628,294],{"class":151},[92,67630,64053],{"class":151},[92,67632,51472],{"class":98},[92,67634,1269],{"class":102},[92,67636,67637],{"class":94,"line":9850},[92,67638,2166],{"class":102},[92,67640,67641],{"class":94,"line":9877},[92,67642,2379],{"emptyLinePlaceholder":17},[92,67644,67645,67647,67649],{"class":94,"line":9886},[92,67646,64040],{"class":1942},[92,67648,62154],{"class":1942},[92,67650,15552],{"class":102},[92,67652,67653,67655,67657,67659],{"class":94,"line":9892},[92,67654,54989],{"class":151},[92,67656,51417],{"class":102},[92,67658,54717],{"class":151},[92,67660,1269],{"class":102},[92,67662,67663],{"class":94,"line":9900},[92,67664,2166],{"class":102},[92,67666,67667],{"class":94,"line":9905},[92,67668,2379],{"emptyLinePlaceholder":17},[92,67670,67671,67673,67676],{"class":94,"line":16584},[92,67672,64040],{"class":1942},[92,67674,67675],{"class":1942}," .active",[92,67677,15552],{"class":102},[92,67679,67680,67682,67684,67686],{"class":94,"line":16590},[92,67681,54989],{"class":151},[92,67683,51417],{"class":102},[92,67685,60849],{"class":151},[92,67687,1269],{"class":102},[92,67689,67690],{"class":94,"line":16613},[92,67691,2166],{"class":102},[92,67693,67694,67696,67698],{"class":94,"line":16619},[92,67695,52397],{"class":102},[92,67697,5106],{"class":51280},[92,67699,51287],{"class":102},[92,67701,67702,67704,67706],{"class":94,"line":16642},[92,67703,51765],{"class":102},[92,67705,51314],{"class":51280},[92,67707,51287],{"class":102},[92,67709,67710],{"class":94,"line":16656},[92,67711,2379],{"emptyLinePlaceholder":17},[92,67713,67714,67716,67718],{"class":94,"line":16676},[92,67715,1013],{"class":102},[92,67717,51780],{"class":51280},[92,67719,51287],{"class":102},[92,67721,67722,67724,67726,67728,67730,67732],{"class":94,"line":16682},[92,67723,52124],{"class":102},[92,67725,51591],{"class":51280},[92,67727,53466],{"class":1942},[92,67729,148],{"class":102},[92,67731,64155],{"class":207},[92,67733,51287],{"class":102},[92,67735,67736,67738,67740,67742,67744,67746],{"class":94,"line":16693},[92,67737,51321],{"class":102},[92,67739,51591],{"class":51280},[92,67741,53466],{"class":1942},[92,67743,148],{"class":102},[92,67745,64170],{"class":207},[92,67747,51287],{"class":102},[92,67749,67750,67752,67754,67756,67758],{"class":94,"line":16716},[92,67751,55214],{"class":102},[92,67753,63],{"class":51280},[92,67755,64181],{"class":102},[92,67757,63],{"class":51280},[92,67759,51287],{"class":102},[92,67761,67762,67764,67766],{"class":94,"line":16738},[92,67763,55214],{"class":102},[92,67765,1110],{"class":51280},[92,67767,51287],{"class":102},[92,67769,67770,67772,67774,67776,67778,67780,67782,67784,67786,67788,67790,67792,67794,67797,67799,67801,67803,67805],{"class":94,"line":16743},[92,67771,55282],{"class":102},[92,67773,49],{"class":51280},[92,67775,61032],{"class":102},[92,67777,341],{"class":51280},[92,67779,53466],{"class":1942},[92,67781,148],{"class":102},[92,67783,59686],{"class":207},[92,67785,61037],{"class":1942},[92,67787,148],{"class":102},[92,67789,64216],{"class":207},[92,67791,53931],{"class":1942},[92,67793,148],{"class":102},[92,67795,67796],{"class":207},"\"0\"",[92,67798,64219],{"class":102},[92,67800,341],{"class":51280},[92,67802,55294],{"class":102},[92,67804,49],{"class":51280},[92,67806,51287],{"class":102},[92,67808,67809,67811,67813,67815,67817,67819,67821,67823,67825,67827,67829,67831,67833,67835,67837],{"class":94,"line":16749},[92,67810,55282],{"class":102},[92,67812,49],{"class":51280},[92,67814,61032],{"class":102},[92,67816,341],{"class":51280},[92,67818,61037],{"class":1942},[92,67820,148],{"class":102},[92,67822,64216],{"class":207},[92,67824,53931],{"class":1942},[92,67826,148],{"class":102},[92,67828,3657],{"class":207},[92,67830,64246],{"class":102},[92,67832,341],{"class":51280},[92,67834,55294],{"class":102},[92,67836,49],{"class":51280},[92,67838,51287],{"class":102},[92,67840,67841,67843,67845,67847,67849,67851,67853,67855,67857,67859,67861,67863,67865,67867,67869],{"class":94,"line":16763},[92,67842,55282],{"class":102},[92,67844,49],{"class":51280},[92,67846,61032],{"class":102},[92,67848,341],{"class":51280},[92,67850,61037],{"class":1942},[92,67852,148],{"class":102},[92,67854,64216],{"class":207},[92,67856,53931],{"class":1942},[92,67858,148],{"class":102},[92,67860,3680],{"class":207},[92,67862,64273],{"class":102},[92,67864,341],{"class":51280},[92,67866,55294],{"class":102},[92,67868,49],{"class":51280},[92,67870,51287],{"class":102},[92,67872,67873,67875,67877,67879,67881,67883,67885,67887,67889,67891,67893,67895,67897,67899,67901],{"class":94,"line":16776},[92,67874,55282],{"class":102},[92,67876,49],{"class":51280},[92,67878,61032],{"class":102},[92,67880,341],{"class":51280},[92,67882,61037],{"class":1942},[92,67884,148],{"class":102},[92,67886,64216],{"class":207},[92,67888,53931],{"class":1942},[92,67890,148],{"class":102},[92,67892,3693],{"class":207},[92,67894,64300],{"class":102},[92,67896,341],{"class":51280},[92,67898,55294],{"class":102},[92,67900,49],{"class":51280},[92,67902,51287],{"class":102},[92,67904,67905,67907,67909,67911,67913,67915,67917,67919,67921,67923,67925,67927,67929,67931,67933],{"class":94,"line":16781},[92,67906,55282],{"class":102},[92,67908,49],{"class":51280},[92,67910,61032],{"class":102},[92,67912,341],{"class":51280},[92,67914,61037],{"class":1942},[92,67916,148],{"class":102},[92,67918,64216],{"class":207},[92,67920,53931],{"class":1942},[92,67922,148],{"class":102},[92,67924,3706],{"class":207},[92,67926,64327],{"class":102},[92,67928,341],{"class":51280},[92,67930,55294],{"class":102},[92,67932,49],{"class":51280},[92,67934,51287],{"class":102},[92,67936,67937,67939,67941],{"class":94,"line":16795},[92,67938,55387],{"class":102},[92,67940,1110],{"class":51280},[92,67942,51287],{"class":102},[92,67944,67945,67947,67949],{"class":94,"line":16800},[92,67946,51756],{"class":102},[92,67948,51591],{"class":51280},[92,67950,51287],{"class":102},[92,67952,67953,67955,67957,67959,67961,67963],{"class":94,"line":16806},[92,67954,51321],{"class":102},[92,67956,51591],{"class":51280},[92,67958,53466],{"class":1942},[92,67960,148],{"class":102},[92,67962,64364],{"class":207},[92,67964,51287],{"class":102},[92,67966,67967,67969,67971,67973,67975,67977,67979,67981,67983,67985,67987,67989,67991,67993,67995,67997],{"class":94,"line":16811},[92,67968,55214],{"class":102},[92,67970,51591],{"class":51280},[92,67972,53466],{"class":1942},[92,67974,148],{"class":102},[92,67976,64379],{"class":207},[92,67978,61032],{"class":102},[92,67980,1441],{"class":51280},[92,67982,55219],{"class":1942},[92,67984,148],{"class":102},[92,67986,64390],{"class":207},[92,67988,55227],{"class":1942},[92,67990,148],{"class":102},[92,67992,7632],{"class":207},[92,67994,64399],{"class":102},[92,67996,51591],{"class":51280},[92,67998,51287],{"class":102},[92,68000,68001,68003,68005,68007,68009,68011,68013,68015,68017,68019,68021,68023,68025,68027,68029,68031],{"class":94,"line":16825},[92,68002,55214],{"class":102},[92,68004,51591],{"class":51280},[92,68006,53466],{"class":1942},[92,68008,148],{"class":102},[92,68010,62603],{"class":207},[92,68012,61032],{"class":102},[92,68014,1441],{"class":51280},[92,68016,55219],{"class":1942},[92,68018,148],{"class":102},[92,68020,64426],{"class":207},[92,68022,55227],{"class":1942},[92,68024,148],{"class":102},[92,68026,7632],{"class":207},[92,68028,64399],{"class":102},[92,68030,51591],{"class":51280},[92,68032,51287],{"class":102},[92,68034,68035,68037,68039,68041,68043,68045,68047,68049,68051,68053,68055,68057,68059,68061,68063,68065],{"class":94,"line":16830},[92,68036,55214],{"class":102},[92,68038,51591],{"class":51280},[92,68040,53466],{"class":1942},[92,68042,148],{"class":102},[92,68044,62603],{"class":207},[92,68046,61032],{"class":102},[92,68048,1441],{"class":51280},[92,68050,55219],{"class":1942},[92,68052,148],{"class":102},[92,68054,64461],{"class":207},[92,68056,55227],{"class":1942},[92,68058,148],{"class":102},[92,68060,7632],{"class":207},[92,68062,64399],{"class":102},[92,68064,51591],{"class":51280},[92,68066,51287],{"class":102},[92,68068,68069,68071,68073,68075,68077,68079,68081,68083,68085,68087,68089,68091,68093,68095,68097,68099],{"class":94,"line":16835},[92,68070,55214],{"class":102},[92,68072,51591],{"class":51280},[92,68074,53466],{"class":1942},[92,68076,148],{"class":102},[92,68078,62603],{"class":207},[92,68080,61032],{"class":102},[92,68082,1441],{"class":51280},[92,68084,55219],{"class":1942},[92,68086,148],{"class":102},[92,68088,64496],{"class":207},[92,68090,55227],{"class":1942},[92,68092,148],{"class":102},[92,68094,7632],{"class":207},[92,68096,64399],{"class":102},[92,68098,51591],{"class":51280},[92,68100,51287],{"class":102},[92,68102,68103,68105,68107,68109,68111,68113,68115,68117,68119,68121,68123,68125,68127,68129,68131,68133],{"class":94,"line":16849},[92,68104,55214],{"class":102},[92,68106,51591],{"class":51280},[92,68108,53466],{"class":1942},[92,68110,148],{"class":102},[92,68112,62603],{"class":207},[92,68114,61032],{"class":102},[92,68116,1441],{"class":51280},[92,68118,55219],{"class":1942},[92,68120,148],{"class":102},[92,68122,64531],{"class":207},[92,68124,55227],{"class":1942},[92,68126,148],{"class":102},[92,68128,7632],{"class":207},[92,68130,64399],{"class":102},[92,68132,51591],{"class":51280},[92,68134,51287],{"class":102},[92,68136,68137,68139,68141],{"class":94,"line":16861},[92,68138,51756],{"class":102},[92,68140,51591],{"class":51280},[92,68142,51287],{"class":102},[92,68144,68145,68147,68149],{"class":94,"line":16866},[92,68146,52397],{"class":102},[92,68148,51591],{"class":51280},[92,68150,51287],{"class":102},[92,68152,68153,68155,68157],{"class":94,"line":16879},[92,68154,52124],{"class":102},[92,68156,51793],{"class":51280},[92,68158,51287],{"class":102},[92,68160,68161],{"class":94,"line":16884},[92,68162,68163],{"class":161},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[92,68165,68166],{"class":94,"line":16889},[92,68167,68168],{"class":161},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[92,68170,68171,68173,68175,68177,68179,68181,68183,68186],{"class":94,"line":16894},[92,68172,11201],{"class":98},[92,68174,61272],{"class":151},[92,68176,13544],{"class":98},[92,68178,54376],{"class":102},[92,68180,54379],{"class":1942},[92,68182,103],{"class":102},[92,68184,68185],{"class":207},"'.tab-nav ul'",[92,68187,109],{"class":102},[92,68189,68190],{"class":94,"line":16907},[92,68191,68192],{"class":161},"    \u002F\u002F 2.添加事件\n",[92,68194,68195,68197,68199,68201,68203,68205,68207,68209,68211],{"class":94,"line":16912},[92,68196,66934],{"class":102},[92,68198,57793],{"class":1942},[92,68200,103],{"class":102},[92,68202,57798],{"class":207},[92,68204,12415],{"class":102},[92,68206,54429],{"class":98},[92,68208,1637],{"class":102},[92,68210,177],{"class":5196},[92,68212,12422],{"class":102},[92,68214,68215,68217,68219],{"class":94,"line":32614},[92,68216,58224],{"class":102},[92,68218,66990],{"class":1942},[92,68220,66993],{"class":102},[92,68222,68223],{"class":94,"line":32620},[92,68224,68225],{"class":161},"      \u002F\u002Fe.targer是我们点击的对象\n",[92,68227,68228,68230,68232,68234,68237],{"class":94,"line":32626},[92,68229,54460],{"class":98},[92,68231,67014],{"class":102},[92,68233,54466],{"class":98},[92,68235,68236],{"class":207}," 'A'",[92,68238,12422],{"class":102},[92,68240,68241,68243,68245,68247,68250,68252,68254,68256,68258],{"class":94,"line":32632},[92,68242,51905],{"class":102},[92,68244,54379],{"class":1942},[92,68246,103],{"class":102},[92,68248,68249],{"class":207},"'.active'",[92,68251,56983],{"class":102},[92,68253,56986],{"class":1942},[92,68255,103],{"class":102},[92,68257,64694],{"class":207},[92,68259,109],{"class":102},[92,68261,68262,68265,68267,68269,68271],{"class":94,"line":32638},[92,68263,68264],{"class":102},"        e.target.classList.",[92,68266,5314],{"class":1942},[92,68268,103],{"class":102},[92,68270,64694],{"class":207},[92,68272,109],{"class":102},[92,68274,68275],{"class":94,"line":32649},[92,68276,2379],{"emptyLinePlaceholder":17},[92,68278,68279],{"class":94,"line":32655},[92,68280,68281],{"class":161},"        \u002F\u002F 下面大盒子模块\n",[92,68283,68284],{"class":94,"line":32675},[92,68285,68286],{"class":161},"        \u002F\u002F console.log(e.target.dataset.id)\n",[92,68288,68289,68291,68293,68295,68297],{"class":94,"line":32681},[92,68290,61250],{"class":98},[92,68292,3011],{"class":151},[92,68294,13544],{"class":98},[92,68296,45547],{"class":98},[92,68298,68299],{"class":102},"e.target.dataset.id\n",[92,68301,68302,68304,68306,68308,68310,68312,68314,68316,68318],{"class":94,"line":32692},[92,68303,51905],{"class":102},[92,68305,54379],{"class":1942},[92,68307,103],{"class":102},[92,68309,64742],{"class":207},[92,68311,56983],{"class":102},[92,68313,56986],{"class":1942},[92,68315,103],{"class":102},[92,68317,64694],{"class":207},[92,68319,109],{"class":102},[92,68321,68322,68324,68326,68328,68330,68332,68334,68336,68338,68340,68342,68344,68346],{"class":94,"line":32698},[92,68323,51905],{"class":102},[92,68325,54379],{"class":1942},[92,68327,103],{"class":102},[92,68329,64768],{"class":207},[92,68331,544],{"class":102},[92,68333,45547],{"class":98},[92,68335,25099],{"class":151},[92,68337,57012],{"class":207},[92,68339,56983],{"class":102},[92,68341,5314],{"class":1942},[92,68343,103],{"class":102},[92,68345,64694],{"class":207},[92,68347,109],{"class":102},[92,68349,68350],{"class":94,"line":32704},[92,68351,2379],{"emptyLinePlaceholder":17},[92,68353,68354],{"class":94,"line":32710},[92,68355,52378],{"class":102},[92,68357,68358],{"class":94,"line":32716},[92,68359,33442],{"class":102},[92,68361,68362,68364,68366],{"class":94,"line":32722},[92,68363,52397],{"class":102},[92,68365,51793],{"class":51280},[92,68367,51287],{"class":102},[92,68369,68370,68372,68374],{"class":94,"line":32728},[92,68371,51765],{"class":102},[92,68373,51780],{"class":51280},[92,68375,51287],{"class":102},[92,68377,68378],{"class":94,"line":32734},[92,68379,2379],{"emptyLinePlaceholder":17},[92,68381,68382,68384,68386],{"class":94,"line":32754},[92,68383,51765],{"class":102},[92,68385,50615],{"class":51280},[92,68387,51287],{"class":102},[63,68389,68391],{"id":68390},"_333-页面加载事件","3.3.3 页面加载事件",[46,68393,68394],{},[49,68395,68396],{},"load",[38,68398,68399],{},[1441,68400],{"alt":10,"src":68401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[38,68403,68404],{},"window代表整个窗口，比document还要大",[38,68406,68407],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[38,68409,68410],{},"img.addEventListener('load', function () {",[38,68412,68413],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[38,68415,52444],{},[46,68417,68418],{"start":11},[49,68419,68420],{},"DOMContentLoaded",[38,68422,68423],{},[1441,68424],{"alt":10,"src":68425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[38,68427,68428],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[63,68430,68432],{"id":68431},"_334-元素滚动事件","3.3.4 元素滚动事件",[38,68434,68435],{},[1441,68436],{"alt":10,"src":68437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[38,68439,68440],{},[1441,68441],{"alt":10,"src":68442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[38,68444,68445],{},[1441,68446],{"alt":10,"src":68447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[38,68449,68450],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[38,68452,68453],{},"获得的是数字型数据，不带单位",[38,68455,68456],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[38,68458,68459],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[38,68461,68462],{},"它是通过document.documentElement来获取",[38,68464,68465],{},[1441,68466],{"alt":10,"src":68467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[38,68469,68470],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[63,68472,68474],{"id":68473},"_335-页面缩放事件","3.3.5 页面缩放事件",[38,68476,68477],{},[1441,68478],{"alt":10,"src":68479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[38,68481,68482],{},[1441,68483],{"alt":10,"src":68484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[63,68486,68488],{"id":68487},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[38,68490,68491],{},[1441,68492],{"alt":10,"src":68493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[38,68495,68496],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[38,68498,68499],{},[1441,68500],{"alt":10,"src":68501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[38,68503,68504],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[38,68506,68507],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[38,68509,68510],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[38,68512,68513],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[38,68515,68516],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[38,68518,68519],{},[1441,68520],{"alt":10,"src":68521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[38,68523,68524],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[38,68526,68527],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[38,68529,68530],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[38,68532,68533],{},"e.pageX-box.getBoundingClientRect()",[63,68535,68537],{"id":68536},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[38,68539,68540],{},[1441,68541],{"alt":10,"src":68542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[38,68544,68545],{},"这个是相对于视口来说的，它是个方法，不是属性值",[63,68547,68549],{"id":68548},"_338-总结","3.3.8 总结",[38,68551,68552],{},[1441,68553],{"alt":10,"src":68554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[38,68556,68557],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[38,68559,68560],{},"修改盒子的宽高只能通过width和height来实现",[63,68562,68564],{"id":68563},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[83,68566,68568],{"className":50613,"code":68567,"language":50615,"meta":10,"style":10},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[89,68569,68570,68575,68580,68585,68590],{"__ignoreMap":10},[92,68571,68572],{"class":94,"line":95},[92,68573,68574],{"class":102},"\u002F* 页面滑动 *\u002F\n",[92,68576,68577],{"class":94,"line":11},[92,68578,68579],{"class":102},"html {\n",[92,68581,68582],{"class":94,"line":1158},[92,68583,68584],{"class":102},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[92,68586,68587],{"class":94,"line":1173},[92,68588,68589],{"class":102},"  scroll-behavior: smooth;\n",[92,68591,68592],{"class":94,"line":1179},[92,68593,1544],{"class":102},[38,68595,68596],{},"默认是auto",[63,68598,68600],{"id":68599},"_3310-日期对象","3.3.10 日期对象",[21978,68602,68604],{"id":68603},"_33101-实例化","3.3.10.1 实例化",[38,68606,68607],{},[1441,68608],{"alt":10,"src":68609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21978,68611,68613],{"id":68612},"_33102-时期对象方法","3.3.10.2 时期对象方法",[38,68615,68616],{},[1441,68617],{"alt":10,"src":68618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[38,68620,68621],{},"月份+1",[38,68623,68624],{},"老外认为第一天为0，星期天",[38,68626,68627],{},"方法使用的时候必须要跟括号",[38,68629,68630],{},"快速获得日期",[38,68632,68633],{},"\u002F\u002F 得到年月日",[38,68635,68636],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[38,68638,68639],{},"\u002F\u002F 得到当地日期",[38,68641,68642],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[38,68644,68645],{},"\u002F\u002F 得到当地时间",[38,68647,68648],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[38,68650,68651],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[38,68653,68654],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51793,68656,68657],{},"\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",[38,68659,68660],{},"学会去封装函数！",[21978,68662,68664],{"id":68663},"_33103-时间戳","3.3.10.3 时间戳",[38,68666,68667],{},[1441,68668],{"alt":10,"src":68669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[38,68671,68672],{},[1441,68673],{"alt":10,"src":68674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[38,68676,68677],{},"三种方法记住一个就可以",[63,68679,68681],{"id":68680},"_3311-节点操作","3.3.11 节点操作",[21978,68683,68685],{"id":68684},"_33111-dom节点","3.3.11.1 DOM节点",[38,68687,68688],{},[1441,68689],{"alt":10,"src":68690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[38,68692,68693],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21978,68695,68697],{"id":68696},"_33112-查找节点","3.3.11.2 查找节点",[38,68699,68700],{},"前边的document.querySelector()是获取的元素",[38,68702,68703],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[38,68705,68706],{},[1441,68707],{"alt":10,"src":68708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[46,68710,68711],{},[49,68712,68713],{},"父节点",[38,68715,68716],{},[1441,68717],{"alt":10,"src":68718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[46,68720,68721],{"start":11},[49,68722,68723],{},"子节点",[38,68725,68726],{},[1441,68727],{"alt":10,"src":68728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[38,68730,68731],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[38,68733,68734],{},"children获得的是伪数组，是亲儿子",[46,68736,68737],{"start":1158},[49,68738,68739],{},"兄弟节点",[38,68741,68742],{},[1441,68743],{"alt":10,"src":68744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21978,68746,68748],{"id":68747},"_33113-增加节点","3.3.11.3 增加节点",[38,68750,68751],{},[1441,68752],{"alt":10,"src":68753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[38,68755,68756],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[38,68758,68759],{},[1441,68760],{"alt":10,"src":68761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[38,68763,68764],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[38,68766,68767],{},"下面是写法的部分展示，就按照下边的格式来写",[38,68769,68770],{},"例：",[51793,68772,68773],{},"\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",[38,68775,68776],{},[1441,68777],{"alt":10,"src":68778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[38,68780,68781],{},"false只克隆标签，里边的内容不会克隆过来",[83,68783,68785],{"className":50613,"code":68784,"language":50615,"meta":10,"style":10},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[89,68786,68787],{"__ignoreMap":10},[92,68788,68789],{"class":94,"line":95},[92,68790,68784],{"class":102},[21978,68792,68794],{"id":68793},"_33114-删除节点","3.3.11.4 删除节点",[38,68796,68797],{},[1441,68798],{"alt":10,"src":68799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[38,68801,68802],{},"父亲删儿子",[38,68804,68805],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[63,68807,68809],{"id":68808},"_3312-m端事件","3.3.12 M端事件",[38,68811,68812],{},"M端就是移动端",[38,68814,68815],{},[1441,68816],{"alt":10,"src":68817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[63,68819,68821],{"id":68820},"_3313-插件","3.3.13 插件",[38,68823,68824],{},"要熟悉官网！！！",[38,68826,68827],{},[341,68828,68829],{"href":68829,"rel":68830},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23845],[38,68832,68833],{},[341,68834,68835],{"href":68835,"rel":68836},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23845],[63,68838,68840],{"id":68839},"_3314-学生信息表","3.3.14 学生信息表",[46,68842,68843,68846,68849,68852,68855,68858,68861,68864],{},[49,68844,68845],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[49,68847,68848],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[49,68850,68851],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[49,68853,68854],{},"用好表单元素自带的属性，value,name等",[49,68856,68857],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[49,68859,68860],{},"不要忘记事件对象",[49,68862,68863],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[49,68865,68866],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[38,68868,68869],{},"结构：",[83,68871,68873],{"className":50613,"code":68872,"language":50615,"meta":10,"style":10},"\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",[89,68874,68875,68885,68899,68903,68911,68925,68945,68966,68979,69003,69011,69015,69023,69036,69057,69085,69113,69118,69140,69160,69179,69187,69215,69237,69257,69277,69297,69317,69337,69345,69365,69373,69377,69390,69398,69406,69414,69427,69440,69453,69466,69479,69492,69505,69513,69521,69529,69534,69539,69544,69549,69554,69559,69564,69569,69574,69579,69584,69589,69594,69602,69610,69618,69622,69642,69661,69681,69701,69721,69741,69745,69750,69770,69775,69785,69790,69795,69815,69837,69842,69852,69856,69860,69865,69870,69899,69913,69928,69932,69936,69940,69945,69956,69969,69974,69979,69984,69989,69994,69998,70003,70008,70017,70022,70027,70039,70044,70051,70055,70060,70070,70075,70085,70090,70118,70139,70149,70169,70187,70204,70221,70238,70255,70259,70269,70274,70279,70284,70295,70299,70303,70307,70312,70317,70338,70350,70355,70360,70365,70379,70384,70391,70395,70399,70407,70411,70419,70423],{"__ignoreMap":10},[92,68876,68877,68879,68881,68883],{"class":94,"line":95},[92,68878,51277],{"class":102},[92,68880,51281],{"class":51280},[92,68882,51284],{"class":1942},[92,68884,51287],{"class":102},[92,68886,68887,68889,68891,68893,68895,68897],{"class":94,"line":11},[92,68888,1013],{"class":102},[92,68890,50615],{"class":51280},[92,68892,51296],{"class":1942},[92,68894,148],{"class":102},[92,68896,51301],{"class":207},[92,68898,51287],{"class":102},[92,68900,68901],{"class":94,"line":1158},[92,68902,2379],{"emptyLinePlaceholder":17},[92,68904,68905,68907,68909],{"class":94,"line":1173},[92,68906,1013],{"class":102},[92,68908,51314],{"class":51280},[92,68910,51287],{"class":102},[92,68912,68913,68915,68917,68919,68921,68923],{"class":94,"line":1179},[92,68914,52124],{"class":102},[92,68916,51324],{"class":51280},[92,68918,51327],{"class":1942},[92,68920,148],{"class":102},[92,68922,51332],{"class":207},[92,68924,59107],{"class":102},[92,68926,68927,68929,68931,68933,68935,68937,68939,68941,68943],{"class":94,"line":1193},[92,68928,52124],{"class":102},[92,68930,51324],{"class":51280},[92,68932,14900],{"class":1942},[92,68934,148],{"class":102},[92,68936,51371],{"class":207},[92,68938,51351],{"class":1942},[92,68940,148],{"class":102},[92,68942,51378],{"class":207},[92,68944,59107],{"class":102},[92,68946,68947,68949,68951,68953,68955,68957,68959,68961,68964],{"class":94,"line":1199},[92,68948,52124],{"class":102},[92,68950,51324],{"class":51280},[92,68952,51343],{"class":1942},[92,68954,148],{"class":102},[92,68956,51348],{"class":207},[92,68958,51351],{"class":1942},[92,68960,148],{"class":102},[92,68962,68963],{"class":207},"\"ie=edge\"",[92,68965,59107],{"class":102},[92,68967,68968,68970,68972,68975,68977],{"class":94,"line":1290},[92,68969,52124],{"class":102},[92,68971,51387],{"class":51280},[92,68973,68974],{"class":102},">学生信息管理\u003C\u002F",[92,68976,51387],{"class":51280},[92,68978,51287],{"class":102},[92,68980,68981,68983,68986,68989,68991,68994,68996,68998,69001],{"class":94,"line":1296},[92,68982,52124],{"class":102},[92,68984,68985],{"class":51280},"link",[92,68987,68988],{"class":1942}," rel",[92,68990,148],{"class":102},[92,68992,68993],{"class":207},"\"stylesheet\"",[92,68995,61037],{"class":1942},[92,68997,148],{"class":102},[92,68999,69000],{"class":207},"\"css\u002Findex.css\"",[92,69002,59107],{"class":102},[92,69004,69005,69007,69009],{"class":94,"line":1308},[92,69006,51765],{"class":102},[92,69008,51314],{"class":51280},[92,69010,51287],{"class":102},[92,69012,69013],{"class":94,"line":1591},[92,69014,2379],{"emptyLinePlaceholder":17},[92,69016,69017,69019,69021],{"class":94,"line":1596},[92,69018,1013],{"class":102},[92,69020,51780],{"class":51280},[92,69022,51287],{"class":102},[92,69024,69025,69027,69029,69032,69034],{"class":94,"line":1602},[92,69026,52124],{"class":102},[92,69028,29],{"class":51280},[92,69030,69031],{"class":102},">新增学员\u003C\u002F",[92,69033,29],{"class":51280},[92,69035,51287],{"class":102},[92,69037,69038,69040,69042,69044,69046,69048,69051,69053,69055],{"class":94,"line":1607},[92,69039,52124],{"class":102},[92,69041,66605],{"class":51280},[92,69043,53466],{"class":1942},[92,69045,148],{"class":102},[92,69047,62644],{"class":207},[92,69049,69050],{"class":1942}," autocomplete",[92,69052,148],{"class":102},[92,69054,31757],{"class":207},[92,69056,51287],{"class":102},[92,69058,69059,69062,69064,69066,69068,69070,69072,69074,69077,69079,69081,69083],{"class":94,"line":1621},[92,69060,69061],{"class":102},"    姓名：\u003C",[92,69063,53801],{"class":51280},[92,69065,53804],{"class":1942},[92,69067,148],{"class":102},[92,69069,62679],{"class":207},[92,69071,53466],{"class":1942},[92,69073,148],{"class":102},[92,69075,69076],{"class":207},"\"uname\"",[92,69078,14900],{"class":1942},[92,69080,148],{"class":102},[92,69082,69076],{"class":207},[92,69084,59107],{"class":102},[92,69086,69087,69090,69092,69094,69096,69098,69100,69102,69105,69107,69109,69111],{"class":94,"line":1626},[92,69088,69089],{"class":102},"    年龄：\u003C",[92,69091,53801],{"class":51280},[92,69093,53804],{"class":1942},[92,69095,148],{"class":102},[92,69097,62679],{"class":207},[92,69099,53466],{"class":1942},[92,69101,148],{"class":102},[92,69103,69104],{"class":207},"\"age\"",[92,69106,14900],{"class":1942},[92,69108,148],{"class":102},[92,69110,69104],{"class":207},[92,69112,59107],{"class":102},[92,69114,69115],{"class":94,"line":1632},[92,69116,69117],{"class":102},"    性别:\n",[92,69119,69120,69122,69125,69127,69129,69132,69134,69136,69138],{"class":94,"line":1653},[92,69121,51321],{"class":102},[92,69123,69124],{"class":51280},"select",[92,69126,14900],{"class":1942},[92,69128,148],{"class":102},[92,69130,69131],{"class":207},"\"gender\"",[92,69133,53466],{"class":1942},[92,69135,148],{"class":102},[92,69137,69131],{"class":207},[92,69139,51287],{"class":102},[92,69141,69142,69144,69147,69149,69151,69153,69156,69158],{"class":94,"line":1658},[92,69143,55214],{"class":102},[92,69145,69146],{"class":51280},"option",[92,69148,66631],{"class":1942},[92,69150,148],{"class":102},[92,69152,9941],{"class":207},[92,69154,69155],{"class":102},">男\u003C\u002F",[92,69157,69146],{"class":51280},[92,69159,51287],{"class":102},[92,69161,69162,69164,69166,69168,69170,69172,69175,69177],{"class":94,"line":1672},[92,69163,55214],{"class":102},[92,69165,69146],{"class":51280},[92,69167,66631],{"class":1942},[92,69169,148],{"class":102},[92,69171,10010],{"class":207},[92,69173,69174],{"class":102},">女\u003C\u002F",[92,69176,69146],{"class":51280},[92,69178,51287],{"class":102},[92,69180,69181,69183,69185],{"class":94,"line":1677},[92,69182,51756],{"class":102},[92,69184,69124],{"class":51280},[92,69186,51287],{"class":102},[92,69188,69189,69192,69194,69196,69198,69200,69202,69204,69207,69209,69211,69213],{"class":94,"line":1706},[92,69190,69191],{"class":102},"    薪资：\u003C",[92,69193,53801],{"class":51280},[92,69195,53804],{"class":1942},[92,69197,148],{"class":102},[92,69199,62679],{"class":207},[92,69201,53466],{"class":1942},[92,69203,148],{"class":102},[92,69205,69206],{"class":207},"\"salary\"",[92,69208,14900],{"class":1942},[92,69210,148],{"class":102},[92,69212,69206],{"class":207},[92,69214,59107],{"class":102},[92,69216,69217,69220,69222,69224,69226,69229,69231,69233,69235],{"class":94,"line":1711},[92,69218,69219],{"class":102},"    就业城市：\u003C",[92,69221,69124],{"class":51280},[92,69223,14900],{"class":1942},[92,69225,148],{"class":102},[92,69227,69228],{"class":207},"\"city\"",[92,69230,53466],{"class":1942},[92,69232,148],{"class":102},[92,69234,69228],{"class":207},[92,69236,51287],{"class":102},[92,69238,69239,69241,69243,69245,69247,69250,69253,69255],{"class":94,"line":1728},[92,69240,55214],{"class":102},[92,69242,69146],{"class":51280},[92,69244,66631],{"class":1942},[92,69246,148],{"class":102},[92,69248,69249],{"class":207},"\"北京\"",[92,69251,69252],{"class":102},">北京\u003C\u002F",[92,69254,69146],{"class":51280},[92,69256,51287],{"class":102},[92,69258,69259,69261,69263,69265,69267,69270,69273,69275],{"class":94,"line":1733},[92,69260,55214],{"class":102},[92,69262,69146],{"class":51280},[92,69264,66631],{"class":1942},[92,69266,148],{"class":102},[92,69268,69269],{"class":207},"\"上海\"",[92,69271,69272],{"class":102},">上海\u003C\u002F",[92,69274,69146],{"class":51280},[92,69276,51287],{"class":102},[92,69278,69279,69281,69283,69285,69287,69290,69293,69295],{"class":94,"line":1738},[92,69280,55214],{"class":102},[92,69282,69146],{"class":51280},[92,69284,66631],{"class":1942},[92,69286,148],{"class":102},[92,69288,69289],{"class":207},"\"广州\"",[92,69291,69292],{"class":102},">广州\u003C\u002F",[92,69294,69146],{"class":51280},[92,69296,51287],{"class":102},[92,69298,69299,69301,69303,69305,69307,69310,69313,69315],{"class":94,"line":1743},[92,69300,55214],{"class":102},[92,69302,69146],{"class":51280},[92,69304,66631],{"class":1942},[92,69306,148],{"class":102},[92,69308,69309],{"class":207},"\"深圳\"",[92,69311,69312],{"class":102},">深圳\u003C\u002F",[92,69314,69146],{"class":51280},[92,69316,51287],{"class":102},[92,69318,69319,69321,69323,69325,69327,69330,69333,69335],{"class":94,"line":1757},[92,69320,55214],{"class":102},[92,69322,69146],{"class":51280},[92,69324,66631],{"class":1942},[92,69326,148],{"class":102},[92,69328,69329],{"class":207},"\"曹县\"",[92,69331,69332],{"class":102},">曹县\u003C\u002F",[92,69334,69146],{"class":51280},[92,69336,51287],{"class":102},[92,69338,69339,69341,69343],{"class":94,"line":1762},[92,69340,51756],{"class":102},[92,69342,69124],{"class":51280},[92,69344,51287],{"class":102},[92,69346,69347,69349,69351,69353,69355,69358,69361,69363],{"class":94,"line":2556},[92,69348,51321],{"class":102},[92,69350,53867],{"class":51280},[92,69352,53466],{"class":1942},[92,69354,148],{"class":102},[92,69356,69357],{"class":207},"\"add\"",[92,69359,69360],{"class":102},">录入\u003C\u002F",[92,69362,53867],{"class":51280},[92,69364,51287],{"class":102},[92,69366,69367,69369,69371],{"class":94,"line":2570},[92,69368,52397],{"class":102},[92,69370,66605],{"class":51280},[92,69372,51287],{"class":102},[92,69374,69375],{"class":94,"line":2578},[92,69376,2379],{"emptyLinePlaceholder":17},[92,69378,69379,69381,69383,69386,69388],{"class":94,"line":2583},[92,69380,52124],{"class":102},[92,69382,29],{"class":51280},[92,69384,69385],{"class":102},">就业榜\u003C\u002F",[92,69387,29],{"class":51280},[92,69389,51287],{"class":102},[92,69391,69392,69394,69396],{"class":94,"line":2589},[92,69393,52124],{"class":102},[92,69395,240],{"class":51280},[92,69397,51287],{"class":102},[92,69399,69400,69402,69404],{"class":94,"line":2595},[92,69401,51321],{"class":102},[92,69403,243],{"class":51280},[92,69405,51287],{"class":102},[92,69407,69408,69410,69412],{"class":94,"line":2600},[92,69409,55214],{"class":102},[92,69411,246],{"class":51280},[92,69413,51287],{"class":102},[92,69415,69416,69418,69420,69423,69425],{"class":94,"line":7928},[92,69417,55282],{"class":102},[92,69419,249],{"class":51280},[92,69421,69422],{"class":102},">序号\u003C\u002F",[92,69424,249],{"class":51280},[92,69426,51287],{"class":102},[92,69428,69429,69431,69433,69436,69438],{"class":94,"line":7952},[92,69430,55282],{"class":102},[92,69432,249],{"class":51280},[92,69434,69435],{"class":102},">姓名\u003C\u002F",[92,69437,249],{"class":51280},[92,69439,51287],{"class":102},[92,69441,69442,69444,69446,69449,69451],{"class":94,"line":7957},[92,69443,55282],{"class":102},[92,69445,249],{"class":51280},[92,69447,69448],{"class":102},">年龄\u003C\u002F",[92,69450,249],{"class":51280},[92,69452,51287],{"class":102},[92,69454,69455,69457,69459,69462,69464],{"class":94,"line":7963},[92,69456,55282],{"class":102},[92,69458,249],{"class":51280},[92,69460,69461],{"class":102},">性别\u003C\u002F",[92,69463,249],{"class":51280},[92,69465,51287],{"class":102},[92,69467,69468,69470,69472,69475,69477],{"class":94,"line":7990},[92,69469,55282],{"class":102},[92,69471,249],{"class":51280},[92,69473,69474],{"class":102},">薪资\u003C\u002F",[92,69476,249],{"class":51280},[92,69478,51287],{"class":102},[92,69480,69481,69483,69485,69488,69490],{"class":94,"line":7995},[92,69482,55282],{"class":102},[92,69484,249],{"class":51280},[92,69486,69487],{"class":102},">就业城市\u003C\u002F",[92,69489,249],{"class":51280},[92,69491,51287],{"class":102},[92,69493,69494,69496,69498,69501,69503],{"class":94,"line":8001},[92,69495,55282],{"class":102},[92,69497,249],{"class":51280},[92,69499,69500],{"class":102},">操作\u003C\u002F",[92,69502,249],{"class":51280},[92,69504,51287],{"class":102},[92,69506,69507,69509,69511],{"class":94,"line":8013},[92,69508,55387],{"class":102},[92,69510,246],{"class":51280},[92,69512,51287],{"class":102},[92,69514,69515,69517,69519],{"class":94,"line":8025},[92,69516,51756],{"class":102},[92,69518,243],{"class":51280},[92,69520,51287],{"class":102},[92,69522,69523,69525,69527],{"class":94,"line":8037},[92,69524,51321],{"class":102},[92,69526,287],{"class":51280},[92,69528,51287],{"class":102},[92,69530,69531],{"class":94,"line":9696},[92,69532,69533],{"class":161},"      \u003C!-- \n",[92,69535,69536],{"class":94,"line":9721},[92,69537,69538],{"class":161},"        \u003Ctr>\n",[92,69540,69541],{"class":94,"line":9744},[92,69542,69543],{"class":161},"          \u003Ctd>1001\u003C\u002Ftd>\n",[92,69545,69546],{"class":94,"line":9768},[92,69547,69548],{"class":161},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[92,69550,69551],{"class":94,"line":9773},[92,69552,69553],{"class":161},"          \u003Ctd>19\u003C\u002Ftd>\n",[92,69555,69556],{"class":94,"line":9778},[92,69557,69558],{"class":161},"          \u003Ctd>男\u003C\u002Ftd>\n",[92,69560,69561],{"class":94,"line":9783},[92,69562,69563],{"class":161},"          \u003Ctd>15000\u003C\u002Ftd>\n",[92,69565,69566],{"class":94,"line":9792},[92,69567,69568],{"class":161},"          \u003Ctd>上海\u003C\u002Ftd>\n",[92,69570,69571],{"class":94,"line":9797},[92,69572,69573],{"class":161},"          \u003Ctd>\n",[92,69575,69576],{"class":94,"line":9803},[92,69577,69578],{"class":161},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[92,69580,69581],{"class":94,"line":9824},[92,69582,69583],{"class":161},"          \u003C\u002Ftd>\n",[92,69585,69586],{"class":94,"line":9830},[92,69587,69588],{"class":161},"        \u003C\u002Ftr> \n",[92,69590,69591],{"class":94,"line":9844},[92,69592,69593],{"class":161},"        -->\n",[92,69595,69596,69598,69600],{"class":94,"line":9850},[92,69597,51756],{"class":102},[92,69599,287],{"class":51280},[92,69601,51287],{"class":102},[92,69603,69604,69606,69608],{"class":94,"line":9877},[92,69605,52397],{"class":102},[92,69607,240],{"class":51280},[92,69609,51287],{"class":102},[92,69611,69612,69614,69616],{"class":94,"line":9886},[92,69613,52124],{"class":102},[92,69615,51793],{"class":51280},[92,69617,51287],{"class":102},[92,69619,69620],{"class":94,"line":9892},[92,69621,59938],{"class":161},[92,69623,69624,69626,69629,69631,69633,69635,69637,69640],{"class":94,"line":9900},[92,69625,11201],{"class":98},[92,69627,69628],{"class":151}," uname",[92,69630,13544],{"class":98},[92,69632,54376],{"class":102},[92,69634,54379],{"class":1942},[92,69636,103],{"class":102},[92,69638,69639],{"class":207},"'.uname'",[92,69641,109],{"class":102},[92,69643,69644,69646,69648,69650,69652,69654,69656,69659],{"class":94,"line":9905},[92,69645,11201],{"class":98},[92,69647,15669],{"class":151},[92,69649,13544],{"class":98},[92,69651,54376],{"class":102},[92,69653,54379],{"class":1942},[92,69655,103],{"class":102},[92,69657,69658],{"class":207},"'.age'",[92,69660,109],{"class":102},[92,69662,69663,69665,69668,69670,69672,69674,69676,69679],{"class":94,"line":16584},[92,69664,11201],{"class":98},[92,69666,69667],{"class":151}," gender",[92,69669,13544],{"class":98},[92,69671,54376],{"class":102},[92,69673,54379],{"class":1942},[92,69675,103],{"class":102},[92,69677,69678],{"class":207},"'.gender'",[92,69680,109],{"class":102},[92,69682,69683,69685,69688,69690,69692,69694,69696,69699],{"class":94,"line":16590},[92,69684,11201],{"class":98},[92,69686,69687],{"class":151}," salary",[92,69689,13544],{"class":98},[92,69691,54376],{"class":102},[92,69693,54379],{"class":1942},[92,69695,103],{"class":102},[92,69697,69698],{"class":207},"'.salary'",[92,69700,109],{"class":102},[92,69702,69703,69705,69708,69710,69712,69714,69716,69719],{"class":94,"line":16613},[92,69704,11201],{"class":98},[92,69706,69707],{"class":151}," city",[92,69709,13544],{"class":98},[92,69711,54376],{"class":102},[92,69713,54379],{"class":1942},[92,69715,103],{"class":102},[92,69717,69718],{"class":207},"'.city'",[92,69720,109],{"class":102},[92,69722,69723,69725,69728,69730,69732,69734,69736,69739],{"class":94,"line":16619},[92,69724,11201],{"class":98},[92,69726,69727],{"class":151}," tbody",[92,69729,13544],{"class":98},[92,69731,54376],{"class":102},[92,69733,54379],{"class":1942},[92,69735,103],{"class":102},[92,69737,69738],{"class":207},"'tbody'",[92,69740,109],{"class":102},[92,69742,69743],{"class":94,"line":16642},[92,69744,2379],{"emptyLinePlaceholder":17},[92,69746,69747],{"class":94,"line":16656},[92,69748,69749],{"class":161},"    \u002F\u002F 获取所有带有name属性的元素\n",[92,69751,69752,69754,69757,69759,69761,69763,69765,69768],{"class":94,"line":16676},[92,69753,11201],{"class":98},[92,69755,69756],{"class":151}," items",[92,69758,13544],{"class":98},[92,69760,54376],{"class":102},[92,69762,55661],{"class":1942},[92,69764,103],{"class":102},[92,69766,69767],{"class":207},"'[name]'",[92,69769,109],{"class":102},[92,69771,69772],{"class":94,"line":16682},[92,69773,69774],{"class":161},"    \u002F\u002F 声明一个空的数组\n",[92,69776,69777,69779,69781,69783],{"class":94,"line":16693},[92,69778,11201],{"class":98},[92,69780,57675],{"class":151},[92,69782,13544],{"class":98},[92,69784,51818],{"class":102},[92,69786,69787],{"class":94,"line":16716},[92,69788,69789],{"class":161},"    \u002F\u002F 1.录入模块\n",[92,69791,69792],{"class":94,"line":16738},[92,69793,69794],{"class":161},"    \u002F\u002F 1.1这是一个表单提交事件\n",[92,69796,69797,69799,69802,69804,69806,69808,69810,69813],{"class":94,"line":16743},[92,69798,11201],{"class":98},[92,69800,69801],{"class":151}," info",[92,69803,13544],{"class":98},[92,69805,54376],{"class":102},[92,69807,54379],{"class":1942},[92,69809,103],{"class":102},[92,69811,69812],{"class":207},"'.info'",[92,69814,109],{"class":102},[92,69816,69817,69820,69822,69824,69827,69829,69831,69833,69835],{"class":94,"line":16749},[92,69818,69819],{"class":102},"    info.",[92,69821,57793],{"class":1942},[92,69823,103],{"class":102},[92,69825,69826],{"class":207},"'submit'",[92,69828,12415],{"class":102},[92,69830,54429],{"class":98},[92,69832,1637],{"class":102},[92,69834,177],{"class":5196},[92,69836,12422],{"class":102},[92,69838,69839],{"class":94,"line":16763},[92,69840,69841],{"class":161},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[92,69843,69844,69847,69850],{"class":94,"line":16776},[92,69845,69846],{"class":102},"      e.",[92,69848,69849],{"class":1942},"preventDefault",[92,69851,1955],{"class":102},[92,69853,69854],{"class":94,"line":16781},[92,69855,59992],{"class":161},[92,69857,69858],{"class":94,"line":16795},[92,69859,2379],{"emptyLinePlaceholder":17},[92,69861,69862],{"class":94,"line":16800},[92,69863,69864],{"class":161},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[92,69866,69867],{"class":94,"line":16806},[92,69868,69869],{"class":161},"      \u002F\u002F 先遍历循环\n",[92,69871,69872,69874,69876,69878,69880,69882,69884,69886,69888,69891,69893,69895,69897],{"class":94,"line":16811},[92,69873,52264],{"class":98},[92,69875,1637],{"class":102},[92,69877,51827],{"class":98},[92,69879,9418],{"class":102},[92,69881,148],{"class":98},[92,69883,4072],{"class":151},[92,69885,9425],{"class":102},[92,69887,1013],{"class":98},[92,69889,69890],{"class":102}," items.",[92,69892,51948],{"class":151},[92,69894,3193],{"class":102},[92,69896,2271],{"class":98},[92,69898,12422],{"class":102},[92,69900,69901,69903,69906,69908,69911],{"class":94,"line":16825},[92,69902,2476],{"class":98},[92,69904,69905],{"class":102}," (items[i].value ",[92,69907,54466],{"class":98},[92,69909,69910],{"class":207}," ''",[92,69912,12422],{"class":102},[92,69914,69915,69918,69921,69923,69926],{"class":94,"line":16830},[92,69916,69917],{"class":98},"          return",[92,69919,69920],{"class":1942}," alert",[92,69922,103],{"class":102},[92,69924,69925],{"class":207},"'输入内容不能为空'",[92,69927,109],{"class":102},[92,69929,69930],{"class":94,"line":16835},[92,69931,2508],{"class":102},[92,69933,69934],{"class":94,"line":16849},[92,69935,52378],{"class":102},[92,69937,69938],{"class":94,"line":16861},[92,69939,2379],{"emptyLinePlaceholder":17},[92,69941,69942],{"class":94,"line":16866},[92,69943,69944],{"class":161},"      \u002F\u002F 创建新的对象\n",[92,69946,69947,69949,69952,69954],{"class":94,"line":16879},[92,69948,58208],{"class":98},[92,69950,69951],{"class":151}," obj",[92,69953,13544],{"class":98},[92,69955,15552],{"class":102},[92,69957,69958,69961,69963,69965,69967],{"class":94,"line":16884},[92,69959,69960],{"class":102},"        stuID: arr.",[92,69962,51948],{"class":151},[92,69964,45547],{"class":98},[92,69966,25099],{"class":151},[92,69968,31447],{"class":102},[92,69970,69971],{"class":94,"line":16889},[92,69972,69973],{"class":102},"        uname: uname.value,\n",[92,69975,69976],{"class":94,"line":16894},[92,69977,69978],{"class":102},"        age: age.value,\n",[92,69980,69981],{"class":94,"line":16907},[92,69982,69983],{"class":102},"        gender: gender.value,\n",[92,69985,69986],{"class":94,"line":16912},[92,69987,69988],{"class":102},"        salary: salary.value,\n",[92,69990,69991],{"class":94,"line":32614},[92,69992,69993],{"class":102},"        city: city.value\n",[92,69995,69996],{"class":94,"line":32620},[92,69997,52378],{"class":102},[92,69999,70000],{"class":94,"line":32626},[92,70001,70002],{"class":161},"      \u002F\u002F console.log(obj);\n",[92,70004,70005],{"class":94,"line":32632},[92,70006,70007],{"class":161},"      \u002F\u002F 追加到数组里面\n",[92,70009,70010,70012,70014],{"class":94,"line":32638},[92,70011,57987],{"class":102},[92,70013,51864],{"class":1942},[92,70015,70016],{"class":102},"(obj)\n",[92,70018,70019],{"class":94,"line":32649},[92,70020,70021],{"class":161},"      \u002F\u002F console.log(arr);\n",[92,70023,70024],{"class":94,"line":32655},[92,70025,70026],{"class":161},"      \u002F\u002F 清空表单  reset重置表单\n",[92,70028,70029,70032,70034,70037],{"class":94,"line":32675},[92,70030,70031],{"class":151},"      this",[92,70033,661],{"class":102},[92,70035,70036],{"class":1942},"reset",[92,70038,1955],{"class":102},[92,70040,70041],{"class":94,"line":32681},[92,70042,70043],{"class":161},"      \u002F\u002F 调用渲染函数\n",[92,70045,70046,70049],{"class":94,"line":32692},[92,70047,70048],{"class":1942},"      render",[92,70050,1955],{"class":102},[92,70052,70053],{"class":94,"line":32698},[92,70054,33442],{"class":102},[92,70056,70057],{"class":94,"line":32704},[92,70058,70059],{"class":161},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[92,70061,70062,70065,70068],{"class":94,"line":32710},[92,70063,70064],{"class":98},"    function",[92,70066,70067],{"class":1942}," render",[92,70069,10833],{"class":102},[92,70071,70072],{"class":94,"line":32716},[92,70073,70074],{"class":161},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[92,70076,70077,70080,70082],{"class":94,"line":32722},[92,70078,70079],{"class":102},"      tbody.innerHTML ",[92,70081,148],{"class":98},[92,70083,70084],{"class":207}," ''\n",[92,70086,70087],{"class":94,"line":32728},[92,70088,70089],{"class":161},"      \u002F\u002F 遍历数组\n",[92,70091,70092,70094,70096,70098,70100,70102,70104,70106,70108,70110,70112,70114,70116],{"class":94,"line":32734},[92,70093,52264],{"class":98},[92,70095,1637],{"class":102},[92,70097,51827],{"class":98},[92,70099,9418],{"class":102},[92,70101,148],{"class":98},[92,70103,4072],{"class":151},[92,70105,9425],{"class":102},[92,70107,1013],{"class":98},[92,70109,51945],{"class":102},[92,70111,51948],{"class":151},[92,70113,3193],{"class":102},[92,70115,2271],{"class":98},[92,70117,12422],{"class":102},[92,70119,70120,70122,70125,70127,70129,70132,70134,70137],{"class":94,"line":32754},[92,70121,61250],{"class":98},[92,70123,70124],{"class":151}," tr",[92,70126,13544],{"class":98},[92,70128,54376],{"class":102},[92,70130,70131],{"class":1942},"createElement",[92,70133,103],{"class":102},[92,70135,70136],{"class":207},"'tr'",[92,70138,109],{"class":102},[92,70140,70141,70144,70146],{"class":94,"line":32760},[92,70142,70143],{"class":102},"        tr.innerHTML ",[92,70145,148],{"class":98},[92,70147,70148],{"class":207}," `\n",[92,70150,70151,70154,70156,70158,70160,70163,70166],{"class":94,"line":32776},[92,70152,70153],{"class":207},"        \u003Ctd>${",[92,70155,3859],{"class":102},[92,70157,993],{"class":207},[92,70159,544],{"class":102},[92,70161,70162],{"class":207},"].",[92,70164,70165],{"class":102},"stuID",[92,70167,70168],{"class":207},"}\u003C\u002Ftd>\n",[92,70170,70171,70174,70176,70178,70180,70182,70185],{"class":94,"line":32782},[92,70172,70173],{"class":207},"          \u003Ctd>${",[92,70175,3859],{"class":102},[92,70177,993],{"class":207},[92,70179,544],{"class":102},[92,70181,70162],{"class":207},[92,70183,70184],{"class":102},"uname",[92,70186,70168],{"class":207},[92,70188,70189,70191,70193,70195,70197,70199,70202],{"class":94,"line":32796},[92,70190,70173],{"class":207},[92,70192,3859],{"class":102},[92,70194,993],{"class":207},[92,70196,544],{"class":102},[92,70198,70162],{"class":207},[92,70200,70201],{"class":102},"age",[92,70203,70168],{"class":207},[92,70205,70206,70208,70210,70212,70214,70216,70219],{"class":94,"line":32802},[92,70207,70173],{"class":207},[92,70209,3859],{"class":102},[92,70211,993],{"class":207},[92,70213,544],{"class":102},[92,70215,70162],{"class":207},[92,70217,70218],{"class":102},"gender",[92,70220,70168],{"class":207},[92,70222,70223,70225,70227,70229,70231,70233,70236],{"class":94,"line":32817},[92,70224,70173],{"class":207},[92,70226,3859],{"class":102},[92,70228,993],{"class":207},[92,70230,544],{"class":102},[92,70232,70162],{"class":207},[92,70234,70235],{"class":102},"salary",[92,70237,70168],{"class":207},[92,70239,70240,70242,70244,70246,70248,70250,70253],{"class":94,"line":32823},[92,70241,70173],{"class":207},[92,70243,3859],{"class":102},[92,70245,993],{"class":207},[92,70247,544],{"class":102},[92,70249,70162],{"class":207},[92,70251,70252],{"class":102},"city",[92,70254,70168],{"class":207},[92,70256,70257],{"class":94,"line":32832},[92,70258,69573],{"class":207},[92,70260,70261,70264,70266],{"class":94,"line":32838},[92,70262,70263],{"class":207},"            \u003Ca href=\"javascript:\" data-id=${",[92,70265,544],{"class":102},[92,70267,70268],{"class":207},"}>删除\u003C\u002Fa>\n",[92,70270,70271],{"class":94,"line":32847},[92,70272,70273],{"class":207},"          \u003C\u002Ftd> \n",[92,70275,70276],{"class":94,"line":32853},[92,70277,70278],{"class":207},"          `\n",[92,70280,70281],{"class":94,"line":32859},[92,70282,70283],{"class":161},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[92,70285,70286,70289,70292],{"class":94,"line":32868},[92,70287,70288],{"class":102},"        tbody.",[92,70290,70291],{"class":1942},"appendChild",[92,70293,70294],{"class":102},"(tr)\n",[92,70296,70297],{"class":94,"line":32874},[92,70298,52378],{"class":102},[92,70300,70301],{"class":94,"line":32885},[92,70302,2166],{"class":102},[92,70304,70305],{"class":94,"line":32891},[92,70306,2379],{"emptyLinePlaceholder":17},[92,70308,70309],{"class":94,"line":32910},[92,70310,70311],{"class":161},"    \u002F\u002F 3.删除委托\n",[92,70313,70314],{"class":94,"line":32916},[92,70315,70316],{"class":161},"    \u002F\u002F 3.1 事件委托 tbody\n",[92,70318,70319,70322,70324,70326,70328,70330,70332,70334,70336],{"class":94,"line":32927},[92,70320,70321],{"class":102},"    tbody.",[92,70323,57793],{"class":1942},[92,70325,103],{"class":102},[92,70327,57798],{"class":207},[92,70329,12415],{"class":102},[92,70331,54429],{"class":98},[92,70333,1637],{"class":102},[92,70335,177],{"class":5196},[92,70337,12422],{"class":102},[92,70339,70340,70342,70344,70346,70348],{"class":94,"line":32933},[92,70341,54460],{"class":98},[92,70343,67014],{"class":102},[92,70345,54466],{"class":98},[92,70347,68236],{"class":207},[92,70349,12422],{"class":102},[92,70351,70352],{"class":94,"line":32953},[92,70353,70354],{"class":161},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[92,70356,70357],{"class":94,"line":32969},[92,70358,70359],{"class":161},"        \u002F\u002F console.log(e.target.dataset.id);\n",[92,70361,70362],{"class":94,"line":32975},[92,70363,70364],{"class":161},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[92,70366,70367,70370,70372,70375,70377],{"class":94,"line":32989},[92,70368,70369],{"class":102},"        arr.",[92,70371,57990],{"class":1942},[92,70373,70374],{"class":102},"(e.target.dataset.id, ",[92,70376,320],{"class":151},[92,70378,109],{"class":102},[92,70380,70381],{"class":94,"line":32995},[92,70382,70383],{"class":161},"        \u002F\u002F 重新渲染一次\n",[92,70385,70386,70389],{"class":94,"line":33001},[92,70387,70388],{"class":1942},"        render",[92,70390,1955],{"class":102},[92,70392,70393],{"class":94,"line":33012},[92,70394,52378],{"class":102},[92,70396,70397],{"class":94,"line":33018},[92,70398,33442],{"class":102},[92,70400,70401,70403,70405],{"class":94,"line":33024},[92,70402,52397],{"class":102},[92,70404,51793],{"class":51280},[92,70406,51287],{"class":102},[92,70408,70409],{"class":94,"line":33034},[92,70410,2379],{"emptyLinePlaceholder":17},[92,70412,70413,70415,70417],{"class":94,"line":33040},[92,70414,51765],{"class":102},[92,70416,51780],{"class":51280},[92,70418,51287],{"class":102},[92,70420,70421],{"class":94,"line":33051},[92,70422,2379],{"emptyLinePlaceholder":17},[92,70424,70425,70427,70429],{"class":94,"line":33057},[92,70426,51765],{"class":102},[92,70428,50615],{"class":51280},[92,70430,51287],{"class":102},[38,70432,70433],{},"样式：",[83,70435,70439],{"className":70436,"code":70437,"language":70438,"meta":10,"style":10},"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",[89,70440,70441,70446,70456,70465,70469,70473,70478,70488,70493,70497,70502,70512,70517,70526,70530,70534,70539,70544,70554,70564,70569,70573,70578,70587,70597,70602,70612,70622,70626,70631,70639,70643,70648,70653,70658,70666,70675,70679,70684,70693,70697,70702,70711,70715,70720,70729,70738,70746,70750,70755,70764,70774,70783,70793,70799,70808,70818,70828,70832,70837,70846,70854,70864,70872,70881,70890,70900,70908,70912,70917,70926],{"__ignoreMap":10},[92,70442,70443],{"class":94,"line":95},[92,70444,70445],{"class":102},"* {\n",[92,70447,70448,70451,70453],{"class":94,"line":11},[92,70449,70450],{"class":51280},"  margin",[92,70452,51417],{"class":102},[92,70454,70455],{"class":207},"0;\n",[92,70457,70458,70461,70463],{"class":94,"line":1158},[92,70459,70460],{"class":207},"  padding",[92,70462,51417],{"class":102},[92,70464,70455],{"class":207},[92,70466,70467],{"class":94,"line":1173},[92,70468,1544],{"class":102},[92,70470,70471],{"class":94,"line":1179},[92,70472,2379],{"emptyLinePlaceholder":17},[92,70474,70475],{"class":94,"line":1193},[92,70476,70477],{"class":207},"a {\n",[92,70479,70480,70483,70485],{"class":94,"line":1199},[92,70481,70482],{"class":51280},"  text-decoration",[92,70484,51417],{"class":102},[92,70486,70487],{"class":207},"none;\n",[92,70489,70490],{"class":94,"line":1290},[92,70491,70492],{"class":207},"  color:#721c24;\n",[92,70494,70495],{"class":94,"line":1296},[92,70496,1544],{"class":102},[92,70498,70499],{"class":94,"line":1308},[92,70500,70501],{"class":207},"h1 {\n",[92,70503,70504,70507,70509],{"class":94,"line":1591},[92,70505,70506],{"class":51280},"  text-align",[92,70508,51417],{"class":102},[92,70510,70511],{"class":207},"center;\n",[92,70513,70514],{"class":94,"line":1596},[92,70515,70516],{"class":207},"  color:#333;\n",[92,70518,70519,70521,70523],{"class":94,"line":1602},[92,70520,70450],{"class":51280},[92,70522,51417],{"class":102},[92,70524,70525],{"class":207},"20px 0;\n",[92,70527,70528],{"class":94,"line":1607},[92,70529,2653],{"class":102},[92,70531,70532],{"class":94,"line":1621},[92,70533,1544],{"class":102},[92,70535,70536],{"class":94,"line":1626},[92,70537,70538],{"class":207},"table {\n",[92,70540,70541],{"class":94,"line":1632},[92,70542,70543],{"class":207},"  margin:0 auto;\n",[92,70545,70546,70549,70551],{"class":94,"line":1653},[92,70547,70548],{"class":51280},"  width",[92,70550,51417],{"class":102},[92,70552,70553],{"class":207},"800px;\n",[92,70555,70556,70559,70561],{"class":94,"line":1658},[92,70557,70558],{"class":51280},"  border-collapse",[92,70560,51417],{"class":102},[92,70562,70563],{"class":207},"collapse;\n",[92,70565,70566],{"class":94,"line":1672},[92,70567,70568],{"class":207},"  color:#004085;\n",[92,70570,70571],{"class":94,"line":1677},[92,70572,1544],{"class":102},[92,70574,70575],{"class":94,"line":1706},[92,70576,70577],{"class":207},"th {\n",[92,70579,70580,70582,70584],{"class":94,"line":1711},[92,70581,70460],{"class":51280},[92,70583,51417],{"class":102},[92,70585,70586],{"class":207},"10px;\n",[92,70588,70589,70592,70594],{"class":94,"line":1728},[92,70590,70591],{"class":51280},"  background",[92,70593,51417],{"class":102},[92,70595,70596],{"class":161},"#cfe5ff;\n",[92,70598,70599],{"class":94,"line":1733},[92,70600,70601],{"class":102},"  \n",[92,70603,70604,70607,70609],{"class":94,"line":1738},[92,70605,70606],{"class":51280},"  font-size",[92,70608,51417],{"class":102},[92,70610,70611],{"class":207},"20px;\n",[92,70613,70614,70617,70619],{"class":94,"line":1743},[92,70615,70616],{"class":51280},"  font-weight",[92,70618,51417],{"class":102},[92,70620,70621],{"class":207},"400;\n",[92,70623,70624],{"class":94,"line":1757},[92,70625,1544],{"class":102},[92,70627,70628],{"class":94,"line":1762},[92,70629,70630],{"class":207},"td,th {\n",[92,70632,70633,70636],{"class":94,"line":2556},[92,70634,70635],{"class":207},"  border:1px solid",[92,70637,70638],{"class":161}," #b8daff;\n",[92,70640,70641],{"class":94,"line":2570},[92,70642,1544],{"class":102},[92,70644,70645],{"class":94,"line":2578},[92,70646,70647],{"class":207},"td {\n",[92,70649,70650],{"class":94,"line":2583},[92,70651,70652],{"class":207},"  padding:10px;\n",[92,70654,70655],{"class":94,"line":2589},[92,70656,70657],{"class":207},"  color:#666;\n",[92,70659,70660,70662,70664],{"class":94,"line":2595},[92,70661,70506],{"class":51280},[92,70663,51417],{"class":102},[92,70665,70511],{"class":207},[92,70667,70668,70670,70672],{"class":94,"line":2600},[92,70669,70606],{"class":51280},[92,70671,51417],{"class":102},[92,70673,70674],{"class":207},"16px;\n",[92,70676,70677],{"class":94,"line":7928},[92,70678,1544],{"class":102},[92,70680,70681],{"class":94,"line":7952},[92,70682,70683],{"class":207},"tbody tr {\n",[92,70685,70686,70688,70690],{"class":94,"line":7957},[92,70687,70591],{"class":51280},[92,70689,51417],{"class":102},[92,70691,70692],{"class":161},"#fff;\n",[92,70694,70695],{"class":94,"line":7963},[92,70696,1544],{"class":102},[92,70698,70699],{"class":94,"line":7990},[92,70700,70701],{"class":207},"tbody tr:hover {\n",[92,70703,70704,70706,70708],{"class":94,"line":7995},[92,70705,70591],{"class":51280},[92,70707,51417],{"class":102},[92,70709,70710],{"class":161},"#e1ecf8;\n",[92,70712,70713],{"class":94,"line":8001},[92,70714,1544],{"class":102},[92,70716,70717],{"class":94,"line":8013},[92,70718,70719],{"class":207},".info {\n",[92,70721,70722,70724,70726],{"class":94,"line":8025},[92,70723,70548],{"class":51280},[92,70725,51417],{"class":102},[92,70727,70728],{"class":207},"900px;\n",[92,70730,70731,70733,70735],{"class":94,"line":8037},[92,70732,70450],{"class":51280},[92,70734,51417],{"class":102},[92,70736,70737],{"class":207},"50px auto;\n",[92,70739,70740,70742,70744],{"class":94,"line":9696},[92,70741,70506],{"class":51280},[92,70743,51417],{"class":102},[92,70745,70511],{"class":207},[92,70747,70748],{"class":94,"line":9721},[92,70749,1544],{"class":102},[92,70751,70752],{"class":94,"line":9744},[92,70753,70754],{"class":207},".info  input, .info select {\n",[92,70756,70757,70759,70761],{"class":94,"line":9768},[92,70758,70548],{"class":51280},[92,70760,51417],{"class":102},[92,70762,70763],{"class":207},"80px;\n",[92,70765,70766,70769,70771],{"class":94,"line":9773},[92,70767,70768],{"class":51280},"  height",[92,70770,51417],{"class":102},[92,70772,70773],{"class":207},"27px;\n",[92,70775,70776,70779,70781],{"class":94,"line":9778},[92,70777,70778],{"class":51280},"  outline",[92,70780,51417],{"class":102},[92,70782,70487],{"class":207},[92,70784,70785,70788,70790],{"class":94,"line":9783},[92,70786,70787],{"class":51280},"  border-radius",[92,70789,51417],{"class":102},[92,70791,70792],{"class":207},"5px;\n",[92,70794,70795,70797],{"class":94,"line":9792},[92,70796,70635],{"class":207},[92,70798,70638],{"class":161},[92,70800,70801,70804,70806],{"class":94,"line":9797},[92,70802,70803],{"class":51280},"  padding-left",[92,70805,51417],{"class":102},[92,70807,70792],{"class":207},[92,70809,70810,70813,70815],{"class":94,"line":9803},[92,70811,70812],{"class":51280},"  box-sizing",[92,70814,51417],{"class":102},[92,70816,70817],{"class":207},"border-box;\n",[92,70819,70820,70823,70825],{"class":94,"line":9824},[92,70821,70822],{"class":51280},"  margin-right",[92,70824,51417],{"class":102},[92,70826,70827],{"class":207},"15px;\n",[92,70829,70830],{"class":94,"line":9830},[92,70831,1544],{"class":102},[92,70833,70834],{"class":94,"line":9844},[92,70835,70836],{"class":207},".info button {\n",[92,70838,70839,70841,70843],{"class":94,"line":9850},[92,70840,70548],{"class":51280},[92,70842,51417],{"class":102},[92,70844,70845],{"class":207},"60px;\n",[92,70847,70848,70850,70852],{"class":94,"line":9877},[92,70849,70768],{"class":51280},[92,70851,51417],{"class":102},[92,70853,70773],{"class":207},[92,70855,70856,70859,70861],{"class":94,"line":9886},[92,70857,70858],{"class":51280},"  background-color",[92,70860,51417],{"class":102},[92,70862,70863],{"class":161},"#004085;\n",[92,70865,70866,70868,70870],{"class":94,"line":9892},[92,70867,70778],{"class":51280},[92,70869,51417],{"class":102},[92,70871,70487],{"class":207},[92,70873,70874,70877,70879],{"class":94,"line":9900},[92,70875,70876],{"class":51280},"  border",[92,70878,51417],{"class":102},[92,70880,70455],{"class":207},[92,70882,70883,70886,70888],{"class":94,"line":9905},[92,70884,70885],{"class":51280},"  color",[92,70887,51417],{"class":102},[92,70889,70692],{"class":161},[92,70891,70892,70895,70897],{"class":94,"line":16584},[92,70893,70894],{"class":51280},"  cursor",[92,70896,51417],{"class":102},[92,70898,70899],{"class":207},"pointer;\n",[92,70901,70902,70904,70906],{"class":94,"line":16590},[92,70903,70787],{"class":51280},[92,70905,51417],{"class":102},[92,70907,70792],{"class":207},[92,70909,70910],{"class":94,"line":16613},[92,70911,1544],{"class":102},[92,70913,70914],{"class":94,"line":16619},[92,70915,70916],{"class":207},".info .age {\n",[92,70918,70919,70921,70923],{"class":94,"line":16642},[92,70920,70548],{"class":51280},[92,70922,51417],{"class":102},[92,70924,70925],{"class":207},"50px;\n",[92,70927,70928],{"class":94,"line":16656},[92,70929,1544],{"class":102},[38,70931,70932],{},"思路：",[38,70934,70935],{},[1441,70936],{"alt":10,"src":70937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[38,70939,70940],{},[1441,70941],{"alt":10,"src":70942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[38,70944,70945],{},[1441,70946],{"alt":10,"src":70947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[63,70949,70951],{"id":70950},"_3315-重绘回流","3.3.15 重绘回流",[38,70953,70954],{},[1441,70955],{"alt":10,"src":70956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[38,70958,70959],{},[1441,70960],{"alt":10,"src":70961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[38,70963,70964],{},[1441,70965],{"alt":10,"src":70966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[33,70968,70970],{"id":70969},"_34-bom","3.4 BOM",[38,70972,70973],{},[1441,70974],{"alt":10,"src":70975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[38,70977,70978],{},"平时写的document省略了window而已，实际上是window.document",[38,70980,70981],{},"函数也是这样，调用的时候实际为window.fn()",[38,70983,70984],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[38,70986,70987],{},"window大部分情况下可以省略",[63,70989,70991],{"id":70990},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[38,70993,70994],{},"只执行一次",[38,70996,70997],{},[1441,70998],{"alt":10,"src":70999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[38,71001,71002],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[38,71004,71005],{},[1441,71006],{"alt":10,"src":71007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[63,71009,71011],{"id":71010},"_342-js执行机制","3.4.2 JS执行机制",[38,71013,71014],{},[1441,71015],{"alt":10,"src":71016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[38,71018,71019],{},"两个的结果都是1111 3333 2222",[38,71021,71022],{},[1441,71023],{"alt":10,"src":71024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[38,71026,71027],{},[1441,71028],{"alt":10,"src":71029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[38,71031,71032],{},[1441,71033],{"alt":10,"src":71034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[38,71036,71037],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[38,71039,71040],{},"工作流程：",[38,71042,71043],{},[1441,71044],{"alt":10,"src":71045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[38,71047,71048],{},[1441,71049],{"alt":10,"src":71050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[38,71052,71053],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[38,71055,71056],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[63,71058,71060],{"id":71059},"_343-location对象","3.4.3 location对象",[38,71062,71063],{},"location对象属于window这个全局对象下的，可以 省略window",[38,71065,71066],{},[1441,71067],{"alt":10,"src":71068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[38,71070,71071],{},"href可以跳转页面",[46,71073,71074],{},[49,71075,71076],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[38,71078,71079],{},"search得到提交信息之后网站后边的地址",[38,71081,71082],{},[1441,71083],{"alt":10,"src":71084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[38,71086,71087],{},[1441,71088],{"alt":10,"src":71089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[46,71091,71092],{"start":11},[49,71093,71094],{},"hash:这个获取单页面应用#后边的地址",[38,71096,71097],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[38,71099,71100],{},[1441,71101],{"alt":10,"src":71102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[83,71104,71106],{"className":53047,"code":71105,"language":53049,"meta":10,"style":10},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[89,71107,71108,71128,71148],{"__ignoreMap":10},[92,71109,71110,71112,71114,71116,71118,71121,71124,71126],{"class":94,"line":95},[92,71111,52124],{"class":102},[92,71113,341],{"class":51280},[92,71115,61037],{"class":1942},[92,71117,148],{"class":102},[92,71119,71120],{"class":207},"\"#\u002Fmy\"",[92,71122,71123],{"class":102},">我的\u003C\u002F",[92,71125,341],{"class":51280},[92,71127,51287],{"class":102},[92,71129,71130,71132,71134,71136,71138,71141,71144,71146],{"class":94,"line":11},[92,71131,52124],{"class":102},[92,71133,341],{"class":51280},[92,71135,61037],{"class":1942},[92,71137,148],{"class":102},[92,71139,71140],{"class":207},"\"#\u002Ffriend\"",[92,71142,71143],{"class":102},">关注\u003C\u002F",[92,71145,341],{"class":51280},[92,71147,51287],{"class":102},[92,71149,71150,71152,71154,71156,71158,71161,71164,71166],{"class":94,"line":1158},[92,71151,52124],{"class":102},[92,71153,341],{"class":51280},[92,71155,61037],{"class":1942},[92,71157,148],{"class":102},[92,71159,71160],{"class":207},"\"#\u002Fdownload\"",[92,71162,71163],{"class":102},">下载\u003C\u002F",[92,71165,341],{"class":51280},[92,71167,51287],{"class":102},[38,71169,71170],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[46,71172,71173],{"start":1158},[49,71174,71175,71176,71178,71179,71181],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53696,71177],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53696,71180],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[63,71183,71185],{"id":71184},"_345-navigator对象","3.4.5 navigator对象",[38,71187,71188],{},[1441,71189],{"alt":10,"src":71190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[83,71192,71196],{"className":71193,"code":71194,"language":71195,"meta":10,"style":10},"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",[89,71197,71198,71203,71214,71226,71231,71282,71323,71328,71341,71353,71358],{"__ignoreMap":10},[92,71199,71200],{"class":94,"line":95},[92,71201,71202],{"class":161},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[92,71204,71205,71207,71209,71211],{"class":94,"line":11},[92,71206,329],{"class":98},[92,71208,103],{"class":102},[92,71210,54429],{"class":98},[92,71212,71213],{"class":102}," () { \n",[92,71215,71216,71218,71221,71223],{"class":94,"line":1158},[92,71217,6772],{"class":98},[92,71219,71220],{"class":151}," userAgent",[92,71222,13544],{"class":98},[92,71224,71225],{"class":102}," navigator.userAgent \n",[92,71227,71228],{"class":94,"line":1173},[92,71229,71230],{"class":161},"\u002F\u002F 验证是否为Android或iPhone \n",[92,71232,71233,71235,71238,71240,71243,71246,71248,71250,71253,71255,71258,71262,71264,71266,71268,71271,71273,71275,71277,71279],{"class":94,"line":1179},[92,71234,6772],{"class":98},[92,71236,71237],{"class":151}," android",[92,71239,13544],{"class":98},[92,71241,71242],{"class":102}," userAgent.",[92,71244,71245],{"class":1942},"match",[92,71247,103],{"class":102},[92,71249,687],{"class":207},[92,71251,71252],{"class":47958},"(Android);",[92,71254,1089],{"class":98},[92,71256,71257],{"class":151},"[\\s",[92,71259,71261],{"class":71260},"snhLl","\\\u002F",[92,71263,1043],{"class":151},[92,71265,584],{"class":98},[92,71267,103],{"class":47958},[92,71269,71270],{"class":151},"[\\d.]",[92,71272,584],{"class":98},[92,71274,532],{"class":47958},[92,71276,1089],{"class":98},[92,71278,687],{"class":207},[92,71280,71281],{"class":102},") \n",[92,71283,71284,71286,71289,71291,71293,71295,71297,71299,71302,71305,71308,71310,71312,71315,71317,71319,71321],{"class":94,"line":1193},[92,71285,6772],{"class":98},[92,71287,71288],{"class":151}," iphone",[92,71290,13544],{"class":98},[92,71292,71242],{"class":102},[92,71294,71245],{"class":1942},[92,71296,103],{"class":102},[92,71298,687],{"class":207},[92,71300,71301],{"class":47958},"(iPhone",[92,71303,71304],{"class":151},"\\s",[92,71306,71307],{"class":47958},"OS)",[92,71309,71304],{"class":151},[92,71311,103],{"class":47958},[92,71313,71314],{"class":151},"[\\d_]",[92,71316,584],{"class":98},[92,71318,532],{"class":47958},[92,71320,687],{"class":207},[92,71322,71281],{"class":102},[92,71324,71325],{"class":94,"line":1199},[92,71326,71327],{"class":161},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[92,71329,71330,71332,71335,71338],{"class":94,"line":1290},[92,71331,1510],{"class":98},[92,71333,71334],{"class":102}," (android ",[92,71336,71337],{"class":98},"||",[92,71339,71340],{"class":102}," iphone) { \n",[92,71342,71343,71346,71348,71351],{"class":94,"line":1296},[92,71344,71345],{"class":102},"location.href ",[92,71347,148],{"class":98},[92,71349,71350],{"class":207}," 'http:\u002F\u002Fm.itcast.cn'",[92,71352,2653],{"class":102},[92,71354,71355],{"class":94,"line":1308},[92,71356,71357],{"class":102},"} \n",[92,71359,71360],{"class":94,"line":1591},[92,71361,71362],{"class":102},"})()\n",[63,71364,71366],{"id":71365},"_346-histroy对象","3.4.6 histroy对象",[38,71368,71369],{},[1441,71370],{"alt":10,"src":71371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[38,71373,71374],{},"浏览器地址的前进与后退!!!",[38,71376,71377],{},"history.back() 等效于 history.go(-1)",[38,71379,71380],{},"history.forward() 等效于 history.go(1)",[33,71382,71384],{"id":71383},"_35-本地存储","3.5 本地存储",[46,71386,71387,71390,71393],{},[49,71388,71389],{},"数据存储在用户浏览器中",[49,71391,71392],{},"设置、读取方便、甚至页面刷新不丢失数据",[49,71394,71395],{},"容量较大，sessionStorage和localStorage约 5M 左右",[63,71397,71399],{"id":71398},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[38,71401,71402],{},"只能存储字符串",[38,71404,71405],{},[1441,71406],{"alt":10,"src":71407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[38,71409,71410],{},[1441,71411],{"alt":10,"src":71412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[38,71414,71415],{},"键值对要加引号,不然就会当变量来看了",[38,71417,71418],{},"localStorage.setItem('uname', 'pink')",[38,71420,71421],{},"刷新之后信息不再丢失",[38,71423,71424],{},"操作key,value会跟着变",[38,71426,71427],{},"删除只删除键就可以,即名字",[38,71429,71418],{},[38,71431,71432],{},"改:",[38,71434,71435],{},"localStorage.setItem('uname','red')",[38,71437,71438],{},"有这个键就是改,没有这个键就是改",[38,71440,71441],{},[1441,71442],{"alt":10,"src":71443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[38,71445,71446],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[38,71448,71449],{},[1441,71450],{"alt":10,"src":71451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[38,71453,71454],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[63,71456,71458],{"id":71457},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[38,71460,71461],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[38,71463,71464],{},"特性:",[46,71466,71467,71470,71473,71476],{},[49,71468,71469],{},"生命周期为关闭浏览器窗口",[49,71471,71472],{},"在同一个窗口(页面)下数据可以共享",[49,71474,71475],{},"以键值对的形式存储使用",[49,71477,71478],{},"用法跟localStorage 基本相同",[63,71480,71482],{"id":71481},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[38,71484,71485],{},"本地只能存储字符串,无法直接存储复杂数据类型",[83,71487,71489],{"className":53047,"code":71488,"language":53049,"meta":10,"style":10},"\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",[89,71490,71491,71499,71504,71509,71514,71519,71523,71528,71533],{"__ignoreMap":10},[92,71492,71493,71495,71497],{"class":94,"line":95},[92,71494,1013],{"class":102},[92,71496,51793],{"class":51280},[92,71498,51287],{"class":102},[92,71500,71501],{"class":94,"line":11},[92,71502,71503],{"class":102},"    const obj = {\n",[92,71505,71506],{"class":94,"line":1158},[92,71507,71508],{"class":102},"      uname: 'pink老师',\n",[92,71510,71511],{"class":94,"line":1173},[92,71512,71513],{"class":102},"      age: 18,\n",[92,71515,71516],{"class":94,"line":1179},[92,71517,71518],{"class":102},"      gender: '女'\n",[92,71520,71521],{"class":94,"line":1193},[92,71522,2166],{"class":102},[92,71524,71525],{"class":94,"line":1199},[92,71526,71527],{"class":102},"    \u002F\u002F 存储复杂数据类型\n",[92,71529,71530],{"class":94,"line":1290},[92,71531,71532],{"class":102},"    localStorage.setItem('obj', obj)\n",[92,71534,71535,71537,71539],{"class":94,"line":1296},[92,71536,52397],{"class":102},[92,71538,51793],{"class":51280},[92,71540,51287],{"class":102},[38,71542,71543],{},[1441,71544],{"alt":10,"src":71545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[38,71547,71548],{},"如果获取一下数据:",[38,71550,71551],{},"log(localStorage.getItem('obj'))",[38,71553,71554],{},[1441,71555],{"alt":10,"src":71556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[38,71558,71559],{},"发现直接存对象是使用不了的!!!",[21978,71561,71563],{"id":71562},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[38,71565,71566],{},[1441,71567],{"alt":10,"src":71568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[83,71570,71572],{"className":50613,"code":71571,"language":50615,"meta":10,"style":10},"\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",[89,71573,71574,71582,71592,71602,71611,71619,71623,71627,71653,71672,71680,71684,71689,71694],{"__ignoreMap":10},[92,71575,71576,71578,71580],{"class":94,"line":95},[92,71577,1013],{"class":102},[92,71579,51793],{"class":51280},[92,71581,51287],{"class":102},[92,71583,71584,71586,71588,71590],{"class":94,"line":11},[92,71585,11201],{"class":98},[92,71587,69951],{"class":151},[92,71589,13544],{"class":98},[92,71591,15552],{"class":102},[92,71593,71594,71597,71600],{"class":94,"line":1158},[92,71595,71596],{"class":102},"      uname: ",[92,71598,71599],{"class":207},"'pink老师'",[92,71601,31447],{"class":102},[92,71603,71604,71607,71609],{"class":94,"line":1173},[92,71605,71606],{"class":102},"      age: ",[92,71608,753],{"class":151},[92,71610,31447],{"class":102},[92,71612,71613,71616],{"class":94,"line":1179},[92,71614,71615],{"class":102},"      gender: ",[92,71617,71618],{"class":207},"'女'\n",[92,71620,71621],{"class":94,"line":1193},[92,71622,2166],{"class":102},[92,71624,71625],{"class":94,"line":1199},[92,71626,71527],{"class":161},[92,71628,71629,71632,71635,71637,71640,71642,71645,71647,71650],{"class":94,"line":1290},[92,71630,71631],{"class":102},"  localStorage.",[92,71633,71634],{"class":1942},"setItem",[92,71636,103],{"class":102},[92,71638,71639],{"class":207},"'obj'",[92,71641,12415],{"class":102},[92,71643,71644],{"class":151},"JSON",[92,71646,661],{"class":102},[92,71648,71649],{"class":1942},"stringify",[92,71651,71652],{"class":102},"(obj))\n",[92,71654,71655,71658,71660,71663,71666,71668,71670],{"class":94,"line":1296},[92,71656,71657],{"class":102},"  console.",[92,71659,58227],{"class":1942},[92,71661,71662],{"class":102},"(localStorage.",[92,71664,71665],{"class":1942},"getItem",[92,71667,103],{"class":102},[92,71669,71639],{"class":207},[92,71671,30478],{"class":102},[92,71673,71674,71676,71678],{"class":94,"line":1308},[92,71675,52397],{"class":102},[92,71677,51793],{"class":51280},[92,71679,51287],{"class":102},[92,71681,71682],{"class":94,"line":1591},[92,71683,70601],{"class":102},[92,71685,71686],{"class":94,"line":1596},[92,71687,71688],{"class":102},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[92,71690,71691],{"class":94,"line":1602},[92,71692,71693],{"class":102},"  类型是字符串的\n",[92,71695,71696],{"class":94,"line":1607},[92,71697,71698],{"class":102},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21978,71700,71702],{"id":71701},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[38,71704,71705],{},[1441,71706],{"alt":10,"src":71707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[38,71709,71710],{},[1441,71711],{"alt":10,"src":71712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[83,71714,71716],{"className":53047,"code":71715,"language":53049,"meta":10,"style":10},"  \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",[89,71717,71718,71726,71730,71734,71738,71742,71746,71751,71756,71761,71766,71771,71776,71781,71786],{"__ignoreMap":10},[92,71719,71720,71722,71724],{"class":94,"line":95},[92,71721,52124],{"class":102},[92,71723,51793],{"class":51280},[92,71725,51287],{"class":102},[92,71727,71728],{"class":94,"line":11},[92,71729,71503],{"class":102},[92,71731,71732],{"class":94,"line":1158},[92,71733,71508],{"class":102},[92,71735,71736],{"class":94,"line":1173},[92,71737,71513],{"class":102},[92,71739,71740],{"class":94,"line":1179},[92,71741,71518],{"class":102},[92,71743,71744],{"class":94,"line":1193},[92,71745,2166],{"class":102},[92,71747,71748],{"class":94,"line":1199},[92,71749,71750],{"class":102},"    \u002F\u002F 1.存储复杂数据类型\n",[92,71752,71753],{"class":94,"line":1290},[92,71754,71755],{"class":102},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[92,71757,71758],{"class":94,"line":1296},[92,71759,71760],{"class":102},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[92,71762,71763],{"class":94,"line":1308},[92,71764,71765],{"class":102},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[92,71767,71768],{"class":94,"line":1591},[92,71769,71770],{"class":102},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[92,71772,71773],{"class":94,"line":1596},[92,71774,71775],{"class":102},"    \u002F\u002F 取\n",[92,71777,71778],{"class":94,"line":1602},[92,71779,71780],{"class":102},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[92,71782,71783],{"class":94,"line":1607},[92,71784,71785],{"class":102},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[92,71787,71788,71790,71792],{"class":94,"line":1621},[92,71789,52397],{"class":102},[92,71791,51793],{"class":51280},[92,71793,51287],{"class":102},[38,71795,71796],{},[1441,71797],{"alt":10,"src":71798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[63,71800,71802],{"id":71801},"_356-数组map方法","3.5.6 数组map方法",[38,71804,71805],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[38,71807,71808],{},[1441,71809],{"alt":10,"src":71810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[38,71812,71813],{},[1441,71814],{"alt":10,"src":71815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[38,71817,71818,71821],{},[252,71819,71820],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[38,71823,71824],{},"map有返回值，但是forEach没有返回值",[38,71826,71827],{},"map是个方法。用的时候要加 ()",[38,71829,71830],{},"map返回的是一个数组",[63,71832,71834],{"id":71833},"_357-数组中join方法","3.5.7 数组中join方法",[38,71836,71837],{},[1441,71838],{"alt":10,"src":71839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[38,71841,71842],{},"类似于python中拼接字符串一样！",[46,71844,71845,71848,71851],{},[49,71846,71847],{},"小括号为空则逗号分开",[49,71849,71850],{},"小括号为空字符串 ''，则元素之间没有分隔符",[49,71852,71853],{},"小括号用啥符号就用进行分割",[63,71855,71857],{"id":71856},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[46,71859,71860,71863,71866,71869,71872],{},[49,71861,71862],{},"记住本地时间获取快速方式：new Date().toDateString()",[49,71864,71865],{},"尽量减少DOM操作，用好map+join的渲染方式",[49,71867,71868],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[49,71870,71871],{},"return可以实现函数的结束",[49,71873,71874],{},"禁止跳转是 preventDefault() 不要忘记",[83,71876,71878],{"className":50613,"code":71877,"language":50615,"meta":10,"style":10},"\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",[89,71879,71880,71890,71904,71908,71916,71930,71950,71962,71970,71976,71986,71996,72000,72004,72010,72020,72032,72036,72040,72047,72059,72073,72083,72087,72091,72098,72105,72112,72124,72136,72146,72158,72162,72166,72173,72180,72192,72204,72214,72226,72256,72260,72264,72271,72283,72295,72319,72329,72339,72343,72347,72355,72366,72378,72390,72402,72419,72431,72443,72447,72451,72458,72470,72482,72494,72505,72523,72536,72548,72572,72583,72587,72591,72599,72609,72613,72617,72623,72635,72646,72656,72660,72664,72670,72692,72696,72700,72706,72712,72724,72734,72746,72776,72789,72806,72810,72814,72825,72847,72857,72861,72865,72878,72888,72900,72912,72924,72936,72946,72956,72966,72977,72990,72994,73002,73010,73014,73022,73035,73055,73088,73121,73154,73180,73198,73216,73224,73250,73268,73286,73304,73322,73340,73348,73356,73374,73382,73411,73419,73427,73435,73448,73460,73472,73484,73496,73508,73521,73533,73541,73549,73557,73562,73567,73571,73575,73579,73583,73587,73591,73596,73601,73606,73611,73619,73627,73635,73640,73645,73650,73655,73660,73665,73670,73675,73680,73685,73690,73695,73700,73705,73709,73714,73719,73729,73738,73742,73747,73756,73772,73814,73854,73893,73958,73966,73970,73975,73993,74001,74006,74011,74041,74047,74052,74065,74077,74089,74101,74113,74125,74137,74141,74151,74155,74160,74165,74169,74178,74182,74187,74192,74211,74216,74236,74240,74245,74249,74254,74272,74290,74308,74327,74346,74365,74370,74376,74397,74403,74412,74418,74424,74430,74457,74470,74475,74485,74491,74497,74503,74509,74514,74520,74526,74532,74538,74571,74576,74581,74586,74591,74597,74603,74609,74620,74625,74631,74638,74652,74658,74682,74687,74692,74698,74704,74725,74731,74744,74750,74756,74762,74768,74773,74779,74785,74791,74809,74823,74829,74837,74843,74865,74870,74875,74880,74885,74890,74899,74908,74913],{"__ignoreMap":10},[92,71881,71882,71884,71886,71888],{"class":94,"line":95},[92,71883,51277],{"class":102},[92,71885,51281],{"class":51280},[92,71887,51284],{"class":1942},[92,71889,51287],{"class":102},[92,71891,71892,71894,71896,71898,71900,71902],{"class":94,"line":11},[92,71893,1013],{"class":102},[92,71895,50615],{"class":51280},[92,71897,51296],{"class":1942},[92,71899,148],{"class":102},[92,71901,51301],{"class":207},[92,71903,51287],{"class":102},[92,71905,71906],{"class":94,"line":1158},[92,71907,2379],{"emptyLinePlaceholder":17},[92,71909,71910,71912,71914],{"class":94,"line":1173},[92,71911,1013],{"class":102},[92,71913,51314],{"class":51280},[92,71915,51287],{"class":102},[92,71917,71918,71920,71922,71924,71926,71928],{"class":94,"line":1179},[92,71919,52124],{"class":102},[92,71921,51324],{"class":51280},[92,71923,51327],{"class":1942},[92,71925,148],{"class":102},[92,71927,51332],{"class":207},[92,71929,51287],{"class":102},[92,71931,71932,71934,71936,71938,71940,71942,71944,71946,71948],{"class":94,"line":1193},[92,71933,52124],{"class":102},[92,71935,51324],{"class":51280},[92,71937,14900],{"class":1942},[92,71939,148],{"class":102},[92,71941,51371],{"class":207},[92,71943,51351],{"class":1942},[92,71945,148],{"class":102},[92,71947,51378],{"class":207},[92,71949,51287],{"class":102},[92,71951,71952,71954,71956,71958,71960],{"class":94,"line":1199},[92,71953,52124],{"class":102},[92,71955,51387],{"class":51280},[92,71957,51390],{"class":102},[92,71959,51387],{"class":51280},[92,71961,51287],{"class":102},[92,71963,71964,71966,71968],{"class":94,"line":1290},[92,71965,52124],{"class":102},[92,71967,5106],{"class":51280},[92,71969,51287],{"class":102},[92,71971,71972,71974],{"class":94,"line":1296},[92,71973,6383],{"class":51280},[92,71975,15552],{"class":102},[92,71977,71978,71980,71982,71984],{"class":94,"line":1308},[92,71979,54675],{"class":151},[92,71981,51417],{"class":102},[92,71983,294],{"class":151},[92,71985,1269],{"class":102},[92,71987,71988,71990,71992,71994],{"class":94,"line":1591},[92,71989,54686],{"class":151},[92,71991,51417],{"class":102},[92,71993,294],{"class":151},[92,71995,1269],{"class":102},[92,71997,71998],{"class":94,"line":1596},[92,71999,2166],{"class":102},[92,72001,72002],{"class":94,"line":1602},[92,72003,2379],{"emptyLinePlaceholder":17},[92,72005,72006,72008],{"class":94,"line":1607},[92,72007,57259],{"class":51280},[92,72009,15552],{"class":102},[92,72011,72012,72014,72016,72018],{"class":94,"line":1621},[92,72013,57266],{"class":151},[92,72015,51417],{"class":102},[92,72017,51572],{"class":151},[92,72019,1269],{"class":102},[92,72021,72022,72024,72026,72028,72030],{"class":94,"line":1626},[92,72023,62057],{"class":151},[92,72025,51417],{"class":102},[92,72027,803],{"class":151},[92,72029,51472],{"class":98},[92,72031,1269],{"class":102},[92,72033,72034],{"class":94,"line":1632},[92,72035,2166],{"class":102},[92,72037,72038],{"class":94,"line":1653},[92,72039,2379],{"emptyLinePlaceholder":17},[92,72041,72042,72045],{"class":94,"line":1658},[92,72043,72044],{"class":1942},"    .info",[92,72046,15552],{"class":102},[92,72048,72049,72051,72053,72055,72057],{"class":94,"line":1672},[92,72050,54751],{"class":151},[92,72052,51417],{"class":102},[92,72054,51469],{"class":151},[92,72056,51472],{"class":98},[92,72058,1269],{"class":102},[92,72060,72061,72063,72065,72067,72069,72071],{"class":94,"line":1677},[92,72062,54686],{"class":151},[92,72064,51417],{"class":102},[92,72066,549],{"class":151},[92,72068,51472],{"class":98},[92,72070,51536],{"class":151},[92,72072,1269],{"class":102},[92,72074,72075,72077,72079,72081],{"class":94,"line":1706},[92,72076,57266],{"class":151},[92,72078,51417],{"class":102},[92,72080,51572],{"class":151},[92,72082,1269],{"class":102},[92,72084,72085],{"class":94,"line":1711},[92,72086,2166],{"class":102},[92,72088,72089],{"class":94,"line":1728},[92,72090,2379],{"emptyLinePlaceholder":17},[92,72092,72093,72096],{"class":94,"line":1733},[92,72094,72095],{"class":1942},"    .uname",[92,72097,31447],{"class":102},[92,72099,72100,72103],{"class":94,"line":1738},[92,72101,72102],{"class":1942},"    .age",[92,72104,31447],{"class":102},[92,72106,72107,72110],{"class":94,"line":1743},[92,72108,72109],{"class":1942},"    .salary",[92,72111,15552],{"class":102},[92,72113,72114,72116,72118,72120,72122],{"class":94,"line":1757},[92,72115,54751],{"class":151},[92,72117,51417],{"class":102},[92,72119,414],{"class":151},[92,72121,51472],{"class":98},[92,72123,1269],{"class":102},[92,72125,72126,72128,72130,72132,72134],{"class":94,"line":1762},[92,72127,54765],{"class":151},[92,72129,51417],{"class":102},[92,72131,803],{"class":151},[92,72133,51472],{"class":98},[92,72135,1269],{"class":102},[92,72137,72138,72140,72142,72144],{"class":94,"line":2556},[92,72139,61760],{"class":151},[92,72141,51417],{"class":102},[92,72143,54717],{"class":151},[92,72145,1269],{"class":102},[92,72147,72148,72150,72152,72154,72156],{"class":94,"line":2570},[92,72149,61730],{"class":151},[92,72151,51417],{"class":102},[92,72153,678],{"class":151},[92,72155,51472],{"class":98},[92,72157,1269],{"class":102},[92,72159,72160],{"class":94,"line":2578},[92,72161,2166],{"class":102},[92,72163,72164],{"class":94,"line":2583},[92,72165,2379],{"emptyLinePlaceholder":17},[92,72167,72168,72171],{"class":94,"line":2589},[92,72169,72170],{"class":1942},"    .gender",[92,72172,31447],{"class":102},[92,72174,72175,72178],{"class":94,"line":2595},[92,72176,72177],{"class":1942},"    .city",[92,72179,15552],{"class":102},[92,72181,72182,72184,72186,72188,72190],{"class":94,"line":2600},[92,72183,54751],{"class":151},[92,72185,51417],{"class":102},[92,72187,414],{"class":151},[92,72189,51472],{"class":98},[92,72191,1269],{"class":102},[92,72193,72194,72196,72198,72200,72202],{"class":94,"line":7928},[92,72195,54765],{"class":151},[92,72197,51417],{"class":102},[92,72199,928],{"class":151},[92,72201,51472],{"class":98},[92,72203,1269],{"class":102},[92,72205,72206,72208,72210,72212],{"class":94,"line":7952},[92,72207,61760],{"class":151},[92,72209,51417],{"class":102},[92,72211,54717],{"class":151},[92,72213,1269],{"class":102},[92,72215,72216,72218,72220,72222,72224],{"class":94,"line":7957},[92,72217,61730],{"class":151},[92,72219,51417],{"class":102},[92,72221,678],{"class":151},[92,72223,51472],{"class":98},[92,72225,1269],{"class":102},[92,72227,72228,72230,72232,72234,72236,72238,72241,72243,72245,72247,72250,72252,72254],{"class":94,"line":7963},[92,72229,61957],{"class":151},[92,72231,51417],{"class":102},[92,72233,320],{"class":151},[92,72235,51472],{"class":98},[92,72237,51501],{"class":151},[92,72239,72240],{"class":151}," rgb",[92,72242,103],{"class":102},[92,72244,1701],{"class":151},[92,72246,12415],{"class":102},[92,72248,72249],{"class":151},"197",[92,72251,12415],{"class":102},[92,72253,72249],{"class":151},[92,72255,2698],{"class":102},[92,72257,72258],{"class":94,"line":7990},[92,72259,2166],{"class":102},[92,72261,72262],{"class":94,"line":7995},[92,72263,2379],{"emptyLinePlaceholder":17},[92,72265,72266,72269],{"class":94,"line":8001},[92,72267,72268],{"class":51280},"    button",[92,72270,15552],{"class":102},[92,72272,72273,72275,72277,72279,72281],{"class":94,"line":8013},[92,72274,54765],{"class":151},[92,72276,51417],{"class":102},[92,72278,928],{"class":151},[92,72280,51472],{"class":98},[92,72282,1269],{"class":102},[92,72284,72285,72287,72289,72291,72293],{"class":94,"line":8025},[92,72286,54751],{"class":151},[92,72288,51417],{"class":102},[92,72290,587],{"class":151},[92,72292,51472],{"class":98},[92,72294,1269],{"class":102},[92,72296,72297,72299,72301,72304,72306,72308,72310,72313,72315,72317],{"class":94,"line":8037},[92,72298,54864],{"class":151},[92,72300,51417],{"class":102},[92,72302,72303],{"class":151},"rgb",[92,72305,103],{"class":102},[92,72307,1072],{"class":151},[92,72309,12415],{"class":102},[92,72311,72312],{"class":151},"187",[92,72314,12415],{"class":102},[92,72316,402],{"class":151},[92,72318,2698],{"class":102},[92,72320,72321,72323,72325,72327],{"class":94,"line":9696},[92,72322,57396],{"class":151},[92,72324,51417],{"class":102},[92,72326,60822],{"class":151},[92,72328,1269],{"class":102},[92,72330,72331,72333,72335,72337],{"class":94,"line":9721},[92,72332,61957],{"class":151},[92,72334,51417],{"class":102},[92,72336,294],{"class":151},[92,72338,1269],{"class":102},[92,72340,72341],{"class":94,"line":9744},[92,72342,2166],{"class":102},[92,72344,72345],{"class":94,"line":9768},[92,72346,2379],{"emptyLinePlaceholder":17},[92,72348,72349,72351,72353],{"class":94,"line":9773},[92,72350,72268],{"class":51280},[92,72352,51668],{"class":51280},[92,72354,15552],{"class":102},[92,72356,72357,72359,72361,72364],{"class":94,"line":9778},[92,72358,54989],{"class":151},[92,72360,51417],{"class":102},[92,72362,72363],{"class":151},"inline-block",[92,72365,1269],{"class":102},[92,72367,72368,72370,72372,72374,72376],{"class":94,"line":9783},[92,72369,54751],{"class":151},[92,72371,51417],{"class":102},[92,72373,549],{"class":151},[92,72375,51472],{"class":98},[92,72377,1269],{"class":102},[92,72379,72380,72382,72384,72386,72388],{"class":94,"line":9792},[92,72381,54765],{"class":151},[92,72383,51417],{"class":102},[92,72385,549],{"class":151},[92,72387,51472],{"class":98},[92,72389,1269],{"class":102},[92,72391,72392,72394,72396,72398,72400],{"class":94,"line":9797},[92,72393,57339],{"class":151},[92,72395,51417],{"class":102},[92,72397,575],{"class":151},[92,72399,51472],{"class":98},[92,72401,1269],{"class":102},[92,72403,72404,72406,72408,72410,72412,72414,72417],{"class":94,"line":9803},[92,72405,61957],{"class":151},[92,72407,51417],{"class":102},[92,72409,320],{"class":151},[92,72411,51472],{"class":98},[92,72413,51501],{"class":151},[92,72415,72416],{"class":151}," #fff",[92,72418,1269],{"class":102},[92,72420,72421,72423,72425,72427,72429],{"class":94,"line":9824},[92,72422,55114],{"class":151},[92,72424,51417],{"class":102},[92,72426,422],{"class":151},[92,72428,51472],{"class":98},[92,72430,1269],{"class":102},[92,72432,72433,72435,72437,72439,72441],{"class":94,"line":9830},[92,72434,61730],{"class":151},[92,72436,51417],{"class":102},[92,72438,320],{"class":151},[92,72440,51472],{"class":98},[92,72442,1269],{"class":102},[92,72444,72445],{"class":94,"line":9844},[92,72446,2166],{"class":102},[92,72448,72449],{"class":94,"line":9850},[92,72450,2379],{"emptyLinePlaceholder":17},[92,72452,72453,72456],{"class":94,"line":9877},[92,72454,72455],{"class":1942},"    .total",[92,72457,15552],{"class":102},[92,72459,72460,72462,72464,72466,72468],{"class":94,"line":9886},[92,72461,54751],{"class":151},[92,72463,51417],{"class":102},[92,72465,61609],{"class":151},[92,72467,51472],{"class":98},[92,72469,1269],{"class":102},[92,72471,72472,72474,72476,72478,72480],{"class":94,"line":9892},[92,72473,54765],{"class":151},[92,72475,51417],{"class":102},[92,72477,504],{"class":151},[92,72479,51472],{"class":98},[92,72481,1269],{"class":102},[92,72483,72484,72486,72488,72490,72492],{"class":94,"line":9900},[92,72485,57339],{"class":151},[92,72487,51417],{"class":102},[92,72489,504],{"class":151},[92,72491,51472],{"class":98},[92,72493,1269],{"class":102},[92,72495,72496,72498,72500,72503],{"class":94,"line":9905},[92,72497,57266],{"class":151},[92,72499,51417],{"class":102},[92,72501,72502],{"class":151},"right",[92,72504,1269],{"class":102},[92,72506,72507,72509,72511,72513,72515,72517,72519,72521],{"class":94,"line":16584},[92,72508,54686],{"class":151},[92,72510,51417],{"class":102},[92,72512,504],{"class":151},[92,72514,51472],{"class":98},[92,72516,51536],{"class":151},[92,72518,2017],{"class":151},[92,72520,51472],{"class":98},[92,72522,1269],{"class":102},[92,72524,72525,72528,72530,72532,72534],{"class":94,"line":16590},[92,72526,72527],{"class":151},"      padding-right",[92,72529,51417],{"class":102},[92,72531,549],{"class":151},[92,72533,51472],{"class":98},[92,72535,1269],{"class":102},[92,72537,72538,72540,72542,72544,72546],{"class":94,"line":16613},[92,72539,54902],{"class":151},[92,72541,51417],{"class":102},[92,72543,626],{"class":151},[92,72545,51472],{"class":98},[92,72547,1269],{"class":102},[92,72549,72550,72552,72554,72556,72558,72561,72563,72566,72568,72570],{"class":94,"line":16619},[92,72551,54864],{"class":151},[92,72553,51417],{"class":102},[92,72555,72303],{"class":151},[92,72557,103],{"class":102},[92,72559,72560],{"class":151},"237",[92,72562,12415],{"class":102},[92,72564,72565],{"class":151},"235",[92,72567,12415],{"class":102},[92,72569,72565],{"class":151},[92,72571,2698],{"class":102},[92,72573,72574,72577,72579,72581],{"class":94,"line":16642},[92,72575,72576],{"class":151},"      box-sizing",[92,72578,51417],{"class":102},[92,72580,60485],{"class":151},[92,72582,1269],{"class":102},[92,72584,72585],{"class":94,"line":16656},[92,72586,2166],{"class":102},[92,72588,72589],{"class":94,"line":16676},[92,72590,2379],{"emptyLinePlaceholder":17},[92,72592,72593,72595,72597],{"class":94,"line":16682},[92,72594,72455],{"class":1942},[92,72596,51668],{"class":51280},[92,72598,15552],{"class":102},[92,72600,72601,72603,72605,72607],{"class":94,"line":16693},[92,72602,57396],{"class":151},[92,72604,51417],{"class":102},[92,72606,57401],{"class":151},[92,72608,1269],{"class":102},[92,72610,72611],{"class":94,"line":16716},[92,72612,2166],{"class":102},[92,72614,72615],{"class":94,"line":16738},[92,72616,2379],{"emptyLinePlaceholder":17},[92,72618,72619,72621],{"class":94,"line":16743},[92,72620,65003],{"class":51280},[92,72622,15552],{"class":102},[92,72624,72625,72627,72629,72631,72633],{"class":94,"line":16749},[92,72626,54751],{"class":151},[92,72628,51417],{"class":102},[92,72630,61609],{"class":151},[92,72632,51472],{"class":98},[92,72634,1269],{"class":102},[92,72636,72637,72639,72641,72644],{"class":94,"line":16763},[92,72638,54686],{"class":151},[92,72640,51417],{"class":102},[92,72642,72643],{"class":151},"auto",[92,72645,1269],{"class":102},[92,72647,72648,72650,72652,72654],{"class":94,"line":16776},[92,72649,65010],{"class":151},[92,72651,51417],{"class":102},[92,72653,65015],{"class":151},[92,72655,1269],{"class":102},[92,72657,72658],{"class":94,"line":16781},[92,72659,2166],{"class":102},[92,72661,72662],{"class":94,"line":16795},[92,72663,2379],{"emptyLinePlaceholder":17},[92,72665,72666,72668],{"class":94,"line":16800},[92,72667,65095],{"class":51280},[92,72669,15552],{"class":102},[92,72671,72672,72674,72676,72678,72680,72682,72684,72686,72688,72690],{"class":94,"line":16806},[92,72673,54864],{"class":151},[92,72675,51417],{"class":102},[92,72677,72303],{"class":151},[92,72679,103],{"class":102},[92,72681,72560],{"class":151},[92,72683,12415],{"class":102},[92,72685,72565],{"class":151},[92,72687,12415],{"class":102},[92,72689,72565],{"class":151},[92,72691,2698],{"class":102},[92,72693,72694],{"class":94,"line":16811},[92,72695,2166],{"class":102},[92,72697,72698],{"class":94,"line":16825},[92,72699,2379],{"emptyLinePlaceholder":17},[92,72701,72702,72704],{"class":94,"line":16830},[92,72703,65095],{"class":51280},[92,72705,31447],{"class":102},[92,72707,72708,72710],{"class":94,"line":16835},[92,72709,65161],{"class":51280},[92,72711,15552],{"class":102},[92,72713,72714,72716,72718,72720,72722],{"class":94,"line":16849},[92,72715,54765],{"class":151},[92,72717,51417],{"class":102},[92,72719,376],{"class":151},[92,72721,51472],{"class":98},[92,72723,1269],{"class":102},[92,72725,72726,72728,72730,72732],{"class":94,"line":16861},[92,72727,57266],{"class":151},[92,72729,51417],{"class":102},[92,72731,23716],{"class":151},[92,72733,1269],{"class":102},[92,72735,72736,72738,72740,72742,72744],{"class":94,"line":16866},[92,72737,54902],{"class":151},[92,72739,51417],{"class":102},[92,72741,652],{"class":151},[92,72743,51472],{"class":98},[92,72745,1269],{"class":102},[92,72747,72748,72750,72752,72754,72756,72758,72760,72762,72765,72767,72770,72772,72774],{"class":94,"line":16879},[92,72749,61957],{"class":151},[92,72751,51417],{"class":102},[92,72753,320],{"class":151},[92,72755,51472],{"class":98},[92,72757,51501],{"class":151},[92,72759,72240],{"class":151},[92,72761,103],{"class":102},[92,72763,72764],{"class":151},"228",[92,72766,12415],{"class":102},[92,72768,72769],{"class":151},"225",[92,72771,12415],{"class":102},[92,72773,72769],{"class":151},[92,72775,2698],{"class":102},[92,72777,72778,72781,72783,72785,72787],{"class":94,"line":16884},[92,72779,72780],{"class":151},"      padding-left",[92,72782,51417],{"class":102},[92,72784,422],{"class":151},[92,72786,51472],{"class":98},[92,72788,1269],{"class":102},[92,72790,72791,72793,72795,72797,72800,72802,72804],{"class":94,"line":16889},[92,72792,61840],{"class":151},[92,72794,51417],{"class":102},[92,72796,28102],{"class":151},[92,72798,72799],{"class":151}," linear",[92,72801,61847],{"class":151},[92,72803,798],{"class":98},[92,72805,1269],{"class":102},[92,72807,72808],{"class":94,"line":16894},[92,72809,2166],{"class":102},[92,72811,72812],{"class":94,"line":16907},[92,72813,2379],{"emptyLinePlaceholder":17},[92,72815,72816,72819,72821,72823],{"class":94,"line":16912},[92,72817,72818],{"class":51280},"    tbody",[92,72820,70124],{"class":51280},[92,72822,60920],{"class":1942},[92,72824,15552],{"class":102},[92,72826,72827,72829,72831,72833,72835,72837,72839,72841,72843,72845],{"class":94,"line":32614},[92,72828,54864],{"class":151},[92,72830,51417],{"class":102},[92,72832,72303],{"class":151},[92,72834,103],{"class":102},[92,72836,72560],{"class":151},[92,72838,12415],{"class":102},[92,72840,72565],{"class":151},[92,72842,12415],{"class":102},[92,72844,72565],{"class":151},[92,72846,2698],{"class":102},[92,72848,72849,72851,72853,72855],{"class":94,"line":32620},[92,72850,62005],{"class":151},[92,72852,51417],{"class":102},[92,72854,62010],{"class":151},[92,72856,1269],{"class":102},[92,72858,72859],{"class":94,"line":32626},[92,72860,2166],{"class":102},[92,72862,72863],{"class":94,"line":32632},[92,72864,2379],{"emptyLinePlaceholder":17},[92,72866,72867,72869,72871,72874,72876],{"class":94,"line":32638},[92,72868,72818],{"class":51280},[92,72870,70124],{"class":51280},[92,72872,72873],{"class":51280}," td",[92,72875,1377],{"class":51280},[92,72877,15552],{"class":102},[92,72879,72880,72882,72884,72886],{"class":94,"line":32649},[92,72881,54989],{"class":151},[92,72883,51417],{"class":102},[92,72885,60849],{"class":151},[92,72887,1269],{"class":102},[92,72889,72890,72892,72894,72896,72898],{"class":94,"line":32655},[92,72891,54751],{"class":151},[92,72893,51417],{"class":102},[92,72895,1010],{"class":151},[92,72897,51472],{"class":98},[92,72899,1269],{"class":102},[92,72901,72902,72904,72906,72908,72910],{"class":94,"line":32675},[92,72903,54765],{"class":151},[92,72905,51417],{"class":102},[92,72907,928],{"class":151},[92,72909,51472],{"class":98},[92,72911,1269],{"class":102},[92,72913,72914,72916,72918,72920,72922],{"class":94,"line":32681},[92,72915,57339],{"class":151},[92,72917,51417],{"class":102},[92,72919,928],{"class":151},[92,72921,51472],{"class":98},[92,72923,1269],{"class":102},[92,72925,72926,72928,72930,72932,72934],{"class":94,"line":32692},[92,72927,62057],{"class":151},[92,72929,51417],{"class":102},[92,72931,180],{"class":151},[92,72933,51472],{"class":98},[92,72935,1269],{"class":102},[92,72937,72938,72940,72942,72944],{"class":94,"line":32698},[92,72939,57396],{"class":151},[92,72941,51417],{"class":102},[92,72943,60822],{"class":151},[92,72945,1269],{"class":102},[92,72947,72948,72950,72952,72954],{"class":94,"line":32704},[92,72949,57266],{"class":151},[92,72951,51417],{"class":102},[92,72953,51572],{"class":151},[92,72955,1269],{"class":102},[92,72957,72958,72960,72962,72964],{"class":94,"line":32710},[92,72959,63950],{"class":151},[92,72961,51417],{"class":102},[92,72963,54717],{"class":151},[92,72965,1269],{"class":102},[92,72967,72968,72970,72972,72975],{"class":94,"line":32716},[92,72969,54864],{"class":151},[92,72971,51417],{"class":102},[92,72973,72974],{"class":151},"orange",[92,72976,1269],{"class":102},[92,72978,72979,72981,72983,72986,72988],{"class":94,"line":32722},[92,72980,55114],{"class":151},[92,72982,51417],{"class":102},[92,72984,72985],{"class":151},"12.5",[92,72987,51472],{"class":98},[92,72989,1269],{"class":102},[92,72991,72992],{"class":94,"line":32728},[92,72993,2166],{"class":102},[92,72995,72996,72998,73000],{"class":94,"line":32734},[92,72997,52397],{"class":102},[92,72999,5106],{"class":51280},[92,73001,51287],{"class":102},[92,73003,73004,73006,73008],{"class":94,"line":32754},[92,73005,51765],{"class":102},[92,73007,51314],{"class":51280},[92,73009,51287],{"class":102},[92,73011,73012],{"class":94,"line":32760},[92,73013,2379],{"emptyLinePlaceholder":17},[92,73015,73016,73018,73020],{"class":94,"line":32776},[92,73017,1013],{"class":102},[92,73019,51780],{"class":51280},[92,73021,51287],{"class":102},[92,73023,73024,73026,73028,73031,73033],{"class":94,"line":32782},[92,73025,52124],{"class":102},[92,73027,33],{"class":51280},[92,73029,73030],{"class":102},">学生就业统计表\u003C\u002F",[92,73032,33],{"class":51280},[92,73034,51287],{"class":102},[92,73036,73037,73039,73041,73043,73045,73047,73049,73051,73053],{"class":94,"line":32796},[92,73038,52124],{"class":102},[92,73040,66605],{"class":51280},[92,73042,53466],{"class":1942},[92,73044,148],{"class":102},[92,73046,62644],{"class":207},[92,73048,69050],{"class":1942},[92,73050,148],{"class":102},[92,73052,31757],{"class":207},[92,73054,51287],{"class":102},[92,73056,73057,73059,73061,73063,73065,73067,73069,73071,73073,73075,73077,73080,73082,73084,73086],{"class":94,"line":32802},[92,73058,51321],{"class":102},[92,73060,53801],{"class":51280},[92,73062,53804],{"class":1942},[92,73064,148],{"class":102},[92,73066,62679],{"class":207},[92,73068,14900],{"class":1942},[92,73070,148],{"class":102},[92,73072,69076],{"class":207},[92,73074,61000],{"class":1942},[92,73076,148],{"class":102},[92,73078,73079],{"class":207},"\"姓名\"",[92,73081,53466],{"class":1942},[92,73083,148],{"class":102},[92,73085,69076],{"class":207},[92,73087,51287],{"class":102},[92,73089,73090,73092,73094,73096,73098,73100,73102,73104,73106,73108,73110,73113,73115,73117,73119],{"class":94,"line":32817},[92,73091,51321],{"class":102},[92,73093,53801],{"class":51280},[92,73095,53804],{"class":1942},[92,73097,148],{"class":102},[92,73099,62679],{"class":207},[92,73101,14900],{"class":1942},[92,73103,148],{"class":102},[92,73105,69104],{"class":207},[92,73107,61000],{"class":1942},[92,73109,148],{"class":102},[92,73111,73112],{"class":207},"\"年龄\"",[92,73114,53466],{"class":1942},[92,73116,148],{"class":102},[92,73118,69104],{"class":207},[92,73120,51287],{"class":102},[92,73122,73123,73125,73127,73129,73131,73133,73135,73137,73139,73141,73143,73146,73148,73150,73152],{"class":94,"line":32823},[92,73124,51321],{"class":102},[92,73126,53801],{"class":51280},[92,73128,53804],{"class":1942},[92,73130,148],{"class":102},[92,73132,62679],{"class":207},[92,73134,14900],{"class":1942},[92,73136,148],{"class":102},[92,73138,69206],{"class":207},[92,73140,61000],{"class":1942},[92,73142,148],{"class":102},[92,73144,73145],{"class":207},"\"薪资\"",[92,73147,53466],{"class":1942},[92,73149,148],{"class":102},[92,73151,69206],{"class":207},[92,73153,51287],{"class":102},[92,73155,73156,73158,73160,73162,73164,73166,73168,73170,73172,73174,73176,73178],{"class":94,"line":32832},[92,73157,51321],{"class":102},[92,73159,69124],{"class":51280},[92,73161,14900],{"class":1942},[92,73163,148],{"class":102},[92,73165,69131],{"class":207},[92,73167,14939],{"class":1942},[92,73169,148],{"class":102},[92,73171,7632],{"class":207},[92,73173,53466],{"class":1942},[92,73175,148],{"class":102},[92,73177,69131],{"class":207},[92,73179,51287],{"class":102},[92,73181,73182,73184,73186,73188,73190,73192,73194,73196],{"class":94,"line":32838},[92,73183,55214],{"class":102},[92,73185,69146],{"class":51280},[92,73187,66631],{"class":1942},[92,73189,148],{"class":102},[92,73191,9941],{"class":207},[92,73193,69155],{"class":102},[92,73195,69146],{"class":51280},[92,73197,51287],{"class":102},[92,73199,73200,73202,73204,73206,73208,73210,73212,73214],{"class":94,"line":32847},[92,73201,55214],{"class":102},[92,73203,69146],{"class":51280},[92,73205,66631],{"class":1942},[92,73207,148],{"class":102},[92,73209,10010],{"class":207},[92,73211,69174],{"class":102},[92,73213,69146],{"class":51280},[92,73215,51287],{"class":102},[92,73217,73218,73220,73222],{"class":94,"line":32853},[92,73219,51756],{"class":102},[92,73221,69124],{"class":51280},[92,73223,51287],{"class":102},[92,73225,73226,73228,73230,73232,73234,73236,73238,73240,73242,73244,73246,73248],{"class":94,"line":32859},[92,73227,51321],{"class":102},[92,73229,69124],{"class":51280},[92,73231,14900],{"class":1942},[92,73233,148],{"class":102},[92,73235,69228],{"class":207},[92,73237,14939],{"class":1942},[92,73239,148],{"class":102},[92,73241,7632],{"class":207},[92,73243,53466],{"class":1942},[92,73245,148],{"class":102},[92,73247,69228],{"class":207},[92,73249,51287],{"class":102},[92,73251,73252,73254,73256,73258,73260,73262,73264,73266],{"class":94,"line":32868},[92,73253,55214],{"class":102},[92,73255,69146],{"class":51280},[92,73257,66631],{"class":1942},[92,73259,148],{"class":102},[92,73261,69249],{"class":207},[92,73263,69252],{"class":102},[92,73265,69146],{"class":51280},[92,73267,51287],{"class":102},[92,73269,73270,73272,73274,73276,73278,73280,73282,73284],{"class":94,"line":32874},[92,73271,55214],{"class":102},[92,73273,69146],{"class":51280},[92,73275,66631],{"class":1942},[92,73277,148],{"class":102},[92,73279,69269],{"class":207},[92,73281,69272],{"class":102},[92,73283,69146],{"class":51280},[92,73285,51287],{"class":102},[92,73287,73288,73290,73292,73294,73296,73298,73300,73302],{"class":94,"line":32885},[92,73289,55214],{"class":102},[92,73291,69146],{"class":51280},[92,73293,66631],{"class":1942},[92,73295,148],{"class":102},[92,73297,69289],{"class":207},[92,73299,69292],{"class":102},[92,73301,69146],{"class":51280},[92,73303,51287],{"class":102},[92,73305,73306,73308,73310,73312,73314,73316,73318,73320],{"class":94,"line":32891},[92,73307,55214],{"class":102},[92,73309,69146],{"class":51280},[92,73311,66631],{"class":1942},[92,73313,148],{"class":102},[92,73315,69309],{"class":207},[92,73317,69312],{"class":102},[92,73319,69146],{"class":51280},[92,73321,51287],{"class":102},[92,73323,73324,73326,73328,73330,73332,73334,73336,73338],{"class":94,"line":32910},[92,73325,55214],{"class":102},[92,73327,69146],{"class":51280},[92,73329,66631],{"class":1942},[92,73331,148],{"class":102},[92,73333,69329],{"class":207},[92,73335,69332],{"class":102},[92,73337,69146],{"class":51280},[92,73339,51287],{"class":102},[92,73341,73342,73344,73346],{"class":94,"line":32916},[92,73343,51756],{"class":102},[92,73345,69124],{"class":51280},[92,73347,51287],{"class":102},[92,73349,73350,73352,73354],{"class":94,"line":32927},[92,73351,51321],{"class":102},[92,73353,53867],{"class":51280},[92,73355,51287],{"class":102},[92,73357,73358,73360,73362,73365,73367,73370,73372],{"class":94,"line":32933},[92,73359,55214],{"class":102},[92,73361,92],{"class":51280},[92,73363,73364],{"class":102},">+\u003C\u002F",[92,73366,92],{"class":51280},[92,73368,73369],{"class":102},">添加\u003C\u002F",[92,73371,53867],{"class":51280},[92,73373,51287],{"class":102},[92,73375,73376,73378,73380],{"class":94,"line":32953},[92,73377,52397],{"class":102},[92,73379,66605],{"class":51280},[92,73381,51287],{"class":102},[92,73383,73384,73386,73388,73390,73392,73394,73397,73399,73402,73404,73407,73409],{"class":94,"line":32969},[92,73385,52124],{"class":102},[92,73387,51591],{"class":51280},[92,73389,53466],{"class":1942},[92,73391,148],{"class":102},[92,73393,62560],{"class":207},[92,73395,73396],{"class":102},">共有数据 \u003C",[92,73398,92],{"class":51280},[92,73400,73401],{"class":102},">0\u003C\u002F",[92,73403,92],{"class":51280},[92,73405,73406],{"class":102},"> 条\u003C\u002F",[92,73408,51591],{"class":51280},[92,73410,51287],{"class":102},[92,73412,73413,73415,73417],{"class":94,"line":32975},[92,73414,52124],{"class":102},[92,73416,240],{"class":51280},[92,73418,51287],{"class":102},[92,73420,73421,73423,73425],{"class":94,"line":32989},[92,73422,51321],{"class":102},[92,73424,243],{"class":51280},[92,73426,51287],{"class":102},[92,73428,73429,73431,73433],{"class":94,"line":32995},[92,73430,55214],{"class":102},[92,73432,246],{"class":51280},[92,73434,51287],{"class":102},[92,73436,73437,73439,73441,73444,73446],{"class":94,"line":33001},[92,73438,55282],{"class":102},[92,73440,249],{"class":51280},[92,73442,73443],{"class":102},">ID\u003C\u002F",[92,73445,249],{"class":51280},[92,73447,51287],{"class":102},[92,73449,73450,73452,73454,73456,73458],{"class":94,"line":33012},[92,73451,55282],{"class":102},[92,73453,249],{"class":51280},[92,73455,69435],{"class":102},[92,73457,249],{"class":51280},[92,73459,51287],{"class":102},[92,73461,73462,73464,73466,73468,73470],{"class":94,"line":33018},[92,73463,55282],{"class":102},[92,73465,249],{"class":51280},[92,73467,69448],{"class":102},[92,73469,249],{"class":51280},[92,73471,51287],{"class":102},[92,73473,73474,73476,73478,73480,73482],{"class":94,"line":33024},[92,73475,55282],{"class":102},[92,73477,249],{"class":51280},[92,73479,69461],{"class":102},[92,73481,249],{"class":51280},[92,73483,51287],{"class":102},[92,73485,73486,73488,73490,73492,73494],{"class":94,"line":33034},[92,73487,55282],{"class":102},[92,73489,249],{"class":51280},[92,73491,69474],{"class":102},[92,73493,249],{"class":51280},[92,73495,51287],{"class":102},[92,73497,73498,73500,73502,73504,73506],{"class":94,"line":33040},[92,73499,55282],{"class":102},[92,73501,249],{"class":51280},[92,73503,69487],{"class":102},[92,73505,249],{"class":51280},[92,73507,51287],{"class":102},[92,73509,73510,73512,73514,73517,73519],{"class":94,"line":33051},[92,73511,55282],{"class":102},[92,73513,249],{"class":51280},[92,73515,73516],{"class":102},">录入时间\u003C\u002F",[92,73518,249],{"class":51280},[92,73520,51287],{"class":102},[92,73522,73523,73525,73527,73529,73531],{"class":94,"line":33057},[92,73524,55282],{"class":102},[92,73526,249],{"class":51280},[92,73528,69500],{"class":102},[92,73530,249],{"class":51280},[92,73532,51287],{"class":102},[92,73534,73535,73537,73539],{"class":94,"line":33067},[92,73536,55387],{"class":102},[92,73538,246],{"class":51280},[92,73540,51287],{"class":102},[92,73542,73543,73545,73547],{"class":94,"line":33072},[92,73544,51756],{"class":102},[92,73546,243],{"class":51280},[92,73548,51287],{"class":102},[92,73550,73551,73553,73555],{"class":94,"line":33078},[92,73552,51321],{"class":102},[92,73554,287],{"class":51280},[92,73556,51287],{"class":102},[92,73558,73559],{"class":94,"line":33127},[92,73560,73561],{"class":161},"      \u003C!-- \u003Ctr>\n",[92,73563,73564],{"class":94,"line":33174},[92,73565,73566],{"class":161},"        \u003Ctd>1\u003C\u002Ftd>\n",[92,73568,73569],{"class":94,"line":33179},[92,73570,73566],{"class":161},[92,73572,73573],{"class":94,"line":33185},[92,73574,73566],{"class":161},[92,73576,73577],{"class":94,"line":33204},[92,73578,73566],{"class":161},[92,73580,73581],{"class":94,"line":33210},[92,73582,73566],{"class":161},[92,73584,73585],{"class":94,"line":33230},[92,73586,73566],{"class":161},[92,73588,73589],{"class":94,"line":33236},[92,73590,73566],{"class":161},[92,73592,73593],{"class":94,"line":33242},[92,73594,73595],{"class":161},"        \u003Ctd>\n",[92,73597,73598],{"class":94,"line":33252},[92,73599,73600],{"class":161},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[92,73602,73603],{"class":94,"line":33257},[92,73604,73605],{"class":161},"        \u003C\u002Ftd>\n",[92,73607,73608],{"class":94,"line":33263},[92,73609,73610],{"class":161},"      \u003C\u002Ftr> -->\n",[92,73612,73613,73615,73617],{"class":94,"line":33279},[92,73614,51756],{"class":102},[92,73616,287],{"class":51280},[92,73618,51287],{"class":102},[92,73620,73621,73623,73625],{"class":94,"line":33324},[92,73622,52397],{"class":102},[92,73624,240],{"class":51280},[92,73626,51287],{"class":102},[92,73628,73629,73631,73633],{"class":94,"line":33330},[92,73630,52124],{"class":102},[92,73632,51793],{"class":51280},[92,73634,51287],{"class":102},[92,73636,73637],{"class":94,"line":33336},[92,73638,73639],{"class":161},"    \u002F\u002F const initData = [{\n",[92,73641,73642],{"class":94,"line":33342},[92,73643,73644],{"class":161},"    \u002F\u002F   unameId: 1,\n",[92,73646,73647],{"class":94,"line":33353},[92,73648,73649],{"class":161},"    \u002F\u002F   uname: '华晨宇',\n",[92,73651,73652],{"class":94,"line":33359},[92,73653,73654],{"class":161},"    \u002F\u002F   age: 22,\n",[92,73656,73657],{"class":94,"line":33365},[92,73658,73659],{"class":161},"    \u002F\u002F   salary: 12000,\n",[92,73661,73662],{"class":94,"line":33371},[92,73663,73664],{"class":161},"    \u002F\u002F   gender: '男',\n",[92,73666,73667],{"class":94,"line":33389},[92,73668,73669],{"class":161},"    \u002F\u002F   city: '北京',\n",[92,73671,73672],{"class":94,"line":33403},[92,73673,73674],{"class":161},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[92,73676,73677],{"class":94,"line":33412},[92,73678,73679],{"class":161},"    \u002F\u002F }]\n",[92,73681,73682],{"class":94,"line":33421},[92,73683,73684],{"class":161},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[92,73686,73687],{"class":94,"line":33430},[92,73688,73689],{"class":161},"    \u002F\u002F 1.渲染业务\n",[92,73691,73692],{"class":94,"line":33439},[92,73693,73694],{"class":161},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[92,73696,73697],{"class":94,"line":33445},[92,73698,73699],{"class":161},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[92,73701,73702],{"class":94,"line":33451},[92,73703,73704],{"class":161},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[92,73706,73707],{"class":94,"line":33459},[92,73708,2379],{"emptyLinePlaceholder":17},[92,73710,73711],{"class":94,"line":33464},[92,73712,73713],{"class":161},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[92,73715,73716],{"class":94,"line":33470},[92,73717,73718],{"class":161},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[92,73720,73721,73723,73725,73727],{"class":94,"line":33481},[92,73722,11201],{"class":98},[92,73724,57675],{"class":151},[92,73726,13544],{"class":98},[92,73728,51818],{"class":102},[92,73730,73731,73734,73736],{"class":94,"line":33487},[92,73732,73733],{"class":102},"    console.",[92,73735,58227],{"class":1942},[92,73737,52392],{"class":102},[92,73739,73740],{"class":94,"line":33507},[92,73741,2379],{"emptyLinePlaceholder":17},[92,73743,73744],{"class":94,"line":33513},[92,73745,73746],{"class":161},"    \u002F\u002F 时间函数\n",[92,73748,73749,73751,73754],{"class":94,"line":33519},[92,73750,70064],{"class":98},[92,73752,73753],{"class":1942}," getTime",[92,73755,10833],{"class":102},[92,73757,73758,73760,73763,73765,73767,73770],{"class":94,"line":33525},[92,73759,58208],{"class":98},[92,73761,73762],{"class":151}," date",[92,73764,13544],{"class":98},[92,73766,11558],{"class":98},[92,73768,73769],{"class":1942}," Date",[92,73771,1955],{"class":102},[92,73773,73774,73776,73778,73780,73783,73786,73788,73790,73792,73795,73798,73800,73802,73804,73806,73808,73810,73812],{"class":94,"line":33542},[92,73775,58208],{"class":98},[92,73777,16071],{"class":151},[92,73779,13544],{"class":98},[92,73781,73782],{"class":102}," date.",[92,73784,73785],{"class":1942},"getHours",[92,73787,13030],{"class":102},[92,73789,1013],{"class":98},[92,73791,2017],{"class":151},[92,73793,73794],{"class":98}," ?",[92,73796,73797],{"class":207}," '0'",[92,73799,45547],{"class":98},[92,73801,73782],{"class":102},[92,73803,73785],{"class":1942},[92,73805,13030],{"class":102},[92,73807,962],{"class":98},[92,73809,73782],{"class":102},[92,73811,73785],{"class":1942},[92,73813,1955],{"class":102},[92,73815,73816,73818,73821,73823,73825,73828,73830,73832,73834,73836,73838,73840,73842,73844,73846,73848,73850,73852],{"class":94,"line":33548},[92,73817,58208],{"class":98},[92,73819,73820],{"class":151}," m",[92,73822,13544],{"class":98},[92,73824,73782],{"class":102},[92,73826,73827],{"class":1942},"getMinutes",[92,73829,13030],{"class":102},[92,73831,1013],{"class":98},[92,73833,2017],{"class":151},[92,73835,73794],{"class":98},[92,73837,73797],{"class":207},[92,73839,45547],{"class":98},[92,73841,73782],{"class":102},[92,73843,73827],{"class":1942},[92,73845,13030],{"class":102},[92,73847,962],{"class":98},[92,73849,73782],{"class":102},[92,73851,73827],{"class":1942},[92,73853,1955],{"class":102},[92,73855,73856,73858,73860,73862,73864,73867,73869,73871,73873,73875,73877,73879,73881,73883,73885,73887,73889,73891],{"class":94,"line":33554},[92,73857,58208],{"class":98},[92,73859,8408],{"class":151},[92,73861,13544],{"class":98},[92,73863,73782],{"class":102},[92,73865,73866],{"class":1942},"getSeconds",[92,73868,13030],{"class":102},[92,73870,1013],{"class":98},[92,73872,2017],{"class":151},[92,73874,73794],{"class":98},[92,73876,73797],{"class":207},[92,73878,45547],{"class":98},[92,73880,73782],{"class":102},[92,73882,73866],{"class":1942},[92,73884,13030],{"class":102},[92,73886,962],{"class":98},[92,73888,73782],{"class":102},[92,73890,73866],{"class":1942},[92,73892,1955],{"class":102},[92,73894,73895,73897,73900,73902,73904,73907,73909,73912,73914,73917,73919,73921,73924,73926,73928,73930,73932,73934,73936,73939,73941,73944,73946,73949,73951,73953,73955],{"class":94,"line":33560},[92,73896,58208],{"class":98},[92,73898,73899],{"class":151}," str",[92,73901,13544],{"class":98},[92,73903,62883],{"class":207},[92,73905,73906],{"class":102},"date",[92,73908,661],{"class":207},[92,73910,73911],{"class":1942},"getFullYear",[92,73913,2406],{"class":207},[92,73915,73916],{"class":207},"}\u002F${",[92,73918,73906],{"class":102},[92,73920,661],{"class":207},[92,73922,73923],{"class":1942},"getMonth",[92,73925,13030],{"class":207},[92,73927,584],{"class":98},[92,73929,25099],{"class":151},[92,73931,73916],{"class":207},[92,73933,73906],{"class":102},[92,73935,661],{"class":207},[92,73937,73938],{"class":1942},"getDate",[92,73940,2406],{"class":207},[92,73942,73943],{"class":207},"} ${",[92,73945,518],{"class":102},[92,73947,73948],{"class":207},"}:${",[92,73950,647],{"class":102},[92,73952,73948],{"class":207},[92,73954,798],{"class":102},[92,73956,73957],{"class":207},"}`\n",[92,73959,73960,73963],{"class":94,"line":33566},[92,73961,73962],{"class":98},"      return",[92,73964,73965],{"class":102}," str\n",[92,73967,73968],{"class":94,"line":33572},[92,73969,2166],{"class":102},[92,73971,73972],{"class":94,"line":33599},[92,73973,73974],{"class":161},"    \u002F\u002F 渲染函数\n",[92,73976,73977,73979,73981,73983,73985,73987,73989,73991],{"class":94,"line":33623},[92,73978,11201],{"class":98},[92,73980,69727],{"class":151},[92,73982,13544],{"class":98},[92,73984,54376],{"class":102},[92,73986,54379],{"class":1942},[92,73988,103],{"class":102},[92,73990,69738],{"class":207},[92,73992,109],{"class":102},[92,73994,73995,73997,73999],{"class":94,"line":33629},[92,73996,70064],{"class":98},[92,73998,70067],{"class":1942},[92,74000,10833],{"class":102},[92,74002,74003],{"class":94,"line":33635},[92,74004,74005],{"class":161},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[92,74007,74008],{"class":94,"line":33641},[92,74009,74010],{"class":161},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[92,74012,74013,74015,74018,74020,74022,74025,74027,74029,74031,74034,74036,74039],{"class":94,"line":33652},[92,74014,58208],{"class":98},[92,74016,74017],{"class":151}," trArr",[92,74019,13544],{"class":98},[92,74021,51945],{"class":102},[92,74023,74024],{"class":1942},"map",[92,74026,103],{"class":102},[92,74028,54429],{"class":98},[92,74030,1637],{"class":102},[92,74032,74033],{"class":5196},"ele",[92,74035,12415],{"class":102},[92,74037,74038],{"class":5196},"index",[92,74040,12422],{"class":102},[92,74042,74043,74045],{"class":94,"line":33663},[92,74044,14732],{"class":98},[92,74046,70148],{"class":207},[92,74048,74049],{"class":94,"line":33669},[92,74050,74051],{"class":207},"      \u003Ctr>\n",[92,74053,74054,74056,74058,74060,74063],{"class":94,"line":33686},[92,74055,70153],{"class":207},[92,74057,74033],{"class":102},[92,74059,661],{"class":207},[92,74061,74062],{"class":102},"unameId",[92,74064,70168],{"class":207},[92,74066,74067,74069,74071,74073,74075],{"class":94,"line":33709},[92,74068,70153],{"class":207},[92,74070,74033],{"class":102},[92,74072,661],{"class":207},[92,74074,70184],{"class":102},[92,74076,70168],{"class":207},[92,74078,74079,74081,74083,74085,74087],{"class":94,"line":33732},[92,74080,70153],{"class":207},[92,74082,74033],{"class":102},[92,74084,661],{"class":207},[92,74086,70201],{"class":102},[92,74088,70168],{"class":207},[92,74090,74091,74093,74095,74097,74099],{"class":94,"line":33738},[92,74092,70153],{"class":207},[92,74094,74033],{"class":102},[92,74096,661],{"class":207},[92,74098,70218],{"class":102},[92,74100,70168],{"class":207},[92,74102,74103,74105,74107,74109,74111],{"class":94,"line":33743},[92,74104,70153],{"class":207},[92,74106,74033],{"class":102},[92,74108,661],{"class":207},[92,74110,70235],{"class":102},[92,74112,70168],{"class":207},[92,74114,74115,74117,74119,74121,74123],{"class":94,"line":33752},[92,74116,70153],{"class":207},[92,74118,74033],{"class":102},[92,74120,661],{"class":207},[92,74122,70252],{"class":102},[92,74124,70168],{"class":207},[92,74126,74127,74129,74131,74133,74135],{"class":94,"line":33762},[92,74128,70153],{"class":207},[92,74130,74033],{"class":102},[92,74132,661],{"class":207},[92,74134,2366],{"class":102},[92,74136,70168],{"class":207},[92,74138,74139],{"class":94,"line":33768},[92,74140,73595],{"class":207},[92,74142,74143,74146,74148],{"class":94,"line":33773},[92,74144,74145],{"class":207},"          \u003Ca href=\"#\" data-id=\"${",[92,74147,74038],{"class":102},[92,74149,74150],{"class":207},"}\">删除\u003C\u002Fa>\n",[92,74152,74153],{"class":94,"line":33779},[92,74154,73605],{"class":207},[92,74156,74157],{"class":94,"line":33792},[92,74158,74159],{"class":207},"      \u003C\u002Ftr>\n",[92,74161,74162],{"class":94,"line":33798},[92,74163,74164],{"class":207},"  `\n",[92,74166,74167],{"class":94,"line":33809},[92,74168,64795],{"class":102},[92,74170,74171,74173,74175],{"class":94,"line":33820},[92,74172,58224],{"class":102},[92,74174,58227],{"class":1942},[92,74176,74177],{"class":102},"(trArr)\n",[92,74179,74180],{"class":94,"line":33839},[92,74181,2379],{"emptyLinePlaceholder":17},[92,74183,74184],{"class":94,"line":49499},[92,74185,74186],{"class":161},"      \u002F\u002F (2) 把数组转换为字符串join\n",[92,74188,74189],{"class":94,"line":49504},[92,74190,74191],{"class":161},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[92,74193,74194,74196,74198,74201,74204,74206,74209],{"class":94,"line":49513},[92,74195,70079],{"class":102},[92,74197,148],{"class":98},[92,74199,74200],{"class":102}," trArr.",[92,74202,74203],{"class":1942},"join",[92,74205,103],{"class":102},[92,74207,74208],{"class":207},"''",[92,74210,109],{"class":102},[92,74212,74213],{"class":94,"line":49522},[92,74214,74215],{"class":161},"      \u002F\u002F 显示共有几条\n",[92,74217,74218,74220,74222,74224,74227,74230,74232,74234],{"class":94,"line":49527},[92,74219,55751],{"class":102},[92,74221,54379],{"class":1942},[92,74223,103],{"class":102},[92,74225,74226],{"class":207},"'.total span'",[92,74228,74229],{"class":102},").innerHTML ",[92,74231,148],{"class":98},[92,74233,51945],{"class":102},[92,74235,55811],{"class":151},[92,74237,74238],{"class":94,"line":49532},[92,74239,2166],{"class":102},[92,74241,74242],{"class":94,"line":49537},[92,74243,74244],{"class":161},"    \u002F\u002F render()\n",[92,74246,74247],{"class":94,"line":49550},[92,74248,2379],{"emptyLinePlaceholder":17},[92,74250,74251],{"class":94,"line":49555},[92,74252,74253],{"class":161},"    \u002F\u002F 获取DOM对象\n",[92,74255,74256,74258,74260,74262,74264,74266,74268,74270],{"class":94,"line":49564},[92,74257,11201],{"class":98},[92,74259,69801],{"class":151},[92,74261,13544],{"class":98},[92,74263,54376],{"class":102},[92,74265,54379],{"class":1942},[92,74267,103],{"class":102},[92,74269,69812],{"class":207},[92,74271,109],{"class":102},[92,74273,74274,74276,74278,74280,74282,74284,74286,74288],{"class":94,"line":49573},[92,74275,11201],{"class":98},[92,74277,69628],{"class":151},[92,74279,13544],{"class":98},[92,74281,54376],{"class":102},[92,74283,54379],{"class":1942},[92,74285,103],{"class":102},[92,74287,69639],{"class":207},[92,74289,109],{"class":102},[92,74291,74292,74294,74296,74298,74300,74302,74304,74306],{"class":94,"line":49590},[92,74293,11201],{"class":98},[92,74295,15669],{"class":151},[92,74297,13544],{"class":98},[92,74299,54376],{"class":102},[92,74301,54379],{"class":1942},[92,74303,103],{"class":102},[92,74305,69658],{"class":207},[92,74307,109],{"class":102},[92,74309,74311,74313,74315,74317,74319,74321,74323,74325],{"class":94,"line":74310},231,[92,74312,11201],{"class":98},[92,74314,69687],{"class":151},[92,74316,13544],{"class":98},[92,74318,54376],{"class":102},[92,74320,54379],{"class":1942},[92,74322,103],{"class":102},[92,74324,69698],{"class":207},[92,74326,109],{"class":102},[92,74328,74330,74332,74334,74336,74338,74340,74342,74344],{"class":94,"line":74329},232,[92,74331,11201],{"class":98},[92,74333,69667],{"class":151},[92,74335,13544],{"class":98},[92,74337,54376],{"class":102},[92,74339,54379],{"class":1942},[92,74341,103],{"class":102},[92,74343,69678],{"class":207},[92,74345,109],{"class":102},[92,74347,74349,74351,74353,74355,74357,74359,74361,74363],{"class":94,"line":74348},233,[92,74350,11201],{"class":98},[92,74352,69707],{"class":151},[92,74354,13544],{"class":98},[92,74356,54376],{"class":102},[92,74358,54379],{"class":1942},[92,74360,103],{"class":102},[92,74362,69718],{"class":207},[92,74364,109],{"class":102},[92,74366,74368],{"class":94,"line":74367},234,[92,74369,2379],{"emptyLinePlaceholder":17},[92,74371,74373],{"class":94,"line":74372},235,[92,74374,74375],{"class":161},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[92,74377,74379,74381,74383,74385,74387,74389,74391,74393,74395],{"class":94,"line":74378},236,[92,74380,69819],{"class":102},[92,74382,57793],{"class":1942},[92,74384,103],{"class":102},[92,74386,69826],{"class":207},[92,74388,12415],{"class":102},[92,74390,54429],{"class":98},[92,74392,1637],{"class":102},[92,74394,177],{"class":5196},[92,74396,12422],{"class":102},[92,74398,74400],{"class":94,"line":74399},237,[92,74401,74402],{"class":161},"      \u002F\u002F 禁止浏览器跳转\n",[92,74404,74406,74408,74410],{"class":94,"line":74405},238,[92,74407,69846],{"class":102},[92,74409,69849],{"class":1942},[92,74411,1955],{"class":102},[92,74413,74415],{"class":94,"line":74414},239,[92,74416,74417],{"class":161},"      \u002F\u002F 非空判断\n",[92,74419,74421],{"class":94,"line":74420},240,[92,74422,74423],{"class":161},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[92,74425,74427],{"class":94,"line":74426},241,[92,74428,74429],{"class":161},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[92,74431,74433,74435,74437,74439,74442,74444,74447,74450,74452,74454],{"class":94,"line":74432},242,[92,74434,54460],{"class":98},[92,74436,1637],{"class":102},[92,74438,329],{"class":98},[92,74440,74441],{"class":102},"uname.value ",[92,74443,71337],{"class":98},[92,74445,74446],{"class":98}," !",[92,74448,74449],{"class":102},"age.value ",[92,74451,71337],{"class":98},[92,74453,74446],{"class":98},[92,74455,74456],{"class":102},"salary.value) {\n",[92,74458,74460,74462,74464,74466,74468],{"class":94,"line":74459},243,[92,74461,14732],{"class":98},[92,74463,69920],{"class":1942},[92,74465,103],{"class":102},[92,74467,69925],{"class":207},[92,74469,109],{"class":102},[92,74471,74473],{"class":94,"line":74472},244,[92,74474,52378],{"class":102},[92,74476,74478,74480,74482],{"class":94,"line":74477},245,[92,74479,57987],{"class":102},[92,74481,51864],{"class":1942},[92,74483,74484],{"class":102},"({\n",[92,74486,74488],{"class":94,"line":74487},246,[92,74489,74490],{"class":161},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[92,74492,74494],{"class":94,"line":74493},247,[92,74495,74496],{"class":161},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[92,74498,74500],{"class":94,"line":74499},248,[92,74501,74502],{"class":161},"        \u002F\u002F 对象的序号应为数组长度+1\n",[92,74504,74506],{"class":94,"line":74505},249,[92,74507,74508],{"class":161},"        \u002F\u002F unameId: arr.length + 1,\n",[92,74510,74512],{"class":94,"line":74511},250,[92,74513,2379],{"emptyLinePlaceholder":17},[92,74515,74517],{"class":94,"line":74516},251,[92,74518,74519],{"class":161},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[92,74521,74523],{"class":94,"line":74522},252,[92,74524,74525],{"class":161},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[92,74527,74529],{"class":94,"line":74528},253,[92,74530,74531],{"class":161},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[92,74533,74535],{"class":94,"line":74534},254,[92,74536,74537],{"class":161},"        \u002F\u002F 0当假看\n",[92,74539,74541,74544,74546,74548,74551,74553,74555,74557,74560,74562,74564,74567,74569],{"class":94,"line":74540},255,[92,74542,74543],{"class":102},"        unameId: arr.",[92,74545,51948],{"class":151},[92,74547,73794],{"class":98},[92,74549,74550],{"class":102}," arr[arr.",[92,74552,51948],{"class":151},[92,74554,52251],{"class":98},[92,74556,25099],{"class":151},[92,74558,74559],{"class":102},"].unameId ",[92,74561,584],{"class":98},[92,74563,25099],{"class":151},[92,74565,74566],{"class":98}," :",[92,74568,25099],{"class":151},[92,74570,31447],{"class":102},[92,74572,74574],{"class":94,"line":74573},256,[92,74575,69973],{"class":102},[92,74577,74579],{"class":94,"line":74578},257,[92,74580,69978],{"class":102},[92,74582,74584],{"class":94,"line":74583},258,[92,74585,69988],{"class":102},[92,74587,74589],{"class":94,"line":74588},259,[92,74590,69983],{"class":102},[92,74592,74594],{"class":94,"line":74593},260,[92,74595,74596],{"class":102},"        city: city.value,\n",[92,74598,74600],{"class":94,"line":74599},261,[92,74601,74602],{"class":161},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[92,74604,74606],{"class":94,"line":74605},262,[92,74607,74608],{"class":161},"        \u002F\u002F time: new Date().toDateString()\n",[92,74610,74612,74615,74618],{"class":94,"line":74611},263,[92,74613,74614],{"class":102},"        time: ",[92,74616,74617],{"class":1942},"getTime",[92,74619,1955],{"class":102},[92,74621,74623],{"class":94,"line":74622},264,[92,74624,64795],{"class":102},[92,74626,74628],{"class":94,"line":74627},265,[92,74629,74630],{"class":161},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[92,74632,74634,74636],{"class":94,"line":74633},266,[92,74635,70048],{"class":1942},[92,74637,1955],{"class":102},[92,74639,74641,74643,74645,74647,74649],{"class":94,"line":74640},267,[92,74642,70031],{"class":151},[92,74644,661],{"class":102},[92,74646,70036],{"class":1942},[92,74648,13030],{"class":102},[92,74650,74651],{"class":161},"\u002F\u002F重置表单\n",[92,74653,74655],{"class":94,"line":74654},268,[92,74656,74657],{"class":161},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[92,74659,74661,74664,74666,74668,74671,74673,74675,74677,74679],{"class":94,"line":74660},269,[92,74662,74663],{"class":102},"      localStorage.",[92,74665,71634],{"class":1942},[92,74667,103],{"class":102},[92,74669,74670],{"class":207},"'data'",[92,74672,12415],{"class":102},[92,74674,71644],{"class":151},[92,74676,661],{"class":102},[92,74678,71649],{"class":1942},[92,74680,74681],{"class":102},"(arr))\n",[92,74683,74685],{"class":94,"line":74684},270,[92,74686,33442],{"class":102},[92,74688,74690],{"class":94,"line":74689},271,[92,74691,2379],{"emptyLinePlaceholder":17},[92,74693,74695],{"class":94,"line":74694},272,[92,74696,74697],{"class":161},"    \u002F\u002F 3.删除业务\n",[92,74699,74701],{"class":94,"line":74700},273,[92,74702,74703],{"class":161},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[92,74705,74707,74709,74711,74713,74715,74717,74719,74721,74723],{"class":94,"line":74706},274,[92,74708,70321],{"class":102},[92,74710,57793],{"class":1942},[92,74712,103],{"class":102},[92,74714,57798],{"class":207},[92,74716,12415],{"class":102},[92,74718,54429],{"class":98},[92,74720,1637],{"class":102},[92,74722,177],{"class":5196},[92,74724,12422],{"class":102},[92,74726,74728],{"class":94,"line":74727},275,[92,74729,74730],{"class":161},"      \u002F\u002F 判断是否点击的是删除按钮\n",[92,74732,74734,74736,74738,74740,74742],{"class":94,"line":74733},276,[92,74735,54460],{"class":98},[92,74737,67014],{"class":102},[92,74739,54466],{"class":98},[92,74741,68236],{"class":207},[92,74743,12422],{"class":102},[92,74745,74747],{"class":94,"line":74746},277,[92,74748,74749],{"class":161},"        \u002F\u002F alert(1)\n",[92,74751,74753],{"class":94,"line":74752},278,[92,74754,74755],{"class":161},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[92,74757,74759],{"class":94,"line":74758},279,[92,74760,74761],{"class":161},"        \u002F\u002F console.log(e.target)\n",[92,74763,74765],{"class":94,"line":74764},280,[92,74766,74767],{"class":161},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[92,74769,74771],{"class":94,"line":74770},281,[92,74772,2379],{"emptyLinePlaceholder":17},[92,74774,74776],{"class":94,"line":74775},282,[92,74777,74778],{"class":161},"        \u002F\u002F 确认框，确然是否真的要删除\n",[92,74780,74782],{"class":94,"line":74781},283,[92,74783,74784],{"class":161},"        \u002F\u002F confirm()为确认框\n",[92,74786,74788],{"class":94,"line":74787},284,[92,74789,74790],{"class":161},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[92,74792,74794,74796,74798,74801,74803,74806],{"class":94,"line":74793},285,[92,74795,2476],{"class":98},[92,74797,1637],{"class":102},[92,74799,74800],{"class":1942},"confirm",[92,74802,103],{"class":102},[92,74804,74805],{"class":207},"'您确定要删除这条数据吗？'",[92,74807,74808],{"class":102},")) {\n",[92,74810,74812,74815,74817,74819,74821],{"class":94,"line":74811},286,[92,74813,74814],{"class":102},"          arr.",[92,74816,57990],{"class":1942},[92,74818,70374],{"class":102},[92,74820,320],{"class":151},[92,74822,109],{"class":102},[92,74824,74826],{"class":94,"line":74825},287,[92,74827,74828],{"class":161},"          \u002F\u002F 3.4 重新渲染页面\n",[92,74830,74832,74835],{"class":94,"line":74831},288,[92,74833,74834],{"class":1942},"          render",[92,74836,1955],{"class":102},[92,74838,74840],{"class":94,"line":74839},289,[92,74841,74842],{"class":161},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[92,74844,74846,74849,74851,74853,74855,74857,74859,74861,74863],{"class":94,"line":74845},290,[92,74847,74848],{"class":102},"          localStorage.",[92,74850,71634],{"class":1942},[92,74852,103],{"class":102},[92,74854,74670],{"class":207},[92,74856,12415],{"class":102},[92,74858,71644],{"class":151},[92,74860,661],{"class":102},[92,74862,71649],{"class":1942},[92,74864,74681],{"class":102},[92,74866,74868],{"class":94,"line":74867},291,[92,74869,2508],{"class":102},[92,74871,74873],{"class":94,"line":74872},292,[92,74874,52378],{"class":102},[92,74876,74878],{"class":94,"line":74877},293,[92,74879,2379],{"emptyLinePlaceholder":17},[92,74881,74883],{"class":94,"line":74882},294,[92,74884,33442],{"class":102},[92,74886,74888],{"class":94,"line":74887},295,[92,74889,2379],{"emptyLinePlaceholder":17},[92,74891,74893,74895,74897],{"class":94,"line":74892},296,[92,74894,52397],{"class":102},[92,74896,51793],{"class":51280},[92,74898,51287],{"class":102},[92,74900,74902,74904,74906],{"class":94,"line":74901},297,[92,74903,51765],{"class":102},[92,74905,51780],{"class":51280},[92,74907,51287],{"class":102},[92,74909,74911],{"class":94,"line":74910},298,[92,74912,2379],{"emptyLinePlaceholder":17},[92,74914,74916,74918,74920],{"class":94,"line":74915},299,[92,74917,51765],{"class":102},[92,74919,50615],{"class":51280},[92,74921,51287],{"class":102},[33,74923,74925],{"id":74924},"_36-正则表达式","3.6 正则表达式",[38,74927,74928],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[38,74930,74931],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[38,74933,74934],{},"正则表达式的作用：",[1110,74936,74937,74944,74950],{},[49,74938,74939,74940,74943],{},"表单验证（ ",[252,74941,74942],{},"匹配"," ）",[49,74945,74946,74947,74943],{},"过滤敏感词（ ",[252,74948,74949],{},"替换",[49,74951,74952,74953,74943],{},"字符串中提取我们想要的部分（ ",[252,74954,74955],{},"提取",[63,74957,74959],{"id":74958},"_361-语法","3.6.1 语法",[38,74961,74962],{},"正则表达式使用步骤：",[46,74964,74965,74968],{},[49,74966,74967],{},"定义规则",[49,74969,74970],{},"查找是否匹配",[38,74972,74973],{},"正则表达式里边不需要写引号",[38,74975,74976],{},[1441,74977],{"alt":10,"src":74978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[38,74980,74981],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[38,74983,74984],{},"reg.test(str)",[38,74986,74987],{},[1441,74988],{"alt":10,"src":74989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[38,74991,74992],{},[1441,74993],{"alt":10,"src":74994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[63,74996,74998],{"id":74997},"_362-元字符","3.6.2 元字符",[46,75000,75001,75004,75007,75010,75017],{},[49,75002,75003],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[49,75005,75006],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[49,75008,75009],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[49,75011,75012,75013],{},"正则验证工具：",[341,75014,75015],{"href":75015,"rel":75016},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23845],[49,75018,75019],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21978,75021,75023],{"id":75022},"_3621-边界符","3.6.2.1 边界符",[38,75025,75026],{},[1441,75027],{"alt":10,"src":75028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[38,75030,75031],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[38,75033,75034],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[38,75036,75037],{},"只匹配一次",[38,75039,75040],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21978,75042,75044],{"id":75043},"_3622-量词","3.6.2.2 量词",[38,75046,75047],{},[1441,75048],{"alt":10,"src":75049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[38,75051,75052],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21978,75054,75056],{"id":75055},"_3623-元字符","3.6.2.3 元字符",[38,75058,75059],{},[1441,75060],{"alt":10,"src":75061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[38,75063,75064],{},"匹配的是a或b或c []只选一个",[38,75066,75067],{},[1441,75068],{"alt":10,"src":75069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[38,75071,75072],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[38,75074,75075],{},[1441,75076],{"alt":10,"src":75077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[38,75079,75080],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[38,75082,75083],{},[1441,75084],{"alt":10,"src":75085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[83,75087,75089],{"className":50613,"code":75088,"language":50615,"meta":10,"style":10},"\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",[89,75090,75091,75101,75115,75119,75127,75141,75161,75173,75181,75185,75193,75201,75206,75237,75264,75292,75296,75301,75329,75360,75365,75370,75401,75433,75465,75469,75474,75505,75535,75565,75569,75574,75605,75636,75666,75696,75700,75705,75738,75742,75747,75778,75809,75813,75818,75849,75879,75910,75914,75919,75951,75982,76013,76040,76071,76103,76136,76167,76198,76230,76261,76269,76277,76281],{"__ignoreMap":10},[92,75092,75093,75095,75097,75099],{"class":94,"line":95},[92,75094,51277],{"class":102},[92,75096,51281],{"class":51280},[92,75098,51284],{"class":1942},[92,75100,51287],{"class":102},[92,75102,75103,75105,75107,75109,75111,75113],{"class":94,"line":11},[92,75104,1013],{"class":102},[92,75106,50615],{"class":51280},[92,75108,51296],{"class":1942},[92,75110,148],{"class":102},[92,75112,51301],{"class":207},[92,75114,51287],{"class":102},[92,75116,75117],{"class":94,"line":1158},[92,75118,2379],{"emptyLinePlaceholder":17},[92,75120,75121,75123,75125],{"class":94,"line":1173},[92,75122,1013],{"class":102},[92,75124,51314],{"class":51280},[92,75126,51287],{"class":102},[92,75128,75129,75131,75133,75135,75137,75139],{"class":94,"line":1179},[92,75130,52124],{"class":102},[92,75132,51324],{"class":51280},[92,75134,51327],{"class":1942},[92,75136,148],{"class":102},[92,75138,51332],{"class":207},[92,75140,51287],{"class":102},[92,75142,75143,75145,75147,75149,75151,75153,75155,75157,75159],{"class":94,"line":1193},[92,75144,52124],{"class":102},[92,75146,51324],{"class":51280},[92,75148,14900],{"class":1942},[92,75150,148],{"class":102},[92,75152,51371],{"class":207},[92,75154,51351],{"class":1942},[92,75156,148],{"class":102},[92,75158,51378],{"class":207},[92,75160,51287],{"class":102},[92,75162,75163,75165,75167,75169,75171],{"class":94,"line":1199},[92,75164,52124],{"class":102},[92,75166,51387],{"class":51280},[92,75168,51390],{"class":102},[92,75170,51387],{"class":51280},[92,75172,51287],{"class":102},[92,75174,75175,75177,75179],{"class":94,"line":1290},[92,75176,51765],{"class":102},[92,75178,51314],{"class":51280},[92,75180,51287],{"class":102},[92,75182,75183],{"class":94,"line":1296},[92,75184,2379],{"emptyLinePlaceholder":17},[92,75186,75187,75189,75191],{"class":94,"line":1308},[92,75188,1013],{"class":102},[92,75190,51780],{"class":51280},[92,75192,51287],{"class":102},[92,75194,75195,75197,75199],{"class":94,"line":1591},[92,75196,52124],{"class":102},[92,75198,51793],{"class":51280},[92,75200,51287],{"class":102},[92,75202,75203],{"class":94,"line":1596},[92,75204,75205],{"class":161},"    \u002F\u002F 元字符中\n",[92,75207,75208,75210,75212,75214,75216,75219,75221,75223,75226,75228,75231,75234],{"class":94,"line":1602},[92,75209,73733],{"class":102},[92,75211,58227],{"class":1942},[92,75213,103],{"class":102},[92,75215,687],{"class":207},[92,75217,75218],{"class":47958},"哈",[92,75220,687],{"class":207},[92,75222,661],{"class":102},[92,75224,75225],{"class":1942},"test",[92,75227,103],{"class":102},[92,75229,75230],{"class":207},"'哈'",[92,75232,75233],{"class":102},"))  ",[92,75235,75236],{"class":161},"\u002F\u002Ftrue\n",[92,75238,75239,75241,75243,75245,75247,75249,75251,75253,75255,75257,75260,75262],{"class":94,"line":1607},[92,75240,73733],{"class":102},[92,75242,58227],{"class":1942},[92,75244,103],{"class":102},[92,75246,687],{"class":207},[92,75248,75218],{"class":47958},[92,75250,687],{"class":207},[92,75252,661],{"class":102},[92,75254,75225],{"class":1942},[92,75256,103],{"class":102},[92,75258,75259],{"class":207},"'哈哈'",[92,75261,75233],{"class":102},[92,75263,75236],{"class":161},[92,75265,75266,75268,75270,75272,75274,75276,75278,75280,75282,75284,75287,75290],{"class":94,"line":1621},[92,75267,73733],{"class":102},[92,75269,58227],{"class":1942},[92,75271,103],{"class":102},[92,75273,687],{"class":207},[92,75275,75218],{"class":47958},[92,75277,687],{"class":207},[92,75279,661],{"class":102},[92,75281,75225],{"class":1942},[92,75283,103],{"class":102},[92,75285,75286],{"class":207},"'二哈'",[92,75288,75289],{"class":102},"))   ",[92,75291,75236],{"class":161},[92,75293,75294],{"class":94,"line":1626},[92,75295,2379],{"emptyLinePlaceholder":17},[92,75297,75298],{"class":94,"line":1632},[92,75299,75300],{"class":161},"    \u002F\u002F 1.边界符\n",[92,75302,75303,75305,75307,75309,75311,75313,75315,75317,75319,75321,75323,75325,75327],{"class":94,"line":1653},[92,75304,73733],{"class":102},[92,75306,58227],{"class":1942},[92,75308,103],{"class":102},[92,75310,687],{"class":207},[92,75312,1069],{"class":98},[92,75314,75218],{"class":47958},[92,75316,687],{"class":207},[92,75318,661],{"class":102},[92,75320,75225],{"class":1942},[92,75322,103],{"class":102},[92,75324,75230],{"class":207},[92,75326,75233],{"class":102},[92,75328,75236],{"class":161},[92,75330,75331,75333,75335,75337,75339,75341,75343,75345,75347,75349,75351,75353,75355,75357],{"class":94,"line":1658},[92,75332,73733],{"class":102},[92,75334,58227],{"class":1942},[92,75336,103],{"class":102},[92,75338,687],{"class":207},[92,75340,1069],{"class":98},[92,75342,75218],{"class":47958},[92,75344,405],{"class":98},[92,75346,687],{"class":207},[92,75348,661],{"class":102},[92,75350,75225],{"class":1942},[92,75352,103],{"class":102},[92,75354,75259],{"class":207},[92,75356,75233],{"class":102},[92,75358,75359],{"class":161},"\u002F\u002Ffalse\n",[92,75361,75362],{"class":94,"line":1672},[92,75363,75364],{"class":161},"    \u002F\u002F 2.量词\n",[92,75366,75367],{"class":94,"line":1677},[92,75368,75369],{"class":161},"    \u002F\u002F 量词 * 类似于 >= 0\n",[92,75371,75372,75374,75376,75378,75380,75382,75384,75387,75389,75391,75393,75395,75397,75399],{"class":94,"line":1706},[92,75373,73733],{"class":102},[92,75375,58227],{"class":1942},[92,75377,103],{"class":102},[92,75379,687],{"class":207},[92,75381,1069],{"class":98},[92,75383,75218],{"class":47958},[92,75385,75386],{"class":98},"*$",[92,75388,687],{"class":207},[92,75390,661],{"class":102},[92,75392,75225],{"class":1942},[92,75394,103],{"class":102},[92,75396,75259],{"class":207},[92,75398,75233],{"class":102},[92,75400,75236],{"class":161},[92,75402,75403,75405,75407,75409,75411,75413,75415,75417,75419,75421,75423,75425,75428,75430],{"class":94,"line":1711},[92,75404,73733],{"class":102},[92,75406,58227],{"class":1942},[92,75408,103],{"class":102},[92,75410,687],{"class":207},[92,75412,1069],{"class":98},[92,75414,75218],{"class":47958},[92,75416,75386],{"class":98},[92,75418,687],{"class":207},[92,75420,661],{"class":102},[92,75422,75225],{"class":1942},[92,75424,103],{"class":102},[92,75426,75427],{"class":207},"'二哈好傻'",[92,75429,75233],{"class":102},[92,75431,75432],{"class":161},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[92,75434,75435,75437,75439,75441,75443,75445,75447,75449,75451,75453,75455,75457,75460,75462],{"class":94,"line":1728},[92,75436,73733],{"class":102},[92,75438,58227],{"class":1942},[92,75440,103],{"class":102},[92,75442,687],{"class":207},[92,75444,1069],{"class":98},[92,75446,75218],{"class":47958},[92,75448,75386],{"class":98},[92,75450,687],{"class":207},[92,75452,661],{"class":102},[92,75454,75225],{"class":1942},[92,75456,103],{"class":102},[92,75458,75459],{"class":207},"'哈好哈'",[92,75461,75289],{"class":102},[92,75463,75464],{"class":161},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[92,75466,75467],{"class":94,"line":1733},[92,75468,2379],{"emptyLinePlaceholder":17},[92,75470,75471],{"class":94,"line":1738},[92,75472,75473],{"class":161},"    \u002F\u002F +类似于>=1\n",[92,75475,75476,75478,75480,75482,75484,75486,75488,75491,75493,75495,75497,75499,75501,75503],{"class":94,"line":1743},[92,75477,73733],{"class":102},[92,75479,58227],{"class":1942},[92,75481,103],{"class":102},[92,75483,687],{"class":207},[92,75485,1069],{"class":98},[92,75487,75218],{"class":47958},[92,75489,75490],{"class":98},"+$",[92,75492,687],{"class":207},[92,75494,661],{"class":102},[92,75496,75225],{"class":1942},[92,75498,103],{"class":102},[92,75500,75259],{"class":207},[92,75502,75233],{"class":102},[92,75504,75236],{"class":161},[92,75506,75507,75509,75511,75513,75515,75517,75519,75521,75523,75525,75527,75529,75531,75533],{"class":94,"line":1757},[92,75508,73733],{"class":102},[92,75510,58227],{"class":1942},[92,75512,103],{"class":102},[92,75514,687],{"class":207},[92,75516,1069],{"class":98},[92,75518,75218],{"class":47958},[92,75520,75490],{"class":98},[92,75522,687],{"class":207},[92,75524,661],{"class":102},[92,75526,75225],{"class":1942},[92,75528,103],{"class":102},[92,75530,75427],{"class":207},[92,75532,75233],{"class":102},[92,75534,75432],{"class":161},[92,75536,75537,75539,75541,75543,75545,75547,75549,75551,75553,75555,75557,75559,75561,75563],{"class":94,"line":1762},[92,75538,73733],{"class":102},[92,75540,58227],{"class":1942},[92,75542,103],{"class":102},[92,75544,687],{"class":207},[92,75546,1069],{"class":98},[92,75548,75218],{"class":47958},[92,75550,75490],{"class":98},[92,75552,687],{"class":207},[92,75554,661],{"class":102},[92,75556,75225],{"class":1942},[92,75558,103],{"class":102},[92,75560,75459],{"class":207},[92,75562,75289],{"class":102},[92,75564,75359],{"class":161},[92,75566,75567],{"class":94,"line":2556},[92,75568,2379],{"emptyLinePlaceholder":17},[92,75570,75571],{"class":94,"line":2570},[92,75572,75573],{"class":161},"    \u002F\u002F ?类似于0次或一次\n",[92,75575,75576,75578,75580,75582,75584,75586,75589,75591,75593,75595,75597,75599,75601,75603],{"class":94,"line":2578},[92,75577,73733],{"class":102},[92,75579,58227],{"class":1942},[92,75581,103],{"class":102},[92,75583,687],{"class":207},[92,75585,1069],{"class":98},[92,75587,75588],{"class":47958},"哈？",[92,75590,405],{"class":98},[92,75592,687],{"class":207},[92,75594,661],{"class":102},[92,75596,75225],{"class":1942},[92,75598,103],{"class":102},[92,75600,74208],{"class":207},[92,75602,75289],{"class":102},[92,75604,75236],{"class":161},[92,75606,75607,75609,75611,75613,75615,75617,75619,75622,75624,75626,75628,75630,75632,75634],{"class":94,"line":2583},[92,75608,73733],{"class":102},[92,75610,58227],{"class":1942},[92,75612,103],{"class":102},[92,75614,687],{"class":207},[92,75616,1069],{"class":98},[92,75618,75218],{"class":47958},[92,75620,75621],{"class":98},"?$",[92,75623,687],{"class":207},[92,75625,661],{"class":102},[92,75627,75225],{"class":1942},[92,75629,103],{"class":102},[92,75631,75259],{"class":207},[92,75633,75233],{"class":102},[92,75635,75359],{"class":161},[92,75637,75638,75640,75642,75644,75646,75648,75650,75652,75654,75656,75658,75660,75662,75664],{"class":94,"line":2589},[92,75639,73733],{"class":102},[92,75641,58227],{"class":1942},[92,75643,103],{"class":102},[92,75645,687],{"class":207},[92,75647,1069],{"class":98},[92,75649,75218],{"class":47958},[92,75651,75621],{"class":98},[92,75653,687],{"class":207},[92,75655,661],{"class":102},[92,75657,75225],{"class":1942},[92,75659,103],{"class":102},[92,75661,75427],{"class":207},[92,75663,75233],{"class":102},[92,75665,75432],{"class":161},[92,75667,75668,75670,75672,75674,75676,75678,75680,75682,75684,75686,75688,75690,75692,75694],{"class":94,"line":2595},[92,75669,73733],{"class":102},[92,75671,58227],{"class":1942},[92,75673,103],{"class":102},[92,75675,687],{"class":207},[92,75677,1069],{"class":98},[92,75679,75218],{"class":47958},[92,75681,75621],{"class":98},[92,75683,687],{"class":207},[92,75685,661],{"class":102},[92,75687,75225],{"class":1942},[92,75689,103],{"class":102},[92,75691,75459],{"class":207},[92,75693,75233],{"class":102},[92,75695,75359],{"class":161},[92,75697,75698],{"class":94,"line":2600},[92,75699,2379],{"emptyLinePlaceholder":17},[92,75701,75702],{"class":94,"line":7928},[92,75703,75704],{"class":161},"    \u002F\u002F {n}写几，就必须出现几次\n",[92,75706,75707,75709,75711,75713,75715,75717,75719,75722,75724,75726,75728,75730,75733,75736],{"class":94,"line":7952},[92,75708,73733],{"class":102},[92,75710,58227],{"class":1942},[92,75712,103],{"class":102},[92,75714,687],{"class":207},[92,75716,1069],{"class":98},[92,75718,75218],{"class":47958},[92,75720,75721],{"class":98},"{4}$",[92,75723,687],{"class":207},[92,75725,661],{"class":102},[92,75727,75225],{"class":1942},[92,75729,103],{"class":102},[92,75731,75732],{"class":207},"'哈哈哈哈'",[92,75734,75735],{"class":102},")) ",[92,75737,75236],{"class":161},[92,75739,75740],{"class":94,"line":7957},[92,75741,2379],{"emptyLinePlaceholder":17},[92,75743,75744],{"class":94,"line":7963},[92,75745,75746],{"class":161},"    \u002F\u002F {n,}大于等于n次\n",[92,75748,75749,75751,75753,75755,75757,75759,75761,75764,75766,75768,75770,75772,75774,75776],{"class":94,"line":7990},[92,75750,73733],{"class":102},[92,75752,58227],{"class":1942},[92,75754,103],{"class":102},[92,75756,687],{"class":207},[92,75758,1069],{"class":98},[92,75760,75218],{"class":47958},[92,75762,75763],{"class":98},"{4,}$",[92,75765,687],{"class":207},[92,75767,661],{"class":102},[92,75769,75225],{"class":1942},[92,75771,103],{"class":102},[92,75773,75732],{"class":207},[92,75775,75735],{"class":102},[92,75777,75236],{"class":161},[92,75779,75780,75782,75784,75786,75788,75790,75792,75794,75796,75798,75800,75802,75805,75807],{"class":94,"line":7995},[92,75781,73733],{"class":102},[92,75783,58227],{"class":1942},[92,75785,103],{"class":102},[92,75787,687],{"class":207},[92,75789,1069],{"class":98},[92,75791,75218],{"class":47958},[92,75793,75763],{"class":98},[92,75795,687],{"class":207},[92,75797,661],{"class":102},[92,75799,75225],{"class":1942},[92,75801,103],{"class":102},[92,75803,75804],{"class":207},"'哈哈哈哈哈'",[92,75806,75735],{"class":102},[92,75808,75236],{"class":161},[92,75810,75811],{"class":94,"line":8001},[92,75812,2379],{"emptyLinePlaceholder":17},[92,75814,75815],{"class":94,"line":8013},[92,75816,75817],{"class":161},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[92,75819,75820,75822,75824,75826,75828,75830,75832,75835,75837,75839,75841,75843,75845,75847],{"class":94,"line":8025},[92,75821,73733],{"class":102},[92,75823,58227],{"class":1942},[92,75825,103],{"class":102},[92,75827,687],{"class":207},[92,75829,1069],{"class":98},[92,75831,75218],{"class":47958},[92,75833,75834],{"class":98},"{4,6}$",[92,75836,687],{"class":207},[92,75838,661],{"class":102},[92,75840,75225],{"class":1942},[92,75842,103],{"class":102},[92,75844,75732],{"class":207},[92,75846,75735],{"class":102},[92,75848,75236],{"class":161},[92,75850,75851,75853,75855,75857,75859,75861,75863,75865,75867,75869,75871,75873,75875,75877],{"class":94,"line":8037},[92,75852,73733],{"class":102},[92,75854,58227],{"class":1942},[92,75856,103],{"class":102},[92,75858,687],{"class":207},[92,75860,1069],{"class":98},[92,75862,75218],{"class":47958},[92,75864,75834],{"class":98},[92,75866,687],{"class":207},[92,75868,661],{"class":102},[92,75870,75225],{"class":1942},[92,75872,103],{"class":102},[92,75874,75804],{"class":207},[92,75876,75735],{"class":102},[92,75878,75236],{"class":161},[92,75880,75881,75883,75885,75887,75889,75891,75893,75895,75897,75899,75901,75903,75906,75908],{"class":94,"line":9696},[92,75882,73733],{"class":102},[92,75884,58227],{"class":1942},[92,75886,103],{"class":102},[92,75888,687],{"class":207},[92,75890,1069],{"class":98},[92,75892,75218],{"class":47958},[92,75894,75834],{"class":98},[92,75896,687],{"class":207},[92,75898,661],{"class":102},[92,75900,75225],{"class":1942},[92,75902,103],{"class":102},[92,75904,75905],{"class":207},"'哈哈哈哈哈哈哈'",[92,75907,75735],{"class":102},[92,75909,75359],{"class":161},[92,75911,75912],{"class":94,"line":9721},[92,75913,2379],{"emptyLinePlaceholder":17},[92,75915,75916],{"class":94,"line":9744},[92,75917,75918],{"class":161},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[92,75920,75921,75923,75925,75927,75929,75931,75934,75936,75938,75940,75942,75944,75947,75949],{"class":94,"line":9768},[92,75922,73733],{"class":102},[92,75924,58227],{"class":1942},[92,75926,103],{"class":102},[92,75928,687],{"class":207},[92,75930,1069],{"class":98},[92,75932,75933],{"class":151},"[abc]",[92,75935,405],{"class":98},[92,75937,687],{"class":207},[92,75939,661],{"class":102},[92,75941,75225],{"class":1942},[92,75943,103],{"class":102},[92,75945,75946],{"class":207},"'a'",[92,75948,75233],{"class":102},[92,75950,75236],{"class":161},[92,75952,75953,75955,75957,75959,75961,75963,75965,75967,75969,75971,75973,75975,75978,75980],{"class":94,"line":9773},[92,75954,73733],{"class":102},[92,75956,58227],{"class":1942},[92,75958,103],{"class":102},[92,75960,687],{"class":207},[92,75962,1069],{"class":98},[92,75964,75933],{"class":151},[92,75966,405],{"class":98},[92,75968,687],{"class":207},[92,75970,661],{"class":102},[92,75972,75225],{"class":1942},[92,75974,103],{"class":102},[92,75976,75977],{"class":207},"'b'",[92,75979,75233],{"class":102},[92,75981,75236],{"class":161},[92,75983,75984,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76009,76011],{"class":94,"line":9778},[92,75985,73733],{"class":102},[92,75987,58227],{"class":1942},[92,75989,103],{"class":102},[92,75991,687],{"class":207},[92,75993,1069],{"class":98},[92,75995,75933],{"class":151},[92,75997,405],{"class":98},[92,75999,687],{"class":207},[92,76001,661],{"class":102},[92,76003,75225],{"class":1942},[92,76005,103],{"class":102},[92,76007,76008],{"class":207},"'c'",[92,76010,75233],{"class":102},[92,76012,75236],{"class":161},[92,76014,76015,76017,76019,76021,76023,76025,76027,76029,76031,76033,76036,76038],{"class":94,"line":9783},[92,76016,73733],{"class":102},[92,76018,58227],{"class":1942},[92,76020,103],{"class":102},[92,76022,687],{"class":207},[92,76024,75933],{"class":151},[92,76026,687],{"class":207},[92,76028,661],{"class":102},[92,76030,75225],{"class":1942},[92,76032,103],{"class":102},[92,76034,76035],{"class":207},"'ab'",[92,76037,75233],{"class":102},[92,76039,75236],{"class":161},[92,76041,76042,76044,76046,76048,76050,76052,76054,76056,76058,76060,76062,76064,76066,76068],{"class":94,"line":9792},[92,76043,73733],{"class":102},[92,76045,58227],{"class":1942},[92,76047,103],{"class":102},[92,76049,687],{"class":207},[92,76051,1069],{"class":98},[92,76053,75933],{"class":151},[92,76055,405],{"class":98},[92,76057,687],{"class":207},[92,76059,661],{"class":102},[92,76061,75225],{"class":1942},[92,76063,103],{"class":102},[92,76065,76035],{"class":207},[92,76067,75233],{"class":102},[92,76069,76070],{"class":161},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[92,76072,76073,76075,76077,76079,76081,76083,76085,76088,76090,76092,76094,76096,76098,76100],{"class":94,"line":9797},[92,76074,73733],{"class":102},[92,76076,58227],{"class":1942},[92,76078,103],{"class":102},[92,76080,687],{"class":207},[92,76082,1069],{"class":98},[92,76084,75933],{"class":151},[92,76086,76087],{"class":98},"{2}$",[92,76089,687],{"class":207},[92,76091,661],{"class":102},[92,76093,75225],{"class":1942},[92,76095,103],{"class":102},[92,76097,76035],{"class":207},[92,76099,75233],{"class":102},[92,76101,76102],{"class":161},"\u002F\u002Ftrue   可以选两个\n",[92,76104,76105,76107,76109,76111,76113,76115,76118,76120,76122,76124,76126,76128,76131,76133],{"class":94,"line":9803},[92,76106,73733],{"class":102},[92,76108,58227],{"class":1942},[92,76110,103],{"class":102},[92,76112,687],{"class":207},[92,76114,1069],{"class":98},[92,76116,76117],{"class":151},"[a-z]",[92,76119,405],{"class":98},[92,76121,687],{"class":207},[92,76123,661],{"class":102},[92,76125,75225],{"class":1942},[92,76127,103],{"class":102},[92,76129,76130],{"class":207},"'p'",[92,76132,75289],{"class":102},[92,76134,76135],{"class":161},"\u002F\u002Ftrue   依然只能选一个\n",[92,76137,76138,76140,76142,76144,76146,76148,76151,76153,76155,76157,76159,76161,76163,76165],{"class":94,"line":9824},[92,76139,73733],{"class":102},[92,76141,58227],{"class":1942},[92,76143,103],{"class":102},[92,76145,687],{"class":207},[92,76147,1069],{"class":98},[92,76149,76150],{"class":151},"[A-Z]",[92,76152,405],{"class":98},[92,76154,687],{"class":207},[92,76156,661],{"class":102},[92,76158,75225],{"class":1942},[92,76160,103],{"class":102},[92,76162,76130],{"class":207},[92,76164,75289],{"class":102},[92,76166,75359],{"class":161},[92,76168,76169,76171,76173,76175,76177,76179,76181,76183,76185,76187,76189,76191,76194,76196],{"class":94,"line":9830},[92,76170,73733],{"class":102},[92,76172,58227],{"class":1942},[92,76174,103],{"class":102},[92,76176,687],{"class":207},[92,76178,1069],{"class":98},[92,76180,76150],{"class":151},[92,76182,405],{"class":98},[92,76184,687],{"class":207},[92,76186,661],{"class":102},[92,76188,75225],{"class":1942},[92,76190,103],{"class":102},[92,76192,76193],{"class":207},"'P'",[92,76195,75289],{"class":102},[92,76197,75236],{"class":161},[92,76199,76200,76202,76204,76206,76208,76210,76213,76215,76217,76219,76221,76223,76226,76228],{"class":94,"line":9844},[92,76201,73733],{"class":102},[92,76203,58227],{"class":1942},[92,76205,103],{"class":102},[92,76207,687],{"class":207},[92,76209,1069],{"class":98},[92,76211,76212],{"class":151},"[0-9]",[92,76214,405],{"class":98},[92,76216,687],{"class":207},[92,76218,661],{"class":102},[92,76220,75225],{"class":1942},[92,76222,103],{"class":102},[92,76224,76225],{"class":207},"'0'",[92,76227,75289],{"class":102},[92,76229,75236],{"class":161},[92,76231,76232,76234,76236,76238,76240,76242,76245,76247,76249,76251,76253,76255,76257,76259],{"class":94,"line":9850},[92,76233,73733],{"class":102},[92,76235,58227],{"class":1942},[92,76237,103],{"class":102},[92,76239,687],{"class":207},[92,76241,1069],{"class":98},[92,76243,76244],{"class":151},"[a-zA-Z0-9]",[92,76246,405],{"class":98},[92,76248,687],{"class":207},[92,76250,661],{"class":102},[92,76252,75225],{"class":1942},[92,76254,103],{"class":102},[92,76256,76130],{"class":207},[92,76258,75233],{"class":102},[92,76260,75236],{"class":161},[92,76262,76263,76265,76267],{"class":94,"line":9877},[92,76264,52397],{"class":102},[92,76266,51793],{"class":51280},[92,76268,51287],{"class":102},[92,76270,76271,76273,76275],{"class":94,"line":9886},[92,76272,51765],{"class":102},[92,76274,51780],{"class":51280},[92,76276,51287],{"class":102},[92,76278,76279],{"class":94,"line":9892},[92,76280,2379],{"emptyLinePlaceholder":17},[92,76282,76283,76285,76287],{"class":94,"line":9900},[92,76284,51765],{"class":102},[92,76286,50615],{"class":51280},[92,76288,51287],{"class":102},[21978,76290,76292],{"id":76291},"_3624-修饰符","3.6.2.4 修饰符",[38,76294,76295],{},[1441,76296],{"alt":10,"src":76297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[38,76299,76300],{},"replace是个方法，使用的时候一定不要忘记括号()",[38,76302,76303],{},[1441,76304],{"alt":10,"src":76305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[83,76307,76309],{"className":50613,"code":76308,"language":50615,"meta":10,"style":10},"\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",[89,76310,76311,76321,76335,76343,76357,76377,76389,76397,76405,76413,76445,76476,76481,76513,76524,76557,76566,76574,76582],{"__ignoreMap":10},[92,76312,76313,76315,76317,76319],{"class":94,"line":95},[92,76314,51277],{"class":102},[92,76316,51281],{"class":51280},[92,76318,51284],{"class":1942},[92,76320,51287],{"class":102},[92,76322,76323,76325,76327,76329,76331,76333],{"class":94,"line":11},[92,76324,1013],{"class":102},[92,76326,50615],{"class":51280},[92,76328,51296],{"class":1942},[92,76330,148],{"class":102},[92,76332,51301],{"class":207},[92,76334,51287],{"class":102},[92,76336,76337,76339,76341],{"class":94,"line":1158},[92,76338,1013],{"class":102},[92,76340,51314],{"class":51280},[92,76342,51287],{"class":102},[92,76344,76345,76347,76349,76351,76353,76355],{"class":94,"line":1173},[92,76346,52124],{"class":102},[92,76348,51324],{"class":51280},[92,76350,51327],{"class":1942},[92,76352,148],{"class":102},[92,76354,51332],{"class":207},[92,76356,51287],{"class":102},[92,76358,76359,76361,76363,76365,76367,76369,76371,76373,76375],{"class":94,"line":1179},[92,76360,52124],{"class":102},[92,76362,51324],{"class":51280},[92,76364,14900],{"class":1942},[92,76366,148],{"class":102},[92,76368,51371],{"class":207},[92,76370,51351],{"class":1942},[92,76372,148],{"class":102},[92,76374,51378],{"class":207},[92,76376,51287],{"class":102},[92,76378,76379,76381,76383,76385,76387],{"class":94,"line":1193},[92,76380,52124],{"class":102},[92,76382,51387],{"class":51280},[92,76384,51390],{"class":102},[92,76386,51387],{"class":51280},[92,76388,51287],{"class":102},[92,76390,76391,76393,76395],{"class":94,"line":1199},[92,76392,51765],{"class":102},[92,76394,51314],{"class":51280},[92,76396,51287],{"class":102},[92,76398,76399,76401,76403],{"class":94,"line":1290},[92,76400,1013],{"class":102},[92,76402,51780],{"class":51280},[92,76404,51287],{"class":102},[92,76406,76407,76409,76411],{"class":94,"line":1296},[92,76408,52124],{"class":102},[92,76410,51793],{"class":51280},[92,76412,51287],{"class":102},[92,76414,76415,76417,76419,76421,76423,76425,76428,76430,76432,76434,76436,76438,76441,76443],{"class":94,"line":1308},[92,76416,73733],{"class":102},[92,76418,58227],{"class":1942},[92,76420,103],{"class":102},[92,76422,687],{"class":207},[92,76424,1069],{"class":98},[92,76426,76427],{"class":47958},"java",[92,76429,405],{"class":98},[92,76431,687],{"class":207},[92,76433,661],{"class":102},[92,76435,75225],{"class":1942},[92,76437,103],{"class":102},[92,76439,76440],{"class":207},"'java'",[92,76442,75735],{"class":102},[92,76444,75236],{"class":161},[92,76446,76447,76449,76451,76453,76455,76457,76459,76461,76463,76465,76467,76469,76472,76474],{"class":94,"line":1591},[92,76448,73733],{"class":102},[92,76450,58227],{"class":1942},[92,76452,103],{"class":102},[92,76454,687],{"class":207},[92,76456,1069],{"class":98},[92,76458,76427],{"class":47958},[92,76460,405],{"class":98},[92,76462,687],{"class":207},[92,76464,661],{"class":102},[92,76466,75225],{"class":1942},[92,76468,103],{"class":102},[92,76470,76471],{"class":207},"'Java'",[92,76473,75735],{"class":102},[92,76475,75359],{"class":161},[92,76477,76478],{"class":94,"line":1596},[92,76479,76480],{"class":161},"    \u002F\u002F 不区分大小写、\n",[92,76482,76483,76485,76487,76489,76491,76493,76495,76497,76499,76501,76503,76505,76507,76509,76511],{"class":94,"line":1602},[92,76484,73733],{"class":102},[92,76486,58227],{"class":1942},[92,76488,103],{"class":102},[92,76490,687],{"class":207},[92,76492,1069],{"class":98},[92,76494,76427],{"class":47958},[92,76496,405],{"class":98},[92,76498,687],{"class":207},[92,76500,544],{"class":98},[92,76502,661],{"class":102},[92,76504,75225],{"class":1942},[92,76506,103],{"class":102},[92,76508,76471],{"class":207},[92,76510,75735],{"class":102},[92,76512,75236],{"class":161},[92,76514,76515,76517,76519,76521],{"class":94,"line":1607},[92,76516,11201],{"class":98},[92,76518,73899],{"class":151},[92,76520,13544],{"class":98},[92,76522,76523],{"class":207}," 'java是一门编程语言，学完java工资很高'\n",[92,76525,76526,76528,76531,76533,76536,76539,76541,76543,76545,76547,76550,76552,76555],{"class":94,"line":1621},[92,76527,11201],{"class":98},[92,76529,76530],{"class":151}," result",[92,76532,13544],{"class":98},[92,76534,76535],{"class":102}," str.",[92,76537,76538],{"class":1942},"replace",[92,76540,103],{"class":102},[92,76542,687],{"class":207},[92,76544,76427],{"class":47958},[92,76546,687],{"class":207},[92,76548,76549],{"class":98},"ig",[92,76551,12415],{"class":102},[92,76553,76554],{"class":207},"'前端'",[92,76556,109],{"class":102},[92,76558,76559,76561,76563],{"class":94,"line":1626},[92,76560,73733],{"class":102},[92,76562,58227],{"class":1942},[92,76564,76565],{"class":102},"(result)\n",[92,76567,76568,76570,76572],{"class":94,"line":1632},[92,76569,52397],{"class":102},[92,76571,51793],{"class":51280},[92,76573,51287],{"class":102},[92,76575,76576,76578,76580],{"class":94,"line":1653},[92,76577,51765],{"class":102},[92,76579,51780],{"class":51280},[92,76581,51287],{"class":102},[92,76583,76584,76586,76588],{"class":94,"line":1658},[92,76585,51765],{"class":102},[92,76587,50615],{"class":51280},[92,76589,51287],{"class":102},[5106,76591,76592],{},"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":10,"searchDepth":11,"depth":11,"links":76594},[76595,76605,76617,76634,76641,76649],{"id":53340,"depth":11,"text":53341,"children":76596},[76597,76598,76599,76600,76601,76602,76603,76604],{"id":53344,"depth":1158,"text":53345},{"id":53377,"depth":1158,"text":53378},{"id":53416,"depth":1158,"text":53417},{"id":53574,"depth":1158,"text":53575},{"id":53622,"depth":1158,"text":53623},{"id":53759,"depth":1158,"text":53760},{"id":54081,"depth":1158,"text":54082},{"id":57069,"depth":1158,"text":57070},{"id":57097,"depth":11,"text":57098,"children":76606},[76607,76608,76609,76610,76611,76612,76613,76614,76615,76616],{"id":57101,"depth":1158,"text":57102},{"id":57124,"depth":1158,"text":57125},{"id":58039,"depth":1158,"text":58040},{"id":58729,"depth":1158,"text":58730},{"id":59011,"depth":1158,"text":59012},{"id":63172,"depth":1158,"text":63173},{"id":63342,"depth":1158,"text":63343},{"id":63470,"depth":1158,"text":63471},{"id":63495,"depth":1158,"text":63496},{"id":64884,"depth":1158,"text":64885},{"id":66037,"depth":11,"text":66038,"children":76618},[76619,76620,76621,76622,76623,76624,76625,76626,76627,76628,76629,76630,76631,76632,76633],{"id":66041,"depth":1158,"text":66042},{"id":66695,"depth":1158,"text":66696},{"id":68390,"depth":1158,"text":68391},{"id":68431,"depth":1158,"text":68432},{"id":68473,"depth":1158,"text":68474},{"id":68487,"depth":1158,"text":68488},{"id":68536,"depth":1158,"text":68537},{"id":68548,"depth":1158,"text":68549},{"id":68563,"depth":1158,"text":68564},{"id":68599,"depth":1158,"text":68600},{"id":68680,"depth":1158,"text":68681},{"id":68808,"depth":1158,"text":68809},{"id":68820,"depth":1158,"text":68821},{"id":68839,"depth":1158,"text":68840},{"id":70950,"depth":1158,"text":70951},{"id":70969,"depth":11,"text":70970,"children":76635},[76636,76637,76638,76639,76640],{"id":70990,"depth":1158,"text":70991},{"id":71010,"depth":1158,"text":71011},{"id":71059,"depth":1158,"text":71060},{"id":71184,"depth":1158,"text":71185},{"id":71365,"depth":1158,"text":71366},{"id":71383,"depth":11,"text":71384,"children":76642},[76643,76644,76645,76646,76647,76648],{"id":71398,"depth":1158,"text":71399},{"id":71457,"depth":1158,"text":71458},{"id":71481,"depth":1158,"text":71482},{"id":71801,"depth":1158,"text":71802},{"id":71833,"depth":1158,"text":71834},{"id":71856,"depth":1158,"text":71857},{"id":74924,"depth":11,"text":74925,"children":76650},[76651,76652],{"id":74958,"depth":1158,"text":74959},{"id":74997,"depth":1158,"text":74998},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53312,"description":13},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76659,"title":76660,"body":76661,"description":13,"extension":14,"meta":92798,"navigation":17,"path":92799,"seo":92800,"stem":92801,"__hash__":92802},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76662,"toc":92734},[76663,76666,76669,76673,76677,76682,76687,76698,76702,76707,76710,76714,76717,76722,76726,76730,76733,76738,76741,76745,76748,76756,76759,76763,76768,76773,76776,76780,76785,76790,76793,76797,76802,76805,76810,76813,76818,76821,76826,76831,76834,76837,76841,76846,76851,76854,76858,76862,76865,76868,76871,76875,76879,76884,76889,76892,76896,76901,76906,76909,76912,76915,76918,76921,76924,76927,76930,76933,76938,76942,76947,76952,76955,76958,76961,76964,76967,76970,76973,76976,76980,76984,76987,76990,76993,76998,77000,77003,77006,77009,77012,77015,77018,77021,77024,77027,77030,77033,77036,77039,77044,77049,77054,77057,77061,77064,77069,77073,77075,77086,77091,77192,77195,77198,77201,77204,77207,77210,77213,77216,77218,77221,77224,77227,77230,77233,77235,77238,77241,77244,77247,77250,77253,77255,77258,77260,77262,77265,77269,77273,77276,77279,77282,77285,77288,77291,77294,77297,77300,77305,77425,77428,77431,77436,77439,77442,77445,77448,77453,77456,77459,77462,77465,77470,77473,77573,77638,77712,77716,77719,77722,77726,77729,77743,77772,77775,77778,77781,77784,77787,77790,77793,77795,77798,77801,77804,77807,77811,77816,77820,77825,77900,77903,78086,78089,78092,78095,78098,78101,78103,78106,78109,78112,78115,78118,78121,78123,78127,78130,78135,78138,78141,78144,78147,78149,78154,78157,78160,78163,78166,78168,78173,78176,78179,78181,78183,78186,78190,78193,78196,78201,78204,78207,78210,78260,78265,78269,78274,78277,78346,78349,78358,78362,78367,78370,78373,78381,78384,78401,80203,80207,80211,80216,80219,80223,80229,80235,80387,80392,80397,80400,80403,80406,80409,80412,80415,80418,80421,80424,80427,80430,80433,80438,80442,80445,80456,80460,80465,80468,80471,80474,80477,80480,80482,80485,80488,80491,80494,80496,80513,80516,80520,80523,80528,80533,80536,80539,80543,80546,80549,80558,80561,80565,80568,80573,80578,80645,80649,80652,80655,80660,80665,80751,80756,80760,80763,80766,80781,80784,80789,80793,80798,80907,80910,80921,81071,81075,81080,81189,81193,81198,81203,81208,81211,81218,81238,81274,81438,81443,81446,81451,81458,81461,81464,81467,81526,81582,81638,81642,81647,81962,81965,81969,81972,81977,82086,82091,82095,82100,82104,82175,82179,82181,82184,82187,82225,82501,82505,82522,82588,82622,82626,82629,82634,82663,82670,82679,82684,82699,82704,82713,82716,82853,82857,82919,82923,82928,83173,83177,83182,83185,83188,83191,83194,83198,83203,84784,84788,84792,84798,84801,84806,84810,84813,84818,84821,84832,84836,84841,84845,84850,84855,84858,84863,84867,84871,84874,84879,84884,84887,84890,84893,85015,85020,85122,85125,85128,85132,85137,85309,85314,85318,85321,85326,85392,85397,85400,85531,85534,85539,85542,85545,85636,85641,85644,85647,85650,85653,85658,85663,85666,85671,85676,85681,85685,85688,85691,85696,85701,85706,85711,85765,85768,85771,85776,85779,85782,85787,85792,85797,85801,85806,85820,85825,85828,85833,85837,85842,85847,85852,85857,85862,85867,85872,85877,85880,85884,85889,85892,85895,85898,85903,85908,85911,85914,85918,85921,85924,85929,85934,85939,85944,85947,85952,85957,86018,86023,86026,86031,87272,87277,87281,87285,87290,87293,87298,87303,87306,87311,87313,87318,87322,87325,87328,87339,87343,87348,87353,87408,87413,87418,87423,87634,87639,87643,87648,87651,87653,87656,87659,88106,88111,88118,88124,88127,88130,88394,88399,88403,88668,88673,88677,88682,88687,88692,88697,89028,89031,89036,89041,89044,89048,89052,89057,89062,89067,89072,89077,89082,89086,89089,89094,89099,89102,89176,89181,89186,89191,89193,89196,89566,89571,89576,89581,89584,89587,89689,89694,89699,89802,89806,89811,89815,89819,89824,89829,89832,89837,89840,89843,90236,90241,90244,90247,90250,90253,90773,90777,90782,90787,90792,90795,90800,90803,90806,91188,91193,91195,91197,91200,91203,91715,91719,91780,91783,91786,91789,91793,91796,91801,91806,92731],[29,76664,76660],{"id":76665},"_4js进阶",[38,76667,76668],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[33,76670,76672],{"id":76671},"_41-作用域","4.1 作用域",[63,76674,76676],{"id":76675},"_411-局部作用域","4.1.1 局部作用域",[38,76678,76679],{},[1441,76680],{"alt":10,"src":76681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[38,76683,76684],{},[1441,76685],{"alt":10,"src":76686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1110,76688,76689,76692,76695],{},[49,76690,76691],{},"函数作用域在函数内部",[49,76693,76694],{},"块级作用域在{}",[49,76696,76697],{},"对象的那个{}不是作用域，不是块作用域",[63,76699,76701],{"id":76700},"_412-全局作用域","4.1.2 全局作用域",[38,76703,76704],{},[1441,76705],{"alt":10,"src":76706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[38,76708,76709],{},"window.a=10不要这样写",[63,76711,76713],{"id":76712},"_413-作用域链","4.1.3 作用域链",[38,76715,76716],{},"变量查找机制",[38,76718,76719],{},[1441,76720],{"alt":10,"src":76721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[33,76723,76725],{"id":76724},"_42-垃圾回收机制","4.2 垃圾回收机制",[63,76727,76729],{"id":76728},"_421-大体介绍","4.2.1 大体介绍",[38,76731,76732],{},"垃圾回收机制(Garbage Collection) 简称 GC",[38,76734,76735],{},[1441,76736],{"alt":10,"src":76737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[38,76739,76740],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[63,76742,76744],{"id":76743},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[38,76746,76747],{},"堆栈空间分配区别：",[46,76749,76750,76753],{},[49,76751,76752],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[49,76754,76755],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[38,76757,76758],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21978,76760,76762],{"id":76761},"_4221-引用计数","4.2.2.1 引用计数",[38,76764,76765],{},[1441,76766],{"alt":10,"src":76767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[38,76769,76770],{},[1441,76771],{"alt":10,"src":76772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[38,76774,76775],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21978,76777,76779],{"id":76778},"_4222-标记清除法","4.2.2.2 标记清除法",[38,76781,76782],{},[1441,76783],{"alt":10,"src":76784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[38,76786,76787],{},[1441,76788],{"alt":10,"src":76789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[38,76791,76792],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[33,76794,76796],{"id":76795},"_43-闭包","4.3 闭包",[38,76798,76799],{},[1441,76800],{"alt":10,"src":76801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[38,76803,76804],{},"闭包：内层函数+外层函数的变量",[38,76806,76807],{},[1441,76808],{"alt":10,"src":76809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[38,76811,76812],{},"closure就是闭包",[38,76814,76815],{},[1441,76816],{"alt":10,"src":76817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[38,76819,76820],{},"内层函数必须包含外层函数的变量才是闭包",[38,76822,76823],{},[1441,76824],{"alt":10,"src":76825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[38,76827,76828],{},[1441,76829],{"alt":10,"src":76830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[38,76832,76833],{},"闭包可能会引起内存泄漏",[38,76835,76836],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[33,76838,76840],{"id":76839},"_44-变量提升","4.4 变量提升",[38,76842,76843],{},[1441,76844],{"alt":10,"src":76845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[38,76847,76848],{},[1441,76849],{"alt":10,"src":76850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[38,76852,76853],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[33,76855,76857],{"id":76856},"_45-函数进阶","4.5 函数进阶",[63,76859,76861],{"id":76860},"_451-函数提升","4.5.1 函数提升",[38,76863,76864],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[38,76866,76867],{},"只提升函数声明，不提升函数调用",[51793,76869,76870],{},"\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",[63,76872,76874],{"id":76873},"_452-函数参数","4.5.2 函数参数",[21978,76876,76878],{"id":76877},"_4521-动态参数","4.5.2.1 动态参数",[38,76880,76881],{},[1441,76882],{"alt":10,"src":76883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[38,76885,76886],{},[1441,76887],{"alt":10,"src":76888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[38,76890,76891],{},"箭头函数里边没有arguments",[21978,76893,76895],{"id":76894},"_4522-剩余参数","4.5.2.2 剩余参数",[38,76897,76898],{},[1441,76899],{"alt":10,"src":76900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[38,76902,76903],{},[1441,76904],{"alt":10,"src":76905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[38,76907,76908],{},"剩余参数使用的时候不需要写...",[38,76910,76911],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[38,76913,76914],{},"  function getSum(a,b,...arr) {",[38,76916,76917],{},"  console.log(11)",[38,76919,76920],{},"  }",[38,76922,76923],{},"  getSum(1,2,3,4)",[38,76925,76926],{},"  将1传给a，2传给b，剩下的传给剩余参数",[38,76928,76929],{},"  getSum(1,2)",[38,76931,76932],{},"  将1传给a，2传给b，剩余参数为一个空数组",[38,76934,76935],{},[1441,76936],{"alt":10,"src":76937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21978,76939,76941],{"id":76940},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[38,76943,76944],{},[1441,76945],{"alt":10,"src":76946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[38,76948,76949],{},[1441,76950],{"alt":10,"src":76951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[38,76953,76954],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[38,76956,76957],{},"展开运算符可以用于数组之间的合并：",[38,76959,76960],{},"const arr1 = [1, 2, 3]",[38,76962,76963],{},"const arr2 = [3, 4, 5]",[38,76965,76966],{},"const arr = [...arr1, ...arr2]",[38,76968,76969],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[38,76971,76972],{},"剩余参数：函数参数使用，得到真数组",[38,76974,76975],{},"展开运算符：数组中使用，数组展开",[63,76977,76979],{"id":76978},"_453-箭头函数","4.5.3 箭头函数",[21978,76981,76983],{"id":76982},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[38,76985,76986],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[38,76988,76989],{},"它不是万能的！！！",[38,76991,76992],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[38,76994,76995],{},[1441,76996],{"alt":10,"src":76997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[38,76999,132],{},[38,77001,77002],{},"① 只有一个形参的时候，可以省略小括号：",[38,77004,77005],{},"const fn=x=>{console.log(x)}",[38,77007,77008],{},"② 只有一行代码时可以省略大括号：",[38,77010,77011],{},"const fn=x=>console.log(11)",[38,77013,77014],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[38,77016,77017],{},"const fn=x=>x+x",[38,77019,77020],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[38,77022,77023],{},"⑤ 阻止表单默认提交：",[38,77025,77026],{},"const form = document.querySelector('form')",[38,77028,77029],{},"form.addEventListener('click', ev => ev.preventDefault())",[38,77031,77032],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[38,77034,77035],{},"const fn=uname=>({uname:uname})",[38,77037,77038],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[38,77040,77041],{},[1441,77042],{"alt":10,"src":77043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[38,77045,77046],{},[1441,77047],{"alt":10,"src":77048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[38,77050,77051],{},[1441,77052],{"alt":10,"src":77053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[38,77055,77056],{},"一定不要忘记用()，有()就理解为自带return",[21978,77058,77060],{"id":77059},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[38,77062,77063],{},"箭头函数是没有动态参数的arguments",[38,77065,77066],{},[1441,77067],{"alt":10,"src":77068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21978,77070,77072],{"id":77071},"_4533-箭头函数this","4.5.3.3 箭头函数this",[38,77074,11312],{},[46,77076,77077,77080,77083],{},[49,77078,77079],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[49,77081,77082],{},"事件回调函数使用箭头函数时，this 为全局的 window",[49,77084,77085],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[38,77087,77088],{},[1441,77089],{"alt":10,"src":77090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[83,77092,77094],{"className":53047,"code":77093,"language":53049,"meta":10,"style":10},"  \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",[89,77095,77096,77104,77109,77114,77119,77124,77129,77133,77138,77142,77146,77151,77156,77161,77165,77169,77174,77179,77184],{"__ignoreMap":10},[92,77097,77098,77100,77102],{"class":94,"line":95},[92,77099,52124],{"class":102},[92,77101,51793],{"class":51280},[92,77103,51287],{"class":102},[92,77105,77106],{"class":94,"line":11},[92,77107,77108],{"class":102},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[92,77110,77111],{"class":94,"line":1158},[92,77112,77113],{"class":102},"    console.log(this) \u002F\u002F指向window\n",[92,77115,77116],{"class":94,"line":1173},[92,77117,77118],{"class":102},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[92,77120,77121],{"class":94,"line":1179},[92,77122,77123],{"class":102},"    function fn() {\n",[92,77125,77126],{"class":94,"line":1193},[92,77127,77128],{"class":102},"      console.log(this)  \u002F\u002F指向window\n",[92,77130,77131],{"class":94,"line":1199},[92,77132,2166],{"class":102},[92,77134,77135],{"class":94,"line":1290},[92,77136,77137],{"class":102},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[92,77139,77140],{"class":94,"line":1296},[92,77141,2379],{"emptyLinePlaceholder":17},[92,77143,77144],{"class":94,"line":1308},[92,77145,71503],{"class":102},[92,77147,77148],{"class":94,"line":1591},[92,77149,77150],{"class":102},"      name: 'andy',\n",[92,77152,77153],{"class":94,"line":1596},[92,77154,77155],{"class":102},"      sayHai: function () {\n",[92,77157,77158],{"class":94,"line":1602},[92,77159,77160],{"class":102},"        console.log(this)\n",[92,77162,77163],{"class":94,"line":1607},[92,77164,52378],{"class":102},[92,77166,77167],{"class":94,"line":1621},[92,77168,2166],{"class":102},[92,77170,77171],{"class":94,"line":1626},[92,77172,77173],{"class":102},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[92,77175,77176],{"class":94,"line":1632},[92,77177,77178],{"class":102},"    \u002F\u002F 2.箭头函数的this\n",[92,77180,77181],{"class":94,"line":1653},[92,77182,77183],{"class":102},"    const fn = () => console.log(this)\n",[92,77185,77186,77188,77190],{"class":94,"line":1658},[92,77187,52397],{"class":102},[92,77189,51793],{"class":51280},[92,77191,51287],{"class":102},[38,77193,77194],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[38,77196,77197],{},"const fn = () => console.log(this)",[38,77199,77200],{},"fn() \u002F\u002F指向window",[38,77202,77203],{},"\u002F\u002F 3.对象方法箭头函数 this",[38,77205,77206],{},"①",[38,77208,77209],{},"const obj = {",[38,77211,77212],{},"uname: 'pink老师',",[38,77214,77215],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[38,77217,1049],{},[38,77219,77220],{},"调用对象里边的函数",[38,77222,77223],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[38,77225,77226],{},"obj.sayHai()",[38,77228,77229],{},"②",[38,77231,77232],{},"const obj1 = {",[38,77234,77212],{},[38,77236,77237],{},"sayHai: function () {",[38,77239,77240],{},"let i = 10",[38,77242,77243],{},"const count = () => {",[38,77245,77246],{},"console.log(this)",[38,77248,77249],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[38,77251,77252],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[38,77254,1049],{},[38,77256,77257],{},"count()",[38,77259,1049],{},[38,77261,1049],{},[38,77263,77264],{},"obj1.sayHai()",[33,77266,77268],{"id":77267},"_46-解构赋值","4.6 解构赋值",[63,77270,77272],{"id":77271},"_461-数组解构","4.6.1 数组解构",[38,77274,77275],{},"以前要是使用数组中的值的话：",[38,77277,77278],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[38,77280,77281],{},"const arr=[100,60,80]",[38,77283,77284],{},"const max=arr[0]",[38,77286,77287],{},"const min=arr[1]",[38,77289,77290],{},"const avg=arr[2]",[38,77292,77293],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[38,77295,77296],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[38,77298,77299],{},"这个写法就类似于上边的那种用很多const的方法",[38,77301,77302],{},[1441,77303],{"alt":10,"src":77304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[83,77306,77308],{"className":50613,"code":77307,"language":50615,"meta":10,"style":10},"①变量之间交换值:\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",[89,77309,77310,77315,77320,77325,77330,77335,77339,77343,77348,77352,77357,77362,77366,77371,77376,77387,77397,77402,77407,77412,77416,77420],{"__ignoreMap":10},[92,77311,77312],{"class":94,"line":95},[92,77313,77314],{"class":102},"①变量之间交换值:\n",[92,77316,77317],{"class":94,"line":11},[92,77318,77319],{"class":102},"let a=1\n",[92,77321,77322],{"class":94,"line":1158},[92,77323,77324],{"class":102},"let b=2;\n",[92,77326,77327],{"class":94,"line":1173},[92,77328,77329],{"class":102},"必须加这行代码，不然就会报错\n",[92,77331,77332],{"class":94,"line":1179},[92,77333,77334],{"class":102},"[b,a]=[a,b]\n",[92,77336,77337],{"class":94,"line":1193},[92,77338,2379],{"emptyLinePlaceholder":17},[92,77340,77341],{"class":94,"line":1199},[92,77342,2379],{"emptyLinePlaceholder":17},[92,77344,77345],{"class":94,"line":1290},[92,77346,77347],{"class":102},"可以写成下面的方式：\n",[92,77349,77350],{"class":94,"line":1296},[92,77351,77319],{"class":102},[92,77353,77354],{"class":94,"line":1308},[92,77355,77356],{"class":102},"let b=2\n",[92,77358,77359],{"class":94,"line":1591},[92,77360,77361],{"class":102},";[b,a]=[a,b]\n",[92,77363,77364],{"class":94,"line":1596},[92,77365,2379],{"emptyLinePlaceholder":17},[92,77367,77368],{"class":94,"line":1602},[92,77369,77370],{"class":102},"②排序\n",[92,77372,77373],{"class":94,"line":1607},[92,77374,77375],{"class":102},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[92,77377,77378,77381,77384],{"class":94,"line":1621},[92,77379,77380],{"class":102},"for (let i = 0; i ",[92,77382,1013],{"class":77383},"s7hpK",[92,77385,77386],{"class":102}," arr1.length; i++) {\n",[92,77388,77389,77392,77394],{"class":94,"line":1626},[92,77390,77391],{"class":102},"   for (let j = 0; j ",[92,77393,1013],{"class":77383},[92,77395,77396],{"class":102}," arr1.length - 1; j++) {\n",[92,77398,77399],{"class":94,"line":1632},[92,77400,77401],{"class":102},"      if (arr1[j] > arr1[j + 1]) {\n",[92,77403,77404],{"class":94,"line":1653},[92,77405,77406],{"class":102},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[92,77408,77409],{"class":94,"line":1658},[92,77410,77411],{"class":102},"       }\n",[92,77413,77414],{"class":94,"line":1672},[92,77415,4288],{"class":102},[92,77417,77418],{"class":94,"line":1677},[92,77419,1544],{"class":102},[92,77421,77422],{"class":94,"line":1706},[92,77423,77424],{"class":102},"console.log(arr1)\n",[38,77426,77427],{},"数组解构的细节：",[38,77429,77430],{},"①变量多，单元值少",[38,77432,77433],{},[1441,77434],{"alt":10,"src":77435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[38,77437,77438],{},"防止出现undefined的方法：",[38,77440,77441],{},"const [a=0,b=0] =[1]",[38,77443,77444],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[38,77446,77447],{},"②变量少，单元值多",[38,77449,77450],{},[1441,77451],{"alt":10,"src":77452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[38,77454,77455],{},"此时可以使用剩余参数来接收多余的值",[38,77457,77458],{},"const [a,b,...c]=[1,2,3,4]",[38,77460,77461],{},"console.log(c) 输出[3,4]",[38,77463,77464],{},"③可以按需导入，忽略某些返回值",[38,77466,77467],{},[1441,77468],{"alt":10,"src":77469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[38,77471,77472],{},"④支持多维数组的结构",[83,77474,77478],{"className":77475,"code":77476,"language":77477,"meta":10,"style":10},"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",[89,77479,77480,77508,77524,77539,77554],{"__ignoreMap":10},[92,77481,77482,77484,77486,77488,77490,77492,77494,77496,77499,77501,77503,77505],{"class":94,"line":95},[92,77483,6772],{"class":98},[92,77485,51813],{"class":102},[92,77487,148],{"class":98},[92,77489,52206],{"class":102},[92,77491,320],{"class":151},[92,77493,12415],{"class":102},[92,77495,180],{"class":151},[92,77497,77498],{"class":102},", [",[92,77500,174],{"class":151},[92,77502,12415],{"class":102},[92,77504,396],{"class":151},[92,77506,77507],{"class":102},"]]\n",[92,77509,77510,77513,77515,77517,77519,77521],{"class":94,"line":11},[92,77511,77512],{"class":102},"console.",[92,77514,58227],{"class":1942},[92,77516,3830],{"class":102},[92,77518,294],{"class":151},[92,77520,4195],{"class":102},[92,77522,77523],{"class":161},"  \u002F\u002F1\n",[92,77525,77526,77528,77530,77532,77534,77536],{"class":94,"line":1158},[92,77527,77512],{"class":102},[92,77529,58227],{"class":1942},[92,77531,3830],{"class":102},[92,77533,320],{"class":151},[92,77535,4195],{"class":102},[92,77537,77538],{"class":161},"  \u002F\u002F2\n",[92,77540,77541,77543,77545,77547,77549,77551],{"class":94,"line":1173},[92,77542,77512],{"class":102},[92,77544,58227],{"class":1942},[92,77546,3830],{"class":102},[92,77548,180],{"class":151},[92,77550,4195],{"class":102},[92,77552,77553],{"class":161},"  \u002F\u002F[3,4]\n",[92,77555,77556,77558,77560,77562,77564,77566,77568,77570],{"class":94,"line":1179},[92,77557,77512],{"class":102},[92,77559,58227],{"class":1942},[92,77561,3830],{"class":102},[92,77563,180],{"class":151},[92,77565,4880],{"class":102},[92,77567,294],{"class":151},[92,77569,4195],{"class":102},[92,77571,77572],{"class":161},"  \u002F\u002F3\n",[83,77574,77576],{"className":77475,"code":77575,"language":77477,"meta":10,"style":10},"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",[89,77577,77578,77605,77616,77627],{"__ignoreMap":10},[92,77579,77580,77582,77585,77587,77589,77591,77593,77595,77597,77599,77601,77603],{"class":94,"line":95},[92,77581,6772],{"class":98},[92,77583,77584],{"class":102}," [a, b, c] ",[92,77586,148],{"class":98},[92,77588,52206],{"class":102},[92,77590,320],{"class":151},[92,77592,12415],{"class":102},[92,77594,180],{"class":151},[92,77596,77498],{"class":102},[92,77598,174],{"class":151},[92,77600,12415],{"class":102},[92,77602,396],{"class":151},[92,77604,77507],{"class":102},[92,77606,77607,77609,77611,77614],{"class":94,"line":11},[92,77608,77512],{"class":102},[92,77610,58227],{"class":1942},[92,77612,77613],{"class":102},"(a)",[92,77615,77523],{"class":161},[92,77617,77618,77620,77622,77625],{"class":94,"line":1158},[92,77619,77512],{"class":102},[92,77621,58227],{"class":1942},[92,77623,77624],{"class":102},"(b)",[92,77626,77538],{"class":161},[92,77628,77629,77631,77633,77636],{"class":94,"line":1173},[92,77630,77512],{"class":102},[92,77632,58227],{"class":1942},[92,77634,77635],{"class":102},"(c)",[92,77637,77553],{"class":161},[83,77639,77641],{"className":77475,"code":77640,"language":77477,"meta":10,"style":10},"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",[89,77642,77643,77670,77680,77690,77700],{"__ignoreMap":10},[92,77644,77645,77647,77650,77652,77654,77656,77658,77660,77662,77664,77666,77668],{"class":94,"line":95},[92,77646,6772],{"class":98},[92,77648,77649],{"class":102}," [a, b, [c, d]] ",[92,77651,148],{"class":98},[92,77653,52206],{"class":102},[92,77655,320],{"class":151},[92,77657,12415],{"class":102},[92,77659,180],{"class":151},[92,77661,77498],{"class":102},[92,77663,174],{"class":151},[92,77665,12415],{"class":102},[92,77667,396],{"class":151},[92,77669,77507],{"class":102},[92,77671,77672,77674,77676,77678],{"class":94,"line":11},[92,77673,77512],{"class":102},[92,77675,58227],{"class":1942},[92,77677,77613],{"class":102},[92,77679,77523],{"class":161},[92,77681,77682,77684,77686,77688],{"class":94,"line":1158},[92,77683,77512],{"class":102},[92,77685,58227],{"class":1942},[92,77687,77624],{"class":102},[92,77689,77538],{"class":161},[92,77691,77692,77694,77696,77698],{"class":94,"line":1173},[92,77693,77512],{"class":102},[92,77695,58227],{"class":1942},[92,77697,77635],{"class":102},[92,77699,77572],{"class":161},[92,77701,77702,77704,77706,77709],{"class":94,"line":1179},[92,77703,77512],{"class":102},[92,77705,58227],{"class":1942},[92,77707,77708],{"class":102},"(d)",[92,77710,77711],{"class":161},"  \u002F\u002F4\n",[63,77713,77715],{"id":77714},"_462-对象解构","4.6.2 对象解构",[38,77717,77718],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[38,77720,77721],{},"用的非常非常多！！！！！！",[21978,77723,77725],{"id":77724},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[38,77727,77728],{},"基本语法：",[46,77730,77731,77734,77737,77740],{},[49,77732,77733],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[49,77735,77736],{},"对象属性的值将被赋值给与属性名相同的变量",[49,77738,77739],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[49,77741,77742],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[83,77744,77746],{"className":50613,"code":77745,"language":50615,"meta":10,"style":10},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[89,77747,77748,77753,77758,77763,77767],{"__ignoreMap":10},[92,77749,77750],{"class":94,"line":95},[92,77751,77752],{"class":102},"const obj = {\n",[92,77754,77755],{"class":94,"line":11},[92,77756,77757],{"class":102},"   uname: 'pink老师',\n",[92,77759,77760],{"class":94,"line":1158},[92,77761,77762],{"class":102},"   age: 18,\n",[92,77764,77765],{"class":94,"line":1173},[92,77766,1544],{"class":102},[92,77768,77769],{"class":94,"line":1179},[92,77770,77771],{"class":102},"const { uname, age } = obj\n",[38,77773,77774],{},"上方代码这样写等价于：",[38,77776,77777],{},"const uname等价于obj.uname",[38,77779,77780],{},"变量名可以重新改名：",[38,77782,77783],{},"const uname='red老师'",[38,77785,77786],{},"const user={",[38,77788,77789],{},"  uname:'pink老师',",[38,77791,77792],{},"  age:18",[38,77794,1049],{},[38,77796,77797],{},"const {uname,age}=user",[38,77799,77800],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[38,77802,77803],{},"const {旧变量名：新变量名}=对象",[38,77805,77806],{},"const {uname:username,age}=user",[21978,77808,77810],{"id":77809},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[38,77812,77813],{},[1441,77814],{"alt":10,"src":77815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21978,77817,77819],{"id":77818},"_4623-多级对象解构","4.6.2.3 多级对象解构",[38,77821,77822],{},[1441,77823],{"alt":10,"src":77824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[83,77826,77828],{"className":53047,"code":77827,"language":53049,"meta":10,"style":10},"  \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",[89,77829,77830,77838,77843,77848,77853,77858,77863,77868,77873,77878,77882,77887,77892],{"__ignoreMap":10},[92,77831,77832,77834,77836],{"class":94,"line":95},[92,77833,52124],{"class":102},[92,77835,51793],{"class":51280},[92,77837,51287],{"class":102},[92,77839,77840],{"class":94,"line":11},[92,77841,77842],{"class":102},"    const pig = {\n",[92,77844,77845],{"class":94,"line":1158},[92,77846,77847],{"class":102},"      name: '佩奇',\n",[92,77849,77850],{"class":94,"line":1173},[92,77851,77852],{"class":102},"      family: {\n",[92,77854,77855],{"class":94,"line":1179},[92,77856,77857],{"class":102},"        mother: '猪妈妈',\n",[92,77859,77860],{"class":94,"line":1193},[92,77861,77862],{"class":102},"        father: '猪爸爸',\n",[92,77864,77865],{"class":94,"line":1199},[92,77866,77867],{"class":102},"        sister: '乔治'\n",[92,77869,77870],{"class":94,"line":1290},[92,77871,77872],{"class":102},"      },\n",[92,77874,77875],{"class":94,"line":1296},[92,77876,77877],{"class":102},"      age: 6\n",[92,77879,77880],{"class":94,"line":1308},[92,77881,2166],{"class":102},[92,77883,77884],{"class":94,"line":1591},[92,77885,77886],{"class":102},"    \u002F\u002F 多级对象解构\n",[92,77888,77889],{"class":94,"line":1596},[92,77890,77891],{"class":102},"    const { name, family: { mother, father, sister }, age } = pig\n",[92,77893,77894,77896,77898],{"class":94,"line":1602},[92,77895,52397],{"class":102},[92,77897,51793],{"class":51280},[92,77899,51287],{"class":102},[38,77901,77902],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[83,77904,77907],{"className":77905,"code":77906,"language":76427,"meta":10,"style":10},"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",[89,77908,77909,77914,77925,77937,77949,77958,77962,77973,77985,77995,78000,78004,78014,78025,78034,78038,78042,78053,78064,78073,78077,78082],{"__ignoreMap":10},[92,77910,77911],{"class":94,"line":95},[92,77912,77913],{"class":161},"    \u002F\u002F 这是后台传递过来的数据\n",[92,77915,77916,77918,77921,77923],{"class":94,"line":11},[92,77917,11201],{"class":98},[92,77919,77920],{"class":102}," msg ",[92,77922,148],{"class":98},[92,77924,15552],{"class":102},[92,77926,77927,77930,77932,77935],{"class":94,"line":1158},[92,77928,77929],{"class":207},"      \"code\"",[92,77931,962],{"class":98},[92,77933,77934],{"class":151}," 200",[92,77936,31447],{"class":102},[92,77938,77939,77942,77944,77947],{"class":94,"line":1173},[92,77940,77941],{"class":207},"      \"msg\"",[92,77943,962],{"class":98},[92,77945,77946],{"class":207}," \"获取新闻列表成功\"",[92,77948,31447],{"class":102},[92,77950,77951,77954,77956],{"class":94,"line":1179},[92,77952,77953],{"class":207},"      \"data\"",[92,77955,962],{"class":98},[92,77957,55427],{"class":102},[92,77959,77960],{"class":94,"line":1193},[92,77961,2489],{"class":102},[92,77963,77964,77967,77969,77971],{"class":94,"line":1199},[92,77965,77966],{"class":207},"          \"id\"",[92,77968,962],{"class":98},[92,77970,25099],{"class":151},[92,77972,31447],{"class":102},[92,77974,77975,77978,77980,77983],{"class":94,"line":1290},[92,77976,77977],{"class":207},"          \"title\"",[92,77979,962],{"class":98},[92,77981,77982],{"class":207}," \"5G商用自己，三大运用商收入下降\"",[92,77984,31447],{"class":102},[92,77986,77987,77990,77992],{"class":94,"line":1296},[92,77988,77989],{"class":207},"          \"count\"",[92,77991,962],{"class":98},[92,77993,77994],{"class":151}," 58\n",[92,77996,77997],{"class":94,"line":1308},[92,77998,77999],{"class":102},"        },\n",[92,78001,78002],{"class":94,"line":1591},[92,78003,2489],{"class":102},[92,78005,78006,78008,78010,78012],{"class":94,"line":1596},[92,78007,77966],{"class":207},[92,78009,962],{"class":98},[92,78011,14735],{"class":151},[92,78013,31447],{"class":102},[92,78015,78016,78018,78020,78023],{"class":94,"line":1602},[92,78017,77977],{"class":207},[92,78019,962],{"class":98},[92,78021,78022],{"class":207}," \"国际媒体头条速览\"",[92,78024,31447],{"class":102},[92,78026,78027,78029,78031],{"class":94,"line":1607},[92,78028,77989],{"class":207},[92,78030,962],{"class":98},[92,78032,78033],{"class":151}," 56\n",[92,78035,78036],{"class":94,"line":1621},[92,78037,77999],{"class":102},[92,78039,78040],{"class":94,"line":1626},[92,78041,2489],{"class":102},[92,78043,78044,78046,78048,78051],{"class":94,"line":1632},[92,78045,77966],{"class":207},[92,78047,962],{"class":98},[92,78049,78050],{"class":151}," 3",[92,78052,31447],{"class":102},[92,78054,78055,78057,78059,78062],{"class":94,"line":1653},[92,78056,77977],{"class":207},[92,78058,962],{"class":98},[92,78060,78061],{"class":207}," \"乌克兰和俄罗斯持续冲突\"",[92,78063,31447],{"class":102},[92,78065,78066,78068,78070],{"class":94,"line":1658},[92,78067,77989],{"class":207},[92,78069,962],{"class":98},[92,78071,78072],{"class":151}," 1669\n",[92,78074,78075],{"class":94,"line":1672},[92,78076,77999],{"class":102},[92,78078,78079],{"class":94,"line":1677},[92,78080,78081],{"class":102},"      ]\n",[92,78083,78084],{"class":94,"line":1706},[92,78085,2166],{"class":102},[38,78087,78088],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[38,78090,78091],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[38,78093,78094],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[38,78096,78097],{},"function({data}) {",[38,78099,78100],{},"console.log(data)",[38,78102,1049],{},[38,78104,78105],{},"render(msg)",[38,78107,78108],{},"实参传递给形参的时候解构了",[38,78110,78111],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[38,78113,78114],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[38,78116,78117],{},"function render({data:mydata}) {",[38,78119,78120],{},"  console.log(data)",[38,78122,1049],{},[63,78124,78126],{"id":78125},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[38,78128,78129],{},"有两种情况：一个是数组结构，一个是立即执行函数",[46,78131,78132],{},[49,78133,78134],{},"如果对一个数组进行遍历，有两种方式：",[38,78136,78137],{},"①法1",[38,78139,78140],{},"const arr=[1,2,3]",[38,78142,78143],{},"arr.map(function(item,index) {",[38,78145,78146],{},"  console.log(item)",[38,78148,52444],{},[38,78150,78151],{},[1441,78152],{"alt":10,"src":78153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[38,78155,78156],{},"②法2",[38,78158,78159],{},"const str='pink'",[38,78161,78162],{},"[1,2,3].map(function(item,index) {",[38,78164,78165],{},"console.log(item)",[38,78167,52444],{},[38,78169,78170],{},[1441,78171],{"alt":10,"src":78172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[38,78174,78175],{},"此时会报错",[38,78177,78178],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[38,78180,78165],{},[38,78182,52444],{},[38,78184,78185],{},"内部会当成这样处理，所以我们用分号进行隔开",[33,78187,78189],{"id":78188},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[38,78191,78192],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[38,78194,78195],{},"可以理解为加强版的for循环",[38,78197,78198],{},[1441,78199],{"alt":10,"src":78200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[38,78202,78203],{},"里边不写return，不返回数组，只遍历不返回",[38,78205,78206],{},"map是返回数组",[38,78208,78209],{},"forEach主要用于遍历数组对象",[83,78211,78213],{"className":53047,"code":78212,"language":53049,"meta":10,"style":10},"  \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",[89,78214,78215,78223,78228,78233,78238,78243,78247,78252],{"__ignoreMap":10},[92,78216,78217,78219,78221],{"class":94,"line":95},[92,78218,52124],{"class":102},[92,78220,51793],{"class":51280},[92,78222,51287],{"class":102},[92,78224,78225],{"class":94,"line":11},[92,78226,78227],{"class":102},"    const arr = ['red', 'green', 'pink']\n",[92,78229,78230],{"class":94,"line":1158},[92,78231,78232],{"class":102},"    const result = arr.forEach(function (item, index) {\n",[92,78234,78235],{"class":94,"line":1173},[92,78236,78237],{"class":102},"      console.log(item)\n",[92,78239,78240],{"class":94,"line":1179},[92,78241,78242],{"class":102},"      console.log(index)\n",[92,78244,78245],{"class":94,"line":1193},[92,78246,33442],{"class":102},[92,78248,78249],{"class":94,"line":1199},[92,78250,78251],{"class":102},"    console.log(result)\n",[92,78253,78254,78256,78258],{"class":94,"line":1290},[92,78255,52397],{"class":102},[92,78257,51793],{"class":51280},[92,78259,51287],{"class":102},[38,78261,78262],{},[1441,78263],{"alt":10,"src":78264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[33,78266,78268],{"id":78267},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[38,78270,78271],{},[1441,78272],{"alt":10,"src":78273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[38,78275,78276],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[83,78278,78280],{"className":53047,"code":78279,"language":53049,"meta":10,"style":10},"\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",[89,78281,78282,78290,78298,78303,78308,78312,78316,78321,78325,78330,78338],{"__ignoreMap":10},[92,78283,78284,78286,78288],{"class":94,"line":95},[92,78285,1013],{"class":102},[92,78287,51780],{"class":51280},[92,78289,51287],{"class":102},[92,78291,78292,78294,78296],{"class":94,"line":11},[92,78293,52124],{"class":102},[92,78295,51793],{"class":51280},[92,78297,51287],{"class":102},[92,78299,78300],{"class":94,"line":1158},[92,78301,78302],{"class":102},"    const arr = [10, 20, 30]\n",[92,78304,78305],{"class":94,"line":1173},[92,78306,78307],{"class":102},"    const newArr = arr.filter(function (item, index) {\n",[92,78309,78310],{"class":94,"line":1179},[92,78311,78237],{"class":102},[92,78313,78314],{"class":94,"line":1193},[92,78315,78242],{"class":102},[92,78317,78318],{"class":94,"line":1199},[92,78319,78320],{"class":102},"      return item >= 20\n",[92,78322,78323],{"class":94,"line":1290},[92,78324,33442],{"class":102},[92,78326,78327],{"class":94,"line":1296},[92,78328,78329],{"class":102},"    console.log(newArr)\n",[92,78331,78332,78334,78336],{"class":94,"line":1308},[92,78333,52397],{"class":102},[92,78335,51793],{"class":51280},[92,78337,51287],{"class":102},[92,78339,78340,78342,78344],{"class":94,"line":1591},[92,78341,51765],{"class":102},[92,78343,51780],{"class":51280},[92,78345,51287],{"class":102},[38,78347,78348],{},"这个也可以写成箭头函数：",[83,78350,78352],{"className":50613,"code":78351,"language":50615,"meta":10,"style":10},"const newArr = arr.filter(item => item >= 20)\n",[89,78353,78354],{"__ignoreMap":10},[92,78355,78356],{"class":94,"line":95},[92,78357,78351],{"class":102},[33,78359,78361],{"id":78360},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[38,78363,78364],{},[1441,78365],{"alt":10,"src":78366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[38,78368,78369],{},"步骤：",[38,78371,78372],{},"①：渲染页面模块",[1110,78374,78375,78378],{},[49,78376,78377],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[49,78379,78380],{},"用forEach+字符串的形式",[38,78382,78383],{},"②：点击不同需求，显示不同页面内容",[1110,78385,78386,78389,78392,78395,78398],{},[49,78387,78388],{},"点击采取事件委托方式 .filter",[49,78390,78391],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[49,78393,78394],{},"筛选条件是根据点击的 data-index 来判断",[49,78396,78397],{},"可以使用对象解构，把事件对象解构",[49,78399,78400],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[83,78402,78404],{"className":50613,"code":78403,"language":50615,"meta":10,"style":10},"\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",[89,78405,78406,78416,78430,78434,78442,78456,78476,78488,78496,78502,78512,78522,78532,78536,78540,78546,78559,78571,78581,78593,78597,78601,78608,78621,78633,78650,78668,78681,78685,78689,78701,78711,78715,78719,78726,78767,78794,78804,78808,78812,78820,78832,78836,78840,78848,78860,78872,78883,78887,78891,78900,78912,78923,78927,78931,78940,78952,78964,78968,78972,78979,78989,79001,79013,79028,79032,79036,79044,79060,79070,79080,79090,79102,79106,79110,79120,79131,79141,79145,79153,79161,79165,79173,79188,79214,79239,79264,79283,79291,79305,79310,79315,79320,79325,79330,79338,79346,79351,79362,79367,79377,79387,79397,79407,79411,79415,79424,79433,79442,79451,79455,79459,79468,79477,79486,79495,79499,79503,79512,79521,79530,79539,79543,79547,79556,79565,79574,79583,79587,79591,79600,79609,79618,79627,79631,79635,79644,79653,79662,79671,79675,79679,79688,79697,79705,79714,79718,79722,79726,79731,79743,79748,79760,79764,79781,79809,79818,79823,79833,79843,79852,79857,79862,79866,79871,79888,79892,79897,79905,79910,79937,79942,79962,79967,79979,79984,79989,79994,80005,80019,80056,80074,80107,80124,80148,80152,80157,80163,80167,80171,80175,80183,80191,80195],{"__ignoreMap":10},[92,78407,78408,78410,78412,78414],{"class":94,"line":95},[92,78409,51277],{"class":102},[92,78411,51281],{"class":51280},[92,78413,51284],{"class":1942},[92,78415,51287],{"class":102},[92,78417,78418,78420,78422,78424,78426,78428],{"class":94,"line":11},[92,78419,1013],{"class":102},[92,78421,50615],{"class":51280},[92,78423,51296],{"class":1942},[92,78425,148],{"class":102},[92,78427,51301],{"class":207},[92,78429,51287],{"class":102},[92,78431,78432],{"class":94,"line":1158},[92,78433,2379],{"emptyLinePlaceholder":17},[92,78435,78436,78438,78440],{"class":94,"line":1173},[92,78437,1013],{"class":102},[92,78439,51314],{"class":51280},[92,78441,51287],{"class":102},[92,78443,78444,78446,78448,78450,78452,78454],{"class":94,"line":1179},[92,78445,52124],{"class":102},[92,78447,51324],{"class":51280},[92,78449,51327],{"class":1942},[92,78451,148],{"class":102},[92,78453,51332],{"class":207},[92,78455,51287],{"class":102},[92,78457,78458,78460,78462,78464,78466,78468,78470,78472,78474],{"class":94,"line":1193},[92,78459,52124],{"class":102},[92,78461,51324],{"class":51280},[92,78463,14900],{"class":1942},[92,78465,148],{"class":102},[92,78467,51371],{"class":207},[92,78469,51351],{"class":1942},[92,78471,148],{"class":102},[92,78473,51378],{"class":207},[92,78475,51287],{"class":102},[92,78477,78478,78480,78482,78484,78486],{"class":94,"line":1199},[92,78479,52124],{"class":102},[92,78481,51387],{"class":51280},[92,78483,51390],{"class":102},[92,78485,51387],{"class":51280},[92,78487,51287],{"class":102},[92,78489,78490,78492,78494],{"class":94,"line":1290},[92,78491,52124],{"class":102},[92,78493,5106],{"class":51280},[92,78495,51287],{"class":102},[92,78497,78498,78500],{"class":94,"line":1296},[92,78499,6383],{"class":51280},[92,78501,15552],{"class":102},[92,78503,78504,78506,78508,78510],{"class":94,"line":1308},[92,78505,54675],{"class":151},[92,78507,51417],{"class":102},[92,78509,294],{"class":151},[92,78511,1269],{"class":102},[92,78513,78514,78516,78518,78520],{"class":94,"line":1591},[92,78515,54686],{"class":151},[92,78517,51417],{"class":102},[92,78519,294],{"class":151},[92,78521,1269],{"class":102},[92,78523,78524,78526,78528,78530],{"class":94,"line":1596},[92,78525,72576],{"class":151},[92,78527,51417],{"class":102},[92,78529,60485],{"class":151},[92,78531,1269],{"class":102},[92,78533,78534],{"class":94,"line":1602},[92,78535,2166],{"class":102},[92,78537,78538],{"class":94,"line":1607},[92,78539,2379],{"emptyLinePlaceholder":17},[92,78541,78542,78544],{"class":94,"line":1621},[92,78543,62103],{"class":1942},[92,78545,15552],{"class":102},[92,78547,78548,78550,78552,78555,78557],{"class":94,"line":1626},[92,78549,54751],{"class":151},[92,78551,51417],{"class":102},[92,78553,78554],{"class":151},"990",[92,78556,51472],{"class":98},[92,78558,1269],{"class":102},[92,78560,78561,78563,78565,78567,78569],{"class":94,"line":1632},[92,78562,54686],{"class":151},[92,78564,51417],{"class":102},[92,78566,294],{"class":151},[92,78568,51536],{"class":151},[92,78570,1269],{"class":102},[92,78572,78573,78575,78577,78579],{"class":94,"line":1653},[92,78574,54989],{"class":151},[92,78576,51417],{"class":102},[92,78578,51457],{"class":151},[92,78580,1269],{"class":102},[92,78582,78583,78586,78588,78591],{"class":94,"line":1658},[92,78584,78585],{"class":151},"      flex-wrap",[92,78587,51417],{"class":102},[92,78589,78590],{"class":151},"wrap",[92,78592,1269],{"class":102},[92,78594,78595],{"class":94,"line":1672},[92,78596,2166],{"class":102},[92,78598,78599],{"class":94,"line":1677},[92,78600,2379],{"emptyLinePlaceholder":17},[92,78602,78603,78606],{"class":94,"line":1706},[92,78604,78605],{"class":1942},"    .item",[92,78607,15552],{"class":102},[92,78609,78610,78612,78614,78617,78619],{"class":94,"line":1711},[92,78611,54751],{"class":151},[92,78613,51417],{"class":102},[92,78615,78616],{"class":151},"240",[92,78618,51472],{"class":98},[92,78620,1269],{"class":102},[92,78622,78623,78625,78627,78629,78631],{"class":94,"line":1728},[92,78624,61980],{"class":151},[92,78626,51417],{"class":102},[92,78628,549],{"class":151},[92,78630,51472],{"class":98},[92,78632,1269],{"class":102},[92,78634,78635,78637,78639,78641,78643,78646,78648],{"class":94,"line":1733},[92,78636,54675],{"class":151},[92,78638,51417],{"class":102},[92,78640,803],{"class":151},[92,78642,51472],{"class":98},[92,78644,78645],{"class":151}," 30",[92,78647,51472],{"class":98},[92,78649,1269],{"class":102},[92,78651,78652,78654,78656,78658,78661,78664,78666],{"class":94,"line":1738},[92,78653,61840],{"class":151},[92,78655,51417],{"class":102},[92,78657,28102],{"class":151},[92,78659,78660],{"class":151}," ease",[92,78662,78663],{"class":151}," .5",[92,78665,798],{"class":98},[92,78667,1269],{"class":102},[92,78669,78670,78673,78675,78677,78679],{"class":94,"line":1743},[92,78671,78672],{"class":151},"      margin-bottom",[92,78674,51417],{"class":102},[92,78676,803],{"class":151},[92,78678,51472],{"class":98},[92,78680,1269],{"class":102},[92,78682,78683],{"class":94,"line":1757},[92,78684,2166],{"class":102},[92,78686,78687],{"class":94,"line":1762},[92,78688,2379],{"emptyLinePlaceholder":17},[92,78690,78691,78694,78696,78699],{"class":94,"line":2556},[92,78692,78693],{"class":1942},"    .item:nth-child",[92,78695,103],{"class":102},[92,78697,78698],{"class":151},"4n",[92,78700,12422],{"class":102},[92,78702,78703,78705,78707,78709],{"class":94,"line":2570},[92,78704,61980],{"class":151},[92,78706,51417],{"class":102},[92,78708,294],{"class":151},[92,78710,1269],{"class":102},[92,78712,78713],{"class":94,"line":2578},[92,78714,2166],{"class":102},[92,78716,78717],{"class":94,"line":2583},[92,78718,2379],{"emptyLinePlaceholder":17},[92,78720,78721,78724],{"class":94,"line":2589},[92,78722,78723],{"class":1942},"    .item:hover",[92,78725,15552],{"class":102},[92,78727,78728,78731,78733,78735,78737,78739,78741,78743,78745,78748,78750,78752,78754,78756,78758,78760,78762,78765],{"class":94,"line":2595},[92,78729,78730],{"class":151},"      box-shadow",[92,78732,51417],{"class":102},[92,78734,294],{"class":151},[92,78736,51472],{"class":98},[92,78738,4072],{"class":151},[92,78740,51472],{"class":98},[92,78742,2127],{"class":151},[92,78744,51472],{"class":98},[92,78746,78747],{"class":151}," rgba",[92,78749,103],{"class":102},[92,78751,294],{"class":151},[92,78753,12415],{"class":102},[92,78755,294],{"class":151},[92,78757,12415],{"class":102},[92,78759,294],{"class":151},[92,78761,12415],{"class":102},[92,78763,78764],{"class":151},".2",[92,78766,2698],{"class":102},[92,78768,78769,78772,78774,78777,78779,78781,78783,78786,78788,78790,78792],{"class":94,"line":2600},[92,78770,78771],{"class":151},"      transform",[92,78773,51417],{"class":102},[92,78775,78776],{"class":151},"translate3d",[92,78778,103],{"class":102},[92,78780,294],{"class":151},[92,78782,12415],{"class":102},[92,78784,78785],{"class":151},"-4",[92,78787,51472],{"class":98},[92,78789,12415],{"class":102},[92,78791,294],{"class":151},[92,78793,2698],{"class":102},[92,78795,78796,78798,78800,78802],{"class":94,"line":7928},[92,78797,62005],{"class":151},[92,78799,51417],{"class":102},[92,78801,62010],{"class":151},[92,78803,1269],{"class":102},[92,78805,78806],{"class":94,"line":7952},[92,78807,2166],{"class":102},[92,78809,78810],{"class":94,"line":7957},[92,78811,2379],{"emptyLinePlaceholder":17},[92,78813,78814,78816,78818],{"class":94,"line":7963},[92,78815,78605],{"class":1942},[92,78817,55595],{"class":51280},[92,78819,15552],{"class":102},[92,78821,78822,78824,78826,78828,78830],{"class":94,"line":7990},[92,78823,54751],{"class":151},[92,78825,51417],{"class":102},[92,78827,414],{"class":151},[92,78829,431],{"class":98},[92,78831,1269],{"class":102},[92,78833,78834],{"class":94,"line":7995},[92,78835,2166],{"class":102},[92,78837,78838],{"class":94,"line":8001},[92,78839,2379],{"emptyLinePlaceholder":17},[92,78841,78842,78844,78846],{"class":94,"line":8013},[92,78843,78605],{"class":1942},[92,78845,62284],{"class":1942},[92,78847,15552],{"class":102},[92,78849,78850,78852,78854,78856,78858],{"class":94,"line":8025},[92,78851,54902],{"class":151},[92,78853,51417],{"class":102},[92,78855,753],{"class":151},[92,78857,51472],{"class":98},[92,78859,1269],{"class":102},[92,78861,78862,78864,78866,78868,78870],{"class":94,"line":8037},[92,78863,78672],{"class":151},[92,78865,51417],{"class":102},[92,78867,549],{"class":151},[92,78869,51472],{"class":98},[92,78871,1269],{"class":102},[92,78873,78874,78876,78878,78881],{"class":94,"line":9696},[92,78875,57396],{"class":151},[92,78877,51417],{"class":102},[92,78879,78880],{"class":151},"#666",[92,78882,1269],{"class":102},[92,78884,78885],{"class":94,"line":9721},[92,78886,2166],{"class":102},[92,78888,78889],{"class":94,"line":9744},[92,78890,2379],{"emptyLinePlaceholder":17},[92,78892,78893,78895,78898],{"class":94,"line":9768},[92,78894,78605],{"class":1942},[92,78896,78897],{"class":1942}," .price",[92,78899,15552],{"class":102},[92,78901,78902,78904,78906,78908,78910],{"class":94,"line":9773},[92,78903,54902],{"class":151},[92,78905,51417],{"class":102},[92,78907,853],{"class":151},[92,78909,51472],{"class":98},[92,78911,1269],{"class":102},[92,78913,78914,78916,78918,78921],{"class":94,"line":9778},[92,78915,57396],{"class":151},[92,78917,51417],{"class":102},[92,78919,78920],{"class":151},"firebrick",[92,78922,1269],{"class":102},[92,78924,78925],{"class":94,"line":9783},[92,78926,2166],{"class":102},[92,78928,78929],{"class":94,"line":9792},[92,78930,2379],{"emptyLinePlaceholder":17},[92,78932,78933,78935,78938],{"class":94,"line":9797},[92,78934,78605],{"class":1942},[92,78936,78937],{"class":1942}," .price::before",[92,78939,15552],{"class":102},[92,78941,78942,78945,78947,78950],{"class":94,"line":9803},[92,78943,78944],{"class":151},"      content",[92,78946,51417],{"class":102},[92,78948,78949],{"class":207},"'￥'",[92,78951,1269],{"class":102},[92,78953,78954,78956,78958,78960,78962],{"class":94,"line":9824},[92,78955,54902],{"class":151},[92,78957,51417],{"class":102},[92,78959,652],{"class":151},[92,78961,51472],{"class":98},[92,78963,1269],{"class":102},[92,78965,78966],{"class":94,"line":9830},[92,78967,2166],{"class":102},[92,78969,78970],{"class":94,"line":9844},[92,78971,2379],{"emptyLinePlaceholder":17},[92,78973,78974,78977],{"class":94,"line":9850},[92,78975,78976],{"class":1942},"    .filter",[92,78978,15552],{"class":102},[92,78980,78981,78983,78985,78987],{"class":94,"line":9877},[92,78982,54989],{"class":151},[92,78984,51417],{"class":102},[92,78986,51457],{"class":151},[92,78988,1269],{"class":102},[92,78990,78991,78993,78995,78997,78999],{"class":94,"line":9886},[92,78992,54751],{"class":151},[92,78994,51417],{"class":102},[92,78996,78554],{"class":151},[92,78998,51472],{"class":98},[92,79000,1269],{"class":102},[92,79002,79003,79005,79007,79009,79011],{"class":94,"line":9892},[92,79004,54686],{"class":151},[92,79006,51417],{"class":102},[92,79008,294],{"class":151},[92,79010,51536],{"class":151},[92,79012,1269],{"class":102},[92,79014,79015,79017,79019,79021,79023,79025],{"class":94,"line":9900},[92,79016,54675],{"class":151},[92,79018,51417],{"class":102},[92,79020,759],{"class":151},[92,79022,51472],{"class":98},[92,79024,78645],{"class":151},[92,79026,79027],{"class":98},"px\n",[92,79029,79030],{"class":94,"line":9905},[92,79031,2166],{"class":102},[92,79033,79034],{"class":94,"line":16584},[92,79035,2379],{"emptyLinePlaceholder":17},[92,79037,79038,79040,79042],{"class":94,"line":16590},[92,79039,78976],{"class":1942},[92,79041,1377],{"class":51280},[92,79043,15552],{"class":102},[92,79045,79046,79048,79050,79052,79054,79056,79058],{"class":94,"line":16613},[92,79047,54675],{"class":151},[92,79049,51417],{"class":102},[92,79051,549],{"class":151},[92,79053,51472],{"class":98},[92,79055,8930],{"class":151},[92,79057,51472],{"class":98},[92,79059,1269],{"class":102},[92,79061,79062,79064,79066,79068],{"class":94,"line":16619},[92,79063,61701],{"class":151},[92,79065,51417],{"class":102},[92,79067,61798],{"class":151},[92,79069,1269],{"class":102},[92,79071,79072,79074,79076,79078],{"class":94,"line":16642},[92,79073,57396],{"class":151},[92,79075,51417],{"class":102},[92,79077,78880],{"class":151},[92,79079,1269],{"class":102},[92,79081,79082,79084,79086,79088],{"class":94,"line":16656},[92,79083,63950],{"class":151},[92,79085,51417],{"class":102},[92,79087,54717],{"class":151},[92,79089,1269],{"class":102},[92,79091,79092,79094,79096,79098,79100],{"class":94,"line":16676},[92,79093,61730],{"class":151},[92,79095,51417],{"class":102},[92,79097,803],{"class":151},[92,79099,51472],{"class":98},[92,79101,1269],{"class":102},[92,79103,79104],{"class":94,"line":16682},[92,79105,2166],{"class":102},[92,79107,79108],{"class":94,"line":16693},[92,79109,2379],{"emptyLinePlaceholder":17},[92,79111,79112,79114,79116,79118],{"class":94,"line":16716},[92,79113,78976],{"class":1942},[92,79115,1377],{"class":51280},[92,79117,61880],{"class":1942},[92,79119,15552],{"class":102},[92,79121,79122,79124,79126,79129],{"class":94,"line":16738},[92,79123,54864],{"class":151},[92,79125,51417],{"class":102},[92,79127,79128],{"class":151},"#05943c",[92,79130,1269],{"class":102},[92,79132,79133,79135,79137,79139],{"class":94,"line":16743},[92,79134,57396],{"class":151},[92,79136,51417],{"class":102},[92,79138,60822],{"class":151},[92,79140,1269],{"class":102},[92,79142,79143],{"class":94,"line":16749},[92,79144,2166],{"class":102},[92,79146,79147,79149,79151],{"class":94,"line":16763},[92,79148,52397],{"class":102},[92,79150,5106],{"class":51280},[92,79152,51287],{"class":102},[92,79154,79155,79157,79159],{"class":94,"line":16776},[92,79156,51765],{"class":102},[92,79158,51314],{"class":51280},[92,79160,51287],{"class":102},[92,79162,79163],{"class":94,"line":16781},[92,79164,2379],{"emptyLinePlaceholder":17},[92,79166,79167,79169,79171],{"class":94,"line":16795},[92,79168,1013],{"class":102},[92,79170,51780],{"class":51280},[92,79172,51287],{"class":102},[92,79174,79175,79177,79179,79181,79183,79186],{"class":94,"line":16800},[92,79176,52124],{"class":102},[92,79178,51591],{"class":51280},[92,79180,53466],{"class":1942},[92,79182,148],{"class":102},[92,79184,79185],{"class":207},"\"filter\"",[92,79187,51287],{"class":102},[92,79189,79190,79192,79194,79196,79198,79200,79203,79205,79207,79210,79212],{"class":94,"line":16806},[92,79191,51321],{"class":102},[92,79193,341],{"class":51280},[92,79195,61037],{"class":1942},[92,79197,148],{"class":102},[92,79199,61042],{"class":207},[92,79201,79202],{"class":1942}," data-index",[92,79204,148],{"class":102},[92,79206,3657],{"class":207},[92,79208,79209],{"class":102},">0-100元\u003C\u002F",[92,79211,341],{"class":51280},[92,79213,51287],{"class":102},[92,79215,79216,79218,79220,79222,79224,79226,79228,79230,79232,79235,79237],{"class":94,"line":16811},[92,79217,51321],{"class":102},[92,79219,341],{"class":51280},[92,79221,61037],{"class":1942},[92,79223,148],{"class":102},[92,79225,61042],{"class":207},[92,79227,79202],{"class":1942},[92,79229,148],{"class":102},[92,79231,3680],{"class":207},[92,79233,79234],{"class":102},">100-300元\u003C\u002F",[92,79236,341],{"class":51280},[92,79238,51287],{"class":102},[92,79240,79241,79243,79245,79247,79249,79251,79253,79255,79257,79260,79262],{"class":94,"line":16825},[92,79242,51321],{"class":102},[92,79244,341],{"class":51280},[92,79246,61037],{"class":1942},[92,79248,148],{"class":102},[92,79250,61042],{"class":207},[92,79252,79202],{"class":1942},[92,79254,148],{"class":102},[92,79256,3693],{"class":207},[92,79258,79259],{"class":102},">300元以上\u003C\u002F",[92,79261,341],{"class":51280},[92,79263,51287],{"class":102},[92,79265,79266,79268,79270,79272,79274,79276,79279,79281],{"class":94,"line":16830},[92,79267,51321],{"class":102},[92,79269,341],{"class":51280},[92,79271,61037],{"class":1942},[92,79273,148],{"class":102},[92,79275,61042],{"class":207},[92,79277,79278],{"class":102},">全部区间\u003C\u002F",[92,79280,341],{"class":51280},[92,79282,51287],{"class":102},[92,79284,79285,79287,79289],{"class":94,"line":16835},[92,79286,52397],{"class":102},[92,79288,51591],{"class":51280},[92,79290,51287],{"class":102},[92,79292,79293,79295,79297,79299,79301,79303],{"class":94,"line":16849},[92,79294,52124],{"class":102},[92,79296,51591],{"class":51280},[92,79298,53466],{"class":1942},[92,79300,148],{"class":102},[92,79302,62588],{"class":207},[92,79304,51287],{"class":102},[92,79306,79307],{"class":94,"line":16861},[92,79308,79309],{"class":161},"    \u003C!-- \u003Cdiv class=\"item\">\n",[92,79311,79312],{"class":94,"line":16866},[92,79313,79314],{"class":161},"      \u003Cimg src=\"\" alt=\"\">\n",[92,79316,79317],{"class":94,"line":16879},[92,79318,79319],{"class":161},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[92,79321,79322],{"class":94,"line":16884},[92,79323,79324],{"class":161},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[92,79326,79327],{"class":94,"line":16889},[92,79328,79329],{"class":161},"    \u003C\u002Fdiv> -->\n",[92,79331,79332,79334,79336],{"class":94,"line":16894},[92,79333,52397],{"class":102},[92,79335,51591],{"class":51280},[92,79337,51287],{"class":102},[92,79339,79340,79342,79344],{"class":94,"line":16907},[92,79341,52124],{"class":102},[92,79343,51793],{"class":51280},[92,79345,51287],{"class":102},[92,79347,79348],{"class":94,"line":16912},[92,79349,79350],{"class":161},"    \u002F\u002F 2. 初始化数据\n",[92,79352,79353,79355,79358,79360],{"class":94,"line":32614},[92,79354,11201],{"class":98},[92,79356,79357],{"class":151}," goodsList",[92,79359,13544],{"class":98},[92,79361,55427],{"class":102},[92,79363,79364],{"class":94,"line":32620},[92,79365,79366],{"class":102},"      {\n",[92,79368,79369,79372,79375],{"class":94,"line":32626},[92,79370,79371],{"class":102},"        id: ",[92,79373,79374],{"class":207},"'4001172'",[92,79376,31447],{"class":102},[92,79378,79379,79382,79385],{"class":94,"line":32632},[92,79380,79381],{"class":102},"        name: ",[92,79383,79384],{"class":207},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[92,79386,31447],{"class":102},[92,79388,79389,79392,79395],{"class":94,"line":32638},[92,79390,79391],{"class":102},"        price: ",[92,79393,79394],{"class":207},"'289.00'",[92,79396,31447],{"class":102},[92,79398,79399,79402,79405],{"class":94,"line":32649},[92,79400,79401],{"class":102},"        picture: ",[92,79403,79404],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[92,79406,31447],{"class":102},[92,79408,79409],{"class":94,"line":32655},[92,79410,77872],{"class":102},[92,79412,79413],{"class":94,"line":32675},[92,79414,79366],{"class":102},[92,79416,79417,79419,79422],{"class":94,"line":32681},[92,79418,79371],{"class":102},[92,79420,79421],{"class":207},"'4001594'",[92,79423,31447],{"class":102},[92,79425,79426,79428,79431],{"class":94,"line":32692},[92,79427,79381],{"class":102},[92,79429,79430],{"class":207},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[92,79432,31447],{"class":102},[92,79434,79435,79437,79440],{"class":94,"line":32698},[92,79436,79391],{"class":102},[92,79438,79439],{"class":207},"'288.00'",[92,79441,31447],{"class":102},[92,79443,79444,79446,79449],{"class":94,"line":32704},[92,79445,79401],{"class":102},[92,79447,79448],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[92,79450,31447],{"class":102},[92,79452,79453],{"class":94,"line":32710},[92,79454,77872],{"class":102},[92,79456,79457],{"class":94,"line":32716},[92,79458,79366],{"class":102},[92,79460,79461,79463,79466],{"class":94,"line":32722},[92,79462,79371],{"class":102},[92,79464,79465],{"class":207},"'4001009'",[92,79467,31447],{"class":102},[92,79469,79470,79472,79475],{"class":94,"line":32728},[92,79471,79381],{"class":102},[92,79473,79474],{"class":207},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[92,79476,31447],{"class":102},[92,79478,79479,79481,79484],{"class":94,"line":32734},[92,79480,79391],{"class":102},[92,79482,79483],{"class":207},"'109.00'",[92,79485,31447],{"class":102},[92,79487,79488,79490,79493],{"class":94,"line":32754},[92,79489,79401],{"class":102},[92,79491,79492],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[92,79494,31447],{"class":102},[92,79496,79497],{"class":94,"line":32760},[92,79498,77872],{"class":102},[92,79500,79501],{"class":94,"line":32776},[92,79502,79366],{"class":102},[92,79504,79505,79507,79510],{"class":94,"line":32782},[92,79506,79371],{"class":102},[92,79508,79509],{"class":207},"'4001874'",[92,79511,31447],{"class":102},[92,79513,79514,79516,79519],{"class":94,"line":32796},[92,79515,79381],{"class":102},[92,79517,79518],{"class":207},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[92,79520,31447],{"class":102},[92,79522,79523,79525,79528],{"class":94,"line":32802},[92,79524,79391],{"class":102},[92,79526,79527],{"class":207},"'488.00'",[92,79529,31447],{"class":102},[92,79531,79532,79534,79537],{"class":94,"line":32817},[92,79533,79401],{"class":102},[92,79535,79536],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[92,79538,31447],{"class":102},[92,79540,79541],{"class":94,"line":32823},[92,79542,77872],{"class":102},[92,79544,79545],{"class":94,"line":32832},[92,79546,79366],{"class":102},[92,79548,79549,79551,79554],{"class":94,"line":32838},[92,79550,79371],{"class":102},[92,79552,79553],{"class":207},"'4001649'",[92,79555,31447],{"class":102},[92,79557,79558,79560,79563],{"class":94,"line":32847},[92,79559,79381],{"class":102},[92,79561,79562],{"class":207},"'大师监制龙泉青瓷茶叶罐'",[92,79564,31447],{"class":102},[92,79566,79567,79569,79572],{"class":94,"line":32853},[92,79568,79391],{"class":102},[92,79570,79571],{"class":207},"'139.00'",[92,79573,31447],{"class":102},[92,79575,79576,79578,79581],{"class":94,"line":32859},[92,79577,79401],{"class":102},[92,79579,79580],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[92,79582,31447],{"class":102},[92,79584,79585],{"class":94,"line":32868},[92,79586,77872],{"class":102},[92,79588,79589],{"class":94,"line":32874},[92,79590,79366],{"class":102},[92,79592,79593,79595,79598],{"class":94,"line":32885},[92,79594,79371],{"class":102},[92,79596,79597],{"class":207},"'3997185'",[92,79599,31447],{"class":102},[92,79601,79602,79604,79607],{"class":94,"line":32891},[92,79603,79381],{"class":102},[92,79605,79606],{"class":207},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[92,79608,31447],{"class":102},[92,79610,79611,79613,79616],{"class":94,"line":32910},[92,79612,79391],{"class":102},[92,79614,79615],{"class":207},"'108.00'",[92,79617,31447],{"class":102},[92,79619,79620,79622,79625],{"class":94,"line":32916},[92,79621,79401],{"class":102},[92,79623,79624],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[92,79626,31447],{"class":102},[92,79628,79629],{"class":94,"line":32927},[92,79630,77872],{"class":102},[92,79632,79633],{"class":94,"line":32933},[92,79634,79366],{"class":102},[92,79636,79637,79639,79642],{"class":94,"line":32953},[92,79638,79371],{"class":102},[92,79640,79641],{"class":207},"'3997403'",[92,79643,31447],{"class":102},[92,79645,79646,79648,79651],{"class":94,"line":32969},[92,79647,79381],{"class":102},[92,79649,79650],{"class":207},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[92,79652,31447],{"class":102},[92,79654,79655,79657,79660],{"class":94,"line":32975},[92,79656,79391],{"class":102},[92,79658,79659],{"class":207},"'100.00'",[92,79661,31447],{"class":102},[92,79663,79664,79666,79669],{"class":94,"line":32989},[92,79665,79401],{"class":102},[92,79667,79668],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[92,79670,31447],{"class":102},[92,79672,79673],{"class":94,"line":32995},[92,79674,77872],{"class":102},[92,79676,79677],{"class":94,"line":33001},[92,79678,79366],{"class":102},[92,79680,79681,79683,79686],{"class":94,"line":33012},[92,79682,79371],{"class":102},[92,79684,79685],{"class":207},"'3998274'",[92,79687,31447],{"class":102},[92,79689,79690,79692,79695],{"class":94,"line":33018},[92,79691,79381],{"class":102},[92,79693,79694],{"class":207},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[92,79696,31447],{"class":102},[92,79698,79699,79701,79703],{"class":94,"line":33024},[92,79700,79391],{"class":102},[92,79702,79571],{"class":207},[92,79704,31447],{"class":102},[92,79706,79707,79709,79712],{"class":94,"line":33034},[92,79708,79401],{"class":102},[92,79710,79711],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[92,79713,31447],{"class":102},[92,79715,79716],{"class":94,"line":33040},[92,79717,77872],{"class":102},[92,79719,79720],{"class":94,"line":33051},[92,79721,53089],{"class":102},[92,79723,79724],{"class":94,"line":33057},[92,79725,2379],{"emptyLinePlaceholder":17},[92,79727,79728],{"class":94,"line":33067},[92,79729,79730],{"class":161},"    \u002F\u002F 1.渲染函数\n",[92,79732,79733,79735,79737,79739,79741],{"class":94,"line":33072},[92,79734,70064],{"class":98},[92,79736,70067],{"class":1942},[92,79738,103],{"class":102},[92,79740,3859],{"class":5196},[92,79742,12422],{"class":102},[92,79744,79745],{"class":94,"line":33078},[92,79746,79747],{"class":161},"      \u002F\u002F 声明空字符串\n",[92,79749,79750,79753,79756,79758],{"class":94,"line":33127},[92,79751,79752],{"class":98},"      let",[92,79754,79755],{"class":102}," str ",[92,79757,148],{"class":98},[92,79759,70084],{"class":207},[92,79761,79762],{"class":94,"line":33174},[92,79763,70089],{"class":161},[92,79765,79766,79768,79771,79773,79776,79779],{"class":94,"line":33179},[92,79767,57987],{"class":102},[92,79769,79770],{"class":1942},"forEach",[92,79772,103],{"class":102},[92,79774,79775],{"class":5196},"item",[92,79777,79778],{"class":98}," =>",[92,79780,15552],{"class":102},[92,79782,79783,79785,79788,79791,79793,79796,79798,79801,79804,79806],{"class":94,"line":33185},[92,79784,61250],{"class":98},[92,79786,79787],{"class":102}," { ",[92,79789,79790],{"class":151},"name",[92,79792,12415],{"class":102},[92,79794,79795],{"class":151},"price",[92,79797,12415],{"class":102},[92,79799,79800],{"class":151},"picture",[92,79802,79803],{"class":102}," } ",[92,79805,148],{"class":98},[92,79807,79808],{"class":102}," item\n",[92,79810,79811,79814,79816],{"class":94,"line":33204},[92,79812,79813],{"class":102},"        str ",[92,79815,9457],{"class":98},[92,79817,70148],{"class":207},[92,79819,79820],{"class":94,"line":33210},[92,79821,79822],{"class":207},"          \u003Cdiv class=\"item\">\n",[92,79824,79825,79828,79830],{"class":94,"line":33230},[92,79826,79827],{"class":207},"            \u003Cimg src=\"${",[92,79829,79800],{"class":102},[92,79831,79832],{"class":207},"}\" alt=\"\">\n",[92,79834,79835,79838,79840],{"class":94,"line":33236},[92,79836,79837],{"class":207},"            \u003Cp class=\"name\">${",[92,79839,79790],{"class":102},[92,79841,79842],{"class":207},"}\u003C\u002Fp>\n",[92,79844,79845,79848,79850],{"class":94,"line":33242},[92,79846,79847],{"class":207},"            \u003Cp class=\"price\">${",[92,79849,79795],{"class":102},[92,79851,79842],{"class":207},[92,79853,79854],{"class":94,"line":33252},[92,79855,79856],{"class":207},"          \u003C\u002Fdiv>\n",[92,79858,79859],{"class":94,"line":33257},[92,79860,79861],{"class":207},"        `\n",[92,79863,79864],{"class":94,"line":33263},[92,79865,64795],{"class":102},[92,79867,79868],{"class":94,"line":33279},[92,79869,79870],{"class":161},"      \u002F\u002F 追加给List\n",[92,79872,79873,79875,79877,79879,79882,79884,79886],{"class":94,"line":33324},[92,79874,55751],{"class":102},[92,79876,54379],{"class":1942},[92,79878,103],{"class":102},[92,79880,79881],{"class":207},"'.list'",[92,79883,74229],{"class":102},[92,79885,148],{"class":98},[92,79887,73965],{"class":102},[92,79889,79890],{"class":94,"line":33330},[92,79891,2166],{"class":102},[92,79893,79894],{"class":94,"line":33336},[92,79895,79896],{"class":161},"    \u002F\u002F 页面一打开就需要渲染\n",[92,79898,79899,79902],{"class":94,"line":33342},[92,79900,79901],{"class":1942},"    render",[92,79903,79904],{"class":102},"(goodsList)\n",[92,79906,79907],{"class":94,"line":33353},[92,79908,79909],{"class":161},"    \u002F\u002F 2.过滤筛选\n",[92,79911,79912,79914,79916,79918,79921,79923,79925,79927,79929,79931,79933,79935],{"class":94,"line":33359},[92,79913,52387],{"class":102},[92,79915,54379],{"class":1942},[92,79917,103],{"class":102},[92,79919,79920],{"class":207},"'.filter'",[92,79922,30807],{"class":102},[92,79924,57793],{"class":1942},[92,79926,103],{"class":102},[92,79928,57798],{"class":207},[92,79930,12415],{"class":102},[92,79932,177],{"class":5196},[92,79934,79778],{"class":98},[92,79936,15552],{"class":102},[92,79938,79939],{"class":94,"line":33365},[92,79940,79941],{"class":161},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[92,79943,79944,79946,79948,79951,79953,79955,79957,79959],{"class":94,"line":33371},[92,79945,58208],{"class":98},[92,79947,79787],{"class":102},[92,79949,79950],{"class":151},"tagName",[92,79952,12415],{"class":102},[92,79954,31518],{"class":151},[92,79956,79803],{"class":102},[92,79958,148],{"class":98},[92,79960,79961],{"class":102}," e.target\n",[92,79963,79964],{"class":94,"line":33389},[92,79965,79966],{"class":161},"      \u002F\u002F 判断\n",[92,79968,79969,79971,79973,79975,79977],{"class":94,"line":33403},[92,79970,54460],{"class":98},[92,79972,67014],{"class":102},[92,79974,54466],{"class":98},[92,79976,68236],{"class":207},[92,79978,12422],{"class":102},[92,79980,79981],{"class":94,"line":33412},[92,79982,79983],{"class":161},"        \u002F\u002F console.log(11)\n",[92,79985,79986],{"class":94,"line":33421},[92,79987,79988],{"class":161},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[92,79990,79991],{"class":94,"line":33430},[92,79992,79993],{"class":161},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[92,79995,79996,79998,80000,80002],{"class":94,"line":33439},[92,79997,51810],{"class":98},[92,79999,51813],{"class":102},[92,80001,148],{"class":98},[92,80003,80004],{"class":102}," goodsList\n",[92,80006,80007,80009,80012,80014,80017],{"class":94,"line":33445},[92,80008,2476],{"class":98},[92,80010,80011],{"class":102}," (dataset.index ",[92,80013,54466],{"class":98},[92,80015,80016],{"class":207}," '1'",[92,80018,12422],{"class":102},[92,80020,80021,80024,80026,80029,80032,80034,80036,80038,80041,80043,80045,80048,80050,80052,80054],{"class":94,"line":33451},[92,80022,80023],{"class":102},"          arr ",[92,80025,148],{"class":98},[92,80027,80028],{"class":102}," goodsList.",[92,80030,80031],{"class":1942},"filter",[92,80033,103],{"class":102},[92,80035,79775],{"class":5196},[92,80037,79778],{"class":98},[92,80039,80040],{"class":102}," item.price ",[92,80042,1689],{"class":98},[92,80044,4072],{"class":151},[92,80046,80047],{"class":98}," &&",[92,80049,80040],{"class":102},[92,80051,1567],{"class":98},[92,80053,5734],{"class":151},[92,80055,109],{"class":102},[92,80057,80058,80061,80063,80065,80067,80069,80072],{"class":94,"line":33459},[92,80059,80060],{"class":102},"        } ",[92,80062,1680],{"class":98},[92,80064,1683],{"class":98},[92,80066,80011],{"class":102},[92,80068,54466],{"class":98},[92,80070,80071],{"class":207}," '2'",[92,80073,12422],{"class":102},[92,80075,80076,80078,80080,80082,80084,80086,80088,80090,80092,80094,80096,80098,80100,80102,80105],{"class":94,"line":33464},[92,80077,80023],{"class":102},[92,80079,148],{"class":98},[92,80081,80028],{"class":102},[92,80083,80031],{"class":1942},[92,80085,103],{"class":102},[92,80087,79775],{"class":5196},[92,80089,79778],{"class":98},[92,80091,80040],{"class":102},[92,80093,1689],{"class":98},[92,80095,5734],{"class":151},[92,80097,80047],{"class":98},[92,80099,80040],{"class":102},[92,80101,1567],{"class":98},[92,80103,80104],{"class":151}," 300",[92,80106,109],{"class":102},[92,80108,80109,80111,80113,80115,80117,80119,80122],{"class":94,"line":33470},[92,80110,80060],{"class":102},[92,80112,1680],{"class":98},[92,80114,1683],{"class":98},[92,80116,80011],{"class":102},[92,80118,54466],{"class":98},[92,80120,80121],{"class":207}," '3'",[92,80123,12422],{"class":102},[92,80125,80126,80128,80130,80132,80134,80136,80138,80140,80142,80144,80146],{"class":94,"line":33481},[92,80127,80023],{"class":102},[92,80129,148],{"class":98},[92,80131,80028],{"class":102},[92,80133,80031],{"class":1942},[92,80135,103],{"class":102},[92,80137,79775],{"class":5196},[92,80139,79778],{"class":98},[92,80141,80040],{"class":102},[92,80143,1689],{"class":98},[92,80145,80104],{"class":151},[92,80147,109],{"class":102},[92,80149,80150],{"class":94,"line":33487},[92,80151,2508],{"class":102},[92,80153,80154],{"class":94,"line":33507},[92,80155,80156],{"class":161},"        \u002F\u002F 渲染函数\n",[92,80158,80159,80161],{"class":94,"line":33513},[92,80160,70388],{"class":1942},[92,80162,52392],{"class":102},[92,80164,80165],{"class":94,"line":33519},[92,80166,52378],{"class":102},[92,80168,80169],{"class":94,"line":33525},[92,80170,2379],{"emptyLinePlaceholder":17},[92,80172,80173],{"class":94,"line":33542},[92,80174,33442],{"class":102},[92,80176,80177,80179,80181],{"class":94,"line":33548},[92,80178,52397],{"class":102},[92,80180,51793],{"class":51280},[92,80182,51287],{"class":102},[92,80184,80185,80187,80189],{"class":94,"line":33554},[92,80186,51765],{"class":102},[92,80188,51780],{"class":51280},[92,80190,51287],{"class":102},[92,80192,80193],{"class":94,"line":33560},[92,80194,2379],{"emptyLinePlaceholder":17},[92,80196,80197,80199,80201],{"class":94,"line":33566},[92,80198,51765],{"class":102},[92,80200,50615],{"class":51280},[92,80202,51287],{"class":102},[33,80204,80206],{"id":80205},"_410-深入了解对象","4.10 深入了解对象",[63,80208,80210],{"id":80209},"_4101-创建对象","4.10.1 创建对象",[38,80212,80213],{},[1441,80214],{"alt":10,"src":80215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[38,80217,80218],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[63,80220,80222],{"id":80221},"_4102-构造函数","4.10.2 构造函数",[38,80224,80225,80228],{},[252,80226,80227],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[38,80230,80231,80234],{},[252,80232,80233],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[83,80236,80238],{"className":50613,"code":80237,"language":50615,"meta":10,"style":10},"\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",[89,80239,80240,80248,80253,80274,80287,80299,80311,80315,80320,80347,80352,80379],{"__ignoreMap":10},[92,80241,80242,80244,80246],{"class":94,"line":95},[92,80243,1013],{"class":102},[92,80245,51793],{"class":51280},[92,80247,51287],{"class":102},[92,80249,80250],{"class":94,"line":11},[92,80251,80252],{"class":161},"\u002F\u002F例：\n",[92,80254,80255,80257,80260,80262,80264,80266,80268,80270,80272],{"class":94,"line":1158},[92,80256,54429],{"class":98},[92,80258,80259],{"class":1942}," Pig",[92,80261,103],{"class":102},[92,80263,79790],{"class":5196},[92,80265,481],{"class":102},[92,80267,70201],{"class":5196},[92,80269,481],{"class":102},[92,80271,70218],{"class":5196},[92,80273,12422],{"class":102},[92,80275,80276,80279,80282,80284],{"class":94,"line":1173},[92,80277,80278],{"class":151},"    this",[92,80280,80281],{"class":102},".name",[92,80283,148],{"class":98},[92,80285,80286],{"class":102},"name\n",[92,80288,80289,80291,80294,80296],{"class":94,"line":1179},[92,80290,80278],{"class":151},[92,80292,80293],{"class":102},".age",[92,80295,148],{"class":98},[92,80297,80298],{"class":102},"age\n",[92,80300,80301,80303,80306,80308],{"class":94,"line":1193},[92,80302,80278],{"class":151},[92,80304,80305],{"class":102},".gender",[92,80307,148],{"class":98},[92,80309,80310],{"class":102},"gender    \n",[92,80312,80313],{"class":94,"line":1199},[92,80314,1544],{"class":102},[92,80316,80317],{"class":94,"line":1290},[92,80318,80319],{"class":161},"\u002F\u002F创建佩奇对象\n",[92,80321,80322,80324,80327,80329,80331,80333,80336,80338,80340,80342,80345],{"class":94,"line":1296},[92,80323,6772],{"class":98},[92,80325,80326],{"class":151}," Peppa",[92,80328,11697],{"class":98},[92,80330,80259],{"class":1942},[92,80332,103],{"class":102},[92,80334,80335],{"class":207},"'佩奇'",[92,80337,481],{"class":102},[92,80339,447],{"class":151},[92,80341,481],{"class":102},[92,80343,80344],{"class":207},"'女'",[92,80346,109],{"class":102},[92,80348,80349],{"class":94,"line":1308},[92,80350,80351],{"class":161},"\u002F\u002F创建乔治对象\n",[92,80353,80354,80356,80359,80361,80363,80365,80368,80370,80372,80374,80377],{"class":94,"line":1591},[92,80355,6772],{"class":98},[92,80357,80358],{"class":151}," George",[92,80360,11697],{"class":98},[92,80362,80259],{"class":1942},[92,80364,103],{"class":102},[92,80366,80367],{"class":207},"'乔治'",[92,80369,481],{"class":102},[92,80371,174],{"class":151},[92,80373,481],{"class":102},[92,80375,80376],{"class":207},"'男'",[92,80378,109],{"class":102},[92,80380,80381,80383,80385],{"class":94,"line":1596},[92,80382,51765],{"class":102},[92,80384,51793],{"class":51280},[92,80386,51287],{"class":102},[38,80388,80389],{},[1441,80390],{"alt":10,"src":80391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[38,80393,80394],{},[1441,80395],{"alt":10,"src":80396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[38,80398,80399],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[38,80401,80402],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[38,80404,80405],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[38,80407,80408],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[38,80410,80411],{},"这里用等号是因为：对象.属性=值",[38,80413,80414],{},"①利用对象字面量创建对象",[38,80416,80417],{},"const o={",[38,80419,80420],{},"name:'pink'",[38,80422,80423],{},"} ②利用new Object创建对象",[38,80425,80426],{},"const o=new Object({name:'pink'})",[38,80428,80429],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[38,80431,80432],{},"构造函数创建对象的执行过程：",[38,80434,80435],{},[1441,80436],{"alt":10,"src":80437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[63,80439,80441],{"id":80440},"_4103-实例成员","4.10.3 实例成员",[38,80443,80444],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[46,80446,80447,80450,80453],{},[49,80448,80449],{},"实例对象的属性和方法即为实例成员",[49,80451,80452],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[49,80454,80455],{},"构造函数创建的实例对象彼此独立互不影响",[63,80457,80459],{"id":80458},"_4104-静态成员","4.10.4 静态成员",[38,80461,80462],{},[1441,80463],{"alt":10,"src":80464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[38,80466,80467],{},"静态成员有Date.now() Math.PI Math.random()",[38,80469,80470],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[38,80472,80473],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[38,80475,80476],{},"function Pig(name) n {",[38,80478,80479],{},"this.name=name",[38,80481,1049],{},[38,80483,80484],{},"Pig.eyes=2",[38,80486,80487],{},"Pig.sayHai=function () { console.log(this) }",[38,80489,80490],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[38,80492,80493],{},"console.log(Pig.eyes) \u002F\u002F2",[38,80495,11312],{},[46,80497,80498,80501,80504,80507,80510],{},[49,80499,80500],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[49,80502,80503],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[49,80505,80506],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[49,80508,80509],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[49,80511,80512],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[38,80514,80515],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[63,80517,80519],{"id":80518},"_4105-内置构造函数","4.10.5 内置构造函数",[38,80521,80522],{},"内置构造函数包含：",[38,80524,80525],{},[1441,80526],{"alt":10,"src":80527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[38,80529,80530],{},[1441,80531],{"alt":10,"src":80532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[38,80534,80535],{},"这些基本数据类型，js对他们进行了包装",[51793,80537,80538],{},"\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",[21978,80540,80542],{"id":80541},"_41051-object","4.10.5.1 Object",[38,80544,80545],{},"Object 是内置的构造函数，用于创建普通对象",[38,80547,80548],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[83,80550,80552],{"className":50613,"code":80551,"language":50615,"meta":10,"style":10},"const user=new Object({name:'小明',age:15})\n",[89,80553,80554],{"__ignoreMap":10},[92,80555,80556],{"class":94,"line":95},[92,80557,80551],{"class":102},[38,80559,80560],{},"三个常用的静态方法：",[22890,80562,80564],{"id":80563},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[38,80566,80567],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[38,80569,80570],{},[1441,80571],{"alt":10,"src":80572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[38,80574,80575],{},[1441,80576],{"alt":10,"src":80577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[83,80579,80581],{"className":53047,"code":80580,"language":53049,"meta":10,"style":10},"\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",[89,80582,80583,80591,80599,80604,80609,80614,80619,80624,80629,80637],{"__ignoreMap":10},[92,80584,80585,80587,80589],{"class":94,"line":95},[92,80586,1013],{"class":102},[92,80588,51780],{"class":51280},[92,80590,51287],{"class":102},[92,80592,80593,80595,80597],{"class":94,"line":11},[92,80594,52124],{"class":102},[92,80596,51793],{"class":51280},[92,80598,51287],{"class":102},[92,80600,80601],{"class":94,"line":1158},[92,80602,80603],{"class":102},"    const o = { name: 'pink', age: 6 }\n",[92,80605,80606],{"class":94,"line":1173},[92,80607,80608],{"class":102},"    \u002F\u002F 获得所有属性名\n",[92,80610,80611],{"class":94,"line":1179},[92,80612,80613],{"class":102},"    const arr = Object.keys(o)\n",[92,80615,80616],{"class":94,"line":1193},[92,80617,80618],{"class":102},"    console.log(arr)\n",[92,80620,80621],{"class":94,"line":1199},[92,80622,80623],{"class":102},"    \u002F\u002F 获得所有属性值\n",[92,80625,80626],{"class":94,"line":1290},[92,80627,80628],{"class":102},"    console.log(Object.values(o))\n",[92,80630,80631,80633,80635],{"class":94,"line":1296},[92,80632,52397],{"class":102},[92,80634,51793],{"class":51280},[92,80636,51287],{"class":102},[92,80638,80639,80641,80643],{"class":94,"line":1308},[92,80640,51765],{"class":102},[92,80642,51780],{"class":51280},[92,80644,51287],{"class":102},[22890,80646,80648],{"id":80647},"_410512-object-assign","4.10.5.1.2 Object. assign",[38,80650,80651],{},"Object.assign(oo,o)",[38,80653,80654],{},"后的东西添加给前 是追加",[38,80656,80657],{},[1441,80658],{"alt":10,"src":80659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[38,80661,80662],{},[1441,80663],{"alt":10,"src":80664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[83,80666,80668],{"className":53047,"code":80667,"language":53049,"meta":10,"style":10},"\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",[89,80669,80670,80678,80686,80690,80694,80698,80702,80706,80710,80715,80720,80725,80730,80735,80743],{"__ignoreMap":10},[92,80671,80672,80674,80676],{"class":94,"line":95},[92,80673,1013],{"class":102},[92,80675,51780],{"class":51280},[92,80677,51287],{"class":102},[92,80679,80680,80682,80684],{"class":94,"line":11},[92,80681,52124],{"class":102},[92,80683,51793],{"class":51280},[92,80685,51287],{"class":102},[92,80687,80688],{"class":94,"line":1158},[92,80689,80603],{"class":102},[92,80691,80692],{"class":94,"line":1173},[92,80693,80608],{"class":102},[92,80695,80696],{"class":94,"line":1179},[92,80697,80613],{"class":102},[92,80699,80700],{"class":94,"line":1193},[92,80701,80618],{"class":102},[92,80703,80704],{"class":94,"line":1199},[92,80705,80623],{"class":102},[92,80707,80708],{"class":94,"line":1290},[92,80709,80628],{"class":102},[92,80711,80712],{"class":94,"line":1296},[92,80713,80714],{"class":102},"    const oo = {}\n",[92,80716,80717],{"class":94,"line":1308},[92,80718,80719],{"class":102},"    Object.assign(oo, o)\n",[92,80721,80722],{"class":94,"line":1591},[92,80723,80724],{"class":102},"    console.log(oo)\n",[92,80726,80727],{"class":94,"line":1596},[92,80728,80729],{"class":102},"    Object.assign(o, { gender: '女' })\n",[92,80731,80732],{"class":94,"line":1602},[92,80733,80734],{"class":102},"    console.log(o)\n",[92,80736,80737,80739,80741],{"class":94,"line":1607},[92,80738,52397],{"class":102},[92,80740,51793],{"class":51280},[92,80742,51287],{"class":102},[92,80744,80745,80747,80749],{"class":94,"line":1621},[92,80746,51765],{"class":102},[92,80748,51780],{"class":51280},[92,80750,51287],{"class":102},[38,80752,80753],{},[1441,80754],{"alt":10,"src":80755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21978,80757,80759],{"id":80758},"_41052-array","4.10.5.2 Array",[38,80761,80762],{},"Array 是内置的构造函数，用于创建数组",[38,80764,80765],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[83,80767,80769],{"className":50613,"code":80768,"language":50615,"meta":10,"style":10},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[89,80770,80771,80776],{"__ignoreMap":10},[92,80772,80773],{"class":94,"line":95},[92,80774,80775],{"class":102},"const arr=new Array(3,5)\n",[92,80777,80778],{"class":94,"line":11},[92,80779,80780],{"class":102},"console.log(arr)  \u002F\u002F[3,5]\n",[38,80782,80783],{},"Array的实例方法，这个方法是实例成员",[38,80785,80786],{},[1441,80787],{"alt":10,"src":80788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22890,80790,80792],{"id":80791},"_410521-reduce","4.10.5.2.1 reduce",[38,80794,80795],{},[1441,80796],{"alt":10,"src":80797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[83,80799,80801],{"className":53047,"code":80800,"language":53049,"meta":10,"style":10},"\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",[89,80802,80803,80811,80819,80824,80829,80834,80839,80843,80848,80853,80858,80862,80867,80872,80876,80881,80886,80891,80899],{"__ignoreMap":10},[92,80804,80805,80807,80809],{"class":94,"line":95},[92,80806,1013],{"class":102},[92,80808,51780],{"class":51280},[92,80810,51287],{"class":102},[92,80812,80813,80815,80817],{"class":94,"line":11},[92,80814,52124],{"class":102},[92,80816,51793],{"class":51280},[92,80818,51287],{"class":102},[92,80820,80821],{"class":94,"line":1158},[92,80822,80823],{"class":102},"    const arr = [1, 5, 8]\n",[92,80825,80826],{"class":94,"line":1173},[92,80827,80828],{"class":102},"    \u002F\u002F 1.没有初始值\n",[92,80830,80831],{"class":94,"line":1179},[92,80832,80833],{"class":102},"    const total = arr.reduce(function (prev, current) {\n",[92,80835,80836],{"class":94,"line":1193},[92,80837,80838],{"class":102},"      return prev + current\n",[92,80840,80841],{"class":94,"line":1199},[92,80842,33442],{"class":102},[92,80844,80845],{"class":94,"line":1290},[92,80846,80847],{"class":102},"    console.log(total)   \u002F\u002F14\n",[92,80849,80850],{"class":94,"line":1296},[92,80851,80852],{"class":102},"    \u002F\u002F 2.有初始值\n",[92,80854,80855],{"class":94,"line":1308},[92,80856,80857],{"class":102},"    const total1 = arr.reduce(function (prev, current) {\n",[92,80859,80860],{"class":94,"line":1591},[92,80861,80838],{"class":102},[92,80863,80864],{"class":94,"line":1596},[92,80865,80866],{"class":102},"    }, 10)\n",[92,80868,80869],{"class":94,"line":1602},[92,80870,80871],{"class":102},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[92,80873,80874],{"class":94,"line":1607},[92,80875,2379],{"emptyLinePlaceholder":17},[92,80877,80878],{"class":94,"line":1621},[92,80879,80880],{"class":102},"    \u002F\u002F 3.箭头函数写法\n",[92,80882,80883],{"class":94,"line":1626},[92,80884,80885],{"class":102},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[92,80887,80888],{"class":94,"line":1632},[92,80889,80890],{"class":102},"    console.log(total2)   \u002F\u002F24\n",[92,80892,80893,80895,80897],{"class":94,"line":1653},[92,80894,52397],{"class":102},[92,80896,51793],{"class":51280},[92,80898,51287],{"class":102},[92,80900,80901,80903,80905],{"class":94,"line":1658},[92,80902,51765],{"class":102},[92,80904,51780],{"class":51280},[92,80906,51287],{"class":102},[38,80908,80909],{},"执行过程：",[46,80911,80912,80915,80918],{},[49,80913,80914],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[49,80916,80917],{},"每一次循环，把返回值给作为下一次循环的上一次值",[49,80919,80920],{},"如果有起始值，则起始值作为上一次值",[83,80922,80924],{"className":53047,"code":80923,"language":53049,"meta":10,"style":10},"\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",[89,80925,80926,80934,80942,80946,80950,80954,80958,80962,80966,80971,80976,80981,80986,80991,80995,80999,81003,81007,81011,81015,81020,81024,81029,81033,81038,81043,81047,81051,81055,81063],{"__ignoreMap":10},[92,80927,80928,80930,80932],{"class":94,"line":95},[92,80929,1013],{"class":102},[92,80931,51780],{"class":51280},[92,80933,51287],{"class":102},[92,80935,80936,80938,80940],{"class":94,"line":11},[92,80937,52124],{"class":102},[92,80939,51793],{"class":51280},[92,80941,51287],{"class":102},[92,80943,80944],{"class":94,"line":1158},[92,80945,80823],{"class":102},[92,80947,80948],{"class":94,"line":1173},[92,80949,80828],{"class":102},[92,80951,80952],{"class":94,"line":1179},[92,80953,80833],{"class":102},[92,80955,80956],{"class":94,"line":1193},[92,80957,80838],{"class":102},[92,80959,80960],{"class":94,"line":1199},[92,80961,33442],{"class":102},[92,80963,80964],{"class":94,"line":1290},[92,80965,80847],{"class":102},[92,80967,80968],{"class":94,"line":1296},[92,80969,80970],{"class":102},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[92,80972,80973],{"class":94,"line":1308},[92,80974,80975],{"class":102},"    \u002F\u002F     1              5                    6\n",[92,80977,80978],{"class":94,"line":1591},[92,80979,80980],{"class":102},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[92,80982,80983],{"class":94,"line":1596},[92,80984,80985],{"class":102},"    \u002F\u002F     6              8                    14\n",[92,80987,80988],{"class":94,"line":1602},[92,80989,80990],{"class":102},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[92,80992,80993],{"class":94,"line":1607},[92,80994,80852],{"class":102},[92,80996,80997],{"class":94,"line":1621},[92,80998,80857],{"class":102},[92,81000,81001],{"class":94,"line":1626},[92,81002,80838],{"class":102},[92,81004,81005],{"class":94,"line":1632},[92,81006,80866],{"class":102},[92,81008,81009],{"class":94,"line":1653},[92,81010,80871],{"class":102},[92,81012,81013],{"class":94,"line":1658},[92,81014,80970],{"class":102},[92,81016,81017],{"class":94,"line":1672},[92,81018,81019],{"class":102},"    \u002F\u002F     10             1                     11\n",[92,81021,81022],{"class":94,"line":1677},[92,81023,80980],{"class":102},[92,81025,81026],{"class":94,"line":1706},[92,81027,81028],{"class":102},"    \u002F\u002F     11             5                    16\n",[92,81030,81031],{"class":94,"line":1711},[92,81032,80980],{"class":102},[92,81034,81035],{"class":94,"line":1728},[92,81036,81037],{"class":102},"    \u002F\u002F     16             8                    24\n",[92,81039,81040],{"class":94,"line":1733},[92,81041,81042],{"class":102},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[92,81044,81045],{"class":94,"line":1738},[92,81046,80880],{"class":102},[92,81048,81049],{"class":94,"line":1743},[92,81050,80885],{"class":102},[92,81052,81053],{"class":94,"line":1757},[92,81054,80890],{"class":102},[92,81056,81057,81059,81061],{"class":94,"line":1762},[92,81058,52397],{"class":102},[92,81060,51793],{"class":51280},[92,81062,51287],{"class":102},[92,81064,81065,81067,81069],{"class":94,"line":2556},[92,81066,51765],{"class":102},[92,81068,51780],{"class":51280},[92,81070,51287],{"class":102},[22890,81072,81074],{"id":81073},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[38,81076,81077],{},[1441,81078],{"alt":10,"src":81079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[83,81081,81083],{"className":53047,"code":81082,"language":53049,"meta":10,"style":10},"\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",[89,81084,81085,81093,81101,81106,81111,81116,81121,81125,81130,81135,81140,81145,81150,81155,81159,81164,81168,81173,81181],{"__ignoreMap":10},[92,81086,81087,81089,81091],{"class":94,"line":95},[92,81088,1013],{"class":102},[92,81090,51780],{"class":51280},[92,81092,51287],{"class":102},[92,81094,81095,81097,81099],{"class":94,"line":11},[92,81096,52124],{"class":102},[92,81098,51793],{"class":51280},[92,81100,51287],{"class":102},[92,81102,81103],{"class":94,"line":1158},[92,81104,81105],{"class":102},"    const arr = [\n",[92,81107,81108],{"class":94,"line":1173},[92,81109,81110],{"class":102},"      { name: '张三', salary: 10000 },\n",[92,81112,81113],{"class":94,"line":1179},[92,81114,81115],{"class":102},"      { name: '李四', salary: 10000 },\n",[92,81117,81118],{"class":94,"line":1193},[92,81119,81120],{"class":102},"      { name: '王五', salary: 10000 }\n",[92,81122,81123],{"class":94,"line":1199},[92,81124,53089],{"class":102},[92,81126,81127],{"class":94,"line":1290},[92,81128,81129],{"class":102},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[92,81131,81132],{"class":94,"line":1296},[92,81133,81134],{"class":102},"    \u002F\u002F prev是累计值\n",[92,81136,81137],{"class":94,"line":1308},[92,81138,81139],{"class":102},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[92,81141,81142],{"class":94,"line":1591},[92,81143,81144],{"class":102},"    console.log(total)\n",[92,81146,81147],{"class":94,"line":1596},[92,81148,81149],{"class":102},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[92,81151,81152],{"class":94,"line":1602},[92,81153,81154],{"class":102},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[92,81156,81157],{"class":94,"line":1607},[92,81158,81149],{"class":102},[92,81160,81161],{"class":94,"line":1621},[92,81162,81163],{"class":102},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[92,81165,81166],{"class":94,"line":1626},[92,81167,81149],{"class":102},[92,81169,81170],{"class":94,"line":1632},[92,81171,81172],{"class":102},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[92,81174,81175,81177,81179],{"class":94,"line":1653},[92,81176,52397],{"class":102},[92,81178,51793],{"class":51280},[92,81180,51287],{"class":102},[92,81182,81183,81185,81187],{"class":94,"line":1658},[92,81184,51765],{"class":102},[92,81186,51780],{"class":51280},[92,81188,51287],{"class":102},[22890,81190,81192],{"id":81191},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[38,81194,81195],{},[1441,81196],{"alt":10,"src":81197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[38,81199,81200],{},[1441,81201],{"alt":10,"src":81202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[46,81204,81205],{},[49,81206,81207],{},"find()",[38,81209,81210],{},"循环查找，找到第一个就ok",[38,81212,81213],{},[341,81214,81217],{"href":81215,"rel":81216},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23845],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[83,81219,81221],{"className":50613,"code":81220,"language":50615,"meta":10,"style":10},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[89,81222,81223,81228,81233],{"__ignoreMap":10},[92,81224,81225],{"class":94,"line":95},[92,81226,81227],{"class":102},"const array1 = [5, 12, 8, 130, 44]\n",[92,81229,81230],{"class":94,"line":11},[92,81231,81232],{"class":102},"const found = array1.find((element) => element > 10)\n",[92,81234,81235],{"class":94,"line":1158},[92,81236,81237],{"class":102},"console.log(found)  \u002F\u002F12\n",[38,81239,81240,81242,81243,81248,81249,81252,81253,81255,81256,81261,81262,81264,81265,81267,81268,81270,81271],{},[89,81241,81207],{}," 方法是一个",[341,81244,81247],{"href":81245,"rel":81246},"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",[23845],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[89,81250,81251],{},"callbackFn"," 函数，直到 ",[89,81254,81251],{}," 返回一个",[341,81257,81260],{"href":81258,"rel":81259},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23845],"真值","。然后 ",[89,81263,81207],{}," 返回该元素并停止迭代数组。如果 ",[89,81266,81251],{}," 从未返回真值，则 ",[89,81269,81207],{}," 返回 ",[89,81272,81273],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[83,81275,81277],{"className":53047,"code":81276,"language":53049,"meta":10,"style":10},"\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",[89,81278,81279,81287,81295,81300,81305,81310,81314,81319,81324,81328,81333,81338,81342,81346,81351,81356,81360,81364,81369,81374,81379,81384,81389,81393,81398,81403,81408,81413,81417,81422,81430],{"__ignoreMap":10},[92,81280,81281,81283,81285],{"class":94,"line":95},[92,81282,1013],{"class":102},[92,81284,51780],{"class":51280},[92,81286,51287],{"class":102},[92,81288,81289,81291,81293],{"class":94,"line":11},[92,81290,52124],{"class":102},[92,81292,51793],{"class":51280},[92,81294,51287],{"class":102},[92,81296,81297],{"class":94,"line":1158},[92,81298,81299],{"class":102},"    const arr = ['red', 'blue', 'green']\n",[92,81301,81302],{"class":94,"line":1173},[92,81303,81304],{"class":102},"    const found = arr.find(item => item === 'pink')\n",[92,81306,81307],{"class":94,"line":1179},[92,81308,81309],{"class":102},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[92,81311,81312],{"class":94,"line":1193},[92,81313,2379],{"emptyLinePlaceholder":17},[92,81315,81316],{"class":94,"line":1199},[92,81317,81318],{"class":102},"    \u002F\u002F 使用场景，用于查找数据\n",[92,81320,81321],{"class":94,"line":1290},[92,81322,81323],{"class":102},"    const arr1 = [\n",[92,81325,81326],{"class":94,"line":1296},[92,81327,79366],{"class":102},[92,81329,81330],{"class":94,"line":1308},[92,81331,81332],{"class":102},"        name: '小米',\n",[92,81334,81335],{"class":94,"line":1591},[92,81336,81337],{"class":102},"        price: 1999\n",[92,81339,81340],{"class":94,"line":1596},[92,81341,77872],{"class":102},[92,81343,81344],{"class":94,"line":1602},[92,81345,79366],{"class":102},[92,81347,81348],{"class":94,"line":1607},[92,81349,81350],{"class":102},"        name: '华为',\n",[92,81352,81353],{"class":94,"line":1621},[92,81354,81355],{"class":102},"        price: 3999\n",[92,81357,81358],{"class":94,"line":1626},[92,81359,52378],{"class":102},[92,81361,81362],{"class":94,"line":1632},[92,81363,53089],{"class":102},[92,81365,81366],{"class":94,"line":1653},[92,81367,81368],{"class":102},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[92,81370,81371],{"class":94,"line":1658},[92,81372,81373],{"class":102},"    \u002F\u002F const found1 = arr1.find(item => {\n",[92,81375,81376],{"class":94,"line":1672},[92,81377,81378],{"class":102},"    \u002F\u002F   if (item.name === '小米') {\n",[92,81380,81381],{"class":94,"line":1677},[92,81382,81383],{"class":102},"    \u002F\u002F     return item\n",[92,81385,81386],{"class":94,"line":1706},[92,81387,81388],{"class":102},"    \u002F\u002F   }\n",[92,81390,81391],{"class":94,"line":1711},[92,81392,63270],{"class":102},[92,81394,81395],{"class":94,"line":1728},[92,81396,81397],{"class":102},"    \u002F\u002F 另一种写法\n",[92,81399,81400],{"class":94,"line":1733},[92,81401,81402],{"class":102},"    const found1 = arr1.find(item => {\n",[92,81404,81405],{"class":94,"line":1738},[92,81406,81407],{"class":102},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[92,81409,81410],{"class":94,"line":1743},[92,81411,81412],{"class":102},"      return item.name = '小米'\n",[92,81414,81415],{"class":94,"line":1757},[92,81416,33442],{"class":102},[92,81418,81419],{"class":94,"line":1762},[92,81420,81421],{"class":102},"    console.log(found1)\n",[92,81423,81424,81426,81428],{"class":94,"line":2556},[92,81425,52397],{"class":102},[92,81427,51793],{"class":51280},[92,81429,51287],{"class":102},[92,81431,81432,81434,81436],{"class":94,"line":2570},[92,81433,51765],{"class":102},[92,81435,51780],{"class":51280},[92,81437,51287],{"class":102},[38,81439,81440],{},[1441,81441],{"alt":10,"src":81442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[38,81444,81445],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[46,81447,81448],{"start":11},[49,81449,81450],{},"every()返回的是布尔值",[38,81452,81453],{},[341,81454,81457],{"href":81455,"rel":81456},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23845],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[38,81459,81460],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[38,81462,81463],{},"some是只有有一个就没问题",[38,81465,81466],{},"every是必须全是才行",[83,81468,81472],{"className":81469,"code":81470,"language":81471,"meta":10,"style":10},"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",[89,81473,81474,81490,81504,81508,81517],{"__ignoreMap":10},[92,81475,81476,81478,81481,81483,81485,81488],{"class":94,"line":95},[92,81477,54429],{"class":98},[92,81479,81480],{"class":102}," isBigEnough(element, ",[92,81482,74038],{"class":98},[92,81484,12415],{"class":102},[92,81486,81487],{"class":98},"array",[92,81489,12422],{"class":102},[92,81491,81492,81495,81498,81500,81502],{"class":94,"line":11},[92,81493,81494],{"class":98},"  return",[92,81496,81497],{"class":102}," element ",[92,81499,1689],{"class":98},[92,81501,2017],{"class":151},[92,81503,1269],{"class":102},[92,81505,81506],{"class":94,"line":1158},[92,81507,1544],{"class":102},[92,81509,81510,81513,81515],{"class":94,"line":1173},[92,81511,81512],{"class":102},"[12, 5, 8, 130, 44].every(isBigEnough); ",[92,81514,33310],{"class":98},[92,81516,54496],{"class":102},[92,81518,81519,81522,81524],{"class":94,"line":1179},[92,81520,81521],{"class":102},"[12, 54, 18, 130, 44].every(isBigEnough); ",[92,81523,33310],{"class":98},[92,81525,57920],{"class":102},[83,81527,81529],{"className":53047,"code":81528,"language":53049,"meta":10,"style":10},"\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",[89,81530,81531,81539,81547,81552,81556,81561,81566,81574],{"__ignoreMap":10},[92,81532,81533,81535,81537],{"class":94,"line":95},[92,81534,1013],{"class":102},[92,81536,51780],{"class":51280},[92,81538,51287],{"class":102},[92,81540,81541,81543,81545],{"class":94,"line":11},[92,81542,52124],{"class":102},[92,81544,51793],{"class":51280},[92,81546,51287],{"class":102},[92,81548,81549],{"class":94,"line":1158},[92,81550,81551],{"class":102},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[92,81553,81554],{"class":94,"line":1173},[92,81555,78302],{"class":102},[92,81557,81558],{"class":94,"line":1179},[92,81559,81560],{"class":102},"    const flag = arr.every(item => item >= 10)\n",[92,81562,81563],{"class":94,"line":1193},[92,81564,81565],{"class":102},"    console.log(flag)    \u002F\u002Ftrue\n",[92,81567,81568,81570,81572],{"class":94,"line":1199},[92,81569,52397],{"class":102},[92,81571,51793],{"class":51280},[92,81573,51287],{"class":102},[92,81575,81576,81578,81580],{"class":94,"line":1290},[92,81577,51765],{"class":102},[92,81579,51780],{"class":51280},[92,81581,51287],{"class":102},[83,81583,81585],{"className":53047,"code":81584,"language":53049,"meta":10,"style":10},"\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",[89,81586,81587,81595,81603,81607,81612,81617,81622,81630],{"__ignoreMap":10},[92,81588,81589,81591,81593],{"class":94,"line":95},[92,81590,1013],{"class":102},[92,81592,51780],{"class":51280},[92,81594,51287],{"class":102},[92,81596,81597,81599,81601],{"class":94,"line":11},[92,81598,52124],{"class":102},[92,81600,51793],{"class":51280},[92,81602,51287],{"class":102},[92,81604,81605],{"class":94,"line":1158},[92,81606,81551],{"class":102},[92,81608,81609],{"class":94,"line":1173},[92,81610,81611],{"class":102},"    const arr = [10, 0, 5]\n",[92,81613,81614],{"class":94,"line":1179},[92,81615,81616],{"class":102},"    const flag = arr.some(item => item >= 10)\n",[92,81618,81619],{"class":94,"line":1193},[92,81620,81621],{"class":102},"    console.log(flag)   \u002F\u002Ftrue\n",[92,81623,81624,81626,81628],{"class":94,"line":1199},[92,81625,52397],{"class":102},[92,81627,51793],{"class":51280},[92,81629,51287],{"class":102},[92,81631,81632,81634,81636],{"class":94,"line":1290},[92,81633,51765],{"class":102},[92,81635,51780],{"class":51280},[92,81637,51287],{"class":102},[22890,81639,81641],{"id":81640},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[38,81643,81644],{},[1441,81645],{"alt":10,"src":81646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[83,81648,81650],{"className":50613,"code":81649,"language":50615,"meta":10,"style":10},"\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",[89,81651,81652,81662,81676,81680,81688,81702,81722,81734,81742,81749,81761,81773,81785,81797,81807,81817,81821,81829,81837,81841,81849,81861,81869,81891,81896,81901,81934,81942,81950,81954],{"__ignoreMap":10},[92,81653,81654,81656,81658,81660],{"class":94,"line":95},[92,81655,51277],{"class":102},[92,81657,51281],{"class":51280},[92,81659,51284],{"class":1942},[92,81661,51287],{"class":102},[92,81663,81664,81666,81668,81670,81672,81674],{"class":94,"line":11},[92,81665,1013],{"class":102},[92,81667,50615],{"class":51280},[92,81669,51296],{"class":1942},[92,81671,148],{"class":102},[92,81673,51301],{"class":207},[92,81675,51287],{"class":102},[92,81677,81678],{"class":94,"line":1158},[92,81679,2379],{"emptyLinePlaceholder":17},[92,81681,81682,81684,81686],{"class":94,"line":1173},[92,81683,1013],{"class":102},[92,81685,51314],{"class":51280},[92,81687,51287],{"class":102},[92,81689,81690,81692,81694,81696,81698,81700],{"class":94,"line":1179},[92,81691,52124],{"class":102},[92,81693,51324],{"class":51280},[92,81695,51327],{"class":1942},[92,81697,148],{"class":102},[92,81699,51332],{"class":207},[92,81701,51287],{"class":102},[92,81703,81704,81706,81708,81710,81712,81714,81716,81718,81720],{"class":94,"line":1193},[92,81705,52124],{"class":102},[92,81707,51324],{"class":51280},[92,81709,14900],{"class":1942},[92,81711,148],{"class":102},[92,81713,51371],{"class":207},[92,81715,51351],{"class":1942},[92,81717,148],{"class":102},[92,81719,51378],{"class":207},[92,81721,51287],{"class":102},[92,81723,81724,81726,81728,81730,81732],{"class":94,"line":1199},[92,81725,52124],{"class":102},[92,81727,51387],{"class":51280},[92,81729,51390],{"class":102},[92,81731,51387],{"class":51280},[92,81733,51287],{"class":102},[92,81735,81736,81738,81740],{"class":94,"line":1290},[92,81737,52124],{"class":102},[92,81739,5106],{"class":51280},[92,81741,51287],{"class":102},[92,81743,81744,81747],{"class":94,"line":1296},[92,81745,81746],{"class":51280},"    div",[92,81748,15552],{"class":102},[92,81750,81751,81753,81755,81757,81759],{"class":94,"line":1308},[92,81752,54751],{"class":151},[92,81754,51417],{"class":102},[92,81756,1701],{"class":151},[92,81758,51472],{"class":98},[92,81760,1269],{"class":102},[92,81762,81763,81765,81767,81769,81771],{"class":94,"line":1591},[92,81764,54765],{"class":151},[92,81766,51417],{"class":102},[92,81768,504],{"class":151},[92,81770,51472],{"class":98},[92,81772,1269],{"class":102},[92,81774,81775,81777,81779,81781,81783],{"class":94,"line":1596},[92,81776,57339],{"class":151},[92,81778,51417],{"class":102},[92,81780,504],{"class":151},[92,81782,51472],{"class":98},[92,81784,1269],{"class":102},[92,81786,81787,81789,81791,81793,81795],{"class":94,"line":1602},[92,81788,65113],{"class":151},[92,81790,51417],{"class":102},[92,81792,601],{"class":151},[92,81794,51472],{"class":98},[92,81796,1269],{"class":102},[92,81798,81799,81801,81803,81805],{"class":94,"line":1607},[92,81800,57266],{"class":151},[92,81802,51417],{"class":102},[92,81804,51572],{"class":151},[92,81806,1269],{"class":102},[92,81808,81809,81811,81813,81815],{"class":94,"line":1621},[92,81810,54864],{"class":151},[92,81812,51417],{"class":102},[92,81814,51625],{"class":151},[92,81816,1269],{"class":102},[92,81818,81819],{"class":94,"line":1626},[92,81820,2166],{"class":102},[92,81822,81823,81825,81827],{"class":94,"line":1632},[92,81824,52397],{"class":102},[92,81826,5106],{"class":51280},[92,81828,51287],{"class":102},[92,81830,81831,81833,81835],{"class":94,"line":1653},[92,81832,51765],{"class":102},[92,81834,51314],{"class":51280},[92,81836,51287],{"class":102},[92,81838,81839],{"class":94,"line":1658},[92,81840,2379],{"emptyLinePlaceholder":17},[92,81842,81843,81845,81847],{"class":94,"line":1672},[92,81844,1013],{"class":102},[92,81846,51780],{"class":51280},[92,81848,51287],{"class":102},[92,81850,81851,81853,81855,81857,81859],{"class":94,"line":1677},[92,81852,52124],{"class":102},[92,81854,51591],{"class":51280},[92,81856,55294],{"class":102},[92,81858,51591],{"class":51280},[92,81860,51287],{"class":102},[92,81862,81863,81865,81867],{"class":94,"line":1706},[92,81864,52124],{"class":102},[92,81866,51793],{"class":51280},[92,81868,51287],{"class":102},[92,81870,81871,81873,81876,81878,81881,81884,81886,81889],{"class":94,"line":1711},[92,81872,11201],{"class":98},[92,81874,81875],{"class":151}," spec",[92,81877,13544],{"class":98},[92,81879,81880],{"class":102}," { size: ",[92,81882,81883],{"class":207},"'40cm*40cm'",[92,81885,55444],{"class":102},[92,81887,81888],{"class":207},"'黑色'",[92,81890,55584],{"class":102},[92,81892,81893],{"class":94,"line":1728},[92,81894,81895],{"class":161},"    \u002F\u002F const arr = Object.values(spec)\n",[92,81897,81898],{"class":94,"line":1733},[92,81899,81900],{"class":161},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[92,81902,81903,81905,81907,81909,81912,81914,81916,81919,81922,81925,81927,81929,81932],{"class":94,"line":1738},[92,81904,52387],{"class":102},[92,81906,54379],{"class":1942},[92,81908,103],{"class":102},[92,81910,81911],{"class":207},"'div'",[92,81913,74229],{"class":102},[92,81915,148],{"class":98},[92,81917,81918],{"class":102}," Object.",[92,81920,81921],{"class":1942},"values",[92,81923,81924],{"class":102},"(spec).",[92,81926,74203],{"class":1942},[92,81928,103],{"class":102},[92,81930,81931],{"class":207},"'\u002F'",[92,81933,109],{"class":102},[92,81935,81936,81938,81940],{"class":94,"line":1743},[92,81937,52397],{"class":102},[92,81939,51793],{"class":51280},[92,81941,51287],{"class":102},[92,81943,81944,81946,81948],{"class":94,"line":1757},[92,81945,51765],{"class":102},[92,81947,51780],{"class":51280},[92,81949,51287],{"class":102},[92,81951,81952],{"class":94,"line":1762},[92,81953,2379],{"emptyLinePlaceholder":17},[92,81955,81956,81958,81960],{"class":94,"line":2556},[92,81957,51765],{"class":102},[92,81959,50615],{"class":51280},[92,81961,51287],{"class":102},[38,81963,81964],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22890,81966,81968],{"id":81967},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[38,81970,81971],{},"静态方法，将伪数组转换为真数组",[38,81973,81974],{},[1441,81975],{"alt":10,"src":81976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[83,81978,81980],{"className":53047,"code":81979,"language":53049,"meta":10,"style":10},"\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",[89,81981,81982,81990,81998,82010,82022,82034,82042,82050,82055,82060,82065,82070,82078],{"__ignoreMap":10},[92,81983,81984,81986,81988],{"class":94,"line":95},[92,81985,1013],{"class":102},[92,81987,51780],{"class":51280},[92,81989,51287],{"class":102},[92,81991,81992,81994,81996],{"class":94,"line":11},[92,81993,52124],{"class":102},[92,81995,1110],{"class":51280},[92,81997,51287],{"class":102},[92,81999,82000,82002,82004,82006,82008],{"class":94,"line":1158},[92,82001,51321],{"class":102},[92,82003,49],{"class":51280},[92,82005,55294],{"class":102},[92,82007,49],{"class":51280},[92,82009,51287],{"class":102},[92,82011,82012,82014,82016,82018,82020],{"class":94,"line":1173},[92,82013,51321],{"class":102},[92,82015,49],{"class":51280},[92,82017,55294],{"class":102},[92,82019,49],{"class":51280},[92,82021,51287],{"class":102},[92,82023,82024,82026,82028,82030,82032],{"class":94,"line":1179},[92,82025,51321],{"class":102},[92,82027,49],{"class":51280},[92,82029,55294],{"class":102},[92,82031,49],{"class":51280},[92,82033,51287],{"class":102},[92,82035,82036,82038,82040],{"class":94,"line":1193},[92,82037,52397],{"class":102},[92,82039,1110],{"class":51280},[92,82041,51287],{"class":102},[92,82043,82044,82046,82048],{"class":94,"line":1199},[92,82045,52124],{"class":102},[92,82047,51793],{"class":51280},[92,82049,51287],{"class":102},[92,82051,82052],{"class":94,"line":1290},[92,82053,82054],{"class":102},"    const lis = document.querySelectorAll('li')\n",[92,82056,82057],{"class":94,"line":1296},[92,82058,82059],{"class":102},"    const liss = Array.from(lis)\n",[92,82061,82062],{"class":94,"line":1308},[92,82063,82064],{"class":102},"    liss.pop()\n",[92,82066,82067],{"class":94,"line":1591},[92,82068,82069],{"class":102},"    console.log(liss)\n",[92,82071,82072,82074,82076],{"class":94,"line":1596},[92,82073,52397],{"class":102},[92,82075,51793],{"class":51280},[92,82077,51287],{"class":102},[92,82079,82080,82082,82084],{"class":94,"line":1602},[92,82081,51765],{"class":102},[92,82083,51780],{"class":51280},[92,82085,51287],{"class":102},[38,82087,82088],{},[1441,82089],{"alt":10,"src":82090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21978,82092,82094],{"id":82093},"_41053-string","4.10.5.3 String",[38,82096,82097],{},[1441,82098],{"alt":10,"src":82099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22890,82101,82103],{"id":82102},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[83,82105,82107],{"className":53047,"code":82106,"language":53049,"meta":10,"style":10},"\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",[89,82108,82109,82117,82125,82130,82135,82140,82144,82149,82154,82159,82167],{"__ignoreMap":10},[92,82110,82111,82113,82115],{"class":94,"line":95},[92,82112,1013],{"class":102},[92,82114,51780],{"class":51280},[92,82116,51287],{"class":102},[92,82118,82119,82121,82123],{"class":94,"line":11},[92,82120,52124],{"class":102},[92,82122,51793],{"class":51280},[92,82124,51287],{"class":102},[92,82126,82127],{"class":94,"line":1158},[92,82128,82129],{"class":102},"    \u002F\u002F 把字符串转化为数组\n",[92,82131,82132],{"class":94,"line":1173},[92,82133,82134],{"class":102},"    const str = 'pink,red'\n",[92,82136,82137],{"class":94,"line":1179},[92,82138,82139],{"class":102},"    const arr = str.split(',')\n",[92,82141,82142],{"class":94,"line":1193},[92,82143,80618],{"class":102},[92,82145,82146],{"class":94,"line":1199},[92,82147,82148],{"class":102},"    const str1 = '2025-8-25'\n",[92,82150,82151],{"class":94,"line":1290},[92,82152,82153],{"class":102},"    const arr1 = str1.split('-')\n",[92,82155,82156],{"class":94,"line":1296},[92,82157,82158],{"class":102},"    console.log(arr1)\n",[92,82160,82161,82163,82165],{"class":94,"line":1308},[92,82162,52397],{"class":102},[92,82164,51793],{"class":51280},[92,82166,51287],{"class":102},[92,82168,82169,82171,82173],{"class":94,"line":1591},[92,82170,51765],{"class":102},[92,82172,51780],{"class":51280},[92,82174,51287],{"class":102},[22890,82176,82178],{"id":82177},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[38,82180,5161],{},[38,82182,82183],{},"substring(indexStart)",[38,82185,82186],{},"substring(indexStart, indexEnd)",[1110,82188,82189,82200,82212,82222],{},[49,82190,82191,82192,82195,82196,82199],{},"如果省略了 ",[89,82193,82194],{},"indexEnd","，则 ",[89,82197,82198],{},"substring()"," 提取字符直到字符串的末尾",[49,82201,82202,82203,82206,82207,82195,82209,82211],{},"如果 ",[89,82204,82205],{},"indexStart"," 等于 ",[89,82208,82194],{},[89,82210,82198],{}," 返回一个空字符串",[49,82213,82202,82214,82216,82217,82195,82219,82221],{},[89,82215,82205],{}," 大于 ",[89,82218,82194],{},[89,82220,82198],{}," 的效果就像交换了这两个参数一样",[49,82223,82224],{},"结束的索引号不包含想要截取的部分",[83,82226,82228],{"className":81469,"code":82227,"language":81471,"meta":10,"style":10},"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",[89,82229,82230,82242,82246,82280,82310,82314,82345,82349,82376,82406,82436,82440,82471],{"__ignoreMap":10},[92,82231,82232,82235,82237,82240],{"class":94,"line":95},[92,82233,82234],{"class":102},"const anyString ",[92,82236,148],{"class":98},[92,82238,82239],{"class":207}," \"Mozilla\"",[92,82241,1269],{"class":102},[92,82243,82244],{"class":94,"line":11},[92,82245,2379],{"emptyLinePlaceholder":17},[92,82247,82248,82251,82253,82255,82257,82260,82262,82265,82267,82269,82271,82273,82275,82277],{"class":94,"line":1158},[92,82249,82250],{"class":151},"console",[92,82252,661],{"class":102},[92,82254,58227],{"class":151},[92,82256,103],{"class":102},[92,82258,82259],{"class":151},"anyString",[92,82261,661],{"class":102},[92,82263,82264],{"class":151},"substring",[92,82266,103],{"class":102},[92,82268,294],{"class":151},[92,82270,12415],{"class":102},[92,82272,320],{"class":151},[92,82274,75233],{"class":102},[92,82276,33310],{"class":98},[92,82278,82279],{"class":207}," 'M'\n",[92,82281,82282,82284,82286,82288,82290,82292,82294,82296,82298,82300,82302,82304,82306,82308],{"class":94,"line":1173},[92,82283,82250],{"class":151},[92,82285,661],{"class":102},[92,82287,58227],{"class":151},[92,82289,103],{"class":102},[92,82291,82259],{"class":151},[92,82293,661],{"class":102},[92,82295,82264],{"class":151},[92,82297,103],{"class":102},[92,82299,320],{"class":151},[92,82301,12415],{"class":102},[92,82303,294],{"class":151},[92,82305,75233],{"class":102},[92,82307,33310],{"class":98},[92,82309,82279],{"class":207},[92,82311,82312],{"class":94,"line":1179},[92,82313,2379],{"emptyLinePlaceholder":17},[92,82315,82316,82318,82320,82322,82324,82326,82328,82330,82332,82334,82336,82338,82340,82342],{"class":94,"line":1193},[92,82317,82250],{"class":151},[92,82319,661],{"class":102},[92,82321,58227],{"class":151},[92,82323,103],{"class":102},[92,82325,82259],{"class":151},[92,82327,661],{"class":102},[92,82329,82264],{"class":151},[92,82331,103],{"class":102},[92,82333,294],{"class":151},[92,82335,12415],{"class":102},[92,82337,447],{"class":151},[92,82339,75233],{"class":102},[92,82341,33310],{"class":98},[92,82343,82344],{"class":207}," 'Mozill'\n",[92,82346,82347],{"class":94,"line":1199},[92,82348,2379],{"emptyLinePlaceholder":17},[92,82350,82351,82353,82355,82357,82359,82361,82363,82365,82367,82369,82371,82373],{"class":94,"line":1290},[92,82352,82250],{"class":151},[92,82354,661],{"class":102},[92,82356,58227],{"class":151},[92,82358,103],{"class":102},[92,82360,82259],{"class":151},[92,82362,661],{"class":102},[92,82364,82264],{"class":151},[92,82366,103],{"class":102},[92,82368,396],{"class":151},[92,82370,75233],{"class":102},[92,82372,33310],{"class":98},[92,82374,82375],{"class":207}," 'lla'\n",[92,82377,82378,82380,82382,82384,82386,82388,82390,82392,82394,82396,82398,82400,82402,82404],{"class":94,"line":1296},[92,82379,82250],{"class":151},[92,82381,661],{"class":102},[92,82383,58227],{"class":151},[92,82385,103],{"class":102},[92,82387,82259],{"class":151},[92,82389,661],{"class":102},[92,82391,82264],{"class":151},[92,82393,103],{"class":102},[92,82395,396],{"class":151},[92,82397,12415],{"class":102},[92,82399,472],{"class":151},[92,82401,75289],{"class":102},[92,82403,33310],{"class":98},[92,82405,82375],{"class":207},[92,82407,82408,82410,82412,82414,82416,82418,82420,82422,82424,82426,82428,82430,82432,82434],{"class":94,"line":1308},[92,82409,82250],{"class":151},[92,82411,661],{"class":102},[92,82413,58227],{"class":151},[92,82415,103],{"class":102},[92,82417,82259],{"class":151},[92,82419,661],{"class":102},[92,82421,82264],{"class":151},[92,82423,103],{"class":102},[92,82425,472],{"class":151},[92,82427,12415],{"class":102},[92,82429,396],{"class":151},[92,82431,75233],{"class":102},[92,82433,33310],{"class":98},[92,82435,82375],{"class":207},[92,82437,82438],{"class":94,"line":1591},[92,82439,2379],{"emptyLinePlaceholder":17},[92,82441,82442,82444,82446,82448,82450,82452,82454,82456,82458,82460,82462,82464,82466,82468],{"class":94,"line":1596},[92,82443,82250],{"class":151},[92,82445,661],{"class":102},[92,82447,58227],{"class":151},[92,82449,103],{"class":102},[92,82451,82259],{"class":151},[92,82453,661],{"class":102},[92,82455,82264],{"class":151},[92,82457,103],{"class":102},[92,82459,294],{"class":151},[92,82461,12415],{"class":102},[92,82463,472],{"class":151},[92,82465,75233],{"class":102},[92,82467,33310],{"class":98},[92,82469,82470],{"class":207}," 'Mozilla'\n",[92,82472,82473,82475,82477,82479,82481,82483,82485,82487,82489,82491,82493,82495,82497,82499],{"class":94,"line":1602},[92,82474,82250],{"class":151},[92,82476,661],{"class":102},[92,82478,58227],{"class":151},[92,82480,103],{"class":102},[92,82482,82259],{"class":151},[92,82484,661],{"class":102},[92,82486,82264],{"class":151},[92,82488,103],{"class":102},[92,82490,294],{"class":151},[92,82492,12415],{"class":102},[92,82494,549],{"class":151},[92,82496,75233],{"class":102},[92,82498,33310],{"class":98},[92,82500,82470],{"class":207},[22890,82502,82504],{"id":82503},"_410533-startswith","4.10.5.3.3 startsWith",[38,82506,82507,82510,82511,82516,82517,82519,82520],{},[89,82508,82509],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[252,82512,82513],{},[89,82514,82515],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[89,82518,1341],{}," 或 ",[89,82521,66000],{},[83,82523,82525],{"className":77475,"code":82524,"language":77477,"meta":10,"style":10},"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",[89,82526,82527,82539,82558,82563,82583],{"__ignoreMap":10},[92,82528,82529,82531,82534,82536],{"class":94,"line":95},[92,82530,6772],{"class":98},[92,82532,82533],{"class":102}," str1 ",[92,82535,148],{"class":98},[92,82537,82538],{"class":207}," \"Saturday night plans\"\n",[92,82540,82541,82543,82545,82548,82551,82553,82556],{"class":94,"line":11},[92,82542,77512],{"class":102},[92,82544,58227],{"class":1942},[92,82546,82547],{"class":102},"(str1.",[92,82549,82550],{"class":1942},"startsWith",[92,82552,103],{"class":102},[92,82554,82555],{"class":207},"\"Sat\"",[92,82557,30478],{"class":102},[92,82559,82560],{"class":94,"line":1158},[92,82561,82562],{"class":161},"\u002F\u002F Expected output: true\n",[92,82564,82565,82567,82569,82571,82573,82575,82577,82579,82581],{"class":94,"line":1173},[92,82566,77512],{"class":102},[92,82568,58227],{"class":1942},[92,82570,82547],{"class":102},[92,82572,82550],{"class":1942},[92,82574,103],{"class":102},[92,82576,82555],{"class":207},[92,82578,12415],{"class":102},[92,82580,174],{"class":151},[92,82582,30478],{"class":102},[92,82584,82585],{"class":94,"line":1179},[92,82586,82587],{"class":161},"\u002F\u002F Expected output: false\n",[83,82589,82591],{"className":50613,"code":82590,"language":50615,"meta":10,"style":10},"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",[89,82592,82593,82598,82603,82607,82612,82617],{"__ignoreMap":10},[92,82594,82595],{"class":94,"line":95},[92,82596,82597],{"class":102},"startsWith(searchString)\n",[92,82599,82600],{"class":94,"line":11},[92,82601,82602],{"class":102},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[92,82604,82605],{"class":94,"line":1158},[92,82606,2379],{"emptyLinePlaceholder":17},[92,82608,82609],{"class":94,"line":1173},[92,82610,82611],{"class":102},"const str3 = 'pink老师上课中'\n",[92,82613,82614],{"class":94,"line":1179},[92,82615,82616],{"class":102},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[92,82618,82619],{"class":94,"line":1193},[92,82620,82621],{"class":102},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22890,82623,82625],{"id":82624},"_410534-includes","4.10.5.3.4 includes",[38,82627,82628],{},"includes(searchString) includes(searchString, position)",[46,82630,82631],{},[49,82632,82633],{},"searchString:",[38,82635,82636,82637,82639,82640,82645,82646,82651,82652,21480,82655,82658,82659,82662],{},"一个要在 ",[89,82638,1278],{}," 中查找的字符串。",[341,82641,82644],{"href":82642,"rel":82643},"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",[23845],"不能是正则表达式","。所有非正则表达式的值都会被",[341,82647,82650],{"href":82648,"rel":82649},"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",[23845],"强制转换为字符串","，因此如果该参数被省略或传入 ",[89,82653,82654],{},"undefined",[89,82656,82657],{},"includes()"," 方法会在字符串中搜索 ",[89,82660,82661],{},"\"undefined\"","，这通常不是你想要的",[46,82664,82665],{"start":11},[49,82666,82667,962],{},[89,82668,82669],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[38,82671,82672,82673,82676,82677],{},"在字符串中开始搜索 ",[89,82674,82675],{},"searchString"," 的位置。默认值为 ",[89,82678,294],{},[46,82680,82681],{"start":1158},[49,82682,82683],{},"返回值：",[38,82685,82686,82687,82689,82690,82694,82695],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[89,82688,82675],{}," 为空字符串的情况），则返回 ",[252,82691,82692],{},[89,82693,1341],{}," ，否则返回 ",[252,82696,82697],{},[89,82698,66000],{},[46,82700,82701],{"start":1173},[49,82702,82703],{},"异常：",[38,82705,82202,82706,13775,82708,82712],{},[89,82707,82675],{},[341,82709,82711],{"href":82642,"rel":82710},[23845],"是一个正则表达式","，则会抛出",[38,82714,82715],{},"只要是有就是true，不需要非得以谁开头结尾",[83,82717,82719],{"className":77475,"code":82718,"language":77477,"meta":10,"style":10},"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",[89,82720,82721,82732,82755,82774,82794,82816,82835],{"__ignoreMap":10},[92,82722,82723,82725,82727,82729],{"class":94,"line":95},[92,82724,6772],{"class":98},[92,82726,79755],{"class":102},[92,82728,148],{"class":98},[92,82730,82731],{"class":207}," \"To be, or not to be, that is the question.\"\n",[92,82733,82734,82736,82738,82741,82744,82746,82749,82752],{"class":94,"line":11},[92,82735,77512],{"class":102},[92,82737,58227],{"class":1942},[92,82739,82740],{"class":102},"(str.",[92,82742,82743],{"class":1942},"includes",[92,82745,103],{"class":102},[92,82747,82748],{"class":207},"\"To be\"",[92,82750,82751],{"class":102},"))",[92,82753,82754],{"class":161},"  \u002F\u002F true\n",[92,82756,82757,82759,82761,82763,82765,82767,82770,82772],{"class":94,"line":1158},[92,82758,77512],{"class":102},[92,82760,58227],{"class":1942},[92,82762,82740],{"class":102},[92,82764,82743],{"class":1942},[92,82766,103],{"class":102},[92,82768,82769],{"class":207},"\"question\"",[92,82771,82751],{"class":102},[92,82773,82754],{"class":161},[92,82775,82776,82778,82780,82782,82784,82786,82789,82791],{"class":94,"line":1173},[92,82777,77512],{"class":102},[92,82779,58227],{"class":1942},[92,82781,82740],{"class":102},[92,82783,82743],{"class":1942},[92,82785,103],{"class":102},[92,82787,82788],{"class":207},"\"nonexistent\"",[92,82790,82751],{"class":102},[92,82792,82793],{"class":161},"  \u002F\u002F false\n",[92,82795,82796,82798,82800,82802,82804,82806,82808,82810,82812,82814],{"class":94,"line":1179},[92,82797,77512],{"class":102},[92,82799,58227],{"class":1942},[92,82801,82740],{"class":102},[92,82803,82743],{"class":1942},[92,82805,103],{"class":102},[92,82807,82748],{"class":207},[92,82809,12415],{"class":102},[92,82811,320],{"class":151},[92,82813,82751],{"class":102},[92,82815,82793],{"class":161},[92,82817,82818,82820,82822,82824,82826,82828,82831,82833],{"class":94,"line":1193},[92,82819,77512],{"class":102},[92,82821,58227],{"class":1942},[92,82823,82740],{"class":102},[92,82825,82743],{"class":1942},[92,82827,103],{"class":102},[92,82829,82830],{"class":207},"\"TO BE\"",[92,82832,82751],{"class":102},[92,82834,82793],{"class":161},[92,82836,82837,82839,82841,82843,82845,82847,82849,82851],{"class":94,"line":1199},[92,82838,77512],{"class":102},[92,82840,58227],{"class":1942},[92,82842,82740],{"class":102},[92,82844,82743],{"class":1942},[92,82846,103],{"class":102},[92,82848,7632],{"class":207},[92,82850,82751],{"class":102},[92,82852,82754],{"class":161},[22890,82854,82856],{"id":82855},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[83,82858,82860],{"className":53047,"code":82859,"language":53049,"meta":10,"style":10},"\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",[89,82861,82862,82870,82878,82883,82888,82893,82898,82903,82911],{"__ignoreMap":10},[92,82863,82864,82866,82868],{"class":94,"line":95},[92,82865,1013],{"class":102},[92,82867,51780],{"class":51280},[92,82869,51287],{"class":102},[92,82871,82872,82874,82876],{"class":94,"line":11},[92,82873,52124],{"class":102},[92,82875,51793],{"class":51280},[92,82877,51287],{"class":102},[92,82879,82880],{"class":94,"line":1158},[92,82881,82882],{"class":102},"    const num = 10\n",[92,82884,82885],{"class":94,"line":1173},[92,82886,82887],{"class":102},"    \u002F\u002F 强制转换\n",[92,82889,82890],{"class":94,"line":1179},[92,82891,82892],{"class":102},"    console.log(String(num))\n",[92,82894,82895],{"class":94,"line":1193},[92,82896,82897],{"class":102},"    \u002F\u002F toString()方法转换\n",[92,82899,82900],{"class":94,"line":1199},[92,82901,82902],{"class":102},"    console.log(num.toString())\n",[92,82904,82905,82907,82909],{"class":94,"line":1290},[92,82906,52397],{"class":102},[92,82908,51793],{"class":51280},[92,82910,51287],{"class":102},[92,82912,82913,82915,82917],{"class":94,"line":1296},[92,82914,51765],{"class":102},[92,82916,51780],{"class":51280},[92,82918,51287],{"class":102},[22890,82920,82922],{"id":82921},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[38,82924,82925],{},[1441,82926],{"alt":10,"src":82927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[83,82929,82931],{"className":50613,"code":82930,"language":50615,"meta":10,"style":10},"\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",[89,82932,82933,82943,82957,82961,82969,82983,83003,83015,83023,83027,83035,83047,83055,83067,83072,83077,83082,83129,83145,83153,83161,83165],{"__ignoreMap":10},[92,82934,82935,82937,82939,82941],{"class":94,"line":95},[92,82936,51277],{"class":102},[92,82938,51281],{"class":51280},[92,82940,51284],{"class":1942},[92,82942,51287],{"class":102},[92,82944,82945,82947,82949,82951,82953,82955],{"class":94,"line":11},[92,82946,1013],{"class":102},[92,82948,50615],{"class":51280},[92,82950,51296],{"class":1942},[92,82952,148],{"class":102},[92,82954,51301],{"class":207},[92,82956,51287],{"class":102},[92,82958,82959],{"class":94,"line":1158},[92,82960,2379],{"emptyLinePlaceholder":17},[92,82962,82963,82965,82967],{"class":94,"line":1173},[92,82964,1013],{"class":102},[92,82966,51314],{"class":51280},[92,82968,51287],{"class":102},[92,82970,82971,82973,82975,82977,82979,82981],{"class":94,"line":1179},[92,82972,52124],{"class":102},[92,82974,51324],{"class":51280},[92,82976,51327],{"class":1942},[92,82978,148],{"class":102},[92,82980,51332],{"class":207},[92,82982,51287],{"class":102},[92,82984,82985,82987,82989,82991,82993,82995,82997,82999,83001],{"class":94,"line":1193},[92,82986,52124],{"class":102},[92,82988,51324],{"class":51280},[92,82990,14900],{"class":1942},[92,82992,148],{"class":102},[92,82994,51371],{"class":207},[92,82996,51351],{"class":1942},[92,82998,148],{"class":102},[92,83000,51378],{"class":207},[92,83002,51287],{"class":102},[92,83004,83005,83007,83009,83011,83013],{"class":94,"line":1199},[92,83006,52124],{"class":102},[92,83008,51387],{"class":51280},[92,83010,51390],{"class":102},[92,83012,51387],{"class":51280},[92,83014,51287],{"class":102},[92,83016,83017,83019,83021],{"class":94,"line":1290},[92,83018,51765],{"class":102},[92,83020,51314],{"class":51280},[92,83022,51287],{"class":102},[92,83024,83025],{"class":94,"line":1296},[92,83026,2379],{"emptyLinePlaceholder":17},[92,83028,83029,83031,83033],{"class":94,"line":1308},[92,83030,1013],{"class":102},[92,83032,51780],{"class":51280},[92,83034,51287],{"class":102},[92,83036,83037,83039,83041,83043,83045],{"class":94,"line":1591},[92,83038,52124],{"class":102},[92,83040,51591],{"class":51280},[92,83042,55294],{"class":102},[92,83044,51591],{"class":51280},[92,83046,51287],{"class":102},[92,83048,83049,83051,83053],{"class":94,"line":1596},[92,83050,52124],{"class":102},[92,83052,51793],{"class":51280},[92,83054,51287],{"class":102},[92,83056,83057,83059,83062,83064],{"class":94,"line":1602},[92,83058,11201],{"class":98},[92,83060,83061],{"class":151}," gift",[92,83063,13544],{"class":98},[92,83065,83066],{"class":207}," '50g的茶叶，清洗球'\n",[92,83068,83069],{"class":94,"line":1607},[92,83070,83071],{"class":161},"    \u002F\u002F 1.把字符串拆分为数组\n",[92,83073,83074],{"class":94,"line":1621},[92,83075,83076],{"class":161},"    \u002F\u002F console.log(gift.split(','))\n",[92,83078,83079],{"class":94,"line":1626},[92,83080,83081],{"class":161},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[92,83083,83084,83086,83088,83090,83093,83096,83098,83101,83103,83105,83107,83109,83111,83114,83116,83119,83121,83123,83125,83127],{"class":94,"line":1632},[92,83085,11201],{"class":98},[92,83087,73899],{"class":151},[92,83089,13544],{"class":98},[92,83091,83092],{"class":102}," gift.",[92,83094,83095],{"class":1942},"split",[92,83097,103],{"class":102},[92,83099,83100],{"class":207},"'，'",[92,83102,30807],{"class":102},[92,83104,74024],{"class":1942},[92,83106,103],{"class":102},[92,83108,79775],{"class":5196},[92,83110,79778],{"class":98},[92,83112,83113],{"class":207}," `\u003Cspan>【赠品】${",[92,83115,79775],{"class":102},[92,83117,83118],{"class":207},"}\u003C\u002Fspan>\u003Cbr>`",[92,83120,30807],{"class":102},[92,83122,74203],{"class":1942},[92,83124,103],{"class":102},[92,83126,74208],{"class":207},[92,83128,109],{"class":102},[92,83130,83131,83133,83135,83137,83139,83141,83143],{"class":94,"line":1653},[92,83132,52387],{"class":102},[92,83134,54379],{"class":1942},[92,83136,103],{"class":102},[92,83138,81911],{"class":207},[92,83140,74229],{"class":102},[92,83142,148],{"class":98},[92,83144,73965],{"class":102},[92,83146,83147,83149,83151],{"class":94,"line":1658},[92,83148,52397],{"class":102},[92,83150,51793],{"class":51280},[92,83152,51287],{"class":102},[92,83154,83155,83157,83159],{"class":94,"line":1672},[92,83156,51765],{"class":102},[92,83158,51780],{"class":51280},[92,83160,51287],{"class":102},[92,83162,83163],{"class":94,"line":1677},[92,83164,2379],{"emptyLinePlaceholder":17},[92,83166,83167,83169,83171],{"class":94,"line":1706},[92,83168,51765],{"class":102},[92,83170,50615],{"class":51280},[92,83172,51287],{"class":102},[21978,83174,83176],{"id":83175},"_41054-number","4.10.5.4 Number",[38,83178,83179],{},[1441,83180],{"alt":10,"src":83181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[38,83183,83184],{},"整数也可以进行toFixed来保留小数",[38,83186,83187],{},"比如：",[38,83189,83190],{},"const price=10",[38,83192,83193],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21978,83195,83197],{"id":83196},"_41055-购物车展示","4.10.5.5 购物车展示",[38,83199,83200],{},[1441,83201],{"alt":10,"src":83202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[83,83204,83206],{"className":50613,"code":83205,"language":50615,"meta":10,"style":10},"\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",[89,83207,83208,83218,83232,83236,83244,83258,83278,83290,83298,83304,83314,83324,83334,83338,83342,83348,83360,83374,83378,83382,83388,83400,83416,83426,83442,83446,83450,83456,83466,83476,83480,83484,83492,83504,83516,83528,83532,83536,83544,83556,83560,83564,83575,83585,83597,83609,83619,83623,83627,83635,83644,83656,83666,83676,83680,83684,83692,83701,83708,83718,83730,83734,83738,83747,83757,83768,83780,83792,83796,83800,83809,83819,83830,83834,83838,83844,83856,83868,83878,83888,83906,83918,83922,83926,83935,83947,83957,83967,83979,83983,83991,83999,84003,84011,84025,84033,84047,84075,84083,84091,84101,84105,84113,84121,84130,84138,84147,84157,84161,84165,84173,84181,84190,84198,84206,84219,84223,84227,84235,84243,84252,84260,84268,84283,84287,84291,84299,84307,84316,84324,84332,84346,84354,84358,84362,84367,84393,84398,84435,84440,84463,84468,84522,84527,84563,84567,84573,84578,84587,84601,84610,84629,84638,84648,84653,84658,84671,84676,84730,84756,84764,84772,84776],{"__ignoreMap":10},[92,83209,83210,83212,83214,83216],{"class":94,"line":95},[92,83211,51277],{"class":102},[92,83213,51281],{"class":51280},[92,83215,51284],{"class":1942},[92,83217,51287],{"class":102},[92,83219,83220,83222,83224,83226,83228,83230],{"class":94,"line":11},[92,83221,1013],{"class":102},[92,83223,50615],{"class":51280},[92,83225,51296],{"class":1942},[92,83227,148],{"class":102},[92,83229,51301],{"class":207},[92,83231,51287],{"class":102},[92,83233,83234],{"class":94,"line":1158},[92,83235,2379],{"emptyLinePlaceholder":17},[92,83237,83238,83240,83242],{"class":94,"line":1173},[92,83239,1013],{"class":102},[92,83241,51314],{"class":51280},[92,83243,51287],{"class":102},[92,83245,83246,83248,83250,83252,83254,83256],{"class":94,"line":1179},[92,83247,52124],{"class":102},[92,83249,51324],{"class":51280},[92,83251,51327],{"class":1942},[92,83253,148],{"class":102},[92,83255,51332],{"class":207},[92,83257,51287],{"class":102},[92,83259,83260,83262,83264,83266,83268,83270,83272,83274,83276],{"class":94,"line":1193},[92,83261,52124],{"class":102},[92,83263,51324],{"class":51280},[92,83265,14900],{"class":1942},[92,83267,148],{"class":102},[92,83269,51371],{"class":207},[92,83271,51351],{"class":1942},[92,83273,148],{"class":102},[92,83275,51378],{"class":207},[92,83277,51287],{"class":102},[92,83279,83280,83282,83284,83286,83288],{"class":94,"line":1199},[92,83281,52124],{"class":102},[92,83283,51387],{"class":51280},[92,83285,51390],{"class":102},[92,83287,51387],{"class":51280},[92,83289,51287],{"class":102},[92,83291,83292,83294,83296],{"class":94,"line":1290},[92,83293,52124],{"class":102},[92,83295,5106],{"class":51280},[92,83297,51287],{"class":102},[92,83299,83300,83302],{"class":94,"line":1296},[92,83301,6383],{"class":51280},[92,83303,15552],{"class":102},[92,83305,83306,83308,83310,83312],{"class":94,"line":1308},[92,83307,54675],{"class":151},[92,83309,51417],{"class":102},[92,83311,294],{"class":151},[92,83313,1269],{"class":102},[92,83315,83316,83318,83320,83322],{"class":94,"line":1591},[92,83317,54686],{"class":151},[92,83319,51417],{"class":102},[92,83321,294],{"class":151},[92,83323,1269],{"class":102},[92,83325,83326,83328,83330,83332],{"class":94,"line":1596},[92,83327,72576],{"class":151},[92,83329,51417],{"class":102},[92,83331,60485],{"class":151},[92,83333,1269],{"class":102},[92,83335,83336],{"class":94,"line":1602},[92,83337,2166],{"class":102},[92,83339,83340],{"class":94,"line":1607},[92,83341,2379],{"emptyLinePlaceholder":17},[92,83343,83344,83346],{"class":94,"line":1621},[92,83345,62103],{"class":1942},[92,83347,15552],{"class":102},[92,83349,83350,83352,83354,83356,83358],{"class":94,"line":1626},[92,83351,54751],{"class":151},[92,83353,51417],{"class":102},[92,83355,78554],{"class":151},[92,83357,51472],{"class":98},[92,83359,1269],{"class":102},[92,83361,83362,83364,83366,83368,83370,83372],{"class":94,"line":1632},[92,83363,54686],{"class":151},[92,83365,51417],{"class":102},[92,83367,414],{"class":151},[92,83369,51472],{"class":98},[92,83371,51536],{"class":151},[92,83373,1269],{"class":102},[92,83375,83376],{"class":94,"line":1653},[92,83377,2166],{"class":102},[92,83379,83380],{"class":94,"line":1658},[92,83381,2379],{"emptyLinePlaceholder":17},[92,83383,83384,83386],{"class":94,"line":1672},[92,83385,78605],{"class":1942},[92,83387,15552],{"class":102},[92,83389,83390,83392,83394,83396,83398],{"class":94,"line":1677},[92,83391,54675],{"class":151},[92,83393,51417],{"class":102},[92,83395,678],{"class":151},[92,83397,51472],{"class":98},[92,83399,1269],{"class":102},[92,83401,83402,83404,83406,83408,83410,83412,83414],{"class":94,"line":1706},[92,83403,61840],{"class":151},[92,83405,51417],{"class":102},[92,83407,28102],{"class":151},[92,83409,78660],{"class":151},[92,83411,78663],{"class":151},[92,83413,798],{"class":98},[92,83415,1269],{"class":102},[92,83417,83418,83420,83422,83424],{"class":94,"line":1711},[92,83419,54989],{"class":151},[92,83421,51417],{"class":102},[92,83423,51457],{"class":151},[92,83425,1269],{"class":102},[92,83427,83428,83430,83432,83434,83436,83438,83440],{"class":94,"line":1728},[92,83429,61957],{"class":151},[92,83431,51417],{"class":102},[92,83433,320],{"class":151},[92,83435,51472],{"class":98},[92,83437,51501],{"class":151},[92,83439,62224],{"class":151},[92,83441,1269],{"class":102},[92,83443,83444],{"class":94,"line":1733},[92,83445,2166],{"class":102},[92,83447,83448],{"class":94,"line":1738},[92,83449,2379],{"emptyLinePlaceholder":17},[92,83451,83452,83454],{"class":94,"line":1743},[92,83453,78723],{"class":1942},[92,83455,15552],{"class":102},[92,83457,83458,83460,83462,83464],{"class":94,"line":1757},[92,83459,62005],{"class":151},[92,83461,51417],{"class":102},[92,83463,62010],{"class":151},[92,83465,1269],{"class":102},[92,83467,83468,83470,83472,83474],{"class":94,"line":1762},[92,83469,54864],{"class":151},[92,83471,51417],{"class":102},[92,83473,61798],{"class":151},[92,83475,1269],{"class":102},[92,83477,83478],{"class":94,"line":2556},[92,83479,2166],{"class":102},[92,83481,83482],{"class":94,"line":2570},[92,83483,2379],{"emptyLinePlaceholder":17},[92,83485,83486,83488,83490],{"class":94,"line":2578},[92,83487,78605],{"class":1942},[92,83489,55595],{"class":51280},[92,83491,15552],{"class":102},[92,83493,83494,83496,83498,83500,83502],{"class":94,"line":2583},[92,83495,54751],{"class":151},[92,83497,51417],{"class":102},[92,83499,715],{"class":151},[92,83501,51472],{"class":98},[92,83503,1269],{"class":102},[92,83505,83506,83508,83510,83512,83514],{"class":94,"line":2589},[92,83507,54765],{"class":151},[92,83509,51417],{"class":102},[92,83511,715],{"class":151},[92,83513,51472],{"class":98},[92,83515,1269],{"class":102},[92,83517,83518,83520,83522,83524,83526],{"class":94,"line":2595},[92,83519,61730],{"class":151},[92,83521,51417],{"class":102},[92,83523,422],{"class":151},[92,83525,51472],{"class":98},[92,83527,1269],{"class":102},[92,83529,83530],{"class":94,"line":2600},[92,83531,2166],{"class":102},[92,83533,83534],{"class":94,"line":7928},[92,83535,2379],{"emptyLinePlaceholder":17},[92,83537,83538,83540,83542],{"class":94,"line":7952},[92,83539,78605],{"class":1942},[92,83541,62284],{"class":1942},[92,83543,15552],{"class":102},[92,83545,83546,83548,83550,83552,83554],{"class":94,"line":7957},[92,83547,54751],{"class":151},[92,83549,51417],{"class":102},[92,83551,1701],{"class":151},[92,83553,51472],{"class":98},[92,83555,1269],{"class":102},[92,83557,83558],{"class":94,"line":7963},[92,83559,2166],{"class":102},[92,83561,83562],{"class":94,"line":7990},[92,83563,2379],{"emptyLinePlaceholder":17},[92,83565,83566,83568,83570,83573],{"class":94,"line":7995},[92,83567,78605],{"class":1942},[92,83569,62284],{"class":1942},[92,83571,83572],{"class":1942}," .tag",[92,83574,15552],{"class":102},[92,83576,83577,83579,83581,83583],{"class":94,"line":8001},[92,83578,54989],{"class":151},[92,83580,51417],{"class":102},[92,83582,60849],{"class":151},[92,83584,1269],{"class":102},[92,83586,83587,83589,83591,83593,83595],{"class":94,"line":8013},[92,83588,54675],{"class":151},[92,83590,51417],{"class":102},[92,83592,180],{"class":151},[92,83594,51472],{"class":98},[92,83596,1269],{"class":102},[92,83598,83599,83601,83603,83605,83607],{"class":94,"line":8025},[92,83600,54902],{"class":151},[92,83602,51417],{"class":102},[92,83604,601],{"class":151},[92,83606,51472],{"class":98},[92,83608,1269],{"class":102},[92,83610,83611,83613,83615,83617],{"class":94,"line":8037},[92,83612,57396],{"class":151},[92,83614,51417],{"class":102},[92,83616,62050],{"class":151},[92,83618,1269],{"class":102},[92,83620,83621],{"class":94,"line":9696},[92,83622,2166],{"class":102},[92,83624,83625],{"class":94,"line":9721},[92,83626,2379],{"emptyLinePlaceholder":17},[92,83628,83629,83631,83633],{"class":94,"line":9744},[92,83630,78605],{"class":1942},[92,83632,78897],{"class":1942},[92,83634,31447],{"class":102},[92,83636,83637,83639,83642],{"class":94,"line":9768},[92,83638,78605],{"class":1942},[92,83640,83641],{"class":1942}," .sub-total",[92,83643,15552],{"class":102},[92,83645,83646,83648,83650,83652,83654],{"class":94,"line":9773},[92,83647,54902],{"class":151},[92,83649,51417],{"class":102},[92,83651,753],{"class":151},[92,83653,51472],{"class":98},[92,83655,1269],{"class":102},[92,83657,83658,83660,83662,83664],{"class":94,"line":9778},[92,83659,57396],{"class":151},[92,83661,51417],{"class":102},[92,83663,78920],{"class":151},[92,83665,1269],{"class":102},[92,83667,83668,83670,83672,83674],{"class":94,"line":9783},[92,83669,61817],{"class":151},[92,83671,51417],{"class":102},[92,83673,320],{"class":151},[92,83675,1269],{"class":102},[92,83677,83678],{"class":94,"line":9792},[92,83679,2166],{"class":102},[92,83681,83682],{"class":94,"line":9797},[92,83683,2379],{"emptyLinePlaceholder":17},[92,83685,83686,83688,83690],{"class":94,"line":9803},[92,83687,78605],{"class":1942},[92,83689,78937],{"class":1942},[92,83691,31447],{"class":102},[92,83693,83694,83696,83699],{"class":94,"line":9824},[92,83695,78605],{"class":1942},[92,83697,83698],{"class":1942}," .sub-total::before",[92,83700,31447],{"class":102},[92,83702,83703,83706],{"class":94,"line":9830},[92,83704,83705],{"class":1942},"    .amount::before",[92,83707,15552],{"class":102},[92,83709,83710,83712,83714,83716],{"class":94,"line":9844},[92,83711,78944],{"class":151},[92,83713,51417],{"class":102},[92,83715,78949],{"class":207},[92,83717,1269],{"class":102},[92,83719,83720,83722,83724,83726,83728],{"class":94,"line":9850},[92,83721,54902],{"class":151},[92,83723,51417],{"class":102},[92,83725,601],{"class":151},[92,83727,51472],{"class":98},[92,83729,1269],{"class":102},[92,83731,83732],{"class":94,"line":9877},[92,83733,2166],{"class":102},[92,83735,83736],{"class":94,"line":9886},[92,83737,2379],{"emptyLinePlaceholder":17},[92,83739,83740,83742,83745],{"class":94,"line":9892},[92,83741,78605],{"class":1942},[92,83743,83744],{"class":1942}," .spec",[92,83746,15552],{"class":102},[92,83748,83749,83751,83753,83755],{"class":94,"line":9900},[92,83750,61817],{"class":151},[92,83752,51417],{"class":102},[92,83754,180],{"class":151},[92,83756,1269],{"class":102},[92,83758,83759,83761,83763,83766],{"class":94,"line":9905},[92,83760,57396],{"class":151},[92,83762,51417],{"class":102},[92,83764,83765],{"class":151},"#888",[92,83767,1269],{"class":102},[92,83769,83770,83772,83774,83776,83778],{"class":94,"line":16584},[92,83771,54902],{"class":151},[92,83773,51417],{"class":102},[92,83775,652],{"class":151},[92,83777,51472],{"class":98},[92,83779,1269],{"class":102},[92,83781,83782,83784,83786,83788,83790],{"class":94,"line":16590},[92,83783,61980],{"class":151},[92,83785,51417],{"class":102},[92,83787,803],{"class":151},[92,83789,51472],{"class":98},[92,83791,1269],{"class":102},[92,83793,83794],{"class":94,"line":16613},[92,83795,2166],{"class":102},[92,83797,83798],{"class":94,"line":16619},[92,83799,2379],{"emptyLinePlaceholder":17},[92,83801,83802,83804,83807],{"class":94,"line":16642},[92,83803,78605],{"class":1942},[92,83805,83806],{"class":1942}," .count",[92,83808,15552],{"class":102},[92,83810,83811,83813,83815,83817],{"class":94,"line":16656},[92,83812,61817],{"class":151},[92,83814,51417],{"class":102},[92,83816,320],{"class":151},[92,83818,1269],{"class":102},[92,83820,83821,83823,83825,83828],{"class":94,"line":16676},[92,83822,57396],{"class":151},[92,83824,51417],{"class":102},[92,83826,83827],{"class":151},"#aaa",[92,83829,1269],{"class":102},[92,83831,83832],{"class":94,"line":16682},[92,83833,2166],{"class":102},[92,83835,83836],{"class":94,"line":16693},[92,83837,2379],{"emptyLinePlaceholder":17},[92,83839,83840,83842],{"class":94,"line":16716},[92,83841,72455],{"class":1942},[92,83843,15552],{"class":102},[92,83845,83846,83848,83850,83852,83854],{"class":94,"line":16738},[92,83847,54751],{"class":151},[92,83849,51417],{"class":102},[92,83851,78554],{"class":151},[92,83853,51472],{"class":98},[92,83855,1269],{"class":102},[92,83857,83858,83860,83862,83864,83866],{"class":94,"line":16743},[92,83859,54686],{"class":151},[92,83861,51417],{"class":102},[92,83863,294],{"class":151},[92,83865,51536],{"class":151},[92,83867,1269],{"class":102},[92,83869,83870,83872,83874,83876],{"class":94,"line":16749},[92,83871,54989],{"class":151},[92,83873,51417],{"class":102},[92,83875,51457],{"class":151},[92,83877,1269],{"class":102},[92,83879,83880,83882,83884,83886],{"class":94,"line":16763},[92,83881,55000],{"class":151},[92,83883,51417],{"class":102},[92,83885,51560],{"class":151},[92,83887,1269],{"class":102},[92,83889,83890,83893,83895,83897,83899,83901,83904],{"class":94,"line":16776},[92,83891,83892],{"class":151},"      border-top",[92,83894,51417],{"class":102},[92,83896,320],{"class":151},[92,83898,51472],{"class":98},[92,83900,51501],{"class":151},[92,83902,83903],{"class":151}," #4e4e4e",[92,83905,1269],{"class":102},[92,83907,83908,83910,83912,83914,83916],{"class":94,"line":16781},[92,83909,54675],{"class":151},[92,83911,51417],{"class":102},[92,83913,803],{"class":151},[92,83915,51472],{"class":98},[92,83917,1269],{"class":102},[92,83919,83920],{"class":94,"line":16795},[92,83921,2166],{"class":102},[92,83923,83924],{"class":94,"line":16800},[92,83925,2379],{"emptyLinePlaceholder":17},[92,83927,83928,83930,83933],{"class":94,"line":16806},[92,83929,72455],{"class":1942},[92,83931,83932],{"class":1942}," .amount",[92,83934,15552],{"class":102},[92,83936,83937,83939,83941,83943,83945],{"class":94,"line":16811},[92,83938,54902],{"class":151},[92,83940,51417],{"class":102},[92,83942,753],{"class":151},[92,83944,51472],{"class":98},[92,83946,1269],{"class":102},[92,83948,83949,83951,83953,83955],{"class":94,"line":16825},[92,83950,57396],{"class":151},[92,83952,51417],{"class":102},[92,83954,78920],{"class":151},[92,83956,1269],{"class":102},[92,83958,83959,83961,83963,83965],{"class":94,"line":16830},[92,83960,62314],{"class":151},[92,83962,51417],{"class":102},[92,83964,51469],{"class":151},[92,83966,1269],{"class":102},[92,83968,83969,83971,83973,83975,83977],{"class":94,"line":16835},[92,83970,61730],{"class":151},[92,83972,51417],{"class":102},[92,83974,759],{"class":151},[92,83976,51472],{"class":98},[92,83978,1269],{"class":102},[92,83980,83981],{"class":94,"line":16849},[92,83982,2166],{"class":102},[92,83984,83985,83987,83989],{"class":94,"line":16861},[92,83986,52397],{"class":102},[92,83988,5106],{"class":51280},[92,83990,51287],{"class":102},[92,83992,83993,83995,83997],{"class":94,"line":16866},[92,83994,51765],{"class":102},[92,83996,51314],{"class":51280},[92,83998,51287],{"class":102},[92,84000,84001],{"class":94,"line":16879},[92,84002,2379],{"emptyLinePlaceholder":17},[92,84004,84005,84007,84009],{"class":94,"line":16884},[92,84006,1013],{"class":102},[92,84008,51780],{"class":51280},[92,84010,51287],{"class":102},[92,84012,84013,84015,84017,84019,84021,84023],{"class":94,"line":16889},[92,84014,52124],{"class":102},[92,84016,51591],{"class":51280},[92,84018,53466],{"class":1942},[92,84020,148],{"class":102},[92,84022,62588],{"class":207},[92,84024,51287],{"class":102},[92,84026,84027,84029,84031],{"class":94,"line":16894},[92,84028,52397],{"class":102},[92,84030,51591],{"class":51280},[92,84032,51287],{"class":102},[92,84034,84035,84037,84039,84041,84043,84045],{"class":94,"line":16907},[92,84036,52124],{"class":102},[92,84038,51591],{"class":51280},[92,84040,53466],{"class":1942},[92,84042,148],{"class":102},[92,84044,62560],{"class":207},[92,84046,51287],{"class":102},[92,84048,84049,84051,84053,84056,84058,84060,84062,84065,84067,84069,84071,84073],{"class":94,"line":16912},[92,84050,51321],{"class":102},[92,84052,51591],{"class":51280},[92,84054,84055],{"class":102},">合计：\u003C",[92,84057,92],{"class":51280},[92,84059,53466],{"class":1942},[92,84061,148],{"class":102},[92,84063,84064],{"class":207},"\"amount\"",[92,84066,55294],{"class":102},[92,84068,92],{"class":51280},[92,84070,55294],{"class":102},[92,84072,51591],{"class":51280},[92,84074,51287],{"class":102},[92,84076,84077,84079,84081],{"class":94,"line":32614},[92,84078,52397],{"class":102},[92,84080,51591],{"class":51280},[92,84082,51287],{"class":102},[92,84084,84085,84087,84089],{"class":94,"line":32620},[92,84086,52124],{"class":102},[92,84088,51793],{"class":51280},[92,84090,51287],{"class":102},[92,84092,84093,84095,84097,84099],{"class":94,"line":32626},[92,84094,11201],{"class":98},[92,84096,79357],{"class":151},[92,84098,13544],{"class":98},[92,84100,55427],{"class":102},[92,84102,84103],{"class":94,"line":32632},[92,84104,79366],{"class":102},[92,84106,84107,84109,84111],{"class":94,"line":32638},[92,84108,79371],{"class":102},[92,84110,79374],{"class":207},[92,84112,31447],{"class":102},[92,84114,84115,84117,84119],{"class":94,"line":32649},[92,84116,79381],{"class":102},[92,84118,79384],{"class":207},[92,84120,31447],{"class":102},[92,84122,84123,84125,84128],{"class":94,"line":32655},[92,84124,79391],{"class":102},[92,84126,84127],{"class":151},"289.9",[92,84129,31447],{"class":102},[92,84131,84132,84134,84136],{"class":94,"line":32675},[92,84133,79401],{"class":102},[92,84135,79404],{"class":207},[92,84137,31447],{"class":102},[92,84139,84140,84143,84145],{"class":94,"line":32681},[92,84141,84142],{"class":102},"        count: ",[92,84144,180],{"class":151},[92,84146,31447],{"class":102},[92,84148,84149,84152,84155],{"class":94,"line":32692},[92,84150,84151],{"class":102},"        spec: { color: ",[92,84153,84154],{"class":207},"'白色'",[92,84156,55584],{"class":102},[92,84158,84159],{"class":94,"line":32698},[92,84160,77872],{"class":102},[92,84162,84163],{"class":94,"line":32704},[92,84164,79366],{"class":102},[92,84166,84167,84169,84171],{"class":94,"line":32710},[92,84168,79371],{"class":102},[92,84170,79465],{"class":207},[92,84172,31447],{"class":102},[92,84174,84175,84177,84179],{"class":94,"line":32716},[92,84176,79381],{"class":102},[92,84178,79474],{"class":207},[92,84180,31447],{"class":102},[92,84182,84183,84185,84188],{"class":94,"line":32722},[92,84184,79391],{"class":102},[92,84186,84187],{"class":151},"109.8",[92,84189,31447],{"class":102},[92,84191,84192,84194,84196],{"class":94,"line":32728},[92,84193,79401],{"class":102},[92,84195,79492],{"class":207},[92,84197,31447],{"class":102},[92,84199,84200,84202,84204],{"class":94,"line":32734},[92,84201,84142],{"class":102},[92,84203,174],{"class":151},[92,84205,31447],{"class":102},[92,84207,84208,84211,84213,84215,84217],{"class":94,"line":32754},[92,84209,84210],{"class":102},"        spec: { size: ",[92,84212,81883],{"class":207},[92,84214,55444],{"class":102},[92,84216,81888],{"class":207},[92,84218,55584],{"class":102},[92,84220,84221],{"class":94,"line":32760},[92,84222,77872],{"class":102},[92,84224,84225],{"class":94,"line":32776},[92,84226,79366],{"class":102},[92,84228,84229,84231,84233],{"class":94,"line":32782},[92,84230,79371],{"class":102},[92,84232,79509],{"class":207},[92,84234,31447],{"class":102},[92,84236,84237,84239,84241],{"class":94,"line":32796},[92,84238,79381],{"class":102},[92,84240,79518],{"class":207},[92,84242,31447],{"class":102},[92,84244,84245,84247,84250],{"class":94,"line":32802},[92,84246,79391],{"class":102},[92,84248,84249],{"class":151},"488",[92,84251,31447],{"class":102},[92,84253,84254,84256,84258],{"class":94,"line":32817},[92,84255,79401],{"class":102},[92,84257,79536],{"class":207},[92,84259,31447],{"class":102},[92,84261,84262,84264,84266],{"class":94,"line":32823},[92,84263,84142],{"class":102},[92,84265,320],{"class":151},[92,84267,31447],{"class":102},[92,84269,84270,84272,84275,84278,84281],{"class":94,"line":32832},[92,84271,84151],{"class":102},[92,84273,84274],{"class":207},"'青色'",[92,84276,84277],{"class":102},", sum: ",[92,84279,84280],{"class":207},"'一大四小'",[92,84282,55584],{"class":102},[92,84284,84285],{"class":94,"line":32838},[92,84286,77872],{"class":102},[92,84288,84289],{"class":94,"line":32847},[92,84290,79366],{"class":102},[92,84292,84293,84295,84297],{"class":94,"line":32853},[92,84294,79371],{"class":102},[92,84296,79553],{"class":207},[92,84298,31447],{"class":102},[92,84300,84301,84303,84305],{"class":94,"line":32859},[92,84302,79381],{"class":102},[92,84304,79562],{"class":207},[92,84306,31447],{"class":102},[92,84308,84309,84311,84314],{"class":94,"line":32868},[92,84310,79391],{"class":102},[92,84312,84313],{"class":151},"139",[92,84315,31447],{"class":102},[92,84317,84318,84320,84322],{"class":94,"line":32874},[92,84319,79401],{"class":102},[92,84321,79580],{"class":207},[92,84323,31447],{"class":102},[92,84325,84326,84328,84330],{"class":94,"line":32885},[92,84327,84142],{"class":102},[92,84329,320],{"class":151},[92,84331,31447],{"class":102},[92,84333,84334,84336,84339,84341,84344],{"class":94,"line":32891},[92,84335,84210],{"class":102},[92,84337,84338],{"class":207},"'小号'",[92,84340,55444],{"class":102},[92,84342,84343],{"class":207},"'紫色'",[92,84345,55450],{"class":102},[92,84347,84348,84351],{"class":94,"line":32910},[92,84349,84350],{"class":102},"        gift: ",[92,84352,84353],{"class":207},"'50g茶叶,清洗球'\n",[92,84355,84356],{"class":94,"line":32916},[92,84357,52378],{"class":102},[92,84359,84360],{"class":94,"line":32927},[92,84361,53089],{"class":102},[92,84363,84364],{"class":94,"line":32933},[92,84365,84366],{"class":161},"    \u002F\u002F  1.根据数据渲染页面\n",[92,84368,84369,84371,84373,84375,84377,84379,84381,84383,84385,84387,84389,84391],{"class":94,"line":32953},[92,84370,52387],{"class":102},[92,84372,54379],{"class":1942},[92,84374,103],{"class":102},[92,84376,79881],{"class":207},[92,84378,74229],{"class":102},[92,84380,148],{"class":98},[92,84382,80028],{"class":102},[92,84384,74024],{"class":1942},[92,84386,103],{"class":102},[92,84388,79775],{"class":5196},[92,84390,79778],{"class":98},[92,84392,15552],{"class":102},[92,84394,84395],{"class":94,"line":32969},[92,84396,84397],{"class":161},"      \u002F\u002F 对象解构\n",[92,84399,84400,84402,84404,84406,84408,84410,84412,84415,84417,84419,84421,84424,84426,84429,84431,84433],{"class":94,"line":32975},[92,84401,58208],{"class":98},[92,84403,79787],{"class":102},[92,84405,79800],{"class":151},[92,84407,12415],{"class":102},[92,84409,79790],{"class":151},[92,84411,12415],{"class":102},[92,84413,84414],{"class":151},"count",[92,84416,12415],{"class":102},[92,84418,79795],{"class":151},[92,84420,12415],{"class":102},[92,84422,84423],{"class":151},"spec",[92,84425,12415],{"class":102},[92,84427,84428],{"class":151},"gift",[92,84430,79803],{"class":102},[92,84432,148],{"class":98},[92,84434,79808],{"class":102},[92,84436,84437],{"class":94,"line":32989},[92,84438,84439],{"class":161},"      \u002F\u002F 规格文字模块处理\n",[92,84441,84442,84444,84447,84449,84451,84453,84455,84457,84459,84461],{"class":94,"line":32995},[92,84443,58208],{"class":98},[92,84445,84446],{"class":151}," text",[92,84448,13544],{"class":98},[92,84450,81918],{"class":102},[92,84452,81921],{"class":1942},[92,84454,81924],{"class":102},[92,84456,74203],{"class":1942},[92,84458,103],{"class":102},[92,84460,81931],{"class":207},[92,84462,109],{"class":102},[92,84464,84465],{"class":94,"line":33001},[92,84466,84467],{"class":161},"      \u002F\u002F 处理赠品模块\n",[92,84469,84470,84472,84474,84476,84479,84481,84483,84485,84487,84490,84492,84494,84496,84498,84500,84503,84505,84508,84510,84512,84514,84516,84518,84520],{"class":94,"line":33012},[92,84471,58208],{"class":98},[92,84473,73899],{"class":151},[92,84475,13544],{"class":98},[92,84477,84478],{"class":102}," gift ",[92,84480,1089],{"class":98},[92,84482,83092],{"class":102},[92,84484,83095],{"class":1942},[92,84486,103],{"class":102},[92,84488,84489],{"class":207},"','",[92,84491,30807],{"class":102},[92,84493,74024],{"class":1942},[92,84495,103],{"class":102},[92,84497,79775],{"class":5196},[92,84499,79778],{"class":98},[92,84501,84502],{"class":207}," `\u003Cspan class=\"tag\">【赠品】${",[92,84504,79775],{"class":102},[92,84506,84507],{"class":207},"}\u003C\u002Fspan>`",[92,84509,30807],{"class":102},[92,84511,74203],{"class":1942},[92,84513,103],{"class":102},[92,84515,74208],{"class":207},[92,84517,13694],{"class":102},[92,84519,962],{"class":98},[92,84521,70084],{"class":207},[92,84523,84524],{"class":94,"line":33018},[92,84525,84526],{"class":161},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[92,84528,84529,84531,84534,84536,84539,84541,84543,84545,84548,84550,84552,84554,84557,84559,84561],{"class":94,"line":33024},[92,84530,58208],{"class":98},[92,84532,84533],{"class":151}," subtotal",[92,84535,13544],{"class":98},[92,84537,84538],{"class":102}," ((price ",[92,84540,558],{"class":98},[92,84542,5734],{"class":151},[92,84544,6498],{"class":98},[92,84546,84547],{"class":102}," count) ",[92,84549,687],{"class":98},[92,84551,5734],{"class":151},[92,84553,30807],{"class":102},[92,84555,84556],{"class":1942},"toFixed",[92,84558,103],{"class":102},[92,84560,180],{"class":151},[92,84562,109],{"class":102},[92,84564,84565],{"class":94,"line":33034},[92,84566,2379],{"emptyLinePlaceholder":17},[92,84568,84569,84571],{"class":94,"line":33040},[92,84570,73962],{"class":98},[92,84572,70148],{"class":207},[92,84574,84575],{"class":94,"line":33051},[92,84576,84577],{"class":207},"        \u003Cdiv class=\"item\">\n",[92,84579,84580,84583,84585],{"class":94,"line":33057},[92,84581,84582],{"class":207},"          \u003Cimg src=\"${",[92,84584,79800],{"class":102},[92,84586,79832],{"class":207},[92,84588,84589,84592,84594,84597,84599],{"class":94,"line":33067},[92,84590,84591],{"class":207},"          \u003Cp class=\"name\">${",[92,84593,79790],{"class":102},[92,84595,84596],{"class":207},"}${",[92,84598,1278],{"class":102},[92,84600,79842],{"class":207},[92,84602,84603,84606,84608],{"class":94,"line":33072},[92,84604,84605],{"class":207},"          \u003Cp class=\"spec\">${",[92,84607,5167],{"class":102},[92,84609,79842],{"class":207},[92,84611,84612,84615,84617,84619,84621,84623,84625,84627],{"class":94,"line":33078},[92,84613,84614],{"class":207},"          \u003Cp class=\"price\">${",[92,84616,79795],{"class":102},[92,84618,661],{"class":207},[92,84620,84556],{"class":1942},[92,84622,103],{"class":207},[92,84624,180],{"class":151},[92,84626,532],{"class":207},[92,84628,79842],{"class":207},[92,84630,84631,84634,84636],{"class":94,"line":33127},[92,84632,84633],{"class":207},"          \u003Cp class=\"count\">x${",[92,84635,84414],{"class":102},[92,84637,79842],{"class":207},[92,84639,84640,84643,84646],{"class":94,"line":33174},[92,84641,84642],{"class":207},"          \u003Cp class=\"sub-total\">${",[92,84644,84645],{"class":102},"subtotal",[92,84647,79842],{"class":207},[92,84649,84650],{"class":94,"line":33179},[92,84651,84652],{"class":207},"        \u003C\u002Fdiv> \n",[92,84654,84655],{"class":94,"line":33185},[92,84656,84657],{"class":207},"             `\n",[92,84659,84660,84663,84665,84667,84669],{"class":94,"line":33204},[92,84661,84662],{"class":102},"    }).",[92,84664,74203],{"class":1942},[92,84666,103],{"class":102},[92,84668,74208],{"class":207},[92,84670,109],{"class":102},[92,84672,84673],{"class":94,"line":33210},[92,84674,84675],{"class":161},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[92,84677,84678,84680,84682,84684,84686,84689,84691,84694,84696,84698,84700,84703,84706,84708,84711,84713,84715,84717,84720,84722,84724,84726,84728],{"class":94,"line":33230},[92,84679,11201],{"class":98},[92,84681,62765],{"class":151},[92,84683,13544],{"class":98},[92,84685,80028],{"class":102},[92,84687,84688],{"class":1942},"reduce",[92,84690,2355],{"class":102},[92,84692,84693],{"class":5196},"prev",[92,84695,12415],{"class":102},[92,84697,79775],{"class":5196},[92,84699,13694],{"class":102},[92,84701,84702],{"class":98},"=>",[92,84704,84705],{"class":102}," prev ",[92,84707,584],{"class":98},[92,84709,84710],{"class":102}," (item.price ",[92,84712,558],{"class":98},[92,84714,5734],{"class":151},[92,84716,6498],{"class":98},[92,84718,84719],{"class":102}," item.count) ",[92,84721,687],{"class":98},[92,84723,5734],{"class":151},[92,84725,12415],{"class":102},[92,84727,294],{"class":151},[92,84729,109],{"class":102},[92,84731,84732,84734,84736,84738,84741,84743,84745,84748,84750,84752,84754],{"class":94,"line":33236},[92,84733,52387],{"class":102},[92,84735,54379],{"class":1942},[92,84737,103],{"class":102},[92,84739,84740],{"class":207},"'.amount'",[92,84742,74229],{"class":102},[92,84744,148],{"class":98},[92,84746,84747],{"class":102}," total.",[92,84749,84556],{"class":1942},[92,84751,103],{"class":102},[92,84753,180],{"class":151},[92,84755,109],{"class":102},[92,84757,84758,84760,84762],{"class":94,"line":33242},[92,84759,52397],{"class":102},[92,84761,51793],{"class":51280},[92,84763,51287],{"class":102},[92,84765,84766,84768,84770],{"class":94,"line":33252},[92,84767,51765],{"class":102},[92,84769,51780],{"class":51280},[92,84771,51287],{"class":102},[92,84773,84774],{"class":94,"line":33257},[92,84775,2379],{"emptyLinePlaceholder":17},[92,84777,84778,84780,84782],{"class":94,"line":33263},[92,84779,51765],{"class":102},[92,84781,50615],{"class":51280},[92,84783,51287],{"class":102},[33,84785,84787],{"id":84786},"_411-编程思想","4.11 编程思想",[63,84789,84791],{"id":84790},"_4111-面向过程介绍","4.11.1 面向过程介绍",[38,84793,84794,84797],{},[252,84795,84796],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[38,84799,84800],{},"调用就可以了",[38,84802,84803],{},[1441,84804],{"alt":10,"src":84805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[63,84807,84809],{"id":84808},"_4112-面向对象","4.11.2 面向对象",[38,84811,84812],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[38,84814,84815],{},[1441,84816],{"alt":10,"src":84817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[38,84819,84820],{},"面向对象的特性：",[1110,84822,84823,84826,84829],{},[49,84824,84825],{},"封装性",[49,84827,84828],{},"继承性",[49,84830,84831],{},"多态性",[63,84833,84835],{"id":84834},"_4113-两者比较","4.11.3 两者比较",[38,84837,84838],{},[1441,84839],{"alt":10,"src":84840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[33,84842,84844],{"id":84843},"_412-构造函数回顾","4.12 构造函数回顾",[38,84846,84847],{},[1441,84848],{"alt":10,"src":84849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[38,84851,84852],{},[1441,84853],{"alt":10,"src":84854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[38,84856,84857],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[38,84859,84860],{},[1441,84861],{"alt":10,"src":84862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[33,84864,84866],{"id":84865},"_413-原型","4.13 原型",[63,84868,84870],{"id":84869},"_4131-原型对象的认识","4.13.1 原型对象的认识",[38,84872,84873],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[38,84875,84876],{},[1441,84877],{"alt":10,"src":84878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[38,84880,84881],{},[1441,84882],{"alt":10,"src":84883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[38,84885,84886],{},"原型是构造函数的属性，它也是一个对象",[38,84888,84889],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[38,84891,84892],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[83,84894,84896],{"className":53047,"code":84895,"language":53049,"meta":10,"style":10},"\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",[89,84897,84898,84906,84911,84919,84924,84929,84934,84939,84944,84948,84952,84956,84961,84966,84970,84975,84980,84985,84990,84995,84999,85007],{"__ignoreMap":10},[92,84899,84900,84902,84904],{"class":94,"line":95},[92,84901,1013],{"class":102},[92,84903,51780],{"class":51280},[92,84905,51287],{"class":102},[92,84907,84908],{"class":94,"line":11},[92,84909,84910],{"class":161},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[92,84912,84913,84915,84917],{"class":94,"line":1158},[92,84914,52124],{"class":102},[92,84916,51793],{"class":51280},[92,84918,51287],{"class":102},[92,84920,84921],{"class":94,"line":1173},[92,84922,84923],{"class":102},"    function Star(uname, age) {\n",[92,84925,84926],{"class":94,"line":1179},[92,84927,84928],{"class":102},"      this.uname = uname,\n",[92,84930,84931],{"class":94,"line":1193},[92,84932,84933],{"class":102},"        this.age = age\n",[92,84935,84936],{"class":94,"line":1199},[92,84937,84938],{"class":102},"      \u002F\u002F this.sing = function () {\n",[92,84940,84941],{"class":94,"line":1290},[92,84942,84943],{"class":102},"      \u002F\u002F   console.log('唱歌')\n",[92,84945,84946],{"class":94,"line":1296},[92,84947,2379],{"emptyLinePlaceholder":17},[92,84949,84950],{"class":94,"line":1308},[92,84951,60017],{"class":102},[92,84953,84954],{"class":94,"line":1591},[92,84955,2166],{"class":102},[92,84957,84958],{"class":94,"line":1596},[92,84959,84960],{"class":102},"    Star.prototype.sing = function () {\n",[92,84962,84963],{"class":94,"line":1602},[92,84964,84965],{"class":102},"      console.log('唱歌')\n",[92,84967,84968],{"class":94,"line":1607},[92,84969,2166],{"class":102},[92,84971,84972],{"class":94,"line":1621},[92,84973,84974],{"class":102},"    \u002F\u002F console.dir(Star.prototype)\n",[92,84976,84977],{"class":94,"line":1626},[92,84978,84979],{"class":102},"    const pink = new Star('pink', 18)\n",[92,84981,84982],{"class":94,"line":1632},[92,84983,84984],{"class":102},"    const red = new Star('red', 20)\n",[92,84986,84987],{"class":94,"line":1653},[92,84988,84989],{"class":102},"    pink.sing()\n",[92,84991,84992],{"class":94,"line":1658},[92,84993,84994],{"class":102},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[92,84996,84997],{"class":94,"line":1672},[92,84998,2379],{"emptyLinePlaceholder":17},[92,85000,85001,85003,85005],{"class":94,"line":1677},[92,85002,52397],{"class":102},[92,85004,51793],{"class":51280},[92,85006,51287],{"class":102},[92,85008,85009,85011,85013],{"class":94,"line":1706},[92,85010,51765],{"class":102},[92,85012,51780],{"class":51280},[92,85014,51287],{"class":102},[38,85016,85017],{},[1441,85018],{"alt":10,"src":85019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[83,85021,85023],{"className":53047,"code":85022,"language":53049,"meta":10,"style":10},"\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",[89,85024,85025,85033,85041,85046,85051,85056,85061,85065,85070,85075,85080,85084,85089,85093,85097,85102,85106,85114],{"__ignoreMap":10},[92,85026,85027,85029,85031],{"class":94,"line":95},[92,85028,1013],{"class":102},[92,85030,51780],{"class":51280},[92,85032,51287],{"class":102},[92,85034,85035,85037,85039],{"class":94,"line":11},[92,85036,52124],{"class":102},[92,85038,51793],{"class":51280},[92,85040,51287],{"class":102},[92,85042,85043],{"class":94,"line":1158},[92,85044,85045],{"class":102},"    let that\n",[92,85047,85048],{"class":94,"line":1173},[92,85049,85050],{"class":102},"    function Star(uname) {\n",[92,85052,85053],{"class":94,"line":1179},[92,85054,85055],{"class":102},"      this.uname = uname\n",[92,85057,85058],{"class":94,"line":1193},[92,85059,85060],{"class":102},"      that = this\n",[92,85062,85063],{"class":94,"line":1199},[92,85064,2166],{"class":102},[92,85066,85067],{"class":94,"line":1290},[92,85068,85069],{"class":102},"    \u002F\u002F 实例对象是 ldh\n",[92,85071,85072],{"class":94,"line":1296},[92,85073,85074],{"class":102},"    const ldh = new Star('刘德华')\n",[92,85076,85077],{"class":94,"line":1308},[92,85078,85079],{"class":102},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[92,85081,85082],{"class":94,"line":1591},[92,85083,2379],{"emptyLinePlaceholder":17},[92,85085,85086],{"class":94,"line":1596},[92,85087,85088],{"class":102},"    Star.sing = function () {\n",[92,85090,85091],{"class":94,"line":1602},[92,85092,84965],{"class":102},[92,85094,85095],{"class":94,"line":1607},[92,85096,2166],{"class":102},[92,85098,85099],{"class":94,"line":1621},[92,85100,85101],{"class":102},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[92,85103,85104],{"class":94,"line":1626},[92,85105,2379],{"emptyLinePlaceholder":17},[92,85107,85108,85110,85112],{"class":94,"line":1632},[92,85109,52397],{"class":102},[92,85111,51793],{"class":51280},[92,85113,51287],{"class":102},[92,85115,85116,85118,85120],{"class":94,"line":1653},[92,85117,51765],{"class":102},[92,85119,51780],{"class":51280},[92,85121,51287],{"class":102},[38,85123,85124],{},"构造函数的this指向的是实例对象；",[38,85126,85127],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[63,85129,85131],{"id":85130},"_4132-数组扩展方法","4.13.2 数组扩展方法",[38,85133,85134],{},[1441,85135],{"alt":10,"src":85136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[83,85138,85140],{"className":53047,"code":85139,"language":53049,"meta":10,"style":10},"\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",[89,85141,85142,85150,85158,85163,85168,85173,85178,85183,85188,85193,85198,85203,85208,85212,85217,85222,85227,85232,85236,85241,85246,85251,85256,85260,85265,85270,85275,85280,85284,85289,85293,85301],{"__ignoreMap":10},[92,85143,85144,85146,85148],{"class":94,"line":95},[92,85145,1013],{"class":102},[92,85147,51780],{"class":51280},[92,85149,51287],{"class":102},[92,85151,85152,85154,85156],{"class":94,"line":11},[92,85153,52124],{"class":102},[92,85155,51793],{"class":51280},[92,85157,51287],{"class":102},[92,85159,85160],{"class":94,"line":1158},[92,85161,85162],{"class":102},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[92,85164,85165],{"class":94,"line":1173},[92,85166,85167],{"class":102},"    const arr = [1, 2, 3]\n",[92,85169,85170],{"class":94,"line":1179},[92,85171,85172],{"class":102},"    \u002F\u002F 自己定义数组的扩展方法\n",[92,85174,85175],{"class":94,"line":1193},[92,85176,85177],{"class":102},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[92,85179,85180],{"class":94,"line":1199},[92,85181,85182],{"class":102},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[92,85184,85185],{"class":94,"line":1290},[92,85186,85187],{"class":102},"    \u002F\u002F ①.最大值\n",[92,85189,85190],{"class":94,"line":1296},[92,85191,85192],{"class":102},"    Array.prototype.max = function () {\n",[92,85194,85195],{"class":94,"line":1308},[92,85196,85197],{"class":102},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[92,85199,85200],{"class":94,"line":1591},[92,85201,85202],{"class":102},"      return Math.max(...this)\n",[92,85204,85205],{"class":94,"line":1596},[92,85206,85207],{"class":102},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[92,85209,85210],{"class":94,"line":1602},[92,85211,2166],{"class":102},[92,85213,85214],{"class":94,"line":1607},[92,85215,85216],{"class":102},"    console.log(arr.max())\n",[92,85218,85219],{"class":94,"line":1621},[92,85220,85221],{"class":102},"    \u002F\u002F ②最小值\n",[92,85223,85224],{"class":94,"line":1626},[92,85225,85226],{"class":102},"    Array.prototype.min = function () {\n",[92,85228,85229],{"class":94,"line":1632},[92,85230,85231],{"class":102},"      return Math.min(...this)\n",[92,85233,85234],{"class":94,"line":1653},[92,85235,2166],{"class":102},[92,85237,85238],{"class":94,"line":1658},[92,85239,85240],{"class":102},"    console.log(arr.min())\n",[92,85242,85243],{"class":94,"line":1672},[92,85244,85245],{"class":102},"    \u002F\u002F③求和\n",[92,85247,85248],{"class":94,"line":1677},[92,85249,85250],{"class":102},"    Array.prototype.sum = function () {\n",[92,85252,85253],{"class":94,"line":1706},[92,85254,85255],{"class":102},"      return this.reduce((prev, current) => prev + current, 0)\n",[92,85257,85258],{"class":94,"line":1711},[92,85259,2166],{"class":102},[92,85261,85262],{"class":94,"line":1728},[92,85263,85264],{"class":102},"    console.log(arr.sum())\n",[92,85266,85267],{"class":94,"line":1733},[92,85268,85269],{"class":102},"    \u002F\u002F ③排序\n",[92,85271,85272],{"class":94,"line":1738},[92,85273,85274],{"class":102},"    Array.prototype.rever = function () {\n",[92,85276,85277],{"class":94,"line":1743},[92,85278,85279],{"class":102},"      return this.reverse()\n",[92,85281,85282],{"class":94,"line":1757},[92,85283,2166],{"class":102},[92,85285,85286],{"class":94,"line":1762},[92,85287,85288],{"class":102},"    console.log(arr.rever())\n",[92,85290,85291],{"class":94,"line":2556},[92,85292,2379],{"emptyLinePlaceholder":17},[92,85294,85295,85297,85299],{"class":94,"line":2570},[92,85296,52397],{"class":102},[92,85298,51793],{"class":51280},[92,85300,51287],{"class":102},[92,85302,85303,85305,85307],{"class":94,"line":2578},[92,85304,51765],{"class":102},[92,85306,51780],{"class":51280},[92,85308,51287],{"class":102},[38,85310,85311],{},[1441,85312],{"alt":10,"src":85313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[63,85315,85317],{"id":85316},"_4133-constructor-属性","4.13.3 constructor 属性",[38,85319,85320],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[38,85322,85323],{},[1441,85324],{"alt":10,"src":85325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[83,85327,85329],{"className":53047,"code":85328,"language":53049,"meta":10,"style":10},"\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",[89,85330,85331,85339,85347,85352,85357,85361,85366,85371,85376,85384],{"__ignoreMap":10},[92,85332,85333,85335,85337],{"class":94,"line":95},[92,85334,1013],{"class":102},[92,85336,51780],{"class":51280},[92,85338,51287],{"class":102},[92,85340,85341,85343,85345],{"class":94,"line":11},[92,85342,52124],{"class":102},[92,85344,51793],{"class":51280},[92,85346,51287],{"class":102},[92,85348,85349],{"class":94,"line":1158},[92,85350,85351],{"class":102},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[92,85353,85354],{"class":94,"line":1173},[92,85355,85356],{"class":102},"    function Star() {\n",[92,85358,85359],{"class":94,"line":1179},[92,85360,2166],{"class":102},[92,85362,85363],{"class":94,"line":1193},[92,85364,85365],{"class":102},"    const ldh = new Star()\n",[92,85367,85368],{"class":94,"line":1199},[92,85369,85370],{"class":102},"    console.log(Star.prototype)\n",[92,85372,85373],{"class":94,"line":1290},[92,85374,85375],{"class":102},"    console.log(Star.prototype.constructor === Star)\n",[92,85377,85378,85380,85382],{"class":94,"line":1296},[92,85379,52397],{"class":102},[92,85381,51793],{"class":51280},[92,85383,51287],{"class":102},[92,85385,85386,85388,85390],{"class":94,"line":1308},[92,85387,51765],{"class":102},[92,85389,51780],{"class":51280},[92,85391,51287],{"class":102},[38,85393,85394],{},[1441,85395],{"alt":10,"src":85396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[38,85398,85399],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[83,85401,85403],{"className":53047,"code":85402,"language":53049,"meta":10,"style":10},"  \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",[89,85404,85405,85413,85417,85421,85425,85430,85435,85440,85444,85449,85454,85459,85464,85469,85474,85478,85482,85487,85492,85497,85501,85506,85511,85515,85519,85523],{"__ignoreMap":10},[92,85406,85407,85409,85411],{"class":94,"line":95},[92,85408,52124],{"class":102},[92,85410,51793],{"class":51280},[92,85412,51287],{"class":102},[92,85414,85415],{"class":94,"line":11},[92,85416,85351],{"class":102},[92,85418,85419],{"class":94,"line":1158},[92,85420,85356],{"class":102},[92,85422,85423],{"class":94,"line":1173},[92,85424,2166],{"class":102},[92,85426,85427],{"class":94,"line":1179},[92,85428,85429],{"class":102},"    \u002F\u002F const ldh = new Star()\n",[92,85431,85432],{"class":94,"line":1193},[92,85433,85434],{"class":102},"    \u002F\u002F console.log(Star.prototype)\n",[92,85436,85437],{"class":94,"line":1199},[92,85438,85439],{"class":102},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[92,85441,85442],{"class":94,"line":1290},[92,85443,2379],{"emptyLinePlaceholder":17},[92,85445,85446],{"class":94,"line":1296},[92,85447,85448],{"class":102},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[92,85450,85451],{"class":94,"line":1308},[92,85452,85453],{"class":102},"    \u002F\u002F Star.prototype.sing = function () {\n",[92,85455,85456],{"class":94,"line":1591},[92,85457,85458],{"class":102},"    \u002F\u002F   console.log('唱歌')\n",[92,85460,85461],{"class":94,"line":1596},[92,85462,85463],{"class":102},"    \u002F\u002F }\n",[92,85465,85466],{"class":94,"line":1602},[92,85467,85468],{"class":102},"    \u002F\u002F Star.prototype.dance = function () {\n",[92,85470,85471],{"class":94,"line":1607},[92,85472,85473],{"class":102},"    \u002F\u002F   console.log('跳舞')\n",[92,85475,85476],{"class":94,"line":1621},[92,85477,85463],{"class":102},[92,85479,85480],{"class":94,"line":1626},[92,85481,85370],{"class":102},[92,85483,85484],{"class":94,"line":1632},[92,85485,85486],{"class":102},"    Star.prototype = {\n",[92,85488,85489],{"class":94,"line":1653},[92,85490,85491],{"class":102},"      sing: function () {\n",[92,85493,85494],{"class":94,"line":1658},[92,85495,85496],{"class":102},"        console.log('唱歌')\n",[92,85498,85499],{"class":94,"line":1672},[92,85500,77872],{"class":102},[92,85502,85503],{"class":94,"line":1677},[92,85504,85505],{"class":102},"      dance: function () {\n",[92,85507,85508],{"class":94,"line":1706},[92,85509,85510],{"class":102},"        console.log('跳舞')\n",[92,85512,85513],{"class":94,"line":1711},[92,85514,52378],{"class":102},[92,85516,85517],{"class":94,"line":1728},[92,85518,2166],{"class":102},[92,85520,85521],{"class":94,"line":1733},[92,85522,85370],{"class":102},[92,85524,85525,85527,85529],{"class":94,"line":1738},[92,85526,52397],{"class":102},[92,85528,51793],{"class":51280},[92,85530,51287],{"class":102},[38,85532,85533],{},"进行输出结果后会发现：",[38,85535,85536],{},[1441,85537],{"alt":10,"src":85538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[38,85540,85541],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[38,85543,85544],{},"所以，要重新指回创造这个原型对象的构造函数",[83,85546,85548],{"className":71193,"code":85547,"language":71195,"meta":10,"style":10},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[89,85549,85550,85564,85569,85574,85585,85598,85603,85614,85628,85632],{"__ignoreMap":10},[92,85551,85552,85555,85557,85560,85562],{"class":94,"line":95},[92,85553,85554],{"class":151},"Star",[92,85556,661],{"class":102},[92,85558,85559],{"class":151},"prototype",[92,85561,13544],{"class":98},[92,85563,15552],{"class":102},[92,85565,85566],{"class":94,"line":11},[92,85567,85568],{"class":161},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[92,85570,85571],{"class":94,"line":1158},[92,85572,85573],{"class":102},"  constructor: Star,\n",[92,85575,85576,85579,85581,85583],{"class":94,"line":1173},[92,85577,85578],{"class":1942},"  sing",[92,85580,51417],{"class":102},[92,85582,54429],{"class":98},[92,85584,54432],{"class":102},[92,85586,85587,85589,85591,85593,85596],{"class":94,"line":1179},[92,85588,73733],{"class":102},[92,85590,58227],{"class":1942},[92,85592,103],{"class":102},[92,85594,85595],{"class":207},"'唱歌'",[92,85597,109],{"class":102},[92,85599,85600],{"class":94,"line":1193},[92,85601,85602],{"class":102},"   },\n",[92,85604,85605,85608,85610,85612],{"class":94,"line":1199},[92,85606,85607],{"class":1942},"   dance",[92,85609,51417],{"class":102},[92,85611,54429],{"class":98},[92,85613,54432],{"class":102},[92,85615,85616,85619,85621,85623,85626],{"class":94,"line":1290},[92,85617,85618],{"class":102},"     console.",[92,85620,58227],{"class":1942},[92,85622,103],{"class":102},[92,85624,85625],{"class":207},"'跳舞'",[92,85627,109],{"class":102},[92,85629,85630],{"class":94,"line":1296},[92,85631,4288],{"class":102},[92,85633,85634],{"class":94,"line":1308},[92,85635,1544],{"class":102},[38,85637,85638],{},[1441,85639],{"alt":10,"src":85640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[38,85642,85643],{},"总结1：",[38,85645,85646],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[38,85648,85649],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[38,85651,85652],{},"constructor指的是他的来源",[38,85654,85655],{},[1441,85656],{"alt":10,"src":85657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[38,85659,85660],{},[1441,85661],{"alt":10,"src":85662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[38,85664,85665],{},"总结2：",[38,85667,85668],{},[1441,85669],{"alt":10,"src":85670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[38,85672,85673],{},[1441,85674],{"alt":10,"src":85675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[38,85677,85678],{},[1441,85679],{"alt":10,"src":85680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[63,85682,85684],{"id":85683},"_4134-对象原型","4.13.4 对象原型",[38,85686,85687],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[38,85689,85690],{},"对象原型就是__proto__这个属性",[38,85692,85693],{},[1441,85694],{"alt":10,"src":85695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[38,85697,85698],{},[1441,85699],{"alt":10,"src":85700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[38,85702,85703],{},[1441,85704],{"alt":10,"src":85705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[38,85707,85708],{},[1441,85709],{"alt":10,"src":85710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[83,85712,85714],{"className":53047,"code":85713,"language":53049,"meta":10,"style":10},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[89,85715,85716,85724,85732,85736,85740,85744,85749,85757],{"__ignoreMap":10},[92,85717,85718,85720,85722],{"class":94,"line":95},[92,85719,1013],{"class":102},[92,85721,51780],{"class":51280},[92,85723,51287],{"class":102},[92,85725,85726,85728,85730],{"class":94,"line":11},[92,85727,52124],{"class":102},[92,85729,51793],{"class":51280},[92,85731,51287],{"class":102},[92,85733,85734],{"class":94,"line":1158},[92,85735,85356],{"class":102},[92,85737,85738],{"class":94,"line":1173},[92,85739,2166],{"class":102},[92,85741,85742],{"class":94,"line":1179},[92,85743,85365],{"class":102},[92,85745,85746],{"class":94,"line":1193},[92,85747,85748],{"class":102},"    console.log(ldh)\n",[92,85750,85751,85753,85755],{"class":94,"line":1199},[92,85752,52397],{"class":102},[92,85754,51793],{"class":51280},[92,85756,51287],{"class":102},[92,85758,85759,85761,85763],{"class":94,"line":1290},[92,85760,51765],{"class":102},[92,85762,51780],{"class":51280},[92,85764,51287],{"class":102},[38,85766,85767],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[38,85769,85770],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[38,85772,85773],{},[1441,85774],{"alt":10,"src":85775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[38,85777,85778],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[38,85780,85781],{},"对象原型指向原型对象",[38,85783,85784],{},[1441,85785],{"alt":10,"src":85786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[38,85788,85789],{},[1441,85790],{"alt":10,"src":85791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[38,85793,85794],{},[1441,85795],{"alt":10,"src":85796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[63,85798,85800],{"id":85799},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[38,85802,85803],{},[1441,85804],{"alt":10,"src":85805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[46,85807,85808,85811,85814,85817],{},[49,85809,85810],{},"构造函数通过new的形式实例化得到实例对象",[49,85812,85813],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[49,85815,85816],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[49,85818,85819],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[38,85821,85822],{},[1441,85823],{"alt":10,"src":85824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[38,85826,85827],{},"题目梳理：",[38,85829,85830],{},[1441,85831],{"alt":10,"src":85832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[63,85834,85836],{"id":85835},"_4136-原型继承","4.13.6 原型继承",[38,85838,85839],{},[1441,85840],{"alt":10,"src":85841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[38,85843,85844],{},[1441,85845],{"alt":10,"src":85846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[38,85848,85849],{},[1441,85850],{"alt":10,"src":85851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[38,85853,85854],{},[1441,85855],{"alt":10,"src":85856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[38,85858,85859],{},[1441,85860],{"alt":10,"src":85861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[38,85863,85864],{},[1441,85865],{"alt":10,"src":85866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[38,85868,85869],{},[1441,85870],{"alt":10,"src":85871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[38,85873,85874],{},[1441,85875],{"alt":10,"src":85876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[38,85878,85879],{},"回顾：构造函数每次new得到对象都是不同的",[63,85881,85883],{"id":85882},"_4137-原型链","4.13.7 原型链",[38,85885,85886],{},[1441,85887],{"alt":10,"src":85888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[38,85890,85891],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[38,85893,85894],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[38,85896,85897],{},"大哥是Object",[38,85899,85900],{},[1441,85901],{"alt":10,"src":85902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[38,85904,85905],{},[1441,85906],{"alt":10,"src":85907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[38,85909,85910],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[38,85912,85913],{},"万物皆对象",[63,85915,85917],{"id":85916},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[38,85919,85920],{},"模态框",[38,85922,85923],{},"以后遇见这个效果直接使用这个就行",[38,85925,85926],{},[1441,85927],{"alt":10,"src":85928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[38,85930,85931],{},[1441,85932],{"alt":10,"src":85933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[38,85935,85936],{},[1441,85937],{"alt":10,"src":85938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[38,85940,85941],{},[1441,85942],{"alt":10,"src":85943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[38,85945,85946],{},"补充知识点：",[46,85948,85949],{},[49,85950,85951],{},"append()",[38,85953,85954],{},[1441,85955],{"alt":10,"src":85956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[83,85958,85960],{"className":50613,"code":85959,"language":50615,"meta":10,"style":10},"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",[89,85961,85962,85967,85972,85977,85981,85985,85989,85994,85999,86004,86008],{"__ignoreMap":10},[92,85963,85964],{"class":94,"line":95},[92,85965,85966],{"class":102},"append(param1)\n",[92,85968,85969],{"class":94,"line":11},[92,85970,85971],{"class":102},"append(param1, param2)\n",[92,85973,85974],{"class":94,"line":1158},[92,85975,85976],{"class":102},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[92,85978,85979],{"class":94,"line":1173},[92,85980,2379],{"emptyLinePlaceholder":17},[92,85982,85983],{"class":94,"line":1179},[92,85984,2379],{"emptyLinePlaceholder":17},[92,85986,85987],{"class":94,"line":1193},[92,85988,2379],{"emptyLinePlaceholder":17},[92,85990,85991],{"class":94,"line":1199},[92,85992,85993],{"class":102},"let div = document.createElement(\"div\");\n",[92,85995,85996],{"class":94,"line":1290},[92,85997,85998],{"class":102},"let p = document.createElement(\"p\");\n",[92,86000,86001],{"class":94,"line":1296},[92,86002,86003],{"class":102},"div.append(p);\n",[92,86005,86006],{"class":94,"line":1308},[92,86007,2379],{"emptyLinePlaceholder":17},[92,86009,86010,86013,86015],{"class":94,"line":1591},[92,86011,86012],{"class":102},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[92,86014,38],{"class":51280},[92,86016,86017],{"class":102},"> ]\n",[46,86019,86020],{"start":11},[49,86021,86022],{},"remove()",[38,86024,86025],{},"自己删自己",[38,86027,86028],{},[1441,86029],{"alt":10,"src":86030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[83,86032,86034],{"className":50613,"code":86033,"language":50615,"meta":10,"style":10},"\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",[89,86035,86036,86046,86060,86064,86072,86086,86106,86118,86126,86133,86145,86158,86193,86205,86216,86228,86240,86252,86279,86289,86293,86297,86306,86318,86332,86342,86354,86358,86362,86372,86383,86393,86403,86416,86429,86439,86443,86447,86456,86466,86478,86482,86486,86495,86505,86515,86527,86531,86535,86545,86561,86572,86582,86592,86604,86616,86628,86632,86636,86649,86660,86664,86672,86680,86684,86692,86712,86732,86740,86745,86771,86776,86781,86800,86805,86817,86822,86833,86843,86853,86858,86863,86867,86872,86877,86882,86902,86907,86927,86932,86946,86951,86956,86961,86977,86981,86986,87015,87020,87025,87030,87041,87045,87049,87053,87058,87083,87088,87113,87118,87127,87131,87136,87161,87165,87190,87194,87203,87207,87212,87230,87240,87244,87252,87260,87264],{"__ignoreMap":10},[92,86037,86038,86040,86042,86044],{"class":94,"line":95},[92,86039,51277],{"class":102},[92,86041,51281],{"class":51280},[92,86043,51284],{"class":1942},[92,86045,51287],{"class":102},[92,86047,86048,86050,86052,86054,86056,86058],{"class":94,"line":11},[92,86049,1013],{"class":102},[92,86051,50615],{"class":51280},[92,86053,51296],{"class":1942},[92,86055,148],{"class":102},[92,86057,51301],{"class":207},[92,86059,51287],{"class":102},[92,86061,86062],{"class":94,"line":1158},[92,86063,2379],{"emptyLinePlaceholder":17},[92,86065,86066,86068,86070],{"class":94,"line":1173},[92,86067,1013],{"class":102},[92,86069,51314],{"class":51280},[92,86071,51287],{"class":102},[92,86073,86074,86076,86078,86080,86082,86084],{"class":94,"line":1179},[92,86075,52124],{"class":102},[92,86077,51324],{"class":51280},[92,86079,51327],{"class":1942},[92,86081,148],{"class":102},[92,86083,51332],{"class":207},[92,86085,51287],{"class":102},[92,86087,86088,86090,86092,86094,86096,86098,86100,86102,86104],{"class":94,"line":1193},[92,86089,52124],{"class":102},[92,86091,51324],{"class":51280},[92,86093,14900],{"class":1942},[92,86095,148],{"class":102},[92,86097,51371],{"class":207},[92,86099,51351],{"class":1942},[92,86101,148],{"class":102},[92,86103,51378],{"class":207},[92,86105,51287],{"class":102},[92,86107,86108,86110,86112,86114,86116],{"class":94,"line":1199},[92,86109,52124],{"class":102},[92,86111,51387],{"class":51280},[92,86113,51390],{"class":102},[92,86115,51387],{"class":51280},[92,86117,51287],{"class":102},[92,86119,86120,86122,86124],{"class":94,"line":1290},[92,86121,52124],{"class":102},[92,86123,5106],{"class":51280},[92,86125,51287],{"class":102},[92,86127,86128,86131],{"class":94,"line":1296},[92,86129,86130],{"class":1942},"    .modal",[92,86132,15552],{"class":102},[92,86134,86135,86137,86139,86141,86143],{"class":94,"line":1308},[92,86136,54751],{"class":151},[92,86138,51417],{"class":102},[92,86140,3952],{"class":151},[92,86142,51472],{"class":98},[92,86144,1269],{"class":102},[92,86146,86147,86150,86152,86154,86156],{"class":94,"line":1591},[92,86148,86149],{"class":151},"      min-height",[92,86151,51417],{"class":102},[92,86153,414],{"class":151},[92,86155,51472],{"class":98},[92,86157,1269],{"class":102},[92,86159,86160,86162,86164,86166,86168,86170,86172,86174,86176,86178,86180,86182,86184,86186,86188,86191],{"class":94,"line":1596},[92,86161,78730],{"class":151},[92,86163,51417],{"class":102},[92,86165,294],{"class":151},[92,86167,4072],{"class":151},[92,86169,2017],{"class":151},[92,86171,51472],{"class":98},[92,86173,78747],{"class":151},[92,86175,103],{"class":102},[92,86177,294],{"class":151},[92,86179,12415],{"class":102},[92,86181,294],{"class":151},[92,86183,12415],{"class":102},[92,86185,294],{"class":151},[92,86187,12415],{"class":102},[92,86189,86190],{"class":151},"0.1",[92,86192,2698],{"class":102},[92,86194,86195,86197,86199,86201,86203],{"class":94,"line":1602},[92,86196,55114],{"class":151},[92,86198,51417],{"class":102},[92,86200,396],{"class":151},[92,86202,51472],{"class":98},[92,86204,1269],{"class":102},[92,86206,86207,86209,86211,86214],{"class":94,"line":1607},[92,86208,54739],{"class":151},[92,86210,51417],{"class":102},[92,86212,86213],{"class":151},"fixed",[92,86215,1269],{"class":102},[92,86217,86218,86221,86223,86226],{"class":94,"line":1621},[92,86219,86220],{"class":151},"      z-index",[92,86222,51417],{"class":102},[92,86224,86225],{"class":151},"999",[92,86227,1269],{"class":102},[92,86229,86230,86232,86234,86236,86238],{"class":94,"line":1626},[92,86231,54818],{"class":151},[92,86233,51417],{"class":102},[92,86235,759],{"class":151},[92,86237,431],{"class":98},[92,86239,1269],{"class":102},[92,86241,86242,86244,86246,86248,86250],{"class":94,"line":1632},[92,86243,54927],{"class":151},[92,86245,51417],{"class":102},[92,86247,759],{"class":151},[92,86249,431],{"class":98},[92,86251,1269],{"class":102},[92,86253,86254,86256,86258,86260,86262,86265,86267,86269,86271,86273,86275,86277],{"class":94,"line":1653},[92,86255,78771],{"class":151},[92,86257,51417],{"class":102},[92,86259,78776],{"class":151},[92,86261,103],{"class":102},[92,86263,86264],{"class":151},"-50",[92,86266,431],{"class":98},[92,86268,12415],{"class":102},[92,86270,86264],{"class":151},[92,86272,431],{"class":98},[92,86274,12415],{"class":102},[92,86276,294],{"class":151},[92,86278,2698],{"class":102},[92,86280,86281,86283,86285,86287],{"class":94,"line":1658},[92,86282,54864],{"class":151},[92,86284,51417],{"class":102},[92,86286,60822],{"class":151},[92,86288,1269],{"class":102},[92,86290,86291],{"class":94,"line":1672},[92,86292,2166],{"class":102},[92,86294,86295],{"class":94,"line":1677},[92,86296,2379],{"emptyLinePlaceholder":17},[92,86298,86299,86301,86304],{"class":94,"line":1706},[92,86300,86130],{"class":1942},[92,86302,86303],{"class":1942}," .header",[92,86305,15552],{"class":102},[92,86307,86308,86310,86312,86314,86316],{"class":94,"line":1711},[92,86309,57339],{"class":151},[92,86311,51417],{"class":102},[92,86313,504],{"class":151},[92,86315,51472],{"class":98},[92,86317,1269],{"class":102},[92,86319,86320,86322,86324,86326,86328,86330],{"class":94,"line":1728},[92,86321,54675],{"class":151},[92,86323,51417],{"class":102},[92,86325,294],{"class":151},[92,86327,2017],{"class":151},[92,86329,51472],{"class":98},[92,86331,1269],{"class":102},[92,86333,86334,86336,86338,86340],{"class":94,"line":1733},[92,86335,54739],{"class":151},[92,86337,51417],{"class":102},[92,86339,54744],{"class":151},[92,86341,1269],{"class":102},[92,86343,86344,86346,86348,86350,86352],{"class":94,"line":1738},[92,86345,54902],{"class":151},[92,86347,51417],{"class":102},[92,86349,803],{"class":151},[92,86351,51472],{"class":98},[92,86353,1269],{"class":102},[92,86355,86356],{"class":94,"line":1743},[92,86357,2166],{"class":102},[92,86359,86360],{"class":94,"line":1757},[92,86361,2379],{"emptyLinePlaceholder":17},[92,86363,86364,86366,86368,86370],{"class":94,"line":1762},[92,86365,86130],{"class":1942},[92,86367,86303],{"class":1942},[92,86369,3011],{"class":51280},[92,86371,15552],{"class":102},[92,86373,86374,86377,86379,86381],{"class":94,"line":2556},[92,86375,86376],{"class":151},"      font-style",[92,86378,51417],{"class":102},[92,86380,63821],{"class":151},[92,86382,1269],{"class":102},[92,86384,86385,86387,86389,86391],{"class":94,"line":2570},[92,86386,57396],{"class":151},[92,86388,51417],{"class":102},[92,86390,62050],{"class":151},[92,86392,1269],{"class":102},[92,86394,86395,86397,86399,86401],{"class":94,"line":2578},[92,86396,54739],{"class":151},[92,86398,51417],{"class":102},[92,86400,54811],{"class":151},[92,86402,1269],{"class":102},[92,86404,86405,86408,86410,86412,86414],{"class":94,"line":2583},[92,86406,86407],{"class":151},"      right",[92,86409,51417],{"class":102},[92,86411,678],{"class":151},[92,86413,51472],{"class":98},[92,86415,1269],{"class":102},[92,86417,86418,86420,86422,86425,86427],{"class":94,"line":2589},[92,86419,54927],{"class":151},[92,86421,51417],{"class":102},[92,86423,86424],{"class":151},"-2",[92,86426,51472],{"class":98},[92,86428,1269],{"class":102},[92,86430,86431,86433,86435,86437],{"class":94,"line":2595},[92,86432,62005],{"class":151},[92,86434,51417],{"class":102},[92,86436,62010],{"class":151},[92,86438,1269],{"class":102},[92,86440,86441],{"class":94,"line":2600},[92,86442,2166],{"class":102},[92,86444,86445],{"class":94,"line":7928},[92,86446,2379],{"emptyLinePlaceholder":17},[92,86448,86449,86451,86454],{"class":94,"line":7952},[92,86450,86130],{"class":1942},[92,86452,86453],{"class":1942}," .body",[92,86455,15552],{"class":102},[92,86457,86458,86460,86462,86464],{"class":94,"line":7957},[92,86459,57266],{"class":151},[92,86461,51417],{"class":102},[92,86463,51572],{"class":151},[92,86465,1269],{"class":102},[92,86467,86468,86470,86472,86474,86476],{"class":94,"line":7963},[92,86469,54675],{"class":151},[92,86471,51417],{"class":102},[92,86473,549],{"class":151},[92,86475,51472],{"class":98},[92,86477,1269],{"class":102},[92,86479,86480],{"class":94,"line":7990},[92,86481,2166],{"class":102},[92,86483,86484],{"class":94,"line":7995},[92,86485,2379],{"emptyLinePlaceholder":17},[92,86487,86488,86490,86493],{"class":94,"line":8001},[92,86489,86130],{"class":1942},[92,86491,86492],{"class":1942}," .footer",[92,86494,15552],{"class":102},[92,86496,86497,86499,86501,86503],{"class":94,"line":8013},[92,86498,54989],{"class":151},[92,86500,51417],{"class":102},[92,86502,51457],{"class":151},[92,86504,1269],{"class":102},[92,86506,86507,86509,86511,86513],{"class":94,"line":8025},[92,86508,55000],{"class":151},[92,86510,51417],{"class":102},[92,86512,51560],{"class":151},[92,86514,1269],{"class":102},[92,86516,86517,86519,86521,86523,86525],{"class":94,"line":8037},[92,86518,54675],{"class":151},[92,86520,51417],{"class":102},[92,86522,549],{"class":151},[92,86524,51472],{"class":98},[92,86526,1269],{"class":102},[92,86528,86529],{"class":94,"line":9696},[92,86530,2166],{"class":102},[92,86532,86533],{"class":94,"line":9721},[92,86534,2379],{"emptyLinePlaceholder":17},[92,86536,86537,86539,86541,86543],{"class":94,"line":9744},[92,86538,86130],{"class":1942},[92,86540,86492],{"class":1942},[92,86542,1377],{"class":51280},[92,86544,15552],{"class":102},[92,86546,86547,86549,86551,86553,86555,86557,86559],{"class":94,"line":9768},[92,86548,54675],{"class":151},[92,86550,51417],{"class":102},[92,86552,174],{"class":151},[92,86554,51472],{"class":98},[92,86556,2062],{"class":151},[92,86558,51472],{"class":98},[92,86560,1269],{"class":102},[92,86562,86563,86565,86567,86570],{"class":94,"line":9773},[92,86564,61701],{"class":151},[92,86566,51417],{"class":102},[92,86568,86569],{"class":151},"#ccc",[92,86571,1269],{"class":102},[92,86573,86574,86576,86578,86580],{"class":94,"line":9778},[92,86575,63950],{"class":151},[92,86577,51417],{"class":102},[92,86579,54717],{"class":151},[92,86581,1269],{"class":102},[92,86583,86584,86586,86588,86590],{"class":94,"line":9783},[92,86585,57396],{"class":151},[92,86587,51417],{"class":102},[92,86589,60822],{"class":151},[92,86591,1269],{"class":102},[92,86593,86594,86596,86598,86600,86602],{"class":94,"line":9792},[92,86595,55114],{"class":151},[92,86597,51417],{"class":102},[92,86599,180],{"class":151},[92,86601,51472],{"class":98},[92,86603,1269],{"class":102},[92,86605,86606,86608,86610,86612,86614],{"class":94,"line":9797},[92,86607,61730],{"class":151},[92,86609,51417],{"class":102},[92,86611,549],{"class":151},[92,86613,51472],{"class":98},[92,86615,1269],{"class":102},[92,86617,86618,86620,86622,86624,86626],{"class":94,"line":9803},[92,86619,54902],{"class":151},[92,86621,51417],{"class":102},[92,86623,652],{"class":151},[92,86625,51472],{"class":98},[92,86627,1269],{"class":102},[92,86629,86630],{"class":94,"line":9824},[92,86631,2166],{"class":102},[92,86633,86634],{"class":94,"line":9830},[92,86635,2379],{"emptyLinePlaceholder":17},[92,86637,86638,86640,86642,86644,86647],{"class":94,"line":9844},[92,86639,86130],{"class":1942},[92,86641,86492],{"class":1942},[92,86643,1377],{"class":51280},[92,86645,86646],{"class":1942},".submit",[92,86648,15552],{"class":102},[92,86650,86651,86653,86655,86658],{"class":94,"line":9850},[92,86652,54864],{"class":151},[92,86654,51417],{"class":102},[92,86656,86657],{"class":151},"#369",[92,86659,1269],{"class":102},[92,86661,86662],{"class":94,"line":9877},[92,86663,2166],{"class":102},[92,86665,86666,86668,86670],{"class":94,"line":9886},[92,86667,52397],{"class":102},[92,86669,5106],{"class":51280},[92,86671,51287],{"class":102},[92,86673,86674,86676,86678],{"class":94,"line":9892},[92,86675,51765],{"class":102},[92,86677,51314],{"class":51280},[92,86679,51287],{"class":102},[92,86681,86682],{"class":94,"line":9900},[92,86683,2379],{"emptyLinePlaceholder":17},[92,86685,86686,86688,86690],{"class":94,"line":9905},[92,86687,1013],{"class":102},[92,86689,51780],{"class":51280},[92,86691,51287],{"class":102},[92,86693,86694,86696,86698,86700,86702,86705,86708,86710],{"class":94,"line":16584},[92,86695,52124],{"class":102},[92,86697,53867],{"class":51280},[92,86699,14939],{"class":1942},[92,86701,148],{"class":102},[92,86703,86704],{"class":207},"\"delete\"",[92,86706,86707],{"class":102},">删除\u003C\u002F",[92,86709,53867],{"class":51280},[92,86711,51287],{"class":102},[92,86713,86714,86716,86718,86720,86722,86725,86728,86730],{"class":94,"line":16590},[92,86715,52124],{"class":102},[92,86717,53867],{"class":51280},[92,86719,14939],{"class":1942},[92,86721,148],{"class":102},[92,86723,86724],{"class":207},"\"login\"",[92,86726,86727],{"class":102},">登录\u003C\u002F",[92,86729,53867],{"class":51280},[92,86731,51287],{"class":102},[92,86733,86734,86736,86738],{"class":94,"line":16613},[92,86735,52124],{"class":102},[92,86737,51793],{"class":51280},[92,86739,51287],{"class":102},[92,86741,86742],{"class":94,"line":16619},[92,86743,86744],{"class":161},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[92,86746,86747,86749,86752,86754,86756,86758,86760,86762,86765,86767,86769],{"class":94,"line":16642},[92,86748,70064],{"class":98},[92,86750,86751],{"class":1942}," Modal",[92,86753,103],{"class":102},[92,86755,51387],{"class":5196},[92,86757,13544],{"class":98},[92,86759,69910],{"class":207},[92,86761,12415],{"class":102},[92,86763,86764],{"class":5196},"message",[92,86766,13544],{"class":98},[92,86768,69910],{"class":207},[92,86770,12422],{"class":102},[92,86772,86773],{"class":94,"line":16656},[92,86774,86775],{"class":161},"      \u002F\u002F 创建Model 模态框盒子\n",[92,86777,86778],{"class":94,"line":16676},[92,86779,86780],{"class":161},"      \u002F\u002F 1.1 创建div标签\n",[92,86782,86783,86785,86788,86790,86792,86794,86796,86798],{"class":94,"line":16682},[92,86784,70031],{"class":151},[92,86786,86787],{"class":102},".modalBox ",[92,86789,148],{"class":98},[92,86791,54376],{"class":102},[92,86793,70131],{"class":1942},[92,86795,103],{"class":102},[92,86797,81911],{"class":207},[92,86799,109],{"class":102},[92,86801,86802],{"class":94,"line":16693},[92,86803,86804],{"class":161},"      \u002F\u002F 1.2 给div 添加类名为model\n",[92,86806,86807,86809,86812,86814],{"class":94,"line":16716},[92,86808,70031],{"class":151},[92,86810,86811],{"class":102},".modalBox.className ",[92,86813,148],{"class":98},[92,86815,86816],{"class":207}," 'modal'\n",[92,86818,86819],{"class":94,"line":16738},[92,86820,86821],{"class":161},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[92,86823,86824,86826,86829,86831],{"class":94,"line":16743},[92,86825,70031],{"class":151},[92,86827,86828],{"class":102},".modalBox.innerHTML ",[92,86830,148],{"class":98},[92,86832,70148],{"class":207},[92,86834,86835,86838,86840],{"class":94,"line":16749},[92,86836,86837],{"class":207},"        \u003Cdiv class=\"header\">${",[92,86839,51387],{"class":102},[92,86841,86842],{"class":207},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[92,86844,86845,86848,86850],{"class":94,"line":16763},[92,86846,86847],{"class":207},"        \u003Cdiv class=\"body\">${",[92,86849,86764],{"class":102},[92,86851,86852],{"class":207},"}\u003C\u002Fdiv>\n",[92,86854,86855],{"class":94,"line":16776},[92,86856,86857],{"class":207},"      `\n",[92,86859,86860],{"class":94,"line":16781},[92,86861,86862],{"class":161},"      \u002F\u002F console.log(this.modalBox)\n",[92,86864,86865],{"class":94,"line":16795},[92,86866,2166],{"class":102},[92,86868,86869],{"class":94,"line":16800},[92,86870,86871],{"class":161},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[92,86873,86874],{"class":94,"line":16806},[92,86875,86876],{"class":161},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[92,86878,86879],{"class":94,"line":16811},[92,86880,86881],{"class":161},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[92,86883,86884,86887,86889,86891,86893,86896,86898,86900],{"class":94,"line":16825},[92,86885,86886],{"class":151},"    Modal",[92,86888,661],{"class":102},[92,86890,85559],{"class":151},[92,86892,661],{"class":102},[92,86894,86895],{"class":1942},"open",[92,86897,13544],{"class":98},[92,86899,58898],{"class":98},[92,86901,54432],{"class":102},[92,86903,86904],{"class":94,"line":16830},[92,86905,86906],{"class":161},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[92,86908,86909,86911,86914,86916,86918,86920,86922,86925],{"class":94,"line":16835},[92,86910,58208],{"class":98},[92,86912,86913],{"class":151}," box",[92,86915,13544],{"class":98},[92,86917,54376],{"class":102},[92,86919,54379],{"class":1942},[92,86921,103],{"class":102},[92,86923,86924],{"class":207},"'.modal'",[92,86926,109],{"class":102},[92,86928,86929],{"class":94,"line":16849},[92,86930,86931],{"class":161},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[92,86933,86934,86937,86939,86942,86944],{"class":94,"line":16861},[92,86935,86936],{"class":102},"      box ",[92,86938,1694],{"class":98},[92,86940,86941],{"class":102}," box.",[92,86943,56986],{"class":1942},[92,86945,1955],{"class":102},[92,86947,86948],{"class":94,"line":16866},[92,86949,86950],{"class":161},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[92,86952,86953],{"class":94,"line":16879},[92,86954,86955],{"class":161},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[92,86957,86958],{"class":94,"line":16884},[92,86959,86960],{"class":161},"      \u002F\u002F append可以增加对象\n",[92,86962,86963,86966,86969,86971,86974],{"class":94,"line":16889},[92,86964,86965],{"class":102},"      document.body.",[92,86967,86968],{"class":1942},"append",[92,86970,103],{"class":102},[92,86972,86973],{"class":151},"this",[92,86975,86976],{"class":102},".modalBox)\n",[92,86978,86979],{"class":94,"line":16894},[92,86980,2379],{"emptyLinePlaceholder":17},[92,86982,86983],{"class":94,"line":16907},[92,86984,86985],{"class":161},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[92,86987,86988,86990,86993,86995,86997,87000,87002,87004,87006,87008,87011,87013],{"class":94,"line":16912},[92,86989,70031],{"class":151},[92,86991,86992],{"class":102},".modalBox.",[92,86994,54379],{"class":1942},[92,86996,103],{"class":102},[92,86998,86999],{"class":207},"'i'",[92,87001,30807],{"class":102},[92,87003,57793],{"class":1942},[92,87005,103],{"class":102},[92,87007,57798],{"class":207},[92,87009,87010],{"class":102},", () ",[92,87012,84702],{"class":98},[92,87014,15552],{"class":102},[92,87016,87017],{"class":94,"line":32614},[92,87018,87019],{"class":161},"        \u002F\u002F 这个地方需要用到箭头函数\n",[92,87021,87022],{"class":94,"line":32620},[92,87023,87024],{"class":161},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[92,87026,87027],{"class":94,"line":32626},[92,87028,87029],{"class":161},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[92,87031,87032,87034,87036,87039],{"class":94,"line":32632},[92,87033,64706],{"class":151},[92,87035,661],{"class":102},[92,87037,87038],{"class":1942},"close",[92,87040,1955],{"class":102},[92,87042,87043],{"class":94,"line":32638},[92,87044,64795],{"class":102},[92,87046,87047],{"class":94,"line":32649},[92,87048,2166],{"class":102},[92,87050,87051],{"class":94,"line":32655},[92,87052,2379],{"emptyLinePlaceholder":17},[92,87054,87055],{"class":94,"line":32675},[92,87056,87057],{"class":161},"    \u002F\u002F 测试一下 点击 删除按钮\n",[92,87059,87060,87062,87064,87066,87069,87071,87073,87075,87077,87079,87081],{"class":94,"line":32681},[92,87061,52387],{"class":102},[92,87063,54379],{"class":1942},[92,87065,103],{"class":102},[92,87067,87068],{"class":207},"'#delete'",[92,87070,30807],{"class":102},[92,87072,57793],{"class":1942},[92,87074,103],{"class":102},[92,87076,57798],{"class":207},[92,87078,87010],{"class":102},[92,87080,84702],{"class":98},[92,87082,15552],{"class":102},[92,87084,87085],{"class":94,"line":32692},[92,87086,87087],{"class":161},"      \u002F\u002F 先调用Model构造函数\n",[92,87089,87090,87092,87095,87097,87099,87101,87103,87106,87108,87111],{"class":94,"line":32698},[92,87091,58208],{"class":98},[92,87093,87094],{"class":151}," del",[92,87096,13544],{"class":98},[92,87098,11558],{"class":98},[92,87100,86751],{"class":1942},[92,87102,103],{"class":102},[92,87104,87105],{"class":207},"'温馨的提示'",[92,87107,12415],{"class":102},[92,87109,87110],{"class":207},"'您没有删除权限操作'",[92,87112,109],{"class":102},[92,87114,87115],{"class":94,"line":32704},[92,87116,87117],{"class":161},"      \u002F\u002F 实例对象调用open方法\n",[92,87119,87120,87123,87125],{"class":94,"line":32710},[92,87121,87122],{"class":102},"      del.",[92,87124,86895],{"class":1942},[92,87126,1955],{"class":102},[92,87128,87129],{"class":94,"line":32716},[92,87130,33442],{"class":102},[92,87132,87133],{"class":94,"line":32722},[92,87134,87135],{"class":161},"    \u002F\u002F 测试一下 点击 登录按钮\n",[92,87137,87138,87140,87142,87144,87147,87149,87151,87153,87155,87157,87159],{"class":94,"line":32728},[92,87139,52387],{"class":102},[92,87141,54379],{"class":1942},[92,87143,103],{"class":102},[92,87145,87146],{"class":207},"'#login'",[92,87148,30807],{"class":102},[92,87150,57793],{"class":1942},[92,87152,103],{"class":102},[92,87154,57798],{"class":207},[92,87156,87010],{"class":102},[92,87158,84702],{"class":98},[92,87160,15552],{"class":102},[92,87162,87163],{"class":94,"line":32734},[92,87164,87087],{"class":161},[92,87166,87167,87169,87172,87174,87176,87178,87180,87183,87185,87188],{"class":94,"line":32754},[92,87168,58208],{"class":98},[92,87170,87171],{"class":151}," log",[92,87173,13544],{"class":98},[92,87175,11558],{"class":98},[92,87177,86751],{"class":1942},[92,87179,103],{"class":102},[92,87181,87182],{"class":207},"'友情提示'",[92,87184,12415],{"class":102},[92,87186,87187],{"class":207},"'您还没有登录呢'",[92,87189,109],{"class":102},[92,87191,87192],{"class":94,"line":32760},[92,87193,87117],{"class":161},[92,87195,87196,87199,87201],{"class":94,"line":32776},[92,87197,87198],{"class":102},"      log.",[92,87200,86895],{"class":1942},[92,87202,1955],{"class":102},[92,87204,87205],{"class":94,"line":32782},[92,87206,33442],{"class":102},[92,87208,87209],{"class":94,"line":32796},[92,87210,87211],{"class":161},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[92,87213,87214,87216,87218,87220,87222,87224,87226,87228],{"class":94,"line":32802},[92,87215,86886],{"class":151},[92,87217,661],{"class":102},[92,87219,85559],{"class":151},[92,87221,661],{"class":102},[92,87223,87038],{"class":1942},[92,87225,13544],{"class":98},[92,87227,58898],{"class":98},[92,87229,54432],{"class":102},[92,87231,87232,87234,87236,87238],{"class":94,"line":32817},[92,87233,70031],{"class":151},[92,87235,86992],{"class":102},[92,87237,56986],{"class":1942},[92,87239,1955],{"class":102},[92,87241,87242],{"class":94,"line":32823},[92,87243,2166],{"class":102},[92,87245,87246,87248,87250],{"class":94,"line":32832},[92,87247,52397],{"class":102},[92,87249,51793],{"class":51280},[92,87251,51287],{"class":102},[92,87253,87254,87256,87258],{"class":94,"line":32838},[92,87255,51765],{"class":102},[92,87257,51780],{"class":51280},[92,87259,51287],{"class":102},[92,87261,87262],{"class":94,"line":32847},[92,87263,2379],{"emptyLinePlaceholder":17},[92,87265,87266,87268,87270],{"class":94,"line":32853},[92,87267,51765],{"class":102},[92,87269,50615],{"class":51280},[92,87271,51287],{"class":102},[38,87273,87274],{},[1441,87275],{"alt":10,"src":87276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[33,87278,87280],{"id":87279},"_414-深浅拷贝","4.14 深浅拷贝",[63,87282,87284],{"id":87283},"_4141-浅拷贝","4.14.1 浅拷贝",[38,87286,87287],{},[1441,87288],{"alt":10,"src":87289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[38,87291,87292],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[38,87294,87295],{},[1441,87296],{"alt":10,"src":87297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[38,87299,87300],{},[1441,87301],{"alt":10,"src":87302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[38,87304,87305],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[38,87307,87308],{},[1441,87309],{"alt":10,"src":87310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[38,87312,11312],{},[38,87314,87315],{},[1441,87316],{"alt":10,"src":87317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[63,87319,87321],{"id":87320},"_4142-深拷贝","4.14.2 深拷贝",[38,87323,87324],{},"深拷贝：拷贝的是对象，不是地址",[38,87326,87327],{},"常用的三种方法：",[46,87329,87330,87333,87336],{},[49,87331,87332],{},"通过递归实现深拷贝",[49,87334,87335],{},"lodash\u002FcloneDeep",[49,87337,87338],{},"通过JSON.stringify()实现",[21978,87340,87342],{"id":87341},"_41421-递归函数","4.14.2.1 递归函数",[38,87344,87345],{},[1441,87346],{"alt":10,"src":87347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[46,87349,87350],{},[49,87351,87352],{},"死递归占溢出：",[83,87354,87356],{"className":53047,"code":87355,"language":53049,"meta":10,"style":10},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[89,87357,87358,87366,87374,87378,87383,87387,87392,87400],{"__ignoreMap":10},[92,87359,87360,87362,87364],{"class":94,"line":95},[92,87361,1013],{"class":102},[92,87363,51780],{"class":51280},[92,87365,51287],{"class":102},[92,87367,87368,87370,87372],{"class":94,"line":11},[92,87369,52124],{"class":102},[92,87371,51793],{"class":51280},[92,87373,51287],{"class":102},[92,87375,87376],{"class":94,"line":1158},[92,87377,77123],{"class":102},[92,87379,87380],{"class":94,"line":1173},[92,87381,87382],{"class":102},"      fn()\n",[92,87384,87385],{"class":94,"line":1179},[92,87386,2166],{"class":102},[92,87388,87389],{"class":94,"line":1193},[92,87390,87391],{"class":102},"    fn()\n",[92,87393,87394,87396,87398],{"class":94,"line":1199},[92,87395,52397],{"class":102},[92,87397,51793],{"class":51280},[92,87399,51287],{"class":102},[92,87401,87402,87404,87406],{"class":94,"line":1290},[92,87403,51765],{"class":102},[92,87405,51780],{"class":51280},[92,87407,51287],{"class":102},[46,87409,87410],{"start":11},[49,87411,87412],{},"递归函数要加判断条件：",[38,87414,87415],{},[1441,87416],{"alt":10,"src":87417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[46,87419,87420],{"start":1158},[49,87421,87422],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[83,87424,87426],{"className":50613,"code":87425,"language":50615,"meta":10,"style":10},"\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",[89,87427,87428,87438,87452,87456,87464,87478,87498,87510,87518,87522,87530,87542,87550,87558,87583,87595,87599,87606,87614,87622,87626],{"__ignoreMap":10},[92,87429,87430,87432,87434,87436],{"class":94,"line":95},[92,87431,51277],{"class":102},[92,87433,51281],{"class":51280},[92,87435,51284],{"class":1942},[92,87437,51287],{"class":102},[92,87439,87440,87442,87444,87446,87448,87450],{"class":94,"line":11},[92,87441,1013],{"class":102},[92,87443,50615],{"class":51280},[92,87445,51296],{"class":1942},[92,87447,148],{"class":102},[92,87449,51301],{"class":207},[92,87451,51287],{"class":102},[92,87453,87454],{"class":94,"line":1158},[92,87455,2379],{"emptyLinePlaceholder":17},[92,87457,87458,87460,87462],{"class":94,"line":1173},[92,87459,1013],{"class":102},[92,87461,51314],{"class":51280},[92,87463,51287],{"class":102},[92,87465,87466,87468,87470,87472,87474,87476],{"class":94,"line":1179},[92,87467,52124],{"class":102},[92,87469,51324],{"class":51280},[92,87471,51327],{"class":1942},[92,87473,148],{"class":102},[92,87475,51332],{"class":207},[92,87477,51287],{"class":102},[92,87479,87480,87482,87484,87486,87488,87490,87492,87494,87496],{"class":94,"line":1193},[92,87481,52124],{"class":102},[92,87483,51324],{"class":51280},[92,87485,14900],{"class":1942},[92,87487,148],{"class":102},[92,87489,51371],{"class":207},[92,87491,51351],{"class":1942},[92,87493,148],{"class":102},[92,87495,51378],{"class":207},[92,87497,51287],{"class":102},[92,87499,87500,87502,87504,87506,87508],{"class":94,"line":1199},[92,87501,52124],{"class":102},[92,87503,51387],{"class":51280},[92,87505,51390],{"class":102},[92,87507,51387],{"class":51280},[92,87509,51287],{"class":102},[92,87511,87512,87514,87516],{"class":94,"line":1290},[92,87513,51765],{"class":102},[92,87515,51314],{"class":51280},[92,87517,51287],{"class":102},[92,87519,87520],{"class":94,"line":1296},[92,87521,2379],{"emptyLinePlaceholder":17},[92,87523,87524,87526,87528],{"class":94,"line":1308},[92,87525,1013],{"class":102},[92,87527,51780],{"class":51280},[92,87529,51287],{"class":102},[92,87531,87532,87534,87536,87538,87540],{"class":94,"line":1591},[92,87533,52124],{"class":102},[92,87535,51591],{"class":51280},[92,87537,55294],{"class":102},[92,87539,51591],{"class":51280},[92,87541,51287],{"class":102},[92,87543,87544,87546,87548],{"class":94,"line":1596},[92,87545,52124],{"class":102},[92,87547,51793],{"class":51280},[92,87549,51287],{"class":102},[92,87551,87552,87554,87556],{"class":94,"line":1602},[92,87553,70064],{"class":98},[92,87555,73753],{"class":1942},[92,87557,10833],{"class":102},[92,87559,87560,87562,87564,87566,87568,87570,87572,87574,87576,87578,87581],{"class":94,"line":1607},[92,87561,55751],{"class":102},[92,87563,54379],{"class":1942},[92,87565,103],{"class":102},[92,87567,81911],{"class":207},[92,87569,74229],{"class":102},[92,87571,148],{"class":98},[92,87573,11558],{"class":98},[92,87575,73769],{"class":1942},[92,87577,17241],{"class":102},[92,87579,87580],{"class":1942},"toLocaleString",[92,87582,1955],{"class":102},[92,87584,87585,87588,87591,87593],{"class":94,"line":1621},[92,87586,87587],{"class":1942},"      setTimeout",[92,87589,87590],{"class":102},"(getTime, ",[92,87592,6390],{"class":151},[92,87594,109],{"class":102},[92,87596,87597],{"class":94,"line":1626},[92,87598,2166],{"class":102},[92,87600,87601,87604],{"class":94,"line":1632},[92,87602,87603],{"class":1942},"    getTime",[92,87605,1955],{"class":102},[92,87607,87608,87610,87612],{"class":94,"line":1653},[92,87609,52397],{"class":102},[92,87611,51793],{"class":51280},[92,87613,51287],{"class":102},[92,87615,87616,87618,87620],{"class":94,"line":1658},[92,87617,51765],{"class":102},[92,87619,51780],{"class":51280},[92,87621,51287],{"class":102},[92,87623,87624],{"class":94,"line":1672},[92,87625,2379],{"emptyLinePlaceholder":17},[92,87627,87628,87630,87632],{"class":94,"line":1677},[92,87629,51765],{"class":102},[92,87631,50615],{"class":51280},[92,87633,51287],{"class":102},[38,87635,87636],{},[1441,87637],{"alt":10,"src":87638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[46,87640,87641],{"start":1173},[49,87642,87332],{},[38,87644,87645],{},[1441,87646],{"alt":10,"src":87647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[38,87649,87650],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[38,87652,39170],{},[38,87654,87655],{},"这个是简易版的递归函数深拷贝",[38,87657,87658],{},"一定要注意先数组再对象，因为万物皆可对象",[83,87660,87662],{"className":50613,"code":87661,"language":50615,"meta":10,"style":10},"\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",[89,87663,87664,87674,87688,87692,87700,87714,87734,87746,87754,87758,87766,87774,87784,87793,87801,87817,87821,87829,87833,87837,87849,87854,87873,87889,87894,87899,87904,87919,87924,87929,87938,87946,87963,87971,87977,87985,87990,87995,88004,88008,88012,88016,88027,88036,88046,88060,88070,88078,88086,88094,88098],{"__ignoreMap":10},[92,87665,87666,87668,87670,87672],{"class":94,"line":95},[92,87667,51277],{"class":102},[92,87669,51281],{"class":51280},[92,87671,51284],{"class":1942},[92,87673,51287],{"class":102},[92,87675,87676,87678,87680,87682,87684,87686],{"class":94,"line":11},[92,87677,1013],{"class":102},[92,87679,50615],{"class":51280},[92,87681,51296],{"class":1942},[92,87683,148],{"class":102},[92,87685,51301],{"class":207},[92,87687,51287],{"class":102},[92,87689,87690],{"class":94,"line":1158},[92,87691,2379],{"emptyLinePlaceholder":17},[92,87693,87694,87696,87698],{"class":94,"line":1173},[92,87695,1013],{"class":102},[92,87697,51314],{"class":51280},[92,87699,51287],{"class":102},[92,87701,87702,87704,87706,87708,87710,87712],{"class":94,"line":1179},[92,87703,52124],{"class":102},[92,87705,51324],{"class":51280},[92,87707,51327],{"class":1942},[92,87709,148],{"class":102},[92,87711,51332],{"class":207},[92,87713,51287],{"class":102},[92,87715,87716,87718,87720,87722,87724,87726,87728,87730,87732],{"class":94,"line":1193},[92,87717,52124],{"class":102},[92,87719,51324],{"class":51280},[92,87721,14900],{"class":1942},[92,87723,148],{"class":102},[92,87725,51371],{"class":207},[92,87727,51351],{"class":1942},[92,87729,148],{"class":102},[92,87731,51378],{"class":207},[92,87733,51287],{"class":102},[92,87735,87736,87738,87740,87742,87744],{"class":94,"line":1199},[92,87737,52124],{"class":102},[92,87739,51387],{"class":51280},[92,87741,51390],{"class":102},[92,87743,51387],{"class":51280},[92,87745,51287],{"class":102},[92,87747,87748,87750,87752],{"class":94,"line":1290},[92,87749,51765],{"class":102},[92,87751,51314],{"class":51280},[92,87753,51287],{"class":102},[92,87755,87756],{"class":94,"line":1296},[92,87757,2379],{"emptyLinePlaceholder":17},[92,87759,87760,87762,87764],{"class":94,"line":1308},[92,87761,1013],{"class":102},[92,87763,51780],{"class":51280},[92,87765,51287],{"class":102},[92,87767,87768,87770,87772],{"class":94,"line":1591},[92,87769,52124],{"class":102},[92,87771,51793],{"class":51280},[92,87773,51287],{"class":102},[92,87775,87776,87778,87780,87782],{"class":94,"line":1596},[92,87777,11201],{"class":98},[92,87779,69951],{"class":151},[92,87781,13544],{"class":98},[92,87783,15552],{"class":102},[92,87785,87786,87788,87791],{"class":94,"line":1602},[92,87787,71596],{"class":102},[92,87789,87790],{"class":207},"'pink'",[92,87792,31447],{"class":102},[92,87794,87795,87797,87799],{"class":94,"line":1607},[92,87796,71606],{"class":102},[92,87798,753],{"class":151},[92,87800,31447],{"class":102},[92,87802,87803,87806,87809,87811,87814],{"class":94,"line":1621},[92,87804,87805],{"class":102},"      hobby: [",[92,87807,87808],{"class":207},"'乒乓球'",[92,87810,12415],{"class":102},[92,87812,87813],{"class":207},"'足球'",[92,87815,87816],{"class":102},"],\n",[92,87818,87819],{"class":94,"line":1626},[92,87820,77852],{"class":102},[92,87822,87823,87826],{"class":94,"line":1632},[92,87824,87825],{"class":102},"        baby: ",[92,87827,87828],{"class":207},"'小pink'\n",[92,87830,87831],{"class":94,"line":1653},[92,87832,52378],{"class":102},[92,87834,87835],{"class":94,"line":1658},[92,87836,2166],{"class":102},[92,87838,87839,87841,87844,87846],{"class":94,"line":1672},[92,87840,11201],{"class":98},[92,87842,87843],{"class":151}," o",[92,87845,13544],{"class":98},[92,87847,87848],{"class":102}," {}\n",[92,87850,87851],{"class":94,"line":1677},[92,87852,87853],{"class":161},"    \u002F\u002F 拷贝函数\n",[92,87855,87856,87858,87861,87863,87866,87868,87871],{"class":94,"line":1706},[92,87857,70064],{"class":98},[92,87859,87860],{"class":1942}," deepCopy",[92,87862,103],{"class":102},[92,87864,87865],{"class":5196},"newObj",[92,87867,12415],{"class":102},[92,87869,87870],{"class":5196},"oldObj",[92,87872,12422],{"class":102},[92,87874,87875,87877,87879,87881,87884,87886],{"class":94,"line":1711},[92,87876,52264],{"class":98},[92,87878,1637],{"class":102},[92,87880,51827],{"class":98},[92,87882,87883],{"class":102}," k ",[92,87885,26024],{"class":98},[92,87887,87888],{"class":102}," oldObj) {\n",[92,87890,87891],{"class":94,"line":1728},[92,87892,87893],{"class":161},"        \u002F\u002F 处理数组的问题\n",[92,87895,87896],{"class":94,"line":1733},[92,87897,87898],{"class":161},"        \u002F\u002F 判断是否属于数组\n",[92,87900,87901],{"class":94,"line":1738},[92,87902,87903],{"class":161},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[92,87905,87906,87908,87911,87914,87917],{"class":94,"line":1743},[92,87907,2476],{"class":98},[92,87909,87910],{"class":102}," (oldObj[k] ",[92,87912,87913],{"class":98},"instanceof",[92,87915,87916],{"class":1942}," Array",[92,87918,12422],{"class":102},[92,87920,87921],{"class":94,"line":1757},[92,87922,87923],{"class":161},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[92,87925,87926],{"class":94,"line":1762},[92,87927,87928],{"class":161},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[92,87930,87931,87934,87936],{"class":94,"line":2556},[92,87932,87933],{"class":102},"          newObj[k] ",[92,87935,148],{"class":98},[92,87937,51818],{"class":102},[92,87939,87940,87943],{"class":94,"line":2570},[92,87941,87942],{"class":1942},"          deepCopy",[92,87944,87945],{"class":102},"(newObj[k], oldObj[k])\n",[92,87947,87948,87950,87952,87954,87956,87958,87961],{"class":94,"line":2578},[92,87949,80060],{"class":102},[92,87951,1680],{"class":98},[92,87953,1683],{"class":98},[92,87955,87910],{"class":102},[92,87957,87913],{"class":98},[92,87959,87960],{"class":1942}," Object",[92,87962,12422],{"class":102},[92,87964,87965,87967,87969],{"class":94,"line":2583},[92,87966,87933],{"class":102},[92,87968,148],{"class":98},[92,87970,87848],{"class":102},[92,87972,87973,87975],{"class":94,"line":2589},[92,87974,87942],{"class":1942},[92,87976,87945],{"class":102},[92,87978,87979,87981,87983],{"class":94,"line":2595},[92,87980,80060],{"class":102},[92,87982,1680],{"class":98},[92,87984,15552],{"class":102},[92,87986,87987],{"class":94,"line":2600},[92,87988,87989],{"class":161},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[92,87991,87992],{"class":94,"line":7928},[92,87993,87994],{"class":161},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[92,87996,87997,87999,88001],{"class":94,"line":7952},[92,87998,87933],{"class":102},[92,88000,148],{"class":98},[92,88002,88003],{"class":102}," oldObj[k]\n",[92,88005,88006],{"class":94,"line":7957},[92,88007,2508],{"class":102},[92,88009,88010],{"class":94,"line":7963},[92,88011,52378],{"class":102},[92,88013,88014],{"class":94,"line":7990},[92,88015,2166],{"class":102},[92,88017,88018,88021,88024],{"class":94,"line":7995},[92,88019,88020],{"class":1942},"    deepCopy",[92,88022,88023],{"class":102},"(o, obj) ",[92,88025,88026],{"class":161},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[92,88028,88029,88031,88033],{"class":94,"line":8001},[92,88030,73733],{"class":102},[92,88032,58227],{"class":1942},[92,88034,88035],{"class":102},"(o)\n",[92,88037,88038,88041,88043],{"class":94,"line":8013},[92,88039,88040],{"class":102},"    o.age ",[92,88042,148],{"class":98},[92,88044,88045],{"class":151}," 20\n",[92,88047,88048,88051,88053,88055,88057],{"class":94,"line":8025},[92,88049,88050],{"class":102},"    o.hobby[",[92,88052,294],{"class":151},[92,88054,4422],{"class":102},[92,88056,148],{"class":98},[92,88058,88059],{"class":207}," '篮球'\n",[92,88061,88062,88065,88067],{"class":94,"line":8037},[92,88063,88064],{"class":102},"    o.family ",[92,88066,148],{"class":98},[92,88068,88069],{"class":207}," '老pink'\n",[92,88071,88072,88074,88076],{"class":94,"line":9696},[92,88073,73733],{"class":102},[92,88075,58227],{"class":1942},[92,88077,70016],{"class":102},[92,88079,88080,88082,88084],{"class":94,"line":9721},[92,88081,52397],{"class":102},[92,88083,51793],{"class":51280},[92,88085,51287],{"class":102},[92,88087,88088,88090,88092],{"class":94,"line":9744},[92,88089,51765],{"class":102},[92,88091,51780],{"class":51280},[92,88093,51287],{"class":102},[92,88095,88096],{"class":94,"line":9768},[92,88097,2379],{"emptyLinePlaceholder":17},[92,88099,88100,88102,88104],{"class":94,"line":9773},[92,88101,51765],{"class":102},[92,88103,50615],{"class":51280},[92,88105,51287],{"class":102},[38,88107,88108],{},[1441,88109],{"alt":10,"src":88110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21978,88112,88114,88115],{"id":88113},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[252,88116,88117],{},"js库lodash里面cloneDeep内部实现了深拷贝",[38,88119,88120],{},[341,88121,88122],{"href":88122,"rel":88123},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23845],[38,88125,88126],{},"lodash里边的方法都要加上一个下划线_",[38,88128,88129],{},"_.cloneDeep()",[83,88131,88133],{"className":50613,"code":88132,"language":50615,"meta":10,"style":10},"\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",[89,88134,88135,88145,88159,88163,88171,88185,88205,88217,88225,88229,88237,88242,88261,88269,88279,88287,88295,88307,88311,88317,88321,88325,88341,88349,88358,88366,88374,88382,88386],{"__ignoreMap":10},[92,88136,88137,88139,88141,88143],{"class":94,"line":95},[92,88138,51277],{"class":102},[92,88140,51281],{"class":51280},[92,88142,51284],{"class":1942},[92,88144,51287],{"class":102},[92,88146,88147,88149,88151,88153,88155,88157],{"class":94,"line":11},[92,88148,1013],{"class":102},[92,88150,50615],{"class":51280},[92,88152,51296],{"class":1942},[92,88154,148],{"class":102},[92,88156,51301],{"class":207},[92,88158,51287],{"class":102},[92,88160,88161],{"class":94,"line":1158},[92,88162,2379],{"emptyLinePlaceholder":17},[92,88164,88165,88167,88169],{"class":94,"line":1173},[92,88166,1013],{"class":102},[92,88168,51314],{"class":51280},[92,88170,51287],{"class":102},[92,88172,88173,88175,88177,88179,88181,88183],{"class":94,"line":1179},[92,88174,52124],{"class":102},[92,88176,51324],{"class":51280},[92,88178,51327],{"class":1942},[92,88180,148],{"class":102},[92,88182,51332],{"class":207},[92,88184,51287],{"class":102},[92,88186,88187,88189,88191,88193,88195,88197,88199,88201,88203],{"class":94,"line":1193},[92,88188,52124],{"class":102},[92,88190,51324],{"class":51280},[92,88192,14900],{"class":1942},[92,88194,148],{"class":102},[92,88196,51371],{"class":207},[92,88198,51351],{"class":1942},[92,88200,148],{"class":102},[92,88202,51378],{"class":207},[92,88204,51287],{"class":102},[92,88206,88207,88209,88211,88213,88215],{"class":94,"line":1199},[92,88208,52124],{"class":102},[92,88210,51387],{"class":51280},[92,88212,51390],{"class":102},[92,88214,51387],{"class":51280},[92,88216,51287],{"class":102},[92,88218,88219,88221,88223],{"class":94,"line":1290},[92,88220,51765],{"class":102},[92,88222,51314],{"class":51280},[92,88224,51287],{"class":102},[92,88226,88227],{"class":94,"line":1296},[92,88228,2379],{"emptyLinePlaceholder":17},[92,88230,88231,88233,88235],{"class":94,"line":1308},[92,88232,1013],{"class":102},[92,88234,51780],{"class":51280},[92,88236,51287],{"class":102},[92,88238,88239],{"class":94,"line":1591},[92,88240,88241],{"class":161},"  \u003C!-- 先引用这个库 -->\n",[92,88243,88244,88246,88248,88250,88252,88255,88257,88259],{"class":94,"line":1596},[92,88245,52124],{"class":102},[92,88247,51793],{"class":51280},[92,88249,55219],{"class":1942},[92,88251,148],{"class":102},[92,88253,88254],{"class":207},"\"lodash.min.js\"",[92,88256,55294],{"class":102},[92,88258,51793],{"class":51280},[92,88260,51287],{"class":102},[92,88262,88263,88265,88267],{"class":94,"line":1602},[92,88264,52124],{"class":102},[92,88266,51793],{"class":51280},[92,88268,51287],{"class":102},[92,88270,88271,88273,88275,88277],{"class":94,"line":1607},[92,88272,11201],{"class":98},[92,88274,69951],{"class":151},[92,88276,13544],{"class":98},[92,88278,15552],{"class":102},[92,88280,88281,88283,88285],{"class":94,"line":1621},[92,88282,71596],{"class":102},[92,88284,87790],{"class":207},[92,88286,31447],{"class":102},[92,88288,88289,88291,88293],{"class":94,"line":1626},[92,88290,71606],{"class":102},[92,88292,753],{"class":151},[92,88294,31447],{"class":102},[92,88296,88297,88299,88301,88303,88305],{"class":94,"line":1632},[92,88298,87805],{"class":102},[92,88300,87808],{"class":207},[92,88302,12415],{"class":102},[92,88304,87813],{"class":207},[92,88306,87816],{"class":102},[92,88308,88309],{"class":94,"line":1653},[92,88310,77852],{"class":102},[92,88312,88313,88315],{"class":94,"line":1658},[92,88314,87825],{"class":102},[92,88316,87828],{"class":207},[92,88318,88319],{"class":94,"line":1672},[92,88320,52378],{"class":102},[92,88322,88323],{"class":94,"line":1677},[92,88324,2166],{"class":102},[92,88326,88327,88329,88331,88333,88336,88339],{"class":94,"line":1706},[92,88328,11201],{"class":98},[92,88330,87843],{"class":151},[92,88332,13544],{"class":98},[92,88334,88335],{"class":102}," _.",[92,88337,88338],{"class":1942},"cloneDeep",[92,88340,70016],{"class":102},[92,88342,88343,88345,88347],{"class":94,"line":1711},[92,88344,73733],{"class":102},[92,88346,58227],{"class":1942},[92,88348,88035],{"class":102},[92,88350,88351,88354,88356],{"class":94,"line":1728},[92,88352,88353],{"class":102},"    o.family.baby ",[92,88355,148],{"class":98},[92,88357,88069],{"class":207},[92,88359,88360,88362,88364],{"class":94,"line":1733},[92,88361,73733],{"class":102},[92,88363,58227],{"class":1942},[92,88365,70016],{"class":102},[92,88367,88368,88370,88372],{"class":94,"line":1738},[92,88369,52397],{"class":102},[92,88371,51793],{"class":51280},[92,88373,51287],{"class":102},[92,88375,88376,88378,88380],{"class":94,"line":1743},[92,88377,51765],{"class":102},[92,88379,51780],{"class":51280},[92,88381,51287],{"class":102},[92,88383,88384],{"class":94,"line":1757},[92,88385,2379],{"emptyLinePlaceholder":17},[92,88387,88388,88390,88392],{"class":94,"line":1762},[92,88389,51765],{"class":102},[92,88391,50615],{"class":51280},[92,88393,51287],{"class":102},[38,88395,88396],{},[1441,88397],{"alt":10,"src":88398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21978,88400,88402],{"id":88401},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[83,88404,88406],{"className":50613,"code":88405,"language":50615,"meta":10,"style":10},"\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",[89,88407,88408,88418,88432,88436,88444,88458,88478,88490,88498,88502,88510,88518,88528,88536,88544,88556,88560,88566,88570,88574,88579,88584,88589,88615,88623,88632,88640,88648,88656,88660],{"__ignoreMap":10},[92,88409,88410,88412,88414,88416],{"class":94,"line":95},[92,88411,51277],{"class":102},[92,88413,51281],{"class":51280},[92,88415,51284],{"class":1942},[92,88417,51287],{"class":102},[92,88419,88420,88422,88424,88426,88428,88430],{"class":94,"line":11},[92,88421,1013],{"class":102},[92,88423,50615],{"class":51280},[92,88425,51296],{"class":1942},[92,88427,148],{"class":102},[92,88429,51301],{"class":207},[92,88431,51287],{"class":102},[92,88433,88434],{"class":94,"line":1158},[92,88435,2379],{"emptyLinePlaceholder":17},[92,88437,88438,88440,88442],{"class":94,"line":1173},[92,88439,1013],{"class":102},[92,88441,51314],{"class":51280},[92,88443,51287],{"class":102},[92,88445,88446,88448,88450,88452,88454,88456],{"class":94,"line":1179},[92,88447,52124],{"class":102},[92,88449,51324],{"class":51280},[92,88451,51327],{"class":1942},[92,88453,148],{"class":102},[92,88455,51332],{"class":207},[92,88457,51287],{"class":102},[92,88459,88460,88462,88464,88466,88468,88470,88472,88474,88476],{"class":94,"line":1193},[92,88461,52124],{"class":102},[92,88463,51324],{"class":51280},[92,88465,14900],{"class":1942},[92,88467,148],{"class":102},[92,88469,51371],{"class":207},[92,88471,51351],{"class":1942},[92,88473,148],{"class":102},[92,88475,51378],{"class":207},[92,88477,51287],{"class":102},[92,88479,88480,88482,88484,88486,88488],{"class":94,"line":1199},[92,88481,52124],{"class":102},[92,88483,51387],{"class":51280},[92,88485,51390],{"class":102},[92,88487,51387],{"class":51280},[92,88489,51287],{"class":102},[92,88491,88492,88494,88496],{"class":94,"line":1290},[92,88493,51765],{"class":102},[92,88495,51314],{"class":51280},[92,88497,51287],{"class":102},[92,88499,88500],{"class":94,"line":1296},[92,88501,2379],{"emptyLinePlaceholder":17},[92,88503,88504,88506,88508],{"class":94,"line":1308},[92,88505,1013],{"class":102},[92,88507,51780],{"class":51280},[92,88509,51287],{"class":102},[92,88511,88512,88514,88516],{"class":94,"line":1591},[92,88513,52124],{"class":102},[92,88515,51793],{"class":51280},[92,88517,51287],{"class":102},[92,88519,88520,88522,88524,88526],{"class":94,"line":1596},[92,88521,11201],{"class":98},[92,88523,69951],{"class":151},[92,88525,13544],{"class":98},[92,88527,15552],{"class":102},[92,88529,88530,88532,88534],{"class":94,"line":1602},[92,88531,71596],{"class":102},[92,88533,87790],{"class":207},[92,88535,31447],{"class":102},[92,88537,88538,88540,88542],{"class":94,"line":1607},[92,88539,71606],{"class":102},[92,88541,753],{"class":151},[92,88543,31447],{"class":102},[92,88545,88546,88548,88550,88552,88554],{"class":94,"line":1621},[92,88547,87805],{"class":102},[92,88549,87808],{"class":207},[92,88551,12415],{"class":102},[92,88553,87813],{"class":207},[92,88555,87816],{"class":102},[92,88557,88558],{"class":94,"line":1626},[92,88559,77852],{"class":102},[92,88561,88562,88564],{"class":94,"line":1632},[92,88563,87825],{"class":102},[92,88565,87828],{"class":207},[92,88567,88568],{"class":94,"line":1653},[92,88569,52378],{"class":102},[92,88571,88572],{"class":94,"line":1658},[92,88573,2166],{"class":102},[92,88575,88576],{"class":94,"line":1672},[92,88577,88578],{"class":161},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[92,88580,88581],{"class":94,"line":1677},[92,88582,88583],{"class":161},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[92,88585,88586],{"class":94,"line":1706},[92,88587,88588],{"class":161},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[92,88590,88591,88593,88595,88597,88600,88602,88605,88607,88609,88611,88613],{"class":94,"line":1711},[92,88592,11201],{"class":98},[92,88594,87843],{"class":151},[92,88596,13544],{"class":98},[92,88598,88599],{"class":151}," JSON",[92,88601,661],{"class":102},[92,88603,88604],{"class":1942},"parse",[92,88606,103],{"class":102},[92,88608,71644],{"class":151},[92,88610,661],{"class":102},[92,88612,71649],{"class":1942},[92,88614,71652],{"class":102},[92,88616,88617,88619,88621],{"class":94,"line":1728},[92,88618,73733],{"class":102},[92,88620,58227],{"class":1942},[92,88622,88035],{"class":102},[92,88624,88625,88627,88629],{"class":94,"line":1733},[92,88626,88353],{"class":102},[92,88628,148],{"class":98},[92,88630,88631],{"class":207}," '123'\n",[92,88633,88634,88636,88638],{"class":94,"line":1738},[92,88635,73733],{"class":102},[92,88637,58227],{"class":1942},[92,88639,70016],{"class":102},[92,88641,88642,88644,88646],{"class":94,"line":1743},[92,88643,52397],{"class":102},[92,88645,51793],{"class":51280},[92,88647,51287],{"class":102},[92,88649,88650,88652,88654],{"class":94,"line":1757},[92,88651,51765],{"class":102},[92,88653,51780],{"class":51280},[92,88655,51287],{"class":102},[92,88657,88658],{"class":94,"line":1762},[92,88659,2379],{"emptyLinePlaceholder":17},[92,88661,88662,88664,88666],{"class":94,"line":2556},[92,88663,51765],{"class":102},[92,88665,50615],{"class":51280},[92,88667,51287],{"class":102},[38,88669,88670],{},[1441,88671],{"alt":10,"src":88672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[33,88674,88676],{"id":88675},"_415-异常处理","4.15 异常处理",[46,88678,88679],{},[49,88680,88681],{},"throw抛异常",[38,88683,88684],{},[1441,88685],{"alt":10,"src":88686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[46,88688,88689],{"start":11},[49,88690,88691],{},"try\u002Fcatch 捕获错误信息",[38,88693,88694],{},[1441,88695],{"alt":10,"src":88696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[83,88698,88700],{"className":50613,"code":88699,"language":50615,"meta":10,"style":10},"\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",[89,88701,88702,88712,88726,88730,88738,88752,88772,88784,88792,88796,88804,88816,88824,88833,88840,88845,88864,88873,88884,88889,88899,88904,88909,88914,88931,88935,88940,88947,88959,88963,88975,88979,88983,88988,88993,89000,89008,89016,89020],{"__ignoreMap":10},[92,88703,88704,88706,88708,88710],{"class":94,"line":95},[92,88705,51277],{"class":102},[92,88707,51281],{"class":51280},[92,88709,51284],{"class":1942},[92,88711,51287],{"class":102},[92,88713,88714,88716,88718,88720,88722,88724],{"class":94,"line":11},[92,88715,1013],{"class":102},[92,88717,50615],{"class":51280},[92,88719,51296],{"class":1942},[92,88721,148],{"class":102},[92,88723,51301],{"class":207},[92,88725,51287],{"class":102},[92,88727,88728],{"class":94,"line":1158},[92,88729,2379],{"emptyLinePlaceholder":17},[92,88731,88732,88734,88736],{"class":94,"line":1173},[92,88733,1013],{"class":102},[92,88735,51314],{"class":51280},[92,88737,51287],{"class":102},[92,88739,88740,88742,88744,88746,88748,88750],{"class":94,"line":1179},[92,88741,52124],{"class":102},[92,88743,51324],{"class":51280},[92,88745,51327],{"class":1942},[92,88747,148],{"class":102},[92,88749,51332],{"class":207},[92,88751,51287],{"class":102},[92,88753,88754,88756,88758,88760,88762,88764,88766,88768,88770],{"class":94,"line":1193},[92,88755,52124],{"class":102},[92,88757,51324],{"class":51280},[92,88759,14900],{"class":1942},[92,88761,148],{"class":102},[92,88763,51371],{"class":207},[92,88765,51351],{"class":1942},[92,88767,148],{"class":102},[92,88769,51378],{"class":207},[92,88771,51287],{"class":102},[92,88773,88774,88776,88778,88780,88782],{"class":94,"line":1199},[92,88775,52124],{"class":102},[92,88777,51387],{"class":51280},[92,88779,51390],{"class":102},[92,88781,51387],{"class":51280},[92,88783,51287],{"class":102},[92,88785,88786,88788,88790],{"class":94,"line":1290},[92,88787,51765],{"class":102},[92,88789,51314],{"class":51280},[92,88791,51287],{"class":102},[92,88793,88794],{"class":94,"line":1296},[92,88795,2379],{"emptyLinePlaceholder":17},[92,88797,88798,88800,88802],{"class":94,"line":1308},[92,88799,1013],{"class":102},[92,88801,51780],{"class":51280},[92,88803,51287],{"class":102},[92,88805,88806,88808,88810,88812,88814],{"class":94,"line":1591},[92,88807,52124],{"class":102},[92,88809,38],{"class":51280},[92,88811,53474],{"class":102},[92,88813,38],{"class":51280},[92,88815,51287],{"class":102},[92,88817,88818,88820,88822],{"class":94,"line":1596},[92,88819,52124],{"class":102},[92,88821,51793],{"class":51280},[92,88823,51287],{"class":102},[92,88825,88826,88828,88831],{"class":94,"line":1602},[92,88827,70064],{"class":98},[92,88829,88830],{"class":1942}," fn",[92,88832,10833],{"class":102},[92,88834,88835,88838],{"class":94,"line":1607},[92,88836,88837],{"class":98},"      try",[92,88839,15552],{"class":102},[92,88841,88842],{"class":94,"line":1621},[92,88843,88844],{"class":161},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[92,88846,88847,88849,88851,88853,88855,88857,88859,88862],{"class":94,"line":1626},[92,88848,61250],{"class":98},[92,88850,6805],{"class":151},[92,88852,13544],{"class":98},[92,88854,54376],{"class":102},[92,88856,54379],{"class":1942},[92,88858,103],{"class":102},[92,88860,88861],{"class":207},"'.p'",[92,88863,109],{"class":102},[92,88865,88866,88869,88871],{"class":94,"line":1632},[92,88867,88868],{"class":102},"        p.style.color ",[92,88870,148],{"class":98},[92,88872,67031],{"class":207},[92,88874,88875,88878,88881],{"class":94,"line":1653},[92,88876,88877],{"class":102},"      } ",[92,88879,88880],{"class":98},"catch",[92,88882,88883],{"class":102}," (err) {\n",[92,88885,88886],{"class":94,"line":1658},[92,88887,88888],{"class":161},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[92,88890,88891,88894,88896],{"class":94,"line":1672},[92,88892,88893],{"class":102},"        console.",[92,88895,58227],{"class":1942},[92,88897,88898],{"class":102},"(err.message)\n",[92,88900,88901],{"class":94,"line":1677},[92,88902,88903],{"class":161},"        \u002F\u002F 想要中断程序，需要加return\n",[92,88905,88906],{"class":94,"line":1706},[92,88907,88908],{"class":161},"        \u002F\u002F return\n",[92,88910,88911],{"class":94,"line":1711},[92,88912,88913],{"class":161},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[92,88915,88916,88919,88921,88924,88926,88929],{"class":94,"line":1728},[92,88917,88918],{"class":98},"        throw",[92,88920,11558],{"class":98},[92,88922,88923],{"class":1942}," Error",[92,88925,103],{"class":102},[92,88927,88928],{"class":207},"'你看看，选择器错误了吧'",[92,88930,109],{"class":102},[92,88932,88933],{"class":94,"line":1733},[92,88934,52378],{"class":102},[92,88936,88937],{"class":94,"line":1738},[92,88938,88939],{"class":161},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[92,88941,88942,88945],{"class":94,"line":1743},[92,88943,88944],{"class":98},"      finally",[92,88946,15552],{"class":102},[92,88948,88949,88952,88954,88957],{"class":94,"line":1757},[92,88950,88951],{"class":1942},"        alert",[92,88953,103],{"class":102},[92,88955,88956],{"class":207},"'弹出对话框'",[92,88958,109],{"class":102},[92,88960,88961],{"class":94,"line":1762},[92,88962,52378],{"class":102},[92,88964,88965,88967,88969,88971,88973],{"class":94,"line":2556},[92,88966,58224],{"class":102},[92,88968,58227],{"class":1942},[92,88970,103],{"class":102},[92,88972,575],{"class":151},[92,88974,109],{"class":102},[92,88976,88977],{"class":94,"line":2570},[92,88978,2379],{"emptyLinePlaceholder":17},[92,88980,88981],{"class":94,"line":2578},[92,88982,2166],{"class":102},[92,88984,88985],{"class":94,"line":2583},[92,88986,88987],{"class":161},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[92,88989,88990],{"class":94,"line":2589},[92,88991,88992],{"class":161},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[92,88994,88995,88998],{"class":94,"line":2595},[92,88996,88997],{"class":1942},"    fn",[92,88999,1955],{"class":102},[92,89001,89002,89004,89006],{"class":94,"line":2600},[92,89003,52397],{"class":102},[92,89005,51793],{"class":51280},[92,89007,51287],{"class":102},[92,89009,89010,89012,89014],{"class":94,"line":7928},[92,89011,51765],{"class":102},[92,89013,51780],{"class":51280},[92,89015,51287],{"class":102},[92,89017,89018],{"class":94,"line":7952},[92,89019,2379],{"emptyLinePlaceholder":17},[92,89021,89022,89024,89026],{"class":94,"line":7957},[92,89023,51765],{"class":102},[92,89025,50615],{"class":51280},[92,89027,51287],{"class":102},[38,89029,89030],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[46,89032,89033],{"start":1158},[49,89034,89035],{},"debugger",[38,89037,89038],{},[1441,89039],{"alt":10,"src":89040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[38,89042,89043],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[33,89045,89047],{"id":89046},"_416-处理this","4.16 处理this",[63,89049,89051],{"id":89050},"_4161-this的指向","4.16.1 this的指向",[46,89053,89054],{},[49,89055,89056],{},"普通函数的this",[38,89058,89059],{},[1441,89060],{"alt":10,"src":89061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[46,89063,89064],{"start":11},[49,89065,89066],{},"箭头函数的this",[38,89068,89069],{},[1441,89070],{"alt":10,"src":89071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[38,89073,89074],{},[1441,89075],{"alt":10,"src":89076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[38,89078,89079],{},[1441,89080],{"alt":10,"src":89081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[63,89083,89085],{"id":89084},"_4162-this的改变","4.16.2 this的改变",[38,89087,89088],{},"call() apply() bind()",[46,89090,89091],{},[49,89092,89093],{},"call()",[38,89095,89096],{},[1441,89097],{"alt":10,"src":89098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[38,89100,89101],{},"两个作用：①调用函数；②改变this指向",[83,89103,89105],{"className":53047,"code":89104,"language":53049,"meta":10,"style":10},"\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",[89,89106,89107,89115,89123,89127,89132,89136,89141,89146,89151,89155,89160,89168],{"__ignoreMap":10},[92,89108,89109,89111,89113],{"class":94,"line":95},[92,89110,1013],{"class":102},[92,89112,51780],{"class":51280},[92,89114,51287],{"class":102},[92,89116,89117,89119,89121],{"class":94,"line":11},[92,89118,52124],{"class":102},[92,89120,51793],{"class":51280},[92,89122,51287],{"class":102},[92,89124,89125],{"class":94,"line":1158},[92,89126,71503],{"class":102},[92,89128,89129],{"class":94,"line":1173},[92,89130,89131],{"class":102},"      uname: 'pink'\n",[92,89133,89134],{"class":94,"line":1179},[92,89135,2166],{"class":102},[92,89137,89138],{"class":94,"line":1193},[92,89139,89140],{"class":102},"    function fn(x, y) {\n",[92,89142,89143],{"class":94,"line":1199},[92,89144,89145],{"class":102},"      console.log(this)  \u002F\u002Fwindow\n",[92,89147,89148],{"class":94,"line":1290},[92,89149,89150],{"class":102},"      console.log(x + y)\n",[92,89152,89153],{"class":94,"line":1296},[92,89154,2166],{"class":102},[92,89156,89157],{"class":94,"line":1308},[92,89158,89159],{"class":102},"    fn.call(obj, 1, 2)\n",[92,89161,89162,89164,89166],{"class":94,"line":1591},[92,89163,52397],{"class":102},[92,89165,51793],{"class":51280},[92,89167,51287],{"class":102},[92,89169,89170,89172,89174],{"class":94,"line":1596},[92,89171,51765],{"class":102},[92,89173,51780],{"class":51280},[92,89175,51287],{"class":102},[38,89177,89178],{},[1441,89179],{"alt":10,"src":89180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[46,89182,89183],{"start":11},[49,89184,89185],{},"apply()",[38,89187,89188],{},[1441,89189],{"alt":10,"src":89190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[38,89192,89101],{},[38,89194,89195],{},"call传递的是普通参数，而apply必须传递的是数组",[83,89197,89199],{"className":50613,"code":89198,"language":50615,"meta":10,"style":10},"\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",[89,89200,89201,89211,89225,89229,89237,89251,89271,89283,89291,89295,89303,89311,89321,89328,89332,89337,89353,89365,89379,89383,89388,89407,89412,89416,89421,89426,89434,89439,89461,89466,89482,89498,89510,89514,89519,89538,89546,89554,89558],{"__ignoreMap":10},[92,89202,89203,89205,89207,89209],{"class":94,"line":95},[92,89204,51277],{"class":102},[92,89206,51281],{"class":51280},[92,89208,51284],{"class":1942},[92,89210,51287],{"class":102},[92,89212,89213,89215,89217,89219,89221,89223],{"class":94,"line":11},[92,89214,1013],{"class":102},[92,89216,50615],{"class":51280},[92,89218,51296],{"class":1942},[92,89220,148],{"class":102},[92,89222,51301],{"class":207},[92,89224,51287],{"class":102},[92,89226,89227],{"class":94,"line":1158},[92,89228,2379],{"emptyLinePlaceholder":17},[92,89230,89231,89233,89235],{"class":94,"line":1173},[92,89232,1013],{"class":102},[92,89234,51314],{"class":51280},[92,89236,51287],{"class":102},[92,89238,89239,89241,89243,89245,89247,89249],{"class":94,"line":1179},[92,89240,52124],{"class":102},[92,89242,51324],{"class":51280},[92,89244,51327],{"class":1942},[92,89246,148],{"class":102},[92,89248,51332],{"class":207},[92,89250,51287],{"class":102},[92,89252,89253,89255,89257,89259,89261,89263,89265,89267,89269],{"class":94,"line":1193},[92,89254,52124],{"class":102},[92,89256,51324],{"class":51280},[92,89258,14900],{"class":1942},[92,89260,148],{"class":102},[92,89262,51371],{"class":207},[92,89264,51351],{"class":1942},[92,89266,148],{"class":102},[92,89268,51378],{"class":207},[92,89270,51287],{"class":102},[92,89272,89273,89275,89277,89279,89281],{"class":94,"line":1199},[92,89274,52124],{"class":102},[92,89276,51387],{"class":51280},[92,89278,51390],{"class":102},[92,89280,51387],{"class":51280},[92,89282,51287],{"class":102},[92,89284,89285,89287,89289],{"class":94,"line":1290},[92,89286,51765],{"class":102},[92,89288,51314],{"class":51280},[92,89290,51287],{"class":102},[92,89292,89293],{"class":94,"line":1296},[92,89294,2379],{"emptyLinePlaceholder":17},[92,89296,89297,89299,89301],{"class":94,"line":1308},[92,89298,1013],{"class":102},[92,89300,51780],{"class":51280},[92,89302,51287],{"class":102},[92,89304,89305,89307,89309],{"class":94,"line":1591},[92,89306,52124],{"class":102},[92,89308,51793],{"class":51280},[92,89310,51287],{"class":102},[92,89312,89313,89315,89317,89319],{"class":94,"line":1596},[92,89314,11201],{"class":98},[92,89316,69951],{"class":151},[92,89318,13544],{"class":98},[92,89320,15552],{"class":102},[92,89322,89323,89325],{"class":94,"line":1602},[92,89324,71606],{"class":102},[92,89326,89327],{"class":151},"18\n",[92,89329,89330],{"class":94,"line":1607},[92,89331,2166],{"class":102},[92,89333,89334],{"class":94,"line":1621},[92,89335,89336],{"class":161},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[92,89338,89339,89341,89343,89345,89347,89349,89351],{"class":94,"line":1626},[92,89340,70064],{"class":98},[92,89342,88830],{"class":1942},[92,89344,103],{"class":102},[92,89346,923],{"class":5196},[92,89348,12415],{"class":102},[92,89350,948],{"class":5196},[92,89352,12422],{"class":102},[92,89354,89355,89357,89359,89361,89363],{"class":94,"line":1632},[92,89356,58224],{"class":102},[92,89358,58227],{"class":1942},[92,89360,103],{"class":102},[92,89362,86973],{"class":151},[92,89364,109],{"class":102},[92,89366,89367,89369,89371,89374,89376],{"class":94,"line":1653},[92,89368,58224],{"class":102},[92,89370,58227],{"class":1942},[92,89372,89373],{"class":102},"(x ",[92,89375,584],{"class":98},[92,89377,89378],{"class":102}," y)\n",[92,89380,89381],{"class":94,"line":1658},[92,89382,2166],{"class":102},[92,89384,89385],{"class":94,"line":1672},[92,89386,89387],{"class":161},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[92,89389,89390,89393,89396,89399,89401,89403,89405],{"class":94,"line":1677},[92,89391,89392],{"class":102},"    fn.",[92,89394,89395],{"class":1942},"apply",[92,89397,89398],{"class":102},"(obj, [",[92,89400,320],{"class":151},[92,89402,12415],{"class":102},[92,89404,180],{"class":151},[92,89406,4636],{"class":102},[92,89408,89409],{"class":94,"line":1706},[92,89410,89411],{"class":161},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[92,89413,89414],{"class":94,"line":1711},[92,89415,2379],{"emptyLinePlaceholder":17},[92,89417,89418],{"class":94,"line":1728},[92,89419,89420],{"class":161},"    \u002F\u002F 使用场景：求数组最大值\n",[92,89422,89423],{"class":94,"line":1733},[92,89424,89425],{"class":161},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[92,89427,89428,89431],{"class":94,"line":1738},[92,89429,89430],{"class":161},"    \u002F\u002F console.log(max)",[92,89432,89433],{"class":161},"   \u002F\u002F3\n",[92,89435,89436],{"class":94,"line":1743},[92,89437,89438],{"class":161},"    \u002F\u002F 指向空或者Math都是可以的\n",[92,89440,89441,89443,89445,89447,89449,89451,89453,89455,89457,89459],{"class":94,"line":1757},[92,89442,11201],{"class":98},[92,89444,57675],{"class":151},[92,89446,13544],{"class":98},[92,89448,52206],{"class":102},[92,89450,414],{"class":151},[92,89452,12415],{"class":102},[92,89454,607],{"class":151},[92,89456,12415],{"class":102},[92,89458,638],{"class":151},[92,89460,33227],{"class":102},[92,89462,89463],{"class":94,"line":1762},[92,89464,89465],{"class":161},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[92,89467,89468,89470,89472,89474,89477,89479],{"class":94,"line":2556},[92,89469,11201],{"class":98},[92,89471,5931],{"class":151},[92,89473,13544],{"class":98},[92,89475,89476],{"class":102}," Math.max.",[92,89478,89395],{"class":1942},[92,89480,89481],{"class":102},"(Math, arr)\n",[92,89483,89484,89486,89489,89491,89494,89496],{"class":94,"line":2570},[92,89485,11201],{"class":98},[92,89487,89488],{"class":151}," min",[92,89490,13544],{"class":98},[92,89492,89493],{"class":102}," Math.min.",[92,89495,89395],{"class":1942},[92,89497,89481],{"class":102},[92,89499,89500,89502,89504,89507],{"class":94,"line":2578},[92,89501,73733],{"class":102},[92,89503,58227],{"class":1942},[92,89505,89506],{"class":102},"(max, min)     ",[92,89508,89509],{"class":161},"\u002F\u002F100,4\n",[92,89511,89512],{"class":94,"line":2583},[92,89513,2379],{"emptyLinePlaceholder":17},[92,89515,89516],{"class":94,"line":2589},[92,89517,89518],{"class":161},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[92,89520,89521,89523,89525,89528,89530,89532,89535],{"class":94,"line":2595},[92,89522,73733],{"class":102},[92,89524,58227],{"class":1942},[92,89526,89527],{"class":102},"(Max.",[92,89529,5995],{"class":1942},[92,89531,103],{"class":102},[92,89533,89534],{"class":98},"...",[92,89536,89537],{"class":102},"arr))\n",[92,89539,89540,89542,89544],{"class":94,"line":2600},[92,89541,52397],{"class":102},[92,89543,51793],{"class":51280},[92,89545,51287],{"class":102},[92,89547,89548,89550,89552],{"class":94,"line":7928},[92,89549,51765],{"class":102},[92,89551,51780],{"class":51280},[92,89553,51287],{"class":102},[92,89555,89556],{"class":94,"line":7952},[92,89557,2379],{"emptyLinePlaceholder":17},[92,89559,89560,89562,89564],{"class":94,"line":7957},[92,89561,51765],{"class":102},[92,89563,50615],{"class":51280},[92,89565,51287],{"class":102},[38,89567,89568],{},[1441,89569],{"alt":10,"src":89570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[46,89572,89573],{"start":1158},[49,89574,89575],{},"bind()",[38,89577,89578],{},[1441,89579],{"alt":10,"src":89580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[38,89582,89583],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[38,89585,89586],{},"bind的语法跟call很相似",[83,89588,89590],{"className":53047,"code":89589,"language":53049,"meta":10,"style":10},"\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",[89,89591,89592,89600,89608,89612,89617,89621,89625,89630,89634,89639,89644,89649,89654,89659,89664,89669,89673,89681],{"__ignoreMap":10},[92,89593,89594,89596,89598],{"class":94,"line":95},[92,89595,1013],{"class":102},[92,89597,51780],{"class":51280},[92,89599,51287],{"class":102},[92,89601,89602,89604,89606],{"class":94,"line":11},[92,89603,52124],{"class":102},[92,89605,51793],{"class":51280},[92,89607,51287],{"class":102},[92,89609,89610],{"class":94,"line":1158},[92,89611,71503],{"class":102},[92,89613,89614],{"class":94,"line":1173},[92,89615,89616],{"class":102},"      age: 18\n",[92,89618,89619],{"class":94,"line":1179},[92,89620,2166],{"class":102},[92,89622,89623],{"class":94,"line":1193},[92,89624,77123],{"class":102},[92,89626,89627],{"class":94,"line":1199},[92,89628,89629],{"class":102},"      console.log(this)\n",[92,89631,89632],{"class":94,"line":1290},[92,89633,2166],{"class":102},[92,89635,89636],{"class":94,"line":1296},[92,89637,89638],{"class":102},"    \u002F\u002F 1.bind 不会调用函数\n",[92,89640,89641],{"class":94,"line":1308},[92,89642,89643],{"class":102},"    \u002F\u002F 2.bind能改变this的指向\n",[92,89645,89646],{"class":94,"line":1591},[92,89647,89648],{"class":102},"    fn.bind()\n",[92,89650,89651],{"class":94,"line":1596},[92,89652,89653],{"class":102},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[92,89655,89656],{"class":94,"line":1602},[92,89657,89658],{"class":102},"    const fun = fn.bind(obj)\n",[92,89660,89661],{"class":94,"line":1607},[92,89662,89663],{"class":102},"    \u002F\u002F console.log(fun)\n",[92,89665,89666],{"class":94,"line":1621},[92,89667,89668],{"class":102},"    \u002F\u002F 调用,查看this的指向\n",[92,89670,89671],{"class":94,"line":1626},[92,89672,52631],{"class":102},[92,89674,89675,89677,89679],{"class":94,"line":1632},[92,89676,52397],{"class":102},[92,89678,51793],{"class":51280},[92,89680,51287],{"class":102},[92,89682,89683,89685,89687],{"class":94,"line":1653},[92,89684,51765],{"class":102},[92,89686,51780],{"class":51280},[92,89688,51287],{"class":102},[38,89690,89691],{},[1441,89692],{"alt":10,"src":89693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[46,89695,89696],{"start":1173},[49,89697,89698],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[83,89700,89702],{"className":53047,"code":89701,"language":53049,"meta":10,"style":10},"\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",[89,89703,89704,89712,89725,89733,89738,89742,89747,89752,89757,89762,89767,89772,89777,89782,89786,89794],{"__ignoreMap":10},[92,89705,89706,89708,89710],{"class":94,"line":95},[92,89707,1013],{"class":102},[92,89709,51780],{"class":51280},[92,89711,51287],{"class":102},[92,89713,89714,89716,89718,89721,89723],{"class":94,"line":11},[92,89715,52124],{"class":102},[92,89717,53867],{"class":51280},[92,89719,89720],{"class":102},">禁用\u003C\u002F",[92,89722,53867],{"class":51280},[92,89724,51287],{"class":102},[92,89726,89727,89729,89731],{"class":94,"line":1158},[92,89728,52124],{"class":102},[92,89730,51793],{"class":51280},[92,89732,51287],{"class":102},[92,89734,89735],{"class":94,"line":1173},[92,89736,89737],{"class":102},"    const btn = document.querySelector('button')\n",[92,89739,89740],{"class":94,"line":1179},[92,89741,58996],{"class":102},[92,89743,89744],{"class":94,"line":1193},[92,89745,89746],{"class":102},"      this.disabled = true\n",[92,89748,89749],{"class":94,"line":1199},[92,89750,89751],{"class":102},"      \u002F\u002F 定时器是window进行调用的\n",[92,89753,89754],{"class":94,"line":1290},[92,89755,89756],{"class":102},"      setTimeout(function () {\n",[92,89758,89759],{"class":94,"line":1296},[92,89760,89761],{"class":102},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[92,89763,89764],{"class":94,"line":1308},[92,89765,89766],{"class":102},"        this.disabled = false\n",[92,89768,89769],{"class":94,"line":1591},[92,89770,89771],{"class":102},"      }.bind(this), 2000)\n",[92,89773,89774],{"class":94,"line":1596},[92,89775,89776],{"class":102},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[92,89778,89779],{"class":94,"line":1602},[92,89780,89781],{"class":102},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[92,89783,89784],{"class":94,"line":1607},[92,89785,33442],{"class":102},[92,89787,89788,89790,89792],{"class":94,"line":1621},[92,89789,52397],{"class":102},[92,89791,51793],{"class":51280},[92,89793,51287],{"class":102},[92,89795,89796,89798,89800],{"class":94,"line":1626},[92,89797,51765],{"class":102},[92,89799,51780],{"class":51280},[92,89801,51287],{"class":102},[46,89803,89804],{"start":1179},[49,89805,21933],{},[38,89807,89808],{},[1441,89809],{"alt":10,"src":89810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[33,89812,89814],{"id":89813},"_417-性能优化","4.17 性能优化",[63,89816,89818],{"id":89817},"_4171-防抖","4.17.1 防抖",[38,89820,89821],{},[1441,89822],{"alt":10,"src":89823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[38,89825,89826],{},[252,89827,89828],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[38,89830,89831],{},"防抖实现方式：",[1110,89833,89834],{},[49,89835,89836],{},"lodash 提供了防抖处理",[38,89838,89839],{},"_.debounce(func,[wait=0],[options={}])",[38,89841,89842],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[83,89844,89846],{"className":50613,"code":89845,"language":50615,"meta":10,"style":10},"\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",[89,89847,89848,89858,89872,89876,89884,89898,89918,89930,89938,89944,89954,89966,89978,89989,90001,90011,90021,90034,90038,90046,90054,90058,90066,90084,90102,90110,90129,90139,90148,90159,90164,90168,90173,90178,90183,90208,90216,90224,90228],{"__ignoreMap":10},[92,89849,89850,89852,89854,89856],{"class":94,"line":95},[92,89851,51277],{"class":102},[92,89853,51281],{"class":51280},[92,89855,51284],{"class":1942},[92,89857,51287],{"class":102},[92,89859,89860,89862,89864,89866,89868,89870],{"class":94,"line":11},[92,89861,1013],{"class":102},[92,89863,50615],{"class":51280},[92,89865,51296],{"class":1942},[92,89867,148],{"class":102},[92,89869,51301],{"class":207},[92,89871,51287],{"class":102},[92,89873,89874],{"class":94,"line":1158},[92,89875,2379],{"emptyLinePlaceholder":17},[92,89877,89878,89880,89882],{"class":94,"line":1173},[92,89879,1013],{"class":102},[92,89881,51314],{"class":51280},[92,89883,51287],{"class":102},[92,89885,89886,89888,89890,89892,89894,89896],{"class":94,"line":1179},[92,89887,52124],{"class":102},[92,89889,51324],{"class":51280},[92,89891,51327],{"class":1942},[92,89893,148],{"class":102},[92,89895,51332],{"class":207},[92,89897,51287],{"class":102},[92,89899,89900,89902,89904,89906,89908,89910,89912,89914,89916],{"class":94,"line":1193},[92,89901,52124],{"class":102},[92,89903,51324],{"class":51280},[92,89905,14900],{"class":1942},[92,89907,148],{"class":102},[92,89909,51371],{"class":207},[92,89911,51351],{"class":1942},[92,89913,148],{"class":102},[92,89915,51378],{"class":207},[92,89917,51287],{"class":102},[92,89919,89920,89922,89924,89926,89928],{"class":94,"line":1199},[92,89921,52124],{"class":102},[92,89923,51387],{"class":51280},[92,89925,51390],{"class":102},[92,89927,51387],{"class":51280},[92,89929,51287],{"class":102},[92,89931,89932,89934,89936],{"class":94,"line":1290},[92,89933,52124],{"class":102},[92,89935,5106],{"class":51280},[92,89937,51287],{"class":102},[92,89939,89940,89942],{"class":94,"line":1296},[92,89941,54732],{"class":1942},[92,89943,15552],{"class":102},[92,89945,89946,89948,89950,89952],{"class":94,"line":1308},[92,89947,72576],{"class":151},[92,89949,51417],{"class":102},[92,89951,60485],{"class":151},[92,89953,1269],{"class":102},[92,89955,89956,89958,89960,89962,89964],{"class":94,"line":1591},[92,89957,54751],{"class":151},[92,89959,51417],{"class":102},[92,89961,1701],{"class":151},[92,89963,51472],{"class":98},[92,89965,1269],{"class":102},[92,89967,89968,89970,89972,89974,89976],{"class":94,"line":1596},[92,89969,54765],{"class":151},[92,89971,51417],{"class":102},[92,89973,1701],{"class":151},[92,89975,51472],{"class":98},[92,89977,1269],{"class":102},[92,89979,89980,89982,89984,89987],{"class":94,"line":1602},[92,89981,54864],{"class":151},[92,89983,51417],{"class":102},[92,89985,89986],{"class":151},"gray",[92,89988,1269],{"class":102},[92,89990,89991,89993,89995,89997,89999],{"class":94,"line":1607},[92,89992,54902],{"class":151},[92,89994,51417],{"class":102},[92,89996,928],{"class":151},[92,89998,51472],{"class":98},[92,90000,1269],{"class":102},[92,90002,90003,90005,90007,90009],{"class":94,"line":1621},[92,90004,57396],{"class":151},[92,90006,51417],{"class":102},[92,90008,60822],{"class":151},[92,90010,1269],{"class":102},[92,90012,90013,90015,90017,90019],{"class":94,"line":1626},[92,90014,57266],{"class":151},[92,90016,51417],{"class":102},[92,90018,51572],{"class":151},[92,90020,1269],{"class":102},[92,90022,90023,90026,90028,90030,90032],{"class":94,"line":1632},[92,90024,90025],{"class":151},"      padding-top",[92,90027,51417],{"class":102},[92,90029,422],{"class":151},[92,90031,51472],{"class":98},[92,90033,1269],{"class":102},[92,90035,90036],{"class":94,"line":1653},[92,90037,2166],{"class":102},[92,90039,90040,90042,90044],{"class":94,"line":1658},[92,90041,52397],{"class":102},[92,90043,5106],{"class":51280},[92,90045,51287],{"class":102},[92,90047,90048,90050,90052],{"class":94,"line":1672},[92,90049,51765],{"class":102},[92,90051,51314],{"class":51280},[92,90053,51287],{"class":102},[92,90055,90056],{"class":94,"line":1677},[92,90057,2379],{"emptyLinePlaceholder":17},[92,90059,90060,90062,90064],{"class":94,"line":1706},[92,90061,1013],{"class":102},[92,90063,51780],{"class":51280},[92,90065,51287],{"class":102},[92,90067,90068,90070,90072,90074,90076,90078,90080,90082],{"class":94,"line":1711},[92,90069,52124],{"class":102},[92,90071,51591],{"class":51280},[92,90073,53466],{"class":1942},[92,90075,148],{"class":102},[92,90077,53471],{"class":207},[92,90079,55294],{"class":102},[92,90081,51591],{"class":51280},[92,90083,51287],{"class":102},[92,90085,90086,90088,90090,90092,90094,90096,90098,90100],{"class":94,"line":1728},[92,90087,52124],{"class":102},[92,90089,51793],{"class":51280},[92,90091,55219],{"class":1942},[92,90093,148],{"class":102},[92,90095,88254],{"class":207},[92,90097,55294],{"class":102},[92,90099,51793],{"class":51280},[92,90101,51287],{"class":102},[92,90103,90104,90106,90108],{"class":94,"line":1733},[92,90105,52124],{"class":102},[92,90107,51793],{"class":51280},[92,90109,51287],{"class":102},[92,90111,90112,90114,90116,90118,90120,90122,90124,90127],{"class":94,"line":1738},[92,90113,11201],{"class":98},[92,90115,86913],{"class":151},[92,90117,13544],{"class":98},[92,90119,54376],{"class":102},[92,90121,54379],{"class":1942},[92,90123,103],{"class":102},[92,90125,90126],{"class":207},"'.box'",[92,90128,109],{"class":102},[92,90130,90131,90133,90135,90137],{"class":94,"line":1743},[92,90132,52199],{"class":98},[92,90134,9418],{"class":102},[92,90136,148],{"class":98},[92,90138,47314],{"class":151},[92,90140,90141,90143,90146],{"class":94,"line":1757},[92,90142,70064],{"class":98},[92,90144,90145],{"class":1942}," mouseMove",[92,90147,10833],{"class":102},[92,90149,90150,90153,90155,90157],{"class":94,"line":1762},[92,90151,90152],{"class":102},"      box.innerHTML ",[92,90154,148],{"class":98},[92,90156,3011],{"class":102},[92,90158,2681],{"class":98},[92,90160,90161],{"class":94,"line":2556},[92,90162,90163],{"class":161},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[92,90165,90166],{"class":94,"line":2570},[92,90167,2166],{"class":102},[92,90169,90170],{"class":94,"line":2578},[92,90171,90172],{"class":161},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[92,90174,90175],{"class":94,"line":2583},[92,90176,90177],{"class":161},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[92,90179,90180],{"class":94,"line":2589},[92,90181,90182],{"class":161},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[92,90184,90185,90188,90190,90192,90195,90198,90201,90204,90206],{"class":94,"line":2595},[92,90186,90187],{"class":102},"    box.",[92,90189,57793],{"class":1942},[92,90191,103],{"class":102},[92,90193,90194],{"class":207},"'mousemove'",[92,90196,90197],{"class":102},", _.",[92,90199,90200],{"class":1942},"debounce",[92,90202,90203],{"class":102},"(mouseMove, ",[92,90205,65054],{"class":151},[92,90207,30478],{"class":102},[92,90209,90210,90212,90214],{"class":94,"line":2600},[92,90211,52397],{"class":102},[92,90213,51793],{"class":51280},[92,90215,51287],{"class":102},[92,90217,90218,90220,90222],{"class":94,"line":7928},[92,90219,51765],{"class":102},[92,90221,51780],{"class":51280},[92,90223,51287],{"class":102},[92,90225,90226],{"class":94,"line":7952},[92,90227,2379],{"emptyLinePlaceholder":17},[92,90229,90230,90232,90234],{"class":94,"line":7957},[92,90231,51765],{"class":102},[92,90233,50615],{"class":51280},[92,90235,51287],{"class":102},[1110,90237,90238],{},[49,90239,90240],{},"手写一个防抖函数来处理",[38,90242,90243],{},"防抖的核心就是利用定时器来实现的：",[38,90245,90246],{},"①声明一个定时器变量",[38,90248,90249],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[38,90251,90252],{},"③如果没有定时器则开启定时器，记得存到变量里面",[83,90254,90256],{"className":50613,"code":90255,"language":50615,"meta":10,"style":10},"\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",[89,90257,90258,90268,90282,90286,90294,90308,90328,90340,90348,90354,90364,90376,90388,90398,90410,90420,90430,90442,90446,90454,90462,90466,90474,90492,90510,90518,90536,90546,90554,90564,90568,90572,90576,90581,90586,90591,90596,90601,90606,90624,90631,90636,90644,90649,90662,90678,90688,90693,90697,90701,90721,90725,90730,90735,90740,90745,90753,90761,90765],{"__ignoreMap":10},[92,90259,90260,90262,90264,90266],{"class":94,"line":95},[92,90261,51277],{"class":102},[92,90263,51281],{"class":51280},[92,90265,51284],{"class":1942},[92,90267,51287],{"class":102},[92,90269,90270,90272,90274,90276,90278,90280],{"class":94,"line":11},[92,90271,1013],{"class":102},[92,90273,50615],{"class":51280},[92,90275,51296],{"class":1942},[92,90277,148],{"class":102},[92,90279,51301],{"class":207},[92,90281,51287],{"class":102},[92,90283,90284],{"class":94,"line":1158},[92,90285,2379],{"emptyLinePlaceholder":17},[92,90287,90288,90290,90292],{"class":94,"line":1173},[92,90289,1013],{"class":102},[92,90291,51314],{"class":51280},[92,90293,51287],{"class":102},[92,90295,90296,90298,90300,90302,90304,90306],{"class":94,"line":1179},[92,90297,52124],{"class":102},[92,90299,51324],{"class":51280},[92,90301,51327],{"class":1942},[92,90303,148],{"class":102},[92,90305,51332],{"class":207},[92,90307,51287],{"class":102},[92,90309,90310,90312,90314,90316,90318,90320,90322,90324,90326],{"class":94,"line":1193},[92,90311,52124],{"class":102},[92,90313,51324],{"class":51280},[92,90315,14900],{"class":1942},[92,90317,148],{"class":102},[92,90319,51371],{"class":207},[92,90321,51351],{"class":1942},[92,90323,148],{"class":102},[92,90325,51378],{"class":207},[92,90327,51287],{"class":102},[92,90329,90330,90332,90334,90336,90338],{"class":94,"line":1199},[92,90331,52124],{"class":102},[92,90333,51387],{"class":51280},[92,90335,51390],{"class":102},[92,90337,51387],{"class":51280},[92,90339,51287],{"class":102},[92,90341,90342,90344,90346],{"class":94,"line":1290},[92,90343,52124],{"class":102},[92,90345,5106],{"class":51280},[92,90347,51287],{"class":102},[92,90349,90350,90352],{"class":94,"line":1296},[92,90351,54732],{"class":1942},[92,90353,15552],{"class":102},[92,90355,90356,90358,90360,90362],{"class":94,"line":1308},[92,90357,72576],{"class":151},[92,90359,51417],{"class":102},[92,90361,60485],{"class":151},[92,90363,1269],{"class":102},[92,90365,90366,90368,90370,90372,90374],{"class":94,"line":1591},[92,90367,54751],{"class":151},[92,90369,51417],{"class":102},[92,90371,1701],{"class":151},[92,90373,51472],{"class":98},[92,90375,1269],{"class":102},[92,90377,90378,90380,90382,90384,90386],{"class":94,"line":1596},[92,90379,54765],{"class":151},[92,90381,51417],{"class":102},[92,90383,1701],{"class":151},[92,90385,51472],{"class":98},[92,90387,1269],{"class":102},[92,90389,90390,90392,90394,90396],{"class":94,"line":1602},[92,90391,54864],{"class":151},[92,90393,51417],{"class":102},[92,90395,89986],{"class":151},[92,90397,1269],{"class":102},[92,90399,90400,90402,90404,90406,90408],{"class":94,"line":1607},[92,90401,54902],{"class":151},[92,90403,51417],{"class":102},[92,90405,928],{"class":151},[92,90407,51472],{"class":98},[92,90409,1269],{"class":102},[92,90411,90412,90414,90416,90418],{"class":94,"line":1621},[92,90413,57396],{"class":151},[92,90415,51417],{"class":102},[92,90417,60822],{"class":151},[92,90419,1269],{"class":102},[92,90421,90422,90424,90426,90428],{"class":94,"line":1626},[92,90423,57266],{"class":151},[92,90425,51417],{"class":102},[92,90427,51572],{"class":151},[92,90429,1269],{"class":102},[92,90431,90432,90434,90436,90438,90440],{"class":94,"line":1632},[92,90433,90025],{"class":151},[92,90435,51417],{"class":102},[92,90437,422],{"class":151},[92,90439,51472],{"class":98},[92,90441,1269],{"class":102},[92,90443,90444],{"class":94,"line":1653},[92,90445,2166],{"class":102},[92,90447,90448,90450,90452],{"class":94,"line":1658},[92,90449,52397],{"class":102},[92,90451,5106],{"class":51280},[92,90453,51287],{"class":102},[92,90455,90456,90458,90460],{"class":94,"line":1672},[92,90457,51765],{"class":102},[92,90459,51314],{"class":51280},[92,90461,51287],{"class":102},[92,90463,90464],{"class":94,"line":1677},[92,90465,2379],{"emptyLinePlaceholder":17},[92,90467,90468,90470,90472],{"class":94,"line":1706},[92,90469,1013],{"class":102},[92,90471,51780],{"class":51280},[92,90473,51287],{"class":102},[92,90475,90476,90478,90480,90482,90484,90486,90488,90490],{"class":94,"line":1711},[92,90477,52124],{"class":102},[92,90479,51591],{"class":51280},[92,90481,53466],{"class":1942},[92,90483,148],{"class":102},[92,90485,53471],{"class":207},[92,90487,55294],{"class":102},[92,90489,51591],{"class":51280},[92,90491,51287],{"class":102},[92,90493,90494,90496,90498,90500,90502,90504,90506,90508],{"class":94,"line":1728},[92,90495,52124],{"class":102},[92,90497,51793],{"class":51280},[92,90499,55219],{"class":1942},[92,90501,148],{"class":102},[92,90503,88254],{"class":207},[92,90505,55294],{"class":102},[92,90507,51793],{"class":51280},[92,90509,51287],{"class":102},[92,90511,90512,90514,90516],{"class":94,"line":1733},[92,90513,52124],{"class":102},[92,90515,51793],{"class":51280},[92,90517,51287],{"class":102},[92,90519,90520,90522,90524,90526,90528,90530,90532,90534],{"class":94,"line":1738},[92,90521,11201],{"class":98},[92,90523,86913],{"class":151},[92,90525,13544],{"class":98},[92,90527,54376],{"class":102},[92,90529,54379],{"class":1942},[92,90531,103],{"class":102},[92,90533,90126],{"class":207},[92,90535,109],{"class":102},[92,90537,90538,90540,90542,90544],{"class":94,"line":1743},[92,90539,52199],{"class":98},[92,90541,9418],{"class":102},[92,90543,148],{"class":98},[92,90545,47314],{"class":151},[92,90547,90548,90550,90552],{"class":94,"line":1757},[92,90549,70064],{"class":98},[92,90551,90145],{"class":1942},[92,90553,10833],{"class":102},[92,90555,90556,90558,90560,90562],{"class":94,"line":1762},[92,90557,90152],{"class":102},[92,90559,148],{"class":98},[92,90561,3011],{"class":102},[92,90563,2681],{"class":98},[92,90565,90566],{"class":94,"line":2556},[92,90567,90163],{"class":161},[92,90569,90570],{"class":94,"line":2570},[92,90571,2166],{"class":102},[92,90573,90574],{"class":94,"line":2578},[92,90575,90172],{"class":161},[92,90577,90578],{"class":94,"line":2583},[92,90579,90580],{"class":161},"    \u002F\u002F 手写防抖函数\n",[92,90582,90583],{"class":94,"line":2589},[92,90584,90585],{"class":161},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[92,90587,90588],{"class":94,"line":2595},[92,90589,90590],{"class":161},"    \u002F\u002F 1.声明定时器变量\n",[92,90592,90593],{"class":94,"line":2600},[92,90594,90595],{"class":161},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[92,90597,90598],{"class":94,"line":7928},[92,90599,90600],{"class":161},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[92,90602,90603],{"class":94,"line":7952},[92,90604,90605],{"class":161},"    \u002F\u002F 4.定时器里面写函数调用\n",[92,90607,90608,90610,90613,90615,90618,90620,90622],{"class":94,"line":7957},[92,90609,70064],{"class":98},[92,90611,90612],{"class":1942}," debounce",[92,90614,103],{"class":102},[92,90616,90617],{"class":5196},"fn",[92,90619,12415],{"class":102},[92,90621,823],{"class":5196},[92,90623,12422],{"class":102},[92,90625,90626,90628],{"class":94,"line":7963},[92,90627,79752],{"class":98},[92,90629,90630],{"class":102}," timer\n",[92,90632,90633],{"class":94,"line":7990},[92,90634,90635],{"class":161},"      \u002F\u002F return 返回一个匿名函数\n",[92,90637,90638,90640,90642],{"class":94,"line":7995},[92,90639,73962],{"class":98},[92,90641,58898],{"class":98},[92,90643,54432],{"class":102},[92,90645,90646],{"class":94,"line":8001},[92,90647,90648],{"class":161},"        \u002F\u002F 这里边写第二三四步\n",[92,90650,90651,90653,90656,90659],{"class":94,"line":8013},[92,90652,2476],{"class":98},[92,90654,90655],{"class":102}," (timer) ",[92,90657,90658],{"class":1942},"clearTimeout",[92,90660,90661],{"class":102},"(timer)\n",[92,90663,90664,90667,90669,90672,90674,90676],{"class":94,"line":8025},[92,90665,90666],{"class":102},"        timer ",[92,90668,148],{"class":98},[92,90670,90671],{"class":1942}," setTimeout",[92,90673,103],{"class":102},[92,90675,54429],{"class":98},[92,90677,54432],{"class":102},[92,90679,90680,90683,90685],{"class":94,"line":8037},[92,90681,90682],{"class":1942},"          fn",[92,90684,13030],{"class":102},[92,90686,90687],{"class":161},"\u002F\u002F加小括号调用fn }, t)\n",[92,90689,90690],{"class":94,"line":9696},[92,90691,90692],{"class":102},"        }, t)\n",[92,90694,90695],{"class":94,"line":9721},[92,90696,52378],{"class":102},[92,90698,90699],{"class":94,"line":9744},[92,90700,2166],{"class":102},[92,90702,90703,90705,90707,90709,90711,90713,90715,90717,90719],{"class":94,"line":9768},[92,90704,90187],{"class":102},[92,90706,57793],{"class":1942},[92,90708,103],{"class":102},[92,90710,90194],{"class":207},[92,90712,12415],{"class":102},[92,90714,90200],{"class":1942},[92,90716,90203],{"class":102},[92,90718,65054],{"class":151},[92,90720,30478],{"class":102},[92,90722,90723],{"class":94,"line":9773},[92,90724,2379],{"emptyLinePlaceholder":17},[92,90726,90727],{"class":94,"line":9778},[92,90728,90729],{"class":161},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[92,90731,90732],{"class":94,"line":9783},[92,90733,90734],{"class":161},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[92,90736,90737],{"class":94,"line":9792},[92,90738,90739],{"class":161},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[92,90741,90742],{"class":94,"line":9797},[92,90743,90744],{"class":161},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[92,90746,90747,90749,90751],{"class":94,"line":9803},[92,90748,52397],{"class":102},[92,90750,51793],{"class":51280},[92,90752,51287],{"class":102},[92,90754,90755,90757,90759],{"class":94,"line":9824},[92,90756,51765],{"class":102},[92,90758,51780],{"class":51280},[92,90760,51287],{"class":102},[92,90762,90763],{"class":94,"line":9830},[92,90764,2379],{"emptyLinePlaceholder":17},[92,90766,90767,90769,90771],{"class":94,"line":9844},[92,90768,51765],{"class":102},[92,90770,50615],{"class":51280},[92,90772,51287],{"class":102},[63,90774,90776],{"id":90775},"_4172-节流","4.17.2 节流",[38,90778,90779],{},[1441,90780],{"alt":10,"src":90781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[38,90783,90784],{},[1441,90785],{"alt":10,"src":90786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[38,90788,90789],{},[252,90790,90791],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[38,90793,90794],{},"实现方式：",[1110,90796,90797],{},[49,90798,90799],{},"lodash 提供的节流函数来处理",[38,90801,90802],{},"_.throttle(func,[wait=0],[options=])",[38,90804,90805],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[83,90807,90809],{"className":50613,"code":90808,"language":50615,"meta":10,"style":10},"\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",[89,90810,90811,90821,90835,90839,90847,90861,90881,90893,90901,90907,90917,90929,90941,90951,90963,90973,90983,90995,90999,91007,91015,91019,91027,91045,91063,91071,91089,91099,91107,91117,91121,91125,91129,91134,91139,91160,91168,91176,91180],{"__ignoreMap":10},[92,90812,90813,90815,90817,90819],{"class":94,"line":95},[92,90814,51277],{"class":102},[92,90816,51281],{"class":51280},[92,90818,51284],{"class":1942},[92,90820,51287],{"class":102},[92,90822,90823,90825,90827,90829,90831,90833],{"class":94,"line":11},[92,90824,1013],{"class":102},[92,90826,50615],{"class":51280},[92,90828,51296],{"class":1942},[92,90830,148],{"class":102},[92,90832,51301],{"class":207},[92,90834,51287],{"class":102},[92,90836,90837],{"class":94,"line":1158},[92,90838,2379],{"emptyLinePlaceholder":17},[92,90840,90841,90843,90845],{"class":94,"line":1173},[92,90842,1013],{"class":102},[92,90844,51314],{"class":51280},[92,90846,51287],{"class":102},[92,90848,90849,90851,90853,90855,90857,90859],{"class":94,"line":1179},[92,90850,52124],{"class":102},[92,90852,51324],{"class":51280},[92,90854,51327],{"class":1942},[92,90856,148],{"class":102},[92,90858,51332],{"class":207},[92,90860,51287],{"class":102},[92,90862,90863,90865,90867,90869,90871,90873,90875,90877,90879],{"class":94,"line":1193},[92,90864,52124],{"class":102},[92,90866,51324],{"class":51280},[92,90868,14900],{"class":1942},[92,90870,148],{"class":102},[92,90872,51371],{"class":207},[92,90874,51351],{"class":1942},[92,90876,148],{"class":102},[92,90878,51378],{"class":207},[92,90880,51287],{"class":102},[92,90882,90883,90885,90887,90889,90891],{"class":94,"line":1199},[92,90884,52124],{"class":102},[92,90886,51387],{"class":51280},[92,90888,51390],{"class":102},[92,90890,51387],{"class":51280},[92,90892,51287],{"class":102},[92,90894,90895,90897,90899],{"class":94,"line":1290},[92,90896,52124],{"class":102},[92,90898,5106],{"class":51280},[92,90900,51287],{"class":102},[92,90902,90903,90905],{"class":94,"line":1296},[92,90904,54732],{"class":1942},[92,90906,15552],{"class":102},[92,90908,90909,90911,90913,90915],{"class":94,"line":1308},[92,90910,72576],{"class":151},[92,90912,51417],{"class":102},[92,90914,60485],{"class":151},[92,90916,1269],{"class":102},[92,90918,90919,90921,90923,90925,90927],{"class":94,"line":1591},[92,90920,54751],{"class":151},[92,90922,51417],{"class":102},[92,90924,1701],{"class":151},[92,90926,51472],{"class":98},[92,90928,1269],{"class":102},[92,90930,90931,90933,90935,90937,90939],{"class":94,"line":1596},[92,90932,54765],{"class":151},[92,90934,51417],{"class":102},[92,90936,1701],{"class":151},[92,90938,51472],{"class":98},[92,90940,1269],{"class":102},[92,90942,90943,90945,90947,90949],{"class":94,"line":1602},[92,90944,54864],{"class":151},[92,90946,51417],{"class":102},[92,90948,89986],{"class":151},[92,90950,1269],{"class":102},[92,90952,90953,90955,90957,90959,90961],{"class":94,"line":1607},[92,90954,54902],{"class":151},[92,90956,51417],{"class":102},[92,90958,928],{"class":151},[92,90960,51472],{"class":98},[92,90962,1269],{"class":102},[92,90964,90965,90967,90969,90971],{"class":94,"line":1621},[92,90966,57396],{"class":151},[92,90968,51417],{"class":102},[92,90970,60822],{"class":151},[92,90972,1269],{"class":102},[92,90974,90975,90977,90979,90981],{"class":94,"line":1626},[92,90976,57266],{"class":151},[92,90978,51417],{"class":102},[92,90980,51572],{"class":151},[92,90982,1269],{"class":102},[92,90984,90985,90987,90989,90991,90993],{"class":94,"line":1632},[92,90986,90025],{"class":151},[92,90988,51417],{"class":102},[92,90990,422],{"class":151},[92,90992,51472],{"class":98},[92,90994,1269],{"class":102},[92,90996,90997],{"class":94,"line":1653},[92,90998,2166],{"class":102},[92,91000,91001,91003,91005],{"class":94,"line":1658},[92,91002,52397],{"class":102},[92,91004,5106],{"class":51280},[92,91006,51287],{"class":102},[92,91008,91009,91011,91013],{"class":94,"line":1672},[92,91010,51765],{"class":102},[92,91012,51314],{"class":51280},[92,91014,51287],{"class":102},[92,91016,91017],{"class":94,"line":1677},[92,91018,2379],{"emptyLinePlaceholder":17},[92,91020,91021,91023,91025],{"class":94,"line":1706},[92,91022,1013],{"class":102},[92,91024,51780],{"class":51280},[92,91026,51287],{"class":102},[92,91028,91029,91031,91033,91035,91037,91039,91041,91043],{"class":94,"line":1711},[92,91030,52124],{"class":102},[92,91032,51591],{"class":51280},[92,91034,53466],{"class":1942},[92,91036,148],{"class":102},[92,91038,53471],{"class":207},[92,91040,55294],{"class":102},[92,91042,51591],{"class":51280},[92,91044,51287],{"class":102},[92,91046,91047,91049,91051,91053,91055,91057,91059,91061],{"class":94,"line":1728},[92,91048,52124],{"class":102},[92,91050,51793],{"class":51280},[92,91052,55219],{"class":1942},[92,91054,148],{"class":102},[92,91056,88254],{"class":207},[92,91058,55294],{"class":102},[92,91060,51793],{"class":51280},[92,91062,51287],{"class":102},[92,91064,91065,91067,91069],{"class":94,"line":1733},[92,91066,52124],{"class":102},[92,91068,51793],{"class":51280},[92,91070,51287],{"class":102},[92,91072,91073,91075,91077,91079,91081,91083,91085,91087],{"class":94,"line":1738},[92,91074,11201],{"class":98},[92,91076,86913],{"class":151},[92,91078,13544],{"class":98},[92,91080,54376],{"class":102},[92,91082,54379],{"class":1942},[92,91084,103],{"class":102},[92,91086,90126],{"class":207},[92,91088,109],{"class":102},[92,91090,91091,91093,91095,91097],{"class":94,"line":1743},[92,91092,52199],{"class":98},[92,91094,9418],{"class":102},[92,91096,148],{"class":98},[92,91098,47314],{"class":151},[92,91100,91101,91103,91105],{"class":94,"line":1757},[92,91102,70064],{"class":98},[92,91104,90145],{"class":1942},[92,91106,10833],{"class":102},[92,91108,91109,91111,91113,91115],{"class":94,"line":1762},[92,91110,90152],{"class":102},[92,91112,148],{"class":98},[92,91114,3011],{"class":102},[92,91116,2681],{"class":98},[92,91118,91119],{"class":94,"line":2556},[92,91120,90163],{"class":161},[92,91122,91123],{"class":94,"line":2570},[92,91124,2166],{"class":102},[92,91126,91127],{"class":94,"line":2578},[92,91128,90172],{"class":161},[92,91130,91131],{"class":94,"line":2583},[92,91132,91133],{"class":161},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[92,91135,91136],{"class":94,"line":2589},[92,91137,91138],{"class":161},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[92,91140,91141,91143,91145,91147,91149,91151,91154,91156,91158],{"class":94,"line":2595},[92,91142,90187],{"class":102},[92,91144,57793],{"class":1942},[92,91146,103],{"class":102},[92,91148,90194],{"class":207},[92,91150,90197],{"class":102},[92,91152,91153],{"class":1942},"throttle",[92,91155,90203],{"class":102},[92,91157,65054],{"class":151},[92,91159,30478],{"class":102},[92,91161,91162,91164,91166],{"class":94,"line":2600},[92,91163,52397],{"class":102},[92,91165,51793],{"class":51280},[92,91167,51287],{"class":102},[92,91169,91170,91172,91174],{"class":94,"line":7928},[92,91171,51765],{"class":102},[92,91173,51780],{"class":51280},[92,91175,51287],{"class":102},[92,91177,91178],{"class":94,"line":7952},[92,91179,2379],{"emptyLinePlaceholder":17},[92,91181,91182,91184,91186],{"class":94,"line":7957},[92,91183,51765],{"class":102},[92,91185,50615],{"class":51280},[92,91187,51287],{"class":102},[1110,91189,91190],{},[49,91191,91192],{},"手写一个节流函数来处理",[38,91194,70932],{},[38,91196,90246],{},[38,91198,91199],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[38,91201,91202],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[83,91204,91206],{"className":50613,"code":91205,"language":50615,"meta":10,"style":10},"\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",[89,91207,91208,91218,91232,91236,91244,91258,91278,91290,91298,91304,91314,91326,91338,91348,91360,91370,91380,91392,91396,91404,91412,91416,91424,91442,91460,91468,91486,91496,91504,91514,91518,91522,91526,91531,91536,91541,91546,91551,91556,91573,91579,91587,91598,91613,91620,91625,91630,91640,91645,91650,91655,91659,91663,91667,91687,91695,91703,91707],{"__ignoreMap":10},[92,91209,91210,91212,91214,91216],{"class":94,"line":95},[92,91211,51277],{"class":102},[92,91213,51281],{"class":51280},[92,91215,51284],{"class":1942},[92,91217,51287],{"class":102},[92,91219,91220,91222,91224,91226,91228,91230],{"class":94,"line":11},[92,91221,1013],{"class":102},[92,91223,50615],{"class":51280},[92,91225,51296],{"class":1942},[92,91227,148],{"class":102},[92,91229,51301],{"class":207},[92,91231,51287],{"class":102},[92,91233,91234],{"class":94,"line":1158},[92,91235,2379],{"emptyLinePlaceholder":17},[92,91237,91238,91240,91242],{"class":94,"line":1173},[92,91239,1013],{"class":102},[92,91241,51314],{"class":51280},[92,91243,51287],{"class":102},[92,91245,91246,91248,91250,91252,91254,91256],{"class":94,"line":1179},[92,91247,52124],{"class":102},[92,91249,51324],{"class":51280},[92,91251,51327],{"class":1942},[92,91253,148],{"class":102},[92,91255,51332],{"class":207},[92,91257,51287],{"class":102},[92,91259,91260,91262,91264,91266,91268,91270,91272,91274,91276],{"class":94,"line":1193},[92,91261,52124],{"class":102},[92,91263,51324],{"class":51280},[92,91265,14900],{"class":1942},[92,91267,148],{"class":102},[92,91269,51371],{"class":207},[92,91271,51351],{"class":1942},[92,91273,148],{"class":102},[92,91275,51378],{"class":207},[92,91277,51287],{"class":102},[92,91279,91280,91282,91284,91286,91288],{"class":94,"line":1199},[92,91281,52124],{"class":102},[92,91283,51387],{"class":51280},[92,91285,51390],{"class":102},[92,91287,51387],{"class":51280},[92,91289,51287],{"class":102},[92,91291,91292,91294,91296],{"class":94,"line":1290},[92,91293,52124],{"class":102},[92,91295,5106],{"class":51280},[92,91297,51287],{"class":102},[92,91299,91300,91302],{"class":94,"line":1296},[92,91301,54732],{"class":1942},[92,91303,15552],{"class":102},[92,91305,91306,91308,91310,91312],{"class":94,"line":1308},[92,91307,72576],{"class":151},[92,91309,51417],{"class":102},[92,91311,60485],{"class":151},[92,91313,1269],{"class":102},[92,91315,91316,91318,91320,91322,91324],{"class":94,"line":1591},[92,91317,54751],{"class":151},[92,91319,51417],{"class":102},[92,91321,1701],{"class":151},[92,91323,51472],{"class":98},[92,91325,1269],{"class":102},[92,91327,91328,91330,91332,91334,91336],{"class":94,"line":1596},[92,91329,54765],{"class":151},[92,91331,51417],{"class":102},[92,91333,1701],{"class":151},[92,91335,51472],{"class":98},[92,91337,1269],{"class":102},[92,91339,91340,91342,91344,91346],{"class":94,"line":1602},[92,91341,54864],{"class":151},[92,91343,51417],{"class":102},[92,91345,89986],{"class":151},[92,91347,1269],{"class":102},[92,91349,91350,91352,91354,91356,91358],{"class":94,"line":1607},[92,91351,54902],{"class":151},[92,91353,51417],{"class":102},[92,91355,928],{"class":151},[92,91357,51472],{"class":98},[92,91359,1269],{"class":102},[92,91361,91362,91364,91366,91368],{"class":94,"line":1621},[92,91363,57396],{"class":151},[92,91365,51417],{"class":102},[92,91367,60822],{"class":151},[92,91369,1269],{"class":102},[92,91371,91372,91374,91376,91378],{"class":94,"line":1626},[92,91373,57266],{"class":151},[92,91375,51417],{"class":102},[92,91377,51572],{"class":151},[92,91379,1269],{"class":102},[92,91381,91382,91384,91386,91388,91390],{"class":94,"line":1632},[92,91383,90025],{"class":151},[92,91385,51417],{"class":102},[92,91387,422],{"class":151},[92,91389,51472],{"class":98},[92,91391,1269],{"class":102},[92,91393,91394],{"class":94,"line":1653},[92,91395,2166],{"class":102},[92,91397,91398,91400,91402],{"class":94,"line":1658},[92,91399,52397],{"class":102},[92,91401,5106],{"class":51280},[92,91403,51287],{"class":102},[92,91405,91406,91408,91410],{"class":94,"line":1672},[92,91407,51765],{"class":102},[92,91409,51314],{"class":51280},[92,91411,51287],{"class":102},[92,91413,91414],{"class":94,"line":1677},[92,91415,2379],{"emptyLinePlaceholder":17},[92,91417,91418,91420,91422],{"class":94,"line":1706},[92,91419,1013],{"class":102},[92,91421,51780],{"class":51280},[92,91423,51287],{"class":102},[92,91425,91426,91428,91430,91432,91434,91436,91438,91440],{"class":94,"line":1711},[92,91427,52124],{"class":102},[92,91429,51591],{"class":51280},[92,91431,53466],{"class":1942},[92,91433,148],{"class":102},[92,91435,53471],{"class":207},[92,91437,55294],{"class":102},[92,91439,51591],{"class":51280},[92,91441,51287],{"class":102},[92,91443,91444,91446,91448,91450,91452,91454,91456,91458],{"class":94,"line":1728},[92,91445,52124],{"class":102},[92,91447,51793],{"class":51280},[92,91449,55219],{"class":1942},[92,91451,148],{"class":102},[92,91453,88254],{"class":207},[92,91455,55294],{"class":102},[92,91457,51793],{"class":51280},[92,91459,51287],{"class":102},[92,91461,91462,91464,91466],{"class":94,"line":1733},[92,91463,52124],{"class":102},[92,91465,51793],{"class":51280},[92,91467,51287],{"class":102},[92,91469,91470,91472,91474,91476,91478,91480,91482,91484],{"class":94,"line":1738},[92,91471,11201],{"class":98},[92,91473,86913],{"class":151},[92,91475,13544],{"class":98},[92,91477,54376],{"class":102},[92,91479,54379],{"class":1942},[92,91481,103],{"class":102},[92,91483,90126],{"class":207},[92,91485,109],{"class":102},[92,91487,91488,91490,91492,91494],{"class":94,"line":1743},[92,91489,52199],{"class":98},[92,91491,9418],{"class":102},[92,91493,148],{"class":98},[92,91495,47314],{"class":151},[92,91497,91498,91500,91502],{"class":94,"line":1757},[92,91499,70064],{"class":98},[92,91501,90145],{"class":1942},[92,91503,10833],{"class":102},[92,91505,91506,91508,91510,91512],{"class":94,"line":1762},[92,91507,90152],{"class":102},[92,91509,148],{"class":98},[92,91511,3011],{"class":102},[92,91513,2681],{"class":98},[92,91515,91516],{"class":94,"line":2556},[92,91517,90163],{"class":161},[92,91519,91520],{"class":94,"line":2570},[92,91521,2166],{"class":102},[92,91523,91524],{"class":94,"line":2578},[92,91525,90172],{"class":161},[92,91527,91528],{"class":94,"line":2583},[92,91529,91530],{"class":161},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[92,91532,91533],{"class":94,"line":2589},[92,91534,91535],{"class":161},"    \u002F\u002F 1.声明一个定时器变量\n",[92,91537,91538],{"class":94,"line":2595},[92,91539,91540],{"class":161},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[92,91542,91543],{"class":94,"line":2600},[92,91544,91545],{"class":161},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[92,91547,91548],{"class":94,"line":7928},[92,91549,91550],{"class":161},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[92,91552,91553],{"class":94,"line":7952},[92,91554,91555],{"class":161},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[92,91557,91558,91560,91563,91565,91567,91569,91571],{"class":94,"line":7957},[92,91559,70064],{"class":98},[92,91561,91562],{"class":1942}," throttle",[92,91564,103],{"class":102},[92,91566,90617],{"class":5196},[92,91568,12415],{"class":102},[92,91570,823],{"class":5196},[92,91572,12422],{"class":102},[92,91574,91575,91577],{"class":94,"line":7963},[92,91576,79752],{"class":98},[92,91578,90630],{"class":102},[92,91580,91581,91583,91585],{"class":94,"line":7990},[92,91582,73962],{"class":98},[92,91584,58898],{"class":98},[92,91586,54432],{"class":102},[92,91588,91589,91591,91593,91595],{"class":94,"line":7995},[92,91590,2476],{"class":98},[92,91592,1637],{"class":102},[92,91594,329],{"class":98},[92,91596,91597],{"class":102},"timer) {\n",[92,91599,91600,91603,91605,91607,91609,91611],{"class":94,"line":8001},[92,91601,91602],{"class":102},"          timer ",[92,91604,148],{"class":98},[92,91606,90671],{"class":1942},[92,91608,103],{"class":102},[92,91610,54429],{"class":98},[92,91612,54432],{"class":102},[92,91614,91615,91618],{"class":94,"line":8013},[92,91616,91617],{"class":1942},"            fn",[92,91619,1955],{"class":102},[92,91621,91622],{"class":94,"line":8025},[92,91623,91624],{"class":161},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[92,91626,91627],{"class":94,"line":8037},[92,91628,91629],{"class":161},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[92,91631,91632,91635,91637],{"class":94,"line":9696},[92,91633,91634],{"class":102},"            timer ",[92,91636,148],{"class":98},[92,91638,91639],{"class":151}," null\n",[92,91641,91642],{"class":94,"line":9721},[92,91643,91644],{"class":161},"            \u002F\u002F 不能用clearTimeout(timer)\n",[92,91646,91647],{"class":94,"line":9744},[92,91648,91649],{"class":161},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[92,91651,91652],{"class":94,"line":9768},[92,91653,91654],{"class":102},"          }, t)\n",[92,91656,91657],{"class":94,"line":9773},[92,91658,2508],{"class":102},[92,91660,91661],{"class":94,"line":9778},[92,91662,52378],{"class":102},[92,91664,91665],{"class":94,"line":9783},[92,91666,2166],{"class":102},[92,91668,91669,91671,91673,91675,91677,91679,91681,91683,91685],{"class":94,"line":9792},[92,91670,90187],{"class":102},[92,91672,57793],{"class":1942},[92,91674,103],{"class":102},[92,91676,90194],{"class":207},[92,91678,12415],{"class":102},[92,91680,91153],{"class":1942},[92,91682,90203],{"class":102},[92,91684,65054],{"class":151},[92,91686,30478],{"class":102},[92,91688,91689,91691,91693],{"class":94,"line":9797},[92,91690,52397],{"class":102},[92,91692,51793],{"class":51280},[92,91694,51287],{"class":102},[92,91696,91697,91699,91701],{"class":94,"line":9803},[92,91698,51765],{"class":102},[92,91700,51780],{"class":51280},[92,91702,51287],{"class":102},[92,91704,91705],{"class":94,"line":9824},[92,91706,2379],{"emptyLinePlaceholder":17},[92,91708,91709,91711,91713],{"class":94,"line":9830},[92,91710,51765],{"class":102},[92,91712,50615],{"class":51280},[92,91714,51287],{"class":102},[63,91716,91718],{"id":91717},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[83,91720,91722],{"className":53047,"code":91721,"language":53049,"meta":10,"style":10},"\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",[89,91723,91724,91732,91740,91745,91750,91755,91760,91764,91772],{"__ignoreMap":10},[92,91725,91726,91728,91730],{"class":94,"line":95},[92,91727,1013],{"class":102},[92,91729,51780],{"class":51280},[92,91731,51287],{"class":102},[92,91733,91734,91736,91738],{"class":94,"line":11},[92,91735,52124],{"class":102},[92,91737,51793],{"class":51280},[92,91739,51287],{"class":102},[92,91741,91742],{"class":94,"line":1158},[92,91743,91744],{"class":102},"    let timer = null\n",[92,91746,91747],{"class":94,"line":1173},[92,91748,91749],{"class":102},"    timer = setTimeout(() => {\n",[92,91751,91752],{"class":94,"line":1179},[92,91753,91754],{"class":102},"      clearTimeout(timer)\n",[92,91756,91757],{"class":94,"line":1193},[92,91758,91759],{"class":102},"      console.log(timer)\n",[92,91761,91762],{"class":94,"line":1199},[92,91763,60205],{"class":102},[92,91765,91766,91768,91770],{"class":94,"line":1290},[92,91767,52397],{"class":102},[92,91769,51793],{"class":51280},[92,91771,51287],{"class":102},[92,91773,91774,91776,91778],{"class":94,"line":1296},[92,91775,51765],{"class":102},[92,91777,51780],{"class":51280},[92,91779,51287],{"class":102},[38,91781,91782],{},"输出为1",[38,91784,91785],{},"在开启的定时器里边写清除定时器",[38,91787,91788],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[63,91790,91792],{"id":91791},"_4174-节流综合案例","4.17.4 节流综合案例",[38,91794,91795],{},"页面打开，可以记录上一次的视频播放位置",[38,91797,91798],{},[1441,91799],{"alt":10,"src":91800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[38,91802,91803],{},[1441,91804],{"alt":10,"src":91805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[83,91807,91809],{"className":50613,"code":91808,"language":50615,"meta":10,"style":10},"\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",[89,91810,91811,91821,91835,91839,91847,91861,91881,91901,91923,91936,91944,91950,91960,91970,91980,91984,91988,91995,92008,92020,92024,92028,92038,92050,92064,92068,92072,92079,92089,92102,92114,92124,92134,92150,92162,92166,92170,92178,92188,92200,92210,92220,92230,92234,92238,92248,92259,92263,92271,92279,92283,92291,92306,92321,92336,92357,92365,92373,92388,92410,92418,92433,92459,92485,92511,92519,92527,92546,92554,92559,92578,92583,92601,92606,92611,92619,92624,92638,92646,92651,92668,92672,92677,92699,92703,92711,92719,92723],{"__ignoreMap":10},[92,91812,91813,91815,91817,91819],{"class":94,"line":95},[92,91814,51277],{"class":102},[92,91816,51281],{"class":51280},[92,91818,51284],{"class":1942},[92,91820,51287],{"class":102},[92,91822,91823,91825,91827,91829,91831,91833],{"class":94,"line":11},[92,91824,1013],{"class":102},[92,91826,50615],{"class":51280},[92,91828,51296],{"class":1942},[92,91830,148],{"class":102},[92,91832,51301],{"class":207},[92,91834,51287],{"class":102},[92,91836,91837],{"class":94,"line":1158},[92,91838,2379],{"emptyLinePlaceholder":17},[92,91840,91841,91843,91845],{"class":94,"line":1173},[92,91842,1013],{"class":102},[92,91844,51314],{"class":51280},[92,91846,51287],{"class":102},[92,91848,91849,91851,91853,91855,91857,91859],{"class":94,"line":1179},[92,91850,52124],{"class":102},[92,91852,51324],{"class":51280},[92,91854,51327],{"class":1942},[92,91856,148],{"class":102},[92,91858,51332],{"class":207},[92,91860,59107],{"class":102},[92,91862,91863,91865,91867,91869,91871,91873,91875,91877,91879],{"class":94,"line":1193},[92,91864,52124],{"class":102},[92,91866,51324],{"class":51280},[92,91868,51343],{"class":1942},[92,91870,148],{"class":102},[92,91872,51348],{"class":207},[92,91874,51351],{"class":1942},[92,91876,148],{"class":102},[92,91878,51356],{"class":207},[92,91880,59107],{"class":102},[92,91882,91883,91885,91887,91889,91891,91893,91895,91897,91899],{"class":94,"line":1199},[92,91884,52124],{"class":102},[92,91886,51324],{"class":51280},[92,91888,14900],{"class":1942},[92,91890,148],{"class":102},[92,91892,51371],{"class":207},[92,91894,51351],{"class":1942},[92,91896,148],{"class":102},[92,91898,51378],{"class":207},[92,91900,59107],{"class":102},[92,91902,91903,91905,91907,91909,91911,91914,91916,91918,91921],{"class":94,"line":1290},[92,91904,52124],{"class":102},[92,91906,51324],{"class":51280},[92,91908,14900],{"class":1942},[92,91910,148],{"class":102},[92,91912,91913],{"class":207},"\"referrer\"",[92,91915,51351],{"class":1942},[92,91917,148],{"class":102},[92,91919,91920],{"class":207},"\"never\"",[92,91922,59107],{"class":102},[92,91924,91925,91927,91929,91932,91934],{"class":94,"line":1296},[92,91926,52124],{"class":102},[92,91928,51387],{"class":51280},[92,91930,91931],{"class":102},">综合案例\u003C\u002F",[92,91933,51387],{"class":51280},[92,91935,51287],{"class":102},[92,91937,91938,91940,91942],{"class":94,"line":1308},[92,91939,52124],{"class":102},[92,91941,5106],{"class":51280},[92,91943,51287],{"class":102},[92,91945,91946,91948],{"class":94,"line":1591},[92,91947,6383],{"class":51280},[92,91949,15552],{"class":102},[92,91951,91952,91954,91956,91958],{"class":94,"line":1596},[92,91953,54675],{"class":151},[92,91955,51417],{"class":102},[92,91957,294],{"class":151},[92,91959,1269],{"class":102},[92,91961,91962,91964,91966,91968],{"class":94,"line":1602},[92,91963,54686],{"class":151},[92,91965,51417],{"class":102},[92,91967,294],{"class":151},[92,91969,1269],{"class":102},[92,91971,91972,91974,91976,91978],{"class":94,"line":1607},[92,91973,72576],{"class":151},[92,91975,51417],{"class":102},[92,91977,60485],{"class":151},[92,91979,1269],{"class":102},[92,91981,91982],{"class":94,"line":1621},[92,91983,2166],{"class":102},[92,91985,91986],{"class":94,"line":1626},[92,91987,2379],{"emptyLinePlaceholder":17},[92,91989,91990,91993],{"class":94,"line":1632},[92,91991,91992],{"class":1942},"    .container",[92,91994,15552],{"class":102},[92,91996,91997,91999,92001,92004,92006],{"class":94,"line":1653},[92,91998,54751],{"class":151},[92,92000,51417],{"class":102},[92,92002,92003],{"class":151},"1200",[92,92005,51472],{"class":98},[92,92007,1269],{"class":102},[92,92009,92010,92012,92014,92016,92018],{"class":94,"line":1658},[92,92011,54686],{"class":151},[92,92013,51417],{"class":102},[92,92015,294],{"class":151},[92,92017,51536],{"class":151},[92,92019,1269],{"class":102},[92,92021,92022],{"class":94,"line":1672},[92,92023,2166],{"class":102},[92,92025,92026],{"class":94,"line":1677},[92,92027,2379],{"emptyLinePlaceholder":17},[92,92029,92030,92033,92036],{"class":94,"line":1706},[92,92031,92032],{"class":1942},"    .video",[92,92034,92035],{"class":51280}," video",[92,92037,15552],{"class":102},[92,92039,92040,92042,92044,92046,92048],{"class":94,"line":1711},[92,92041,54751],{"class":151},[92,92043,51417],{"class":102},[92,92045,414],{"class":151},[92,92047,431],{"class":98},[92,92049,1269],{"class":102},[92,92051,92052,92054,92056,92058,92060,92062],{"class":94,"line":1728},[92,92053,54675],{"class":151},[92,92055,51417],{"class":102},[92,92057,803],{"class":151},[92,92059,51472],{"class":98},[92,92061,4072],{"class":151},[92,92063,1269],{"class":102},[92,92065,92066],{"class":94,"line":1733},[92,92067,2166],{"class":102},[92,92069,92070],{"class":94,"line":1738},[92,92071,2379],{"emptyLinePlaceholder":17},[92,92073,92074,92077],{"class":94,"line":1743},[92,92075,92076],{"class":1942},"    .elevator",[92,92078,15552],{"class":102},[92,92080,92081,92083,92085,92087],{"class":94,"line":1757},[92,92082,54739],{"class":151},[92,92084,51417],{"class":102},[92,92086,86213],{"class":151},[92,92088,1269],{"class":102},[92,92090,92091,92093,92095,92098,92100],{"class":94,"line":1762},[92,92092,54927],{"class":151},[92,92094,51417],{"class":102},[92,92096,92097],{"class":151},"280",[92,92099,51472],{"class":98},[92,92101,1269],{"class":102},[92,92103,92104,92106,92108,92110,92112],{"class":94,"line":2556},[92,92105,86407],{"class":151},[92,92107,51417],{"class":102},[92,92109,803],{"class":151},[92,92111,51472],{"class":98},[92,92113,1269],{"class":102},[92,92115,92116,92118,92120,92122],{"class":94,"line":2570},[92,92117,86220],{"class":151},[92,92119,51417],{"class":102},[92,92121,86225],{"class":151},[92,92123,1269],{"class":102},[92,92125,92126,92128,92130,92132],{"class":94,"line":2578},[92,92127,61701],{"class":151},[92,92129,51417],{"class":102},[92,92131,60822],{"class":151},[92,92133,1269],{"class":102},[92,92135,92136,92138,92140,92142,92144,92146,92148],{"class":94,"line":2583},[92,92137,61957],{"class":151},[92,92139,51417],{"class":102},[92,92141,320],{"class":151},[92,92143,51472],{"class":98},[92,92145,51501],{"class":151},[92,92147,62224],{"class":151},[92,92149,1269],{"class":102},[92,92151,92152,92154,92156,92158,92160],{"class":94,"line":2589},[92,92153,54751],{"class":151},[92,92155,51417],{"class":102},[92,92157,1010],{"class":151},[92,92159,51472],{"class":98},[92,92161,1269],{"class":102},[92,92163,92164],{"class":94,"line":2595},[92,92165,2166],{"class":102},[92,92167,92168],{"class":94,"line":2600},[92,92169,2379],{"emptyLinePlaceholder":17},[92,92171,92172,92174,92176],{"class":94,"line":7928},[92,92173,92076],{"class":1942},[92,92175,1377],{"class":51280},[92,92177,15552],{"class":102},[92,92179,92180,92182,92184,92186],{"class":94,"line":7952},[92,92181,54989],{"class":151},[92,92183,51417],{"class":102},[92,92185,60849],{"class":151},[92,92187,1269],{"class":102},[92,92189,92190,92192,92194,92196,92198],{"class":94,"line":7957},[92,92191,54675],{"class":151},[92,92193,51417],{"class":102},[92,92195,549],{"class":151},[92,92197,51472],{"class":98},[92,92199,1269],{"class":102},[92,92201,92202,92204,92206,92208],{"class":94,"line":7963},[92,92203,63950],{"class":151},[92,92205,51417],{"class":102},[92,92207,54717],{"class":151},[92,92209,1269],{"class":102},[92,92211,92212,92214,92216,92218],{"class":94,"line":7990},[92,92213,57266],{"class":151},[92,92215,51417],{"class":102},[92,92217,51572],{"class":151},[92,92219,1269],{"class":102},[92,92221,92222,92224,92226,92228],{"class":94,"line":7995},[92,92223,57396],{"class":151},[92,92225,51417],{"class":102},[92,92227,62050],{"class":151},[92,92229,1269],{"class":102},[92,92231,92232],{"class":94,"line":8001},[92,92233,2166],{"class":102},[92,92235,92236],{"class":94,"line":8013},[92,92237,2379],{"emptyLinePlaceholder":17},[92,92239,92240,92242,92244,92246],{"class":94,"line":8025},[92,92241,92076],{"class":1942},[92,92243,1377],{"class":51280},[92,92245,64004],{"class":1942},[92,92247,15552],{"class":102},[92,92249,92250,92252,92254,92257],{"class":94,"line":8037},[92,92251,57396],{"class":151},[92,92253,51417],{"class":102},[92,92255,92256],{"class":151},"#1286ff",[92,92258,1269],{"class":102},[92,92260,92261],{"class":94,"line":9696},[92,92262,2166],{"class":102},[92,92264,92265,92267,92269],{"class":94,"line":9721},[92,92266,52397],{"class":102},[92,92268,5106],{"class":51280},[92,92270,51287],{"class":102},[92,92272,92273,92275,92277],{"class":94,"line":9744},[92,92274,51765],{"class":102},[92,92276,51314],{"class":51280},[92,92278,51287],{"class":102},[92,92280,92281],{"class":94,"line":9768},[92,92282,2379],{"emptyLinePlaceholder":17},[92,92284,92285,92287,92289],{"class":94,"line":9773},[92,92286,1013],{"class":102},[92,92288,51780],{"class":51280},[92,92290,51287],{"class":102},[92,92292,92293,92295,92297,92299,92301,92304],{"class":94,"line":9778},[92,92294,52124],{"class":102},[92,92296,51591],{"class":51280},[92,92298,53466],{"class":1942},[92,92300,148],{"class":102},[92,92302,92303],{"class":207},"\"container\"",[92,92305,51287],{"class":102},[92,92307,92308,92310,92312,92314,92316,92319],{"class":94,"line":9783},[92,92309,51321],{"class":102},[92,92311,51591],{"class":51280},[92,92313,53466],{"class":1942},[92,92315,148],{"class":102},[92,92317,92318],{"class":207},"\"header\"",[92,92320,51287],{"class":102},[92,92322,92323,92325,92327,92329,92331,92334],{"class":94,"line":9792},[92,92324,55214],{"class":102},[92,92326,341],{"class":51280},[92,92328,61037],{"class":1942},[92,92330,148],{"class":102},[92,92332,92333],{"class":207},"\"http:\u002F\u002Fpip.itcast.cn\"",[92,92335,51287],{"class":102},[92,92337,92338,92340,92342,92344,92346,92349,92351,92353,92355],{"class":94,"line":9797},[92,92339,55282],{"class":102},[92,92341,1441],{"class":51280},[92,92343,55219],{"class":1942},[92,92345,148],{"class":102},[92,92347,92348],{"class":207},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[92,92350,55227],{"class":1942},[92,92352,148],{"class":102},[92,92354,7632],{"class":207},[92,92356,59107],{"class":102},[92,92358,92359,92361,92363],{"class":94,"line":9803},[92,92360,55387],{"class":102},[92,92362,341],{"class":51280},[92,92364,51287],{"class":102},[92,92366,92367,92369,92371],{"class":94,"line":9824},[92,92368,51756],{"class":102},[92,92370,51591],{"class":51280},[92,92372,51287],{"class":102},[92,92374,92375,92377,92379,92381,92383,92386],{"class":94,"line":9830},[92,92376,51321],{"class":102},[92,92378,51591],{"class":51280},[92,92380,53466],{"class":1942},[92,92382,148],{"class":102},[92,92384,92385],{"class":207},"\"video\"",[92,92387,51287],{"class":102},[92,92389,92390,92392,92394,92396,92398,92401,92404,92406,92408],{"class":94,"line":9844},[92,92391,55214],{"class":102},[92,92393,28164],{"class":51280},[92,92395,55219],{"class":1942},[92,92397,148],{"class":102},[92,92399,92400],{"class":207},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[92,92402,92403],{"class":1942}," controls",[92,92405,55294],{"class":102},[92,92407,28164],{"class":51280},[92,92409,51287],{"class":102},[92,92411,92412,92414,92416],{"class":94,"line":9850},[92,92413,51756],{"class":102},[92,92415,51591],{"class":51280},[92,92417,51287],{"class":102},[92,92419,92420,92422,92424,92426,92428,92431],{"class":94,"line":9877},[92,92421,51321],{"class":102},[92,92423,51591],{"class":51280},[92,92425,53466],{"class":1942},[92,92427,148],{"class":102},[92,92429,92430],{"class":207},"\"elevator\"",[92,92432,51287],{"class":102},[92,92434,92435,92437,92439,92441,92443,92445,92448,92450,92452,92455,92457],{"class":94,"line":9886},[92,92436,55214],{"class":102},[92,92438,341],{"class":51280},[92,92440,61037],{"class":1942},[92,92442,148],{"class":102},[92,92444,64216],{"class":207},[92,92446,92447],{"class":1942}," data-ref",[92,92449,148],{"class":102},[92,92451,92385],{"class":207},[92,92453,92454],{"class":102},">视频介绍\u003C\u002F",[92,92456,341],{"class":51280},[92,92458,51287],{"class":102},[92,92460,92461,92463,92465,92467,92469,92471,92473,92475,92478,92481,92483],{"class":94,"line":9892},[92,92462,55214],{"class":102},[92,92464,341],{"class":51280},[92,92466,61037],{"class":1942},[92,92468,148],{"class":102},[92,92470,64216],{"class":207},[92,92472,92447],{"class":1942},[92,92474,148],{"class":102},[92,92476,92477],{"class":207},"\"intro\"",[92,92479,92480],{"class":102},">课程简介\u003C\u002F",[92,92482,341],{"class":51280},[92,92484,51287],{"class":102},[92,92486,92487,92489,92491,92493,92495,92497,92499,92501,92504,92507,92509],{"class":94,"line":9900},[92,92488,55214],{"class":102},[92,92490,341],{"class":51280},[92,92492,61037],{"class":1942},[92,92494,148],{"class":102},[92,92496,64216],{"class":207},[92,92498,92447],{"class":1942},[92,92500,148],{"class":102},[92,92502,92503],{"class":207},"\"outline\"",[92,92505,92506],{"class":102},">评论列表\u003C\u002F",[92,92508,341],{"class":51280},[92,92510,51287],{"class":102},[92,92512,92513,92515,92517],{"class":94,"line":9905},[92,92514,51756],{"class":102},[92,92516,51591],{"class":51280},[92,92518,51287],{"class":102},[92,92520,92521,92523,92525],{"class":94,"line":16584},[92,92522,52397],{"class":102},[92,92524,51591],{"class":51280},[92,92526,51287],{"class":102},[92,92528,92529,92531,92533,92535,92537,92540,92542,92544],{"class":94,"line":16590},[92,92530,52124],{"class":102},[92,92532,51793],{"class":51280},[92,92534,55219],{"class":1942},[92,92536,148],{"class":102},[92,92538,92539],{"class":207},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[92,92541,55294],{"class":102},[92,92543,51793],{"class":51280},[92,92545,51287],{"class":102},[92,92547,92548,92550,92552],{"class":94,"line":16613},[92,92549,52124],{"class":102},[92,92551,51793],{"class":51280},[92,92553,51287],{"class":102},[92,92555,92556],{"class":94,"line":16619},[92,92557,92558],{"class":161},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[92,92560,92561,92563,92565,92567,92569,92571,92573,92576],{"class":94,"line":16642},[92,92562,11201],{"class":98},[92,92564,92035],{"class":151},[92,92566,13544],{"class":98},[92,92568,54376],{"class":102},[92,92570,54379],{"class":1942},[92,92572,103],{"class":102},[92,92574,92575],{"class":207},"'video'",[92,92577,109],{"class":102},[92,92579,92580],{"class":94,"line":16656},[92,92581,92582],{"class":161},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[92,92584,92585,92588,92590,92592,92594,92597,92599],{"class":94,"line":16676},[92,92586,92587],{"class":102},"    video.ontimeupdate ",[92,92589,148],{"class":98},[92,92591,88335],{"class":102},[92,92593,91153],{"class":1942},[92,92595,92596],{"class":102},"(() ",[92,92598,84702],{"class":98},[92,92600,15552],{"class":102},[92,92602,92603],{"class":94,"line":16682},[92,92604,92605],{"class":161},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[92,92607,92608],{"class":94,"line":16693},[92,92609,92610],{"class":161},"      \u002F\u002F 控制台输出当前的时间\n",[92,92612,92613,92616],{"class":94,"line":16716},[92,92614,92615],{"class":161},"      \u002F\u002F console.log(video.currentTime)",[92,92617,92618],{"class":161},"  \u002F\u002F获得当前的视频时间\n",[92,92620,92621],{"class":94,"line":16738},[92,92622,92623],{"class":161},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[92,92625,92626,92628,92630,92632,92635],{"class":94,"line":16743},[92,92627,74663],{"class":102},[92,92629,71634],{"class":1942},[92,92631,103],{"class":102},[92,92633,92634],{"class":207},"'currentTime'",[92,92636,92637],{"class":102},", video.currentTime)\n",[92,92639,92640,92642,92644],{"class":94,"line":16749},[92,92641,54515],{"class":102},[92,92643,6390],{"class":151},[92,92645,109],{"class":102},[92,92647,92648],{"class":94,"line":16763},[92,92649,92650],{"class":161},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[92,92652,92653,92656,92659,92661,92664,92666],{"class":94,"line":16776},[92,92654,92655],{"class":102},"    video.",[92,92657,92658],{"class":1942},"onloadeddata",[92,92660,13544],{"class":98},[92,92662,92663],{"class":102}," () ",[92,92665,84702],{"class":98},[92,92667,15552],{"class":102},[92,92669,92670],{"class":94,"line":16781},[92,92671,59992],{"class":161},[92,92673,92674],{"class":94,"line":16795},[92,92675,92676],{"class":161},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[92,92678,92679,92682,92684,92687,92689,92691,92693,92695,92697],{"class":94,"line":16800},[92,92680,92681],{"class":102},"      video.currentTime ",[92,92683,148],{"class":98},[92,92685,92686],{"class":102}," localStorage.",[92,92688,71665],{"class":1942},[92,92690,103],{"class":102},[92,92692,92634],{"class":207},[92,92694,13694],{"class":102},[92,92696,71337],{"class":98},[92,92698,47314],{"class":151},[92,92700,92701],{"class":94,"line":16806},[92,92702,2166],{"class":102},[92,92704,92705,92707,92709],{"class":94,"line":16811},[92,92706,52397],{"class":102},[92,92708,51793],{"class":51280},[92,92710,51287],{"class":102},[92,92712,92713,92715,92717],{"class":94,"line":16825},[92,92714,51765],{"class":102},[92,92716,51780],{"class":51280},[92,92718,51287],{"class":102},[92,92720,92721],{"class":94,"line":16830},[92,92722,2379],{"emptyLinePlaceholder":17},[92,92724,92725,92727,92729],{"class":94,"line":16835},[92,92726,51765],{"class":102},[92,92728,50615],{"class":51280},[92,92730,51287],{"class":102},[5106,92732,92733],{},"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":10,"searchDepth":11,"depth":11,"links":92735},[92736,92741,92745,92746,92747,92752,92757,92758,92759,92760,92767,92772,92773,92783,92787,92788,92792],{"id":76671,"depth":11,"text":76672,"children":92737},[92738,92739,92740],{"id":76675,"depth":1158,"text":76676},{"id":76700,"depth":1158,"text":76701},{"id":76712,"depth":1158,"text":76713},{"id":76724,"depth":11,"text":76725,"children":92742},[92743,92744],{"id":76728,"depth":1158,"text":76729},{"id":76743,"depth":1158,"text":76744},{"id":76795,"depth":11,"text":76796},{"id":76839,"depth":11,"text":76840},{"id":76856,"depth":11,"text":76857,"children":92748},[92749,92750,92751],{"id":76860,"depth":1158,"text":76861},{"id":76873,"depth":1158,"text":76874},{"id":76978,"depth":1158,"text":76979},{"id":77267,"depth":11,"text":77268,"children":92753},[92754,92755,92756],{"id":77271,"depth":1158,"text":77272},{"id":77714,"depth":1158,"text":77715},{"id":78125,"depth":1158,"text":78126},{"id":78188,"depth":11,"text":78189},{"id":78267,"depth":11,"text":78268},{"id":78360,"depth":11,"text":78361},{"id":80205,"depth":11,"text":80206,"children":92761},[92762,92763,92764,92765,92766],{"id":80209,"depth":1158,"text":80210},{"id":80221,"depth":1158,"text":80222},{"id":80440,"depth":1158,"text":80441},{"id":80458,"depth":1158,"text":80459},{"id":80518,"depth":1158,"text":80519},{"id":84786,"depth":11,"text":84787,"children":92768},[92769,92770,92771],{"id":84790,"depth":1158,"text":84791},{"id":84808,"depth":1158,"text":84809},{"id":84834,"depth":1158,"text":84835},{"id":84843,"depth":11,"text":84844},{"id":84865,"depth":11,"text":84866,"children":92774},[92775,92776,92777,92778,92779,92780,92781,92782],{"id":84869,"depth":1158,"text":84870},{"id":85130,"depth":1158,"text":85131},{"id":85316,"depth":1158,"text":85317},{"id":85683,"depth":1158,"text":85684},{"id":85799,"depth":1158,"text":85800},{"id":85835,"depth":1158,"text":85836},{"id":85882,"depth":1158,"text":85883},{"id":85916,"depth":1158,"text":85917},{"id":87279,"depth":11,"text":87280,"children":92784},[92785,92786],{"id":87283,"depth":1158,"text":87284},{"id":87320,"depth":1158,"text":87321},{"id":88675,"depth":11,"text":88676},{"id":89046,"depth":11,"text":89047,"children":92789},[92790,92791],{"id":89050,"depth":1158,"text":89051},{"id":89084,"depth":1158,"text":89085},{"id":89813,"depth":11,"text":89814,"children":92793},[92794,92795,92796,92797],{"id":89817,"depth":1158,"text":89818},{"id":90775,"depth":1158,"text":90776},{"id":91717,"depth":1158,"text":91718},{"id":91791,"depth":1158,"text":91792},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76660,"description":13},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92804,"title":92805,"body":92806,"description":92817,"extension":14,"meta":92818,"navigation":17,"path":92820,"seo":92821,"stem":92822,"__hash__":92823},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92807,"toc":92815},[92808],[38,92809,92810,92811],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[341,92812,92813],{"href":92813,"rel":92814},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23845],{"title":10,"searchDepth":11,"depth":11,"links":92816},[],"三件套第三套学习",{"category":92819},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92805,"description":92817},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92825,"title":92826,"body":92827,"description":13,"extension":14,"meta":92932,"navigation":17,"path":92933,"seo":92934,"stem":92935,"__hash__":92936},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92828,"toc":92927},[92829,92836,92839,92842,92845,92849,92858,92861,92864,92868,92877,92880,92884,92887,92907,92910,92924],[38,92830,92831],{},[341,92832,92835],{"href":92833,"rel":92834},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23845],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[29,92837,92826],{"id":92838},"_1安装",[38,92840,92841],{},"numpy是科学计算基础库,底层是C语言",[38,92843,92844],{},"三种方式：",[33,92846,92848],{"id":92847},"_11-通过pip安装","1.1 通过pip安装",[83,92850,92852],{"className":30359,"code":92851,"language":30361,"meta":10,"style":10},"pip install numpy\n",[89,92853,92854],{"__ignoreMap":10},[92,92855,92856],{"class":94,"line":95},[92,92857,92851],{"class":102},[38,92859,92860],{},"首选方式，自动处理依赖项",[38,92862,92863],{},"在提示系统命令符中使用cmd",[33,92865,92867],{"id":92866},"_12-通过anaconda安装","1.2 通过Anaconda安装",[83,92869,92871],{"className":30359,"code":92870,"language":30361,"meta":10,"style":10},"conda install numpy\n",[89,92872,92873],{"__ignoreMap":10},[92,92874,92875],{"class":94,"line":95},[92,92876,92870],{"class":102},[38,92878,92879],{},"自动解决环境依赖",[33,92881,92883],{"id":92882},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[38,92885,92886],{},"对于Debian\u002FUbuntu",[83,92888,92890],{"className":30359,"code":92889,"language":30361,"meta":10,"style":10},"sudo apt-get install python3-numpy\n",[89,92891,92892],{"__ignoreMap":10},[92,92893,92894,92897,92899,92902,92904],{"class":94,"line":95},[92,92895,92896],{"class":102},"sudo apt",[92,92898,635],{"class":98},[92,92900,92901],{"class":102},"get install python3",[92,92903,635],{"class":98},[92,92905,92906],{"class":102},"numpy\n",[38,92908,92909],{},"对于Fedora:",[83,92911,92913],{"className":30359,"code":92912,"language":30361,"meta":10,"style":10},"sudo dnf install python3-numpy\n",[89,92914,92915],{"__ignoreMap":10},[92,92916,92917,92920,92922],{"class":94,"line":95},[92,92918,92919],{"class":102},"sudo dnf install python3",[92,92921,635],{"class":98},[92,92923,92906],{"class":102},[5106,92925,92926],{},"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":10,"searchDepth":11,"depth":11,"links":92928},[92929,92930,92931],{"id":92847,"depth":11,"text":92848},{"id":92866,"depth":11,"text":92867},{"id":92882,"depth":11,"text":92883},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92826,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92938,"title":92939,"body":92940,"description":13,"extension":14,"meta":93053,"navigation":17,"path":93054,"seo":93055,"stem":93056,"__hash__":93057},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92941,"toc":93051},[92942,92945,92948,92951,92954,92957,92960,92963,92966,92969,93045,93048],[29,92943,92939],{"id":92944},"_10算数函数",[38,92946,92947],{},"加减乘除运算跟python基础语法没区别",[38,92949,92950],{},"除了python那种方法外还可以使用函数",[38,92952,92953],{},"加：np.add(a,b)",[38,92955,92956],{},"减：np.subtract(a,b)",[38,92958,92959],{},"乘：np.multiply(a,b)",[38,92961,92962],{},"除：np.divide(a,b) == a\u002Fb",[38,92964,92965],{},"取余：np.mod(a,b) == a%b",[38,92967,92968],{},"必须会的用法：",[83,92970,92972],{"className":30359,"code":92971,"language":30361,"meta":10,"style":10},"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",[89,92973,92974,92996,93017,93027,93040],{"__ignoreMap":10},[92,92975,92976,92978,92980,92983,92985,92988,92990,92992,92994],{"class":94,"line":95},[92,92977,341],{"class":102},[92,92979,148],{"class":98},[92,92981,92982],{"class":102},"np.arange(",[92,92984,523],{"class":151},[92,92986,92987],{"class":102},").reshape(",[92,92989,174],{"class":151},[92,92991,481],{"class":102},[92,92993,174],{"class":151},[92,92995,109],{"class":102},[92,92997,92998,93000,93002,93005,93007,93009,93011,93013,93015],{"class":94,"line":11},[92,92999,366],{"class":102},[92,93001,148],{"class":98},[92,93003,93004],{"class":102},"np.array([",[92,93006,549],{"class":151},[92,93008,481],{"class":102},[92,93010,549],{"class":151},[92,93012,481],{"class":102},[92,93014,549],{"class":151},[92,93016,4636],{"class":102},[92,93018,93019,93022,93024],{"class":94,"line":1158},[92,93020,93021],{"class":102},"result",[92,93023,148],{"class":98},[92,93025,93026],{"class":102},"np.empty_like(a)\n",[92,93028,93029,93032,93035,93037],{"class":94,"line":1173},[92,93030,93031],{"class":102},"np.add(a,b,",[92,93033,93034],{"class":5196},"out",[92,93036,148],{"class":98},[92,93038,93039],{"class":102},"result)\n",[92,93041,93042],{"class":94,"line":1179},[92,93043,93044],{"class":102},"result\n",[38,93046,93047],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5106,93049,93050],{},"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":10,"searchDepth":11,"depth":11,"links":93052},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92939,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93059,"title":93060,"body":93061,"description":13,"extension":14,"meta":93823,"navigation":17,"path":93824,"seo":93825,"stem":93826,"__hash__":93827},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93062,"toc":93810},[93063,93066,93069,93072,93076,93115,93119,93163,93223,93227,93230,93269,93272,93317,93321,93357,93361,93430,93434,93498,93502,93505,93508,93511,93514,93550,93554,93594,93598,93670,93673,93677,93740,93744,93807],[29,93064,93060],{"id":93065},"_11统计函数",[38,93067,93068],{},"sum max min mean",[38,93070,93071],{},"这些有axis参数，可以指定方向",[33,93073,93075],{"id":93074},"_111-sum求和函数","11.1 sum()求和函数",[83,93077,93079],{"className":30359,"code":93078,"language":30361,"meta":10,"style":10},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[89,93080,93081,93086,93107],{"__ignoreMap":10},[92,93082,93083],{"class":94,"line":95},[92,93084,93085],{"class":161},"#创建一维数组\n",[92,93087,93088,93090,93092,93095,93097,93099,93101,93103,93105],{"class":94,"line":11},[92,93089,341],{"class":102},[92,93091,148],{"class":98},[92,93093,93094],{"class":102},"np.random.randint(",[92,93096,320],{"class":151},[92,93098,481],{"class":102},[92,93100,414],{"class":151},[92,93102,481],{"class":102},[92,93104,803],{"class":151},[92,93106,109],{"class":102},[92,93108,93109,93112],{"class":94,"line":1158},[92,93110,93111],{"class":102},"np.sum(a)",[92,93113,93114],{"class":161},"#求和\n",[33,93116,93118],{"id":93117},"_112-max求最大值函数","11.2 max()求最大值函数",[83,93120,93122],{"className":30359,"code":93121,"language":30361,"meta":10,"style":10},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[89,93123,93124,93128,93148,93153,93158],{"__ignoreMap":10},[92,93125,93126],{"class":94,"line":95},[92,93127,93085],{"class":161},[92,93129,93130,93132,93134,93136,93138,93140,93142,93144,93146],{"class":94,"line":11},[92,93131,341],{"class":102},[92,93133,148],{"class":98},[92,93135,93094],{"class":102},[92,93137,320],{"class":151},[92,93139,481],{"class":102},[92,93141,414],{"class":151},[92,93143,481],{"class":102},[92,93145,803],{"class":151},[92,93147,109],{"class":102},[92,93149,93150],{"class":94,"line":1158},[92,93151,93152],{"class":102},"np.max(a)\n",[92,93154,93155],{"class":94,"line":1173},[92,93156,93157],{"class":161},"#最大索引(求最大元素的索引)arg\n",[92,93159,93160],{"class":94,"line":1179},[92,93161,93162],{"class":102},"np.argmax(a)\n",[83,93164,93166],{"className":30359,"code":93165,"language":30361,"meta":10,"style":10},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[89,93167,93168,93189,93209,93213],{"__ignoreMap":10},[92,93169,93170,93172,93174,93177,93179,93181,93183,93185,93187],{"class":94,"line":95},[92,93171,10899],{"class":102},[92,93173,148],{"class":98},[92,93175,93176],{"class":102}," np.array([",[92,93178,320],{"class":151},[92,93180,12415],{"class":102},[92,93182,422],{"class":151},[92,93184,12415],{"class":102},[92,93186,174],{"class":151},[92,93188,4636],{"class":102},[92,93190,93191,93193,93195,93197,93199,93201,93203,93205,93207],{"class":94,"line":11},[92,93192,10925],{"class":102},[92,93194,148],{"class":98},[92,93196,93176],{"class":102},[92,93198,174],{"class":151},[92,93200,12415],{"class":102},[92,93202,180],{"class":151},[92,93204,12415],{"class":102},[92,93206,396],{"class":151},[92,93208,4636],{"class":102},[92,93210,93211],{"class":94,"line":1158},[92,93212,2379],{"emptyLinePlaceholder":17},[92,93214,93215,93217,93220],{"class":94,"line":1173},[92,93216,30396],{"class":151},[92,93218,93219],{"class":102},"(np.maximum(a, b))   ",[92,93221,93222],{"class":161},"# [3 5 4]，每个位置上取较大值\n",[33,93224,93226],{"id":93225},"_113-mean求平均值函数","11.3 mean()求平均值函数",[38,93228,93229],{},"①一维数组：",[83,93231,93233],{"className":30359,"code":93232,"language":30361,"meta":10,"style":10},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[89,93234,93235,93239,93259,93264],{"__ignoreMap":10},[92,93236,93237],{"class":94,"line":95},[92,93238,93085],{"class":161},[92,93240,93241,93243,93245,93247,93249,93251,93253,93255,93257],{"class":94,"line":11},[92,93242,341],{"class":102},[92,93244,148],{"class":98},[92,93246,93094],{"class":102},[92,93248,320],{"class":151},[92,93250,481],{"class":102},[92,93252,414],{"class":151},[92,93254,481],{"class":102},[92,93256,803],{"class":151},[92,93258,109],{"class":102},[92,93260,93261],{"class":94,"line":1158},[92,93262,93263],{"class":161},"#求平均值\n",[92,93265,93266],{"class":94,"line":1173},[92,93267,93268],{"class":102},"np.mean(a)\n",[38,93270,93271],{},"②二维数组",[83,93273,93275],{"className":30359,"code":93274,"language":30361,"meta":10,"style":10},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[89,93276,93277,93282,93307,93312],{"__ignoreMap":10},[92,93278,93279],{"class":94,"line":95},[92,93280,93281],{"class":161},"#二维数组\n",[92,93283,93284,93287,93289,93291,93293,93295,93297,93299,93301,93303,93305],{"class":94,"line":11},[92,93285,93286],{"class":102},"aa",[92,93288,148],{"class":98},[92,93290,92982],{"class":102},[92,93292,320],{"class":151},[92,93294,481],{"class":102},[92,93296,626],{"class":151},[92,93298,92987],{"class":102},[92,93300,174],{"class":151},[92,93302,481],{"class":102},[92,93304,396],{"class":151},[92,93306,109],{"class":102},[92,93308,93309],{"class":94,"line":1158},[92,93310,93311],{"class":161},"#对数组中的所有数求平均\n",[92,93313,93314],{"class":94,"line":1173},[92,93315,93316],{"class":102},"np.mean(aa)\n",[33,93318,93320],{"id":93319},"_114-median求中位数函数","11.4 median()求中位数函数",[83,93322,93324],{"className":30359,"code":93323,"language":30361,"meta":10,"style":10},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[89,93325,93326,93331,93347,93352],{"__ignoreMap":10},[92,93327,93328],{"class":94,"line":95},[92,93329,93330],{"class":161},"#求中位数\n",[92,93332,93333,93335,93337,93339,93341,93343,93345],{"class":94,"line":11},[92,93334,366],{"class":102},[92,93336,148],{"class":98},[92,93338,92982],{"class":102},[92,93340,320],{"class":151},[92,93342,481],{"class":102},[92,93344,549],{"class":151},[92,93346,109],{"class":102},[92,93348,93349],{"class":94,"line":1158},[92,93350,93351],{"class":102},"np.median(b)\n",[92,93353,93354],{"class":94,"line":1173},[92,93355,93356],{"class":161},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[33,93358,93360],{"id":93359},"_115-power求幂运算函数","11.5 power()求幂运算函数",[83,93362,93364],{"className":30359,"code":93363,"language":30361,"meta":10,"style":10},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[89,93365,93366,93382,93387,93392,93401,93406,93415],{"__ignoreMap":10},[92,93367,93368,93370,93372,93374,93376,93378,93380],{"class":94,"line":95},[92,93369,366],{"class":102},[92,93371,148],{"class":98},[92,93373,92982],{"class":102},[92,93375,320],{"class":151},[92,93377,481],{"class":102},[92,93379,549],{"class":151},[92,93381,109],{"class":102},[92,93383,93384],{"class":94,"line":11},[92,93385,93386],{"class":161},"#幂运算\n",[92,93388,93389],{"class":94,"line":1158},[92,93390,93391],{"class":161},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[92,93393,93394,93397,93399],{"class":94,"line":1173},[92,93395,93396],{"class":102},"np.power(b,",[92,93398,180],{"class":151},[92,93400,109],{"class":102},[92,93402,93403],{"class":94,"line":1179},[92,93404,93405],{"class":161},"#或者以下代码，将数据存储起来\n",[92,93407,93408,93410,93412],{"class":94,"line":1193},[92,93409,948],{"class":102},[92,93411,148],{"class":98},[92,93413,93414],{"class":102},"np.empty_like(b)\n",[92,93416,93417,93419,93421,93423,93425,93427],{"class":94,"line":1199},[92,93418,93396],{"class":102},[92,93420,180],{"class":151},[92,93422,481],{"class":102},[92,93424,93034],{"class":5196},[92,93426,148],{"class":98},[92,93428,93429],{"class":102},"y)\n",[33,93431,93433],{"id":93432},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[83,93435,93437],{"className":30359,"code":93436,"language":30361,"meta":10,"style":10},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[89,93438,93439,93455,93460,93465,93469,93487],{"__ignoreMap":10},[92,93440,93441,93443,93445,93447,93449,93451,93453],{"class":94,"line":95},[92,93442,366],{"class":102},[92,93444,148],{"class":98},[92,93446,92982],{"class":102},[92,93448,320],{"class":151},[92,93450,481],{"class":102},[92,93452,549],{"class":151},[92,93454,109],{"class":102},[92,93456,93457],{"class":94,"line":11},[92,93458,93459],{"class":161},"#开方\n",[92,93461,93462],{"class":94,"line":1158},[92,93463,93464],{"class":102},"np.sqrt(b)\n",[92,93466,93467],{"class":94,"line":1173},[92,93468,93405],{"class":161},[92,93470,93471,93473,93475,93478,93481,93483,93485],{"class":94,"line":1179},[92,93472,948],{"class":102},[92,93474,148],{"class":98},[92,93476,93477],{"class":102},"np.empty_like(b,",[92,93479,93480],{"class":5196},"dtype",[92,93482,148],{"class":98},[92,93484,142],{"class":151},[92,93486,109],{"class":102},[92,93488,93489,93492,93494,93496],{"class":94,"line":1193},[92,93490,93491],{"class":102},"np.sqrt(b,",[92,93493,93034],{"class":5196},[92,93495,148],{"class":98},[92,93497,93429],{"class":102},[33,93499,93501],{"id":93500},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[38,93503,93504],{},"对数组中的元素累计求和，可指定轴",[38,93506,93507],{},"#累计求和的意思是：",[38,93509,93510],{},"a = np.array([1, 2, 3, 4])",[38,93512,93513],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[83,93515,93517],{"className":30359,"code":93516,"language":30361,"meta":10,"style":10},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[89,93518,93519,93535,93540,93545],{"__ignoreMap":10},[92,93520,93521,93523,93525,93527,93529,93531,93533],{"class":94,"line":95},[92,93522,366],{"class":102},[92,93524,148],{"class":98},[92,93526,92982],{"class":102},[92,93528,320],{"class":151},[92,93530,481],{"class":102},[92,93532,549],{"class":151},[92,93534,109],{"class":102},[92,93536,93537],{"class":94,"line":11},[92,93538,93539],{"class":102},"np.cumsum(b)\n",[92,93541,93542],{"class":94,"line":1158},[92,93543,93544],{"class":161},"#结果：\n",[92,93546,93547],{"class":94,"line":1173},[92,93548,93549],{"class":161},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[33,93551,93553],{"id":93552},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[83,93555,93557],{"className":30359,"code":93556,"language":30361,"meta":10,"style":10},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[89,93558,93559,93575,93580,93585,93589],{"__ignoreMap":10},[92,93560,93561,93563,93565,93567,93569,93571,93573],{"class":94,"line":95},[92,93562,366],{"class":102},[92,93564,148],{"class":98},[92,93566,92982],{"class":102},[92,93568,320],{"class":151},[92,93570,481],{"class":102},[92,93572,549],{"class":151},[92,93574,109],{"class":102},[92,93576,93577],{"class":94,"line":11},[92,93578,93579],{"class":161},"#对数组中的元素累计求积，可指定轴\n",[92,93581,93582],{"class":94,"line":1158},[92,93583,93584],{"class":102},"np.cumprod(b)\n",[92,93586,93587],{"class":94,"line":1173},[92,93588,93544],{"class":161},[92,93590,93591],{"class":94,"line":1179},[92,93592,93593],{"class":161},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[33,93595,93597],{"id":93596},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[83,93599,93601],{"className":30359,"code":93600,"language":30361,"meta":10,"style":10},"#删除数组中的重复数据，并对数据进行排序\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",[89,93602,93603,93608,93656,93661,93665],{"__ignoreMap":10},[92,93604,93605],{"class":94,"line":95},[92,93606,93607],{"class":161},"#删除数组中的重复数据，并对数据进行排序\n",[92,93609,93610,93612,93614,93616,93618,93620,93622,93624,93626,93628,93630,93632,93634,93636,93638,93640,93642,93644,93646,93648,93650,93652,93654],{"class":94,"line":11},[92,93611,341],{"class":102},[92,93613,148],{"class":98},[92,93615,93004],{"class":102},[92,93617,320],{"class":151},[92,93619,481],{"class":102},[92,93621,180],{"class":151},[92,93623,481],{"class":102},[92,93625,174],{"class":151},[92,93627,481],{"class":102},[92,93629,601],{"class":151},[92,93631,481],{"class":102},[92,93633,174],{"class":151},[92,93635,481],{"class":102},[92,93637,549],{"class":151},[92,93639,481],{"class":102},[92,93641,300],{"class":151},[92,93643,481],{"class":102},[92,93645,294],{"class":151},[92,93647,481],{"class":102},[92,93649,878],{"class":151},[92,93651,481],{"class":102},[92,93653,396],{"class":151},[92,93655,4636],{"class":102},[92,93657,93658],{"class":94,"line":1158},[92,93659,93660],{"class":102},"np.unique(a)\n",[92,93662,93663],{"class":94,"line":1173},[92,93664,93544],{"class":161},[92,93666,93667],{"class":94,"line":1179},[92,93668,93669],{"class":161},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[38,93671,93672],{},"升序形式排序",[33,93674,93676],{"id":93675},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[83,93678,93680],{"className":30359,"code":93679,"language":30361,"meta":10,"style":10},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[89,93681,93682,93730,93735],{"__ignoreMap":10},[92,93683,93684,93686,93688,93690,93692,93694,93696,93698,93700,93702,93704,93706,93708,93710,93712,93714,93716,93718,93720,93722,93724,93726,93728],{"class":94,"line":95},[92,93685,341],{"class":102},[92,93687,148],{"class":98},[92,93689,93004],{"class":102},[92,93691,320],{"class":151},[92,93693,481],{"class":102},[92,93695,180],{"class":151},[92,93697,481],{"class":102},[92,93699,174],{"class":151},[92,93701,481],{"class":102},[92,93703,601],{"class":151},[92,93705,481],{"class":102},[92,93707,174],{"class":151},[92,93709,481],{"class":102},[92,93711,549],{"class":151},[92,93713,481],{"class":102},[92,93715,300],{"class":151},[92,93717,481],{"class":102},[92,93719,294],{"class":151},[92,93721,481],{"class":102},[92,93723,878],{"class":151},[92,93725,481],{"class":102},[92,93727,396],{"class":151},[92,93729,4636],{"class":102},[92,93731,93732],{"class":94,"line":11},[92,93733,93734],{"class":161},"#返回数组中非零元素的索引\n",[92,93736,93737],{"class":94,"line":1158},[92,93738,93739],{"class":102},"np.nonzero(a)\n",[33,93741,93743],{"id":93742},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[83,93745,93747],{"className":30359,"code":93746,"language":30361,"meta":10,"style":10},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[89,93748,93749,93797,93802],{"__ignoreMap":10},[92,93750,93751,93753,93755,93757,93759,93761,93763,93765,93767,93769,93771,93773,93775,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795],{"class":94,"line":95},[92,93752,341],{"class":102},[92,93754,148],{"class":98},[92,93756,93004],{"class":102},[92,93758,320],{"class":151},[92,93760,481],{"class":102},[92,93762,180],{"class":151},[92,93764,481],{"class":102},[92,93766,174],{"class":151},[92,93768,481],{"class":102},[92,93770,601],{"class":151},[92,93772,481],{"class":102},[92,93774,174],{"class":151},[92,93776,481],{"class":102},[92,93778,549],{"class":151},[92,93780,481],{"class":102},[92,93782,300],{"class":151},[92,93784,481],{"class":102},[92,93786,294],{"class":151},[92,93788,481],{"class":102},[92,93790,878],{"class":151},[92,93792,481],{"class":102},[92,93794,396],{"class":151},[92,93796,4636],{"class":102},[92,93798,93799],{"class":94,"line":11},[92,93800,93801],{"class":161},"#计算一组数中最大值与最小值的差，可指定轴\n",[92,93803,93804],{"class":94,"line":1158},[92,93805,93806],{"class":102},"np.ptp(a)\n",[5106,93808,93809],{},"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":10,"searchDepth":11,"depth":11,"links":93811},[93812,93813,93814,93815,93816,93817,93818,93819,93820,93821,93822],{"id":93074,"depth":11,"text":93075},{"id":93117,"depth":11,"text":93118},{"id":93225,"depth":11,"text":93226},{"id":93319,"depth":11,"text":93320},{"id":93359,"depth":11,"text":93360},{"id":93432,"depth":11,"text":93433},{"id":93500,"depth":11,"text":93501},{"id":93552,"depth":11,"text":93553},{"id":93596,"depth":11,"text":93597},{"id":93675,"depth":11,"text":93676},{"id":93742,"depth":11,"text":93743},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93060,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93829,"title":93830,"body":93831,"description":13,"extension":14,"meta":94486,"navigation":17,"path":94487,"seo":94488,"stem":94489,"__hash__":94490},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93832,"toc":94474},[93833,93836,93840,93843,94059,94063,94066,94275,94279,94345,94350,94354,94357,94360,94398,94402,94405,94410,94414,94417,94420,94425,94429,94432,94436,94439,94442,94447,94451,94454,94457,94462,94466,94471],[29,93834,93830],{"id":93835},"_12其他常用函数",[33,93837,93839],{"id":93838},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[38,93841,93842],{},"将数组的数据按照行列复制扩展",[83,93844,93846],{"className":30359,"code":93845,"language":30361,"meta":10,"style":10},"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",[89,93847,93848,93864,93873,93877,93882,93887,93900,93904,93909,93914,93919,93923,93928,93952,93964,93968,93972,93977,93982,93987,93992,93996,94009,94013,94017,94022,94027,94032,94037,94042,94046,94050,94055],{"__ignoreMap":10},[92,93849,93850,93852,93854,93856,93858,93860,93862],{"class":94,"line":95},[92,93851,341],{"class":102},[92,93853,148],{"class":98},[92,93855,92982],{"class":102},[92,93857,320],{"class":151},[92,93859,481],{"class":102},[92,93861,422],{"class":151},[92,93863,109],{"class":102},[92,93865,93866,93869,93871],{"class":94,"line":11},[92,93867,93868],{"class":102},"np.tile(a,",[92,93870,180],{"class":151},[92,93872,109],{"class":102},[92,93874,93875],{"class":94,"line":1158},[92,93876,93544],{"class":161},[92,93878,93879],{"class":94,"line":1173},[92,93880,93881],{"class":161},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[92,93883,93884],{"class":94,"line":1179},[92,93885,93886],{"class":161},"#行复制两次，列复制三次\n",[92,93888,93889,93892,93894,93896,93898],{"class":94,"line":1193},[92,93890,93891],{"class":102},"np.tile(a,(",[92,93893,180],{"class":151},[92,93895,481],{"class":102},[92,93897,174],{"class":151},[92,93899,30478],{"class":102},[92,93901,93902],{"class":94,"line":1199},[92,93903,93544],{"class":161},[92,93905,93906],{"class":94,"line":1290},[92,93907,93908],{"class":207},"'''\n",[92,93910,93911],{"class":94,"line":1296},[92,93912,93913],{"class":207},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[92,93915,93916],{"class":94,"line":1308},[92,93917,93918],{"class":207},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[92,93920,93921],{"class":94,"line":1591},[92,93922,93908],{"class":207},[92,93924,93925],{"class":94,"line":1596},[92,93926,93927],{"class":161},"#创建二维数组\n",[92,93929,93930,93932,93934,93936,93938,93940,93942,93944,93946,93948,93950],{"class":94,"line":1602},[92,93931,93286],{"class":102},[92,93933,148],{"class":98},[92,93935,92982],{"class":102},[92,93937,320],{"class":151},[92,93939,481],{"class":102},[92,93941,626],{"class":151},[92,93943,92987],{"class":102},[92,93945,396],{"class":151},[92,93947,481],{"class":102},[92,93949,174],{"class":151},[92,93951,109],{"class":102},[92,93953,93954,93957,93959,93961],{"class":94,"line":1607},[92,93955,93956],{"class":102},"np.tile(aa,",[92,93958,180],{"class":151},[92,93960,532],{"class":102},[92,93962,93963],{"class":161},"#一个数的时候就是行\n",[92,93965,93966],{"class":94,"line":1621},[92,93967,93544],{"class":161},[92,93969,93970],{"class":94,"line":1626},[92,93971,93908],{"class":207},[92,93973,93974],{"class":94,"line":1632},[92,93975,93976],{"class":207},"array([[ 1,  2,  3,  1,  2,  3],\n",[92,93978,93979],{"class":94,"line":1653},[92,93980,93981],{"class":207},"       [ 4,  5,  6,  4,  5,  6],\n",[92,93983,93984],{"class":94,"line":1658},[92,93985,93986],{"class":207},"       [ 7,  8,  9,  7,  8,  9],\n",[92,93988,93989],{"class":94,"line":1672},[92,93990,93991],{"class":207},"       [10, 11, 12, 10, 11, 12]])\n",[92,93993,93994],{"class":94,"line":1677},[92,93995,93908],{"class":207},[92,93997,93998,94001,94003,94005,94007],{"class":94,"line":1706},[92,93999,94000],{"class":102},"np.tile(aa,(",[92,94002,180],{"class":151},[92,94004,481],{"class":102},[92,94006,174],{"class":151},[92,94008,30478],{"class":102},[92,94010,94011],{"class":94,"line":1711},[92,94012,93544],{"class":161},[92,94014,94015],{"class":94,"line":1728},[92,94016,93908],{"class":207},[92,94018,94019],{"class":94,"line":1733},[92,94020,94021],{"class":207},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[92,94023,94024],{"class":94,"line":1738},[92,94025,94026],{"class":207},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[92,94028,94029],{"class":94,"line":1743},[92,94030,94031],{"class":207},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[92,94033,94034],{"class":94,"line":1757},[92,94035,94036],{"class":207},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[92,94038,94039],{"class":94,"line":1762},[92,94040,94041],{"class":207},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[92,94043,94044],{"class":94,"line":2556},[92,94045,94026],{"class":207},[92,94047,94048],{"class":94,"line":2570},[92,94049,94031],{"class":207},[92,94051,94052],{"class":94,"line":2578},[92,94053,94054],{"class":207},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[92,94056,94057],{"class":94,"line":2583},[92,94058,93908],{"class":207},[33,94060,94062],{"id":94061},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[38,94064,94065],{},"repeat()将数组中的每个元素重复若干次",[83,94067,94069],{"className":30359,"code":94068,"language":30361,"meta":10,"style":10},"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",[89,94070,94071,94087,94096,94100,94105,94129,94134,94143,94147,94152,94156,94161,94177,94181,94185,94190,94195,94200,94204,94209,94213,94218,94223,94227,94243,94247,94251,94256,94261,94266,94271],{"__ignoreMap":10},[92,94072,94073,94075,94077,94079,94081,94083,94085],{"class":94,"line":95},[92,94074,341],{"class":102},[92,94076,148],{"class":98},[92,94078,92982],{"class":102},[92,94080,320],{"class":151},[92,94082,481],{"class":102},[92,94084,422],{"class":151},[92,94086,109],{"class":102},[92,94088,94089,94092,94094],{"class":94,"line":11},[92,94090,94091],{"class":102},"np.repeat(a,",[92,94093,174],{"class":151},[92,94095,109],{"class":102},[92,94097,94098],{"class":94,"line":1158},[92,94099,93544],{"class":161},[92,94101,94102],{"class":94,"line":1173},[92,94103,94104],{"class":161},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[92,94106,94107,94109,94111,94113,94115,94117,94119,94121,94123,94125,94127],{"class":94,"line":1179},[92,94108,93286],{"class":102},[92,94110,148],{"class":98},[92,94112,92982],{"class":102},[92,94114,320],{"class":151},[92,94116,481],{"class":102},[92,94118,626],{"class":151},[92,94120,92987],{"class":102},[92,94122,396],{"class":151},[92,94124,481],{"class":102},[92,94126,174],{"class":151},[92,94128,109],{"class":102},[92,94130,94131],{"class":94,"line":1193},[92,94132,94133],{"class":161},"#这个重复之后二维变成一维\n",[92,94135,94136,94139,94141],{"class":94,"line":1199},[92,94137,94138],{"class":102},"np.repeat(aa,",[92,94140,180],{"class":151},[92,94142,109],{"class":102},[92,94144,94145],{"class":94,"line":1290},[92,94146,93908],{"class":207},[92,94148,94149],{"class":94,"line":1296},[92,94150,94151],{"class":207},"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",[92,94153,94154],{"class":94,"line":1308},[92,94155,93908],{"class":207},[92,94157,94158],{"class":94,"line":1591},[92,94159,94160],{"class":161},"#指定axis\n",[92,94162,94163,94165,94167,94169,94171,94173,94175],{"class":94,"line":1596},[92,94164,94138],{"class":102},[92,94166,180],{"class":151},[92,94168,481],{"class":102},[92,94170,47495],{"class":5196},[92,94172,148],{"class":98},[92,94174,294],{"class":151},[92,94176,109],{"class":102},[92,94178,94179],{"class":94,"line":1602},[92,94180,93544],{"class":161},[92,94182,94183],{"class":94,"line":1607},[92,94184,93908],{"class":207},[92,94186,94187],{"class":94,"line":1621},[92,94188,94189],{"class":207},"array([[ 1,  2,  3],\n",[92,94191,94192],{"class":94,"line":1626},[92,94193,94194],{"class":207},"       [ 1,  2,  3],\n",[92,94196,94197],{"class":94,"line":1632},[92,94198,94199],{"class":207},"       [ 4,  5,  6],\n",[92,94201,94202],{"class":94,"line":1653},[92,94203,94199],{"class":207},[92,94205,94206],{"class":94,"line":1658},[92,94207,94208],{"class":207},"       [ 7,  8,  9],\n",[92,94210,94211],{"class":94,"line":1672},[92,94212,94208],{"class":207},[92,94214,94215],{"class":94,"line":1677},[92,94216,94217],{"class":207},"       [10, 11, 12],\n",[92,94219,94220],{"class":94,"line":1706},[92,94221,94222],{"class":207},"       [10, 11, 12]])\n",[92,94224,94225],{"class":94,"line":1711},[92,94226,93908],{"class":207},[92,94228,94229,94231,94233,94235,94237,94239,94241],{"class":94,"line":1728},[92,94230,94138],{"class":102},[92,94232,180],{"class":151},[92,94234,481],{"class":102},[92,94236,47495],{"class":5196},[92,94238,148],{"class":98},[92,94240,320],{"class":151},[92,94242,109],{"class":102},[92,94244,94245],{"class":94,"line":1733},[92,94246,93544],{"class":161},[92,94248,94249],{"class":94,"line":1738},[92,94250,93908],{"class":207},[92,94252,94253],{"class":94,"line":1743},[92,94254,94255],{"class":207},"array([[ 1,  1,  2,  2,  3,  3],\n",[92,94257,94258],{"class":94,"line":1757},[92,94259,94260],{"class":207},"       [ 4,  4,  5,  5,  6,  6],\n",[92,94262,94263],{"class":94,"line":1762},[92,94264,94265],{"class":207},"       [ 7,  7,  8,  8,  9,  9],\n",[92,94267,94268],{"class":94,"line":2556},[92,94269,94270],{"class":207},"       [10, 10, 11, 11, 12, 12]])\n",[92,94272,94273],{"class":94,"line":2570},[92,94274,93908],{"class":207},[33,94276,94278],{"id":94277},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[83,94280,94282],{"className":30359,"code":94281,"language":30361,"meta":10,"style":10},"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",[89,94283,94284,94300,94305,94317,94321,94326,94336,94340],{"__ignoreMap":10},[92,94285,94286,94288,94290,94292,94294,94296,94298],{"class":94,"line":95},[92,94287,341],{"class":102},[92,94289,148],{"class":98},[92,94291,92982],{"class":102},[92,94293,320],{"class":151},[92,94295,481],{"class":102},[92,94297,422],{"class":151},[92,94299,109],{"class":102},[92,94301,94302],{"class":94,"line":11},[92,94303,94304],{"class":161},"#array([，2，3，4])\n",[92,94306,94307,94310,94312,94314],{"class":94,"line":1158},[92,94308,94309],{"class":102},"np.roll(a,",[92,94311,180],{"class":151},[92,94313,532],{"class":102},[92,94315,94316],{"class":161},"#传正数向后调多少位，传负数向前调多少位\n",[92,94318,94319],{"class":94,"line":1173},[92,94320,93544],{"class":161},[92,94322,94323],{"class":94,"line":1179},[92,94324,94325],{"class":161},"#array([3, 4, 1, 2])\n",[92,94327,94328,94330,94332,94334],{"class":94,"line":1193},[92,94329,94309],{"class":102},[92,94331,635],{"class":98},[92,94333,320],{"class":151},[92,94335,109],{"class":102},[92,94337,94338],{"class":94,"line":1199},[92,94339,93544],{"class":161},[92,94341,94342],{"class":94,"line":1290},[92,94343,94344],{"class":161},"#array([2, 3, 4, 1])\n",[38,94346,94347],{},[1441,94348],{"alt":10,"src":94349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[33,94351,94353],{"id":94352},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[38,94355,94356],{},"resize()重新调整数组的大小",[38,94358,94359],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[83,94361,94363],{"className":30359,"code":94362,"language":30361,"meta":10,"style":10},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[89,94364,94365,94370,94383],{"__ignoreMap":10},[92,94366,94367],{"class":94,"line":95},[92,94368,94369],{"class":161},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[92,94371,94372,94375,94377,94379,94381],{"class":94,"line":11},[92,94373,94374],{"class":102},"np.resize(aa,(",[92,94376,180],{"class":151},[92,94378,481],{"class":102},[92,94380,447],{"class":151},[92,94382,30478],{"class":102},[92,94384,94385,94387,94389,94391,94393,94395],{"class":94,"line":1158},[92,94386,94374],{"class":102},[92,94388,180],{"class":151},[92,94390,481],{"class":102},[92,94392,523],{"class":151},[92,94394,82751],{"class":102},[92,94396,94397],{"class":161},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[33,94399,94401],{"id":94400},"_125-placeput函数","12.5 place()\u002Fput()函数",[38,94403,94404],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[38,94406,94407],{},[1441,94408],{"alt":10,"src":94409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[33,94411,94413],{"id":94412},"_126-保存加载文件","12.6 保存加载文件",[38,94415,94416],{},"savetxt():将数据保存到txt文件中",[38,94418,94419],{},"loadtxt():从文件加载数据",[38,94421,94422],{},[1441,94423],{"alt":10,"src":94424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[33,94426,94428],{"id":94427},"_127-genfromtxt函数","12.7 genfromtxt()函数",[38,94430,94431],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[33,94433,94435],{"id":94434},"_128-anyall函数","12.8 any()\u002Fall()函数",[38,94437,94438],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[38,94440,94441],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[38,94443,94444],{},[1441,94445],{"alt":10,"src":94446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[33,94448,94450],{"id":94449},"_129-where语句","12.9 where语句",[38,94452,94453],{},"np.where(条件,x,y)",[38,94455,94456],{},"如果条件为True,对应值为x,否则对应值为y",[38,94458,94459],{},[1441,94460],{"alt":10,"src":94461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[33,94463,94465],{"id":94464},"_1210-dot矩阵","12.10 dot()矩阵",[38,94467,94468],{},[1441,94469],{"alt":10,"src":94470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5106,94472,94473],{},"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":10,"searchDepth":11,"depth":11,"links":94475},[94476,94477,94478,94479,94480,94481,94482,94483,94484,94485],{"id":93838,"depth":11,"text":93839},{"id":94061,"depth":11,"text":94062},{"id":94277,"depth":11,"text":94278},{"id":94352,"depth":11,"text":94353},{"id":94400,"depth":11,"text":94401},{"id":94412,"depth":11,"text":94413},{"id":94427,"depth":11,"text":94428},{"id":94434,"depth":11,"text":94435},{"id":94449,"depth":11,"text":94450},{"id":94464,"depth":11,"text":94465},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93830,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94492,"title":94493,"body":94494,"description":13,"extension":14,"meta":94847,"navigation":17,"path":94848,"seo":94849,"stem":94850,"__hash__":94851},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94495,"toc":94845},[94496,94499,94502,94505,94508,94511,94576,94578,94842],[29,94497,94493],{"id":94498},"_13数组排序",[38,94500,94501],{},"排序主要用到的方法是np.sort和np.argsort",[38,94503,94504],{},"其中np.sort()对数组直接排序",[38,94506,94507],{},"而np.argsort()是返回排序后的原始索引",[38,94509,94510],{},"①一维数组",[83,94512,94514],{"className":30359,"code":94513,"language":30361,"meta":10,"style":10},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[89,94515,94516,94520,94560,94568],{"__ignoreMap":10},[92,94517,94518],{"class":94,"line":95},[92,94519,93085],{"class":161},[92,94521,94522,94524,94526,94528,94530,94532,94534,94536,94538,94540,94542,94544,94546,94548,94550,94552,94554,94556,94558],{"class":94,"line":11},[92,94523,341],{"class":102},[92,94525,148],{"class":98},[92,94527,93004],{"class":102},[92,94529,174],{"class":151},[92,94531,481],{"class":102},[92,94533,601],{"class":151},[92,94535,481],{"class":102},[92,94537,498],{"class":151},[92,94539,481],{"class":102},[92,94541,878],{"class":151},[92,94543,481],{"class":102},[92,94545,382],{"class":151},[92,94547,481],{"class":102},[92,94549,996],{"class":151},[92,94551,481],{"class":102},[92,94553,447],{"class":151},[92,94555,481],{"class":102},[92,94557,549],{"class":151},[92,94559,4636],{"class":102},[92,94561,94562,94565],{"class":94,"line":1158},[92,94563,94564],{"class":102},"np.sort(a)",[92,94566,94567],{"class":161},"#升序排序\n",[92,94569,94570,94573],{"class":94,"line":1173},[92,94571,94572],{"class":102},"np.argsort(a)",[92,94574,94575],{"class":161},"#按照元素大小来索引排序\n",[38,94577,93271],{},[83,94579,94581],{"className":30359,"code":94580,"language":30361,"meta":10,"style":10},"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",[89,94582,94583,94595,94621,94626,94630,94635,94640,94645,94650,94654,94662,94666,94671,94676,94681,94686,94690,94695,94708,94712,94717,94722,94727,94732,94736,94741,94753,94757,94761,94765,94769,94773,94777,94782,94797,94802,94811,94816,94820,94824,94829,94833,94838],{"__ignoreMap":10},[92,94584,94585,94588,94590,94592],{"class":94,"line":95},[92,94586,94587],{"class":102},"np.random.seed(",[92,94589,294],{"class":151},[92,94591,532],{"class":102},[92,94593,94594],{"class":161},"#保证每次值一样\n",[92,94596,94597,94599,94601,94603,94605,94607,94609,94611,94613,94615,94617,94619],{"class":94,"line":11},[92,94598,93286],{"class":102},[92,94600,148],{"class":98},[92,94602,93094],{"class":102},[92,94604,414],{"class":151},[92,94606,481],{"class":102},[92,94608,31477],{"class":5196},[92,94610,148],{"class":98},[92,94612,103],{"class":102},[92,94614,396],{"class":151},[92,94616,481],{"class":102},[92,94618,447],{"class":151},[92,94620,30478],{"class":102},[92,94622,94623],{"class":94,"line":1158},[92,94624,94625],{"class":161},"#原数组：\n",[92,94627,94628],{"class":94,"line":1173},[92,94629,93908],{"class":207},[92,94631,94632],{"class":94,"line":1179},[92,94633,94634],{"class":207},"array([[44, 47, 64, 67, 67,  9],\n",[92,94636,94637],{"class":94,"line":1193},[92,94638,94639],{"class":207},"       [83, 21, 36, 87, 70, 88],\n",[92,94641,94642],{"class":94,"line":1199},[92,94643,94644],{"class":207},"       [88, 12, 58, 65, 39, 87],\n",[92,94646,94647],{"class":94,"line":1290},[92,94648,94649],{"class":207},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[92,94651,94652],{"class":94,"line":1296},[92,94653,93908],{"class":207},[92,94655,94656,94659],{"class":94,"line":1308},[92,94657,94658],{"class":102},"np.sort(aa)",[92,94660,94661],{"class":161},"#每行进行了排序\n",[92,94663,94664],{"class":94,"line":1591},[92,94665,93908],{"class":207},[92,94667,94668],{"class":94,"line":1596},[92,94669,94670],{"class":207},"array([[ 9, 44, 47, 64, 67, 67],\n",[92,94672,94673],{"class":94,"line":1602},[92,94674,94675],{"class":207},"       [21, 36, 70, 83, 87, 88],\n",[92,94677,94678],{"class":94,"line":1607},[92,94679,94680],{"class":207},"       [12, 39, 58, 65, 87, 88],\n",[92,94682,94683],{"class":94,"line":1621},[92,94684,94685],{"class":207},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[92,94687,94688],{"class":94,"line":1626},[92,94689,93908],{"class":207},[92,94691,94692],{"class":94,"line":1632},[92,94693,94694],{"class":161},"#axis=0时\n",[92,94696,94697,94700,94702,94704,94706],{"class":94,"line":1653},[92,94698,94699],{"class":102},"np.sort(aa,",[92,94701,47495],{"class":5196},[92,94703,148],{"class":98},[92,94705,294],{"class":151},[92,94707,109],{"class":102},[92,94709,94710],{"class":94,"line":1658},[92,94711,93908],{"class":207},[92,94713,94714],{"class":94,"line":1672},[92,94715,94716],{"class":207},"array([[44, 12, 36, 37, 25,  9],\n",[92,94718,94719],{"class":94,"line":1677},[92,94720,94721],{"class":207},"       [46, 21, 58, 65, 39, 77],\n",[92,94723,94724],{"class":94,"line":1706},[92,94725,94726],{"class":207},"       [83, 47, 64, 67, 67, 87],\n",[92,94728,94729],{"class":94,"line":1711},[92,94730,94731],{"class":207},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[92,94733,94734],{"class":94,"line":1728},[92,94735,93908],{"class":207},[92,94737,94738],{"class":94,"line":1733},[92,94739,94740],{"class":161},"#axis=1时,为默认值\n",[92,94742,94743,94745,94747,94749,94751],{"class":94,"line":1738},[92,94744,94699],{"class":102},[92,94746,47495],{"class":5196},[92,94748,148],{"class":98},[92,94750,320],{"class":151},[92,94752,109],{"class":102},[92,94754,94755],{"class":94,"line":1743},[92,94756,93908],{"class":207},[92,94758,94759],{"class":94,"line":1757},[92,94760,94670],{"class":207},[92,94762,94763],{"class":94,"line":1762},[92,94764,94675],{"class":207},[92,94766,94767],{"class":94,"line":2556},[92,94768,94680],{"class":207},[92,94770,94771],{"class":94,"line":2570},[92,94772,94685],{"class":207},[92,94774,94775],{"class":94,"line":2578},[92,94776,93908],{"class":207},[92,94778,94779],{"class":94,"line":2583},[92,94780,94781],{"class":161},"#按最后一列排序\n",[92,94783,94784,94786,94788,94791,94793,94795],{"class":94,"line":2589},[92,94785,366],{"class":102},[92,94787,148],{"class":98},[92,94789,94790],{"class":102},"aa[:,",[92,94792,635],{"class":98},[92,94794,320],{"class":151},[92,94796,33227],{"class":102},[92,94798,94799],{"class":94,"line":2595},[92,94800,94801],{"class":161},"#获取最后一列排好序的索引\n",[92,94803,94804,94806,94808],{"class":94,"line":2600},[92,94805,74038],{"class":102},[92,94807,148],{"class":98},[92,94809,94810],{"class":102},"np.argsort(b)\n",[92,94812,94813],{"class":94,"line":7928},[92,94814,94815],{"class":102},"aa[index]\n",[92,94817,94818],{"class":94,"line":7952},[92,94819,93908],{"class":207},[92,94821,94822],{"class":94,"line":7957},[92,94823,94634],{"class":207},[92,94825,94826],{"class":94,"line":7963},[92,94827,94828],{"class":207},"       [46, 88, 81, 37, 25, 77],\n",[92,94830,94831],{"class":94,"line":7990},[92,94832,94644],{"class":207},[92,94834,94835],{"class":94,"line":7995},[92,94836,94837],{"class":207},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[92,94839,94840],{"class":94,"line":8001},[92,94841,93908],{"class":207},[5106,94843,94844],{},"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":10,"searchDepth":11,"depth":11,"links":94846},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94493,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94853,"title":94854,"body":94855,"description":13,"extension":14,"meta":94885,"navigation":17,"path":94886,"seo":94887,"stem":94888,"__hash__":94889},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94856,"toc":94883},[94857,94860,94863,94866,94869,94872,94875,94878],[29,94858,94854],{"id":94859},"_14广播机制",[38,94861,94862],{},"广播的规则：",[38,94864,94865],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[38,94867,94868],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[38,94870,94871],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[38,94873,94874],{},"3.如果没有维度形状为1，则会引发异常",[38,94876,94877],{},"也就是只有维度或者个数为1才可以进行广播操作",[38,94879,94880],{},[1441,94881],{"alt":10,"src":94882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":10,"searchDepth":11,"depth":11,"links":94884},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94854,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94891,"title":94892,"body":94893,"description":13,"extension":14,"meta":94991,"navigation":17,"path":94992,"seo":94993,"stem":94994,"__hash__":94995},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94894,"toc":94989},[94895,94898,94901,94986],[29,94896,94892],{"id":94897},"_15比较掩码",[38,94899,94900],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[83,94902,94904],{"className":30359,"code":94903,"language":30361,"meta":10,"style":10},"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",[89,94905,94906,94952,94963,94977,94981],{"__ignoreMap":10},[92,94907,94908,94910,94912,94915,94917,94919,94921,94923,94925,94927,94929,94931,94933,94935,94937,94939,94941,94943,94945,94947,94949],{"class":94,"line":95},[92,94909,341],{"class":102},[92,94911,148],{"class":98},[92,94913,94914],{"class":102},"np.array([[",[92,94916,320],{"class":151},[92,94918,481],{"class":102},[92,94920,180],{"class":151},[92,94922,481],{"class":102},[92,94924,174],{"class":151},[92,94926,48011],{"class":102},[92,94928,575],{"class":151},[92,94930,481],{"class":102},[92,94932,601],{"class":151},[92,94934,481],{"class":102},[92,94936,626],{"class":151},[92,94938,48011],{"class":102},[92,94940,828],{"class":151},[92,94942,481],{"class":102},[92,94944,853],{"class":151},[92,94946,481],{"class":102},[92,94948,878],{"class":151},[92,94950,94951],{"class":102},"]])\n",[92,94953,94954,94956,94958,94960],{"class":94,"line":11},[92,94955,341],{"class":102},[92,94957,1013],{"class":98},[92,94959,803],{"class":151},[92,94961,94962],{"class":161},"#结果是一个由True,False组成的数组\n",[92,94964,94965,94968,94970,94972,94974],{"class":94,"line":1158},[92,94966,94967],{"class":102},"a[a",[92,94969,1013],{"class":98},[92,94971,803],{"class":151},[92,94973,1043],{"class":102},[92,94975,94976],{"class":161},"#小于20的元素会存到这个数组中\n",[92,94978,94979],{"class":94,"line":1173},[92,94980,93544],{"class":161},[92,94982,94983],{"class":94,"line":1179},[92,94984,94985],{"class":161},"#array([ 1,  2,  3, 11, 12, 13])\n",[5106,94987,94988],{},"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":10,"searchDepth":11,"depth":11,"links":94990},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94892,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":94997,"title":94998,"body":94999,"description":13,"extension":14,"meta":95091,"navigation":17,"path":95092,"seo":95093,"stem":95094,"__hash__":95095},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95000,"toc":95089},[95001,95004,95007,95010,95013,95016,95081,95086],[29,95002,94998],{"id":95003},"_16魔法命令time",[38,95005,95006],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[38,95008,95009],{},"%:行模式",[38,95011,95012],{},"%%:单元格模式",[38,95014,95015],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[83,95017,95019],{"className":30359,"code":95018,"language":30361,"meta":10,"style":10},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[89,95020,95021,95026,95033,95038,95047,95060,95064,95072],{"__ignoreMap":10},[92,95022,95023],{"class":94,"line":95},[92,95024,95025],{"class":161},"#程序执行时间\n",[92,95027,95028,95030],{"class":94,"line":11},[92,95029,30373],{"class":98},[92,95031,95032],{"class":102}," time \n",[92,95034,95035],{"class":94,"line":1158},[92,95036,95037],{"class":161},"#获取时间\n",[92,95039,95040,95043,95045],{"class":94,"line":1173},[92,95041,95042],{"class":102},"start",[92,95044,148],{"class":98},[92,95046,32399],{"class":102},[92,95048,95049,95052,95055,95057],{"class":94,"line":1179},[92,95050,95051],{"class":102},"time.sleep(",[92,95053,95054],{"class":151},"0.4",[92,95056,532],{"class":102},[92,95058,95059],{"class":161},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[92,95061,95062],{"class":94,"line":1193},[92,95063,95037],{"class":161},[92,95065,95066,95068,95070],{"class":94,"line":1199},[92,95067,45782],{"class":102},[92,95069,148],{"class":98},[92,95071,32399],{"class":102},[92,95073,95074,95076,95078],{"class":94,"line":1290},[92,95075,45782],{"class":102},[92,95077,635],{"class":98},[92,95079,95080],{"class":102},"start\n",[38,95082,95083],{},[1441,95084],{"alt":10,"src":95085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5106,95087,95088],{},"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":10,"searchDepth":11,"depth":11,"links":95090},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":94998,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95097,"title":95098,"body":95099,"description":13,"extension":14,"meta":95134,"navigation":17,"path":95135,"seo":95136,"stem":95137,"__hash__":95138},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95100,"toc":95132},[95101,95104,95107,95110,95113,95116,95119,95122,95127],[29,95102,95098],{"id":95103},"_17魔法命令timeit",[38,95105,95106],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[38,95108,95109],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[38,95111,95112],{},"单元格模式：",[38,95114,95115],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[38,95117,95118],{},"初始化语句执行次数由轮数来决定",[38,95120,95121],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[38,95123,95124],{},[1441,95125],{"alt":10,"src":95126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[38,95128,95129],{},[1441,95130],{"alt":10,"src":95131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":10,"searchDepth":11,"depth":11,"links":95133},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95098,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95140,"title":95141,"body":95142,"description":13,"extension":14,"meta":95160,"navigation":17,"path":95161,"seo":95162,"stem":95163,"__hash__":95164},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95143,"toc":95158},[95144,95147,95150,95153],[29,95145,95141],{"id":95146},"_18魔法命令writefile和run",[38,95148,95149],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[38,95151,95152],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[38,95154,95155],{},[1441,95156],{"alt":10,"src":95157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":10,"searchDepth":11,"depth":11,"links":95159},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95141,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95166,"title":95167,"body":95168,"description":13,"extension":14,"meta":95221,"navigation":17,"path":95222,"seo":95223,"stem":95224,"__hash__":95225},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95169,"toc":95219},[95170,95173,95176,95178,95181,95184,95189,95192,95195,95198,95201,95204,95207,95210,95213,95216],[29,95171,95167],{"id":95172},"_19魔法命令memit",[38,95174,95175],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[38,95177,24580],{},[38,95179,95180],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[38,95182,95183],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[38,95185,95186],{},[1441,95187],{"alt":10,"src":95188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[38,95190,95191],{},"补充：",[38,95193,95194],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[38,95196,95197],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[38,95199,95200],{},"解决方法：",[38,95202,95203],{},"1.cmd",[38,95205,95206],{},"2.依次输入以下代码：",[38,95208,95209],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[38,95211,95212],{},"pip install --upgrade ipython",[38,95214,95215],{},"#升级 memory_profiler 和 setuptools",[38,95217,95218],{},"pip install --upgrade memory_profiler setuptools",{"title":10,"searchDepth":11,"depth":11,"links":95220},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95167,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95227,"title":95228,"body":95229,"description":13,"extension":14,"meta":96875,"navigation":17,"path":96876,"seo":96877,"stem":96878,"__hash__":96879},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95230,"toc":96845},[95231,95234,95238,95242,95303,95306,95311,95315,95320,95325,95330,95335,95338,95343,95347,95351,95384,95387,95390,95393,95445,95448,95484,95487,95529,95533,95554,95556,95593,95595,95600,95602,95607,95611,95614,95642,95646,95650,95703,95707,95799,95803,95807,95810,95815,95819,95844,95849,95853,95856,95859,95862,95865,95868,95871,95874,95886,95890,95894,95897,95929,95932,95955,95958,95984,95987,96013,96016,96050,96053,96115,96119,96122,96126,96129,96155,96158,96161,96166,96169,96238,96240,96245,96306,96309,96320,96326,96331,96335,96338,96351,96355,96370,96372,96395,96397,96423,96426,96429,96432,96480,96482,96487,96491,96495,96522,96526,96553,96556,96561,96566,96656,96660,96718,96723,96726,96729,96771,96775,96831,96836,96839,96842],[29,95232,95228],{"id":95233},"_2创建数组",[33,95235,95237],{"id":95236},"_21-array函数创建数组","2.1 array()函数创建数组",[63,95239,95241],{"id":95240},"_221-函数语句","2.2.1 函数语句",[83,95243,95245],{"className":30359,"code":95244,"language":30361,"meta":10,"style":10},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[89,95246,95247],{"__ignoreMap":10},[92,95248,95249,95252,95255,95257,95259,95261,95263,95265,95268,95270,95273,95275,95278,95280,95282,95284,95287,95289,95292,95294,95297,95299,95301],{"class":94,"line":95},[92,95250,95251],{"class":102},"numpy.array(",[92,95253,95254],{"class":151},"object",[92,95256,12415],{"class":102},[92,95258,93480],{"class":5196},[92,95260,13544],{"class":98},[92,95262,38914],{"class":151},[92,95264,12415],{"class":102},[92,95266,95267],{"class":5196},"copy",[92,95269,13544],{"class":98},[92,95271,95272],{"class":151}," True",[92,95274,12415],{"class":102},[92,95276,95277],{"class":5196},"order",[92,95279,13544],{"class":98},[92,95281,38914],{"class":151},[92,95283,12415],{"class":102},[92,95285,95286],{"class":5196},"subok",[92,95288,13544],{"class":98},[92,95290,95291],{"class":151}," False",[92,95293,12415],{"class":102},[92,95295,95296],{"class":5196},"ndmin",[92,95298,13544],{"class":98},[92,95300,4072],{"class":151},[92,95302,109],{"class":102},[38,95304,95305],{},"参数：",[38,95307,95308],{},[1441,95309],{"alt":10,"src":95310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[63,95312,95314],{"id":95313},"_222-实例","2.2.2 实例",[38,95316,95317],{},[1441,95318],{"alt":10,"src":95319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[38,95321,95322],{},[1441,95323],{"alt":10,"src":95324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[38,95326,95327],{},[1441,95328],{"alt":10,"src":95329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[38,95331,95332],{},[1441,95333],{"alt":10,"src":95334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[38,95336,95337],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[38,95339,95340],{},[1441,95341],{"alt":10,"src":95342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[33,95344,95346],{"id":95345},"_22-随机数创建数组","2.2 随机数创建数组",[63,95348,95350],{"id":95349},"_221-random语句","2.2.1 random语句",[83,95352,95354],{"className":30359,"code":95353,"language":30361,"meta":10,"style":10},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[89,95355,95356,95361,95366,95374,95379],{"__ignoreMap":10},[92,95357,95358],{"class":94,"line":95},[92,95359,95360],{"class":161},"#random.random()\n",[92,95362,95363],{"class":94,"line":11},[92,95364,95365],{"class":161},"#确定随机种子,就是每次运行结果是相同的\n",[92,95367,95368,95370,95372],{"class":94,"line":1158},[92,95369,94587],{"class":102},[92,95371,294],{"class":151},[92,95373,109],{"class":102},[92,95375,95376],{"class":94,"line":1173},[92,95377,95378],{"class":102},"np.random.random()\n",[92,95380,95381],{"class":94,"line":1179},[92,95382,95383],{"class":161},"#生成一个随机的数目\n",[38,95385,95386],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[38,95388,95389],{},"可以指定数组形状 size",[38,95391,95392],{},"①生成一维数组",[83,95394,95396],{"className":30359,"code":95395,"language":30361,"meta":10,"style":10},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[89,95397,95398,95403,95416,95421,95437],{"__ignoreMap":10},[92,95399,95400],{"class":94,"line":95},[92,95401,95402],{"class":161},"#random.random(size())\n",[92,95404,95405,95408,95410,95412,95414],{"class":94,"line":11},[92,95406,95407],{"class":102},"np.random.random(",[92,95409,31477],{"class":5196},[92,95411,148],{"class":98},[92,95413,422],{"class":151},[92,95415,109],{"class":102},[92,95417,95418],{"class":94,"line":1158},[92,95419,95420],{"class":161},"#生成一位的五个元素\n",[92,95422,95423,95425,95427,95429,95431,95433,95435],{"class":94,"line":1173},[92,95424,341],{"class":102},[92,95426,148],{"class":98},[92,95428,95407],{"class":102},[92,95430,31477],{"class":5196},[92,95432,148],{"class":98},[92,95434,396],{"class":151},[92,95436,109],{"class":102},[92,95438,95439,95442],{"class":94,"line":1179},[92,95440,95441],{"class":102},"a.shape ",[92,95443,95444],{"class":161},"#输出数组形状\n",[38,95446,95447],{},"②生成二维数组",[83,95449,95451],{"className":30359,"code":95450,"language":30361,"meta":10,"style":10},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[89,95452,95453,95457,95479],{"__ignoreMap":10},[92,95454,95455],{"class":94,"line":95},[92,95456,93281],{"class":161},[92,95458,95459,95461,95463,95465,95467,95469,95471,95473,95475,95477],{"class":94,"line":11},[92,95460,93286],{"class":102},[92,95462,148],{"class":98},[92,95464,95407],{"class":102},[92,95466,31477],{"class":5196},[92,95468,148],{"class":98},[92,95470,103],{"class":102},[92,95472,396],{"class":151},[92,95474,481],{"class":102},[92,95476,422],{"class":151},[92,95478,30478],{"class":102},[92,95480,95481],{"class":94,"line":1158},[92,95482,95483],{"class":161},"#生成四行五列的数组\n",[38,95485,95486],{},"③生成三维数组",[83,95488,95490],{"className":30359,"code":95489,"language":30361,"meta":10,"style":10},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[89,95491,95492,95497,95524],{"__ignoreMap":10},[92,95493,95494],{"class":94,"line":95},[92,95495,95496],{"class":161},"#三维数组\n",[92,95498,95499,95502,95504,95506,95508,95510,95512,95514,95516,95518,95520,95522],{"class":94,"line":11},[92,95500,95501],{"class":102},"aaa",[92,95503,148],{"class":98},[92,95505,95407],{"class":102},[92,95507,31477],{"class":5196},[92,95509,148],{"class":98},[92,95511,103],{"class":102},[92,95513,180],{"class":151},[92,95515,481],{"class":102},[92,95517,174],{"class":151},[92,95519,481],{"class":102},[92,95521,396],{"class":151},[92,95523,30478],{"class":102},[92,95525,95526],{"class":94,"line":1158},[92,95527,95528],{"class":102},"aaa.shape\n",[63,95530,95532],{"id":95531},"_222-randint语句","2.2.2 randint语句",[83,95534,95536],{"className":30359,"code":95535,"language":30361,"meta":10,"style":10},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[89,95537,95538,95543],{"__ignoreMap":10},[92,95539,95540],{"class":94,"line":95},[92,95541,95542],{"class":161},"#生成随机的整数 random.randint(low,high,size)\n",[92,95544,95545,95547,95549,95551],{"class":94,"line":11},[92,95546,93094],{"class":102},[92,95548,422],{"class":151},[92,95550,13694],{"class":102},[92,95552,95553],{"class":161},"#0~5中的随机一个数\n",[38,95555,95392],{},[83,95557,95559],{"className":30359,"code":95558,"language":30361,"meta":10,"style":10},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[89,95560,95561,95566,95588],{"__ignoreMap":10},[92,95562,95563],{"class":94,"line":95},[92,95564,95565],{"class":161},"#一维\n",[92,95567,95568,95570,95572,95574,95576,95578,95580,95582,95584,95586],{"class":94,"line":11},[92,95569,93094],{"class":102},[92,95571,320],{"class":151},[92,95573,481],{"class":102},[92,95575,575],{"class":151},[92,95577,481],{"class":102},[92,95579,31477],{"class":5196},[92,95581,148],{"class":98},[92,95583,103],{"class":102},[92,95585,549],{"class":151},[92,95587,30478],{"class":102},[92,95589,95590],{"class":94,"line":1158},[92,95591,95592],{"class":161},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[38,95594,95447],{},[38,95596,95597],{},[1441,95598],{"alt":10,"src":95599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[38,95601,95486],{},[38,95603,95604],{},[1441,95605],{"alt":10,"src":95606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[63,95608,95610],{"id":95609},"_222-rand语句","2.2.2 rand语句",[38,95612,95613],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[83,95615,95617],{"className":30359,"code":95616,"language":30361,"meta":10,"style":10},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[89,95618,95619,95632,95637],{"__ignoreMap":10},[92,95620,95621,95624,95626,95628,95630],{"class":94,"line":95},[92,95622,95623],{"class":102},"np.random.rand(",[92,95625,414],{"class":151},[92,95627,481],{"class":102},[92,95629,549],{"class":151},[92,95631,109],{"class":102},[92,95633,95634],{"class":94,"line":11},[92,95635,95636],{"class":161},"#第一个参数100：行数，表示有100个样本\n",[92,95638,95639],{"class":94,"line":1158},[92,95640,95641],{"class":161},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[33,95643,95645],{"id":95644},"_23-arange创建数组","2.3 arange()创建数组",[63,95647,95649],{"id":95648},"_231-函数语句","2.3.1 函数语句",[83,95651,95653],{"className":30359,"code":95652,"language":30361,"meta":10,"style":10},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[89,95654,95655,95669,95674,95679,95684,95689,95694,95699],{"__ignoreMap":10},[92,95656,95657,95660,95662,95664,95667],{"class":94,"line":95},[92,95658,95659],{"class":102},"numpy.arange([start,] stop[, step], ",[92,95661,93480],{"class":5196},[92,95663,148],{"class":98},[92,95665,95666],{"class":151},"None",[92,95668,109],{"class":102},[92,95670,95671],{"class":94,"line":11},[92,95672,95673],{"class":161},"#参数\n",[92,95675,95676],{"class":94,"line":1158},[92,95677,95678],{"class":207},"\"\"\"\n",[92,95680,95681],{"class":94,"line":1173},[92,95682,95683],{"class":207},"start:起始值，可选，默认从 0 开始。\n",[92,95685,95686],{"class":94,"line":1179},[92,95687,95688],{"class":207},"stop:结束值（不包含该值）。\n",[92,95690,95691],{"class":94,"line":1193},[92,95692,95693],{"class":207},"step:步长，可选，默认是 1。可以为浮点数。\n",[92,95695,95696],{"class":94,"line":1199},[92,95697,95698],{"class":207},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[92,95700,95701],{"class":94,"line":1290},[92,95702,95678],{"class":207},[63,95704,95706],{"id":95705},"_232-实例","2.3.2 实例",[83,95708,95710],{"className":30359,"code":95709,"language":30361,"meta":10,"style":10},"#创建一维数组\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",[89,95711,95712,95716,95740,95745,95750,95754,95777,95781,95785,95790,95795],{"__ignoreMap":10},[92,95713,95714],{"class":94,"line":95},[92,95715,93085],{"class":161},[92,95717,95718,95720,95722,95724,95726,95728,95730,95732,95734,95736,95738],{"class":94,"line":11},[92,95719,92982],{"class":102},[92,95721,320],{"class":151},[92,95723,481],{"class":102},[92,95725,828],{"class":151},[92,95727,481],{"class":102},[92,95729,320],{"class":151},[92,95731,481],{"class":102},[92,95733,93480],{"class":5196},[92,95735,148],{"class":98},[92,95737,106],{"class":151},[92,95739,109],{"class":102},[92,95741,95742],{"class":94,"line":1158},[92,95743,95744],{"class":161},"#输出结果：\n",[92,95746,95747],{"class":94,"line":1173},[92,95748,95749],{"class":161},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[92,95751,95752],{"class":94,"line":1179},[92,95753,93927],{"class":161},[92,95755,95756,95759,95761,95763,95765,95768,95770,95772,95774],{"class":94,"line":1193},[92,95757,95758],{"class":102},"np.array([np.arange(",[92,95760,320],{"class":151},[92,95762,481],{"class":102},[92,95764,396],{"class":151},[92,95766,95767],{"class":102},"),np.arange(",[92,95769,396],{"class":151},[92,95771,481],{"class":102},[92,95773,472],{"class":151},[92,95775,95776],{"class":102},")])\n",[92,95778,95779],{"class":94,"line":1199},[92,95780,93544],{"class":161},[92,95782,95783],{"class":94,"line":1290},[92,95784,95678],{"class":207},[92,95786,95787],{"class":94,"line":1296},[92,95788,95789],{"class":207},"array([[1, 2, 3],\n",[92,95791,95792],{"class":94,"line":1308},[92,95793,95794],{"class":207},"       [4, 5, 6]])\n",[92,95796,95797],{"class":94,"line":1591},[92,95798,95678],{"class":207},[33,95800,95802],{"id":95801},"_24-生态分布","2.4 生态分布",[63,95804,95806],{"id":95805},"_241-标准正态分布","2.4.1 标准正态分布",[38,95808,95809],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[38,95811,95812],{},[1441,95813],{"alt":10,"src":95814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[63,95816,95818],{"id":95817},"_242-常规正态分布","2.4.2 常规正态分布",[83,95820,95822],{"className":30359,"code":95821,"language":30361,"meta":10,"style":10},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[89,95823,95824,95829,95834,95839],{"__ignoreMap":10},[92,95825,95826],{"class":94,"line":95},[92,95827,95828],{"class":102},"random.normal(loc,scale,size)也可以生成正态分布\n",[92,95830,95831],{"class":94,"line":11},[92,95832,95833],{"class":161},"#loc:期望\n",[92,95835,95836],{"class":94,"line":1158},[92,95837,95838],{"class":161},"#scale:方差\n",[92,95840,95841],{"class":94,"line":1173},[92,95842,95843],{"class":161},"#size:用于确定是几维的数列\n",[38,95845,95846],{},[1441,95847],{"alt":10,"src":95848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[33,95850,95852],{"id":95851},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[38,95854,95855],{},"ndim:秩，维度个数",[38,95857,95858],{},"size:数组元素的个数",[38,95860,95861],{},"shape:数组的形状",[38,95863,95864],{},"dtype:数组元素的类型",[38,95866,95867],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[38,95869,95870],{},"他们都是属性，通过数组.属性的形式来确定",[38,95872,95873],{},"如果需要输出多个可以通过以下方式：",[83,95875,95877],{"className":30359,"code":95876,"language":30361,"meta":10,"style":10},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[89,95878,95879],{"__ignoreMap":10},[92,95880,95881,95883],{"class":94,"line":95},[92,95882,30396],{"class":151},[92,95884,95885],{"class":102},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[33,95887,95889],{"id":95888},"_26-其他方式创建数组","2.6 其他方式创建数组",[63,95891,95893],{"id":95892},"_261-zeros创建数组","2.6.1 zeros()创建数组",[38,95895,95896],{},"①创建一维数组",[83,95898,95900],{"className":30359,"code":95899,"language":30361,"meta":10,"style":10},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[89,95901,95902,95911,95915,95920,95925],{"__ignoreMap":10},[92,95903,95904,95907,95909],{"class":94,"line":95},[92,95905,95906],{"class":102},"np.zeros(",[92,95908,549],{"class":151},[92,95910,109],{"class":102},[92,95912,95913],{"class":94,"line":11},[92,95914,95678],{"class":207},[92,95916,95917],{"class":94,"line":1158},[92,95918,95919],{"class":207},"输出结果：\n",[92,95921,95922],{"class":94,"line":1173},[92,95923,95924],{"class":207},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[92,95926,95927],{"class":94,"line":1179},[92,95928,95678],{"class":207},[38,95930,95931],{},"上方代码等价于：",[83,95933,95935],{"className":30359,"code":95934,"language":30361,"meta":10,"style":10},"np.zeros(shape=(10))#创建10个元素的0数组\n",[89,95936,95937],{"__ignoreMap":10},[92,95938,95939,95941,95944,95946,95948,95950,95952],{"class":94,"line":95},[92,95940,95906],{"class":102},[92,95942,95943],{"class":5196},"shape",[92,95945,148],{"class":98},[92,95947,103],{"class":102},[92,95949,549],{"class":151},[92,95951,82751],{"class":102},[92,95953,95954],{"class":161},"#创建10个元素的0数组\n",[38,95956,95957],{},"也可以指定类型",[83,95959,95961],{"className":30359,"code":95960,"language":30361,"meta":10,"style":10},"#指定类型\nnp.zeros(5,dtype=int)\n",[89,95962,95963,95968],{"__ignoreMap":10},[92,95964,95965],{"class":94,"line":95},[92,95966,95967],{"class":161},"#指定类型\n",[92,95969,95970,95972,95974,95976,95978,95980,95982],{"class":94,"line":11},[92,95971,95906],{"class":102},[92,95973,422],{"class":151},[92,95975,481],{"class":102},[92,95977,93480],{"class":5196},[92,95979,148],{"class":98},[92,95981,106],{"class":151},[92,95983,109],{"class":102},[38,95985,95986],{},"②创建二维数组",[83,95988,95990],{"className":30359,"code":95989,"language":30361,"meta":10,"style":10},"np.zeros((3,4),dtype=int)\n",[89,95991,95992],{"__ignoreMap":10},[92,95993,95994,95997,95999,96001,96003,96005,96007,96009,96011],{"class":94,"line":95},[92,95995,95996],{"class":102},"np.zeros((",[92,95998,174],{"class":151},[92,96000,481],{"class":102},[92,96002,396],{"class":151},[92,96004,42237],{"class":102},[92,96006,93480],{"class":5196},[92,96008,148],{"class":98},[92,96010,106],{"class":151},[92,96012,109],{"class":102},[38,96014,96015],{},"③创建三维数组",[83,96017,96019],{"className":30359,"code":96018,"language":30361,"meta":10,"style":10},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[89,96020,96021,96026],{"__ignoreMap":10},[92,96022,96023],{"class":94,"line":95},[92,96024,96025],{"class":161},"#创建三维数组\n",[92,96027,96028,96030,96032,96034,96036,96038,96040,96042,96044,96046,96048],{"class":94,"line":11},[92,96029,95996],{"class":102},[92,96031,174],{"class":151},[92,96033,481],{"class":102},[92,96035,396],{"class":151},[92,96037,481],{"class":102},[92,96039,422],{"class":151},[92,96041,42237],{"class":102},[92,96043,93480],{"class":5196},[92,96045,148],{"class":98},[92,96047,106],{"class":151},[92,96049,109],{"class":102},[38,96051,96052],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[83,96054,96056],{"className":30359,"code":96055,"language":30361,"meta":10,"style":10},"#使用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",[89,96057,96058,96063,96078,96083,96088,96110],{"__ignoreMap":10},[92,96059,96060],{"class":94,"line":95},[92,96061,96062],{"class":161},"#使用zeros_like将创建的一维数组变成全0的数组\n",[92,96064,96065,96067,96069,96071,96073,96075],{"class":94,"line":11},[92,96066,341],{"class":102},[92,96068,148],{"class":98},[92,96070,92982],{"class":102},[92,96072,396],{"class":151},[92,96074,532],{"class":102},[92,96076,96077],{"class":161},"#这个得到的结果：一维数组0，1，2，3\n",[92,96079,96080],{"class":94,"line":1158},[92,96081,96082],{"class":102},"np.zeros_like(a)\n",[92,96084,96085],{"class":94,"line":1173},[92,96086,96087],{"class":161},"#使用zeros_like将创建的二维数组变成全0的数组\n",[92,96089,96090,96092,96094,96096,96098,96100,96102,96104,96106,96108],{"class":94,"line":1179},[92,96091,93286],{"class":102},[92,96093,148],{"class":98},[92,96095,95407],{"class":102},[92,96097,31477],{"class":5196},[92,96099,148],{"class":98},[92,96101,103],{"class":102},[92,96103,396],{"class":151},[92,96105,481],{"class":102},[92,96107,422],{"class":151},[92,96109,30478],{"class":102},[92,96111,96112],{"class":94,"line":1193},[92,96113,96114],{"class":102},"np.zeros_like(aa)\n",[63,96116,96118],{"id":96117},"_262-ones创建数组","2.6.2 ones()创建数组",[38,96120,96121],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[63,96123,96125],{"id":96124},"_263-empty创建数组","2.6.3 empty()创建数组",[38,96127,96128],{},"①empty()用法",[83,96130,96132],{"className":30359,"code":96131,"language":30361,"meta":10,"style":10},"numpy.empty(shape,dtype=float,order='c')\n",[89,96133,96134],{"__ignoreMap":10},[92,96135,96136,96139,96141,96143,96145,96147,96149,96151,96153],{"class":94,"line":95},[92,96137,96138],{"class":102},"numpy.empty(shape,",[92,96140,93480],{"class":5196},[92,96142,148],{"class":98},[92,96144,142],{"class":151},[92,96146,481],{"class":102},[92,96148,95277],{"class":5196},[92,96150,148],{"class":98},[92,96152,76008],{"class":207},[92,96154,109],{"class":102},[38,96156,96157],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[38,96159,96160],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[38,96162,96163],{},[1441,96164],{"alt":10,"src":96165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[38,96167,96168],{},"②empty()用法",[83,96170,96172],{"className":30359,"code":96171,"language":30361,"meta":10,"style":10},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[89,96173,96174,96195,96207,96228,96233],{"__ignoreMap":10},[92,96175,96176,96178,96180,96183,96185,96187,96189,96191,96193],{"class":94,"line":95},[92,96177,948],{"class":102},[92,96179,148],{"class":98},[92,96181,96182],{"class":102},"np.empty(",[92,96184,549],{"class":151},[92,96186,481],{"class":102},[92,96188,93480],{"class":5196},[92,96190,148],{"class":98},[92,96192,106],{"class":151},[92,96194,109],{"class":102},[92,96196,96197,96199,96201,96203,96205],{"class":94,"line":11},[92,96198,923],{"class":102},[92,96200,148],{"class":98},[92,96202,92982],{"class":102},[92,96204,422],{"class":151},[92,96206,109],{"class":102},[92,96208,96209,96212,96214,96217,96219,96221,96224,96226],{"class":94,"line":1158},[92,96210,96211],{"class":102},"np.add(",[92,96213,180],{"class":151},[92,96215,96216],{"class":102},",x,",[92,96218,93034],{"class":5196},[92,96220,148],{"class":98},[92,96222,96223],{"class":102},"y[:",[92,96225,422],{"class":151},[92,96227,4636],{"class":102},[92,96229,96230],{"class":94,"line":1173},[92,96231,96232],{"class":161},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[92,96234,96235],{"class":94,"line":1179},[92,96236,96237],{"class":102},"y\n",[38,96239,11494],{},[38,96241,96242],{},[1441,96243],{"alt":10,"src":96244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[83,96246,96248],{"className":30359,"code":96247,"language":30361,"meta":10,"style":10},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[89,96249,96250,96266,96286,96301],{"__ignoreMap":10},[92,96251,96252,96254,96256,96258,96260,96262,96264],{"class":94,"line":95},[92,96253,923],{"class":102},[92,96255,148],{"class":98},[92,96257,92982],{"class":102},[92,96259,320],{"class":151},[92,96261,481],{"class":102},[92,96263,447],{"class":151},[92,96265,109],{"class":102},[92,96267,96268,96270,96272,96274,96276,96278,96280,96282,96284],{"class":94,"line":11},[92,96269,948],{"class":102},[92,96271,148],{"class":98},[92,96273,96182],{"class":102},[92,96275,422],{"class":151},[92,96277,481],{"class":102},[92,96279,93480],{"class":5196},[92,96281,148],{"class":98},[92,96283,106],{"class":151},[92,96285,109],{"class":102},[92,96287,96288,96291,96293,96295,96297,96299],{"class":94,"line":1158},[92,96289,96290],{"class":102},"np.add(x,",[92,96292,180],{"class":151},[92,96294,481],{"class":102},[92,96296,93034],{"class":5196},[92,96298,148],{"class":98},[92,96300,93429],{"class":102},[92,96302,96303],{"class":94,"line":1173},[92,96304,96305],{"class":161},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[38,96307,96308],{},"③empty_like()",[38,96310,96311],{},[252,96312,96313,96314,96319],{},"创建一个",[252,96315,96316],{},[252,96317,96318],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[38,96321,96322,96325],{},[89,96323,96324],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[38,96327,96328],{},[1441,96329],{"alt":10,"src":96330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[63,96332,96334],{"id":96333},"_264-用法","2.6.4 ？？用法",[38,96336,96337],{},"当想查看一个函数的参数时，可以通过？？来实现",[83,96339,96341],{"className":30359,"code":96340,"language":30361,"meta":10,"style":10},"np.full??\n",[89,96342,96343],{"__ignoreMap":10},[92,96344,96345,96348],{"class":94,"line":95},[92,96346,96347],{"class":102},"np.full",[92,96349,96350],{"class":77383},"??\n",[63,96352,96354],{"id":96353},"_265-full创建数组","2.6.5 full()创建数组",[83,96356,96358],{"className":30359,"code":96357,"language":30361,"meta":10,"style":10},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[89,96359,96360,96365],{"__ignoreMap":10},[92,96361,96362],{"class":94,"line":95},[92,96363,96364],{"class":102},"full(shape,fill_value)\n",[92,96366,96367],{"class":94,"line":11},[92,96368,96369],{"class":102},"创建全为某个指定值的数组\n",[38,96371,94510],{},[83,96373,96375],{"className":30359,"code":96374,"language":30361,"meta":10,"style":10},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[89,96376,96377,96382],{"__ignoreMap":10},[92,96378,96379],{"class":94,"line":95},[92,96380,96381],{"class":161},"#创建一个一维数组,以20进行填充\n",[92,96383,96384,96387,96389,96391,96393],{"class":94,"line":11},[92,96385,96386],{"class":102},"np.full(",[92,96388,549],{"class":151},[92,96390,481],{"class":102},[92,96392,803],{"class":151},[92,96394,109],{"class":102},[38,96396,93271],{},[83,96398,96400],{"className":30359,"code":96399,"language":30361,"meta":10,"style":10},"#创建二维数组\nnp.full((3,5),11)\n",[89,96401,96402,96406],{"__ignoreMap":10},[92,96403,96404],{"class":94,"line":95},[92,96405,93927],{"class":161},[92,96407,96408,96411,96413,96415,96417,96419,96421],{"class":94,"line":11},[92,96409,96410],{"class":102},"np.full((",[92,96412,174],{"class":151},[92,96414,481],{"class":102},[92,96416,422],{"class":151},[92,96418,42237],{"class":102},[92,96420,575],{"class":151},[92,96422,109],{"class":102},[38,96424,96425],{},"③full_like用法",[38,96427,96428],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[38,96430,96431],{},"这里是指定填充而已",[83,96433,96435],{"className":30359,"code":96434,"language":30361,"meta":10,"style":10},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[89,96436,96437,96442,96466,96471],{"__ignoreMap":10},[92,96438,96439],{"class":94,"line":95},[92,96440,96441],{"class":161},"#创建一个指定形状数组\n",[92,96443,96444,96446,96448,96450,96452,96454,96456,96458,96460,96462,96464],{"class":94,"line":11},[92,96445,341],{"class":102},[92,96447,148],{"class":98},[92,96449,92982],{"class":102},[92,96451,320],{"class":151},[92,96453,481],{"class":102},[92,96455,428],{"class":151},[92,96457,92987],{"class":102},[92,96459,396],{"class":151},[92,96461,481],{"class":102},[92,96463,523],{"class":151},[92,96465,109],{"class":102},[92,96467,96468],{"class":94,"line":1158},[92,96469,96470],{"class":161},"#进行指定填充\n",[92,96472,96473,96476,96478],{"class":94,"line":1173},[92,96474,96475],{"class":102},"np.full_like(a,",[92,96477,549],{"class":151},[92,96479,109],{"class":102},[38,96481,11494],{},[38,96483,96484],{},[1441,96485],{"alt":10,"src":96486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[63,96488,96490],{"id":96489},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21978,96492,96494],{"id":96493},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[83,96496,96498],{"className":30359,"code":96497,"language":30361,"meta":10,"style":10},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[89,96499,96500,96517],{"__ignoreMap":10},[92,96501,96502,96505,96507,96509,96511,96513,96515],{"class":94,"line":95},[92,96503,96504],{"class":102},"np.eye(",[92,96506,396],{"class":151},[92,96508,481],{"class":102},[92,96510,93480],{"class":5196},[92,96512,148],{"class":98},[92,96514,106],{"class":151},[92,96516,109],{"class":102},[92,96518,96519],{"class":94,"line":11},[92,96520,96521],{"class":161},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21978,96523,96525],{"id":96524},"_2662-法2identity","2.6.6.2 法2：identity()",[83,96527,96529],{"className":30359,"code":96528,"language":30361,"meta":10,"style":10},"#identity()\nnp.identity(5,dtype=int)\n",[89,96530,96531,96536],{"__ignoreMap":10},[92,96532,96533],{"class":94,"line":95},[92,96534,96535],{"class":161},"#identity()\n",[92,96537,96538,96541,96543,96545,96547,96549,96551],{"class":94,"line":11},[92,96539,96540],{"class":102},"np.identity(",[92,96542,422],{"class":151},[92,96544,481],{"class":102},[92,96546,93480],{"class":5196},[92,96548,148],{"class":98},[92,96550,106],{"class":151},[92,96552,109],{"class":102},[38,96554,96555],{},"两个函数是有区别的",[38,96557,96558],{},[1441,96559],{"alt":10,"src":96560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[38,96562,96563],{},[1441,96564],{"alt":10,"src":96565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[83,96567,96569],{"className":30359,"code":96568,"language":30361,"meta":10,"style":10},"# 创建一个 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",[89,96570,96571,96576,96588,96593,96598,96603,96608,96612,96617,96637,96641,96646,96651],{"__ignoreMap":10},[92,96572,96573],{"class":94,"line":95},[92,96574,96575],{"class":161},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[92,96577,96578,96580,96582,96584,96586],{"class":94,"line":11},[92,96579,96504],{"class":102},[92,96581,174],{"class":151},[92,96583,12415],{"class":102},[92,96585,396],{"class":151},[92,96587,109],{"class":102},[92,96589,96590],{"class":94,"line":1158},[92,96591,96592],{"class":161},"# 输出:\n",[92,96594,96595],{"class":94,"line":1173},[92,96596,96597],{"class":161},"# [[1. 0. 0. 0.]\n",[92,96599,96600],{"class":94,"line":1179},[92,96601,96602],{"class":161},"#  [0. 1. 0. 0.]\n",[92,96604,96605],{"class":94,"line":1193},[92,96606,96607],{"class":161},"#  [0. 0. 1. 0.]]\n",[92,96609,96610],{"class":94,"line":1199},[92,96611,2379],{"emptyLinePlaceholder":17},[92,96613,96614],{"class":94,"line":1290},[92,96615,96616],{"class":161},"# 对角线向上偏移1\n",[92,96618,96619,96621,96623,96625,96627,96629,96631,96633,96635],{"class":94,"line":1296},[92,96620,96504],{"class":102},[92,96622,174],{"class":151},[92,96624,12415],{"class":102},[92,96626,396],{"class":151},[92,96628,12415],{"class":102},[92,96630,596],{"class":5196},[92,96632,148],{"class":98},[92,96634,320],{"class":151},[92,96636,109],{"class":102},[92,96638,96639],{"class":94,"line":1308},[92,96640,96592],{"class":161},[92,96642,96643],{"class":94,"line":1591},[92,96644,96645],{"class":161},"# [[0. 1. 0. 0.]\n",[92,96647,96648],{"class":94,"line":1596},[92,96649,96650],{"class":161},"#  [0. 0. 1. 0.]\n",[92,96652,96653],{"class":94,"line":1602},[92,96654,96655],{"class":161},"#  [0. 0. 0. 1.]]\n",[63,96657,96659],{"id":96658},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[83,96661,96663],{"className":30359,"code":96662,"language":30361,"meta":10,"style":10},"#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",[89,96664,96665,96670,96674,96679,96684,96689,96694,96699,96704,96709,96714],{"__ignoreMap":10},[92,96666,96667],{"class":94,"line":95},[92,96668,96669],{"class":161},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[92,96671,96672],{"class":94,"line":11},[92,96673,95678],{"class":207},[92,96675,96676],{"class":94,"line":1158},[92,96677,96678],{"class":207},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[92,96680,96681],{"class":94,"line":1173},[92,96682,96683],{"class":207},"参数介绍：\n",[92,96685,96686],{"class":94,"line":1179},[92,96687,96688],{"class":207},"start：序列的起始值\n",[92,96690,96691],{"class":94,"line":1193},[92,96692,96693],{"class":207},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[92,96695,96696],{"class":94,"line":1199},[92,96697,96698],{"class":207},"num：要生长的等步长的样本数量，默认为50\n",[92,96700,96701],{"class":94,"line":1290},[92,96702,96703],{"class":207},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[92,96705,96706],{"class":94,"line":1296},[92,96707,96708],{"class":207},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[92,96710,96711],{"class":94,"line":1308},[92,96712,96713],{"class":207},"dtype：ndarry的数据类型\n",[92,96715,96716],{"class":94,"line":1591},[92,96717,95678],{"class":207},[38,96719,96720],{},[1441,96721],{"alt":10,"src":96722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[38,96724,96725],{},"这里num=是可以省略的",[38,96727,96728],{},"也就是下方两行代码结果是一模一样的",[83,96730,96732],{"className":30359,"code":96731,"language":30361,"meta":10,"style":10},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[89,96733,96734,96751],{"__ignoreMap":10},[92,96735,96736,96739,96741,96743,96745,96747,96749],{"class":94,"line":95},[92,96737,96738],{"class":102},"np.linspace(",[92,96740,320],{"class":151},[92,96742,481],{"class":102},[92,96744,422],{"class":151},[92,96746,481],{"class":102},[92,96748,422],{"class":151},[92,96750,109],{"class":102},[92,96752,96753,96755,96757,96759,96761,96763,96765,96767,96769],{"class":94,"line":11},[92,96754,96738],{"class":102},[92,96756,320],{"class":151},[92,96758,481],{"class":102},[92,96760,422],{"class":151},[92,96762,481],{"class":102},[92,96764,1644],{"class":5196},[92,96766,148],{"class":98},[92,96768,422],{"class":151},[92,96770,109],{"class":102},[63,96772,96774],{"id":96773},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[83,96776,96778],{"className":30359,"code":96777,"language":30361,"meta":10,"style":10},"#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",[89,96779,96780,96785,96789,96794,96799,96804,96809,96813,96818,96823,96827],{"__ignoreMap":10},[92,96781,96782],{"class":94,"line":95},[92,96783,96784],{"class":161},"#logspace函数用于创建一个等比数列，格式如下：\n",[92,96786,96787],{"class":94,"line":11},[92,96788,95678],{"class":207},[92,96790,96791],{"class":94,"line":1158},[92,96792,96793],{"class":207},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[92,96795,96796],{"class":94,"line":1173},[92,96797,96798],{"class":207},"参数为：\n",[92,96800,96801],{"class":94,"line":1179},[92,96802,96803],{"class":207},"start:序列的起始位置为：base**start\n",[92,96805,96806],{"class":94,"line":1193},[92,96807,96808],{"class":207},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[92,96810,96811],{"class":94,"line":1199},[92,96812,96698],{"class":207},[92,96814,96815],{"class":94,"line":1290},[92,96816,96817],{"class":207},"endpoint：是否包含 stop 这个值，默认是 True\n",[92,96819,96820],{"class":94,"line":1296},[92,96821,96822],{"class":207},"base：对数的底数，默认是 10（常见对数）\n",[92,96824,96825],{"class":94,"line":1308},[92,96826,96713],{"class":207},[92,96828,96829],{"class":94,"line":1591},[92,96830,95678],{"class":207},[38,96832,96833],{},[1441,96834],{"alt":10,"src":96835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[38,96837,96838],{},"logspace()函数中的num参数也是可以不写num=的",[38,96840,96841],{},"endpoint是不可以省略的",[5106,96843,96844],{},"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":10,"searchDepth":11,"depth":11,"links":96846},[96847,96851,96856,96860,96864,96865],{"id":95236,"depth":11,"text":95237,"children":96848},[96849,96850],{"id":95240,"depth":1158,"text":95241},{"id":95313,"depth":1158,"text":95314},{"id":95345,"depth":11,"text":95346,"children":96852},[96853,96854,96855],{"id":95349,"depth":1158,"text":95350},{"id":95531,"depth":1158,"text":95532},{"id":95609,"depth":1158,"text":95610},{"id":95644,"depth":11,"text":95645,"children":96857},[96858,96859],{"id":95648,"depth":1158,"text":95649},{"id":95705,"depth":1158,"text":95706},{"id":95801,"depth":11,"text":95802,"children":96861},[96862,96863],{"id":95805,"depth":1158,"text":95806},{"id":95817,"depth":1158,"text":95818},{"id":95851,"depth":11,"text":95852},{"id":95888,"depth":11,"text":95889,"children":96866},[96867,96868,96869,96870,96871,96872,96873,96874],{"id":95892,"depth":1158,"text":95893},{"id":96117,"depth":1158,"text":96118},{"id":96124,"depth":1158,"text":96125},{"id":96333,"depth":1158,"text":96334},{"id":96353,"depth":1158,"text":96354},{"id":96489,"depth":1158,"text":96490},{"id":96658,"depth":1158,"text":96659},{"id":96773,"depth":1158,"text":96774},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95228,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96881,"title":96882,"body":96883,"description":13,"extension":14,"meta":96976,"navigation":17,"path":96977,"seo":96978,"stem":96979,"__hash__":96980},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96884,"toc":96974},[96885,96888,96891,96894,96897,96900,96903,96906,96909,96912,96915,96918,96920,96923,96926,96931,96934,96937,96971],[29,96886,96882],{"id":96887},"_20魔法命令mprun",[38,96889,96890],{},"逐行分析数据内存的使用情况",[38,96892,96893],{},"语法格式：",[38,96895,96896],{},"%mprun -f 模块名.函数名 模块名.函数名()",[38,96898,96899],{},"分析结果列如下：",[38,96901,96902],{},"Line行号",[38,96904,96905],{},"Mem usage内存使用大小",[38,96907,96908],{},"increment内存增量",[38,96910,96911],{},"Line content代码内容",[38,96913,96914],{},"补充说明：",[38,96916,96917],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[38,96919,95183],{},[38,96921,96922],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[38,96924,96925],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[38,96927,96928],{},[1441,96929],{"alt":10,"src":96930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[38,96932,96933],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[38,96935,96936],{},"这时候需要重新加载模块",[83,96938,96940],{"className":30359,"code":96939,"language":30361,"meta":10,"style":10},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[89,96941,96942,96947,96954,96959],{"__ignoreMap":10},[92,96943,96944],{"class":94,"line":95},[92,96945,96946],{"class":161},"#重新加载模块\n",[92,96948,96949,96951],{"class":94,"line":11},[92,96950,30373],{"class":98},[92,96952,96953],{"class":102}," importlib\n",[92,96955,96956],{"class":94,"line":1158},[92,96957,96958],{"class":102},"importlib.reload(mprun_test)\n",[92,96960,96961,96963,96966,96968],{"class":94,"line":1173},[92,96962,431],{"class":98},[92,96964,96965],{"class":102},"mprun ",[92,96967,635],{"class":98},[92,96969,96970],{"class":102},"f mprun_test.fun_test mprun_test.fun_test()\n",[5106,96972,96973],{},"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":10,"searchDepth":11,"depth":11,"links":96975},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96882,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96982,"title":96983,"body":96984,"description":13,"extension":14,"meta":97001,"navigation":17,"path":97002,"seo":97003,"stem":97004,"__hash__":97005},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96985,"toc":96999},[96986,96989,96994],[29,96987,96983],{"id":96988},"_3一维数组的索引和切片",[38,96990,96991],{},[1441,96992],{"alt":10,"src":96993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[38,96995,96996],{},[1441,96997],{"alt":10,"src":96998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":10,"searchDepth":11,"depth":11,"links":97000},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96983,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97007,"title":97008,"body":97009,"description":13,"extension":14,"meta":97492,"navigation":17,"path":97493,"seo":97494,"stem":97495,"__hash__":97496},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97010,"toc":97490},[97011,97014,97017,97022,97055,97058,97096,97099,97133,97136,97241,97244,97281,97284,97385,97388,97439,97442,97484,97487],[29,97012,97008],{"id":97013},"_4二维数组的索引与切片",[38,97015,97016],{},"①获取指定单个元素",[38,97018,97019],{},[1441,97020],{"alt":10,"src":97021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[83,97023,97025],{"className":30359,"code":97024,"language":30361,"meta":10,"style":10},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[89,97026,97027,97032,97037,97042],{"__ignoreMap":10},[92,97028,97029],{"class":94,"line":95},[92,97030,97031],{"class":161},"#获取元素9\n",[92,97033,97034],{"class":94,"line":11},[92,97035,97036],{"class":161},"#先获取所在行，再获取所在列\n",[92,97038,97039],{"class":94,"line":1158},[92,97040,97041],{"class":161},"#数组[行索引号，列索引号]\n",[92,97043,97044,97047,97049,97051,97053],{"class":94,"line":1173},[92,97045,97046],{"class":102},"a[",[92,97048,320],{"class":151},[92,97050,481],{"class":102},[92,97052,180],{"class":151},[92,97054,33227],{"class":102},[38,97056,97057],{},"②获取整行元素",[83,97059,97061],{"className":30359,"code":97060,"language":30361,"meta":10,"style":10},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[89,97062,97063,97068,97073,97081,97086],{"__ignoreMap":10},[92,97064,97065],{"class":94,"line":95},[92,97066,97067],{"class":161},"#获取整行 数组[行索引号]\n",[92,97069,97070],{"class":94,"line":11},[92,97071,97072],{"class":161},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[92,97074,97075,97077,97079],{"class":94,"line":1158},[92,97076,97046],{"class":102},[92,97078,180],{"class":151},[92,97080,33227],{"class":102},[92,97082,97083],{"class":94,"line":1173},[92,97084,97085],{"class":161},"#也可以负索引获取一行\n",[92,97087,97088,97090,97092,97094],{"class":94,"line":1179},[92,97089,97046],{"class":102},[92,97091,635],{"class":98},[92,97093,320],{"class":151},[92,97095,33227],{"class":102},[38,97097,97098],{},"③获取整列元素",[83,97100,97102],{"className":30359,"code":97101,"language":30361,"meta":10,"style":10},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[89,97103,97104,97109,97118,97123],{"__ignoreMap":10},[92,97105,97106],{"class":94,"line":95},[92,97107,97108],{"class":161},"#获取整列 数组名[:,列索引]\n",[92,97110,97111,97114,97116],{"class":94,"line":11},[92,97112,97113],{"class":102},"a[:,",[92,97115,180],{"class":151},[92,97117,33227],{"class":102},[92,97119,97120],{"class":94,"line":1158},[92,97121,97122],{"class":161},"#也可以负索引获取一列\n",[92,97124,97125,97127,97129,97131],{"class":94,"line":1173},[92,97126,97113],{"class":102},[92,97128,635],{"class":98},[92,97130,320],{"class":151},[92,97132,33227],{"class":102},[38,97134,97135],{},"④部分行部分列的元素",[83,97137,97139],{"className":30359,"code":97138,"language":30361,"meta":10,"style":10},"#部分行部分列 数组名[行切片，列切片]\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",[89,97140,97141,97146,97156,97160,97164,97169,97174,97178,97190,97194,97198,97203,97208,97213,97218,97222,97227],{"__ignoreMap":10},[92,97142,97143],{"class":94,"line":95},[92,97144,97145],{"class":161},"#部分行部分列 数组名[行切片，列切片]\n",[92,97147,97148,97151,97153],{"class":94,"line":11},[92,97149,97150],{"class":102},"a[:",[92,97152,180],{"class":151},[92,97154,97155],{"class":102},",:]\n",[92,97157,97158],{"class":94,"line":1158},[92,97159,93544],{"class":161},[92,97161,97162],{"class":94,"line":1173},[92,97163,93908],{"class":207},[92,97165,97166],{"class":94,"line":1179},[92,97167,97168],{"class":207},"array([[ 1,  2,  3,  4,  5,  6],\n",[92,97170,97171],{"class":94,"line":1193},[92,97172,97173],{"class":207},"       [ 7,  8,  9, 10, 11, 12]])\n",[92,97175,97176],{"class":94,"line":1199},[92,97177,93908],{"class":207},[92,97179,97180,97182,97184,97186,97188],{"class":94,"line":1290},[92,97181,97113],{"class":102},[92,97183,320],{"class":151},[92,97185,962],{"class":102},[92,97187,396],{"class":151},[92,97189,33227],{"class":102},[92,97191,97192],{"class":94,"line":1296},[92,97193,93544],{"class":161},[92,97195,97196],{"class":94,"line":1308},[92,97197,93908],{"class":207},[92,97199,97200],{"class":94,"line":1591},[92,97201,97202],{"class":207},"array([[ 2,  3,  4],\n",[92,97204,97205],{"class":94,"line":1596},[92,97206,97207],{"class":207},"       [ 8,  9, 10],\n",[92,97209,97210],{"class":94,"line":1602},[92,97211,97212],{"class":207},"       [14, 15, 16],\n",[92,97214,97215],{"class":94,"line":1607},[92,97216,97217],{"class":207},"       [20, 21, 22]])\n",[92,97219,97220],{"class":94,"line":1621},[92,97221,93908],{"class":207},[92,97223,97224],{"class":94,"line":1626},[92,97225,97226],{"class":161},"#对列行同时进行切片，使用了step参数\n",[92,97228,97229,97232,97234,97237,97239],{"class":94,"line":1632},[92,97230,97231],{"class":102},"a[::",[92,97233,180],{"class":151},[92,97235,97236],{"class":102},",::",[92,97238,180],{"class":151},[92,97240,33227],{"class":102},[38,97242,97243],{},"⑤同时获取两个元素",[83,97245,97247],{"className":30359,"code":97246,"language":30361,"meta":10,"style":10},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[89,97248,97249,97254,97259],{"__ignoreMap":10},[92,97250,97251],{"class":94,"line":95},[92,97252,97253],{"class":161},"#同时获取第三行第二列，第四行第一列\n",[92,97255,97256],{"class":94,"line":11},[92,97257,97258],{"class":161},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[92,97260,97261,97264,97266,97268,97270,97272,97274,97276,97278],{"class":94,"line":1158},[92,97262,97263],{"class":102},"a[(",[92,97265,180],{"class":151},[92,97267,481],{"class":102},[92,97269,174],{"class":151},[92,97271,42228],{"class":102},[92,97273,320],{"class":151},[92,97275,481],{"class":102},[92,97277,294],{"class":151},[92,97279,97280],{"class":102},")]\n",[38,97282,97283],{},"⑥切片，对行进行反向获取",[83,97285,97287],{"className":30359,"code":97286,"language":30361,"meta":10,"style":10},"#切片 对所有行进行反向获取\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",[89,97288,97289,97294,97304,97308,97312,97317,97322,97327,97332,97336,97341,97357,97361,97366,97371,97376,97381],{"__ignoreMap":10},[92,97290,97291],{"class":94,"line":95},[92,97292,97293],{"class":161},"#切片 对所有行进行反向获取\n",[92,97295,97296,97298,97300,97302],{"class":94,"line":11},[92,97297,97231],{"class":102},[92,97299,635],{"class":98},[92,97301,320],{"class":151},[92,97303,33227],{"class":102},[92,97305,97306],{"class":94,"line":1158},[92,97307,93544],{"class":161},[92,97309,97310],{"class":94,"line":1173},[92,97311,93908],{"class":207},[92,97313,97314],{"class":94,"line":1179},[92,97315,97316],{"class":207},"array([[19, 20, 21, 22, 23, 24],\n",[92,97318,97319],{"class":94,"line":1193},[92,97320,97321],{"class":207},"       [13, 14, 15, 16, 17, 18],\n",[92,97323,97324],{"class":94,"line":1199},[92,97325,97326],{"class":207},"       [ 7,  8,  9, 10, 11, 12],\n",[92,97328,97329],{"class":94,"line":1290},[92,97330,97331],{"class":207},"       [ 1,  2,  3,  4,  5,  6]])\n",[92,97333,97334],{"class":94,"line":1296},[92,97335,93908],{"class":207},[92,97337,97338],{"class":94,"line":1308},[92,97339,97340],{"class":161},"#对行列都进行反向切片获取\n",[92,97342,97343,97345,97347,97349,97351,97353,97355],{"class":94,"line":1591},[92,97344,97231],{"class":102},[92,97346,635],{"class":98},[92,97348,320],{"class":151},[92,97350,97236],{"class":102},[92,97352,635],{"class":98},[92,97354,320],{"class":151},[92,97356,33227],{"class":102},[92,97358,97359],{"class":94,"line":1596},[92,97360,93908],{"class":207},[92,97362,97363],{"class":94,"line":1602},[92,97364,97365],{"class":207},"array([[24, 23, 22, 21, 20, 19],\n",[92,97367,97368],{"class":94,"line":1607},[92,97369,97370],{"class":207},"       [18, 17, 16, 15, 14, 13],\n",[92,97372,97373],{"class":94,"line":1621},[92,97374,97375],{"class":207},"       [12, 11, 10,  9,  8,  7],\n",[92,97377,97378],{"class":94,"line":1626},[92,97379,97380],{"class":207},"       [ 6,  5,  4,  3,  2,  1]])\n",[92,97382,97383],{"class":94,"line":1632},[92,97384,93908],{"class":207},[38,97386,97387],{},"⑦修改元素",[83,97389,97391],{"className":30359,"code":97390,"language":30361,"meta":10,"style":10},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[89,97392,97393,97398,97416,97421],{"__ignoreMap":10},[92,97394,97395],{"class":94,"line":95},[92,97396,97397],{"class":161},"#获取前两行和前两列\n",[92,97399,97400,97403,97405,97407,97409,97412,97414],{"class":94,"line":11},[92,97401,97402],{"class":102},"sub_a",[92,97404,148],{"class":98},[92,97406,97150],{"class":102},[92,97408,180],{"class":151},[92,97410,97411],{"class":102},",:",[92,97413,180],{"class":151},[92,97415,33227],{"class":102},[92,97417,97418],{"class":94,"line":1158},[92,97419,97420],{"class":161},"#修改sub_a第一个元素的值\n",[92,97422,97423,97426,97428,97430,97432,97434,97436],{"class":94,"line":1173},[92,97424,97425],{"class":102},"sub_a[",[92,97427,294],{"class":151},[92,97429,481],{"class":102},[92,97431,294],{"class":151},[92,97433,1043],{"class":102},[92,97435,148],{"class":98},[92,97437,97438],{"class":151},"100\n",[38,97440,97441],{},"⑧数组复制copy()",[83,97443,97445],{"className":30359,"code":97444,"language":30361,"meta":10,"style":10},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[89,97446,97447,97452,97462,97467],{"__ignoreMap":10},[92,97448,97449],{"class":94,"line":95},[92,97450,97451],{"class":161},"#数组复制\n",[92,97453,97454,97457,97459],{"class":94,"line":11},[92,97455,97456],{"class":102},"copy_a",[92,97458,148],{"class":98},[92,97460,97461],{"class":102},"np.copy(sub_a)\n",[92,97463,97464],{"class":94,"line":1158},[92,97465,97466],{"class":161},"#修改copy_a后不影响原数组\n",[92,97468,97469,97472,97474,97476,97478,97480,97482],{"class":94,"line":1173},[92,97470,97471],{"class":102},"copy_a[",[92,97473,294],{"class":151},[92,97475,481],{"class":102},[92,97477,294],{"class":151},[92,97479,1043],{"class":102},[92,97481,148],{"class":98},[92,97483,97438],{"class":151},[38,97485,97486],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5106,97488,97489],{},"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":10,"searchDepth":11,"depth":11,"links":97491},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97008,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97498,"title":97499,"body":97500,"description":13,"extension":14,"meta":97992,"navigation":17,"path":97993,"seo":97994,"stem":97995,"__hash__":97996},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97501,"toc":97984},[97502,97505,97509,97512,97515,97568,97571,97596,97599,97618,97638,97641,97657,97661,97707,97711,97753,97757,97760,97763,97766,97769,97772,97834,97894,97898,97901,97958,97962,97967,97976,97981],[29,97503,97499],{"id":97504},"_5改变数组的维度",[33,97506,97508],{"id":97507},"_51-使用reshape","5.1 使用reshape()",[38,97510,97511],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[38,97513,97514],{},"①一维数组转换为二维数组",[83,97516,97518],{"className":30359,"code":97517,"language":30361,"meta":10,"style":10},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[89,97519,97520,97536,97541,97546,97551],{"__ignoreMap":10},[92,97521,97522,97524,97526,97528,97530,97532,97534],{"class":94,"line":95},[92,97523,341],{"class":102},[92,97525,148],{"class":98},[92,97527,92982],{"class":102},[92,97529,320],{"class":151},[92,97531,481],{"class":102},[92,97533,626],{"class":151},[92,97535,109],{"class":102},[92,97537,97538],{"class":94,"line":11},[92,97539,97540],{"class":161},"#将一维数组进行转换\n",[92,97542,97543],{"class":94,"line":1158},[92,97544,97545],{"class":161},"#注意点：元素个数不可以变\n",[92,97547,97548],{"class":94,"line":1173},[92,97549,97550],{"class":161},"#转换维度要保持一致，不一致就异常！！！\n",[92,97552,97553,97555,97557,97560,97562,97564,97566],{"class":94,"line":1179},[92,97554,93286],{"class":102},[92,97556,148],{"class":98},[92,97558,97559],{"class":102},"a.reshape(",[92,97561,180],{"class":151},[92,97563,481],{"class":102},[92,97565,447],{"class":151},[92,97567,109],{"class":102},[38,97569,97570],{},"②一维数组转换为三维数组",[83,97572,97574],{"className":30359,"code":97573,"language":30361,"meta":10,"style":10},"aaa=a.reshape(2,3,2)\n",[89,97575,97576],{"__ignoreMap":10},[92,97577,97578,97580,97582,97584,97586,97588,97590,97592,97594],{"class":94,"line":95},[92,97579,95501],{"class":102},[92,97581,148],{"class":98},[92,97583,97559],{"class":102},[92,97585,180],{"class":151},[92,97587,481],{"class":102},[92,97589,174],{"class":151},[92,97591,481],{"class":102},[92,97593,180],{"class":151},[92,97595,109],{"class":102},[38,97597,97598],{},"③二维数组转化为一维数组",[83,97600,97602],{"className":30359,"code":97601,"language":30361,"meta":10,"style":10},"#知道元素个数：\naa.reshape(12)\n",[89,97603,97604,97609],{"__ignoreMap":10},[92,97605,97606],{"class":94,"line":95},[92,97607,97608],{"class":161},"#知道元素个数：\n",[92,97610,97611,97614,97616],{"class":94,"line":11},[92,97612,97613],{"class":102},"aa.reshape(",[92,97615,601],{"class":151},[92,97617,109],{"class":102},[83,97619,97621],{"className":30359,"code":97620,"language":30361,"meta":10,"style":10},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[89,97622,97623,97628],{"__ignoreMap":10},[92,97624,97625],{"class":94,"line":95},[92,97626,97627],{"class":161},"#不知道元素个数，参数传递-1\n",[92,97629,97630,97632,97634,97636],{"class":94,"line":11},[92,97631,97613],{"class":102},[92,97633,635],{"class":98},[92,97635,320],{"class":151},[92,97637,109],{"class":102},[38,97639,97640],{},"④三维数组转换为一维数组",[83,97642,97644],{"className":30359,"code":97643,"language":30361,"meta":10,"style":10},"aaa.reshape(-1)\n",[89,97645,97646],{"__ignoreMap":10},[92,97647,97648,97651,97653,97655],{"class":94,"line":95},[92,97649,97650],{"class":102},"aaa.reshape(",[92,97652,635],{"class":98},[92,97654,320],{"class":151},[92,97656,109],{"class":102},[33,97658,97660],{"id":97659},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[83,97662,97664],{"className":30359,"code":97663,"language":30361,"meta":10,"style":10},"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",[89,97665,97666,97693,97698,97702],{"__ignoreMap":10},[92,97667,97668,97670,97672,97674,97676,97678,97680,97682,97684,97686,97688,97690],{"class":94,"line":95},[92,97669,93286],{"class":102},[92,97671,148],{"class":98},[92,97673,92982],{"class":102},[92,97675,320],{"class":151},[92,97677,481],{"class":102},[92,97679,626],{"class":151},[92,97681,92987],{"class":102},[92,97683,180],{"class":151},[92,97685,481],{"class":102},[92,97687,447],{"class":151},[92,97689,532],{"class":102},[92,97691,97692],{"class":161},"#转换为2行6列的数组\n",[92,97694,97695],{"class":94,"line":11},[92,97696,97697],{"class":102},"aa.revel()\n",[92,97699,97700],{"class":94,"line":1158},[92,97701,93544],{"class":161},[92,97703,97704],{"class":94,"line":1173},[92,97705,97706],{"class":161},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[33,97708,97710],{"id":97709},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[83,97712,97714],{"className":30359,"code":97713,"language":30361,"meta":10,"style":10},"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",[89,97715,97716,97740,97745,97749],{"__ignoreMap":10},[92,97717,97718,97720,97722,97724,97726,97728,97730,97732,97734,97736,97738],{"class":94,"line":95},[92,97719,93286],{"class":102},[92,97721,148],{"class":98},[92,97723,92982],{"class":102},[92,97725,320],{"class":151},[92,97727,481],{"class":102},[92,97729,626],{"class":151},[92,97731,92987],{"class":102},[92,97733,180],{"class":151},[92,97735,481],{"class":102},[92,97737,447],{"class":151},[92,97739,109],{"class":102},[92,97741,97742],{"class":94,"line":11},[92,97743,97744],{"class":102},"aa.flatten()\n",[92,97746,97747],{"class":94,"line":1158},[92,97748,93544],{"class":161},[92,97750,97751],{"class":94,"line":1173},[92,97752,97706],{"class":161},[33,97754,97756],{"id":97755},"_54-使用resize","5.4 使用resize()",[38,97758,97759],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[38,97761,97762],{},"通过resize方法可以改变数组的维度",[38,97764,97765],{},"#resize修改数组维度",[38,97767,97768],{},"#以元组的形式指定形状",[38,97770,97771],{},"#改变的是原数组",[83,97773,97775],{"className":30359,"code":97774,"language":30361,"meta":10,"style":10},"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",[89,97776,97777,97793,97813,97826,97830],{"__ignoreMap":10},[92,97778,97779,97781,97783,97785,97787,97789,97791],{"class":94,"line":95},[92,97780,341],{"class":102},[92,97782,148],{"class":98},[92,97784,92982],{"class":102},[92,97786,320],{"class":151},[92,97788,481],{"class":102},[92,97790,626],{"class":151},[92,97792,109],{"class":102},[92,97794,97795,97798,97800,97802,97804,97806,97808,97810],{"class":94,"line":11},[92,97796,97797],{"class":102},"a.shape",[92,97799,148],{"class":98},[92,97801,103],{"class":102},[92,97803,180],{"class":151},[92,97805,481],{"class":102},[92,97807,447],{"class":151},[92,97809,532],{"class":102},[92,97811,97812],{"class":161},"#改变了原数组\n",[92,97814,97815,97817,97819,97822,97824],{"class":94,"line":1158},[92,97816,341],{"class":102},[92,97818,148],{"class":98},[92,97820,97821],{"class":102},"resize((",[92,97823,601],{"class":151},[92,97825,30478],{"class":102},[92,97827,97828],{"class":94,"line":1173},[92,97829,93544],{"class":161},[92,97831,97832],{"class":94,"line":1179},[92,97833,97706],{"class":161},[83,97835,97837],{"className":30359,"code":97836,"language":30361,"meta":10,"style":10},"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",[89,97838,97839,97852,97856,97860,97865,97870,97875,97880,97885,97890],{"__ignoreMap":10},[92,97840,97841,97844,97846,97848,97850],{"class":94,"line":95},[92,97842,97843],{"class":102},"a.resize((",[92,97845,447],{"class":151},[92,97847,481],{"class":102},[92,97849,180],{"class":151},[92,97851,30478],{"class":102},[92,97853,97854],{"class":94,"line":11},[92,97855,93544],{"class":161},[92,97857,97858],{"class":94,"line":1158},[92,97859,93908],{"class":207},[92,97861,97862],{"class":94,"line":1173},[92,97863,97864],{"class":207},"array([[ 1,  2],\n",[92,97866,97867],{"class":94,"line":1179},[92,97868,97869],{"class":207},"       [ 3,  4],\n",[92,97871,97872],{"class":94,"line":1193},[92,97873,97874],{"class":207},"       [ 5,  6],\n",[92,97876,97877],{"class":94,"line":1199},[92,97878,97879],{"class":207},"       [ 7,  8],\n",[92,97881,97882],{"class":94,"line":1290},[92,97883,97884],{"class":207},"       [ 9, 10],\n",[92,97886,97887],{"class":94,"line":1296},[92,97888,97889],{"class":207},"       [11, 12]])\n",[92,97891,97892],{"class":94,"line":1308},[92,97893,93908],{"class":207},[33,97895,97897],{"id":97896},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[38,97899,97900],{},"改变了原数组",[83,97902,97904],{"className":30359,"code":97903,"language":30361,"meta":10,"style":10},"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",[89,97905,97906,97922,97938,97942,97946,97950,97954],{"__ignoreMap":10},[92,97907,97908,97910,97912,97914,97916,97918,97920],{"class":94,"line":95},[92,97909,341],{"class":102},[92,97911,148],{"class":98},[92,97913,92982],{"class":102},[92,97915,320],{"class":151},[92,97917,481],{"class":102},[92,97919,626],{"class":151},[92,97921,109],{"class":102},[92,97923,97924,97926,97928,97930,97932,97934,97936],{"class":94,"line":11},[92,97925,97797],{"class":102},[92,97927,148],{"class":98},[92,97929,103],{"class":102},[92,97931,180],{"class":151},[92,97933,481],{"class":102},[92,97935,447],{"class":151},[92,97937,109],{"class":102},[92,97939,97940],{"class":94,"line":1158},[92,97941,93544],{"class":161},[92,97943,97944],{"class":94,"line":1173},[92,97945,93908],{"class":207},[92,97947,97948],{"class":94,"line":1179},[92,97949,97168],{"class":207},[92,97951,97952],{"class":94,"line":1193},[92,97953,97173],{"class":207},[92,97955,97956],{"class":94,"line":1199},[92,97957,93908],{"class":207},[33,97959,97961],{"id":97960},"_56-重要比较","5.6 重要比较：",[38,97963,97964],{},[1441,97965],{"alt":10,"src":97966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[38,97968,97969,97970,97972,97973,97975],{},"口诀：NumPy 函数要么用 ",[89,97971,95943],{},"，要么用 ",[89,97974,31477],{},"，创建结构用 shape，造数据用 size",[38,97977,97978],{},[1441,97979],{"alt":10,"src":97980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5106,97982,97983],{},"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":10,"searchDepth":11,"depth":11,"links":97985},[97986,97987,97988,97989,97990,97991],{"id":97507,"depth":11,"text":97508},{"id":97659,"depth":11,"text":97660},{"id":97709,"depth":11,"text":97710},{"id":97755,"depth":11,"text":97756},{"id":97896,"depth":11,"text":97897},{"id":97960,"depth":11,"text":97961},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97499,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":97998,"title":97999,"body":98000,"description":13,"extension":14,"meta":99072,"navigation":17,"path":99073,"seo":99074,"stem":99075,"__hash__":99076},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98001,"toc":99066},[98002,98005,98009,98012,98015,98018,98083,98086,98126,98129,98211,98214,98219,98241,98243,98248,98253,98256,98259,98414,98417,98619,98623,98626,98629,98697,98699,98704,98707,98710,98790,98794,98797,98799,98872,98874,98879,98881,98961,98965,98968,98971,98974,98977,98980,98983,99063],[29,98003,97999],{"id":98004},"_6数组的拼接",[33,98006,98008],{"id":98007},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[38,98010,98011],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[38,98013,98014],{},"函数内部传两个数列构成的数列或者元组",[38,98016,98017],{},"①一维数组的拼接",[83,98019,98021],{"className":30359,"code":98020,"language":30361,"meta":10,"style":10},"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",[89,98022,98023,98043,98063,98068,98073,98078],{"__ignoreMap":10},[92,98024,98025,98027,98029,98031,98033,98035,98037,98039,98041],{"class":94,"line":95},[92,98026,341],{"class":102},[92,98028,148],{"class":98},[92,98030,93004],{"class":102},[92,98032,320],{"class":151},[92,98034,481],{"class":102},[92,98036,180],{"class":151},[92,98038,481],{"class":102},[92,98040,174],{"class":151},[92,98042,4636],{"class":102},[92,98044,98045,98047,98049,98051,98053,98055,98057,98059,98061],{"class":94,"line":11},[92,98046,366],{"class":102},[92,98048,148],{"class":98},[92,98050,93004],{"class":102},[92,98052,396],{"class":151},[92,98054,481],{"class":102},[92,98056,422],{"class":151},[92,98058,481],{"class":102},[92,98060,447],{"class":151},[92,98062,4636],{"class":102},[92,98064,98065],{"class":94,"line":1158},[92,98066,98067],{"class":161},"#调用concatenate进行数组拼接\n",[92,98069,98070],{"class":94,"line":1173},[92,98071,98072],{"class":102},"np.concatenate((a,b))\n",[92,98074,98075],{"class":94,"line":1179},[92,98076,98077],{"class":161},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[92,98079,98080],{"class":94,"line":1193},[92,98081,98082],{"class":161},"#np.concatenate([a,b])\n",[38,98084,98085],{},"②一维多个数组拼接",[83,98087,98089],{"className":30359,"code":98088,"language":30361,"meta":10,"style":10},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[89,98090,98091,98096,98116,98121],{"__ignoreMap":10},[92,98092,98093],{"class":94,"line":95},[92,98094,98095],{"class":161},"#也可以多个数组进行拼接\n",[92,98097,98098,98100,98102,98104,98106,98108,98110,98112,98114],{"class":94,"line":11},[92,98099,391],{"class":102},[92,98101,148],{"class":98},[92,98103,93004],{"class":102},[92,98105,549],{"class":151},[92,98107,481],{"class":102},[92,98109,575],{"class":151},[92,98111,481],{"class":102},[92,98113,626],{"class":151},[92,98115,4636],{"class":102},[92,98117,98118],{"class":94,"line":1158},[92,98119,98120],{"class":102},"c\n",[92,98122,98123],{"class":94,"line":1173},[92,98124,98125],{"class":102},"np.concatenate((a,b,c))\n",[38,98127,98128],{},"③二维数组拼接",[83,98130,98132],{"className":30359,"code":98131,"language":30361,"meta":10,"style":10},"#二维数组使用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",[89,98133,98134,98139,98163,98188,98193,98198],{"__ignoreMap":10},[92,98135,98136],{"class":94,"line":95},[92,98137,98138],{"class":161},"#二维数组使用concatenate进行拼接\n",[92,98140,98141,98143,98145,98147,98149,98151,98153,98155,98157,98159,98161],{"class":94,"line":11},[92,98142,93286],{"class":102},[92,98144,148],{"class":98},[92,98146,92982],{"class":102},[92,98148,320],{"class":151},[92,98150,481],{"class":102},[92,98152,626],{"class":151},[92,98154,92987],{"class":102},[92,98156,174],{"class":151},[92,98158,481],{"class":102},[92,98160,396],{"class":151},[92,98162,109],{"class":102},[92,98164,98165,98168,98170,98172,98174,98176,98178,98180,98182,98184,98186],{"class":94,"line":1158},[92,98166,98167],{"class":102},"bb",[92,98169,148],{"class":98},[92,98171,92982],{"class":102},[92,98173,440],{"class":151},[92,98175,481],{"class":102},[92,98177,745],{"class":151},[92,98179,92987],{"class":102},[92,98181,174],{"class":151},[92,98183,481],{"class":102},[92,98185,396],{"class":151},[92,98187,109],{"class":102},[92,98189,98190],{"class":94,"line":1173},[92,98191,98192],{"class":161},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[92,98194,98195],{"class":94,"line":1179},[92,98196,98197],{"class":161},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[92,98199,98200,98203,98205,98207,98209],{"class":94,"line":1193},[92,98201,98202],{"class":102},"np.concatenate((aa,bb),",[92,98204,47495],{"class":5196},[92,98206,148],{"class":98},[92,98208,294],{"class":151},[92,98210,109],{"class":102},[38,98212,98213],{},"结果：",[38,98215,98216],{},[1441,98217],{"alt":10,"src":98218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[83,98220,98222],{"className":30359,"code":98221,"language":30361,"meta":10,"style":10},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[89,98223,98224,98229],{"__ignoreMap":10},[92,98225,98226],{"class":94,"line":95},[92,98227,98228],{"class":161},"#指定axis为1进行拼接\n",[92,98230,98231,98233,98235,98237,98239],{"class":94,"line":11},[92,98232,98202],{"class":102},[92,98234,47495],{"class":5196},[92,98236,148],{"class":98},[92,98238,320],{"class":151},[92,98240,109],{"class":102},[38,98242,98213],{},[38,98244,98245],{},[1441,98246],{"alt":10,"src":98247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[38,98249,98250],{},[252,98251,98252],{},"二维数组总结：0竖着方向，1横着方向",[38,98254,98255],{},"④三维数组拼接",[38,98257,98258],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[83,98260,98262],{"className":30359,"code":98261,"language":30361,"meta":10,"style":10},"#两个三行六列\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",[89,98263,98264,98269,98297,98327,98332,98349,98354,98359,98364,98381,98386,98391,98396,98409],{"__ignoreMap":10},[92,98265,98266],{"class":94,"line":95},[92,98267,98268],{"class":161},"#两个三行六列\n",[92,98270,98271,98273,98275,98277,98279,98281,98283,98285,98287,98289,98291,98293,98295],{"class":94,"line":11},[92,98272,95501],{"class":102},[92,98274,148],{"class":98},[92,98276,92982],{"class":102},[92,98278,320],{"class":151},[92,98280,481],{"class":102},[92,98282,428],{"class":151},[92,98284,92987],{"class":102},[92,98286,180],{"class":151},[92,98288,481],{"class":102},[92,98290,174],{"class":151},[92,98292,481],{"class":102},[92,98294,447],{"class":151},[92,98296,109],{"class":102},[92,98298,98299,98302,98304,98306,98308,98310,98313,98315,98317,98319,98321,98323,98325],{"class":94,"line":1158},[92,98300,98301],{"class":102},"bbb",[92,98303,148],{"class":98},[92,98305,92982],{"class":102},[92,98307,440],{"class":151},[92,98309,481],{"class":102},[92,98311,98312],{"class":151},"137",[92,98314,92987],{"class":102},[92,98316,180],{"class":151},[92,98318,481],{"class":102},[92,98320,174],{"class":151},[92,98322,481],{"class":102},[92,98324,447],{"class":151},[92,98326,109],{"class":102},[92,98328,98329],{"class":94,"line":1173},[92,98330,98331],{"class":161},"#axis=0\n",[92,98333,98334,98336,98338,98341,98343,98345,98347],{"class":94,"line":1179},[92,98335,798],{"class":102},[92,98337,148],{"class":98},[92,98339,98340],{"class":102},"np.concatenate((aaa,bbb),",[92,98342,47495],{"class":5196},[92,98344,148],{"class":98},[92,98346,294],{"class":151},[92,98348,109],{"class":102},[92,98350,98351],{"class":94,"line":1193},[92,98352,98353],{"class":102},"s.shape\n",[92,98355,98356],{"class":94,"line":1199},[92,98357,98358],{"class":161},"#输出：(4,3,6)\n",[92,98360,98361],{"class":94,"line":1290},[92,98362,98363],{"class":161},"#axis=1\n",[92,98365,98366,98369,98371,98373,98375,98377,98379],{"class":94,"line":1296},[92,98367,98368],{"class":102},"ss",[92,98370,148],{"class":98},[92,98372,98340],{"class":102},[92,98374,47495],{"class":5196},[92,98376,148],{"class":98},[92,98378,320],{"class":151},[92,98380,109],{"class":102},[92,98382,98383],{"class":94,"line":1308},[92,98384,98385],{"class":102},"ss.shape\n",[92,98387,98388],{"class":94,"line":1591},[92,98389,98390],{"class":161},"#输出：(2,6,6)\n",[92,98392,98393],{"class":94,"line":1596},[92,98394,98395],{"class":161},"#axis=2\n",[92,98397,98398,98400,98402,98404,98406],{"class":94,"line":1602},[92,98399,98340],{"class":102},[92,98401,47495],{"class":5196},[92,98403,148],{"class":98},[92,98405,180],{"class":151},[92,98407,98408],{"class":102},").shape\n",[92,98410,98411],{"class":94,"line":1607},[92,98412,98413],{"class":161},"#输出：（2，3，12）\n",[38,98415,98416],{},"⑤四维数组拼接",[83,98418,98420],{"className":30359,"code":98419,"language":30361,"meta":10,"style":10},"#两个三行六列\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",[89,98421,98422,98426,98454,98482,98507,98533,98537,98550,98555,98559,98571,98576,98580,98592,98597,98602,98614],{"__ignoreMap":10},[92,98423,98424],{"class":94,"line":95},[92,98425,98268],{"class":161},[92,98427,98428,98430,98432,98434,98436,98438,98440,98442,98444,98446,98448,98450,98452],{"class":94,"line":11},[92,98429,95501],{"class":102},[92,98431,148],{"class":98},[92,98433,92982],{"class":102},[92,98435,320],{"class":151},[92,98437,481],{"class":102},[92,98439,428],{"class":151},[92,98441,92987],{"class":102},[92,98443,180],{"class":151},[92,98445,481],{"class":102},[92,98447,174],{"class":151},[92,98449,481],{"class":102},[92,98451,447],{"class":151},[92,98453,109],{"class":102},[92,98455,98456,98458,98460,98462,98464,98466,98468,98470,98472,98474,98476,98478,98480],{"class":94,"line":1158},[92,98457,98301],{"class":102},[92,98459,148],{"class":98},[92,98461,92982],{"class":102},[92,98463,440],{"class":151},[92,98465,481],{"class":102},[92,98467,98312],{"class":151},[92,98469,92987],{"class":102},[92,98471,180],{"class":151},[92,98473,481],{"class":102},[92,98475,174],{"class":151},[92,98477,481],{"class":102},[92,98479,447],{"class":151},[92,98481,109],{"class":102},[92,98483,98484,98487,98489,98491,98493,98495,98497,98499,98501,98503,98505],{"class":94,"line":1173},[92,98485,98486],{"class":102},"aaaa",[92,98488,148],{"class":98},[92,98490,97650],{"class":102},[92,98492,180],{"class":151},[92,98494,481],{"class":102},[92,98496,174],{"class":151},[92,98498,481],{"class":102},[92,98500,174],{"class":151},[92,98502,481],{"class":102},[92,98504,180],{"class":151},[92,98506,109],{"class":102},[92,98508,98509,98512,98514,98517,98519,98521,98523,98525,98527,98529,98531],{"class":94,"line":1179},[92,98510,98511],{"class":102},"bbbb",[92,98513,148],{"class":98},[92,98515,98516],{"class":102},"bbb.reshape(",[92,98518,180],{"class":151},[92,98520,481],{"class":102},[92,98522,174],{"class":151},[92,98524,481],{"class":102},[92,98526,174],{"class":151},[92,98528,481],{"class":102},[92,98530,180],{"class":151},[92,98532,109],{"class":102},[92,98534,98535],{"class":94,"line":1193},[92,98536,98331],{"class":161},[92,98538,98539,98542,98544,98546,98548],{"class":94,"line":1199},[92,98540,98541],{"class":102},"np.concatenate((aaaa,bbbb),",[92,98543,47495],{"class":5196},[92,98545,148],{"class":98},[92,98547,294],{"class":151},[92,98549,98408],{"class":102},[92,98551,98552],{"class":94,"line":1290},[92,98553,98554],{"class":161},"#结果：（4，3，3，2）\n",[92,98556,98557],{"class":94,"line":1296},[92,98558,98363],{"class":161},[92,98560,98561,98563,98565,98567,98569],{"class":94,"line":1308},[92,98562,98541],{"class":102},[92,98564,47495],{"class":5196},[92,98566,148],{"class":98},[92,98568,320],{"class":151},[92,98570,98408],{"class":102},[92,98572,98573],{"class":94,"line":1591},[92,98574,98575],{"class":161},"#结果：（2，6，3，2）\n",[92,98577,98578],{"class":94,"line":1596},[92,98579,98395],{"class":161},[92,98581,98582,98584,98586,98588,98590],{"class":94,"line":1602},[92,98583,98541],{"class":102},[92,98585,47495],{"class":5196},[92,98587,148],{"class":98},[92,98589,180],{"class":151},[92,98591,98408],{"class":102},[92,98593,98594],{"class":94,"line":1607},[92,98595,98596],{"class":161},"#结果：（2，3，6，2）\n",[92,98598,98599],{"class":94,"line":1621},[92,98600,98601],{"class":161},"#axis=3\n",[92,98603,98604,98606,98608,98610,98612],{"class":94,"line":1626},[92,98605,98541],{"class":102},[92,98607,47495],{"class":5196},[92,98609,148],{"class":98},[92,98611,174],{"class":151},[92,98613,98408],{"class":102},[92,98615,98616],{"class":94,"line":1632},[92,98617,98618],{"class":161},"#结果：（2，3，3，4）\n",[33,98620,98622],{"id":98621},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[38,98624,98625],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[38,98627,98628],{},"①二维数组",[83,98630,98632],{"className":30359,"code":98631,"language":30361,"meta":10,"style":10},"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",[89,98633,98634,98658,98682,98687,98692],{"__ignoreMap":10},[92,98635,98636,98638,98640,98642,98644,98646,98648,98650,98652,98654,98656],{"class":94,"line":95},[92,98637,93286],{"class":102},[92,98639,148],{"class":98},[92,98641,92982],{"class":102},[92,98643,320],{"class":151},[92,98645,481],{"class":102},[92,98647,626],{"class":151},[92,98649,92987],{"class":102},[92,98651,174],{"class":151},[92,98653,481],{"class":102},[92,98655,396],{"class":151},[92,98657,109],{"class":102},[92,98659,98660,98662,98664,98666,98668,98670,98672,98674,98676,98678,98680],{"class":94,"line":11},[92,98661,98167],{"class":102},[92,98663,148],{"class":98},[92,98665,92982],{"class":102},[92,98667,440],{"class":151},[92,98669,481],{"class":102},[92,98671,745],{"class":151},[92,98673,92987],{"class":102},[92,98675,174],{"class":151},[92,98677,481],{"class":102},[92,98679,396],{"class":151},[92,98681,109],{"class":102},[92,98683,98684],{"class":94,"line":1158},[92,98685,98686],{"class":102},"np.hstack((aa,bb))\n",[92,98688,98689],{"class":94,"line":1173},[92,98690,98691],{"class":161},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[92,98693,98694],{"class":94,"line":1179},[92,98695,98696],{"class":161},"#np.hstack([aa,bb])\n",[38,98698,98213],{},[38,98700,98701],{},[1441,98702],{"alt":10,"src":98703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[38,98705,98706],{},"等效于concatenate()函数中axis=1时的情况",[38,98708,98709],{},"②三维数组",[83,98711,98713],{"className":30359,"code":98712,"language":30361,"meta":10,"style":10},"#两个三行六列\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",[89,98714,98715,98719,98747,98775,98780,98785],{"__ignoreMap":10},[92,98716,98717],{"class":94,"line":95},[92,98718,98268],{"class":161},[92,98720,98721,98723,98725,98727,98729,98731,98733,98735,98737,98739,98741,98743,98745],{"class":94,"line":11},[92,98722,95501],{"class":102},[92,98724,148],{"class":98},[92,98726,92982],{"class":102},[92,98728,320],{"class":151},[92,98730,481],{"class":102},[92,98732,428],{"class":151},[92,98734,92987],{"class":102},[92,98736,180],{"class":151},[92,98738,481],{"class":102},[92,98740,174],{"class":151},[92,98742,481],{"class":102},[92,98744,447],{"class":151},[92,98746,109],{"class":102},[92,98748,98749,98751,98753,98755,98757,98759,98761,98763,98765,98767,98769,98771,98773],{"class":94,"line":1158},[92,98750,98301],{"class":102},[92,98752,148],{"class":98},[92,98754,92982],{"class":102},[92,98756,440],{"class":151},[92,98758,481],{"class":102},[92,98760,98312],{"class":151},[92,98762,92987],{"class":102},[92,98764,180],{"class":151},[92,98766,481],{"class":102},[92,98768,174],{"class":151},[92,98770,481],{"class":102},[92,98772,447],{"class":151},[92,98774,109],{"class":102},[92,98776,98777],{"class":94,"line":1173},[92,98778,98779],{"class":161},"#使用hstack\n",[92,98781,98782],{"class":94,"line":1179},[92,98783,98784],{"class":102},"np.hstack((aaa,bbb)).shape\n",[92,98786,98787],{"class":94,"line":1193},[92,98788,98789],{"class":161},"#输出：（2，6，6）\n",[33,98791,98793],{"id":98792},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[38,98795,98796],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[38,98798,98628],{},[83,98800,98802],{"className":30359,"code":98801,"language":30361,"meta":10,"style":10},"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",[89,98803,98804,98828,98852,98857,98862,98867],{"__ignoreMap":10},[92,98805,98806,98808,98810,98812,98814,98816,98818,98820,98822,98824,98826],{"class":94,"line":95},[92,98807,93286],{"class":102},[92,98809,148],{"class":98},[92,98811,92982],{"class":102},[92,98813,320],{"class":151},[92,98815,481],{"class":102},[92,98817,626],{"class":151},[92,98819,92987],{"class":102},[92,98821,174],{"class":151},[92,98823,481],{"class":102},[92,98825,396],{"class":151},[92,98827,109],{"class":102},[92,98829,98830,98832,98834,98836,98838,98840,98842,98844,98846,98848,98850],{"class":94,"line":11},[92,98831,98167],{"class":102},[92,98833,148],{"class":98},[92,98835,92982],{"class":102},[92,98837,440],{"class":151},[92,98839,481],{"class":102},[92,98841,745],{"class":151},[92,98843,92987],{"class":102},[92,98845,174],{"class":151},[92,98847,481],{"class":102},[92,98849,396],{"class":151},[92,98851,109],{"class":102},[92,98853,98854],{"class":94,"line":1158},[92,98855,98856],{"class":161},"#vstack 垂直方向进行堆叠\n",[92,98858,98859],{"class":94,"line":1173},[92,98860,98861],{"class":102},"np.vstack((aa,bb))\n",[92,98863,98864],{"class":94,"line":1179},[92,98865,98866],{"class":161},"#与hstack传的参数类似，等价于：\n",[92,98868,98869],{"class":94,"line":1193},[92,98870,98871],{"class":102},"np.vstack([aa,bb])\n",[38,98873,98213],{},[38,98875,98876],{},[1441,98877],{"alt":10,"src":98878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[38,98880,98709],{},[83,98882,98884],{"className":30359,"code":98883,"language":30361,"meta":10,"style":10},"#两个三行六列\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",[89,98885,98886,98890,98918,98946,98951,98956],{"__ignoreMap":10},[92,98887,98888],{"class":94,"line":95},[92,98889,98268],{"class":161},[92,98891,98892,98894,98896,98898,98900,98902,98904,98906,98908,98910,98912,98914,98916],{"class":94,"line":11},[92,98893,95501],{"class":102},[92,98895,148],{"class":98},[92,98897,92982],{"class":102},[92,98899,320],{"class":151},[92,98901,481],{"class":102},[92,98903,428],{"class":151},[92,98905,92987],{"class":102},[92,98907,180],{"class":151},[92,98909,481],{"class":102},[92,98911,174],{"class":151},[92,98913,481],{"class":102},[92,98915,447],{"class":151},[92,98917,109],{"class":102},[92,98919,98920,98922,98924,98926,98928,98930,98932,98934,98936,98938,98940,98942,98944],{"class":94,"line":1158},[92,98921,98301],{"class":102},[92,98923,148],{"class":98},[92,98925,92982],{"class":102},[92,98927,440],{"class":151},[92,98929,481],{"class":102},[92,98931,98312],{"class":151},[92,98933,92987],{"class":102},[92,98935,180],{"class":151},[92,98937,481],{"class":102},[92,98939,174],{"class":151},[92,98941,481],{"class":102},[92,98943,447],{"class":151},[92,98945,109],{"class":102},[92,98947,98948],{"class":94,"line":1173},[92,98949,98950],{"class":161},"#使用vstack\n",[92,98952,98953],{"class":94,"line":1179},[92,98954,98955],{"class":102},"np.vstack((aaa,bbb)).shape\n",[92,98957,98958],{"class":94,"line":1193},[92,98959,98960],{"class":161},"#输出：（4，3，6）\n",[33,98962,98964],{"id":98963},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[38,98966,98967],{},"该方法是三维数组特有的方法",[38,98969,98970],{},"也就是说",[38,98972,98973],{},"一维数组拼接方法用：concatenate()",[38,98975,98976],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[38,98978,98979],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[38,98981,98982],{},"四维数组及多维数组只能用concatenate进行拼接",[83,98984,98986],{"className":30359,"code":98985,"language":30361,"meta":10,"style":10},"#两个三行六列\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",[89,98987,98988,98992,99020,99048,99053,99058],{"__ignoreMap":10},[92,98989,98990],{"class":94,"line":95},[92,98991,98268],{"class":161},[92,98993,98994,98996,98998,99000,99002,99004,99006,99008,99010,99012,99014,99016,99018],{"class":94,"line":11},[92,98995,95501],{"class":102},[92,98997,148],{"class":98},[92,98999,92982],{"class":102},[92,99001,320],{"class":151},[92,99003,481],{"class":102},[92,99005,428],{"class":151},[92,99007,92987],{"class":102},[92,99009,180],{"class":151},[92,99011,481],{"class":102},[92,99013,174],{"class":151},[92,99015,481],{"class":102},[92,99017,447],{"class":151},[92,99019,109],{"class":102},[92,99021,99022,99024,99026,99028,99030,99032,99034,99036,99038,99040,99042,99044,99046],{"class":94,"line":1158},[92,99023,98301],{"class":102},[92,99025,148],{"class":98},[92,99027,92982],{"class":102},[92,99029,440],{"class":151},[92,99031,481],{"class":102},[92,99033,98312],{"class":151},[92,99035,92987],{"class":102},[92,99037,180],{"class":151},[92,99039,481],{"class":102},[92,99041,174],{"class":151},[92,99043,481],{"class":102},[92,99045,447],{"class":151},[92,99047,109],{"class":102},[92,99049,99050],{"class":94,"line":1173},[92,99051,99052],{"class":161},"#使用dstack\n",[92,99054,99055],{"class":94,"line":1179},[92,99056,99057],{"class":102},"np.dstack((aaa,bbb)).shape\n",[92,99059,99060],{"class":94,"line":1193},[92,99061,99062],{"class":161},"#结果：（2，3，12）\n",[5106,99064,99065],{},"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":10,"searchDepth":11,"depth":11,"links":99067},[99068,99069,99070,99071],{"id":98007,"depth":11,"text":98008},{"id":98621,"depth":11,"text":98622},{"id":98792,"depth":11,"text":98793},{"id":98963,"depth":11,"text":98964},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":97999,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99078,"title":99079,"body":99080,"description":13,"extension":14,"meta":99355,"navigation":17,"path":99356,"seo":99357,"stem":99358,"__hash__":99359},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99081,"toc":99353},[99082,99085,99088,99182,99185,99188,99191,99194,99197,99200,99203,99206,99350],[29,99083,99079],{"id":99084},"_7数组转置",[38,99086,99087],{},"使用transpose()函数",[83,99089,99091],{"className":30359,"code":99090,"language":30361,"meta":10,"style":10},"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",[89,99092,99093,99103,99127,99132,99137,99142,99147,99155,99159,99163,99168,99173,99178],{"__ignoreMap":10},[92,99094,99095,99097,99099,99101],{"class":94,"line":95},[92,99096,30373],{"class":98},[92,99098,31361],{"class":102},[92,99100,31364],{"class":98},[92,99102,31367],{"class":102},[92,99104,99105,99107,99109,99111,99113,99115,99117,99119,99121,99123,99125],{"class":94,"line":11},[92,99106,341],{"class":102},[92,99108,148],{"class":98},[92,99110,31698],{"class":102},[92,99112,320],{"class":151},[92,99114,481],{"class":102},[92,99116,626],{"class":151},[92,99118,92987],{"class":102},[92,99120,396],{"class":151},[92,99122,481],{"class":102},[92,99124,174],{"class":151},[92,99126,109],{"class":102},[92,99128,99129],{"class":94,"line":1158},[92,99130,99131],{"class":161},"#二维数组转置\n",[92,99133,99134],{"class":94,"line":1173},[92,99135,99136],{"class":161},"#调用transpose()函数\n",[92,99138,99139],{"class":94,"line":1179},[92,99140,99141],{"class":102},"a.transpose()\n",[92,99143,99144],{"class":94,"line":1193},[92,99145,99146],{"class":161},"#对于二维数组也可以采用.T来实现\n",[92,99148,99149,99152],{"class":94,"line":1199},[92,99150,99151],{"class":102},"a.T",[92,99153,99154],{"class":161},"#与上述代码一样\n",[92,99156,99157],{"class":94,"line":1290},[92,99158,93544],{"class":161},[92,99160,99161],{"class":94,"line":1296},[92,99162,93908],{"class":207},[92,99164,99165],{"class":94,"line":1308},[92,99166,99167],{"class":207},"array([[ 1,  4,  7, 10],\n",[92,99169,99170],{"class":94,"line":1591},[92,99171,99172],{"class":207},"       [ 2,  5,  8, 11],\n",[92,99174,99175],{"class":94,"line":1596},[92,99176,99177],{"class":207},"       [ 3,  6,  9, 12]])\n",[92,99179,99180],{"class":94,"line":1602},[92,99181,93908],{"class":207},[38,99183,99184],{},"也可以使用np.transpose()的形式",[38,99186,99187],{},"#多维数组进行转置 np.transpose()",[38,99189,99190],{},"#对二维数组也可以使用np.transpose()进行转置",[38,99192,99193],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[38,99195,99196],{},"第二个参数，维度可以理解为用axis中的数来理解",[38,99198,99199],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[38,99201,99202],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[38,99204,99205],{},"四维及以上的数组也是一样的道理",[83,99207,99209],{"className":30359,"code":99208,"language":30361,"meta":10,"style":10},"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",[89,99210,99211,99239,99244,99249,99254,99272,99277,99309,99314,99319,99324,99345],{"__ignoreMap":10},[92,99212,99213,99215,99217,99219,99221,99223,99225,99227,99229,99231,99233,99235,99237],{"class":94,"line":95},[92,99214,923],{"class":102},[92,99216,148],{"class":98},[92,99218,92982],{"class":102},[92,99220,320],{"class":151},[92,99222,481],{"class":102},[92,99224,428],{"class":151},[92,99226,92987],{"class":102},[92,99228,174],{"class":151},[92,99230,481],{"class":102},[92,99232,447],{"class":151},[92,99234,481],{"class":102},[92,99236,180],{"class":151},[92,99238,109],{"class":102},[92,99240,99241],{"class":94,"line":11},[92,99242,99243],{"class":102},"x.shape\n",[92,99245,99246],{"class":94,"line":1158},[92,99247,99248],{"class":161},"#结果：（3,6,2）\n",[92,99250,99251],{"class":94,"line":1173},[92,99252,99253],{"class":161},"#使用np.transpose()进行转置 变为(2,6,3)\n",[92,99255,99256,99259,99261,99263,99265,99267,99269],{"class":94,"line":1179},[92,99257,99258],{"class":102},"np.transpose(x,(",[92,99260,180],{"class":151},[92,99262,481],{"class":102},[92,99264,320],{"class":151},[92,99266,481],{"class":102},[92,99268,294],{"class":151},[92,99270,99271],{"class":102},")).shape\n",[92,99273,99274],{"class":94,"line":1193},[92,99275,99276],{"class":161},"#结果：(2,6,3)\n",[92,99278,99279,99281,99283,99285,99287,99289,99291,99293,99295,99297,99299,99301,99303,99305,99307],{"class":94,"line":1199},[92,99280,98486],{"class":102},[92,99282,148],{"class":98},[92,99284,92982],{"class":102},[92,99286,320],{"class":151},[92,99288,481],{"class":102},[92,99290,428],{"class":151},[92,99292,92987],{"class":102},[92,99294,174],{"class":151},[92,99296,481],{"class":102},[92,99298,180],{"class":151},[92,99300,481],{"class":102},[92,99302,320],{"class":151},[92,99304,481],{"class":102},[92,99306,447],{"class":151},[92,99308,109],{"class":102},[92,99310,99311],{"class":94,"line":1290},[92,99312,99313],{"class":102},"aaaa.shape\n",[92,99315,99316],{"class":94,"line":1296},[92,99317,99318],{"class":161},"#结果：（3，2，1，6）\n",[92,99320,99321],{"class":94,"line":1308},[92,99322,99323],{"class":161},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[92,99325,99326,99329,99331,99333,99335,99337,99339,99341,99343],{"class":94,"line":1591},[92,99327,99328],{"class":102},"np.transpose(aaaa,(",[92,99330,320],{"class":151},[92,99332,481],{"class":102},[92,99334,180],{"class":151},[92,99336,481],{"class":102},[92,99338,294],{"class":151},[92,99340,481],{"class":102},[92,99342,174],{"class":151},[92,99344,99271],{"class":102},[92,99346,99347],{"class":94,"line":1596},[92,99348,99349],{"class":161},"#结果：(2,1,3,6)\n",[5106,99351,99352],{},"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":10,"searchDepth":11,"depth":11,"links":99354},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99079,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99361,"title":99362,"body":99363,"description":13,"extension":14,"meta":100097,"navigation":17,"path":100098,"seo":100099,"stem":100100,"__hash__":100101},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99364,"toc":100095},[99365,99368,99371,99374,99377,99380,99383,99386,99389,99498,99501,99504,100092],[29,99366,99362],{"id":99367},"_8数组分割",[38,99369,99370],{},"split分割",[38,99372,99373],{},"numpy.split(ary,indics_or_sections,axis)",[38,99375,99376],{},"解释：",[38,99378,99379],{},"ary:被分割的数组",[38,99381,99382],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[38,99384,99385],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[38,99387,99388],{},"①一维数组的分割",[83,99390,99392],{"className":30359,"code":99391,"language":30361,"meta":10,"style":10},"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",[89,99393,99394,99410,99415,99424,99428,99433,99441,99445,99450,99455,99468,99472,99477,99489,99493],{"__ignoreMap":10},[92,99395,99396,99398,99400,99402,99404,99406,99408],{"class":94,"line":95},[92,99397,341],{"class":102},[92,99399,148],{"class":98},[92,99401,92982],{"class":102},[92,99403,320],{"class":151},[92,99405,481],{"class":102},[92,99407,523],{"class":151},[92,99409,109],{"class":102},[92,99411,99412],{"class":94,"line":11},[92,99413,99414],{"class":161},"#如果传入整数，必须能够平分，否则会报错\n",[92,99416,99417,99420,99422],{"class":94,"line":1158},[92,99418,99419],{"class":102},"np.split(a,",[92,99421,180],{"class":151},[92,99423,109],{"class":102},[92,99425,99426],{"class":94,"line":1173},[92,99427,93544],{"class":161},[92,99429,99430],{"class":94,"line":1179},[92,99431,99432],{"class":161},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[92,99434,99435,99437,99439],{"class":94,"line":1193},[92,99436,99419],{"class":102},[92,99438,396],{"class":151},[92,99440,109],{"class":102},[92,99442,99443],{"class":94,"line":1199},[92,99444,93544],{"class":161},[92,99446,99447],{"class":94,"line":1290},[92,99448,99449],{"class":161},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[92,99451,99452],{"class":94,"line":1296},[92,99453,99454],{"class":161},"#传入数组\n",[92,99456,99457,99460,99462,99464,99466],{"class":94,"line":1308},[92,99458,99459],{"class":102},"np.split(a,[",[92,99461,174],{"class":151},[92,99463,481],{"class":102},[92,99465,422],{"class":151},[92,99467,4636],{"class":102},[92,99469,99470],{"class":94,"line":1591},[92,99471,93544],{"class":161},[92,99473,99474],{"class":94,"line":1596},[92,99475,99476],{"class":161},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[92,99478,99479,99481,99483,99485,99487],{"class":94,"line":1602},[92,99480,99459],{"class":102},[92,99482,422],{"class":151},[92,99484,481],{"class":102},[92,99486,472],{"class":151},[92,99488,4636],{"class":102},[92,99490,99491],{"class":94,"line":1607},[92,99492,93544],{"class":161},[92,99494,99495],{"class":94,"line":1621},[92,99496,99497],{"class":161},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[38,99499,99500],{},"②二维数组的分割",[38,99502,99503],{},"使用split()",[83,99505,99507],{"className":30359,"code":99506,"language":30361,"meta":10,"style":10},"#二维数组分割\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",[89,99508,99509,99514,99538,99543,99552,99556,99560,99565,99570,99575,99580,99585,99590,99595,99599,99612,99616,99620,99624,99628,99632,99637,99642,99647,99651,99656,99672,99676,99680,99685,99690,99695,99700,99705,99710,99715,99720,99725,99730,99735,99740,99745,99750,99755,99760,99765,99770,99774,99778,99798,99802,99806,99811,99816,99821,99826,99831,99836,99841,99846,99851,99856,99861,99866,99871,99876,99881,99886,99891,99896,99900,99905,99914,99918,99922,99926,99930,99934,99938,99942,99946,99950,99959,99963,99967,99971,99975,99979,99983,99987,99991,99995,99999,100003,100007,100011,100015,100019,100023,100027,100031,100035,100039,100043,100056,100060,100064,100068,100072,100076,100080,100084,100088],{"__ignoreMap":10},[92,99510,99511],{"class":94,"line":95},[92,99512,99513],{"class":161},"#二维数组分割\n",[92,99515,99516,99518,99520,99522,99524,99526,99528,99530,99532,99534,99536],{"class":94,"line":11},[92,99517,93286],{"class":102},[92,99519,148],{"class":98},[92,99521,92982],{"class":102},[92,99523,320],{"class":151},[92,99525,481],{"class":102},[92,99527,428],{"class":151},[92,99529,92987],{"class":102},[92,99531,447],{"class":151},[92,99533,481],{"class":102},[92,99535,447],{"class":151},[92,99537,109],{"class":102},[92,99539,99540],{"class":94,"line":1158},[92,99541,99542],{"class":161},"#默认axis=0  传入整数平均分,按行来的\n",[92,99544,99545,99548,99550],{"class":94,"line":1173},[92,99546,99547],{"class":102},"np.split(aa,",[92,99549,174],{"class":151},[92,99551,109],{"class":102},[92,99553,99554],{"class":94,"line":1179},[92,99555,95744],{"class":161},[92,99557,99558],{"class":94,"line":1193},[92,99559,93908],{"class":207},[92,99561,99562],{"class":94,"line":1199},[92,99563,99564],{"class":207},"[array([[ 1,  2,  3,  4,  5,  6],\n",[92,99566,99567],{"class":94,"line":1290},[92,99568,99569],{"class":207},"        [ 7,  8,  9, 10, 11, 12]]),\n",[92,99571,99572],{"class":94,"line":1296},[92,99573,99574],{"class":207}," array([[13, 14, 15, 16, 17, 18],\n",[92,99576,99577],{"class":94,"line":1308},[92,99578,99579],{"class":207},"        [19, 20, 21, 22, 23, 24]]),\n",[92,99581,99582],{"class":94,"line":1591},[92,99583,99584],{"class":207}," array([[25, 26, 27, 28, 29, 30],\n",[92,99586,99587],{"class":94,"line":1596},[92,99588,99589],{"class":207},"        [31, 32, 33, 34, 35, 36]])]\n",[92,99591,99592],{"class":94,"line":1602},[92,99593,99594],{"class":207}," '''\n",[92,99596,99597],{"class":94,"line":1607},[92,99598,99454],{"class":161},[92,99600,99601,99604,99606,99608,99610],{"class":94,"line":1621},[92,99602,99603],{"class":102},"np.split(aa,[",[92,99605,180],{"class":151},[92,99607,481],{"class":102},[92,99609,422],{"class":151},[92,99611,4636],{"class":102},[92,99613,99614],{"class":94,"line":1626},[92,99615,95744],{"class":161},[92,99617,99618],{"class":94,"line":1632},[92,99619,93908],{"class":207},[92,99621,99622],{"class":94,"line":1653},[92,99623,99564],{"class":207},[92,99625,99626],{"class":94,"line":1658},[92,99627,99569],{"class":207},[92,99629,99630],{"class":94,"line":1672},[92,99631,99574],{"class":207},[92,99633,99634],{"class":94,"line":1677},[92,99635,99636],{"class":207},"        [19, 20, 21, 22, 23, 24],\n",[92,99638,99639],{"class":94,"line":1706},[92,99640,99641],{"class":207},"        [25, 26, 27, 28, 29, 30]]),\n",[92,99643,99644],{"class":94,"line":1711},[92,99645,99646],{"class":207}," array([[31, 32, 33, 34, 35, 36]])]\n",[92,99648,99649],{"class":94,"line":1728},[92,99650,93908],{"class":207},[92,99652,99653],{"class":94,"line":1733},[92,99654,99655],{"class":161},"#axis=1 按照列来分\n",[92,99657,99658,99660,99662,99664,99666,99668,99670],{"class":94,"line":1738},[92,99659,99547],{"class":102},[92,99661,174],{"class":151},[92,99663,481],{"class":102},[92,99665,47495],{"class":5196},[92,99667,148],{"class":98},[92,99669,320],{"class":151},[92,99671,109],{"class":102},[92,99673,99674],{"class":94,"line":1743},[92,99675,95744],{"class":161},[92,99677,99678],{"class":94,"line":1757},[92,99679,93908],{"class":207},[92,99681,99682],{"class":94,"line":1762},[92,99683,99684],{"class":207},"[array([[ 1,  2],\n",[92,99686,99687],{"class":94,"line":2556},[92,99688,99689],{"class":207},"        [ 7,  8],\n",[92,99691,99692],{"class":94,"line":2570},[92,99693,99694],{"class":207},"        [13, 14],\n",[92,99696,99697],{"class":94,"line":2578},[92,99698,99699],{"class":207},"        [19, 20],\n",[92,99701,99702],{"class":94,"line":2583},[92,99703,99704],{"class":207},"        [25, 26],\n",[92,99706,99707],{"class":94,"line":2589},[92,99708,99709],{"class":207},"        [31, 32]]),\n",[92,99711,99712],{"class":94,"line":2595},[92,99713,99714],{"class":207}," array([[ 3,  4],\n",[92,99716,99717],{"class":94,"line":2600},[92,99718,99719],{"class":207},"        [ 9, 10],\n",[92,99721,99722],{"class":94,"line":7928},[92,99723,99724],{"class":207},"        [15, 16],\n",[92,99726,99727],{"class":94,"line":7952},[92,99728,99729],{"class":207},"        [21, 22],\n",[92,99731,99732],{"class":94,"line":7957},[92,99733,99734],{"class":207},"        [27, 28],\n",[92,99736,99737],{"class":94,"line":7963},[92,99738,99739],{"class":207},"        [33, 34]]),\n",[92,99741,99742],{"class":94,"line":7990},[92,99743,99744],{"class":207}," array([[ 5,  6],\n",[92,99746,99747],{"class":94,"line":7995},[92,99748,99749],{"class":207},"        [11, 12],\n",[92,99751,99752],{"class":94,"line":8001},[92,99753,99754],{"class":207},"        [17, 18],\n",[92,99756,99757],{"class":94,"line":8013},[92,99758,99759],{"class":207},"        [23, 24],\n",[92,99761,99762],{"class":94,"line":8025},[92,99763,99764],{"class":207},"        [29, 30],\n",[92,99766,99767],{"class":94,"line":8037},[92,99768,99769],{"class":207},"        [35, 36]])]\n",[92,99771,99772],{"class":94,"line":9696},[92,99773,99594],{"class":207},[92,99775,99776],{"class":94,"line":9721},[92,99777,99454],{"class":161},[92,99779,99780,99782,99784,99786,99788,99790,99792,99794,99796],{"class":94,"line":9744},[92,99781,99603],{"class":102},[92,99783,320],{"class":151},[92,99785,481],{"class":102},[92,99787,180],{"class":151},[92,99789,41590],{"class":102},[92,99791,47495],{"class":5196},[92,99793,148],{"class":98},[92,99795,320],{"class":151},[92,99797,109],{"class":102},[92,99799,99800],{"class":94,"line":9768},[92,99801,93544],{"class":161},[92,99803,99804],{"class":94,"line":9773},[92,99805,93908],{"class":207},[92,99807,99808],{"class":94,"line":9778},[92,99809,99810],{"class":207},"[array([[ 1],\n",[92,99812,99813],{"class":94,"line":9783},[92,99814,99815],{"class":207},"        [ 7],\n",[92,99817,99818],{"class":94,"line":9792},[92,99819,99820],{"class":207},"        [13],\n",[92,99822,99823],{"class":94,"line":9797},[92,99824,99825],{"class":207},"        [19],\n",[92,99827,99828],{"class":94,"line":9803},[92,99829,99830],{"class":207},"        [25],\n",[92,99832,99833],{"class":94,"line":9824},[92,99834,99835],{"class":207},"        [31]]),\n",[92,99837,99838],{"class":94,"line":9830},[92,99839,99840],{"class":207}," array([[ 2],\n",[92,99842,99843],{"class":94,"line":9844},[92,99844,99845],{"class":207},"        [ 8],\n",[92,99847,99848],{"class":94,"line":9850},[92,99849,99850],{"class":207},"        [14],\n",[92,99852,99853],{"class":94,"line":9877},[92,99854,99855],{"class":207},"        [20],\n",[92,99857,99858],{"class":94,"line":9886},[92,99859,99860],{"class":207},"        [26],\n",[92,99862,99863],{"class":94,"line":9892},[92,99864,99865],{"class":207},"        [32]]),\n",[92,99867,99868],{"class":94,"line":9900},[92,99869,99870],{"class":207}," array([[ 3,  4,  5,  6],\n",[92,99872,99873],{"class":94,"line":9905},[92,99874,99875],{"class":207},"        [ 9, 10, 11, 12],\n",[92,99877,99878],{"class":94,"line":16584},[92,99879,99880],{"class":207},"        [15, 16, 17, 18],\n",[92,99882,99883],{"class":94,"line":16590},[92,99884,99885],{"class":207},"        [21, 22, 23, 24],\n",[92,99887,99888],{"class":94,"line":16613},[92,99889,99890],{"class":207},"        [27, 28, 29, 30],\n",[92,99892,99893],{"class":94,"line":16619},[92,99894,99895],{"class":207},"        [33, 34, 35, 36]])]\n",[92,99897,99898],{"class":94,"line":16642},[92,99899,93908],{"class":207},[92,99901,99902],{"class":94,"line":16656},[92,99903,99904],{"class":161},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[92,99906,99907,99910,99912],{"class":94,"line":16676},[92,99908,99909],{"class":102},"np.vsplit(aa,",[92,99911,174],{"class":151},[92,99913,109],{"class":102},[92,99915,99916],{"class":94,"line":16682},[92,99917,93544],{"class":161},[92,99919,99920],{"class":94,"line":16693},[92,99921,93908],{"class":207},[92,99923,99924],{"class":94,"line":16716},[92,99925,99564],{"class":207},[92,99927,99928],{"class":94,"line":16738},[92,99929,99569],{"class":207},[92,99931,99932],{"class":94,"line":16743},[92,99933,99574],{"class":207},[92,99935,99936],{"class":94,"line":16749},[92,99937,99579],{"class":207},[92,99939,99940],{"class":94,"line":16763},[92,99941,99584],{"class":207},[92,99943,99944],{"class":94,"line":16776},[92,99945,99589],{"class":207},[92,99947,99948],{"class":94,"line":16781},[92,99949,93908],{"class":207},[92,99951,99952,99955,99957],{"class":94,"line":16795},[92,99953,99954],{"class":102},"np.hsplit(aa,",[92,99956,174],{"class":151},[92,99958,109],{"class":102},[92,99960,99961],{"class":94,"line":16800},[92,99962,93544],{"class":161},[92,99964,99965],{"class":94,"line":16806},[92,99966,93908],{"class":207},[92,99968,99969],{"class":94,"line":16811},[92,99970,99684],{"class":207},[92,99972,99973],{"class":94,"line":16825},[92,99974,99689],{"class":207},[92,99976,99977],{"class":94,"line":16830},[92,99978,99694],{"class":207},[92,99980,99981],{"class":94,"line":16835},[92,99982,99699],{"class":207},[92,99984,99985],{"class":94,"line":16849},[92,99986,99704],{"class":207},[92,99988,99989],{"class":94,"line":16861},[92,99990,99709],{"class":207},[92,99992,99993],{"class":94,"line":16866},[92,99994,99714],{"class":207},[92,99996,99997],{"class":94,"line":16879},[92,99998,99719],{"class":207},[92,100000,100001],{"class":94,"line":16884},[92,100002,99724],{"class":207},[92,100004,100005],{"class":94,"line":16889},[92,100006,99729],{"class":207},[92,100008,100009],{"class":94,"line":16894},[92,100010,99734],{"class":207},[92,100012,100013],{"class":94,"line":16907},[92,100014,99739],{"class":207},[92,100016,100017],{"class":94,"line":16912},[92,100018,99744],{"class":207},[92,100020,100021],{"class":94,"line":32614},[92,100022,99749],{"class":207},[92,100024,100025],{"class":94,"line":32620},[92,100026,99754],{"class":207},[92,100028,100029],{"class":94,"line":32626},[92,100030,99759],{"class":207},[92,100032,100033],{"class":94,"line":32632},[92,100034,99764],{"class":207},[92,100036,100037],{"class":94,"line":32638},[92,100038,99769],{"class":207},[92,100040,100041],{"class":94,"line":32649},[92,100042,93908],{"class":207},[92,100044,100045,100048,100050,100052,100054],{"class":94,"line":32655},[92,100046,100047],{"class":102},"np.vsplit(aa,[",[92,100049,180],{"class":151},[92,100051,481],{"class":102},[92,100053,422],{"class":151},[92,100055,4636],{"class":102},[92,100057,100058],{"class":94,"line":32675},[92,100059,93544],{"class":161},[92,100061,100062],{"class":94,"line":32681},[92,100063,93908],{"class":207},[92,100065,100066],{"class":94,"line":32692},[92,100067,99564],{"class":207},[92,100069,100070],{"class":94,"line":32698},[92,100071,99569],{"class":207},[92,100073,100074],{"class":94,"line":32704},[92,100075,99574],{"class":207},[92,100077,100078],{"class":94,"line":32710},[92,100079,99636],{"class":207},[92,100081,100082],{"class":94,"line":32716},[92,100083,99641],{"class":207},[92,100085,100086],{"class":94,"line":32722},[92,100087,99646],{"class":207},[92,100089,100090],{"class":94,"line":32728},[92,100091,99594],{"class":207},[5106,100093,100094],{},"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":10,"searchDepth":11,"depth":11,"links":100096},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99362,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100103,"title":100104,"body":100105,"description":13,"extension":14,"meta":100599,"navigation":17,"path":100600,"seo":100601,"stem":100602,"__hash__":100603},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100106,"toc":100590},[100107,100110,100113,100138,100142,100201,100253,100257,100259,100295,100349,100351,100389,100460,100464,100469,100473,100476,100509,100512,100516,100519,100522,100525,100528,100533,100537,100540,100543,100546,100549,100554,100558,100563,100566,100587],[29,100108,100104],{"id":100109},"_9数学函数",[38,100111,100112],{},"补充回顾：python的列表推导式",[83,100114,100116],{"className":30359,"code":100115,"language":30361,"meta":10,"style":10},"[1\u002Fi for i in a]\n",[89,100117,100118],{"__ignoreMap":10},[92,100119,100120,100122,100124,100126,100129,100131,100133,100135],{"class":94,"line":95},[92,100121,993],{"class":102},[92,100123,320],{"class":151},[92,100125,687],{"class":98},[92,100127,100128],{"class":102},"i ",[92,100130,3004],{"class":98},[92,100132,9418],{"class":102},[92,100134,26024],{"class":98},[92,100136,100137],{"class":102}," a]\n",[33,100139,100141],{"id":100140},"_91-求倒数","9.1 求倒数",[83,100143,100145],{"className":30359,"code":100144,"language":30361,"meta":10,"style":10},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[89,100146,100147,100152,100180,100192],{"__ignoreMap":10},[92,100148,100149],{"class":94,"line":95},[92,100150,100151],{"class":161},"#数组求倒数\n",[92,100153,100154,100156,100158,100160,100162,100164,100166,100168,100170,100172,100174,100176,100178],{"class":94,"line":11},[92,100155,341],{"class":102},[92,100157,148],{"class":98},[92,100159,993],{"class":102},[92,100161,320],{"class":151},[92,100163,481],{"class":102},[92,100165,180],{"class":151},[92,100167,481],{"class":102},[92,100169,174],{"class":151},[92,100171,481],{"class":102},[92,100173,396],{"class":151},[92,100175,481],{"class":102},[92,100177,422],{"class":151},[92,100179,33227],{"class":102},[92,100181,100182,100184,100186,100189],{"class":94,"line":1158},[92,100183,366],{"class":102},[92,100185,148],{"class":98},[92,100187,100188],{"class":102},"np.array(a)",[92,100190,100191],{"class":161},"#将列表转换为数组\n",[92,100193,100194,100196,100198],{"class":94,"line":1173},[92,100195,320],{"class":151},[92,100197,687],{"class":98},[92,100199,100200],{"class":102},"b\n",[83,100202,100204],{"className":30359,"code":100203,"language":30361,"meta":10,"style":10},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[89,100205,100206,100234,100243,100248],{"__ignoreMap":10},[92,100207,100208,100210,100212,100214,100216,100218,100220,100222,100224,100226,100228,100230,100232],{"class":94,"line":95},[92,100209,341],{"class":102},[92,100211,148],{"class":98},[92,100213,993],{"class":102},[92,100215,320],{"class":151},[92,100217,481],{"class":102},[92,100219,180],{"class":151},[92,100221,481],{"class":102},[92,100223,174],{"class":151},[92,100225,481],{"class":102},[92,100227,396],{"class":151},[92,100229,481],{"class":102},[92,100231,422],{"class":151},[92,100233,33227],{"class":102},[92,100235,100236,100238,100240],{"class":94,"line":11},[92,100237,366],{"class":102},[92,100239,148],{"class":98},[92,100241,100242],{"class":102},"np.array(a)\n",[92,100244,100245],{"class":94,"line":1158},[92,100246,100247],{"class":161},"#调用numpy中的函数reciprocal()\n",[92,100249,100250],{"class":94,"line":1173},[92,100251,100252],{"class":102},"np.reciprocal(b)\n",[33,100254,100256],{"id":100255},"_92-求平方","9.2 求平方",[38,100258,94510],{},[83,100260,100262],{"className":30359,"code":100261,"language":30361,"meta":10,"style":10},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[89,100263,100264,100269,100274,100290],{"__ignoreMap":10},[92,100265,100266],{"class":94,"line":95},[92,100267,100268],{"class":161},"#square()，求平方\n",[92,100270,100271],{"class":94,"line":11},[92,100272,100273],{"class":161},"#一维数组\n",[92,100275,100276,100278,100280,100282,100284,100286,100288],{"class":94,"line":1158},[92,100277,341],{"class":102},[92,100279,148],{"class":98},[92,100281,92982],{"class":102},[92,100283,320],{"class":151},[92,100285,481],{"class":102},[92,100287,549],{"class":151},[92,100289,109],{"class":102},[92,100291,100292],{"class":94,"line":1173},[92,100293,100294],{"class":102},"np.square(a)\n",[83,100296,100298],{"className":30359,"code":100297,"language":30361,"meta":10,"style":10},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[89,100299,100300,100305,100310,100331],{"__ignoreMap":10},[92,100301,100302],{"class":94,"line":95},[92,100303,100304],{"class":161},"#或者通过循环遍历的形式来计算\n",[92,100306,100307],{"class":94,"line":11},[92,100308,100309],{"class":161},"#这是一个列表\n",[92,100311,100312,100315,100317,100319,100321,100323,100325,100328],{"class":94,"line":1158},[92,100313,100314],{"class":102},"[i",[92,100316,558],{"class":98},[92,100318,100128],{"class":102},[92,100320,3004],{"class":98},[92,100322,9418],{"class":102},[92,100324,26024],{"class":98},[92,100326,100327],{"class":102}," a]",[92,100329,100330],{"class":161},"#这个求完之后在数列当中\n",[92,100332,100333,100336,100338,100340,100342,100344,100346],{"class":94,"line":1173},[92,100334,100335],{"class":102},"np.array([i",[92,100337,558],{"class":98},[92,100339,100128],{"class":102},[92,100341,3004],{"class":98},[92,100343,9418],{"class":102},[92,100345,26024],{"class":98},[92,100347,100348],{"class":102}," a])\n",[38,100350,93271],{},[83,100352,100354],{"className":30359,"code":100353,"language":30361,"meta":10,"style":10},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[89,100355,100356,100360,100384],{"__ignoreMap":10},[92,100357,100358],{"class":94,"line":95},[92,100359,93281],{"class":161},[92,100361,100362,100364,100366,100368,100370,100372,100374,100376,100378,100380,100382],{"class":94,"line":11},[92,100363,93286],{"class":102},[92,100365,148],{"class":98},[92,100367,92982],{"class":102},[92,100369,320],{"class":151},[92,100371,481],{"class":102},[92,100373,626],{"class":151},[92,100375,92987],{"class":102},[92,100377,396],{"class":151},[92,100379,481],{"class":102},[92,100381,174],{"class":151},[92,100383,109],{"class":102},[92,100385,100386],{"class":94,"line":1158},[92,100387,100388],{"class":102},"np.square(aa)\n",[83,100390,100392],{"className":30359,"code":100391,"language":30361,"meta":10,"style":10},"#传统的方式\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",[89,100393,100394,100399,100408,100424,100440,100455],{"__ignoreMap":10},[92,100395,100396],{"class":94,"line":95},[92,100397,100398],{"class":161},"#传统的方式\n",[92,100400,100401,100403,100405],{"class":94,"line":11},[92,100402,98167],{"class":102},[92,100404,148],{"class":98},[92,100406,100407],{"class":102},"np.empty_like(aa)\n",[92,100409,100410,100412,100414,100416,100418,100420,100422],{"class":94,"line":1158},[92,100411,3004],{"class":98},[92,100413,9418],{"class":102},[92,100415,26024],{"class":98},[92,100417,32424],{"class":151},[92,100419,103],{"class":102},[92,100421,396],{"class":151},[92,100423,30767],{"class":102},[92,100425,100426,100428,100430,100432,100434,100436,100438],{"class":94,"line":1173},[92,100427,3180],{"class":98},[92,100429,9480],{"class":102},[92,100431,26024],{"class":98},[92,100433,32424],{"class":151},[92,100435,103],{"class":102},[92,100437,174],{"class":151},[92,100439,30767],{"class":102},[92,100441,100442,100445,100447,100450,100452],{"class":94,"line":1179},[92,100443,100444],{"class":102},"        bb[i,j]",[92,100446,148],{"class":98},[92,100448,100449],{"class":102},"aa[i,j]",[92,100451,558],{"class":98},[92,100453,100454],{"class":102},"aa[i,j]\n",[92,100456,100457],{"class":94,"line":1193},[92,100458,100459],{"class":102},"bb\n",[33,100461,100463],{"id":100462},"_93-求各元素的符号","9.3 求各元素的符号",[38,100465,100466],{},[1441,100467],{"alt":10,"src":100468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[33,100470,100472],{"id":100471},"_94-modf函数","9.4 modf函数",[38,100474,100475],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[83,100477,100479],{"className":30359,"code":100478,"language":30361,"meta":10,"style":10},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[89,100480,100481,100504],{"__ignoreMap":10},[92,100482,100483,100485,100487,100489,100491,100493,100495,100497,100499,100502],{"class":94,"line":95},[92,100484,341],{"class":102},[92,100486,148],{"class":98},[92,100488,92982],{"class":102},[92,100490,635],{"class":98},[92,100492,549],{"class":151},[92,100494,481],{"class":102},[92,100496,549],{"class":151},[92,100498,481],{"class":102},[92,100500,100501],{"class":151},"0.3",[92,100503,109],{"class":102},[92,100505,100506],{"class":94,"line":11},[92,100507,100508],{"class":102},"np.modf(a)\n",[38,100510,100511],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[33,100513,100515],{"id":100514},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[38,100517,100518],{},"np.cell()",[38,100520,100521],{},"np.floor()",[38,100523,100524],{},"np.rint()",[38,100526,100527],{},"对各元素分别向上取整、向下取整、四舍五入",[38,100529,100530],{},[1441,100531],{"alt":10,"src":100532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[33,100534,100536],{"id":100535},"_96-around函数","9.6 around()函数",[38,100538,100539],{},"around()函数也可以实现对数的小数位数进行操作",[38,100541,100542],{},"其中的参数：",[38,100544,100545],{},"1.要传的数组",[38,100547,100548],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[38,100550,100551],{},[1441,100552],{"alt":10,"src":100553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[33,100555,100557],{"id":100556},"_97-三角函数","9.7 三角函数",[38,100559,100560],{},[1441,100561],{"alt":10,"src":100562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[38,100564,100565],{},"引入图像模块非常重要",[83,100567,100569],{"className":30359,"code":100568,"language":30361,"meta":10,"style":10},"from matplotlib import pyplot as plt\n",[89,100570,100571],{"__ignoreMap":10},[92,100572,100573,100575,100578,100580,100583,100585],{"class":94,"line":95},[92,100574,30718],{"class":98},[92,100576,100577],{"class":102}," matplotlib ",[92,100579,30373],{"class":98},[92,100581,100582],{"class":102}," pyplot ",[92,100584,31364],{"class":98},[92,100586,31418],{"class":102},[5106,100588,100589],{},"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":10,"searchDepth":11,"depth":11,"links":100591},[100592,100593,100594,100595,100596,100597,100598],{"id":100140,"depth":11,"text":100141},{"id":100255,"depth":11,"text":100256},{"id":100462,"depth":11,"text":100463},{"id":100471,"depth":11,"text":100472},{"id":100514,"depth":11,"text":100515},{"id":100535,"depth":11,"text":100536},{"id":100556,"depth":11,"text":100557},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100104,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":4,"title":5,"body":100605,"description":13,"extension":14,"meta":100609,"navigation":17,"path":18,"seo":100610,"stem":20,"__hash__":21},{"type":7,"value":100606,"toc":100607},[],{"title":10,"searchDepth":11,"depth":11,"links":100608},[],{"category":16},{"title":5,"description":13},{"id":100612,"title":100613,"body":100614,"description":10,"extension":14,"meta":102622,"navigation":17,"path":102623,"seo":102624,"stem":102625,"__hash__":102626},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100615,"toc":102598},[100616,100619,100623,100626,100629,100635,100638,100661,100664,100698,100701,100742,100746,100749,100842,100845,100889,100892,100909,100912,100926,100929,100932,100977,100980,101017,101021,101024,101030,101035,101055,101059,101062,101128,101131,101149,101153,101156,101185,101195,101201,101205,101208,101214,101225,101229,101232,101262,101265,101545,101548,101551,101562,101565,101568,101590,101597,101600,101618,101621,101624,101638,101646,101649,101675,101681,101684,101687,101697,101709,101729,101738,101758,101768,101792,101805,101819,101824,101865,101882,101907,101919,101939,101945,101990,102009,102026,102039,102055,102062,102074,102083,102118,102139,102164,102177,102201,102216,102241,102244,102265,102274,102277,102288,102292,102295,102301,102313,102320,102324,102327,102339,102342,102356,102359,102369,102379,102382,102422,102425,102429,102435,102438,102452,102456,102459,102492,102496,102499,102522,102530,102533,102539,102545,102548,102551,102579,102583,102586,102592,102595],[29,100617,100613],{"id":100618},"_1环境安装与第一个-mujoco-程序",[33,100620,100622],{"id":100621},"_1目标说明","1.目标说明",[38,100624,100625],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[38,100627,100628],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[83,100630,100633],{"className":100631,"code":100632,"language":5167,"meta":10},[5165],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[89,100634,100632],{"__ignoreMap":10},[38,100636,100637],{},"需要掌握:",[46,100639,100640,100643,100646,100651,100656],{},[49,100641,100642],{},"Fedora 44 下 MuJoCo 的系统依赖",[49,100644,100645],{},"Python 虚拟环境创建",[49,100647,100648],{},[89,100649,100650],{},"mujoco.MjModel",[49,100652,100653],{},[89,100654,100655],{},"mujoco.MjData",[49,100657,100658],{},[89,100659,100660],{},"mujoco.mj_step(model, data)",[38,100662,100663],{},"MuJoCo 中最重要的两个对象:",[240,100665,100666,100676],{},[243,100667,100668],{},[246,100669,100670,100673],{},[249,100671,100672],{"align":23716},"对象",[249,100674,100675],{"align":23716},"含义",[287,100677,100678,100688],{},[246,100679,100680,100685],{},[292,100681,100682],{"align":23716},[89,100683,100684],{},"MjModel",[292,100686,100687],{"align":23716},"模型结构，来自 XML，基本不随时间变化",[246,100689,100690,100695],{},[292,100691,100692],{"align":23716},[89,100693,100694],{},"MjData",[292,100696,100697],{"align":23716},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[38,100699,100700],{},"可以先用一个类比理解：",[240,100702,100703,100713],{},[243,100704,100705],{},[246,100706,100707,100710],{},[249,100708,100709],{"align":23716},"类比",[249,100711,100712],{"align":23716},"MuJoCo 对象",[287,100714,100715,100724,100733],{},[246,100716,100717,100720],{},[292,100718,100719],{"align":23716},"游戏地图和角色配置",[292,100721,100722],{"align":23716},[89,100723,100684],{},[246,100725,100726,100729],{},[292,100727,100728],{"align":23716},"游戏运行到当前帧的状态",[292,100730,100731],{"align":23716},[89,100732,100694],{},[246,100734,100735,100738],{},[292,100736,100737],{"align":23716},"前进一帧",[292,100739,100740],{"align":23716},[89,100741,100660],{},[33,100743,100745],{"id":100744},"_2环境与依赖安装","2.环境与依赖安装",[38,100747,100748],{},"Fedora 44 系统依赖:",[83,100750,100752],{"className":23802,"code":100751,"language":23804,"meta":10,"style":10},"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",[89,100753,100754,100766,100779,100792,100802,100812,100831],{"__ignoreMap":10},[92,100755,100756,100758,100760,100762,100764],{"class":94,"line":95},[92,100757,24557],{"class":1942},[92,100759,26296],{"class":207},[92,100761,23814],{"class":207},[92,100763,26381],{"class":151},[92,100765,24659],{"class":151},[92,100767,100768,100771,100774,100777],{"class":94,"line":11},[92,100769,100770],{"class":207},"  python3",[92,100772,100773],{"class":207}," python3-pip",[92,100775,100776],{"class":207}," python3-virtualenv",[92,100778,24659],{"class":151},[92,100780,100781,100784,100787,100790],{"class":94,"line":1158},[92,100782,100783],{"class":207},"  mesa-libGL",[92,100785,100786],{"class":207}," mesa-libGLU",[92,100788,100789],{"class":207}," mesa-dri-drivers",[92,100791,24659],{"class":151},[92,100793,100794,100797,100800],{"class":94,"line":1173},[92,100795,100796],{"class":207},"  libglvnd-glx",[92,100798,100799],{"class":207}," libglvnd-opengl",[92,100801,24659],{"class":151},[92,100803,100804,100807,100810],{"class":94,"line":1179},[92,100805,100806],{"class":207},"  glfw",[92,100808,100809],{"class":207}," glfw-devel",[92,100811,24659],{"class":151},[92,100813,100814,100817,100820,100823,100826,100829],{"class":94,"line":1193},[92,100815,100816],{"class":207},"  libX11",[92,100818,100819],{"class":207}," libXcursor",[92,100821,100822],{"class":207}," libXi",[92,100824,100825],{"class":207}," libXinerama",[92,100827,100828],{"class":207}," libXrandr",[92,100830,24659],{"class":151},[92,100832,100833,100836,100839],{"class":94,"line":1199},[92,100834,100835],{"class":207},"  gcc",[92,100837,100838],{"class":207}," gcc-c++",[92,100840,100841],{"class":207}," make\n",[38,100843,100844],{},"创建 Python 环境:",[83,100846,100848],{"className":23802,"code":100847,"language":23804,"meta":10,"style":10},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[89,100849,100850,100864,100872],{"__ignoreMap":10},[92,100851,100852,100855,100858,100861],{"class":94,"line":95},[92,100853,100854],{"class":1942},"python3",[92,100856,100857],{"class":151}," -m",[92,100859,100860],{"class":207}," venv",[92,100862,100863],{"class":207}," .venv\n",[92,100865,100866,100869],{"class":94,"line":11},[92,100867,100868],{"class":151},"source",[92,100870,100871],{"class":207}," .venv\u002Fbin\u002Factivate\n",[92,100873,100874,100876,100878,100881,100883,100886],{"class":94,"line":1158},[92,100875,30361],{"class":1942},[92,100877,100857],{"class":151},[92,100879,100880],{"class":207}," pip",[92,100882,23814],{"class":207},[92,100884,100885],{"class":151}," --upgrade",[92,100887,100888],{"class":207}," pip\n",[38,100890,100891],{},"pip 安装:",[83,100893,100895],{"className":23802,"code":100894,"language":23804,"meta":10,"style":10},"pip install \"mujoco>=2.3\" numpy\n",[89,100896,100897],{"__ignoreMap":10},[92,100898,100899,100901,100903,100906],{"class":94,"line":95},[92,100900,23811],{"class":1942},[92,100902,23814],{"class":207},[92,100904,100905],{"class":207}," \"mujoco>=2.3\"",[92,100907,100908],{"class":207}," numpy\n",[38,100910,100911],{},"安装完成后，先做最小检查：",[83,100913,100915],{"className":23802,"code":100914,"language":23804,"meta":10,"style":10},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[89,100916,100917],{"__ignoreMap":10},[92,100918,100919,100921,100923],{"class":94,"line":95},[92,100920,30361],{"class":1942},[92,100922,30339],{"class":151},[92,100924,100925],{"class":207}," \"import mujoco; print(mujoco.__version__)\"\n",[38,100927,100928],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[38,100930,100931],{},"conda 安装:",[83,100933,100935],{"className":23802,"code":100934,"language":23804,"meta":10,"style":10},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[89,100936,100937,100957,100967],{"__ignoreMap":10},[92,100938,100939,100941,100943,100945,100948,100951,100954],{"class":94,"line":95},[92,100940,30311],{"class":1942},[92,100942,29157],{"class":207},[92,100944,25096],{"class":151},[92,100946,100947],{"class":207}," mujoco-study",[92,100949,100950],{"class":207}," python=",[92,100952,100953],{"class":151},"3.10",[92,100955,100956],{"class":151}," -y\n",[92,100958,100959,100961,100964],{"class":94,"line":11},[92,100960,30311],{"class":1942},[92,100962,100963],{"class":207}," activate",[92,100965,100966],{"class":207}," mujoco-study\n",[92,100968,100969,100971,100973,100975],{"class":94,"line":1158},[92,100970,23811],{"class":1942},[92,100972,23814],{"class":207},[92,100974,100905],{"class":207},[92,100976,100908],{"class":207},[38,100978,100979],{},"版本冲突说明:",[46,100981,100982,100988,100998,101007],{},[49,100983,100984,100985,28366],{},"不要安装 ",[89,100986,100987],{},"mujoco-py",[49,100989,100990,100991,100993,100994,100997],{},"如果旧项目里同时安装了 ",[89,100992,100987],{}," 和 ",[89,100995,100996],{},"mujoco","，建议新建干净虚拟环境。",[49,100999,101000,101003,101004,28366],{},[89,101001,101002],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[89,101005,101006],{},"~\u002F.mujoco\u002Fmujoco210",[49,101008,101009,101010,82519,101013,101016],{},"离屏渲染可能涉及 OpenGL 后端，",[89,101011,101012],{},"MUJOCO_GL=egl",[89,101014,101015],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[33,101018,101020],{"id":101019},"_3核心概念解释","3.核心概念解释",[38,101022,101023],{},"MuJoCo 的基本执行流程:",[83,101025,101028],{"className":101026,"code":101027,"language":5167,"meta":10},[5165],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[89,101029,101027],{"__ignoreMap":10},[38,101031,101032,101034],{},[89,101033,100684],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[38,101036,101037,101039,101040,315,101043,315,101046,315,101049,315,101052,28366],{},[89,101038,100694],{}," 存放仿真运行时状态，例如 ",[89,101041,101042],{},"data.time",[89,101044,101045],{},"data.qpos",[89,101047,101048],{},"data.qvel",[89,101050,101051],{},"data.ctrl",[89,101053,101054],{},"data.xpos",[63,101056,101058],{"id":101057},"xml-是什么","XML 是什么",[38,101060,101061],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[83,101063,101065],{"className":53047,"code":101064,"language":53049,"meta":10,"style":10},"\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",[89,101066,101067,101089,101120],{"__ignoreMap":10},[92,101068,101069,101071,101073,101075,101077,101079,101082,101084,101087],{"class":94,"line":95},[92,101070,1013],{"class":102},[92,101072,51780],{"class":51280},[92,101074,14900],{"class":1942},[92,101076,148],{"class":102},[92,101078,53471],{"class":207},[92,101080,101081],{"class":1942}," pos",[92,101083,148],{"class":102},[92,101085,101086],{"class":207},"\"0 0 1\"",[92,101088,51287],{"class":102},[92,101090,101091,101093,101096,101098,101100,101103,101105,101107,101109,101112,101114,101117],{"class":94,"line":11},[92,101092,52124],{"class":102},[92,101094,101095],{"class":51280},"geom",[92,101097,14900],{"class":1942},[92,101099,148],{"class":102},[92,101101,101102],{"class":207},"\"box_geom\"",[92,101104,53804],{"class":1942},[92,101106,148],{"class":102},[92,101108,53471],{"class":207},[92,101110,101111],{"class":1942}," size",[92,101113,148],{"class":102},[92,101115,101116],{"class":207},"\"0.1 0.1 0.1\"",[92,101118,101119],{"class":102},"\u002F>\n",[92,101121,101122,101124,101126],{"class":94,"line":1158},[92,101123,51765],{"class":102},[92,101125,51780],{"class":51280},[92,101127,51287],{"class":102},[38,101129,101130],{},"这段意思是：",[46,101132,101133,101139,101146],{},[49,101134,101135,101136,101138],{},"创建一个叫 ",[89,101137,53694],{}," 的刚体。",[49,101140,101141,101142,101145],{},"它初始放在 ",[89,101143,101144],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[49,101147,101148],{},"它里面有一个盒子形状的几何体。",[63,101150,101152],{"id":101151},"timestep-是什么","timestep 是什么",[38,101154,101155],{},"XML 里的：",[83,101157,101159],{"className":53047,"code":101158,"language":53049,"meta":10,"style":10},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[89,101160,101161],{"__ignoreMap":10},[92,101162,101163,101165,101167,101170,101172,101175,101178,101180,101183],{"class":94,"line":95},[92,101164,1013],{"class":102},[92,101166,69146],{"class":51280},[92,101168,101169],{"class":1942}," timestep",[92,101171,148],{"class":102},[92,101173,101174],{"class":207},"\"0.01\"",[92,101176,101177],{"class":1942}," gravity",[92,101179,148],{"class":102},[92,101181,101182],{"class":207},"\"0 0 -9.81\"",[92,101184,101119],{"class":102},[38,101186,101187,101188,101191,101192,101194],{},"表示每调用一次 ",[89,101189,101190],{},"mj_step","，仿真时间前进 ",[89,101193,38967],{}," 秒。循环 100 次，大约就是 1 秒：",[83,101196,101199],{"className":101197,"code":101198,"language":5167,"meta":10},[5165],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[89,101200,101198],{"__ignoreMap":10},[63,101202,101204],{"id":101203},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[38,101206,101207],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[83,101209,101212],{"className":101210,"code":101211,"language":5167,"meta":10},[5165],"x y z qw qx qy qz\n",[89,101213,101211],{"__ignoreMap":10},[38,101215,101216,101217,101220,101221,101224],{},"表示一个自由刚体的位置和姿态。其中 ",[89,101218,101219],{},"x y z"," 是位置，",[89,101222,101223],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[33,101226,101228],{"id":101227},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[38,101230,101231],{},"新建文件:",[83,101233,101235],{"className":23802,"code":101234,"language":23804,"meta":10,"style":10},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[89,101236,101237,101247,101254],{"__ignoreMap":10},[92,101238,101239,101242,101244],{"class":94,"line":95},[92,101240,101241],{"class":1942},"mkdir",[92,101243,29197],{"class":151},[92,101245,101246],{"class":207}," mujoco_tutorial\n",[92,101248,101249,101252],{"class":94,"line":11},[92,101250,101251],{"class":151},"cd",[92,101253,101246],{"class":207},[92,101255,101256,101259],{"class":94,"line":1158},[92,101257,101258],{"class":1942},"touch",[92,101260,101261],{"class":207}," ch1_first_sim.py\n",[38,101263,101264],{},"写入:",[83,101266,101268],{"className":30359,"code":101267,"language":30361,"meta":10,"style":10},"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",[89,101269,101270,101277,101281,101285,101295,101300,101305,101309,101314,101319,101323,101328,101333,101338,101343,101348,101353,101357,101361,101365,101378,101392,101402,101406,101418,101430,101442,101454,101466,101470,101487,101492,101496,101507,101518,101522,101526,101540],{"__ignoreMap":10},[92,101271,101272,101274],{"class":94,"line":95},[92,101273,30373],{"class":98},[92,101275,101276],{"class":102}," mujoco\n",[92,101278,101279],{"class":94,"line":11},[92,101280,2379],{"emptyLinePlaceholder":17},[92,101282,101283],{"class":94,"line":1158},[92,101284,2379],{"emptyLinePlaceholder":17},[92,101286,101287,101290,101292],{"class":94,"line":1173},[92,101288,101289],{"class":151},"XML",[92,101291,13544],{"class":98},[92,101293,101294],{"class":207}," \"\"\"\n",[92,101296,101297],{"class":94,"line":1179},[92,101298,101299],{"class":207},"\u003Cmujoco model=\"first_sim\">\n",[92,101301,101302],{"class":94,"line":1193},[92,101303,101304],{"class":207},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[92,101306,101307],{"class":94,"line":1199},[92,101308,2379],{"emptyLinePlaceholder":17},[92,101310,101311],{"class":94,"line":1290},[92,101312,101313],{"class":207},"  \u003Cworldbody>\n",[92,101315,101316],{"class":94,"line":1296},[92,101317,101318],{"class":207},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[92,101320,101321],{"class":94,"line":1308},[92,101322,2379],{"emptyLinePlaceholder":17},[92,101324,101325],{"class":94,"line":1591},[92,101326,101327],{"class":207},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[92,101329,101330],{"class":94,"line":1596},[92,101331,101332],{"class":207},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[92,101334,101335],{"class":94,"line":1602},[92,101336,101337],{"class":207},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[92,101339,101340],{"class":94,"line":1607},[92,101341,101342],{"class":207},"    \u003C\u002Fbody>\n",[92,101344,101345],{"class":94,"line":1621},[92,101346,101347],{"class":207},"  \u003C\u002Fworldbody>\n",[92,101349,101350],{"class":94,"line":1626},[92,101351,101352],{"class":207},"\u003C\u002Fmujoco>\n",[92,101354,101355],{"class":94,"line":1632},[92,101356,95678],{"class":207},[92,101358,101359],{"class":94,"line":1653},[92,101360,2379],{"emptyLinePlaceholder":17},[92,101362,101363],{"class":94,"line":1658},[92,101364,2379],{"emptyLinePlaceholder":17},[92,101366,101367,101369,101371,101374,101376],{"class":94,"line":1672},[92,101368,31928],{"class":98},[92,101370,1952],{"class":1942},[92,101372,101373],{"class":102},"() -> ",[92,101375,95666],{"class":151},[92,101377,3718],{"class":102},[92,101379,101380,101383,101385,101388,101390],{"class":94,"line":1677},[92,101381,101382],{"class":102},"    model ",[92,101384,148],{"class":98},[92,101386,101387],{"class":102}," mujoco.MjModel.from_xml_string(",[92,101389,101289],{"class":151},[92,101391,109],{"class":102},[92,101393,101394,101397,101399],{"class":94,"line":1706},[92,101395,101396],{"class":102},"    data ",[92,101398,148],{"class":98},[92,101400,101401],{"class":102}," mujoco.MjData(model)\n",[92,101403,101404],{"class":94,"line":1711},[92,101405,2379],{"emptyLinePlaceholder":17},[92,101407,101408,101410,101412,101415],{"class":94,"line":1728},[92,101409,31280],{"class":151},[92,101411,103],{"class":102},[92,101413,101414],{"class":207},"\"nq:\"",[92,101416,101417],{"class":102},", model.nq)\n",[92,101419,101420,101422,101424,101427],{"class":94,"line":1733},[92,101421,31280],{"class":151},[92,101423,103],{"class":102},[92,101425,101426],{"class":207},"\"nv:\"",[92,101428,101429],{"class":102},", model.nv)\n",[92,101431,101432,101434,101436,101439],{"class":94,"line":1738},[92,101433,31280],{"class":151},[92,101435,103],{"class":102},[92,101437,101438],{"class":207},"\"nu:\"",[92,101440,101441],{"class":102},", model.nu)\n",[92,101443,101444,101446,101448,101451],{"class":94,"line":1743},[92,101445,31280],{"class":151},[92,101447,103],{"class":102},[92,101449,101450],{"class":207},"\"initial time:\"",[92,101452,101453],{"class":102},", data.time)\n",[92,101455,101456,101458,101460,101463],{"class":94,"line":1757},[92,101457,31280],{"class":151},[92,101459,103],{"class":102},[92,101461,101462],{"class":207},"\"initial qpos:\"",[92,101464,101465],{"class":102},", data.qpos.copy())\n",[92,101467,101468],{"class":94,"line":1762},[92,101469,2379],{"emptyLinePlaceholder":17},[92,101471,101472,101474,101477,101479,101481,101483,101485],{"class":94,"line":2556},[92,101473,3180],{"class":98},[92,101475,101476],{"class":102}," _ ",[92,101478,26024],{"class":98},[92,101480,32424],{"class":151},[92,101482,103],{"class":102},[92,101484,414],{"class":151},[92,101486,30767],{"class":102},[92,101488,101489],{"class":94,"line":2570},[92,101490,101491],{"class":102},"        mujoco.mj_step(model, data)\n",[92,101493,101494],{"class":94,"line":2578},[92,101495,2379],{"emptyLinePlaceholder":17},[92,101497,101498,101500,101502,101505],{"class":94,"line":2583},[92,101499,31280],{"class":151},[92,101501,103],{"class":102},[92,101503,101504],{"class":207},"\"final time:\"",[92,101506,101453],{"class":102},[92,101508,101509,101511,101513,101516],{"class":94,"line":2589},[92,101510,31280],{"class":151},[92,101512,103],{"class":102},[92,101514,101515],{"class":207},"\"final qpos:\"",[92,101517,101465],{"class":102},[92,101519,101520],{"class":94,"line":2595},[92,101521,2379],{"emptyLinePlaceholder":17},[92,101523,101524],{"class":94,"line":2600},[92,101525,2379],{"emptyLinePlaceholder":17},[92,101527,101528,101530,101532,101535,101538],{"class":94,"line":7928},[92,101529,1510],{"class":98},[92,101531,31201],{"class":151},[92,101533,101534],{"class":98}," ==",[92,101536,101537],{"class":207}," \"__main__\"",[92,101539,3718],{"class":102},[92,101541,101542],{"class":94,"line":7952},[92,101543,101544],{"class":102},"    main()\n",[63,101546,101547],{"id":101547},"代码逐段解释",[38,101549,101550],{},"导入库：",[83,101552,101554],{"className":30359,"code":101553,"language":30361,"meta":10,"style":10},"import mujoco\n",[89,101555,101556],{"__ignoreMap":10},[92,101557,101558,101560],{"class":94,"line":95},[92,101559,30373],{"class":98},[92,101561,101276],{"class":102},[38,101563,101564],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[38,101566,101567],{},"定义 XML：",[83,101569,101571],{"className":30359,"code":101570,"language":30361,"meta":10,"style":10},"XML = \"\"\"\n...\n\"\"\"\n",[89,101572,101573,101581,101586],{"__ignoreMap":10},[92,101574,101575,101577,101579],{"class":94,"line":95},[92,101576,101289],{"class":151},[92,101578,13544],{"class":98},[92,101580,101294],{"class":207},[92,101582,101583],{"class":94,"line":11},[92,101584,101585],{"class":207},"...\n",[92,101587,101588],{"class":94,"line":1158},[92,101589,95678],{"class":207},[38,101591,101592,101593,101596],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[89,101594,101595],{},"freejoint"," 的方块。",[38,101598,101599],{},"编译模型：",[83,101601,101603],{"className":30359,"code":101602,"language":30361,"meta":10,"style":10},"model = mujoco.MjModel.from_xml_string(XML)\n",[89,101604,101605],{"__ignoreMap":10},[92,101606,101607,101610,101612,101614,101616],{"class":94,"line":95},[92,101608,101609],{"class":102},"model ",[92,101611,148],{"class":98},[92,101613,101387],{"class":102},[92,101615,101289],{"class":151},[92,101617,109],{"class":102},[38,101619,101620],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[38,101622,101623],{},"创建数据：",[83,101625,101627],{"className":30359,"code":101626,"language":30361,"meta":10,"style":10},"data = mujoco.MjData(model)\n",[89,101628,101629],{"__ignoreMap":10},[92,101630,101631,101634,101636],{"class":94,"line":95},[92,101632,101633],{"class":102},"data ",[92,101635,148],{"class":98},[92,101637,101401],{"class":102},[38,101639,101640,101642,101643,101645],{},[89,101641,33382],{}," 会保存仿真当前状态。刚创建时，时间是 ",[89,101644,294],{},"，方块还在初始位置。",[38,101647,101648],{},"推进仿真：",[83,101650,101652],{"className":30359,"code":101651,"language":30361,"meta":10,"style":10},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[89,101653,101654,101670],{"__ignoreMap":10},[92,101655,101656,101658,101660,101662,101664,101666,101668],{"class":94,"line":95},[92,101657,3004],{"class":98},[92,101659,101476],{"class":102},[92,101661,26024],{"class":98},[92,101663,32424],{"class":151},[92,101665,103],{"class":102},[92,101667,414],{"class":151},[92,101669,30767],{"class":102},[92,101671,101672],{"class":94,"line":11},[92,101673,101674],{"class":102},"    mujoco.mj_step(model, data)\n",[38,101676,101677,101678,101680],{},"每次 ",[89,101679,101190],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[63,101682,101683],{"id":101683},"代码逐行细讲",[38,101685,101686],{},"下面把完整代码按新手视角拆开讲。",[83,101688,101689],{"className":30359,"code":101553,"language":30361,"meta":10,"style":10},[89,101690,101691],{"__ignoreMap":10},[92,101692,101693,101695],{"class":94,"line":95},[92,101694,30373],{"class":98},[92,101696,101276],{"class":102},[38,101698,101699,101701,101702,315,101704,315,101706,28366],{},[89,101700,30373],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[89,101703,100650],{},[89,101705,100655],{},[89,101707,101708],{},"mujoco.mj_step",[83,101710,101711],{"className":30359,"code":101570,"language":30361,"meta":10,"style":10},[89,101712,101713,101721,101725],{"__ignoreMap":10},[92,101714,101715,101717,101719],{"class":94,"line":95},[92,101716,101289],{"class":151},[92,101718,13544],{"class":98},[92,101720,101294],{"class":207},[92,101722,101723],{"class":94,"line":11},[92,101724,101585],{"class":207},[92,101726,101727],{"class":94,"line":1158},[92,101728,95678],{"class":207},[38,101730,101731,101733,101734,101737],{},[89,101732,101289],{}," 是一个变量名。右边的三引号 ",[89,101735,101736],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[83,101739,101740],{"className":53047,"code":101299,"language":53049,"meta":10,"style":10},[89,101741,101742],{"__ignoreMap":10},[92,101743,101744,101746,101748,101751,101753,101756],{"class":94,"line":95},[92,101745,1013],{"class":102},[92,101747,100996],{"class":51280},[92,101749,101750],{"class":1942}," model",[92,101752,148],{"class":102},[92,101754,101755],{"class":207},"\"first_sim\"",[92,101757,51287],{"class":102},[38,101759,101760,101761,101764,101765,28366],{},"这是 XML 的根标签。",[89,101762,101763],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[89,101766,101767],{},"first_sim",[83,101769,101770],{"className":53047,"code":101158,"language":53049,"meta":10,"style":10},[89,101771,101772],{"__ignoreMap":10},[92,101773,101774,101776,101778,101780,101782,101784,101786,101788,101790],{"class":94,"line":95},[92,101775,1013],{"class":102},[92,101777,69146],{"class":51280},[92,101779,101169],{"class":1942},[92,101781,148],{"class":102},[92,101783,101174],{"class":207},[92,101785,101177],{"class":1942},[92,101787,148],{"class":102},[92,101789,101182],{"class":207},[92,101791,101119],{"class":102},[38,101793,101794,101796,101797,101800,101801,101804],{},[89,101795,69146],{}," 用来设置仿真参数。",[89,101798,101799],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[89,101802,101803],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[83,101806,101808],{"className":53047,"code":101807,"language":53049,"meta":10,"style":10},"\u003Cworldbody>\n",[89,101809,101810],{"__ignoreMap":10},[92,101811,101812,101814,101817],{"class":94,"line":95},[92,101813,1013],{"class":102},[92,101815,101816],{"class":51280},"worldbody",[92,101818,51287],{"class":102},[38,101820,101821,101823],{},[89,101822,101816],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[83,101825,101827],{"className":53047,"code":101826,"language":53049,"meta":10,"style":10},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[89,101828,101829],{"__ignoreMap":10},[92,101830,101831,101833,101835,101837,101839,101842,101844,101846,101849,101851,101853,101856,101858,101860,101863],{"class":94,"line":95},[92,101832,1013],{"class":102},[92,101834,101095],{"class":51280},[92,101836,14900],{"class":1942},[92,101838,148],{"class":102},[92,101840,101841],{"class":207},"\"floor\"",[92,101843,53804],{"class":1942},[92,101845,148],{"class":102},[92,101847,101848],{"class":207},"\"plane\"",[92,101850,101111],{"class":1942},[92,101852,148],{"class":102},[92,101854,101855],{"class":207},"\"2 2 0.1\"",[92,101857,78747],{"class":1942},[92,101859,148],{"class":102},[92,101861,101862],{"class":207},"\"0.8 0.8 0.8 1\"",[92,101864,101119],{"class":102},[38,101866,101867,101868,101870,101871,101874,101875,101878,101879,101881],{},"这行创建地面。",[89,101869,101095],{}," 是几何体。",[89,101872,101873],{},"name=\"floor\""," 是名字。",[89,101876,101877],{},"type=\"plane\""," 表示平面。",[89,101880,55090],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[83,101883,101885],{"className":53047,"code":101884,"language":53049,"meta":10,"style":10},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[89,101886,101887],{"__ignoreMap":10},[92,101888,101889,101891,101893,101895,101897,101899,101901,101903,101905],{"class":94,"line":95},[92,101890,1013],{"class":102},[92,101892,51780],{"class":51280},[92,101894,14900],{"class":1942},[92,101896,148],{"class":102},[92,101898,53471],{"class":207},[92,101900,101081],{"class":1942},[92,101902,148],{"class":102},[92,101904,101086],{"class":207},[92,101906,51287],{"class":102},[38,101908,101909,101910,28366,101912,101915,101916,101918],{},"这行创建一个刚体，名字叫 ",[89,101911,53694],{},[89,101913,101914],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[89,101917,101144],{},"，也就是离地面 1 米高。",[83,101920,101922],{"className":53047,"code":101921,"language":53049,"meta":10,"style":10},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[89,101923,101924],{"__ignoreMap":10},[92,101925,101926,101928,101930,101932,101934,101937],{"class":94,"line":95},[92,101927,1013],{"class":102},[92,101929,101595],{"class":51280},[92,101931,14900],{"class":1942},[92,101933,148],{"class":102},[92,101935,101936],{"class":207},"\"box_free\"",[92,101938,101119],{"class":102},[38,101940,101941,101942,101944],{},"这行很重要。",[89,101943,101595],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[83,101946,101948],{"className":53047,"code":101947,"language":53049,"meta":10,"style":10},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[89,101949,101950],{"__ignoreMap":10},[92,101951,101952,101954,101956,101958,101960,101962,101964,101966,101968,101970,101972,101974,101977,101979,101981,101983,101985,101988],{"class":94,"line":95},[92,101953,1013],{"class":102},[92,101955,101095],{"class":51280},[92,101957,14900],{"class":1942},[92,101959,148],{"class":102},[92,101961,101102],{"class":207},[92,101963,53804],{"class":1942},[92,101965,148],{"class":102},[92,101967,53471],{"class":207},[92,101969,101111],{"class":1942},[92,101971,148],{"class":102},[92,101973,101116],{"class":207},[92,101975,101976],{"class":1942}," mass",[92,101978,148],{"class":102},[92,101980,3657],{"class":207},[92,101982,78747],{"class":1942},[92,101984,148],{"class":102},[92,101986,101987],{"class":207},"\"1 0 0 1\"",[92,101989,101119],{"class":102},[38,101991,101992,101993,101996,101997,102000,102001,102004,102005,102008],{},"这行给 box body 添加一个盒子形状。",[89,101994,101995],{},"type=\"box\""," 表示形状是盒子。",[89,101998,101999],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[89,102002,102003],{},"mass=\"1\""," 表示质量是 1。",[89,102006,102007],{},"rgba=\"1 0 0 1\""," 表示红色。",[83,102010,102012],{"className":30359,"code":102011,"language":30361,"meta":10,"style":10},"def main() -> None:\n",[89,102013,102014],{"__ignoreMap":10},[92,102015,102016,102018,102020,102022,102024],{"class":94,"line":95},[92,102017,31928],{"class":98},[92,102019,1952],{"class":1942},[92,102021,101373],{"class":102},[92,102023,95666],{"class":151},[92,102025,3718],{"class":102},[38,102027,102028,102030,102031,102034,102035,102038],{},[89,102029,31928],{}," 用来定义函数。这里定义了一个叫 ",[89,102032,102033],{},"main"," 的函数。",[89,102036,102037],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[83,102040,102041],{"className":30359,"code":101602,"language":30361,"meta":10,"style":10},[89,102042,102043],{"__ignoreMap":10},[92,102044,102045,102047,102049,102051,102053],{"class":94,"line":95},[92,102046,101609],{"class":102},[92,102048,148],{"class":98},[92,102050,101387],{"class":102},[92,102052,101289],{"class":151},[92,102054,109],{"class":102},[38,102056,102057,102058,102061],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[89,102059,102060],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[83,102063,102064],{"className":30359,"code":101626,"language":30361,"meta":10,"style":10},[89,102065,102066],{"__ignoreMap":10},[92,102067,102068,102070,102072],{"class":94,"line":95},[92,102069,101633],{"class":102},[92,102071,148],{"class":98},[92,102073,101401],{"class":102},[38,102075,102076,102077,102079,102080,102082],{},"这行创建仿真数据。",[89,102078,33382],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[89,102081,33382],{}," 都会变化。",[83,102084,102086],{"className":30359,"code":102085,"language":30361,"meta":10,"style":10},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[89,102087,102088,102098,102108],{"__ignoreMap":10},[92,102089,102090,102092,102094,102096],{"class":94,"line":95},[92,102091,30396],{"class":151},[92,102093,103],{"class":102},[92,102095,101414],{"class":207},[92,102097,101417],{"class":102},[92,102099,102100,102102,102104,102106],{"class":94,"line":11},[92,102101,30396],{"class":151},[92,102103,103],{"class":102},[92,102105,101426],{"class":207},[92,102107,101429],{"class":102},[92,102109,102110,102112,102114,102116],{"class":94,"line":1158},[92,102111,30396],{"class":151},[92,102113,103],{"class":102},[92,102115,101438],{"class":207},[92,102117,101441],{"class":102},[38,102119,102120,102122,102123,102126,102127,102130,102131,102134,102135,102138],{},[89,102121,30396],{}," 用来输出信息。",[89,102124,102125],{},"model.nq"," 是位置变量数量，",[89,102128,102129],{},"model.nv"," 是速度变量数量，",[89,102132,102133],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[89,102136,102137],{},"nu"," 是 0。",[83,102140,102142],{"className":30359,"code":102141,"language":30361,"meta":10,"style":10},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[89,102143,102144,102154],{"__ignoreMap":10},[92,102145,102146,102148,102150,102152],{"class":94,"line":95},[92,102147,30396],{"class":151},[92,102149,103],{"class":102},[92,102151,101450],{"class":207},[92,102153,101453],{"class":102},[92,102155,102156,102158,102160,102162],{"class":94,"line":11},[92,102157,30396],{"class":151},[92,102159,103],{"class":102},[92,102161,101462],{"class":207},[92,102163,101465],{"class":102},[38,102165,102166,102167,102169,102170,102172,102173,102176],{},"这里打印初始时间和初始位置。",[89,102168,101042],{}," 一开始是 0。",[89,102171,101045],{}," 是位置数组。",[89,102174,102175],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[83,102178,102179],{"className":30359,"code":101651,"language":30361,"meta":10,"style":10},[89,102180,102181,102197],{"__ignoreMap":10},[92,102182,102183,102185,102187,102189,102191,102193,102195],{"class":94,"line":95},[92,102184,3004],{"class":98},[92,102186,101476],{"class":102},[92,102188,26024],{"class":98},[92,102190,32424],{"class":151},[92,102192,103],{"class":102},[92,102194,414],{"class":151},[92,102196,30767],{"class":102},[92,102198,102199],{"class":94,"line":11},[92,102200,101674],{"class":102},[38,102202,102203,102205,102206,102209,102210,102212,102213,102215],{},[89,102204,3004],{}," 是循环。",[89,102207,102208],{},"range(100)"," 表示循环 100 次。",[89,102211,1095],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[89,102214,101190],{},"，仿真就前进一步。",[83,102217,102219],{"className":30359,"code":102218,"language":30361,"meta":10,"style":10},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[89,102220,102221,102231],{"__ignoreMap":10},[92,102222,102223,102225,102227,102229],{"class":94,"line":95},[92,102224,30396],{"class":151},[92,102226,103],{"class":102},[92,102228,101504],{"class":207},[92,102230,101453],{"class":102},[92,102232,102233,102235,102237,102239],{"class":94,"line":11},[92,102234,30396],{"class":151},[92,102236,103],{"class":102},[92,102238,101515],{"class":207},[92,102240,101465],{"class":102},[38,102242,102243],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[83,102245,102247],{"className":30359,"code":102246,"language":30361,"meta":10,"style":10},"if __name__ == \"__main__\":\n    main()\n",[89,102248,102249,102261],{"__ignoreMap":10},[92,102250,102251,102253,102255,102257,102259],{"class":94,"line":95},[92,102252,1510],{"class":98},[92,102254,31201],{"class":151},[92,102256,101534],{"class":98},[92,102258,101537],{"class":207},[92,102260,3718],{"class":102},[92,102262,102263],{"class":94,"line":11},[92,102264,101544],{"class":102},[38,102266,102267,102268,102271,102272,28366],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[89,102269,102270],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[89,102273,102270],{},[38,102275,102276],{},"运行:",[83,102278,102280],{"className":23802,"code":102279,"language":23804,"meta":10,"style":10},"python ch1_first_sim.py\n",[89,102281,102282],{"__ignoreMap":10},[92,102283,102284,102286],{"class":94,"line":95},[92,102285,30361],{"class":1942},[92,102287,101261],{"class":207},[33,102289,102291],{"id":102290},"_5运行结果说明","5.运行结果说明",[38,102293,102294],{},"你应该看到类似输出:",[83,102296,102299],{"className":102297,"code":102298,"language":5167,"meta":10},[5165],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[89,102300,102298],{"__ignoreMap":10},[38,102302,102303,102305,102306,102309,102310,28366],{},[89,102304,101595],{}," 有 7 个位置变量: ",[89,102307,102308],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[89,102311,102312],{},"vx vy vz wx wy wz",[38,102314,102315,102316,102319],{},"你还会看到 ",[89,102317,102318],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[33,102321,102323],{"id":102322},"_6验证步骤","6.验证步骤",[38,102325,102326],{},"确认版本:",[83,102328,102329],{"className":23802,"code":100914,"language":23804,"meta":10,"style":10},[89,102330,102331],{"__ignoreMap":10},[92,102332,102333,102335,102337],{"class":94,"line":95},[92,102334,30361],{"class":1942},[92,102336,30339],{"class":151},[92,102338,100925],{"class":207},[38,102340,102341],{},"确认导入的是官方 bindings:",[83,102343,102345],{"className":23802,"code":102344,"language":23804,"meta":10,"style":10},"python -c \"import mujoco; print(mujoco)\"\n",[89,102346,102347],{"__ignoreMap":10},[92,102348,102349,102351,102353],{"class":94,"line":95},[92,102350,30361],{"class":1942},[92,102352,30339],{"class":151},[92,102354,102355],{"class":207}," \"import mujoco; print(mujoco)\"\n",[38,102357,102358],{},"运行程序:",[83,102360,102361],{"className":23802,"code":102279,"language":23804,"meta":10,"style":10},[89,102362,102363],{"__ignoreMap":10},[92,102364,102365,102367],{"class":94,"line":95},[92,102366,30361],{"class":1942},[92,102368,101261],{"class":207},[38,102370,102371,102372,102375,102376,28366],{},"检查 ",[89,102373,102374],{},"final time"," 是否约等于 ",[89,102377,102378],{},"1.0",[38,102380,102381],{},"再做几个小实验：",[46,102383,102384,102394,102402,102415],{},[49,102385,102386,102387,102389,102390,102393],{},"把 ",[89,102388,101914],{}," 改成 ",[89,102391,102392],{},"pos=\"0 0 2\"","，观察初始高度变化。",[49,102395,102386,102396,102389,102398,102401],{},[89,102397,101803],{},[89,102399,102400],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[49,102403,102386,102404,102389,102406,102409,102410,102412,102413,28366],{},[89,102405,101799],{},[89,102407,102408],{},"timestep=\"0.005\"","，观察 100 步后的 ",[89,102411,102374],{}," 是否变成约 ",[89,102414,35310],{},[49,102416,102417,102418,102421],{},"删除 ",[89,102419,102420],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[38,102423,102424],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[33,102426,102428],{"id":102427},"_7常见错误与解决方案","7.常见错误与解决方案",[63,102430,102432],{"id":102431},"modulenotfounderror-no-module-named-mujoco",[89,102433,102434],{},"ModuleNotFoundError: No module named 'mujoco'",[38,102436,102437],{},"解决:",[83,102439,102441],{"className":23802,"code":102440,"language":23804,"meta":10,"style":10},"pip install \"mujoco>=2.3\"\n",[89,102442,102443],{"__ignoreMap":10},[92,102444,102445,102447,102449],{"class":94,"line":95},[92,102446,23811],{"class":1942},[92,102448,23814],{"class":207},[92,102450,102451],{"class":207}," \"mujoco>=2.3\"\n",[63,102453,102455],{"id":102454},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[38,102457,102458],{},"先安装系统依赖:",[83,102460,102462],{"className":23802,"code":102461,"language":23804,"meta":10,"style":10},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[89,102463,102464],{"__ignoreMap":10},[92,102465,102466,102468,102470,102472,102474,102477,102479,102482,102484,102487,102489],{"class":94,"line":95},[92,102467,24557],{"class":1942},[92,102469,26296],{"class":207},[92,102471,23814],{"class":207},[92,102473,26381],{"class":151},[92,102475,102476],{"class":207}," mesa-libGL",[92,102478,100789],{"class":207},[92,102480,102481],{"class":207}," glfw",[92,102483,100809],{"class":207},[92,102485,102486],{"class":207}," libX11",[92,102488,100822],{"class":207},[92,102490,102491],{"class":207}," libXrandr\n",[63,102493,102495],{"id":102494},"xml-解析失败","XML 解析失败",[38,102497,102498],{},"检查:",[46,102500,102501,102504,102507,102513],{},[49,102502,102503],{},"标签是否闭合",[49,102505,102506],{},"属性是否带引号",[49,102508,102509,102510],{},"根节点是否是 ",[89,102511,102512],{},"\u003Cmujoco>",[49,102514,102515,102517,102518,102521],{},[89,102516,51780],{}," 是否放在 ",[89,102519,102520],{},"\u003Cworldbody>"," 内部",[63,102523,102525,102527,102528],{"id":102524},"final-time-不是严格等于-10",[89,102526,102374],{}," 不是严格等于 ",[89,102529,102378],{},[38,102531,102532],{},"这通常不是错误。浮点数计算可能得到：",[83,102534,102537],{"className":102535,"code":102536,"language":5167,"meta":10},[5165],"1.0000000000000007\n",[89,102538,102536],{"__ignoreMap":10},[38,102540,102541,102542,102544],{},"只要接近 ",[89,102543,102378],{}," 就正常。",[63,102546,102547],{"id":102547},"方块没有掉下来",[38,102549,102550],{},"检查：",[46,102552,102553,102559,102565,102570],{},[49,102554,102555,102556],{},"方块 body 里是否有 ",[89,102557,102558],{},"\u003Cfreejoint\u002F>",[49,102560,102561,102562],{},"重力是否是 ",[89,102563,102564],{},"0 0 -9.81",[49,102566,102567,102568],{},"是否真的调用了 ",[89,102569,100660],{},[49,102571,102572,102573,102575,102576],{},"你看的是否是 ",[89,102574,102318],{},"，不是 ",[89,102577,102578],{},"initial qpos",[33,102580,102582],{"id":102581},"_8本章小结","8.本章小结",[38,102584,102585],{},"本章你已经完成了 MuJoCo 的最小闭环：",[83,102587,102590],{"className":102588,"code":102589,"language":5167,"meta":10},[5165],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[89,102591,102589],{"__ignoreMap":10},[38,102593,102594],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5106,102596,102597],{},"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":10,"searchDepth":11,"depth":11,"links":102599},[102600,102601,102602,102607,102611,102612,102613,102621],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":102603},[102604,102605,102606],{"id":101057,"depth":1158,"text":101058},{"id":101151,"depth":1158,"text":101152},{"id":101203,"depth":1158,"text":101204},{"id":101227,"depth":11,"text":101228,"children":102608},[102609,102610],{"id":101547,"depth":1158,"text":101547},{"id":101683,"depth":1158,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":102614},[102615,102616,102617,102618,102620],{"id":102431,"depth":1158,"text":102434},{"id":102454,"depth":1158,"text":102455},{"id":102494,"depth":1158,"text":102495},{"id":102524,"depth":1158,"text":102619},"final time 不是严格等于 1.0",{"id":102547,"depth":1158,"text":102547},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100613,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102628,"title":102629,"body":102630,"description":10,"extension":14,"meta":104286,"navigation":17,"path":104287,"seo":104288,"stem":104289,"__hash__":104290},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102631,"toc":104262},[102632,102635,102637,102640,102643,102660,102755,102758,102764,102766,102768,102792,102795,102809,102812,102853,102855,102868,102870,102873,102921,102933,102936,102939,102945,102958,103025,103028,103047,103050,103053,103059,103061,103070,103073,103077,103086,103168,103177,103181,103187,103201,103211,103213,103543,103546,103558,103560,103571,103573,103576,103594,103597,103600,103618,103629,103632,103647,103657,103659,103680,103697,103717,103723,103763,103779,103795,103801,103804,103828,103844,103849,103879,103896,103921,103924,103939,103948,103963,103972,103987,103994,103996,104006,104019,104026,104029,104068,104075,104077,104129,104131,104137,104140,104147,104154,104157,104159,104177,104180,104183,104217,104229,104231,104234,104256,104259],[29,102633,102629],{"id":102634},"_2xml-与-mjcf-物理建模基础",[33,102636,100622],{"id":100621},[38,102638,102639],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[38,102641,102642],{},"本章结束后，你应该能看懂一个简单模型里：",[46,102644,102645,102648,102651,102654,102657],{},[49,102646,102647],{},"地面在哪里。",[49,102649,102650],{},"物体初始位置在哪里。",[49,102652,102653],{},"几何体是什么形状。",[49,102655,102656],{},"哪些 body 可以自由运动。",[49,102658,102659],{},"如何用名字在 Python 里找到 XML 中的对象。",[240,102661,102662,102672],{},[243,102663,102664],{},[246,102665,102666,102669],{},[249,102667,102668],{"align":23716},"标签",[249,102670,102671],{"align":23716},"作用",[287,102673,102674,102683,102693,102702,102712,102722,102735,102745],{},[246,102675,102676,102680],{},[292,102677,102678],{"align":23716},[89,102679,102512],{},[292,102681,102682],{"align":23716},"根节点",[246,102684,102685,102690],{},[292,102686,102687],{"align":23716},[89,102688,102689],{},"\u003Coption>",[292,102691,102692],{"align":23716},"仿真参数",[246,102694,102695,102699],{},[292,102696,102697],{"align":23716},[89,102698,102520],{},[292,102700,102701],{"align":23716},"世界中的物体",[246,102703,102704,102709],{},[292,102705,102706],{"align":23716},[89,102707,102708],{},"\u003Cbody>",[292,102710,102711],{"align":23716},"刚体",[246,102713,102714,102719],{},[292,102715,102716],{"align":23716},[89,102717,102718],{},"\u003Cgeom>",[292,102720,102721],{"align":23716},"几何体、碰撞体、可视体",[246,102723,102724,102732],{},[292,102725,102726,24959,102729],{"align":23716},[89,102727,102728],{},"\u003Cjoint>",[89,102730,102731],{},"\u003Cfreejoint>",[292,102733,102734],{"align":23716},"关节",[246,102736,102737,102742],{},[292,102738,102739],{"align":23716},[89,102740,102741],{},"\u003Csite>",[292,102743,102744],{"align":23716},"标记点",[246,102746,102747,102752],{},[292,102748,102749],{"align":23716},[89,102750,102751],{},"\u003Cactuator>",[292,102753,102754],{"align":23716},"控制器",[38,102756,102757],{},"初学时可以先记住：",[83,102759,102762],{"className":102760,"code":102761,"language":5167,"meta":10},[5165],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[89,102763,102761],{"__ignoreMap":10},[33,102765,100745],{"id":100744},[38,102767,100748],{},[83,102769,102771],{"className":23802,"code":102770,"language":23804,"meta":10,"style":10},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[89,102772,102773],{"__ignoreMap":10},[92,102774,102775,102777,102779,102781,102783,102785,102787,102789],{"class":94,"line":95},[92,102776,24557],{"class":1942},[92,102778,26296],{"class":207},[92,102780,23814],{"class":207},[92,102782,26381],{"class":151},[92,102784,102476],{"class":207},[92,102786,100789],{"class":207},[92,102788,102481],{"class":207},[92,102790,102791],{"class":207}," glfw-devel\n",[38,102793,102794],{},"pip:",[83,102796,102797],{"className":23802,"code":100894,"language":23804,"meta":10,"style":10},[89,102798,102799],{"__ignoreMap":10},[92,102800,102801,102803,102805,102807],{"class":94,"line":95},[92,102802,23811],{"class":1942},[92,102804,23814],{"class":207},[92,102806,100905],{"class":207},[92,102808,100908],{"class":207},[38,102810,102811],{},"conda:",[83,102813,102815],{"className":23802,"code":102814,"language":23804,"meta":10,"style":10},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[89,102816,102817,102834,102843],{"__ignoreMap":10},[92,102818,102819,102821,102823,102825,102828,102830,102832],{"class":94,"line":95},[92,102820,30311],{"class":1942},[92,102822,29157],{"class":207},[92,102824,25096],{"class":151},[92,102826,102827],{"class":207}," mujoco-xml",[92,102829,100950],{"class":207},[92,102831,100953],{"class":151},[92,102833,100956],{"class":151},[92,102835,102836,102838,102840],{"class":94,"line":11},[92,102837,30311],{"class":1942},[92,102839,100963],{"class":207},[92,102841,102842],{"class":207}," mujoco-xml\n",[92,102844,102845,102847,102849,102851],{"class":94,"line":1158},[92,102846,23811],{"class":1942},[92,102848,23814],{"class":207},[92,102850,100905],{"class":207},[92,102852,100908],{"class":207},[38,102854,100979],{},[46,102856,102857,102860,102865],{},[49,102858,102859],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[49,102861,102862,102863,28366],{},"本章使用基础标签，适用于 ",[89,102864,101002],{},[49,102866,102867],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[33,102869,101020],{"id":101019},[38,102871,102872],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[83,102874,102876],{"className":53047,"code":102875,"language":53049,"meta":10,"style":10},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[89,102877,102878,102892,102900,102905,102913],{"__ignoreMap":10},[92,102879,102880,102882,102884,102886,102888,102890],{"class":94,"line":95},[92,102881,1013],{"class":102},[92,102883,100996],{"class":51280},[92,102885,101750],{"class":1942},[92,102887,148],{"class":102},[92,102889,62659],{"class":207},[92,102891,51287],{"class":102},[92,102893,102894,102896,102898],{"class":94,"line":11},[92,102895,52124],{"class":102},[92,102897,101816],{"class":51280},[92,102899,51287],{"class":102},[92,102901,102902],{"class":94,"line":1158},[92,102903,102904],{"class":102},"    ...\n",[92,102906,102907,102909,102911],{"class":94,"line":1173},[92,102908,52397],{"class":102},[92,102910,101816],{"class":51280},[92,102912,51287],{"class":102},[92,102914,102915,102917,102919],{"class":94,"line":1179},[92,102916,51765],{"class":102},[92,102918,100996],{"class":51280},[92,102920,51287],{"class":102},[38,102922,102923,102925,102926,102928,102929,102932],{},[89,102924,51780],{}," 表示刚体。",[89,102927,101095],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[89,102930,102931],{},"joint"," 表示刚体相对父刚体如何运动。",[63,102934,102935],{"id":102935},"层级结构非常重要",[38,102937,102938],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[83,102940,102943],{"className":102941,"code":102942,"language":5167,"meta":10},[5165],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[89,102944,102942],{"__ignoreMap":10},[38,102946,102947,100993,102950,102953,102954,102957],{},[89,102948,102949],{},"red_box_geom",[89,102951,102952],{},"box_center"," 都属于 ",[89,102955,102956],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[83,102959,102961],{"className":53047,"code":102960,"language":53049,"meta":10,"style":10},"\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",[89,102962,102963,102983,102997,103017],{"__ignoreMap":10},[92,102964,102965,102967,102969,102971,102973,102975,102977,102979,102981],{"class":94,"line":95},[92,102966,1013],{"class":102},[92,102968,51780],{"class":51280},[92,102970,14900],{"class":1942},[92,102972,148],{"class":102},[92,102974,53471],{"class":207},[92,102976,101081],{"class":1942},[92,102978,148],{"class":102},[92,102980,101086],{"class":207},[92,102982,51287],{"class":102},[92,102984,102985,102987,102989,102991,102993,102995],{"class":94,"line":11},[92,102986,52124],{"class":102},[92,102988,101595],{"class":51280},[92,102990,14900],{"class":1942},[92,102992,148],{"class":102},[92,102994,101936],{"class":207},[92,102996,101119],{"class":102},[92,102998,102999,103001,103003,103005,103007,103009,103011,103013,103015],{"class":94,"line":1158},[92,103000,52124],{"class":102},[92,103002,101095],{"class":51280},[92,103004,53804],{"class":1942},[92,103006,148],{"class":102},[92,103008,53471],{"class":207},[92,103010,101111],{"class":1942},[92,103012,148],{"class":102},[92,103014,101116],{"class":207},[92,103016,101119],{"class":102},[92,103018,103019,103021,103023],{"class":94,"line":1173},[92,103020,51765],{"class":102},[92,103022,51780],{"class":51280},[92,103024,51287],{"class":102},[38,103026,103027],{},"含义:",[46,103029,103030,103036,103041,103044],{},[49,103031,103032,103033,103035],{},"创建名为 ",[89,103034,53694],{}," 的刚体",[49,103037,103038,103039],{},"初始位置在世界坐标 ",[89,103040,101144],{},[49,103042,103043],{},"它有一个自由关节",[49,103045,103046],{},"它有一个盒子几何体",[63,103048,103049],{"id":103049},"坐标怎么理解",[38,103051,103052],{},"MuJoCo 默认使用三维坐标：",[83,103054,103057],{"className":103055,"code":103056,"language":5167,"meta":10},[5165],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[89,103058,103056],{"__ignoreMap":10},[38,103060,14613],{},[83,103062,103064],{"className":53047,"code":103063,"language":53049,"meta":10,"style":10},"pos=\"0 0 1\"\n",[89,103065,103066],{"__ignoreMap":10},[92,103067,103068],{"class":94,"line":95},[92,103069,103063],{"class":102},[38,103071,103072],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[63,103074,103076],{"id":103075},"geom-的-size-怎么理解","geom 的 size 怎么理解",[38,103078,103079,103080,82510,103083,103085],{},"不同 ",[89,103081,103082],{},"type",[89,103084,31477],{}," 含义不同：",[240,103087,103088,103103],{},[243,103089,103090],{},[246,103091,103092,103096,103101],{},[249,103093,103094],{"align":23716},[89,103095,103082],{},[249,103097,103098,103100],{"align":23716},[89,103099,31477],{}," 示例",[249,103102,100675],{"align":23716},[287,103104,103105,103119,103134,103153],{},[246,103106,103107,103111,103116],{},[292,103108,103109],{"align":23716},[89,103110,53694],{},[292,103112,103113],{"align":23716},[89,103114,103115],{},"size=\"0.1 0.2 0.3\"",[292,103117,103118],{"align":23716},"x\u002Fy\u002Fz 半边长，不是完整长度",[246,103120,103121,103126,103131],{},[292,103122,103123],{"align":23716},[89,103124,103125],{},"sphere",[292,103127,103128],{"align":23716},[89,103129,103130],{},"size=\"0.1\"",[292,103132,103133],{"align":23716},"球半径",[246,103135,103136,103141,103146],{},[292,103137,103138],{"align":23716},[89,103139,103140],{},"capsule",[292,103142,103143],{"align":23716},[89,103144,103145],{},"size=\"0.03\"",[292,103147,103148,103149,103152],{"align":23716},"胶囊半径，长度常用 ",[89,103150,103151],{},"fromto"," 指定",[246,103154,103155,103160,103165],{},[292,103156,103157],{"align":23716},[89,103158,103159],{},"plane",[292,103161,103162],{"align":23716},[89,103163,103164],{},"size=\"3 3 0.1\"",[292,103166,103167],{"align":23716},"可视平面大小，通常当地面",[38,103169,103170,103171,103173,103174,103176],{},"最容易踩坑的是 box：",[89,103172,101999],{}," 表示边长大约是 ",[89,103175,32018],{},"，因为 MuJoCo 用的是半边长。",[63,103178,103180],{"id":103179},"site-是什么","site 是什么",[38,103182,103183,103186],{},[89,103184,103185],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[46,103188,103189,103192,103195,103198],{},[49,103190,103191],{},"标记机械臂末端。",[49,103193,103194],{},"标记目标位置。",[49,103196,103197],{},"放传感器或相机参考点。",[49,103199,103200],{},"在 Python 中读取某个关键点的世界坐标。",[38,103202,103203,103204,100993,103207,103210],{},"在后面的 Reacher 任务中，",[89,103205,103206],{},"tip",[89,103208,103209],{},"target"," 就会用 site 表示。",[33,103212,101228],{"id":101227},[83,103214,103216],{"className":30359,"code":103215,"language":30361,"meta":10,"style":10},"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",[89,103217,103218,103224,103234,103238,103242,103250,103255,103259,103263,103267,103272,103276,103281,103286,103291,103296,103300,103304,103308,103312,103316,103320,103332,103344,103352,103356,103371,103386,103390,103403,103418,103431,103444,103448,103464,103468,103472,103483,103495,103507,103519,103523,103527,103539],{"__ignoreMap":10},[92,103219,103220,103222],{"class":94,"line":95},[92,103221,30373],{"class":98},[92,103223,101276],{"class":102},[92,103225,103226,103228,103230,103232],{"class":94,"line":11},[92,103227,30373],{"class":98},[92,103229,31361],{"class":102},[92,103231,31364],{"class":98},[92,103233,31367],{"class":102},[92,103235,103236],{"class":94,"line":1158},[92,103237,2379],{"emptyLinePlaceholder":17},[92,103239,103240],{"class":94,"line":1173},[92,103241,2379],{"emptyLinePlaceholder":17},[92,103243,103244,103246,103248],{"class":94,"line":1179},[92,103245,101289],{"class":151},[92,103247,13544],{"class":98},[92,103249,101294],{"class":207},[92,103251,103252],{"class":94,"line":1193},[92,103253,103254],{"class":207},"\u003Cmujoco model=\"xml_basic\">\n",[92,103256,103257],{"class":94,"line":1199},[92,103258,101304],{"class":207},[92,103260,103261],{"class":94,"line":1290},[92,103262,2379],{"emptyLinePlaceholder":17},[92,103264,103265],{"class":94,"line":1296},[92,103266,101313],{"class":207},[92,103268,103269],{"class":94,"line":1308},[92,103270,103271],{"class":207},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[92,103273,103274],{"class":94,"line":1591},[92,103275,2379],{"emptyLinePlaceholder":17},[92,103277,103278],{"class":94,"line":1596},[92,103279,103280],{"class":207},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[92,103282,103283],{"class":94,"line":1602},[92,103284,103285],{"class":207},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[92,103287,103288],{"class":94,"line":1607},[92,103289,103290],{"class":207},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[92,103292,103293],{"class":94,"line":1621},[92,103294,103295],{"class":207},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[92,103297,103298],{"class":94,"line":1626},[92,103299,101342],{"class":207},[92,103301,103302],{"class":94,"line":1632},[92,103303,101347],{"class":207},[92,103305,103306],{"class":94,"line":1653},[92,103307,101352],{"class":207},[92,103309,103310],{"class":94,"line":1658},[92,103311,95678],{"class":207},[92,103313,103314],{"class":94,"line":1672},[92,103315,2379],{"emptyLinePlaceholder":17},[92,103317,103318],{"class":94,"line":1677},[92,103319,2379],{"emptyLinePlaceholder":17},[92,103321,103322,103324,103326,103328,103330],{"class":94,"line":1706},[92,103323,31928],{"class":98},[92,103325,1952],{"class":1942},[92,103327,101373],{"class":102},[92,103329,95666],{"class":151},[92,103331,3718],{"class":102},[92,103333,103334,103336,103338,103340,103342],{"class":94,"line":1711},[92,103335,101382],{"class":102},[92,103337,148],{"class":98},[92,103339,101387],{"class":102},[92,103341,101289],{"class":151},[92,103343,109],{"class":102},[92,103345,103346,103348,103350],{"class":94,"line":1728},[92,103347,101396],{"class":102},[92,103349,148],{"class":98},[92,103351,101401],{"class":102},[92,103353,103354],{"class":94,"line":1733},[92,103355,2379],{"emptyLinePlaceholder":17},[92,103357,103358,103361,103363,103366,103369],{"class":94,"line":1738},[92,103359,103360],{"class":102},"    box_body_id ",[92,103362,148],{"class":98},[92,103364,103365],{"class":102}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[92,103367,103368],{"class":207},"\"red_box\"",[92,103370,109],{"class":102},[92,103372,103373,103376,103378,103381,103384],{"class":94,"line":1743},[92,103374,103375],{"class":102},"    site_id ",[92,103377,148],{"class":98},[92,103379,103380],{"class":102}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[92,103382,103383],{"class":207},"\"box_center\"",[92,103385,109],{"class":102},[92,103387,103388],{"class":94,"line":1757},[92,103389,2379],{"emptyLinePlaceholder":17},[92,103391,103392,103394,103397,103399,103401],{"class":94,"line":1762},[92,103393,3080],{"class":98},[92,103395,103396],{"class":102}," box_body_id ",[92,103398,1013],{"class":98},[92,103400,4072],{"class":151},[92,103402,3718],{"class":102},[92,103404,103405,103408,103411,103413,103416],{"class":94,"line":2556},[92,103406,103407],{"class":98},"        raise",[92,103409,103410],{"class":151}," RuntimeError",[92,103412,103],{"class":102},[92,103414,103415],{"class":207},"\"body red_box not found\"",[92,103417,109],{"class":102},[92,103419,103420,103422,103425,103427,103429],{"class":94,"line":2570},[92,103421,3080],{"class":98},[92,103423,103424],{"class":102}," site_id ",[92,103426,1013],{"class":98},[92,103428,4072],{"class":151},[92,103430,3718],{"class":102},[92,103432,103433,103435,103437,103439,103442],{"class":94,"line":2578},[92,103434,103407],{"class":98},[92,103436,103410],{"class":151},[92,103438,103],{"class":102},[92,103440,103441],{"class":207},"\"site box_center not found\"",[92,103443,109],{"class":102},[92,103445,103446],{"class":94,"line":2583},[92,103447,2379],{"emptyLinePlaceholder":17},[92,103449,103450,103452,103454,103456,103458,103460,103462],{"class":94,"line":2589},[92,103451,3180],{"class":98},[92,103453,101476],{"class":102},[92,103455,26024],{"class":98},[92,103457,32424],{"class":151},[92,103459,103],{"class":102},[92,103461,1701],{"class":151},[92,103463,30767],{"class":102},[92,103465,103466],{"class":94,"line":2595},[92,103467,101491],{"class":102},[92,103469,103470],{"class":94,"line":2600},[92,103471,2379],{"emptyLinePlaceholder":17},[92,103473,103474,103476,103478,103481],{"class":94,"line":7928},[92,103475,31280],{"class":151},[92,103477,103],{"class":102},[92,103479,103480],{"class":207},"\"simulation time:\"",[92,103482,101453],{"class":102},[92,103484,103485,103487,103489,103492],{"class":94,"line":7952},[92,103486,31280],{"class":151},[92,103488,103],{"class":102},[92,103490,103491],{"class":207},"\"box body position:\"",[92,103493,103494],{"class":102},", data.xpos[box_body_id].copy())\n",[92,103496,103497,103499,103501,103504],{"class":94,"line":7957},[92,103498,31280],{"class":151},[92,103500,103],{"class":102},[92,103502,103503],{"class":207},"\"site position:\"",[92,103505,103506],{"class":102},", data.site_xpos[site_id].copy())\n",[92,103508,103509,103511,103513,103516],{"class":94,"line":7963},[92,103510,31280],{"class":151},[92,103512,103],{"class":102},[92,103514,103515],{"class":207},"\"box qpos:\"",[92,103517,103518],{"class":102},", np.array(data.qpos))\n",[92,103520,103521],{"class":94,"line":7990},[92,103522,2379],{"emptyLinePlaceholder":17},[92,103524,103525],{"class":94,"line":7995},[92,103526,2379],{"emptyLinePlaceholder":17},[92,103528,103529,103531,103533,103535,103537],{"class":94,"line":8001},[92,103530,1510],{"class":98},[92,103532,31201],{"class":151},[92,103534,101534],{"class":98},[92,103536,101537],{"class":207},[92,103538,3718],{"class":102},[92,103540,103541],{"class":94,"line":8013},[92,103542,101544],{"class":102},[38,103544,103545],{},"保存为：",[83,103547,103549],{"className":23802,"code":103548,"language":23804,"meta":10,"style":10},"touch ch2_xml_basic.py\n",[89,103550,103551],{"__ignoreMap":10},[92,103552,103553,103555],{"class":94,"line":95},[92,103554,101258],{"class":1942},[92,103556,103557],{"class":207}," ch2_xml_basic.py\n",[38,103559,102276],{},[83,103561,103563],{"className":23802,"code":103562,"language":23804,"meta":10,"style":10},"python ch2_xml_basic.py\n",[89,103564,103565],{"__ignoreMap":10},[92,103566,103567,103569],{"class":94,"line":95},[92,103568,30361],{"class":1942},[92,103570,103557],{"class":207},[63,103572,101547],{"id":101547},[38,103574,103575],{},"用名字查找 body：",[83,103577,103579],{"className":30359,"code":103578,"language":30361,"meta":10,"style":10},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[89,103580,103581],{"__ignoreMap":10},[92,103582,103583,103586,103588,103590,103592],{"class":94,"line":95},[92,103584,103585],{"class":102},"box_body_id ",[92,103587,148],{"class":98},[92,103589,103365],{"class":102},[92,103591,103368],{"class":207},[92,103593,109],{"class":102},[38,103595,103596],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[38,103598,103599],{},"用名字查找 site：",[83,103601,103603],{"className":30359,"code":103602,"language":30361,"meta":10,"style":10},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[89,103604,103605],{"__ignoreMap":10},[92,103606,103607,103610,103612,103614,103616],{"class":94,"line":95},[92,103608,103609],{"class":102},"site_id ",[92,103611,148],{"class":98},[92,103613,103380],{"class":102},[92,103615,103383],{"class":207},[92,103617,109],{"class":102},[38,103619,103620,103621,103624,103625,103628],{},"注意第二个参数是对象类型。查 body 就用 ",[89,103622,103623],{},"mjOBJ_BODY","，查 site 就用 ",[89,103626,103627],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[38,103630,103631],{},"读取世界坐标：",[83,103633,103635],{"className":30359,"code":103634,"language":30361,"meta":10,"style":10},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[89,103636,103637,103642],{"__ignoreMap":10},[92,103638,103639],{"class":94,"line":95},[92,103640,103641],{"class":102},"data.xpos[box_body_id]\n",[92,103643,103644],{"class":94,"line":11},[92,103645,103646],{"class":102},"data.site_xpos[site_id]\n",[38,103648,103649,103652,103653,103656],{},[89,103650,103651],{},"xpos"," 是 body 的世界坐标，",[89,103654,103655],{},"site_xpos"," 是 site 的世界坐标。",[63,103658,101683],{"id":101683},[83,103660,103662],{"className":30359,"code":103661,"language":30361,"meta":10,"style":10},"import mujoco\nimport numpy as np\n",[89,103663,103664,103670],{"__ignoreMap":10},[92,103665,103666,103668],{"class":94,"line":95},[92,103667,30373],{"class":98},[92,103669,101276],{"class":102},[92,103671,103672,103674,103676,103678],{"class":94,"line":11},[92,103673,30373],{"class":98},[92,103675,31361],{"class":102},[92,103677,31364],{"class":98},[92,103679,31367],{"class":102},[38,103681,103682,103683,103686,103687,103690,103691,315,103694,28366],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[89,103684,103685],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[89,103688,103689],{},"as np"," 是习惯写法，后面就可以写 ",[89,103692,103693],{},"np.array(...)",[89,103695,103696],{},"np.round(...)",[83,103698,103699],{"className":30359,"code":101570,"language":30361,"meta":10,"style":10},[89,103700,103701,103709,103713],{"__ignoreMap":10},[92,103702,103703,103705,103707],{"class":94,"line":95},[92,103704,101289],{"class":151},[92,103706,13544],{"class":98},[92,103708,101294],{"class":207},[92,103710,103711],{"class":94,"line":11},[92,103712,101585],{"class":207},[92,103714,103715],{"class":94,"line":1158},[92,103716,95678],{"class":207},[38,103718,103719,103720,28366],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[89,103721,103722],{},"mujoco.MjModel.from_xml_string(XML)",[83,103724,103726],{"className":53047,"code":103725,"language":53049,"meta":10,"style":10},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[89,103727,103728],{"__ignoreMap":10},[92,103729,103730,103732,103734,103736,103738,103740,103742,103744,103747,103749,103751,103754,103756,103758,103761],{"class":94,"line":95},[92,103731,1013],{"class":102},[92,103733,103185],{"class":51280},[92,103735,14900],{"class":1942},[92,103737,148],{"class":102},[92,103739,103383],{"class":207},[92,103741,101081],{"class":1942},[92,103743,148],{"class":102},[92,103745,103746],{"class":207},"\"0 0 0\"",[92,103748,101111],{"class":1942},[92,103750,148],{"class":102},[92,103752,103753],{"class":207},"\"0.03\"",[92,103755,78747],{"class":1942},[92,103757,148],{"class":102},[92,103759,103760],{"class":207},"\"0 1 0 1\"",[92,103762,101119],{"class":102},[38,103764,103765,103767,103768,103771,103772,103774,103775,103778],{},[89,103766,103185],{}," 是标记点。",[89,103769,103770],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[89,103773,103145],{}," 表示显示出来的小球大小。",[89,103776,103777],{},"rgba=\"0 1 0 1\""," 表示绿色。",[83,103780,103781],{"className":30359,"code":103578,"language":30361,"meta":10,"style":10},[89,103782,103783],{"__ignoreMap":10},[92,103784,103785,103787,103789,103791,103793],{"class":94,"line":95},[92,103786,103585],{"class":102},[92,103788,148],{"class":98},[92,103790,103365],{"class":102},[92,103792,103368],{"class":207},[92,103794,109],{"class":102},[38,103796,103797,103798,103800],{},"这行的作用是：根据名字 ",[89,103799,103368],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[38,103802,103803],{},"拆开看：",[46,103805,103806,103812,103817,103823],{},[49,103807,103808,103811],{},[89,103809,103810],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[49,103813,103814,103816],{},[89,103815,102060],{}," 是被查询的模型。",[49,103818,103819,103822],{},[89,103820,103821],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[49,103824,103825,103827],{},[89,103826,103368],{}," 是 XML 里写的名字。",[83,103829,103830],{"className":30359,"code":103602,"language":30361,"meta":10,"style":10},[89,103831,103832],{"__ignoreMap":10},[92,103833,103834,103836,103838,103840,103842],{"class":94,"line":95},[92,103835,103609],{"class":102},[92,103837,148],{"class":98},[92,103839,103380],{"class":102},[92,103841,103383],{"class":207},[92,103843,109],{"class":102},[38,103845,103846,103847,28366],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[89,103848,103383],{},[83,103850,103852],{"className":30359,"code":103851,"language":30361,"meta":10,"style":10},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[89,103853,103854,103866],{"__ignoreMap":10},[92,103855,103856,103858,103860,103862,103864],{"class":94,"line":95},[92,103857,1510],{"class":98},[92,103859,103396],{"class":102},[92,103861,1013],{"class":98},[92,103863,4072],{"class":151},[92,103865,3718],{"class":102},[92,103867,103868,103871,103873,103875,103877],{"class":94,"line":11},[92,103869,103870],{"class":98},"    raise",[92,103872,103410],{"class":151},[92,103874,103],{"class":102},[92,103876,103415],{"class":207},[92,103878,109],{"class":102},[38,103880,103881,103883,103884,103887,103888,103891,103892,103895],{},[89,103882,1510],{}," 是条件判断。",[89,103885,103886],{},"mj_name2id"," 找不到对象时会返回 ",[89,103889,103890],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[89,103893,103894],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[83,103897,103899],{"className":30359,"code":103898,"language":30361,"meta":10,"style":10},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[89,103900,103901,103917],{"__ignoreMap":10},[92,103902,103903,103905,103907,103909,103911,103913,103915],{"class":94,"line":95},[92,103904,3004],{"class":98},[92,103906,101476],{"class":102},[92,103908,26024],{"class":98},[92,103910,32424],{"class":151},[92,103912,103],{"class":102},[92,103914,1701],{"class":151},[92,103916,30767],{"class":102},[92,103918,103919],{"class":94,"line":11},[92,103920,101674],{"class":102},[38,103922,103923],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[83,103925,103927],{"className":30359,"code":103926,"language":30361,"meta":10,"style":10},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[89,103928,103929],{"__ignoreMap":10},[92,103930,103931,103933,103935,103937],{"class":94,"line":95},[92,103932,30396],{"class":151},[92,103934,103],{"class":102},[92,103936,103491],{"class":207},[92,103938,103494],{"class":102},[38,103940,103941,103943,103944,103947],{},[89,103942,101054],{}," 保存所有 body 的世界坐标。",[89,103945,103946],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[83,103949,103951],{"className":30359,"code":103950,"language":30361,"meta":10,"style":10},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[89,103952,103953],{"__ignoreMap":10},[92,103954,103955,103957,103959,103961],{"class":94,"line":95},[92,103956,30396],{"class":151},[92,103958,103],{"class":102},[92,103960,103503],{"class":207},[92,103962,103506],{"class":102},[38,103964,103965,103968,103969,103971],{},[89,103966,103967],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[89,103970,102952],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[83,103973,103975],{"className":30359,"code":103974,"language":30361,"meta":10,"style":10},"print(\"box qpos:\", np.array(data.qpos))\n",[89,103976,103977],{"__ignoreMap":10},[92,103978,103979,103981,103983,103985],{"class":94,"line":95},[92,103980,30396],{"class":151},[92,103982,103],{"class":102},[92,103984,103515],{"class":207},[92,103986,103518],{"class":102},[38,103988,103989,103990,103993],{},"这里打印广义位置数组。",[89,103991,103992],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[33,103995,102291],{"id":102290},[38,103997,103998,103999,104002,104003,28366],{},"程序会输出 ",[89,104000,104001],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[89,104004,104005],{},"qpos",[38,104007,104008,104010,104011,104014,104015,104018],{},[89,104009,103946],{}," 是 body 的世界坐标位置。",[89,104012,104013],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[89,104016,104017],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[38,104020,82202,104021,82510,104023,104025],{},[89,104022,102952],{},[89,104024,103770],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[38,104027,104028],{},"如果你把 site 改成：",[83,104030,104032],{"className":53047,"code":104031,"language":53049,"meta":10,"style":10},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[89,104033,104034],{"__ignoreMap":10},[92,104035,104036,104038,104040,104042,104044,104047,104049,104051,104054,104056,104058,104060,104062,104064,104066],{"class":94,"line":95},[92,104037,1013],{"class":102},[92,104039,103185],{"class":51280},[92,104041,14900],{"class":1942},[92,104043,148],{"class":102},[92,104045,104046],{"class":207},"\"box_top\"",[92,104048,101081],{"class":1942},[92,104050,148],{"class":102},[92,104052,104053],{"class":207},"\"0 0 0.15\"",[92,104055,101111],{"class":1942},[92,104057,148],{"class":102},[92,104059,103753],{"class":207},[92,104061,78747],{"class":1942},[92,104063,148],{"class":102},[92,104065,103760],{"class":207},[92,104067,101119],{"class":102},[38,104069,104070,104071,104074],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[89,104072,104073],{},"site position"," 就会比 body position 的 z 坐标更高。",[33,104076,102323],{"id":102322},[46,104078,104079,104088,104091,104098,104104,104115],{},[49,104080,102386,104081,104083,104084,102389,104086,28366],{},[89,104082,102956],{}," 的初始高度从 ",[89,104085,320],{},[89,104087,180],{},[49,104089,104090],{},"重新运行程序。",[49,104092,104093,104094,104097],{},"观察 ",[89,104095,104096],{},"box qpos"," 和最终位置是否变化。",[49,104099,104100,104101,104103],{},"故意把 ",[89,104102,103185],{}," 名称改错，确认程序能报错。",[49,104105,102386,104106,104108,104109,102389,104111,104114],{},[89,104107,101095],{}," 的颜色 ",[89,104110,102007],{},[89,104112,104113],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[49,104116,102386,104117,82510,104119,102389,104122,104125,104126,104128],{},[89,104118,102952],{},[89,104120,104121],{},"pos",[89,104123,104124],{},"0 0 0.2","，观察 ",[89,104127,104073],{}," 如何变化。",[33,104130,102428],{"id":102427},[63,104132,104134],{"id":104133},"xml-error-schema-violation",[89,104135,104136],{},"XML Error: Schema violation",[38,104138,104139],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[63,104141,104143,81270,104145],{"id":104142},"mj_name2id-返回-1",[89,104144,103886],{},[89,104146,103890],{},[38,104148,104149,104150,104153],{},"说明名字没有找到。检查 XML 中 ",[89,104151,104152],{},"name=\"...\"","，并确认对象类型正确。",[63,104155,104156],{"id":104156},"物体不下落",[38,104158,102498],{},[46,104160,104161,104166,104171],{},[49,104162,104163,104164],{},"body 是否有 ",[89,104165,101595],{},[49,104167,104168,104169],{},"gravity 是否为 ",[89,104170,102564],{},[49,104172,104173,104174,104176],{},"body 是否被固定在 ",[89,104175,101816],{}," 中",[63,104178,104179],{"id":104179},"坐标看起来不符合预期",[38,104181,104182],{},"先区分两种坐标：",[240,104184,104185,104194],{},[243,104186,104187],{},[246,104188,104189,104192],{},[249,104190,104191],{"align":23716},"坐标",[249,104193,100675],{"align":23716},[287,104195,104196,104206],{},[246,104197,104198,104203],{},[292,104199,104200,104201],{"align":23716},"XML 里的 ",[89,104202,104121],{},[292,104204,104205],{"align":23716},"相对父 body 的局部坐标",[246,104207,104208,104214],{},[292,104209,104210,24959,104212],{"align":23716},[89,104211,101054],{},[89,104213,103967],{},[292,104215,104216],{"align":23716},"仿真更新后的世界坐标",[38,104218,104219,104220,104222,104223,82519,104226,104228],{},"如果你修改了 ",[89,104221,101045],{},"，但还没调用 ",[89,104224,104225],{},"mj_forward",[89,104227,101190],{},"，世界坐标可能还没有更新。",[33,104230,102582],{"id":102581},[38,104232,104233],{},"MJCF 建模先掌握四件事：",[46,104235,104236,104241,104246,104251],{},[49,104237,104238,104240],{},[89,104239,51780],{}," 表示刚体层级。",[49,104242,104243,104245],{},[89,104244,101095],{}," 表示形状、碰撞和质量。",[49,104247,104248,104250],{},[89,104249,102931],{}," 决定 body 能不能动、怎么动。",[49,104252,104253,104255],{},[89,104254,103185],{}," 用来标记关键点，方便 Python 读取位置。",[38,104257,104258],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5106,104260,104261],{},"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":10,"searchDepth":11,"depth":11,"links":104263},[104264,104265,104266,104272,104276,104277,104278,104285],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":104267},[104268,104269,104270,104271],{"id":102935,"depth":1158,"text":102935},{"id":103049,"depth":1158,"text":103049},{"id":103075,"depth":1158,"text":103076},{"id":103179,"depth":1158,"text":103180},{"id":101227,"depth":11,"text":101228,"children":104273},[104274,104275],{"id":101547,"depth":1158,"text":101547},{"id":101683,"depth":1158,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":104279},[104280,104281,104283,104284],{"id":104133,"depth":1158,"text":104136},{"id":104142,"depth":1158,"text":104282},"mj_name2id 返回 -1",{"id":104156,"depth":1158,"text":104156},{"id":104179,"depth":1158,"text":104179},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102629,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104292,"title":104293,"body":104294,"description":10,"extension":14,"meta":105789,"navigation":17,"path":105790,"seo":105791,"stem":105792,"__hash__":105793},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104295,"toc":105761},[104296,104299,104301,104304,104307,104345,104348,104354,104357,104359,104361,104388,104390,104404,104406,104447,104449,104473,104475,104478,104487,104496,104499,104508,104516,104525,104528,104538,104541,104593,104600,104606,104614,104662,104665,104684,104687,104695,104699,104708,104741,104743,105091,105093,105105,105107,105118,105120,105123,105144,105150,105153,105178,105188,105191,105199,105202,105205,105226,105237,105239,105259,105262,105283,105292,105311,105317,105342,105345,105359,105366,105390,105393,105401,105410,105426,105438,105446,105455,105457,105460,105484,105489,105492,105514,105516,105555,105557,105564,105566,105574,105577,105580,105592,105633,105640,105651,105658,105661,105710,105713,105716,105722,105724,105729,105755,105758],[29,104297,104293],{"id":104298},"_3python-控制接口读取状态与推进仿真",[33,104300,100622],{"id":100621},[38,104302,104303],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[38,104305,104306],{},"你将学习:",[46,104308,104309,104314,104319,104323,104328,104339],{},[49,104310,104311],{},[89,104312,104313],{},"MjModel.from_xml_string",[49,104315,104316],{},[89,104317,104318],{},"MjData(model)",[49,104320,104321],{},[89,104322,101190],{},[49,104324,104325],{},[89,104326,104327],{},"mj_resetData",[49,104329,104330,104331,315,104333,315,104336],{},"读取 ",[89,104332,104005],{},[89,104334,104335],{},"qvel",[89,104337,104338],{},"ctrl",[49,104340,104341,104342],{},"使用 ",[89,104343,104344],{},"model.opt.timestep",[38,104346,104347],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[83,104349,104352],{"className":104350,"code":104351,"language":5167,"meta":10},[5165],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[89,104353,104351],{"__ignoreMap":10},[38,104355,104356],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[33,104358,100745],{"id":100744},[38,104360,100748],{},[83,104362,104364],{"className":23802,"code":104363,"language":23804,"meta":10,"style":10},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[89,104365,104366],{"__ignoreMap":10},[92,104367,104368,104370,104372,104374,104376,104379,104381,104383,104385],{"class":94,"line":95},[92,104369,24557],{"class":1942},[92,104371,26296],{"class":207},[92,104373,23814],{"class":207},[92,104375,26381],{"class":151},[92,104377,104378],{"class":207}," python3",[92,104380,100773],{"class":207},[92,104382,102476],{"class":207},[92,104384,100789],{"class":207},[92,104386,104387],{"class":207}," glfw\n",[38,104389,102794],{},[83,104391,104392],{"className":23802,"code":100894,"language":23804,"meta":10,"style":10},[89,104393,104394],{"__ignoreMap":10},[92,104395,104396,104398,104400,104402],{"class":94,"line":95},[92,104397,23811],{"class":1942},[92,104399,23814],{"class":207},[92,104401,100905],{"class":207},[92,104403,100908],{"class":207},[38,104405,102811],{},[83,104407,104409],{"className":23802,"code":104408,"language":23804,"meta":10,"style":10},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[89,104410,104411,104428,104437],{"__ignoreMap":10},[92,104412,104413,104415,104417,104419,104422,104424,104426],{"class":94,"line":95},[92,104414,30311],{"class":1942},[92,104416,29157],{"class":207},[92,104418,25096],{"class":151},[92,104420,104421],{"class":207}," mujoco-python-api",[92,104423,100950],{"class":207},[92,104425,100953],{"class":151},[92,104427,100956],{"class":151},[92,104429,104430,104432,104434],{"class":94,"line":11},[92,104431,30311],{"class":1942},[92,104433,100963],{"class":207},[92,104435,104436],{"class":207}," mujoco-python-api\n",[92,104438,104439,104441,104443,104445],{"class":94,"line":1158},[92,104440,23811],{"class":1942},[92,104442,23814],{"class":207},[92,104444,100905],{"class":207},[92,104446,100908],{"class":207},[38,104448,100979],{},[46,104450,104451,104458,104467],{},[49,104452,104453,100993,104455,104457],{},[89,104454,100650],{},[89,104456,100655],{}," 是官方 Python bindings 的类名。",[49,104459,104460,104461,104464,104465,28366],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[89,104462,104463],{},"mjModel"," 在 Python 中是 ",[89,104466,100684],{},[49,104468,104469,104470,28366],{},"不要使用 ",[89,104471,104472],{},"sim = mujoco_py.MjSim(...)",[33,104474,101020],{"id":101019},[38,104476,104477],{},"仿真推进核心代码:",[83,104479,104481],{"className":30359,"code":104480,"language":30361,"meta":10,"style":10},"mujoco.mj_step(model, data)\n",[89,104482,104483],{"__ignoreMap":10},[92,104484,104485],{"class":94,"line":95},[92,104486,104480],{"class":102},[38,104488,104489,104490,315,104492,315,104494,28366],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[89,104491,101045],{},[89,104493,101048],{},[89,104495,101042],{},[38,104497,104498],{},"重置仿真:",[83,104500,104502],{"className":30359,"code":104501,"language":30361,"meta":10,"style":10},"mujoco.mj_resetData(model, data)\n",[89,104503,104504],{"__ignoreMap":10},[92,104505,104506],{"class":94,"line":95},[92,104507,104501],{"class":102},[38,104509,104510,104511,82519,104513,104515],{},"如果手动修改了 ",[89,104512,101045],{},[89,104514,101048],{},"，通常应调用:",[83,104517,104519],{"className":30359,"code":104518,"language":30361,"meta":10,"style":10},"mujoco.mj_forward(model, data)\n",[89,104520,104521],{"__ignoreMap":10},[92,104522,104523],{"class":94,"line":95},[92,104524,104518],{"class":102},[38,104526,104527],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[63,104529,104531,315,104533,315,104535,104537],{"id":104530},"qposqvelctrl-是什么",[89,104532,104005],{},[89,104534,104335],{},[89,104536,104338],{}," 是什么",[38,104539,104540],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[240,104542,104543,104555],{},[243,104544,104545],{},[246,104546,104547,104550,104552],{},[249,104548,104549],{"align":23716},"字段",[249,104551,100675],{"align":23716},[249,104553,104554],{"align":23716},"谁来修改",[287,104556,104557,104569,104581],{},[246,104558,104559,104563,104566],{},[292,104560,104561],{"align":23716},[89,104562,101045],{},[292,104564,104565],{"align":23716},"广义位置，例如小车位置、关节角、自由物体位置姿态",[292,104567,104568],{"align":23716},"MuJoCo 更新，也可以手动设置初始状态",[246,104570,104571,104575,104578],{},[292,104572,104573],{"align":23716},[89,104574,101048],{},[292,104576,104577],{"align":23716},"广义速度，例如小车速度、关节角速度",[292,104579,104580],{"align":23716},"MuJoCo 更新，也可以手动清零",[246,104582,104583,104587,104590],{},[292,104584,104585],{"align":23716},[89,104586,101051],{},[292,104588,104589],{"align":23716},"actuator 的控制输入",[292,104591,104592],{"align":23716},"主要由你的控制代码写入",[38,104594,9005,104595,100993,104597,104599],{},[89,104596,104005],{},[89,104598,104335],{}," 不一定同维。自由刚体就是典型例子：",[83,104601,104604],{"className":104602,"code":104603,"language":5167,"meta":10},[5165],"freejoint: qpos 7 维，qvel 6 维\n",[89,104605,104603],{"__ignoreMap":10},[63,104607,104609,100993,104611,104613],{"id":104608},"mj_step-和-mj_forward-的区别",[89,104610,101190],{},[89,104612,104225],{}," 的区别",[240,104615,104616,104629],{},[243,104617,104618],{},[246,104619,104620,104623,104626],{},[249,104621,104622],{"align":23716},"函数",[249,104624,104625],{"align":23716},"是否推进时间",[249,104627,104628],{"align":23716},"什么时候用",[287,104630,104631,104644],{},[246,104632,104633,104638,104641],{},[292,104634,104635],{"align":23716},[89,104636,104637],{},"mj_step(model, data)",[292,104639,104640],{"align":23716},"是",[292,104642,104643],{"align":23716},"正常仿真循环，每调用一次前进一步",[246,104645,104646,104651,104654],{},[292,104647,104648],{"align":23716},[89,104649,104650],{},"mj_forward(model, data)",[292,104652,104653],{"align":23716},"否",[292,104655,104656,104657,315,104659,104661],{"align":23716},"手动改了 ",[89,104658,104005],{},[89,104660,104335],{}," 后，刷新派生量",[38,104663,104664],{},"例如你写：",[83,104666,104668],{"className":30359,"code":104667,"language":30361,"meta":10,"style":10},"data.qpos[2] = 2.0\n",[89,104669,104670],{"__ignoreMap":10},[92,104671,104672,104675,104677,104679,104681],{"class":94,"line":95},[92,104673,104674],{"class":102},"data.qpos[",[92,104676,180],{"class":151},[92,104678,4422],{"class":102},[92,104680,148],{"class":98},[92,104682,104683],{"class":151}," 2.0\n",[38,104685,104686],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[83,104688,104689],{"className":30359,"code":104518,"language":30361,"meta":10,"style":10},[89,104690,104691],{"__ignoreMap":10},[92,104692,104693],{"class":94,"line":95},[92,104694,104518],{"class":102},[63,104696,104698],{"id":104697},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[38,104700,104701,104704,104705,104707],{},[89,104702,104703],{},"mujoco.mj_resetData(model, data)"," 会把 ",[89,104706,33382],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[83,104709,104711],{"className":30359,"code":104710,"language":30361,"meta":10,"style":10},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[89,104712,104713,104717,104727,104737],{"__ignoreMap":10},[92,104714,104715],{"class":94,"line":95},[92,104716,104501],{"class":102},[92,104718,104719,104722,104724],{"class":94,"line":11},[92,104720,104721],{"class":102},"data.qpos[:] ",[92,104723,148],{"class":98},[92,104725,104726],{"class":102}," random_qpos\n",[92,104728,104729,104732,104734],{"class":94,"line":1158},[92,104730,104731],{"class":102},"data.qvel[:] ",[92,104733,148],{"class":98},[92,104735,104736],{"class":151}," 0.0\n",[92,104738,104739],{"class":94,"line":1173},[92,104740,104518],{"class":102},[33,104742,101228],{"id":101227},[83,104744,104746],{"className":30359,"code":104745,"language":30361,"meta":10,"style":10},"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",[89,104747,104748,104754,104764,104768,104772,104780,104785,104789,104793,104797,104802,104806,104811,104816,104821,104825,104829,104833,104837,104841,104845,104864,104871,104883,104894,104910,104926,104930,104934,104946,104958,104966,104970,104981,104985,105001,105005,105009,105018,105022,105027,105036,105040,105053,105058,105067,105071,105075,105087],{"__ignoreMap":10},[92,104749,104750,104752],{"class":94,"line":95},[92,104751,30373],{"class":98},[92,104753,101276],{"class":102},[92,104755,104756,104758,104760,104762],{"class":94,"line":11},[92,104757,30373],{"class":98},[92,104759,31361],{"class":102},[92,104761,31364],{"class":98},[92,104763,31367],{"class":102},[92,104765,104766],{"class":94,"line":1158},[92,104767,2379],{"emptyLinePlaceholder":17},[92,104769,104770],{"class":94,"line":1173},[92,104771,2379],{"emptyLinePlaceholder":17},[92,104773,104774,104776,104778],{"class":94,"line":1179},[92,104775,101289],{"class":151},[92,104777,13544],{"class":98},[92,104779,101294],{"class":207},[92,104781,104782],{"class":94,"line":1193},[92,104783,104784],{"class":207},"\u003Cmujoco model=\"state_api\">\n",[92,104786,104787],{"class":94,"line":1199},[92,104788,101304],{"class":207},[92,104790,104791],{"class":94,"line":1290},[92,104792,2379],{"emptyLinePlaceholder":17},[92,104794,104795],{"class":94,"line":1296},[92,104796,101313],{"class":207},[92,104798,104799],{"class":94,"line":1308},[92,104800,104801],{"class":207},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[92,104803,104804],{"class":94,"line":1591},[92,104805,2379],{"emptyLinePlaceholder":17},[92,104807,104808],{"class":94,"line":1596},[92,104809,104810],{"class":207},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[92,104812,104813],{"class":94,"line":1602},[92,104814,104815],{"class":207},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[92,104817,104818],{"class":94,"line":1607},[92,104819,104820],{"class":207},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[92,104822,104823],{"class":94,"line":1621},[92,104824,101342],{"class":207},[92,104826,104827],{"class":94,"line":1626},[92,104828,101347],{"class":207},[92,104830,104831],{"class":94,"line":1632},[92,104832,101352],{"class":207},[92,104834,104835],{"class":94,"line":1653},[92,104836,95678],{"class":207},[92,104838,104839],{"class":94,"line":1658},[92,104840,2379],{"emptyLinePlaceholder":17},[92,104842,104843],{"class":94,"line":1672},[92,104844,2379],{"emptyLinePlaceholder":17},[92,104846,104847,104849,104852,104855,104857,104860,104862],{"class":94,"line":1677},[92,104848,31928],{"class":98},[92,104850,104851],{"class":1942}," print_state",[92,104853,104854],{"class":102},"(prefix: ",[92,104856,1278],{"class":151},[92,104858,104859],{"class":102},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[92,104861,95666],{"class":151},[92,104863,3718],{"class":102},[92,104865,104866,104868],{"class":94,"line":1706},[92,104867,31280],{"class":151},[92,104869,104870],{"class":102},"(prefix)\n",[92,104872,104873,104875,104877,104880],{"class":94,"line":1711},[92,104874,31280],{"class":151},[92,104876,103],{"class":102},[92,104878,104879],{"class":207},"\"  timestep:\"",[92,104881,104882],{"class":102},", model.opt.timestep)\n",[92,104884,104885,104887,104889,104892],{"class":94,"line":1728},[92,104886,31280],{"class":151},[92,104888,103],{"class":102},[92,104890,104891],{"class":207},"\"  time:\"",[92,104893,101453],{"class":102},[92,104895,104896,104898,104900,104903,104906,104908],{"class":94,"line":1733},[92,104897,31280],{"class":151},[92,104899,103],{"class":102},[92,104901,104902],{"class":207},"\"  qpos:\"",[92,104904,104905],{"class":102},", np.round(data.qpos.copy(), ",[92,104907,396],{"class":151},[92,104909,30478],{"class":102},[92,104911,104912,104914,104916,104919,104922,104924],{"class":94,"line":1738},[92,104913,31280],{"class":151},[92,104915,103],{"class":102},[92,104917,104918],{"class":207},"\"  qvel:\"",[92,104920,104921],{"class":102},", np.round(data.qvel.copy(), ",[92,104923,396],{"class":151},[92,104925,30478],{"class":102},[92,104927,104928],{"class":94,"line":1743},[92,104929,2379],{"emptyLinePlaceholder":17},[92,104931,104932],{"class":94,"line":1757},[92,104933,2379],{"emptyLinePlaceholder":17},[92,104935,104936,104938,104940,104942,104944],{"class":94,"line":1762},[92,104937,31928],{"class":98},[92,104939,1952],{"class":1942},[92,104941,101373],{"class":102},[92,104943,95666],{"class":151},[92,104945,3718],{"class":102},[92,104947,104948,104950,104952,104954,104956],{"class":94,"line":2556},[92,104949,101382],{"class":102},[92,104951,148],{"class":98},[92,104953,101387],{"class":102},[92,104955,101289],{"class":151},[92,104957,109],{"class":102},[92,104959,104960,104962,104964],{"class":94,"line":2570},[92,104961,101396],{"class":102},[92,104963,148],{"class":98},[92,104965,101401],{"class":102},[92,104967,104968],{"class":94,"line":2578},[92,104969,2379],{"emptyLinePlaceholder":17},[92,104971,104972,104975,104978],{"class":94,"line":2583},[92,104973,104974],{"class":102},"    print_state(",[92,104976,104977],{"class":207},"\"initial\"",[92,104979,104980],{"class":102},", model, data)\n",[92,104982,104983],{"class":94,"line":2589},[92,104984,2379],{"emptyLinePlaceholder":17},[92,104986,104987,104989,104991,104993,104995,104997,104999],{"class":94,"line":2595},[92,104988,3180],{"class":98},[92,104990,101476],{"class":102},[92,104992,26024],{"class":98},[92,104994,32424],{"class":151},[92,104996,103],{"class":102},[92,104998,759],{"class":151},[92,105000,30767],{"class":102},[92,105002,105003],{"class":94,"line":2600},[92,105004,101491],{"class":102},[92,105006,105007],{"class":94,"line":7928},[92,105008,2379],{"emptyLinePlaceholder":17},[92,105010,105011,105013,105016],{"class":94,"line":7952},[92,105012,104974],{"class":102},[92,105014,105015],{"class":207},"\"after 50 steps\"",[92,105017,104980],{"class":102},[92,105019,105020],{"class":94,"line":7957},[92,105021,2379],{"emptyLinePlaceholder":17},[92,105023,105024],{"class":94,"line":7963},[92,105025,105026],{"class":102},"    mujoco.mj_resetData(model, data)\n",[92,105028,105029,105031,105034],{"class":94,"line":7990},[92,105030,104974],{"class":102},[92,105032,105033],{"class":207},"\"after reset\"",[92,105035,104980],{"class":102},[92,105037,105038],{"class":94,"line":7995},[92,105039,2379],{"emptyLinePlaceholder":17},[92,105041,105042,105045,105047,105049,105051],{"class":94,"line":8001},[92,105043,105044],{"class":102},"    data.qpos[",[92,105046,180],{"class":151},[92,105048,4422],{"class":102},[92,105050,148],{"class":98},[92,105052,104683],{"class":151},[92,105054,105055],{"class":94,"line":8013},[92,105056,105057],{"class":102},"    mujoco.mj_forward(model, data)\n",[92,105059,105060,105062,105065],{"class":94,"line":8025},[92,105061,104974],{"class":102},[92,105063,105064],{"class":207},"\"after manual qpos edit\"",[92,105066,104980],{"class":102},[92,105068,105069],{"class":94,"line":8037},[92,105070,2379],{"emptyLinePlaceholder":17},[92,105072,105073],{"class":94,"line":9696},[92,105074,2379],{"emptyLinePlaceholder":17},[92,105076,105077,105079,105081,105083,105085],{"class":94,"line":9721},[92,105078,1510],{"class":98},[92,105080,31201],{"class":151},[92,105082,101534],{"class":98},[92,105084,101537],{"class":207},[92,105086,3718],{"class":102},[92,105088,105089],{"class":94,"line":9744},[92,105090,101544],{"class":102},[38,105092,103545],{},[83,105094,105096],{"className":23802,"code":105095,"language":23804,"meta":10,"style":10},"touch ch3_python_state.py\n",[89,105097,105098],{"__ignoreMap":10},[92,105099,105100,105102],{"class":94,"line":95},[92,105101,101258],{"class":1942},[92,105103,105104],{"class":207}," ch3_python_state.py\n",[38,105106,102276],{},[83,105108,105110],{"className":23802,"code":105109,"language":23804,"meta":10,"style":10},"python ch3_python_state.py\n",[89,105111,105112],{"__ignoreMap":10},[92,105113,105114,105116],{"class":94,"line":95},[92,105115,30361],{"class":1942},[92,105117,105104],{"class":207},[63,105119,101547],{"id":101547},[38,105121,105122],{},"打印状态的函数：",[83,105124,105126],{"className":30359,"code":105125,"language":30361,"meta":10,"style":10},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[89,105127,105128],{"__ignoreMap":10},[92,105129,105130,105132,105134,105136,105138,105140,105142],{"class":94,"line":95},[92,105131,31928],{"class":98},[92,105133,104851],{"class":1942},[92,105135,104854],{"class":102},[92,105137,1278],{"class":151},[92,105139,104859],{"class":102},[92,105141,95666],{"class":151},[92,105143,3718],{"class":102},[38,105145,105146,105147,105149],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[89,105148,33382],{}," 里发生了什么。",[38,105151,105152],{},"推进 50 步：",[83,105154,105156],{"className":30359,"code":105155,"language":30361,"meta":10,"style":10},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[89,105157,105158,105174],{"__ignoreMap":10},[92,105159,105160,105162,105164,105166,105168,105170,105172],{"class":94,"line":95},[92,105161,3004],{"class":98},[92,105163,101476],{"class":102},[92,105165,26024],{"class":98},[92,105167,32424],{"class":151},[92,105169,103],{"class":102},[92,105171,759],{"class":151},[92,105173,30767],{"class":102},[92,105175,105176],{"class":94,"line":11},[92,105177,101674],{"class":102},[38,105179,105180,105181,105184,105185,105187],{},"由于 ",[89,105182,105183],{},"timestep=0.01","，所以 50 步后时间约为 ",[89,105186,35310],{}," 秒。",[38,105189,105190],{},"重置：",[83,105192,105193],{"className":30359,"code":104501,"language":30361,"meta":10,"style":10},[89,105194,105195],{"__ignoreMap":10},[92,105196,105197],{"class":94,"line":95},[92,105198,104501],{"class":102},[38,105200,105201],{},"这会把时间、位置、速度恢复到初始状态。",[38,105203,105204],{},"手动改高度：",[83,105206,105208],{"className":30359,"code":105207,"language":30361,"meta":10,"style":10},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[89,105209,105210,105222],{"__ignoreMap":10},[92,105211,105212,105214,105216,105218,105220],{"class":94,"line":95},[92,105213,104674],{"class":102},[92,105215,180],{"class":151},[92,105217,4422],{"class":102},[92,105219,148],{"class":98},[92,105221,104683],{"class":151},[92,105223,105224],{"class":94,"line":11},[92,105225,104518],{"class":102},[38,105227,105228,105229,105232,105233,105236],{},"这个例子里 ",[89,105230,105231],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[89,105234,105235],{},"2.0"," 表示把小球放到更高的位置。",[63,105238,101683],{"id":101683},[83,105240,105241],{"className":30359,"code":105125,"language":30361,"meta":10,"style":10},[89,105242,105243],{"__ignoreMap":10},[92,105244,105245,105247,105249,105251,105253,105255,105257],{"class":94,"line":95},[92,105246,31928],{"class":98},[92,105248,104851],{"class":1942},[92,105250,104854],{"class":102},[92,105252,1278],{"class":151},[92,105254,104859],{"class":102},[92,105256,95666],{"class":151},[92,105258,3718],{"class":102},[38,105260,105261],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[46,105263,105264,105273,105278],{},[49,105265,105266,105269,105270,105272],{},[89,105267,105268],{},"prefix","：一段文字，比如 ",[89,105271,104977],{},"，用来说明现在打印的是哪个阶段。",[49,105274,105275,105277],{},[89,105276,102060],{},"：MuJoCo 模型。",[49,105279,105280,105282],{},[89,105281,33382],{},"：MuJoCo 当前状态。",[38,105284,105285,315,105288,105291],{},[89,105286,105287],{},"prefix: str",[89,105289,105290],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[83,105293,105295],{"className":30359,"code":105294,"language":30361,"meta":10,"style":10},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[89,105296,105297],{"__ignoreMap":10},[92,105298,105299,105301,105303,105305,105307,105309],{"class":94,"line":95},[92,105300,30396],{"class":151},[92,105302,103],{"class":102},[92,105304,104902],{"class":207},[92,105306,104905],{"class":102},[92,105308,396],{"class":151},[92,105310,30478],{"class":102},[38,105312,105313,105316],{},[89,105314,105315],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[83,105318,105320],{"className":30359,"code":105319,"language":30361,"meta":10,"style":10},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[89,105321,105322,105334],{"__ignoreMap":10},[92,105323,105324,105326,105328,105330,105332],{"class":94,"line":95},[92,105325,101609],{"class":102},[92,105327,148],{"class":98},[92,105329,101387],{"class":102},[92,105331,101289],{"class":151},[92,105333,109],{"class":102},[92,105335,105336,105338,105340],{"class":94,"line":11},[92,105337,101633],{"class":102},[92,105339,148],{"class":98},[92,105341,101401],{"class":102},[38,105343,105344],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[83,105346,105348],{"className":30359,"code":105347,"language":30361,"meta":10,"style":10},"print_state(\"initial\", model, data)\n",[89,105349,105350],{"__ignoreMap":10},[92,105351,105352,105355,105357],{"class":94,"line":95},[92,105353,105354],{"class":102},"print_state(",[92,105356,104977],{"class":207},[92,105358,104980],{"class":102},[38,105360,105361,105362,105365],{},"调用刚才定义的 ",[89,105363,105364],{},"print_state"," 函数，打印初始状态。",[83,105367,105368],{"className":30359,"code":105155,"language":30361,"meta":10,"style":10},[89,105369,105370,105386],{"__ignoreMap":10},[92,105371,105372,105374,105376,105378,105380,105382,105384],{"class":94,"line":95},[92,105373,3004],{"class":98},[92,105375,101476],{"class":102},[92,105377,26024],{"class":98},[92,105379,32424],{"class":151},[92,105381,103],{"class":102},[92,105383,759],{"class":151},[92,105385,30767],{"class":102},[92,105387,105388],{"class":94,"line":11},[92,105389,101674],{"class":102},[38,105391,105392],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[83,105394,105395],{"className":30359,"code":104501,"language":30361,"meta":10,"style":10},[89,105396,105397],{"__ignoreMap":10},[92,105398,105399],{"class":94,"line":95},[92,105400,104501],{"class":102},[38,105402,105403,105404,105406,105407,105409],{},"重置 ",[89,105405,33382],{},"。注意它不会重新创建 ",[89,105408,102060],{},"，因为模型结构没有变，只是状态回到初始值。",[83,105411,105412],{"className":30359,"code":104667,"language":30361,"meta":10,"style":10},[89,105413,105414],{"__ignoreMap":10},[92,105415,105416,105418,105420,105422,105424],{"class":94,"line":95},[92,105417,104674],{"class":102},[92,105419,180],{"class":151},[92,105421,4422],{"class":102},[92,105423,148],{"class":98},[92,105425,104683],{"class":151},[38,105427,105428,105429,315,105432,315,105435,105437],{},"这行是“手动改状态”。在 freejoint 中，",[89,105430,105431],{},"qpos[0]",[89,105433,105434],{},"qpos[1]",[89,105436,105231],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[83,105439,105440],{"className":30359,"code":104518,"language":30361,"meta":10,"style":10},[89,105441,105442],{"__ignoreMap":10},[92,105443,105444],{"class":94,"line":95},[92,105445,104518],{"class":102},[38,105447,105448,105449,105451,105452,105454],{},"手动改完 ",[89,105450,104005],{}," 后，调用 ",[89,105453,104225],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[33,105456,102291],{"id":102290},[38,105458,105459],{},"你会看到:",[46,105461,105462,105467,105472,105475],{},[49,105463,105464,105465],{},"初始时间为 ",[89,105466,294],{},[49,105468,105469,105470],{},"50 步后时间约为 ",[89,105471,35310],{},[49,105473,105474],{},"reset 后状态恢复",[49,105476,105477,105478,105481,105482],{},"手动修改 ",[89,105479,105480],{},"data.qpos[2]"," 后，小球高度变为 ",[89,105483,105235],{},[38,105485,105486,105488],{},[89,105487,105231],{}," 在这个例子中表示自由刚体的 z 坐标。",[38,105490,105491],{},"输出里可以重点看三件事：",[46,105493,105494,105502,105507],{},[49,105495,105496,105498,105499,105501],{},[89,105497,2366],{}," 是否随着 ",[89,105500,101190],{}," 增加。",[49,105503,105504,105506],{},[89,105505,104005],{}," 的 z 坐标是否因为下落而变化。",[49,105508,105509,105511,105512,28366],{},[89,105510,104327],{}," 后时间是否回到 ",[89,105513,294],{},[33,105515,102323],{"id":102322},[46,105517,105518,105524,105530,105536,105539,105548],{},[49,105519,105520,105521,28366],{},"修改 timestep 为 ",[89,105522,105523],{},"0.005",[49,105525,105526,105527,28366],{},"重新运行，检查 50 步后时间是否约为 ",[89,105528,105529],{},"0.25",[49,105531,105532,105533,28366],{},"修改重力为 ",[89,105534,105535],{},"0 0 -1.0",[49,105537,105538],{},"观察小球下降速度是否变慢。",[49,105540,102386,105541,102389,105544,105547],{},[89,105542,105543],{},"data.qpos[2] = 2.0",[89,105545,105546],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[49,105549,105550,105551,105554],{},"注释掉 ",[89,105552,105553],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[33,105556,102428],{"id":102427},[63,105558,105560,105561,105563],{"id":105559},"修改-dataqpos-后位置没有更新","修改 ",[89,105562,101045],{}," 后位置没有更新",[38,105565,102437],{},[83,105567,105568],{"className":30359,"code":104518,"language":30361,"meta":10,"style":10},[89,105569,105570],{"__ignoreMap":10},[92,105571,105572],{"class":94,"line":95},[92,105573,104518],{"class":102},[63,105575,105576],{"id":105576},"数组维度看不懂",[38,105578,105579],{},"打印模型维度:",[83,105581,105583],{"className":30359,"code":105582,"language":30361,"meta":10,"style":10},"print(model.nq, model.nv, model.nu)\n",[89,105584,105585],{"__ignoreMap":10},[92,105586,105587,105589],{"class":94,"line":95},[92,105588,30396],{"class":151},[92,105590,105591],{"class":102},"(model.nq, model.nv, model.nu)\n",[240,105593,105594,105602],{},[243,105595,105596],{},[246,105597,105598,105600],{},[249,105599,104549],{"align":23716},[249,105601,100675],{"align":23716},[287,105603,105604,105614,105624],{},[246,105605,105606,105611],{},[292,105607,105608],{"align":23716},[89,105609,105610],{},"nq",[292,105612,105613],{"align":23716},"位置变量数量",[246,105615,105616,105621],{},[292,105617,105618],{"align":23716},[89,105619,105620],{},"nv",[292,105622,105623],{"align":23716},"速度变量数量",[246,105625,105626,105630],{},[292,105627,105628],{"align":23716},[89,105629,102137],{},[292,105631,105632],{"align":23716},"控制输入数量",[63,105634,105636,105637,105639],{"id":105635},"误以为-qpos-一定等于关节数","误以为 ",[89,105638,104005],{}," 一定等于关节数",[38,105641,105642,105643,82510,105645,105647,105648,105650],{},"不是。例如 ",[89,105644,101595],{},[89,105646,104005],{}," 是 7 维，但 ",[89,105649,104335],{}," 是 6 维。",[63,105652,105654,105655,105657],{"id":105653},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[89,105656,104005],{}," 的第几位",[38,105659,105660],{},"初学时可以先打印：",[83,105662,105664],{"className":30359,"code":105663,"language":30361,"meta":10,"style":10},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[89,105665,105666,105676,105686,105698],{"__ignoreMap":10},[92,105667,105668,105670,105672,105674],{"class":94,"line":95},[92,105669,30396],{"class":151},[92,105671,103],{"class":102},[92,105673,101414],{"class":207},[92,105675,101417],{"class":102},[92,105677,105678,105680,105682,105684],{"class":94,"line":11},[92,105679,30396],{"class":151},[92,105681,103],{"class":102},[92,105683,101426],{"class":207},[92,105685,101429],{"class":102},[92,105687,105688,105690,105692,105695],{"class":94,"line":1158},[92,105689,30396],{"class":151},[92,105691,103],{"class":102},[92,105693,105694],{"class":207},"\"qpos:\"",[92,105696,105697],{"class":102},", data.qpos)\n",[92,105699,105700,105702,105704,105707],{"class":94,"line":1173},[92,105701,30396],{"class":151},[92,105703,103],{"class":102},[92,105705,105706],{"class":207},"\"qvel:\"",[92,105708,105709],{"class":102},", data.qvel)\n",[38,105711,105712],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[63,105714,105715],{"id":105715},"仿真结果每次都一样",[38,105717,105718,105719,105721],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[89,105720,104005],{},"、目标点或控制输入。",[33,105723,102582],{"id":102581},[38,105725,105726,105727,24599],{},"Python 控制 MuJoCo 的核心就是读写 ",[89,105728,33382],{},[46,105730,105731,105739,105744,105749],{},[49,105732,105733,105734,100993,105736,105738],{},"用 ",[89,105735,101045],{},[89,105737,101048],{}," 读取状态。",[49,105740,105733,105741,105743],{},[89,105742,101051],{}," 写入控制。",[49,105745,105733,105746,105748],{},[89,105747,101190],{}," 推进时间。",[49,105750,105751,105752,105754],{},"手动改状态后用 ",[89,105753,104225],{}," 刷新派生量。",[38,105756,105757],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5106,105759,105760],{},"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":10,"searchDepth":11,"depth":11,"links":105762},[105763,105764,105765,105772,105776,105777,105778,105788],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":105766},[105767,105769,105771],{"id":104530,"depth":1158,"text":105768},"qpos、qvel、ctrl 是什么",{"id":104608,"depth":1158,"text":105770},"mj_step 和 mj_forward 的区别",{"id":104697,"depth":1158,"text":104698},{"id":101227,"depth":11,"text":101228,"children":105773},[105774,105775],{"id":101547,"depth":1158,"text":101547},{"id":101683,"depth":1158,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":105779},[105780,105782,105783,105785,105787],{"id":105559,"depth":1158,"text":105781},"修改 data.qpos 后位置没有更新",{"id":105576,"depth":1158,"text":105576},{"id":105635,"depth":1158,"text":105784},"误以为 qpos 一定等于关节数",{"id":105653,"depth":1158,"text":105786},"不知道某个元素在 qpos 的第几位",{"id":105715,"depth":1158,"text":105715},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104293,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105795,"title":105796,"body":105797,"description":10,"extension":14,"meta":107487,"navigation":17,"path":107488,"seo":107489,"stem":107490,"__hash__":107491},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105798,"toc":107463},[105799,105802,105804,105807,105809,105834,105837,105856,105859,105861,105863,105887,105889,105903,105905,105946,105948,105972,105974,105977,106011,106013,106026,106029,106097,106106,106110,106113,106147,106153,106156,106160,106199,106202,106222,106226,106269,106271,106300,106303,106309,106312,106314,106708,106710,106722,106724,106735,106737,106740,106769,106777,106780,106815,106818,106820,106828,106831,106833,106844,106854,106874,106877,106913,106925,106973,106992,107034,107047,107075,107080,107101,107111,107129,107132,107166,107169,107189,107192,107211,107217,107219,107222,107228,107234,107244,107247,107253,107262,107264,107310,107312,107318,107324,107327,107330,107350,107353,107359,107365,107367,107390,107393,107396,107405,107408,107446,107448,107451,107457,107460],[29,105800,105796],{"id":105801},"_4关节actuator-与力控制",[33,105803,100622],{"id":100621},[38,105805,105806],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[38,105808,104306],{},[46,105810,105811,105817,105822,105826,105831],{},[49,105812,105813,105816],{},[89,105814,105815],{},"hinge"," 关节",[49,105818,105819],{},[89,105820,105821],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[49,105823,105824],{},[89,105825,101051],{},[49,105827,105828],{},[89,105829,105830],{},"ctrlrange",[49,105832,105833],{},"读取关节角和角速度",[38,105835,105836],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[83,105838,105840],{"className":30359,"code":105839,"language":30361,"meta":10,"style":10},"data.ctrl[0] = ...\n",[89,105841,105842],{"__ignoreMap":10},[92,105843,105844,105847,105849,105851,105853],{"class":94,"line":95},[92,105845,105846],{"class":102},"data.ctrl[",[92,105848,294],{"class":151},[92,105850,4422],{"class":102},[92,105852,148],{"class":98},[92,105854,105855],{"class":151}," ...\n",[38,105857,105858],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[33,105860,100745],{"id":100744},[38,105862,100748],{},[83,105864,105865],{"className":23802,"code":104363,"language":23804,"meta":10,"style":10},[89,105866,105867],{"__ignoreMap":10},[92,105868,105869,105871,105873,105875,105877,105879,105881,105883,105885],{"class":94,"line":95},[92,105870,24557],{"class":1942},[92,105872,26296],{"class":207},[92,105874,23814],{"class":207},[92,105876,26381],{"class":151},[92,105878,104378],{"class":207},[92,105880,100773],{"class":207},[92,105882,102476],{"class":207},[92,105884,100789],{"class":207},[92,105886,104387],{"class":207},[38,105888,102794],{},[83,105890,105891],{"className":23802,"code":100894,"language":23804,"meta":10,"style":10},[89,105892,105893],{"__ignoreMap":10},[92,105894,105895,105897,105899,105901],{"class":94,"line":95},[92,105896,23811],{"class":1942},[92,105898,23814],{"class":207},[92,105900,100905],{"class":207},[92,105902,100908],{"class":207},[38,105904,102811],{},[83,105906,105908],{"className":23802,"code":105907,"language":23804,"meta":10,"style":10},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[89,105909,105910,105927,105936],{"__ignoreMap":10},[92,105911,105912,105914,105916,105918,105921,105923,105925],{"class":94,"line":95},[92,105913,30311],{"class":1942},[92,105915,29157],{"class":207},[92,105917,25096],{"class":151},[92,105919,105920],{"class":207}," mujoco-control",[92,105922,100950],{"class":207},[92,105924,100953],{"class":151},[92,105926,100956],{"class":151},[92,105928,105929,105931,105933],{"class":94,"line":11},[92,105930,30311],{"class":1942},[92,105932,100963],{"class":207},[92,105934,105935],{"class":207}," mujoco-control\n",[92,105937,105938,105940,105942,105944],{"class":94,"line":1158},[92,105939,23811],{"class":1942},[92,105941,23814],{"class":207},[92,105943,100905],{"class":207},[92,105945,100908],{"class":207},[38,105947,100979],{},[46,105949,105950,105956,105963,105969],{},[49,105951,105952,105955],{},[89,105953,105954],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[49,105957,105958,105960,105961,28366],{},[89,105959,101051],{}," 长度等于 ",[89,105962,102133],{},[49,105964,82202,105965,105968],{},[89,105966,105967],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[49,105970,105971],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[33,105973,101020],{"id":101019},[38,105975,105976],{},"关节决定 body 如何运动:",[83,105978,105980],{"className":53047,"code":105979,"language":53049,"meta":10,"style":10},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[89,105981,105982],{"__ignoreMap":10},[92,105983,105984,105986,105988,105990,105992,105995,105997,105999,106001,106004,106006,106009],{"class":94,"line":95},[92,105985,1013],{"class":102},[92,105987,102931],{"class":51280},[92,105989,14900],{"class":1942},[92,105991,148],{"class":102},[92,105993,105994],{"class":207},"\"hinge\"",[92,105996,53804],{"class":1942},[92,105998,148],{"class":102},[92,106000,105994],{"class":207},[92,106002,106003],{"class":1942}," axis",[92,106005,148],{"class":102},[92,106007,106008],{"class":207},"\"0 1 0\"",[92,106010,101119],{"class":102},[38,106012,103027],{},[46,106014,106015,106020,106023],{},[49,106016,106017,106018],{},"名字是 ",[89,106019,105815],{},[49,106021,106022],{},"类型是旋转关节",[49,106024,106025],{},"绕 y 轴旋转",[38,106027,106028],{},"actuator 决定如何施加控制:",[83,106030,106032],{"className":53047,"code":106031,"language":53049,"meta":10,"style":10},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[89,106033,106034,106043,106089],{"__ignoreMap":10},[92,106035,106036,106038,106041],{"class":94,"line":95},[92,106037,1013],{"class":102},[92,106039,106040],{"class":51280},"actuator",[92,106042,51287],{"class":102},[92,106044,106045,106047,106050,106052,106054,106057,106060,106062,106064,106067,106069,106071,106074,106076,106079,106082,106084,106087],{"class":94,"line":11},[92,106046,52124],{"class":102},[92,106048,106049],{"class":51280},"motor",[92,106051,14900],{"class":1942},[92,106053,148],{"class":102},[92,106055,106056],{"class":207},"\"hinge_motor\"",[92,106058,106059],{"class":1942}," joint",[92,106061,148],{"class":102},[92,106063,105994],{"class":207},[92,106065,106066],{"class":1942}," gear",[92,106068,148],{"class":102},[92,106070,3657],{"class":207},[92,106072,106073],{"class":1942}," ctrlrange",[92,106075,148],{"class":102},[92,106077,106078],{"class":207},"\"-2 2\"",[92,106080,106081],{"class":1942}," ctrllimited",[92,106083,148],{"class":102},[92,106085,106086],{"class":207},"\"true\"",[92,106088,101119],{"class":102},[92,106090,106091,106093,106095],{"class":94,"line":1158},[92,106092,51765],{"class":102},[92,106094,106040],{"class":51280},[92,106096,51287],{"class":102},[38,106098,106099,106102,106103,28366],{},[89,106100,106101],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[89,106104,106105],{},"[-2, 2]",[63,106107,106109],{"id":106108},"joint-和-actuator-的关系","joint 和 actuator 的关系",[38,106111,106112],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[240,106114,106115,106125],{},[243,106116,106117],{},[246,106118,106119,106121,106123],{},[249,106120,25734],{"align":23716},[249,106122,102671],{"align":23716},[249,106124,100709],{"align":23716},[287,106126,106127,106137],{},[246,106128,106129,106131,106134],{},[292,106130,102931],{"align":23716},[292,106132,106133],{"align":23716},"定义能怎么动",[292,106135,106136],{"align":23716},"门轴允许门旋转",[246,106138,106139,106141,106144],{},[292,106140,106040],{"align":23716},[292,106142,106143],{"align":23716},"定义怎么施力或控制",[292,106145,106146],{"align":23716},"人推门、马达带动门",[38,106148,106149,106150,106152],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[89,106151,101051],{}," 主动控制它。",[38,106154,106155],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[63,106157,106159],{"id":106158},"hinge-joint","hinge joint",[83,106161,106163],{"className":53047,"code":106162,"language":53049,"meta":10,"style":10},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[89,106164,106165],{"__ignoreMap":10},[92,106166,106167,106169,106171,106173,106175,106177,106179,106181,106183,106185,106187,106189,106192,106194,106197],{"class":94,"line":95},[92,106168,1013],{"class":102},[92,106170,102931],{"class":51280},[92,106172,14900],{"class":1942},[92,106174,148],{"class":102},[92,106176,105994],{"class":207},[92,106178,53804],{"class":1942},[92,106180,148],{"class":102},[92,106182,105994],{"class":207},[92,106184,106003],{"class":1942},[92,106186,148],{"class":102},[92,106188,106008],{"class":207},[92,106190,106191],{"class":1942}," damping",[92,106193,148],{"class":102},[92,106195,106196],{"class":207},"\"0.1\"",[92,106198,101119],{"class":102},[38,106200,106201],{},"含义：",[46,106203,106204,106210,106216],{},[49,106205,106206,106209],{},[89,106207,106208],{},"type=\"hinge\"","：只能绕一个轴旋转。",[49,106211,106212,106215],{},[89,106213,106214],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[49,106217,106218,106221],{},[89,106219,106220],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[63,106223,106225],{"id":106224},"motor-actuator","motor actuator",[83,106227,106229],{"className":53047,"code":106228,"language":53049,"meta":10,"style":10},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[89,106230,106231],{"__ignoreMap":10},[92,106232,106233,106235,106237,106239,106241,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261,106263,106265,106267],{"class":94,"line":95},[92,106234,1013],{"class":102},[92,106236,106049],{"class":51280},[92,106238,14900],{"class":1942},[92,106240,148],{"class":102},[92,106242,106056],{"class":207},[92,106244,106059],{"class":1942},[92,106246,148],{"class":102},[92,106248,105994],{"class":207},[92,106250,106066],{"class":1942},[92,106252,148],{"class":102},[92,106254,3657],{"class":207},[92,106256,106073],{"class":1942},[92,106258,148],{"class":102},[92,106260,106078],{"class":207},[92,106262,106081],{"class":1942},[92,106264,148],{"class":102},[92,106266,106086],{"class":207},[92,106268,101119],{"class":102},[38,106270,106201],{},[46,106272,106273,106282,106288,106294],{},[49,106274,106275,106278,106279,106281],{},[89,106276,106277],{},"joint=\"hinge\"","：这个电机作用在名为 ",[89,106280,105815],{}," 的关节上。",[49,106283,106284,106287],{},[89,106285,106286],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[49,106289,106290,106293],{},[89,106291,106292],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[49,106295,106296,106299],{},[89,106297,106298],{},"ctrllimited=\"true\"","：启用控制范围限制。",[38,106301,106302],{},"简单理解：",[83,106304,106307],{"className":106305,"code":106306,"language":5167,"meta":10},[5165],"实际施加效果 ≈ data.ctrl[0] * gear\n",[89,106308,106306],{"__ignoreMap":10},[38,106310,106311],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[33,106313,101228],{"id":101227},[83,106315,106317],{"className":30359,"code":106316,"language":30361,"meta":10,"style":10},"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",[89,106318,106319,106326,106330,106336,106346,106350,106354,106362,106367,106372,106376,106380,106385,106390,106394,106399,106404,106409,106414,106418,106422,106426,106431,106436,106441,106445,106449,106453,106457,106469,106481,106489,106493,106503,106513,106523,106527,106540,106553,106557,106574,106588,106623,106627,106631,106642,106657,106672,106684,106688,106692,106704],{"__ignoreMap":10},[92,106320,106321,106323],{"class":94,"line":95},[92,106322,30373],{"class":98},[92,106324,106325],{"class":102}," math\n",[92,106327,106328],{"class":94,"line":11},[92,106329,2379],{"emptyLinePlaceholder":17},[92,106331,106332,106334],{"class":94,"line":1158},[92,106333,30373],{"class":98},[92,106335,101276],{"class":102},[92,106337,106338,106340,106342,106344],{"class":94,"line":1173},[92,106339,30373],{"class":98},[92,106341,31361],{"class":102},[92,106343,31364],{"class":98},[92,106345,31367],{"class":102},[92,106347,106348],{"class":94,"line":1179},[92,106349,2379],{"emptyLinePlaceholder":17},[92,106351,106352],{"class":94,"line":1193},[92,106353,2379],{"emptyLinePlaceholder":17},[92,106355,106356,106358,106360],{"class":94,"line":1199},[92,106357,101289],{"class":151},[92,106359,13544],{"class":98},[92,106361,101294],{"class":207},[92,106363,106364],{"class":94,"line":1290},[92,106365,106366],{"class":207},"\u003Cmujoco model=\"one_link_motor\">\n",[92,106368,106369],{"class":94,"line":1296},[92,106370,106371],{"class":207},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[92,106373,106374],{"class":94,"line":1308},[92,106375,2379],{"emptyLinePlaceholder":17},[92,106377,106378],{"class":94,"line":1591},[92,106379,101313],{"class":207},[92,106381,106382],{"class":94,"line":1596},[92,106383,106384],{"class":207},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[92,106386,106387],{"class":94,"line":1602},[92,106388,106389],{"class":207},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[92,106391,106392],{"class":94,"line":1607},[92,106393,2379],{"emptyLinePlaceholder":17},[92,106395,106396],{"class":94,"line":1621},[92,106397,106398],{"class":207},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[92,106400,106401],{"class":94,"line":1626},[92,106402,106403],{"class":207},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[92,106405,106406],{"class":94,"line":1632},[92,106407,106408],{"class":207},"        \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",[92,106410,106411],{"class":94,"line":1653},[92,106412,106413],{"class":207},"      \u003C\u002Fbody>\n",[92,106415,106416],{"class":94,"line":1658},[92,106417,101342],{"class":207},[92,106419,106420],{"class":94,"line":1672},[92,106421,101347],{"class":207},[92,106423,106424],{"class":94,"line":1677},[92,106425,2379],{"emptyLinePlaceholder":17},[92,106427,106428],{"class":94,"line":1706},[92,106429,106430],{"class":207},"  \u003Cactuator>\n",[92,106432,106433],{"class":94,"line":1711},[92,106434,106435],{"class":207},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[92,106437,106438],{"class":94,"line":1728},[92,106439,106440],{"class":207},"  \u003C\u002Factuator>\n",[92,106442,106443],{"class":94,"line":1733},[92,106444,101352],{"class":207},[92,106446,106447],{"class":94,"line":1738},[92,106448,95678],{"class":207},[92,106450,106451],{"class":94,"line":1743},[92,106452,2379],{"emptyLinePlaceholder":17},[92,106454,106455],{"class":94,"line":1757},[92,106456,2379],{"emptyLinePlaceholder":17},[92,106458,106459,106461,106463,106465,106467],{"class":94,"line":1762},[92,106460,31928],{"class":98},[92,106462,1952],{"class":1942},[92,106464,101373],{"class":102},[92,106466,95666],{"class":151},[92,106468,3718],{"class":102},[92,106470,106471,106473,106475,106477,106479],{"class":94,"line":2556},[92,106472,101382],{"class":102},[92,106474,148],{"class":98},[92,106476,101387],{"class":102},[92,106478,101289],{"class":151},[92,106480,109],{"class":102},[92,106482,106483,106485,106487],{"class":94,"line":2570},[92,106484,101396],{"class":102},[92,106486,148],{"class":98},[92,106488,101401],{"class":102},[92,106490,106491],{"class":94,"line":2578},[92,106492,2379],{"emptyLinePlaceholder":17},[92,106494,106495,106497,106499,106501],{"class":94,"line":2583},[92,106496,31280],{"class":151},[92,106498,103],{"class":102},[92,106500,101414],{"class":207},[92,106502,101417],{"class":102},[92,106504,106505,106507,106509,106511],{"class":94,"line":2589},[92,106506,31280],{"class":151},[92,106508,103],{"class":102},[92,106510,101426],{"class":207},[92,106512,101429],{"class":102},[92,106514,106515,106517,106519,106521],{"class":94,"line":2595},[92,106516,31280],{"class":151},[92,106518,103],{"class":102},[92,106520,101438],{"class":207},[92,106522,101441],{"class":102},[92,106524,106525],{"class":94,"line":2600},[92,106526,2379],{"emptyLinePlaceholder":17},[92,106528,106529,106531,106534,106536,106538],{"class":94,"line":7928},[92,106530,3080],{"class":98},[92,106532,106533],{"class":102}," model.nu ",[92,106535,20928],{"class":98},[92,106537,25099],{"class":151},[92,106539,3718],{"class":102},[92,106541,106542,106544,106546,106548,106551],{"class":94,"line":7952},[92,106543,103407],{"class":98},[92,106545,103410],{"class":151},[92,106547,103],{"class":102},[92,106549,106550],{"class":207},"\"expected exactly one actuator\"",[92,106552,109],{"class":102},[92,106554,106555],{"class":94,"line":7957},[92,106556,2379],{"emptyLinePlaceholder":17},[92,106558,106559,106561,106563,106565,106567,106569,106572],{"class":94,"line":7963},[92,106560,3180],{"class":98},[92,106562,31597],{"class":102},[92,106564,26024],{"class":98},[92,106566,32424],{"class":151},[92,106568,103],{"class":102},[92,106570,106571],{"class":151},"2000",[92,106573,30767],{"class":102},[92,106575,106576,106579,106581,106583,106585],{"class":94,"line":7990},[92,106577,106578],{"class":102},"        t ",[92,106580,148],{"class":98},[92,106582,31597],{"class":102},[92,106584,558],{"class":98},[92,106586,106587],{"class":102}," model.opt.timestep\n",[92,106589,106590,106593,106595,106597,106599,106602,106604,106607,106609,106611,106614,106616,106618,106620],{"class":94,"line":7995},[92,106591,106592],{"class":102},"        data.ctrl[",[92,106594,294],{"class":151},[92,106596,4422],{"class":102},[92,106598,148],{"class":98},[92,106600,106601],{"class":151}," 1.5",[92,106603,6498],{"class":98},[92,106605,106606],{"class":102}," math.sin(",[92,106608,105235],{"class":151},[92,106610,6498],{"class":98},[92,106612,106613],{"class":102}," math.pi ",[92,106615,558],{"class":98},[92,106617,61847],{"class":151},[92,106619,6498],{"class":98},[92,106621,106622],{"class":102}," t)\n",[92,106624,106625],{"class":94,"line":8001},[92,106626,101491],{"class":102},[92,106628,106629],{"class":94,"line":8013},[92,106630,2379],{"emptyLinePlaceholder":17},[92,106632,106633,106635,106637,106640],{"class":94,"line":8025},[92,106634,31280],{"class":151},[92,106636,103],{"class":102},[92,106638,106639],{"class":207},"\"time:\"",[92,106641,101453],{"class":102},[92,106643,106644,106646,106648,106651,106653,106655],{"class":94,"line":8037},[92,106645,31280],{"class":151},[92,106647,103],{"class":102},[92,106649,106650],{"class":207},"\"joint qpos:\"",[92,106652,104905],{"class":102},[92,106654,396],{"class":151},[92,106656,30478],{"class":102},[92,106658,106659,106661,106663,106666,106668,106670],{"class":94,"line":9696},[92,106660,31280],{"class":151},[92,106662,103],{"class":102},[92,106664,106665],{"class":207},"\"joint qvel:\"",[92,106667,104921],{"class":102},[92,106669,396],{"class":151},[92,106671,30478],{"class":102},[92,106673,106674,106676,106678,106681],{"class":94,"line":9721},[92,106675,31280],{"class":151},[92,106677,103],{"class":102},[92,106679,106680],{"class":207},"\"last ctrl:\"",[92,106682,106683],{"class":102},", data.ctrl.copy())\n",[92,106685,106686],{"class":94,"line":9744},[92,106687,2379],{"emptyLinePlaceholder":17},[92,106689,106690],{"class":94,"line":9768},[92,106691,2379],{"emptyLinePlaceholder":17},[92,106693,106694,106696,106698,106700,106702],{"class":94,"line":9773},[92,106695,1510],{"class":98},[92,106697,31201],{"class":151},[92,106699,101534],{"class":98},[92,106701,101537],{"class":207},[92,106703,3718],{"class":102},[92,106705,106706],{"class":94,"line":9778},[92,106707,101544],{"class":102},[38,106709,103545],{},[83,106711,106713],{"className":23802,"code":106712,"language":23804,"meta":10,"style":10},"touch ch4_joint_motor.py\n",[89,106714,106715],{"__ignoreMap":10},[92,106716,106717,106719],{"class":94,"line":95},[92,106718,101258],{"class":1942},[92,106720,106721],{"class":207}," ch4_joint_motor.py\n",[38,106723,102276],{},[83,106725,106727],{"className":23802,"code":106726,"language":23804,"meta":10,"style":10},"python ch4_joint_motor.py\n",[89,106728,106729],{"__ignoreMap":10},[92,106730,106731,106733],{"class":94,"line":95},[92,106732,30361],{"class":1942},[92,106734,106721],{"class":207},[63,106736,101547],{"id":101547},[38,106738,106739],{},"检查 actuator 数量：",[83,106741,106743],{"className":30359,"code":106742,"language":30361,"meta":10,"style":10},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[89,106744,106745,106757],{"__ignoreMap":10},[92,106746,106747,106749,106751,106753,106755],{"class":94,"line":95},[92,106748,1510],{"class":98},[92,106750,106533],{"class":102},[92,106752,20928],{"class":98},[92,106754,25099],{"class":151},[92,106756,3718],{"class":102},[92,106758,106759,106761,106763,106765,106767],{"class":94,"line":11},[92,106760,103870],{"class":98},[92,106762,103410],{"class":151},[92,106764,103],{"class":102},[92,106766,106550],{"class":207},[92,106768,109],{"class":102},[38,106770,106771,106773,106774,106776],{},[89,106772,102133],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[89,106775,101051],{}," 长度应该是 1。",[38,106778,106779],{},"产生正弦控制信号：",[83,106781,106783],{"className":30359,"code":106782,"language":30361,"meta":10,"style":10},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[89,106784,106785],{"__ignoreMap":10},[92,106786,106787,106789,106791,106793,106795,106797,106799,106801,106803,106805,106807,106809,106811,106813],{"class":94,"line":95},[92,106788,105846],{"class":102},[92,106790,294],{"class":151},[92,106792,4422],{"class":102},[92,106794,148],{"class":98},[92,106796,106601],{"class":151},[92,106798,6498],{"class":98},[92,106800,106606],{"class":102},[92,106802,105235],{"class":151},[92,106804,6498],{"class":98},[92,106806,106613],{"class":102},[92,106808,558],{"class":98},[92,106810,61847],{"class":151},[92,106812,6498],{"class":98},[92,106814,106622],{"class":102},[38,106816,106817],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[38,106819,101648],{},[83,106821,106822],{"className":30359,"code":104480,"language":30361,"meta":10,"style":10},[89,106823,106824],{"__ignoreMap":10},[92,106825,106826],{"class":94,"line":95},[92,106827,104480],{"class":102},[38,106829,106830],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[63,106832,101683],{"id":101683},[83,106834,106836],{"className":30359,"code":106835,"language":30361,"meta":10,"style":10},"import math\n",[89,106837,106838],{"__ignoreMap":10},[92,106839,106840,106842],{"class":94,"line":95},[92,106841,30373],{"class":98},[92,106843,106325],{"class":102},[38,106845,106846,106847,100993,106850,106853],{},"导入 Python 标准库里的数学模块。后面要用 ",[89,106848,106849],{},"math.sin",[89,106851,106852],{},"math.pi"," 生成周期变化的控制信号。",[83,106855,106856],{"className":30359,"code":103661,"language":30361,"meta":10,"style":10},[89,106857,106858,106864],{"__ignoreMap":10},[92,106859,106860,106862],{"class":94,"line":95},[92,106861,30373],{"class":98},[92,106863,101276],{"class":102},[92,106865,106866,106868,106870,106872],{"class":94,"line":11},[92,106867,30373],{"class":98},[92,106869,31361],{"class":102},[92,106871,31364],{"class":98},[92,106873,31367],{"class":102},[38,106875,106876],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[83,106878,106879],{"className":53047,"code":106162,"language":53049,"meta":10,"style":10},[89,106880,106881],{"__ignoreMap":10},[92,106882,106883,106885,106887,106889,106891,106893,106895,106897,106899,106901,106903,106905,106907,106909,106911],{"class":94,"line":95},[92,106884,1013],{"class":102},[92,106886,102931],{"class":51280},[92,106888,14900],{"class":1942},[92,106890,148],{"class":102},[92,106892,105994],{"class":207},[92,106894,53804],{"class":1942},[92,106896,148],{"class":102},[92,106898,105994],{"class":207},[92,106900,106003],{"class":1942},[92,106902,148],{"class":102},[92,106904,106008],{"class":207},[92,106906,106191],{"class":1942},[92,106908,148],{"class":102},[92,106910,106196],{"class":207},[92,106912,101119],{"class":102},[38,106914,106915,106916,106918,106919,106921,106922,106924],{},"这行定义关节。",[89,106917,105815],{}," 表示旋转关节。",[89,106920,106214],{}," 表示绕 y 轴旋转。",[89,106923,106220],{}," 表示有一点阻尼，运动不会完全无损耗。",[83,106926,106928],{"className":53047,"code":106927,"language":53049,"meta":10,"style":10},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[89,106929,106930],{"__ignoreMap":10},[92,106931,106932,106934,106936,106938,106940,106943,106945,106947,106950,106953,106955,106958,106960,106962,106964,106966,106968,106971],{"class":94,"line":95},[92,106933,1013],{"class":102},[92,106935,101095],{"class":51280},[92,106937,14900],{"class":1942},[92,106939,148],{"class":102},[92,106941,106942],{"class":207},"\"link_geom\"",[92,106944,53804],{"class":1942},[92,106946,148],{"class":102},[92,106948,106949],{"class":207},"\"capsule\"",[92,106951,106952],{"class":1942}," fromto",[92,106954,148],{"class":102},[92,106956,106957],{"class":207},"\"0 0 0 0 0 0.5\"",[92,106959,101111],{"class":1942},[92,106961,148],{"class":102},[92,106963,103753],{"class":207},[92,106965,101976],{"class":1942},[92,106967,148],{"class":102},[92,106969,106970],{"class":207},"\"0.5\"",[92,106972,101119],{"class":102},[38,106974,106975,106976,106978,106979,106981,106982,106985,106986,28366,106989,106991],{},"这行定义摆杆的形状。",[89,106977,103140],{}," 是胶囊体，适合表示杆子。",[89,106980,103151],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[89,106983,106984],{},"(0,0,0)"," 延伸到 ",[89,106987,106988],{},"(0,0,0.5)",[89,106990,103145],{}," 是半径。",[83,106993,106994],{"className":53047,"code":106228,"language":53049,"meta":10,"style":10},[89,106995,106996],{"__ignoreMap":10},[92,106997,106998,107000,107002,107004,107006,107008,107010,107012,107014,107016,107018,107020,107022,107024,107026,107028,107030,107032],{"class":94,"line":95},[92,106999,1013],{"class":102},[92,107001,106049],{"class":51280},[92,107003,14900],{"class":1942},[92,107005,148],{"class":102},[92,107007,106056],{"class":207},[92,107009,106059],{"class":1942},[92,107011,148],{"class":102},[92,107013,105994],{"class":207},[92,107015,106066],{"class":1942},[92,107017,148],{"class":102},[92,107019,3657],{"class":207},[92,107021,106073],{"class":1942},[92,107023,148],{"class":102},[92,107025,106078],{"class":207},[92,107027,106081],{"class":1942},[92,107029,148],{"class":102},[92,107031,106086],{"class":207},[92,107033,101119],{"class":102},[38,107035,107036,107037,107039,107040,107043,107044,107046],{},"这行定义电机。它作用在 ",[89,107038,105815],{}," 关节上。",[89,107041,107042],{},"gear"," 可以理解成放大倍数。",[89,107045,105830],{}," 限制控制输入范围。",[83,107048,107049],{"className":30359,"code":106742,"language":30361,"meta":10,"style":10},[89,107050,107051,107063],{"__ignoreMap":10},[92,107052,107053,107055,107057,107059,107061],{"class":94,"line":95},[92,107054,1510],{"class":98},[92,107056,106533],{"class":102},[92,107058,20928],{"class":98},[92,107060,25099],{"class":151},[92,107062,3718],{"class":102},[92,107064,107065,107067,107069,107071,107073],{"class":94,"line":11},[92,107066,103870],{"class":98},[92,107068,103410],{"class":151},[92,107070,103],{"class":102},[92,107072,106550],{"class":207},[92,107074,109],{"class":102},[38,107076,107077,107079],{},[89,107078,102133],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[83,107081,107083],{"className":30359,"code":107082,"language":30361,"meta":10,"style":10},"for step in range(2000):\n",[89,107084,107085],{"__ignoreMap":10},[92,107086,107087,107089,107091,107093,107095,107097,107099],{"class":94,"line":95},[92,107088,3004],{"class":98},[92,107090,31597],{"class":102},[92,107092,26024],{"class":98},[92,107094,32424],{"class":151},[92,107096,103],{"class":102},[92,107098,106571],{"class":151},[92,107100,30767],{"class":102},[38,107102,107103,107104,107106,107107,107110],{},"循环 2000 步。这里没有用 ",[89,107105,1095],{},"，而是用 ",[89,107108,107109],{},"step","，因为后面要用当前步数计算时间。",[83,107112,107114],{"className":30359,"code":107113,"language":30361,"meta":10,"style":10},"t = step * model.opt.timestep\n",[89,107115,107116],{"__ignoreMap":10},[92,107117,107118,107121,107123,107125,107127],{"class":94,"line":95},[92,107119,107120],{"class":102},"t ",[92,107122,148],{"class":98},[92,107124,31597],{"class":102},[92,107126,558],{"class":98},[92,107128,106587],{"class":102},[38,107130,107131],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[83,107133,107134],{"className":30359,"code":106782,"language":30361,"meta":10,"style":10},[89,107135,107136],{"__ignoreMap":10},[92,107137,107138,107140,107142,107144,107146,107148,107150,107152,107154,107156,107158,107160,107162,107164],{"class":94,"line":95},[92,107139,105846],{"class":102},[92,107141,294],{"class":151},[92,107143,4422],{"class":102},[92,107145,148],{"class":98},[92,107147,106601],{"class":151},[92,107149,6498],{"class":98},[92,107151,106606],{"class":102},[92,107153,105235],{"class":151},[92,107155,6498],{"class":98},[92,107157,106613],{"class":102},[92,107159,558],{"class":98},[92,107161,61847],{"class":151},[92,107163,6498],{"class":98},[92,107165,106622],{"class":102},[38,107167,107168],{},"这行给电机输入一个正弦波。拆开看：",[46,107170,107171,107177,107183],{},[49,107172,107173,107176],{},[89,107174,107175],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[49,107178,107179,107182],{},[89,107180,107181],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[49,107184,107185,107188],{},[89,107186,107187],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[38,107190,107191],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[83,107193,107195],{"className":30359,"code":107194,"language":30361,"meta":10,"style":10},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[89,107196,107197],{"__ignoreMap":10},[92,107198,107199,107201,107203,107205,107207,107209],{"class":94,"line":95},[92,107200,30396],{"class":151},[92,107202,103],{"class":102},[92,107204,106650],{"class":207},[92,107206,104905],{"class":102},[92,107208,396],{"class":151},[92,107210,30478],{"class":102},[38,107212,107213,107214,107216],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[89,107215,101045],{}," 只有一个数。",[33,107218,102291],{"id":102290},[38,107220,107221],{},"输出类似:",[83,107223,107226],{"className":107224,"code":107225,"language":5167,"meta":10},[5165],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[89,107227,107225],{"__ignoreMap":10},[38,107229,107230,107231,107233],{},"这里 ",[89,107232,106101],{}," 是电机输入。",[38,107235,107236,107239,107240,107243],{},[89,107237,107238],{},"joint qpos"," 是关节角度，单位通常是弧度。",[89,107241,107242],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[38,107245,107246],{},"角度单位提示：",[83,107248,107251],{"className":107249,"code":107250,"language":5167,"meta":10},[5165],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[89,107252,107250],{"__ignoreMap":10},[38,107254,107255,107256,107258,107259,107261],{},"如果你看到 ",[89,107257,104005],{}," 是 ",[89,107260,35310],{},"，大约就是 28.6 度。",[33,107263,102323],{"id":102322},[46,107265,107266,107273,107276,107283,107286,107294,107302],{},[49,107267,102386,107268,102389,107270,28366],{},[89,107269,106286],{},[89,107271,107272],{},"gear=\"5\"",[49,107274,107275],{},"重新运行，观察关节运动是否更剧烈。",[49,107277,102386,107278,102389,107280,28366],{},[89,107279,105830],{},[89,107281,107282],{},"-0.2 0.2",[49,107284,107285],{},"重新运行，观察控制能力是否变弱。",[49,107287,107288,107289,107291,107292,28366],{},"去掉 actuator，确认 ",[89,107290,102133],{}," 变成 ",[89,107293,294],{},[49,107295,102386,107296,102389,107298,107301],{},[89,107297,106220],{},[89,107299,107300],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[49,107303,102386,107304,102389,107306,107309],{},[89,107305,106214],{},[89,107307,107308],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[33,107311,102428],{"id":102427},[63,107313,107315],{"id":107314},"indexerror-index-0-is-out-of-bounds",[89,107316,107317],{},"IndexError: index 0 is out of bounds",[38,107319,107320,107321,107323],{},"原因是 ",[89,107322,105967],{},"，没有 actuator。",[63,107325,107326],{"id":107326},"关节几乎不动",[38,107328,107329],{},"可能原因:",[46,107331,107332,107337,107341,107347],{},[49,107333,107334,107336],{},[89,107335,107042],{}," 太小",[49,107338,107339,107336],{},[89,107340,105830],{},[49,107342,107343,107346],{},[89,107344,107345],{},"damping"," 太大",[49,107348,107349],{},"重力方向导致运动不明显",[63,107351,107352],{"id":107352},"模型编译失败",[38,107354,107355,107356,107358],{},"检查 actuator 引用的 ",[89,107357,106277],{}," 是否存在，joint 名称是否拼写一致。",[63,107360,107362,107364],{"id":107361},"datactrl0-写了但没有效果",[89,107363,106101],{}," 写了但没有效果",[38,107366,102550],{},[46,107368,107369,107374,107377,107382,107387],{},[49,107370,107371,107373],{},[89,107372,102133],{}," 是否大于 0。",[49,107375,107376],{},"motor 是否引用了正确 joint。",[49,107378,107379,107381],{},[89,107380,107042],{}," 是否太小。",[49,107383,107384,107386],{},[89,107385,105830],{}," 是否把输入限制得太小。",[49,107388,107389],{},"body 是否真的有可动 joint。",[63,107391,107392],{"id":107392},"控制输入超过范围会怎样",[38,107394,107395],{},"如果设置了：",[83,107397,107399],{"className":53047,"code":107398,"language":53049,"meta":10,"style":10},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[89,107400,107401],{"__ignoreMap":10},[92,107402,107403],{"class":94,"line":95},[92,107404,107398],{"class":102},[38,107406,107407],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[83,107409,107411],{"className":30359,"code":107410,"language":30361,"meta":10,"style":10},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[89,107412,107413,107433],{"__ignoreMap":10},[92,107414,107415,107418,107420,107423,107425,107427,107429,107431],{"class":94,"line":95},[92,107416,107417],{"class":102},"action ",[92,107419,148],{"class":98},[92,107421,107422],{"class":102}," np.clip(action, ",[92,107424,635],{"class":98},[92,107426,105235],{"class":151},[92,107428,12415],{"class":102},[92,107430,105235],{"class":151},[92,107432,109],{"class":102},[92,107434,107435,107437,107439,107441,107443],{"class":94,"line":11},[92,107436,105846],{"class":102},[92,107438,294],{"class":151},[92,107440,4422],{"class":102},[92,107442,148],{"class":98},[92,107444,107445],{"class":102}," action\n",[33,107447,102582],{"id":102581},[38,107449,107450],{},"这一章建立了控制任务的基本形式：",[83,107452,107455],{"className":107453,"code":107454,"language":5167,"meta":10},[5165],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[89,107456,107454],{"__ignoreMap":10},[38,107458,107459],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5106,107461,107462],{},"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":10,"searchDepth":11,"depth":11,"links":107464},[107465,107466,107467,107472,107476,107477,107478,107486],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":107468},[107469,107470,107471],{"id":106108,"depth":1158,"text":106109},{"id":106158,"depth":1158,"text":106159},{"id":106224,"depth":1158,"text":106225},{"id":101227,"depth":11,"text":101228,"children":107473},[107474,107475],{"id":101547,"depth":1158,"text":101547},{"id":101683,"depth":1158,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":107479},[107480,107481,107482,107483,107485],{"id":107314,"depth":1158,"text":107317},{"id":107326,"depth":1158,"text":107326},{"id":107352,"depth":1158,"text":107352},{"id":107361,"depth":1158,"text":107484},"data.ctrl[0] 写了但没有效果",{"id":107392,"depth":1158,"text":107392},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105796,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107493,"title":107494,"body":107495,"description":10,"extension":14,"meta":109404,"navigation":17,"path":109405,"seo":109406,"stem":109407,"__hash__":109408},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107496,"toc":109380},[107497,107500,107502,107505,107513,107516,107533,107536,107561,107564,107610,107612,107614,107669,107671,107690,107692,107735,107738,107755,107758,107774,107784,107791,107793,107796,107799,107833,107836,107884,107888,107891,107905,107914,107918,107921,107946,107949,107953,107966,107969,107975,107978,107993,107995,107998,108258,108260,108272,108275,108587,108589,108601,108603,108606,108621,108626,108629,108651,108654,108657,108691,108694,108698,108709,108712,108729,108732,108746,108753,108773,108780,108794,108797,108809,108824,108844,108847,108869,108872,108876,108891,108902,108917,108920,108950,108966,108995,109003,109027,109030,109048,109058,109070,109077,109086,109092,109101,109104,109106,109115,109118,109133,109135,109138,109149,109152,109163,109166,109184,109186,109203,109206,109234,109236,109240,109243,109273,109279,109282,109286,109294,109297,109299,109320,109323,109326,109342,109345,109361,109363,109366,109377],[29,107498,107494],{"id":107499},"_5viewer-可视化与-renderer-离屏渲染",[33,107501,100622],{"id":100621},[38,107503,107504],{},"本章掌握两类可视化方式:",[46,107506,107507,107510],{},[49,107508,107509],{},"交互式 viewer: 适合人工观察仿真",[49,107511,107512],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[38,107514,107515],{},"使用官方接口:",[83,107517,107519],{"className":30359,"code":107518,"language":30361,"meta":10,"style":10},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[89,107520,107521,107528],{"__ignoreMap":10},[92,107522,107523,107525],{"class":94,"line":95},[92,107524,30373],{"class":98},[92,107526,107527],{"class":102}," mujoco.viewer\n",[92,107529,107530],{"class":94,"line":11},[92,107531,107532],{"class":102},"mujoco.viewer.launch_passive(model, data)\n",[38,107534,107535],{},"以及:",[83,107537,107539],{"className":30359,"code":107538,"language":30361,"meta":10,"style":10},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[89,107540,107541,107551],{"__ignoreMap":10},[92,107542,107543,107546,107548],{"class":94,"line":95},[92,107544,107545],{"class":102},"renderer ",[92,107547,148],{"class":98},[92,107549,107550],{"class":102}," mujoco.Renderer(model)\n",[92,107552,107553,107556,107558],{"class":94,"line":11},[92,107554,107555],{"class":102},"image ",[92,107557,148],{"class":98},[92,107559,107560],{"class":102}," renderer.render()\n",[38,107562,107563],{},"新手建议先理解二者区别：",[240,107565,107566,107582],{},[243,107567,107568],{},[246,107569,107570,107573,107576,107579],{},[249,107571,107572],{"align":23716},"工具",[249,107574,107575],{"align":23716},"用途",[249,107577,107578],{"align":23716},"是否打开窗口",[249,107580,107581],{"align":23716},"常见场景",[287,107583,107584,107597],{},[246,107585,107586,107589,107592,107594],{},[292,107587,107588],{"align":23716},"Viewer",[292,107590,107591],{"align":23716},"人眼实时观察仿真",[292,107593,104640],{"align":23716},[292,107595,107596],{"align":23716},"调试模型、看控制效果",[246,107598,107599,107602,107605,107607],{},[292,107600,107601],{"align":23716},"Renderer",[292,107603,107604],{"align":23716},"生成图像数组",[292,107606,104653],{"align":23716},[292,107608,107609],{"align":23716},"保存图片、训练视觉策略、服务器批量采集",[33,107611,100745],{"id":100744},[38,107613,100748],{},[83,107615,107617],{"className":23802,"code":107616,"language":23804,"meta":10,"style":10},"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",[89,107618,107619,107631,107641,107649,107657],{"__ignoreMap":10},[92,107620,107621,107623,107625,107627,107629],{"class":94,"line":95},[92,107622,24557],{"class":1942},[92,107624,26296],{"class":207},[92,107626,23814],{"class":207},[92,107628,26381],{"class":151},[92,107630,24659],{"class":151},[92,107632,107633,107635,107637,107639],{"class":94,"line":11},[92,107634,100783],{"class":207},[92,107636,100786],{"class":207},[92,107638,100789],{"class":207},[92,107640,24659],{"class":151},[92,107642,107643,107645,107647],{"class":94,"line":1158},[92,107644,100796],{"class":207},[92,107646,100799],{"class":207},[92,107648,24659],{"class":151},[92,107650,107651,107653,107655],{"class":94,"line":1173},[92,107652,100806],{"class":207},[92,107654,100809],{"class":207},[92,107656,24659],{"class":151},[92,107658,107659,107661,107663,107665,107667],{"class":94,"line":1179},[92,107660,100816],{"class":207},[92,107662,100819],{"class":207},[92,107664,100822],{"class":207},[92,107666,100825],{"class":207},[92,107668,102491],{"class":207},[38,107670,102794],{},[83,107672,107674],{"className":23802,"code":107673,"language":23804,"meta":10,"style":10},"pip install \"mujoco>=2.3\" numpy pillow\n",[89,107675,107676],{"__ignoreMap":10},[92,107677,107678,107680,107682,107684,107687],{"class":94,"line":95},[92,107679,23811],{"class":1942},[92,107681,23814],{"class":207},[92,107683,100905],{"class":207},[92,107685,107686],{"class":207}," numpy",[92,107688,107689],{"class":207}," pillow\n",[38,107691,102811],{},[83,107693,107695],{"className":23802,"code":107694,"language":23804,"meta":10,"style":10},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[89,107696,107697,107714,107723],{"__ignoreMap":10},[92,107698,107699,107701,107703,107705,107708,107710,107712],{"class":94,"line":95},[92,107700,30311],{"class":1942},[92,107702,29157],{"class":207},[92,107704,25096],{"class":151},[92,107706,107707],{"class":207}," mujoco-render",[92,107709,100950],{"class":207},[92,107711,100953],{"class":151},[92,107713,100956],{"class":151},[92,107715,107716,107718,107720],{"class":94,"line":11},[92,107717,30311],{"class":1942},[92,107719,100963],{"class":207},[92,107721,107722],{"class":207}," mujoco-render\n",[92,107724,107725,107727,107729,107731,107733],{"class":94,"line":1158},[92,107726,23811],{"class":1942},[92,107728,23814],{"class":207},[92,107730,100905],{"class":207},[92,107732,107686],{"class":207},[92,107734,107689],{"class":207},[38,107736,107737],{},"离屏渲染后端:",[83,107739,107741],{"className":23802,"code":107740,"language":23804,"meta":10,"style":10},"export MUJOCO_GL=egl\n",[89,107742,107743],{"__ignoreMap":10},[92,107744,107745,107747,107750,107752],{"class":94,"line":95},[92,107746,25023],{"class":98},[92,107748,107749],{"class":102}," MUJOCO_GL",[92,107751,148],{"class":98},[92,107753,107754],{"class":102},"egl\n",[38,107756,107757],{},"或:",[83,107759,107761],{"className":23802,"code":107760,"language":23804,"meta":10,"style":10},"export MUJOCO_GL=osmesa\n",[89,107762,107763],{"__ignoreMap":10},[92,107764,107765,107767,107769,107771],{"class":94,"line":95},[92,107766,25023],{"class":98},[92,107768,107749],{"class":102},[92,107770,148],{"class":98},[92,107772,107773],{"class":102},"osmesa\n",[38,107775,107776,107777,107780,107781,28366],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[89,107778,107779],{},"egl"," 失败，再尝试 ",[89,107782,107783],{},"osmesa",[38,107785,107786,107787,107790],{},"如果你在本机桌面环境运行，通常先不要设置 ",[89,107788,107789],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[33,107792,101020],{"id":101019},[38,107794,107795],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[38,107797,107798],{},"典型 viewer 流程:",[83,107800,107802],{"className":30359,"code":107801,"language":30361,"meta":10,"style":10},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[89,107803,107804,107817,107824,107828],{"__ignoreMap":10},[92,107805,107806,107809,107812,107814],{"class":94,"line":95},[92,107807,107808],{"class":98},"with",[92,107810,107811],{"class":102}," mujoco.viewer.launch_passive(model, data) ",[92,107813,31364],{"class":98},[92,107815,107816],{"class":102}," viewer:\n",[92,107818,107819,107821],{"class":94,"line":11},[92,107820,2230],{"class":98},[92,107822,107823],{"class":102}," viewer.is_running():\n",[92,107825,107826],{"class":94,"line":1158},[92,107827,101491],{"class":102},[92,107829,107830],{"class":94,"line":1173},[92,107831,107832],{"class":102},"        viewer.sync()\n",[38,107834,107835],{},"典型 renderer 流程:",[83,107837,107839],{"className":30359,"code":107838,"language":30361,"meta":10,"style":10},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[89,107840,107841,107867,107871,107876],{"__ignoreMap":10},[92,107842,107843,107845,107847,107850,107852,107854,107856,107858,107860,107862,107865],{"class":94,"line":95},[92,107844,107545],{"class":102},[92,107846,148],{"class":98},[92,107848,107849],{"class":102}," mujoco.Renderer(model, ",[92,107851,24962],{"class":5196},[92,107853,148],{"class":98},[92,107855,42323],{"class":151},[92,107857,12415],{"class":102},[92,107859,24958],{"class":5196},[92,107861,148],{"class":98},[92,107863,107864],{"class":151},"640",[92,107866,109],{"class":102},[92,107868,107869],{"class":94,"line":11},[92,107870,104480],{"class":102},[92,107872,107873],{"class":94,"line":1158},[92,107874,107875],{"class":102},"renderer.update_scene(data)\n",[92,107877,107878,107880,107882],{"class":94,"line":1173},[92,107879,107555],{"class":102},[92,107881,148],{"class":98},[92,107883,107560],{"class":102},[63,107885,107887],{"id":107886},"viewer-的同步逻辑","viewer 的同步逻辑",[38,107889,107890],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[83,107892,107894],{"className":30359,"code":107893,"language":30361,"meta":10,"style":10},"mujoco.mj_step(model, data)\nviewer.sync()\n",[89,107895,107896,107900],{"__ignoreMap":10},[92,107897,107898],{"class":94,"line":95},[92,107899,104480],{"class":102},[92,107901,107902],{"class":94,"line":11},[92,107903,107904],{"class":102},"viewer.sync()\n",[38,107906,107907,107909,107910,107913],{},[89,107908,101190],{}," 负责算物理，",[89,107911,107912],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[63,107915,107917],{"id":107916},"为什么要-sleep","为什么要 sleep",[38,107919,107920],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[83,107922,107924],{"className":30359,"code":107923,"language":30361,"meta":10,"style":10},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[89,107925,107926],{"__ignoreMap":10},[92,107927,107928,107931,107933,107936,107938,107941,107943],{"class":94,"line":95},[92,107929,107930],{"class":102},"sleep_time ",[92,107932,148],{"class":98},[92,107934,107935],{"class":102}," model.opt.timestep ",[92,107937,635],{"class":98},[92,107939,107940],{"class":102}," (time.time() ",[92,107942,635],{"class":98},[92,107944,107945],{"class":102}," step_start)\n",[38,107947,107948],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[63,107950,107952],{"id":107951},"renderer-输出是什么","renderer 输出是什么",[83,107954,107956],{"className":30359,"code":107955,"language":30361,"meta":10,"style":10},"image = renderer.render()\n",[89,107957,107958],{"__ignoreMap":10},[92,107959,107960,107962,107964],{"class":94,"line":95},[92,107961,107555],{"class":102},[92,107963,148],{"class":98},[92,107965,107560],{"class":102},[38,107967,107968],{},"得到的是 NumPy 数组，形状通常是：",[83,107970,107973],{"className":107971,"code":107972,"language":5167,"meta":10},[5165],"(height, width, 3)\n",[89,107974,107972],{"__ignoreMap":10},[38,107976,107977],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[83,107979,107981],{"className":30359,"code":107980,"language":30361,"meta":10,"style":10},"Image.fromarray(image).save(\"render_output.png\")\n",[89,107982,107983],{"__ignoreMap":10},[92,107984,107985,107988,107991],{"class":94,"line":95},[92,107986,107987],{"class":102},"Image.fromarray(image).save(",[92,107989,107990],{"class":207},"\"render_output.png\"",[92,107992,109],{"class":102},[33,107994,101228],{"id":101227},[38,107996,107997],{},"交互式 Viewer:",[83,107999,108001],{"className":30359,"code":108000,"language":30361,"meta":10,"style":10},"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",[89,108002,108003,108009,108013,108019,108025,108029,108033,108041,108046,108050,108054,108058,108063,108068,108072,108076,108080,108085,108089,108093,108097,108101,108105,108109,108121,108133,108141,108145,108155,108175,108185,108190,108195,108199,108216,108229,108234,108238,108242,108254],{"__ignoreMap":10},[92,108004,108005,108007],{"class":94,"line":95},[92,108006,30373],{"class":98},[92,108008,31810],{"class":102},[92,108010,108011],{"class":94,"line":11},[92,108012,2379],{"emptyLinePlaceholder":17},[92,108014,108015,108017],{"class":94,"line":1158},[92,108016,30373],{"class":98},[92,108018,101276],{"class":102},[92,108020,108021,108023],{"class":94,"line":1173},[92,108022,30373],{"class":98},[92,108024,107527],{"class":102},[92,108026,108027],{"class":94,"line":1179},[92,108028,2379],{"emptyLinePlaceholder":17},[92,108030,108031],{"class":94,"line":1193},[92,108032,2379],{"emptyLinePlaceholder":17},[92,108034,108035,108037,108039],{"class":94,"line":1199},[92,108036,101289],{"class":151},[92,108038,13544],{"class":98},[92,108040,101294],{"class":207},[92,108042,108043],{"class":94,"line":1290},[92,108044,108045],{"class":207},"\u003Cmujoco model=\"viewer_demo\">\n",[92,108047,108048],{"class":94,"line":1296},[92,108049,101304],{"class":207},[92,108051,108052],{"class":94,"line":1308},[92,108053,2379],{"emptyLinePlaceholder":17},[92,108055,108056],{"class":94,"line":1591},[92,108057,101313],{"class":207},[92,108059,108060],{"class":94,"line":1596},[92,108061,108062],{"class":207},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[92,108064,108065],{"class":94,"line":1602},[92,108066,108067],{"class":207},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[92,108069,108070],{"class":94,"line":1607},[92,108071,2379],{"emptyLinePlaceholder":17},[92,108073,108074],{"class":94,"line":1621},[92,108075,101327],{"class":207},[92,108077,108078],{"class":94,"line":1626},[92,108079,101332],{"class":207},[92,108081,108082],{"class":94,"line":1632},[92,108083,108084],{"class":207},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[92,108086,108087],{"class":94,"line":1653},[92,108088,101342],{"class":207},[92,108090,108091],{"class":94,"line":1658},[92,108092,101347],{"class":207},[92,108094,108095],{"class":94,"line":1672},[92,108096,101352],{"class":207},[92,108098,108099],{"class":94,"line":1677},[92,108100,95678],{"class":207},[92,108102,108103],{"class":94,"line":1706},[92,108104,2379],{"emptyLinePlaceholder":17},[92,108106,108107],{"class":94,"line":1711},[92,108108,2379],{"emptyLinePlaceholder":17},[92,108110,108111,108113,108115,108117,108119],{"class":94,"line":1728},[92,108112,31928],{"class":98},[92,108114,1952],{"class":1942},[92,108116,101373],{"class":102},[92,108118,95666],{"class":151},[92,108120,3718],{"class":102},[92,108122,108123,108125,108127,108129,108131],{"class":94,"line":1733},[92,108124,101382],{"class":102},[92,108126,148],{"class":98},[92,108128,101387],{"class":102},[92,108130,101289],{"class":151},[92,108132,109],{"class":102},[92,108134,108135,108137,108139],{"class":94,"line":1738},[92,108136,101396],{"class":102},[92,108138,148],{"class":98},[92,108140,101401],{"class":102},[92,108142,108143],{"class":94,"line":1743},[92,108144,2379],{"emptyLinePlaceholder":17},[92,108146,108147,108149,108151,108153],{"class":94,"line":1757},[92,108148,34159],{"class":98},[92,108150,107811],{"class":102},[92,108152,31364],{"class":98},[92,108154,107816],{"class":102},[92,108156,108157,108160,108163,108165,108168,108170,108173],{"class":94,"line":1762},[92,108158,108159],{"class":98},"        while",[92,108161,108162],{"class":102}," viewer.is_running() ",[92,108164,30443],{"class":98},[92,108166,108167],{"class":102}," data.time ",[92,108169,1013],{"class":98},[92,108171,108172],{"class":151}," 5.0",[92,108174,3718],{"class":102},[92,108176,108177,108180,108182],{"class":94,"line":2556},[92,108178,108179],{"class":102},"            step_start ",[92,108181,148],{"class":98},[92,108183,108184],{"class":102}," time.time()\n",[92,108186,108187],{"class":94,"line":2570},[92,108188,108189],{"class":102},"            mujoco.mj_step(model, data)\n",[92,108191,108192],{"class":94,"line":2578},[92,108193,108194],{"class":102},"            viewer.sync()\n",[92,108196,108197],{"class":94,"line":2583},[92,108198,2379],{"emptyLinePlaceholder":17},[92,108200,108201,108204,108206,108208,108210,108212,108214],{"class":94,"line":2589},[92,108202,108203],{"class":102},"            sleep_time ",[92,108205,148],{"class":98},[92,108207,107935],{"class":102},[92,108209,635],{"class":98},[92,108211,107940],{"class":102},[92,108213,635],{"class":98},[92,108215,107945],{"class":102},[92,108217,108218,108220,108223,108225,108227],{"class":94,"line":2595},[92,108219,4621],{"class":98},[92,108221,108222],{"class":102}," sleep_time ",[92,108224,1063],{"class":98},[92,108226,4072],{"class":151},[92,108228,3718],{"class":102},[92,108230,108231],{"class":94,"line":2600},[92,108232,108233],{"class":102},"                time.sleep(sleep_time)\n",[92,108235,108236],{"class":94,"line":7928},[92,108237,2379],{"emptyLinePlaceholder":17},[92,108239,108240],{"class":94,"line":7952},[92,108241,2379],{"emptyLinePlaceholder":17},[92,108243,108244,108246,108248,108250,108252],{"class":94,"line":7957},[92,108245,1510],{"class":98},[92,108247,31201],{"class":151},[92,108249,101534],{"class":98},[92,108251,101537],{"class":207},[92,108253,3718],{"class":102},[92,108255,108256],{"class":94,"line":7963},[92,108257,101544],{"class":102},[38,108259,103545],{},[83,108261,108263],{"className":23802,"code":108262,"language":23804,"meta":10,"style":10},"touch ch5_viewer.py\n",[89,108264,108265],{"__ignoreMap":10},[92,108266,108267,108269],{"class":94,"line":95},[92,108268,101258],{"class":1942},[92,108270,108271],{"class":207}," ch5_viewer.py\n",[38,108273,108274],{},"离屏 Renderer 保存图片:",[83,108276,108278],{"className":30359,"code":108277,"language":30361,"meta":10,"style":10},"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",[89,108279,108280,108292,108296,108302,108312,108316,108320,108328,108333,108337,108341,108345,108349,108354,108358,108362,108366,108370,108374,108378,108382,108386,108390,108394,108398,108410,108422,108430,108455,108459,108475,108479,108483,108498,108507,108511,108525,108530,108535,108539,108551,108563,108567,108571,108583],{"__ignoreMap":10},[92,108281,108282,108284,108287,108289],{"class":94,"line":95},[92,108283,30718],{"class":98},[92,108285,108286],{"class":102}," pathlib ",[92,108288,30373],{"class":98},[92,108290,108291],{"class":102}," Path\n",[92,108293,108294],{"class":94,"line":11},[92,108295,2379],{"emptyLinePlaceholder":17},[92,108297,108298,108300],{"class":94,"line":1158},[92,108299,30373],{"class":98},[92,108301,101276],{"class":102},[92,108303,108304,108306,108308,108310],{"class":94,"line":1173},[92,108305,30718],{"class":98},[92,108307,47244],{"class":151},[92,108309,47247],{"class":98},[92,108311,47250],{"class":102},[92,108313,108314],{"class":94,"line":1179},[92,108315,2379],{"emptyLinePlaceholder":17},[92,108317,108318],{"class":94,"line":1193},[92,108319,2379],{"emptyLinePlaceholder":17},[92,108321,108322,108324,108326],{"class":94,"line":1199},[92,108323,101289],{"class":151},[92,108325,13544],{"class":98},[92,108327,101294],{"class":207},[92,108329,108330],{"class":94,"line":1290},[92,108331,108332],{"class":207},"\u003Cmujoco model=\"renderer_demo\">\n",[92,108334,108335],{"class":94,"line":1296},[92,108336,101304],{"class":207},[92,108338,108339],{"class":94,"line":1308},[92,108340,2379],{"emptyLinePlaceholder":17},[92,108342,108343],{"class":94,"line":1591},[92,108344,101313],{"class":207},[92,108346,108347],{"class":94,"line":1596},[92,108348,108062],{"class":207},[92,108350,108351],{"class":94,"line":1602},[92,108352,108353],{"class":207},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[92,108355,108356],{"class":94,"line":1607},[92,108357,108067],{"class":207},[92,108359,108360],{"class":94,"line":1621},[92,108361,2379],{"emptyLinePlaceholder":17},[92,108363,108364],{"class":94,"line":1626},[92,108365,101327],{"class":207},[92,108367,108368],{"class":94,"line":1632},[92,108369,101332],{"class":207},[92,108371,108372],{"class":94,"line":1653},[92,108373,108084],{"class":207},[92,108375,108376],{"class":94,"line":1658},[92,108377,101342],{"class":207},[92,108379,108380],{"class":94,"line":1672},[92,108381,101347],{"class":207},[92,108383,108384],{"class":94,"line":1677},[92,108385,101352],{"class":207},[92,108387,108388],{"class":94,"line":1706},[92,108389,95678],{"class":207},[92,108391,108392],{"class":94,"line":1711},[92,108393,2379],{"emptyLinePlaceholder":17},[92,108395,108396],{"class":94,"line":1728},[92,108397,2379],{"emptyLinePlaceholder":17},[92,108399,108400,108402,108404,108406,108408],{"class":94,"line":1733},[92,108401,31928],{"class":98},[92,108403,1952],{"class":1942},[92,108405,101373],{"class":102},[92,108407,95666],{"class":151},[92,108409,3718],{"class":102},[92,108411,108412,108414,108416,108418,108420],{"class":94,"line":1738},[92,108413,101382],{"class":102},[92,108415,148],{"class":98},[92,108417,101387],{"class":102},[92,108419,101289],{"class":151},[92,108421,109],{"class":102},[92,108423,108424,108426,108428],{"class":94,"line":1743},[92,108425,101396],{"class":102},[92,108427,148],{"class":98},[92,108429,101401],{"class":102},[92,108431,108432,108435,108437,108439,108441,108443,108445,108447,108449,108451,108453],{"class":94,"line":1757},[92,108433,108434],{"class":102},"    renderer ",[92,108436,148],{"class":98},[92,108438,107849],{"class":102},[92,108440,24962],{"class":5196},[92,108442,148],{"class":98},[92,108444,42323],{"class":151},[92,108446,12415],{"class":102},[92,108448,24958],{"class":5196},[92,108450,148],{"class":98},[92,108452,107864],{"class":151},[92,108454,109],{"class":102},[92,108456,108457],{"class":94,"line":1762},[92,108458,2379],{"emptyLinePlaceholder":17},[92,108460,108461,108463,108465,108467,108469,108471,108473],{"class":94,"line":2556},[92,108462,3180],{"class":98},[92,108464,101476],{"class":102},[92,108466,26024],{"class":98},[92,108468,32424],{"class":151},[92,108470,103],{"class":102},[92,108472,414],{"class":151},[92,108474,30767],{"class":102},[92,108476,108477],{"class":94,"line":2570},[92,108478,101491],{"class":102},[92,108480,108481],{"class":94,"line":2578},[92,108482,2379],{"emptyLinePlaceholder":17},[92,108484,108485,108488,108491,108493,108496],{"class":94,"line":2583},[92,108486,108487],{"class":102},"    renderer.update_scene(data, ",[92,108489,108490],{"class":5196},"camera",[92,108492,148],{"class":98},[92,108494,108495],{"class":207},"\"fixed_camera\"",[92,108497,109],{"class":102},[92,108499,108500,108503,108505],{"class":94,"line":2589},[92,108501,108502],{"class":102},"    image ",[92,108504,148],{"class":98},[92,108506,107560],{"class":102},[92,108508,108509],{"class":94,"line":2595},[92,108510,2379],{"emptyLinePlaceholder":17},[92,108512,108513,108516,108518,108521,108523],{"class":94,"line":2600},[92,108514,108515],{"class":102},"    output_path ",[92,108517,148],{"class":98},[92,108519,108520],{"class":102}," Path(",[92,108522,107990],{"class":207},[92,108524,109],{"class":102},[92,108526,108527],{"class":94,"line":7928},[92,108528,108529],{"class":102},"    Image.fromarray(image).save(output_path)\n",[92,108531,108532],{"class":94,"line":7952},[92,108533,108534],{"class":102},"    renderer.close()\n",[92,108536,108537],{"class":94,"line":7957},[92,108538,2379],{"emptyLinePlaceholder":17},[92,108540,108541,108543,108545,108548],{"class":94,"line":7963},[92,108542,31280],{"class":151},[92,108544,103],{"class":102},[92,108546,108547],{"class":207},"\"saved:\"",[92,108549,108550],{"class":102},", output_path.resolve())\n",[92,108552,108553,108555,108557,108560],{"class":94,"line":7990},[92,108554,31280],{"class":151},[92,108556,103],{"class":102},[92,108558,108559],{"class":207},"\"image shape:\"",[92,108561,108562],{"class":102},", image.shape)\n",[92,108564,108565],{"class":94,"line":7995},[92,108566,2379],{"emptyLinePlaceholder":17},[92,108568,108569],{"class":94,"line":8001},[92,108570,2379],{"emptyLinePlaceholder":17},[92,108572,108573,108575,108577,108579,108581],{"class":94,"line":8013},[92,108574,1510],{"class":98},[92,108576,31201],{"class":151},[92,108578,101534],{"class":98},[92,108580,101537],{"class":207},[92,108582,3718],{"class":102},[92,108584,108585],{"class":94,"line":8025},[92,108586,101544],{"class":102},[38,108588,103545],{},[83,108590,108592],{"className":23802,"code":108591,"language":23804,"meta":10,"style":10},"touch ch5_renderer.py\n",[89,108593,108594],{"__ignoreMap":10},[92,108595,108596,108598],{"class":94,"line":95},[92,108597,101258],{"class":1942},[92,108599,108600],{"class":207}," ch5_renderer.py\n",[63,108602,101547],{"id":101547},[38,108604,108605],{},"viewer 上下文：",[83,108607,108609],{"className":30359,"code":108608,"language":30361,"meta":10,"style":10},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[89,108610,108611],{"__ignoreMap":10},[92,108612,108613,108615,108617,108619],{"class":94,"line":95},[92,108614,107808],{"class":98},[92,108616,107811],{"class":102},[92,108618,31364],{"class":98},[92,108620,107816],{"class":102},[38,108622,108623,108625],{},[89,108624,107808],{}," 语句会创建窗口，并在退出时自动清理资源。",[38,108627,108628],{},"窗口循环：",[83,108630,108632],{"className":30359,"code":108631,"language":30361,"meta":10,"style":10},"while viewer.is_running() and data.time \u003C 5.0:\n",[89,108633,108634],{"__ignoreMap":10},[92,108635,108636,108639,108641,108643,108645,108647,108649],{"class":94,"line":95},[92,108637,108638],{"class":98},"while",[92,108640,108162],{"class":102},[92,108642,30443],{"class":98},[92,108644,108167],{"class":102},[92,108646,1013],{"class":98},[92,108648,108172],{"class":151},[92,108650,3718],{"class":102},[38,108652,108653],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[38,108655,108656],{},"固定相机：",[83,108658,108660],{"className":53047,"code":108659,"language":53049,"meta":10,"style":10},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[89,108661,108662],{"__ignoreMap":10},[92,108663,108664,108666,108668,108670,108672,108674,108676,108678,108681,108684,108686,108689],{"class":94,"line":95},[92,108665,1013],{"class":102},[92,108667,108490],{"class":51280},[92,108669,14900],{"class":1942},[92,108671,148],{"class":102},[92,108673,108495],{"class":207},[92,108675,101081],{"class":1942},[92,108677,148],{"class":102},[92,108679,108680],{"class":207},"\"1.5 -2.0 1.2\"",[92,108682,108683],{"class":1942}," xyaxes",[92,108685,148],{"class":102},[92,108687,108688],{"class":207},"\"1 0.75 0 0 0 1\"",[92,108690,101119],{"class":102},[38,108692,108693],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[63,108695,108697],{"id":108696},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[83,108699,108701],{"className":30359,"code":108700,"language":30361,"meta":10,"style":10},"import time\n",[89,108702,108703],{"__ignoreMap":10},[92,108704,108705,108707],{"class":94,"line":95},[92,108706,30373],{"class":98},[92,108708,31810],{"class":102},[38,108710,108711],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[83,108713,108715],{"className":30359,"code":108714,"language":30361,"meta":10,"style":10},"import mujoco\nimport mujoco.viewer\n",[89,108716,108717,108723],{"__ignoreMap":10},[92,108718,108719,108721],{"class":94,"line":95},[92,108720,30373],{"class":98},[92,108722,101276],{"class":102},[92,108724,108725,108727],{"class":94,"line":11},[92,108726,30373],{"class":98},[92,108728,107527],{"class":102},[38,108730,108731],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[83,108733,108734],{"className":30359,"code":108608,"language":30361,"meta":10,"style":10},[89,108735,108736],{"__ignoreMap":10},[92,108737,108738,108740,108742,108744],{"class":94,"line":95},[92,108739,107808],{"class":98},[92,108741,107811],{"class":102},[92,108743,31364],{"class":98},[92,108745,107816],{"class":102},[38,108747,108748,108749,108752],{},"打开一个 viewer 窗口。",[89,108750,108751],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[83,108754,108755],{"className":30359,"code":108631,"language":30361,"meta":10,"style":10},[89,108756,108757],{"__ignoreMap":10},[92,108758,108759,108761,108763,108765,108767,108769,108771],{"class":94,"line":95},[92,108760,108638],{"class":98},[92,108762,108162],{"class":102},[92,108764,30443],{"class":98},[92,108766,108167],{"class":102},[92,108768,1013],{"class":98},[92,108770,108172],{"class":151},[92,108772,3718],{"class":102},[38,108774,108775,108776,108779],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[89,108777,108778],{},"viewer.is_running()"," 会变成 false，循环结束。",[83,108781,108783],{"className":30359,"code":108782,"language":30361,"meta":10,"style":10},"step_start = time.time()\n",[89,108784,108785],{"__ignoreMap":10},[92,108786,108787,108790,108792],{"class":94,"line":95},[92,108788,108789],{"class":102},"step_start ",[92,108791,148],{"class":98},[92,108793,108184],{"class":102},[38,108795,108796],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[83,108798,108799],{"className":30359,"code":107893,"language":30361,"meta":10,"style":10},[89,108800,108801,108805],{"__ignoreMap":10},[92,108802,108803],{"class":94,"line":95},[92,108804,104480],{"class":102},[92,108806,108807],{"class":94,"line":11},[92,108808,107904],{"class":102},[38,108810,108811,108813,108814,108816,108817,108819,108820,108823],{},[89,108812,101190],{}," 推进物理仿真。",[89,108815,107912],{}," 把最新的 ",[89,108818,33382],{}," 同步到窗口里显示。没有 ",[89,108821,108822],{},"sync()","，窗口可能看不到最新状态。",[83,108825,108826],{"className":30359,"code":107923,"language":30361,"meta":10,"style":10},[89,108827,108828],{"__ignoreMap":10},[92,108829,108830,108832,108834,108836,108838,108840,108842],{"class":94,"line":95},[92,108831,107930],{"class":102},[92,108833,148],{"class":98},[92,108835,107935],{"class":102},[92,108837,635],{"class":98},[92,108839,107940],{"class":102},[92,108841,635],{"class":98},[92,108843,107945],{"class":102},[38,108845,108846],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[83,108848,108850],{"className":30359,"code":108849,"language":30361,"meta":10,"style":10},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[89,108851,108852,108864],{"__ignoreMap":10},[92,108853,108854,108856,108858,108860,108862],{"class":94,"line":95},[92,108855,1510],{"class":98},[92,108857,108222],{"class":102},[92,108859,1063],{"class":98},[92,108861,4072],{"class":151},[92,108863,3718],{"class":102},[92,108865,108866],{"class":94,"line":11},[92,108867,108868],{"class":102},"    time.sleep(sleep_time)\n",[38,108870,108871],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[63,108873,108875],{"id":108874},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[83,108877,108879],{"className":30359,"code":108878,"language":30361,"meta":10,"style":10},"from pathlib import Path\n",[89,108880,108881],{"__ignoreMap":10},[92,108882,108883,108885,108887,108889],{"class":94,"line":95},[92,108884,30718],{"class":98},[92,108886,108286],{"class":102},[92,108888,30373],{"class":98},[92,108890,108291],{"class":102},[38,108892,108893,108894,108897,108898,108901],{},"导入 ",[89,108895,108896],{},"Path","，用来处理文件路径。相比直接写字符串，",[89,108899,108900],{},"Path(\"render_output.png\")"," 更清晰。",[83,108903,108905],{"className":30359,"code":108904,"language":30361,"meta":10,"style":10},"from PIL import Image\n",[89,108906,108907],{"__ignoreMap":10},[92,108908,108909,108911,108913,108915],{"class":94,"line":95},[92,108910,30718],{"class":98},[92,108912,47244],{"class":151},[92,108914,47247],{"class":98},[92,108916,47250],{"class":102},[38,108918,108919],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[83,108921,108922],{"className":53047,"code":108659,"language":53049,"meta":10,"style":10},[89,108923,108924],{"__ignoreMap":10},[92,108925,108926,108928,108930,108932,108934,108936,108938,108940,108942,108944,108946,108948],{"class":94,"line":95},[92,108927,1013],{"class":102},[92,108929,108490],{"class":51280},[92,108931,14900],{"class":1942},[92,108933,148],{"class":102},[92,108935,108495],{"class":207},[92,108937,101081],{"class":1942},[92,108939,148],{"class":102},[92,108941,108680],{"class":207},[92,108943,108683],{"class":1942},[92,108945,148],{"class":102},[92,108947,108688],{"class":207},[92,108949,101119],{"class":102},[38,108951,108952,108953,108955,108956,108958,108959,108962,108963,108965],{},"定义一个相机。",[89,108954,79790],{}," 是相机名字。",[89,108957,104121],{}," 是相机在世界里的位置。",[89,108960,108961],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[89,108964,104121],{}," 来调视角。",[83,108967,108969],{"className":30359,"code":108968,"language":30361,"meta":10,"style":10},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[89,108970,108971],{"__ignoreMap":10},[92,108972,108973,108975,108977,108979,108981,108983,108985,108987,108989,108991,108993],{"class":94,"line":95},[92,108974,107545],{"class":102},[92,108976,148],{"class":98},[92,108978,107849],{"class":102},[92,108980,24962],{"class":5196},[92,108982,148],{"class":98},[92,108984,42323],{"class":151},[92,108986,12415],{"class":102},[92,108988,24958],{"class":5196},[92,108990,148],{"class":98},[92,108992,107864],{"class":151},[92,108994,109],{"class":102},[38,108996,108997,108998,100993,109000,109002],{},"创建离屏渲染器。",[89,108999,24962],{},[89,109001,24958],{}," 决定输出图片大小。",[83,109004,109005],{"className":30359,"code":101651,"language":30361,"meta":10,"style":10},[89,109006,109007,109023],{"__ignoreMap":10},[92,109008,109009,109011,109013,109015,109017,109019,109021],{"class":94,"line":95},[92,109010,3004],{"class":98},[92,109012,101476],{"class":102},[92,109014,26024],{"class":98},[92,109016,32424],{"class":151},[92,109018,103],{"class":102},[92,109020,414],{"class":151},[92,109022,30767],{"class":102},[92,109024,109025],{"class":94,"line":11},[92,109026,101674],{"class":102},[38,109028,109029],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[83,109031,109033],{"className":30359,"code":109032,"language":30361,"meta":10,"style":10},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[89,109034,109035],{"__ignoreMap":10},[92,109036,109037,109040,109042,109044,109046],{"class":94,"line":95},[92,109038,109039],{"class":102},"renderer.update_scene(data, ",[92,109041,108490],{"class":5196},[92,109043,148],{"class":98},[92,109045,108495],{"class":207},[92,109047,109],{"class":102},[38,109049,109050,109051,109053,109054,109057],{},"告诉 renderer：用当前 ",[89,109052,33382],{}," 的状态更新画面，并使用名为 ",[89,109055,109056],{},"fixed_camera"," 的相机视角。",[83,109059,109060],{"className":30359,"code":107955,"language":30361,"meta":10,"style":10},[89,109061,109062],{"__ignoreMap":10},[92,109063,109064,109066,109068],{"class":94,"line":95},[92,109065,107555],{"class":102},[92,109067,148],{"class":98},[92,109069,107560],{"class":102},[38,109071,109072,109073,109076],{},"真正渲染出图像。",[89,109074,109075],{},"image"," 是一个 NumPy 数组，不是文件。",[83,109078,109080],{"className":30359,"code":109079,"language":30361,"meta":10,"style":10},"Image.fromarray(image).save(output_path)\n",[89,109081,109082],{"__ignoreMap":10},[92,109083,109084],{"class":94,"line":95},[92,109085,109079],{"class":102},[38,109087,109088,109089,28366],{},"把数组转换成图片，并保存到 ",[89,109090,109091],{},"render_output.png",[83,109093,109095],{"className":30359,"code":109094,"language":30361,"meta":10,"style":10},"renderer.close()\n",[89,109096,109097],{"__ignoreMap":10},[92,109098,109099],{"class":94,"line":95},[92,109100,109094],{"class":102},[38,109102,109103],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[33,109105,102291],{"id":102290},[38,109107,109108,109109,109111,109112,28366],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[89,109110,109091],{},"，并输出图像数组形状，例如 ",[89,109113,109114],{},"(480, 640, 3)",[38,109116,109117],{},"如果图片里看不到方块，先检查：",[46,109119,109120,109123,109126],{},[49,109121,109122],{},"方块是否掉到相机视野外。",[49,109124,109125],{},"camera 位置是否合理。",[49,109127,109128,109129,109132],{},"是否在 ",[89,109130,109131],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[33,109134,102323],{"id":102322},[38,109136,109137],{},"运行 viewer:",[83,109139,109141],{"className":23802,"code":109140,"language":23804,"meta":10,"style":10},"python ch5_viewer.py\n",[89,109142,109143],{"__ignoreMap":10},[92,109144,109145,109147],{"class":94,"line":95},[92,109146,30361],{"class":1942},[92,109148,108271],{"class":207},[38,109150,109151],{},"运行 renderer:",[83,109153,109155],{"className":23802,"code":109154,"language":23804,"meta":10,"style":10},"python ch5_renderer.py\n",[89,109156,109157],{"__ignoreMap":10},[92,109158,109159,109161],{"class":94,"line":95},[92,109160,30361],{"class":1942},[92,109162,108600],{"class":207},[38,109164,109165],{},"如果在服务器上运行:",[83,109167,109169],{"className":23802,"code":109168,"language":23804,"meta":10,"style":10},"MUJOCO_GL=egl python ch5_renderer.py\n",[89,109170,109171],{"__ignoreMap":10},[92,109172,109173,109175,109177,109179,109182],{"class":94,"line":95},[92,109174,107789],{"class":102},[92,109176,148],{"class":98},[92,109178,107779],{"class":207},[92,109180,109181],{"class":1942}," python",[92,109183,108600],{"class":207},[38,109185,107757],{},[83,109187,109189],{"className":23802,"code":109188,"language":23804,"meta":10,"style":10},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[89,109190,109191],{"__ignoreMap":10},[92,109192,109193,109195,109197,109199,109201],{"class":94,"line":95},[92,109194,107789],{"class":102},[92,109196,148],{"class":98},[92,109198,107783],{"class":207},[92,109200,109181],{"class":1942},[92,109202,108600],{"class":207},[38,109204,109205],{},"再做几个练习：",[46,109207,109208,109215,109218,109224],{},[49,109209,109210,109211,109214],{},"把 renderer 分辨率改成 ",[89,109212,109213],{},"height=240, width=320","，观察输出 shape。",[49,109216,109217],{},"把方块颜色改成蓝色，重新保存图片。",[49,109219,109220,109221,109223],{},"把相机 ",[89,109222,104121],{}," 改远一点，观察画面中物体是否变小。",[49,109225,109226,109227,102389,109230,109233],{},"把 viewer 示例中的 ",[89,109228,109229],{},"data.time \u003C 5.0",[89,109231,109232],{},"data.time \u003C 20.0","，观察更长时间。",[33,109235,102428],{"id":102427},[63,109237,109239],{"id":109238},"viewer-窗口打不开","viewer 窗口打不开",[38,109241,109242],{},"安装:",[83,109244,109246],{"className":23802,"code":109245,"language":23804,"meta":10,"style":10},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[89,109247,109248],{"__ignoreMap":10},[92,109249,109250,109252,109254,109256,109258,109260,109262,109264,109266,109268,109270],{"class":94,"line":95},[92,109251,24557],{"class":1942},[92,109253,26296],{"class":207},[92,109255,23814],{"class":207},[92,109257,26381],{"class":151},[92,109259,102481],{"class":207},[92,109261,100809],{"class":207},[92,109263,102486],{"class":207},[92,109265,100822],{"class":207},[92,109267,100828],{"class":207},[92,109269,100819],{"class":207},[92,109271,109272],{"class":207}," libXinerama\n",[63,109274,109276],{"id":109275},"glfwerror",[89,109277,109278],{},"GLFWError",[38,109280,109281],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[63,109283,109285],{"id":109284},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[38,109287,109288,109289,82519,109291,109293],{},"尝试 ",[89,109290,101012],{},[89,109292,101015],{},"。可能存在版本差异。",[63,109295,109296],{"id":109296},"保存图片是黑的",[38,109298,102550],{},[46,109300,109301,109304,109307,109317],{},[49,109302,109303],{},"XML 里是否有 light。",[49,109305,109306],{},"相机是否对着模型。",[49,109308,109309,109310,109313,109314,28366],{},"是否先 ",[89,109311,109312],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[89,109315,109316],{},"renderer.render()",[49,109318,109319],{},"物体是否已经掉出视野。",[63,109321,109322],{"id":109322},"远程服务器没有显示器",[38,109324,109325],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[83,109327,109328],{"className":23802,"code":109168,"language":23804,"meta":10,"style":10},[89,109329,109330],{"__ignoreMap":10},[92,109331,109332,109334,109336,109338,109340],{"class":94,"line":95},[92,109333,107789],{"class":102},[92,109335,148],{"class":98},[92,109337,107779],{"class":207},[92,109339,109181],{"class":1942},[92,109341,108600],{"class":207},[38,109343,109344],{},"如果 EGL 不可用，再尝试：",[83,109346,109347],{"className":23802,"code":109188,"language":23804,"meta":10,"style":10},[89,109348,109349],{"__ignoreMap":10},[92,109350,109351,109353,109355,109357,109359],{"class":94,"line":95},[92,109352,107789],{"class":102},[92,109354,148],{"class":98},[92,109356,107783],{"class":207},[92,109358,109181],{"class":1942},[92,109360,108600],{"class":207},[33,109362,102582],{"id":102581},[38,109364,109365],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[46,109367,109368,109371,109374],{},[49,109369,109370],{},"先用 viewer 看模型和控制是否正常。",[49,109372,109373],{},"再用 renderer 保存图片或构造视觉观测。",[49,109375,109376],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5106,109378,109379],{},"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":10,"searchDepth":11,"depth":11,"links":109381},[109382,109383,109384,109389,109394,109395,109396,109403],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":109385},[109386,109387,109388],{"id":107886,"depth":1158,"text":107887},{"id":107916,"depth":1158,"text":107917},{"id":107951,"depth":1158,"text":107952},{"id":101227,"depth":11,"text":101228,"children":109390},[109391,109392,109393],{"id":101547,"depth":1158,"text":101547},{"id":108696,"depth":1158,"text":108697},{"id":108874,"depth":1158,"text":108875},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":109397},[109398,109399,109400,109401,109402],{"id":109238,"depth":1158,"text":109239},{"id":109275,"depth":1158,"text":109278},{"id":109284,"depth":1158,"text":109285},{"id":109296,"depth":1158,"text":109296},{"id":109322,"depth":1158,"text":109322},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107494,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109410,"title":109411,"body":109412,"description":10,"extension":14,"meta":111323,"navigation":17,"path":111324,"seo":111325,"stem":111326,"__hash__":111327},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109413,"toc":111299},[109414,109417,109419,109422,109424,109443,109446,109452,109455,109457,109459,109483,109485,109499,109501,109542,109544,109555,109557,109560,109566,109569,109603,109606,109638,109641,109673,109677,109680,109720,109723,109729,109732,109738,109742,109745,109751,109754,109758,109761,109801,109803,109816,109819,109821,110403,110405,110417,110420,110431,110433,110436,110455,110467,110470,110491,110494,110497,110540,110543,110546,110566,110573,110575,110593,110608,110611,110617,110620,110626,110643,110650,110681,110692,110726,110737,110754,110763,110771,110776,110790,110793,110814,110820,110834,110839,110869,110879,110904,110912,110935,110938,110954,110957,110965,110971,110993,111006,111027,111036,111075,111086,111088,111091,111097,111100,111103,111109,111112,111132,111135,111137,111176,111178,111181,111189,111192,111195,111222,111225,111235,111241,111244,111250,111252,111258,111262,111265,111267,111270,111294,111297],[29,109415,109411],{"id":109416},"_6控制任务cartpole",[33,109418,100622],{"id":100621},[38,109420,109421],{},"本章搭建一个最小 Cartpole 控制任务。",[38,109423,104306],{},[46,109425,109426,109429,109431,109434,109437,109440],{},[49,109427,109428],{},"slide joint",[49,109430,106159],{},[49,109432,109433],{},"cart force actuator",[49,109435,109436],{},"状态观测",[49,109438,109439],{},"简单控制循环",[49,109441,109442],{},"reward 设计雏形",[38,109444,109445],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[83,109447,109450],{"className":109448,"code":109449,"language":5167,"meta":10},[5165],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[89,109451,109449],{"__ignoreMap":10},[38,109453,109454],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[33,109456,100745],{"id":100744},[38,109458,100748],{},[83,109460,109461],{"className":23802,"code":104363,"language":23804,"meta":10,"style":10},[89,109462,109463],{"__ignoreMap":10},[92,109464,109465,109467,109469,109471,109473,109475,109477,109479,109481],{"class":94,"line":95},[92,109466,24557],{"class":1942},[92,109468,26296],{"class":207},[92,109470,23814],{"class":207},[92,109472,26381],{"class":151},[92,109474,104378],{"class":207},[92,109476,100773],{"class":207},[92,109478,102476],{"class":207},[92,109480,100789],{"class":207},[92,109482,104387],{"class":207},[38,109484,102794],{},[83,109486,109487],{"className":23802,"code":100894,"language":23804,"meta":10,"style":10},[89,109488,109489],{"__ignoreMap":10},[92,109490,109491,109493,109495,109497],{"class":94,"line":95},[92,109492,23811],{"class":1942},[92,109494,23814],{"class":207},[92,109496,100905],{"class":207},[92,109498,100908],{"class":207},[38,109500,102811],{},[83,109502,109504],{"className":23802,"code":109503,"language":23804,"meta":10,"style":10},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[89,109505,109506,109523,109532],{"__ignoreMap":10},[92,109507,109508,109510,109512,109514,109517,109519,109521],{"class":94,"line":95},[92,109509,30311],{"class":1942},[92,109511,29157],{"class":207},[92,109513,25096],{"class":151},[92,109515,109516],{"class":207}," mujoco-cartpole",[92,109518,100950],{"class":207},[92,109520,100953],{"class":151},[92,109522,100956],{"class":151},[92,109524,109525,109527,109529],{"class":94,"line":11},[92,109526,30311],{"class":1942},[92,109528,100963],{"class":207},[92,109530,109531],{"class":207}," mujoco-cartpole\n",[92,109533,109534,109536,109538,109540],{"class":94,"line":1158},[92,109535,23811],{"class":1942},[92,109537,23814],{"class":207},[92,109539,100905],{"class":207},[92,109541,100908],{"class":207},[38,109543,100979],{},[46,109545,109546,109549,109552],{},[49,109547,109548],{},"本章不依赖 Gymnasium。",[49,109550,109551],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[49,109553,109554],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[33,109556,101020],{"id":101019},[38,109558,109559],{},"Cartpole 的模型结构:",[83,109561,109564],{"className":109562,"code":109563,"language":5167,"meta":10},[5165],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[89,109565,109563],{"__ignoreMap":10},[38,109567,109568],{},"小车通过 slide joint 左右移动:",[83,109570,109572],{"className":53047,"code":109571,"language":53049,"meta":10,"style":10},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[89,109573,109574],{"__ignoreMap":10},[92,109575,109576,109578,109580,109582,109584,109587,109589,109591,109594,109596,109598,109601],{"class":94,"line":95},[92,109577,1013],{"class":102},[92,109579,102931],{"class":51280},[92,109581,14900],{"class":1942},[92,109583,148],{"class":102},[92,109585,109586],{"class":207},"\"cart_x\"",[92,109588,53804],{"class":1942},[92,109590,148],{"class":102},[92,109592,109593],{"class":207},"\"slide\"",[92,109595,106003],{"class":1942},[92,109597,148],{"class":102},[92,109599,109600],{"class":207},"\"1 0 0\"",[92,109602,101119],{"class":102},[38,109604,109605],{},"杆子通过 hinge joint 旋转:",[83,109607,109609],{"className":53047,"code":109608,"language":53049,"meta":10,"style":10},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[89,109610,109611],{"__ignoreMap":10},[92,109612,109613,109615,109617,109619,109621,109624,109626,109628,109630,109632,109634,109636],{"class":94,"line":95},[92,109614,1013],{"class":102},[92,109616,102931],{"class":51280},[92,109618,14900],{"class":1942},[92,109620,148],{"class":102},[92,109622,109623],{"class":207},"\"pole_hinge\"",[92,109625,53804],{"class":1942},[92,109627,148],{"class":102},[92,109629,105994],{"class":207},[92,109631,106003],{"class":1942},[92,109633,148],{"class":102},[92,109635,106008],{"class":207},[92,109637,101119],{"class":102},[38,109639,109640],{},"控制力作用在小车 slide joint 上:",[83,109642,109644],{"className":53047,"code":109643,"language":53049,"meta":10,"style":10},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[89,109645,109646],{"__ignoreMap":10},[92,109647,109648,109650,109652,109654,109656,109659,109661,109663,109665,109667,109669,109671],{"class":94,"line":95},[92,109649,1013],{"class":102},[92,109651,106049],{"class":51280},[92,109653,14900],{"class":1942},[92,109655,148],{"class":102},[92,109657,109658],{"class":207},"\"cart_motor\"",[92,109660,106059],{"class":1942},[92,109662,148],{"class":102},[92,109664,109586],{"class":207},[92,109666,106066],{"class":1942},[92,109668,148],{"class":102},[92,109670,54296],{"class":207},[92,109672,101119],{"class":102},[63,109674,109676],{"id":109675},"cartpole-的状态是什么","Cartpole 的状态是什么",[38,109678,109679],{},"这个简化模型有两个关节：",[240,109681,109682,109693],{},[243,109683,109684],{},[246,109685,109686,109688,109690],{},[249,109687,102734],{"align":23716},[249,109689,23717],{"align":23716},[249,109691,109692],{"align":23716},"对应状态",[287,109694,109695,109708],{},[246,109696,109697,109702,109705],{},[292,109698,109699],{"align":23716},[89,109700,109701],{},"cart_x",[292,109703,109704],{"align":23716},"slide",[292,109706,109707],{"align":23716},"小车 x 位置",[246,109709,109710,109715,109717],{},[292,109711,109712],{"align":23716},[89,109713,109714],{},"pole_hinge",[292,109716,105815],{"align":23716},[292,109718,109719],{"align":23716},"杆子角度",[38,109721,109722],{},"所以：",[83,109724,109727],{"className":109725,"code":109726,"language":5167,"meta":10},[5165],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[89,109728,109726],{"__ignoreMap":10},[38,109730,109731],{},"把它们拼起来就是观测：",[83,109733,109736],{"className":109734,"code":109735,"language":5167,"meta":10},[5165],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[89,109737,109735],{"__ignoreMap":10},[63,109739,109741],{"id":109740},"action-是什么","action 是什么",[38,109743,109744],{},"本章只有一个 actuator：",[83,109746,109749],{"className":109747,"code":109748,"language":5167,"meta":10},[5165],"data.ctrl[0] = action\n",[89,109750,109748],{"__ignoreMap":10},[38,109752,109753],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[63,109755,109757],{"id":109756},"reward-是什么","reward 是什么",[38,109759,109760],{},"奖励函数：",[83,109762,109764],{"className":30359,"code":109763,"language":30361,"meta":10,"style":10},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[89,109765,109766],{"__ignoreMap":10},[92,109767,109768,109770,109773,109775,109777,109779,109782,109784,109787,109789,109791,109793,109796,109798],{"class":94,"line":95},[92,109769,17026],{"class":98},[92,109771,109772],{"class":151}," float",[92,109774,103],{"class":102},[92,109776,102378],{"class":151},[92,109778,52251],{"class":98},[92,109780,109781],{"class":151}," 0.1",[92,109783,6498],{"class":98},[92,109785,109786],{"class":102}," cart_x ",[92,109788,558],{"class":98},[92,109790,109786],{"class":102},[92,109792,635],{"class":98},[92,109794,109795],{"class":102}," pole_angle ",[92,109797,558],{"class":98},[92,109799,109800],{"class":102}," pole_angle)\n",[38,109802,106201],{},[46,109804,109805,109810,109813],{},[49,109806,109807,109808,28366],{},"基础奖励是 ",[89,109809,102378],{},[49,109811,109812],{},"小车离中心越远，扣分越多。",[49,109814,109815],{},"杆子角度越大，扣分越多。",[38,109817,109818],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[33,109820,101228],{"id":101227},[83,109822,109824],{"className":30359,"code":109823,"language":30361,"meta":10,"style":10},"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",[89,109825,109826,109832,109842,109846,109850,109858,109863,109867,109871,109875,109880,109884,109889,109894,109899,109903,109908,109913,109918,109922,109926,109930,109934,109938,109943,109947,109951,109955,109959,109963,109973,109980,109984,109988,110002,110016,110029,110059,110063,110067,110079,110091,110099,110103,110116,110120,110124,110133,110137,110153,110163,110176,110189,110193,110216,110234,110238,110250,110254,110258,110268,110278,110282,110298,110339,110343,110363,110379,110383,110387,110399],{"__ignoreMap":10},[92,109827,109828,109830],{"class":94,"line":95},[92,109829,30373],{"class":98},[92,109831,101276],{"class":102},[92,109833,109834,109836,109838,109840],{"class":94,"line":11},[92,109835,30373],{"class":98},[92,109837,31361],{"class":102},[92,109839,31364],{"class":98},[92,109841,31367],{"class":102},[92,109843,109844],{"class":94,"line":1158},[92,109845,2379],{"emptyLinePlaceholder":17},[92,109847,109848],{"class":94,"line":1173},[92,109849,2379],{"emptyLinePlaceholder":17},[92,109851,109852,109854,109856],{"class":94,"line":1179},[92,109853,101289],{"class":151},[92,109855,13544],{"class":98},[92,109857,101294],{"class":207},[92,109859,109860],{"class":94,"line":1193},[92,109861,109862],{"class":207},"\u003Cmujoco model=\"cartpole\">\n",[92,109864,109865],{"class":94,"line":1199},[92,109866,101304],{"class":207},[92,109868,109869],{"class":94,"line":1290},[92,109870,2379],{"emptyLinePlaceholder":17},[92,109872,109873],{"class":94,"line":1296},[92,109874,101313],{"class":207},[92,109876,109877],{"class":94,"line":1308},[92,109878,109879],{"class":207},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[92,109881,109882],{"class":94,"line":1591},[92,109883,2379],{"emptyLinePlaceholder":17},[92,109885,109886],{"class":94,"line":1596},[92,109887,109888],{"class":207},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[92,109890,109891],{"class":94,"line":1602},[92,109892,109893],{"class":207},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[92,109895,109896],{"class":94,"line":1607},[92,109897,109898],{"class":207},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[92,109900,109901],{"class":94,"line":1621},[92,109902,2379],{"emptyLinePlaceholder":17},[92,109904,109905],{"class":94,"line":1626},[92,109906,109907],{"class":207},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[92,109909,109910],{"class":94,"line":1632},[92,109911,109912],{"class":207},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[92,109914,109915],{"class":94,"line":1653},[92,109916,109917],{"class":207},"        \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",[92,109919,109920],{"class":94,"line":1658},[92,109921,106413],{"class":207},[92,109923,109924],{"class":94,"line":1672},[92,109925,101342],{"class":207},[92,109927,109928],{"class":94,"line":1677},[92,109929,101347],{"class":207},[92,109931,109932],{"class":94,"line":1706},[92,109933,2379],{"emptyLinePlaceholder":17},[92,109935,109936],{"class":94,"line":1711},[92,109937,106430],{"class":207},[92,109939,109940],{"class":94,"line":1728},[92,109941,109942],{"class":207},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[92,109944,109945],{"class":94,"line":1733},[92,109946,106440],{"class":207},[92,109948,109949],{"class":94,"line":1738},[92,109950,101352],{"class":207},[92,109952,109953],{"class":94,"line":1743},[92,109954,95678],{"class":207},[92,109956,109957],{"class":94,"line":1757},[92,109958,2379],{"emptyLinePlaceholder":17},[92,109960,109961],{"class":94,"line":1762},[92,109962,2379],{"emptyLinePlaceholder":17},[92,109964,109965,109967,109970],{"class":94,"line":2556},[92,109966,31928],{"class":98},[92,109968,109969],{"class":1942}," get_observation",[92,109971,109972],{"class":102},"(data: mujoco.MjData) -> np.ndarray:\n",[92,109974,109975,109977],{"class":94,"line":2570},[92,109976,4069],{"class":98},[92,109978,109979],{"class":102}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[92,109981,109982],{"class":94,"line":2578},[92,109983,2379],{"emptyLinePlaceholder":17},[92,109985,109986],{"class":94,"line":2583},[92,109987,2379],{"emptyLinePlaceholder":17},[92,109989,109990,109992,109995,109998,110000],{"class":94,"line":2589},[92,109991,31928],{"class":98},[92,109993,109994],{"class":1942}," compute_reward",[92,109996,109997],{"class":102},"(obs: np.ndarray) -> ",[92,109999,142],{"class":151},[92,110001,3718],{"class":102},[92,110003,110004,110007,110009,110012,110014],{"class":94,"line":2595},[92,110005,110006],{"class":102},"    cart_x ",[92,110008,148],{"class":98},[92,110010,110011],{"class":102}," obs[",[92,110013,294],{"class":151},[92,110015,33227],{"class":102},[92,110017,110018,110021,110023,110025,110027],{"class":94,"line":2600},[92,110019,110020],{"class":102},"    pole_angle ",[92,110022,148],{"class":98},[92,110024,110011],{"class":102},[92,110026,320],{"class":151},[92,110028,33227],{"class":102},[92,110030,110031,110033,110035,110037,110039,110041,110043,110045,110047,110049,110051,110053,110055,110057],{"class":94,"line":7928},[92,110032,4069],{"class":98},[92,110034,109772],{"class":151},[92,110036,103],{"class":102},[92,110038,102378],{"class":151},[92,110040,52251],{"class":98},[92,110042,109781],{"class":151},[92,110044,6498],{"class":98},[92,110046,109786],{"class":102},[92,110048,558],{"class":98},[92,110050,109786],{"class":102},[92,110052,635],{"class":98},[92,110054,109795],{"class":102},[92,110056,558],{"class":98},[92,110058,109800],{"class":102},[92,110060,110061],{"class":94,"line":7952},[92,110062,2379],{"emptyLinePlaceholder":17},[92,110064,110065],{"class":94,"line":7957},[92,110066,2379],{"emptyLinePlaceholder":17},[92,110068,110069,110071,110073,110075,110077],{"class":94,"line":7963},[92,110070,31928],{"class":98},[92,110072,1952],{"class":1942},[92,110074,101373],{"class":102},[92,110076,95666],{"class":151},[92,110078,3718],{"class":102},[92,110080,110081,110083,110085,110087,110089],{"class":94,"line":7990},[92,110082,101382],{"class":102},[92,110084,148],{"class":98},[92,110086,101387],{"class":102},[92,110088,101289],{"class":151},[92,110090,109],{"class":102},[92,110092,110093,110095,110097],{"class":94,"line":7995},[92,110094,101396],{"class":102},[92,110096,148],{"class":98},[92,110098,101401],{"class":102},[92,110100,110101],{"class":94,"line":8001},[92,110102,2379],{"emptyLinePlaceholder":17},[92,110104,110105,110107,110109,110111,110113],{"class":94,"line":8013},[92,110106,105044],{"class":102},[92,110108,320],{"class":151},[92,110110,4422],{"class":102},[92,110112,148],{"class":98},[92,110114,110115],{"class":151}," 0.1\n",[92,110117,110118],{"class":94,"line":8025},[92,110119,105057],{"class":102},[92,110121,110122],{"class":94,"line":8037},[92,110123,2379],{"emptyLinePlaceholder":17},[92,110125,110126,110129,110131],{"class":94,"line":9696},[92,110127,110128],{"class":102},"    total_reward ",[92,110130,148],{"class":98},[92,110132,104736],{"class":151},[92,110134,110135],{"class":94,"line":9721},[92,110136,2379],{"emptyLinePlaceholder":17},[92,110138,110139,110141,110143,110145,110147,110149,110151],{"class":94,"line":9744},[92,110140,3180],{"class":98},[92,110142,31597],{"class":102},[92,110144,26024],{"class":98},[92,110146,32424],{"class":151},[92,110148,103],{"class":102},[92,110150,6390],{"class":151},[92,110152,30767],{"class":102},[92,110154,110155,110158,110160],{"class":94,"line":9768},[92,110156,110157],{"class":102},"        obs ",[92,110159,148],{"class":98},[92,110161,110162],{"class":102}," get_observation(data)\n",[92,110164,110165,110168,110170,110172,110174],{"class":94,"line":9773},[92,110166,110167],{"class":102},"        pole_angle ",[92,110169,148],{"class":98},[92,110171,110011],{"class":102},[92,110173,320],{"class":151},[92,110175,33227],{"class":102},[92,110177,110178,110181,110183,110185,110187],{"class":94,"line":9778},[92,110179,110180],{"class":102},"        pole_angular_velocity ",[92,110182,148],{"class":98},[92,110184,110011],{"class":102},[92,110186,174],{"class":151},[92,110188,33227],{"class":102},[92,110190,110191],{"class":94,"line":9783},[92,110192,2379],{"emptyLinePlaceholder":17},[92,110194,110195,110198,110200,110203,110205,110207,110209,110211,110213],{"class":94,"line":9792},[92,110196,110197],{"class":102},"        action ",[92,110199,148],{"class":98},[92,110201,110202],{"class":151}," 2.0",[92,110204,6498],{"class":98},[92,110206,109795],{"class":102},[92,110208,584],{"class":98},[92,110210,61847],{"class":151},[92,110212,6498],{"class":98},[92,110214,110215],{"class":102}," pole_angular_velocity\n",[92,110217,110218,110220,110222,110224,110226,110228,110230,110232],{"class":94,"line":9797},[92,110219,110197],{"class":102},[92,110221,148],{"class":98},[92,110223,107422],{"class":102},[92,110225,635],{"class":98},[92,110227,102378],{"class":151},[92,110229,12415],{"class":102},[92,110231,102378],{"class":151},[92,110233,109],{"class":102},[92,110235,110236],{"class":94,"line":9803},[92,110237,2379],{"emptyLinePlaceholder":17},[92,110239,110240,110242,110244,110246,110248],{"class":94,"line":9824},[92,110241,106592],{"class":102},[92,110243,294],{"class":151},[92,110245,4422],{"class":102},[92,110247,148],{"class":98},[92,110249,107445],{"class":102},[92,110251,110252],{"class":94,"line":9830},[92,110253,101491],{"class":102},[92,110255,110256],{"class":94,"line":9844},[92,110257,2379],{"emptyLinePlaceholder":17},[92,110259,110260,110263,110265],{"class":94,"line":9850},[92,110261,110262],{"class":102},"        reward ",[92,110264,148],{"class":98},[92,110266,110267],{"class":102}," compute_reward(get_observation(data))\n",[92,110269,110270,110273,110275],{"class":94,"line":9877},[92,110271,110272],{"class":102},"        total_reward ",[92,110274,9457],{"class":98},[92,110276,110277],{"class":102}," reward\n",[92,110279,110280],{"class":94,"line":9886},[92,110281,2379],{"emptyLinePlaceholder":17},[92,110283,110284,110286,110288,110290,110292,110294,110296],{"class":94,"line":9892},[92,110285,2476],{"class":98},[92,110287,31597],{"class":102},[92,110289,431],{"class":98},[92,110291,5734],{"class":151},[92,110293,101534],{"class":98},[92,110295,4072],{"class":151},[92,110297,3718],{"class":102},[92,110299,110300,110302,110304,110307,110310,110313,110316,110318,110321,110324,110326,110328,110330,110332,110335,110337],{"class":94,"line":9900},[92,110301,34631],{"class":151},[92,110303,103],{"class":102},[92,110305,110306],{"class":207},"\"step:\"",[92,110308,110309],{"class":102},", step, ",[92,110311,110312],{"class":207},"\"obs:\"",[92,110314,110315],{"class":102},", np.round(obs, ",[92,110317,174],{"class":151},[92,110319,110320],{"class":102},"), ",[92,110322,110323],{"class":207},"\"action:\"",[92,110325,12415],{"class":102},[92,110327,31999],{"class":151},[92,110329,103],{"class":102},[92,110331,142],{"class":151},[92,110333,110334],{"class":102},"(action), ",[92,110336,174],{"class":151},[92,110338,30478],{"class":102},[92,110340,110341],{"class":94,"line":9905},[92,110342,2379],{"emptyLinePlaceholder":17},[92,110344,110345,110347,110349,110352,110354,110356,110359,110361],{"class":94,"line":16584},[92,110346,31280],{"class":151},[92,110348,103],{"class":102},[92,110350,110351],{"class":207},"\"total_reward:\"",[92,110353,12415],{"class":102},[92,110355,31999],{"class":151},[92,110357,110358],{"class":102},"(total_reward, ",[92,110360,174],{"class":151},[92,110362,30478],{"class":102},[92,110364,110365,110367,110369,110372,110375,110377],{"class":94,"line":16590},[92,110366,31280],{"class":151},[92,110368,103],{"class":102},[92,110370,110371],{"class":207},"\"final obs:\"",[92,110373,110374],{"class":102},", np.round(get_observation(data), ",[92,110376,174],{"class":151},[92,110378,30478],{"class":102},[92,110380,110381],{"class":94,"line":16613},[92,110382,2379],{"emptyLinePlaceholder":17},[92,110384,110385],{"class":94,"line":16619},[92,110386,2379],{"emptyLinePlaceholder":17},[92,110388,110389,110391,110393,110395,110397],{"class":94,"line":16642},[92,110390,1510],{"class":98},[92,110392,31201],{"class":151},[92,110394,101534],{"class":98},[92,110396,101537],{"class":207},[92,110398,3718],{"class":102},[92,110400,110401],{"class":94,"line":16656},[92,110402,101544],{"class":102},[38,110404,103545],{},[83,110406,110408],{"className":23802,"code":110407,"language":23804,"meta":10,"style":10},"touch ch6_cartpole.py\n",[89,110409,110410],{"__ignoreMap":10},[92,110411,110412,110414],{"class":94,"line":95},[92,110413,101258],{"class":1942},[92,110415,110416],{"class":207}," ch6_cartpole.py\n",[38,110418,110419],{},"运行：",[83,110421,110423],{"className":23802,"code":110422,"language":23804,"meta":10,"style":10},"python ch6_cartpole.py\n",[89,110424,110425],{"__ignoreMap":10},[92,110426,110427,110429],{"class":94,"line":95},[92,110428,30361],{"class":1942},[92,110430,110416],{"class":207},[63,110432,101547],{"id":101547},[38,110434,110435],{},"构造观测：",[83,110437,110439],{"className":30359,"code":110438,"language":30361,"meta":10,"style":10},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[89,110440,110441,110449],{"__ignoreMap":10},[92,110442,110443,110445,110447],{"class":94,"line":95},[92,110444,31928],{"class":98},[92,110446,109969],{"class":1942},[92,110448,109972],{"class":102},[92,110450,110451,110453],{"class":94,"line":11},[92,110452,4069],{"class":98},[92,110454,109979],{"class":102},[38,110456,110457,110460,110461,110463,110464,110466],{},[89,110458,110459],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[89,110462,104005],{}," 2 维，",[89,110465,104335],{}," 2 维，所以 obs 是 4 维。",[38,110468,110469],{},"设置初始角度：",[83,110471,110473],{"className":30359,"code":110472,"language":30361,"meta":10,"style":10},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[89,110474,110475,110487],{"__ignoreMap":10},[92,110476,110477,110479,110481,110483,110485],{"class":94,"line":95},[92,110478,104674],{"class":102},[92,110480,320],{"class":151},[92,110482,4422],{"class":102},[92,110484,148],{"class":98},[92,110486,110115],{"class":151},[92,110488,110489],{"class":94,"line":11},[92,110490,104518],{"class":102},[38,110492,110493],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[38,110495,110496],{},"简单反馈控制：",[83,110498,110500],{"className":30359,"code":110499,"language":30361,"meta":10,"style":10},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[89,110501,110502,110522],{"__ignoreMap":10},[92,110503,110504,110506,110508,110510,110512,110514,110516,110518,110520],{"class":94,"line":95},[92,110505,107417],{"class":102},[92,110507,148],{"class":98},[92,110509,110202],{"class":151},[92,110511,6498],{"class":98},[92,110513,109795],{"class":102},[92,110515,584],{"class":98},[92,110517,61847],{"class":151},[92,110519,6498],{"class":98},[92,110521,110215],{"class":102},[92,110523,110524,110526,110528,110530,110532,110534,110536,110538],{"class":94,"line":11},[92,110525,107417],{"class":102},[92,110527,148],{"class":98},[92,110529,107422],{"class":102},[92,110531,635],{"class":98},[92,110533,102378],{"class":151},[92,110535,12415],{"class":102},[92,110537,102378],{"class":151},[92,110539,109],{"class":102},[38,110541,110542],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[38,110544,110545],{},"限制动作：",[83,110547,110549],{"className":30359,"code":110548,"language":30361,"meta":10,"style":10},"np.clip(action, -1.0, 1.0)\n",[89,110550,110551],{"__ignoreMap":10},[92,110552,110553,110556,110558,110560,110562,110564],{"class":94,"line":95},[92,110554,110555],{"class":102},"np.clip(action, ",[92,110557,635],{"class":98},[92,110559,102378],{"class":151},[92,110561,12415],{"class":102},[92,110563,102378],{"class":151},[92,110565,109],{"class":102},[38,110567,110568,110569,110572],{},"因为 XML 里 ",[89,110570,110571],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[63,110574,101683],{"id":101683},[83,110576,110577],{"className":30359,"code":110438,"language":30361,"meta":10,"style":10},[89,110578,110579,110587],{"__ignoreMap":10},[92,110580,110581,110583,110585],{"class":94,"line":95},[92,110582,31928],{"class":98},[92,110584,109969],{"class":1942},[92,110586,109972],{"class":102},[92,110588,110589,110591],{"class":94,"line":11},[92,110590,4069],{"class":98},[92,110592,109979],{"class":102},[38,110594,110595,110596,110599,110600,110603,110604,110607],{},"这段定义了一个函数，用来获取当前观测。",[89,110597,110598],{},"data.qpos.copy()"," 是位置数组副本，",[89,110601,110602],{},"data.qvel.copy()"," 是速度数组副本。",[89,110605,110606],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[38,110609,110610],{},"在本章模型里：",[83,110612,110615],{"className":110613,"code":110614,"language":5167,"meta":10},[5165],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[89,110616,110614],{"__ignoreMap":10},[38,110618,110619],{},"所以返回的 obs 是：",[83,110621,110624],{"className":110622,"code":110623,"language":5167,"meta":10},[5165],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[89,110625,110623],{"__ignoreMap":10},[83,110627,110629],{"className":30359,"code":110628,"language":30361,"meta":10,"style":10},"def compute_reward(obs: np.ndarray) -> float:\n",[89,110630,110631],{"__ignoreMap":10},[92,110632,110633,110635,110637,110639,110641],{"class":94,"line":95},[92,110634,31928],{"class":98},[92,110636,109994],{"class":1942},[92,110638,109997],{"class":102},[92,110640,142],{"class":151},[92,110642,3718],{"class":102},[38,110644,110645,110646,110649],{},"这行定义奖励函数。输入是观测 ",[89,110647,110648],{},"obs","，输出是一个浮点数奖励。",[83,110651,110653],{"className":30359,"code":110652,"language":30361,"meta":10,"style":10},"cart_x = obs[0]\npole_angle = obs[1]\n",[89,110654,110655,110668],{"__ignoreMap":10},[92,110656,110657,110660,110662,110664,110666],{"class":94,"line":95},[92,110658,110659],{"class":102},"cart_x ",[92,110661,148],{"class":98},[92,110663,110011],{"class":102},[92,110665,294],{"class":151},[92,110667,33227],{"class":102},[92,110669,110670,110673,110675,110677,110679],{"class":94,"line":11},[92,110671,110672],{"class":102},"pole_angle ",[92,110674,148],{"class":98},[92,110676,110011],{"class":102},[92,110678,320],{"class":151},[92,110680,33227],{"class":102},[38,110682,110683,110684,110687,110688,110691],{},"数组索引从 0 开始。",[89,110685,110686],{},"obs[0]"," 是第一个元素，也就是小车位置。",[89,110689,110690],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[83,110693,110694],{"className":30359,"code":109763,"language":30361,"meta":10,"style":10},[89,110695,110696],{"__ignoreMap":10},[92,110697,110698,110700,110702,110704,110706,110708,110710,110712,110714,110716,110718,110720,110722,110724],{"class":94,"line":95},[92,110699,17026],{"class":98},[92,110701,109772],{"class":151},[92,110703,103],{"class":102},[92,110705,102378],{"class":151},[92,110707,52251],{"class":98},[92,110709,109781],{"class":151},[92,110711,6498],{"class":98},[92,110713,109786],{"class":102},[92,110715,558],{"class":98},[92,110717,109786],{"class":102},[92,110719,635],{"class":98},[92,110721,109795],{"class":102},[92,110723,558],{"class":98},[92,110725,109800],{"class":102},[38,110727,110728,110729,110732,110733,110736],{},"这行计算奖励。",[89,110730,110731],{},"cart_x * cart_x"," 是小车位置的平方，",[89,110734,110735],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[83,110738,110740],{"className":30359,"code":110739,"language":30361,"meta":10,"style":10},"data.qpos[1] = 0.1\n",[89,110741,110742],{"__ignoreMap":10},[92,110743,110744,110746,110748,110750,110752],{"class":94,"line":95},[92,110745,104674],{"class":102},[92,110747,320],{"class":151},[92,110749,4422],{"class":102},[92,110751,148],{"class":98},[92,110753,110115],{"class":151},[38,110755,110756,110757,110759,110760,110762],{},"手动设置杆子的初始角度。因为 ",[89,110758,105431],{}," 是小车位置，",[89,110761,105434],{}," 是杆子角度，所以这里改的是杆子。",[83,110764,110765],{"className":30359,"code":104518,"language":30361,"meta":10,"style":10},[89,110766,110767],{"__ignoreMap":10},[92,110768,110769],{"class":94,"line":95},[92,110770,104518],{"class":102},[38,110772,105477,110773,110775],{},[89,110774,104005],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[83,110777,110779],{"className":30359,"code":110778,"language":30361,"meta":10,"style":10},"total_reward = 0.0\n",[89,110780,110781],{"__ignoreMap":10},[92,110782,110783,110786,110788],{"class":94,"line":95},[92,110784,110785],{"class":102},"total_reward ",[92,110787,148],{"class":98},[92,110789,104736],{"class":151},[38,110791,110792],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[83,110794,110796],{"className":30359,"code":110795,"language":30361,"meta":10,"style":10},"for step in range(1000):\n",[89,110797,110798],{"__ignoreMap":10},[92,110799,110800,110802,110804,110806,110808,110810,110812],{"class":94,"line":95},[92,110801,3004],{"class":98},[92,110803,31597],{"class":102},[92,110805,26024],{"class":98},[92,110807,32424],{"class":151},[92,110809,103],{"class":102},[92,110811,6390],{"class":151},[92,110813,30767],{"class":102},[38,110815,110816,110817,110819],{},"循环 1000 步。",[89,110818,107109],{}," 是当前步数，从 0 到 999。",[83,110821,110823],{"className":30359,"code":110822,"language":30361,"meta":10,"style":10},"obs = get_observation(data)\n",[89,110824,110825],{"__ignoreMap":10},[92,110826,110827,110830,110832],{"class":94,"line":95},[92,110828,110829],{"class":102},"obs ",[92,110831,148],{"class":98},[92,110833,110162],{"class":102},[38,110835,110836,110837,28366],{},"读取当前状态，保存到 ",[89,110838,110648],{},[83,110840,110842],{"className":30359,"code":110841,"language":30361,"meta":10,"style":10},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[89,110843,110844,110856],{"__ignoreMap":10},[92,110845,110846,110848,110850,110852,110854],{"class":94,"line":95},[92,110847,110672],{"class":102},[92,110849,148],{"class":98},[92,110851,110011],{"class":102},[92,110853,320],{"class":151},[92,110855,33227],{"class":102},[92,110857,110858,110861,110863,110865,110867],{"class":94,"line":11},[92,110859,110860],{"class":102},"pole_angular_velocity ",[92,110862,148],{"class":98},[92,110864,110011],{"class":102},[92,110866,174],{"class":151},[92,110868,33227],{"class":102},[38,110870,110871,110872,110875,110876,28366],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[89,110873,110874],{},"obs[3]","？因为 obs 的顺序是 ",[89,110877,110878],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[83,110880,110882],{"className":30359,"code":110881,"language":30361,"meta":10,"style":10},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[89,110883,110884],{"__ignoreMap":10},[92,110885,110886,110888,110890,110892,110894,110896,110898,110900,110902],{"class":94,"line":95},[92,110887,107417],{"class":102},[92,110889,148],{"class":98},[92,110891,110202],{"class":151},[92,110893,6498],{"class":98},[92,110895,109795],{"class":102},[92,110897,584],{"class":98},[92,110899,61847],{"class":151},[92,110901,6498],{"class":98},[92,110903,110215],{"class":102},[38,110905,110906,110907,100993,110909,110911],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[89,110908,105235],{},[89,110910,35310],{}," 是人为设置的系数，不是固定公式。",[83,110913,110915],{"className":30359,"code":110914,"language":30361,"meta":10,"style":10},"action = np.clip(action, -1.0, 1.0)\n",[89,110916,110917],{"__ignoreMap":10},[92,110918,110919,110921,110923,110925,110927,110929,110931,110933],{"class":94,"line":95},[92,110920,107417],{"class":102},[92,110922,148],{"class":98},[92,110924,107422],{"class":102},[92,110926,635],{"class":98},[92,110928,102378],{"class":151},[92,110930,12415],{"class":102},[92,110932,102378],{"class":151},[92,110934,109],{"class":102},[38,110936,110937],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[83,110939,110940],{"className":30359,"code":109748,"language":30361,"meta":10,"style":10},[89,110941,110942],{"__ignoreMap":10},[92,110943,110944,110946,110948,110950,110952],{"class":94,"line":95},[92,110945,105846],{"class":102},[92,110947,294],{"class":151},[92,110949,4422],{"class":102},[92,110951,148],{"class":98},[92,110953,107445],{"class":102},[38,110955,110956],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[83,110958,110959],{"className":30359,"code":104480,"language":30361,"meta":10,"style":10},[89,110960,110961],{"__ignoreMap":10},[92,110962,110963],{"class":94,"line":95},[92,110964,104480],{"class":102},[38,110966,110967,110968,110970],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[89,110969,106101],{}," 计算小车和杆子的下一刻状态。",[83,110972,110974],{"className":30359,"code":110973,"language":30361,"meta":10,"style":10},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[89,110975,110976,110985],{"__ignoreMap":10},[92,110977,110978,110981,110983],{"class":94,"line":95},[92,110979,110980],{"class":102},"reward ",[92,110982,148],{"class":98},[92,110984,110267],{"class":102},[92,110986,110987,110989,110991],{"class":94,"line":11},[92,110988,110785],{"class":102},[92,110990,9457],{"class":98},[92,110992,110277],{"class":102},[38,110994,110995,110996,110998,110999,111002,111003,28366],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[89,110997,9457],{}," 是简写，",[89,111000,111001],{},"total_reward += reward"," 等价于 ",[89,111004,111005],{},"total_reward = total_reward + reward",[83,111007,111009],{"className":30359,"code":111008,"language":30361,"meta":10,"style":10},"if step % 100 == 0:\n",[89,111010,111011],{"__ignoreMap":10},[92,111012,111013,111015,111017,111019,111021,111023,111025],{"class":94,"line":95},[92,111014,1510],{"class":98},[92,111016,31597],{"class":102},[92,111018,431],{"class":98},[92,111020,5734],{"class":151},[92,111022,101534],{"class":98},[92,111024,4072],{"class":151},[92,111026,3718],{"class":102},[38,111028,111029,111031,111032,111035],{},[89,111030,431],{}," 是取余数。",[89,111033,111034],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[83,111037,111039],{"className":30359,"code":111038,"language":30361,"meta":10,"style":10},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[89,111040,111041],{"__ignoreMap":10},[92,111042,111043,111045,111047,111049,111051,111053,111055,111057,111059,111061,111063,111065,111067,111069,111071,111073],{"class":94,"line":95},[92,111044,30396],{"class":151},[92,111046,103],{"class":102},[92,111048,110306],{"class":207},[92,111050,110309],{"class":102},[92,111052,110312],{"class":207},[92,111054,110315],{"class":102},[92,111056,174],{"class":151},[92,111058,110320],{"class":102},[92,111060,110323],{"class":207},[92,111062,12415],{"class":102},[92,111064,31999],{"class":151},[92,111066,103],{"class":102},[92,111068,142],{"class":151},[92,111070,110334],{"class":102},[92,111072,174],{"class":151},[92,111074,30478],{"class":102},[38,111076,111077,111078,111081,111082,111085],{},"打印当前步数、观测和动作。",[89,111079,111080],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[89,111083,111084],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[33,111087,102291],{"id":102290},[38,111089,111090],{},"观测向量:",[83,111092,111095],{"className":111093,"code":111094,"language":5167,"meta":10},[5165],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[89,111096,111094],{"__ignoreMap":10},[38,111098,111099],{},"控制器是教学用的简单线性反馈，不保证最优。",[38,111101,111102],{},"每隔 100 步会打印一次：",[83,111104,111107],{"className":111105,"code":111106,"language":5167,"meta":10},[5165],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[89,111108,111106],{"__ignoreMap":10},[38,111110,111111],{},"重点观察：",[46,111113,111114,111120,111125],{},[49,111115,111116,111119],{},[89,111117,111118],{},"pole_angle"," 是否越来越大。",[49,111121,111122,111124],{},[89,111123,109701],{}," 是否跑得太远。",[49,111126,111127,111128,82519,111130,28366],{},"action 是否经常被 clip 到 ",[89,111129,103890],{},[89,111131,320],{},[38,111133,111134],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[33,111136,102323],{"id":102322},[46,111138,111139,111145,111148,111154,111164,111170,111173],{},[49,111140,111141,111142,28366],{},"把初始角度改为 ",[89,111143,111144],{},"data.qpos[1] = 0.3",[49,111146,111147],{},"重新运行，观察控制是否变差。",[49,111149,111150,111151,111153],{},"把 actuator ",[89,111152,107042],{}," 改小。",[49,111155,111156,111157,111160,111161,28366],{},"打印 ",[89,111158,111159],{},"model.nq, model.nv, model.nu","，应为 ",[89,111162,111163],{},"2 2 1",[49,111165,111166,111167,111169],{},"把 reward 里的 ",[89,111168,110735],{}," 系数改大，观察总奖励变化。",[49,111171,111172],{},"把控制器改成反号，观察杆子是否更容易倒。",[49,111174,111175],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[33,111177,102428],{"id":102427},[63,111179,111180],{"id":111180},"杆子方向和预期不一致",[38,111182,102371,111183,111185,111186,111188],{},[89,111184,106214],{}," 和 capsule 的 ",[89,111187,103151],{},"，必要时用 viewer 可视化确认。",[63,111190,111191],{"id":111191},"控制器越控越倒",[38,111193,111194],{},"说明反馈符号可能反了，尝试:",[83,111196,111198],{"className":30359,"code":111197,"language":30361,"meta":10,"style":10},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[89,111199,111200],{"__ignoreMap":10},[92,111201,111202,111204,111206,111208,111210,111212,111214,111216,111218,111220],{"class":94,"line":95},[92,111203,107417],{"class":102},[92,111205,148],{"class":98},[92,111207,52251],{"class":98},[92,111209,105235],{"class":151},[92,111211,6498],{"class":98},[92,111213,109795],{"class":102},[92,111215,635],{"class":98},[92,111217,61847],{"class":151},[92,111219,6498],{"class":98},[92,111221,110215],{"class":102},[63,111223,111224],{"id":111224},"小车飞走",[38,111226,111227,111228,111230,111231,111234],{},"降低 ",[89,111229,107042],{}," 或缩小 ",[89,111232,111233],{},"action"," 的 clip 范围。",[63,111236,111238,111240],{"id":111237},"obs3-为什么是杆子角速度",[89,111239,110874],{}," 为什么是杆子角速度",[38,111242,111243],{},"因为这个模型里：",[83,111245,111248],{"className":111246,"code":111247,"language":5167,"meta":10},[5165],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[89,111249,111247],{"__ignoreMap":10},[38,111251,109722],{},[83,111253,111256],{"className":111254,"code":111255,"language":5167,"meta":10},[5165],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[89,111257,111255],{"__ignoreMap":10},[63,111259,111261],{"id":111260},"reward-变成负数是否错误","reward 变成负数是否错误",[38,111263,111264],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[33,111266,102582],{"id":102581},[38,111268,111269],{},"一个控制任务通常包含：",[46,111271,111272,111275,111283,111288,111291],{},[49,111273,111274],{},"模型：Cartpole 的 body、joint、actuator。",[49,111276,111277,111278,315,111280,111282],{},"观测：从 ",[89,111279,104005],{},[89,111281,104335],{}," 里取状态。",[49,111284,111285,111286,28366],{},"动作：写入 ",[89,111287,101051],{},[49,111289,111290],{},"奖励：根据任务目标打分。",[49,111292,111293],{},"循环：obs -> action -> step -> reward。",[38,111295,111296],{},"这就是后面 Gymnasium 环境的基本骨架。",[5106,111298,104261],{},{"title":10,"searchDepth":11,"depth":11,"links":111300},[111301,111302,111303,111308,111312,111313,111314,111322],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":111304},[111305,111306,111307],{"id":109675,"depth":1158,"text":109676},{"id":109740,"depth":1158,"text":109741},{"id":109756,"depth":1158,"text":109757},{"id":101227,"depth":11,"text":101228,"children":111309},[111310,111311],{"id":101547,"depth":1158,"text":101547},{"id":101683,"depth":1158,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":111315},[111316,111317,111318,111319,111321],{"id":111180,"depth":1158,"text":111180},{"id":111191,"depth":1158,"text":111191},{"id":111224,"depth":1158,"text":111224},{"id":111237,"depth":1158,"text":111320},"obs[3] 为什么是杆子角速度",{"id":111260,"depth":1158,"text":111261},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109411,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111329,"title":111330,"body":111331,"description":10,"extension":14,"meta":113345,"navigation":17,"path":113346,"seo":113347,"stem":113348,"__hash__":113349},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111332,"toc":113321},[111333,111336,111338,111341,111343,111360,111363,111366,111372,111375,111377,111379,111403,111405,111419,111421,111462,111464,111482,111484,111487,111493,111496,111524,111528,111534,111559,111562,111593,111600,111603,111606,111612,111615,111621,111624,111630,111634,111637,111662,111665,111667,112427,112429,112441,112443,112454,112456,112459,112476,112479,112481,112492,112495,112497,112543,112546,112559,112562,112644,112647,112649,112665,112675,112688,112691,112730,112740,112751,112761,112774,112777,112806,112809,112819,112822,112828,112845,112856,112858,112864,112881,112892,112913,112916,112928,112931,112952,112955,112963,112971,112988,112991,113060,113067,113075,113078,113091,113098,113100,113103,113109,113112,113115,113121,113127,113129,113169,113171,113177,113186,113189,113191,113211,113214,113217,113223,113227,113229,113256,113259,113262,113289,113295,113298,113301,113303,113306,113309,113315,113318],[29,111334,111330],{"id":111335},"_7控制任务reacher-机械臂到达目标",[33,111337,100622],{"id":100621},[38,111339,111340],{},"本章搭建一个二维两关节 reacher 任务。",[38,111342,104306],{},[46,111344,111345,111348,111351,111354,111357],{},[49,111346,111347],{},"两个 hinge joint",[49,111349,111350],{},"两个 motor actuator",[49,111352,111353],{},"site 作为末端点和目标点",[49,111355,111356],{},"根据末端和目标距离设计 reward",[49,111358,111359],{},"构造机械臂任务的基本形式",[38,111361,111362],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[38,111364,111365],{},"Reacher 任务可以理解为：",[83,111367,111370],{"className":111368,"code":111369,"language":5167,"meta":10},[5165],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[89,111371,111369],{"__ignoreMap":10},[38,111373,111374],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[33,111376,100745],{"id":100744},[38,111378,100748],{},[83,111380,111381],{"className":23802,"code":104363,"language":23804,"meta":10,"style":10},[89,111382,111383],{"__ignoreMap":10},[92,111384,111385,111387,111389,111391,111393,111395,111397,111399,111401],{"class":94,"line":95},[92,111386,24557],{"class":1942},[92,111388,26296],{"class":207},[92,111390,23814],{"class":207},[92,111392,26381],{"class":151},[92,111394,104378],{"class":207},[92,111396,100773],{"class":207},[92,111398,102476],{"class":207},[92,111400,100789],{"class":207},[92,111402,104387],{"class":207},[38,111404,102794],{},[83,111406,111407],{"className":23802,"code":100894,"language":23804,"meta":10,"style":10},[89,111408,111409],{"__ignoreMap":10},[92,111410,111411,111413,111415,111417],{"class":94,"line":95},[92,111412,23811],{"class":1942},[92,111414,23814],{"class":207},[92,111416,100905],{"class":207},[92,111418,100908],{"class":207},[38,111420,102811],{},[83,111422,111424],{"className":23802,"code":111423,"language":23804,"meta":10,"style":10},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[89,111425,111426,111443,111452],{"__ignoreMap":10},[92,111427,111428,111430,111432,111434,111437,111439,111441],{"class":94,"line":95},[92,111429,30311],{"class":1942},[92,111431,29157],{"class":207},[92,111433,25096],{"class":151},[92,111435,111436],{"class":207}," mujoco-reacher",[92,111438,100950],{"class":207},[92,111440,100953],{"class":151},[92,111442,100956],{"class":151},[92,111444,111445,111447,111449],{"class":94,"line":11},[92,111446,30311],{"class":1942},[92,111448,100963],{"class":207},[92,111450,111451],{"class":207}," mujoco-reacher\n",[92,111453,111454,111456,111458,111460],{"class":94,"line":1158},[92,111455,23811],{"class":1942},[92,111457,23814],{"class":207},[92,111459,100905],{"class":207},[92,111461,100908],{"class":207},[38,111463,100979],{},[46,111465,111466,111469,111472],{},[49,111467,111468],{},"本章使用低维状态，不使用图像输入。",[49,111470,111471],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[49,111473,111474,111475,315,111477,315,111479,111481],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[89,111476,104005],{},[89,111478,104335],{},[89,111480,103655],{}," 的方法一致。",[33,111483,101020],{"id":101019},[38,111485,111486],{},"Reacher 任务核心:",[83,111488,111491],{"className":111489,"code":111490,"language":5167,"meta":10},[5165],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[89,111492,111490],{"__ignoreMap":10},[38,111494,111495],{},"读取 site 世界坐标:",[83,111497,111499],{"className":30359,"code":111498,"language":30361,"meta":10,"style":10},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[89,111500,111501,111514],{"__ignoreMap":10},[92,111502,111503,111505,111507,111509,111512],{"class":94,"line":95},[92,111504,103609],{"class":102},[92,111506,148],{"class":98},[92,111508,103380],{"class":102},[92,111510,111511],{"class":207},"\"tip\"",[92,111513,109],{"class":102},[92,111515,111516,111519,111521],{"class":94,"line":11},[92,111517,111518],{"class":102},"tip_pos ",[92,111520,148],{"class":98},[92,111522,111523],{"class":102}," data.site_xpos[site_id]\n",[63,111525,111527],{"id":111526},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[38,111529,111530,111531,111533],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[89,111532,104005],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[83,111535,111537],{"className":30359,"code":111536,"language":30361,"meta":10,"style":10},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[89,111538,111539,111549],{"__ignoreMap":10},[92,111540,111541,111544,111546],{"class":94,"line":95},[92,111542,111543],{"class":102},"tip ",[92,111545,148],{"class":98},[92,111547,111548],{"class":102}," data.site_xpos[tip_site_id]\n",[92,111550,111551,111554,111556],{"class":94,"line":11},[92,111552,111553],{"class":102},"target ",[92,111555,148],{"class":98},[92,111557,111558],{"class":102}," data.site_xpos[target_site_id]\n",[38,111560,111561],{},"这样 reward 就很容易写：",[83,111563,111565],{"className":30359,"code":111564,"language":30361,"meta":10,"style":10},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[89,111566,111567,111582],{"__ignoreMap":10},[92,111568,111569,111572,111574,111577,111579],{"class":94,"line":95},[92,111570,111571],{"class":102},"dist ",[92,111573,148],{"class":98},[92,111575,111576],{"class":102}," np.linalg.norm(tip ",[92,111578,635],{"class":98},[92,111580,111581],{"class":102}," target)\n",[92,111583,111584,111586,111588,111590],{"class":94,"line":11},[92,111585,110980],{"class":102},[92,111587,148],{"class":98},[92,111589,52251],{"class":98},[92,111591,111592],{"class":102},"dist\n",[38,111594,111595,111596,111599],{},"距离越小，",[89,111597,111598],{},"-dist"," 越接近 0，奖励越高。",[63,111601,111602],{"id":111602},"两关节机械臂的状态",[38,111604,111605],{},"这个模型有两个 hinge joint：",[83,111607,111610],{"className":111608,"code":111609,"language":5167,"meta":10},[5165],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[89,111611,111609],{"__ignoreMap":10},[38,111613,111614],{},"再加上末端和目标位置：",[83,111616,111619],{"className":111617,"code":111618,"language":5167,"meta":10},[5165],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[89,111620,111618],{"__ignoreMap":10},[38,111622,111623],{},"总维度：",[83,111625,111628],{"className":111626,"code":111627,"language":5167,"meta":10},[5165],"2 + 2 + 3 + 3 = 10\n",[89,111629,111627],{"__ignoreMap":10},[63,111631,111633],{"id":111632},"为什么-gravity-是-0","为什么 gravity 是 0",[38,111635,111636],{},"本章把重力设为：",[83,111638,111640],{"className":53047,"code":111639,"language":53049,"meta":10,"style":10},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[89,111641,111642],{"__ignoreMap":10},[92,111643,111644,111646,111648,111650,111652,111654,111656,111658,111660],{"class":94,"line":95},[92,111645,1013],{"class":102},[92,111647,69146],{"class":51280},[92,111649,101169],{"class":1942},[92,111651,148],{"class":102},[92,111653,101174],{"class":207},[92,111655,101177],{"class":1942},[92,111657,148],{"class":102},[92,111659,103746],{"class":207},[92,111661,101119],{"class":102},[38,111663,111664],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[33,111666,101228],{"id":101227},[83,111668,111670],{"className":30359,"code":111669,"language":30361,"meta":10,"style":10},"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",[89,111671,111672,111678,111688,111692,111696,111704,111709,111714,111718,111722,111727,111732,111736,111741,111746,111751,111755,111760,111765,111770,111775,111779,111783,111787,111791,111795,111800,111805,111809,111813,111817,111821,111825,111840,111849,111861,111884,111891,111895,111899,111909,111923,111937,111944,111948,111952,111966,111978,111990,112003,112018,112035,112039,112043,112055,112067,112075,112083,112087,112103,112108,112121,112134,112149,112153,112188,112220,112224,112228,112237,112241,112257,112267,112278,112294,112310,112326,112342,112346,112364,112384,112403,112407,112411,112423],{"__ignoreMap":10},[92,111673,111674,111676],{"class":94,"line":95},[92,111675,30373],{"class":98},[92,111677,101276],{"class":102},[92,111679,111680,111682,111684,111686],{"class":94,"line":11},[92,111681,30373],{"class":98},[92,111683,31361],{"class":102},[92,111685,31364],{"class":98},[92,111687,31367],{"class":102},[92,111689,111690],{"class":94,"line":1158},[92,111691,2379],{"emptyLinePlaceholder":17},[92,111693,111694],{"class":94,"line":1173},[92,111695,2379],{"emptyLinePlaceholder":17},[92,111697,111698,111700,111702],{"class":94,"line":1179},[92,111699,101289],{"class":151},[92,111701,13544],{"class":98},[92,111703,101294],{"class":207},[92,111705,111706],{"class":94,"line":1193},[92,111707,111708],{"class":207},"\u003Cmujoco model=\"two_link_reacher\">\n",[92,111710,111711],{"class":94,"line":1199},[92,111712,111713],{"class":207},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[92,111715,111716],{"class":94,"line":1290},[92,111717,2379],{"emptyLinePlaceholder":17},[92,111719,111720],{"class":94,"line":1296},[92,111721,101313],{"class":207},[92,111723,111724],{"class":94,"line":1308},[92,111725,111726],{"class":207},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[92,111728,111729],{"class":94,"line":1591},[92,111730,111731],{"class":207},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[92,111733,111734],{"class":94,"line":1596},[92,111735,2379],{"emptyLinePlaceholder":17},[92,111737,111738],{"class":94,"line":1602},[92,111739,111740],{"class":207},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[92,111742,111743],{"class":94,"line":1607},[92,111744,111745],{"class":207},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[92,111747,111748],{"class":94,"line":1621},[92,111749,111750],{"class":207},"      \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",[92,111752,111753],{"class":94,"line":1626},[92,111754,2379],{"emptyLinePlaceholder":17},[92,111756,111757],{"class":94,"line":1632},[92,111758,111759],{"class":207},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[92,111761,111762],{"class":94,"line":1653},[92,111763,111764],{"class":207},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[92,111766,111767],{"class":94,"line":1658},[92,111768,111769],{"class":207},"        \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",[92,111771,111772],{"class":94,"line":1672},[92,111773,111774],{"class":207},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[92,111776,111777],{"class":94,"line":1677},[92,111778,106413],{"class":207},[92,111780,111781],{"class":94,"line":1706},[92,111782,101342],{"class":207},[92,111784,111785],{"class":94,"line":1711},[92,111786,101347],{"class":207},[92,111788,111789],{"class":94,"line":1728},[92,111790,2379],{"emptyLinePlaceholder":17},[92,111792,111793],{"class":94,"line":1733},[92,111794,106430],{"class":207},[92,111796,111797],{"class":94,"line":1738},[92,111798,111799],{"class":207},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[92,111801,111802],{"class":94,"line":1743},[92,111803,111804],{"class":207},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[92,111806,111807],{"class":94,"line":1757},[92,111808,106440],{"class":207},[92,111810,111811],{"class":94,"line":1762},[92,111812,101352],{"class":207},[92,111814,111815],{"class":94,"line":2556},[92,111816,95678],{"class":207},[92,111818,111819],{"class":94,"line":2570},[92,111820,2379],{"emptyLinePlaceholder":17},[92,111822,111823],{"class":94,"line":2578},[92,111824,2379],{"emptyLinePlaceholder":17},[92,111826,111827,111829,111832,111835,111837],{"class":94,"line":2583},[92,111828,31928],{"class":98},[92,111830,111831],{"class":1942}," site_position",[92,111833,111834],{"class":102},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[92,111836,1278],{"class":151},[92,111838,111839],{"class":102},") -> np.ndarray:\n",[92,111841,111842,111844,111846],{"class":94,"line":2589},[92,111843,103375],{"class":102},[92,111845,148],{"class":98},[92,111847,111848],{"class":102}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[92,111850,111851,111853,111855,111857,111859],{"class":94,"line":2595},[92,111852,3080],{"class":98},[92,111854,103424],{"class":102},[92,111856,1013],{"class":98},[92,111858,4072],{"class":151},[92,111860,3718],{"class":102},[92,111862,111863,111865,111867,111869,111871,111874,111876,111878,111880,111882],{"class":94,"line":2600},[92,111864,103407],{"class":98},[92,111866,103410],{"class":151},[92,111868,103],{"class":102},[92,111870,155],{"class":98},[92,111872,111873],{"class":207},"\"site not found: ",[92,111875,999],{"class":151},[92,111877,79790],{"class":102},[92,111879,1049],{"class":151},[92,111881,354],{"class":207},[92,111883,109],{"class":102},[92,111885,111886,111888],{"class":94,"line":7928},[92,111887,4069],{"class":98},[92,111889,111890],{"class":102}," data.site_xpos[site_id].copy()\n",[92,111892,111893],{"class":94,"line":7952},[92,111894,2379],{"emptyLinePlaceholder":17},[92,111896,111897],{"class":94,"line":7957},[92,111898,2379],{"emptyLinePlaceholder":17},[92,111900,111901,111903,111906],{"class":94,"line":7963},[92,111902,31928],{"class":98},[92,111904,111905],{"class":1942}," get_obs",[92,111907,111908],{"class":102},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[92,111910,111911,111914,111916,111919,111921],{"class":94,"line":7990},[92,111912,111913],{"class":102},"    tip ",[92,111915,148],{"class":98},[92,111917,111918],{"class":102}," site_position(model, data, ",[92,111920,111511],{"class":207},[92,111922,109],{"class":102},[92,111924,111925,111928,111930,111932,111935],{"class":94,"line":7995},[92,111926,111927],{"class":102},"    target ",[92,111929,148],{"class":98},[92,111931,111918],{"class":102},[92,111933,111934],{"class":207},"\"target\"",[92,111936,109],{"class":102},[92,111938,111939,111941],{"class":94,"line":8001},[92,111940,4069],{"class":98},[92,111942,111943],{"class":102}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[92,111945,111946],{"class":94,"line":8013},[92,111947,2379],{"emptyLinePlaceholder":17},[92,111949,111950],{"class":94,"line":8025},[92,111951,2379],{"emptyLinePlaceholder":17},[92,111953,111954,111956,111959,111962,111964],{"class":94,"line":8037},[92,111955,31928],{"class":98},[92,111957,111958],{"class":1942}," reward",[92,111960,111961],{"class":102},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[92,111963,142],{"class":151},[92,111965,3718],{"class":102},[92,111967,111968,111970,111972,111974,111976],{"class":94,"line":9696},[92,111969,111913],{"class":102},[92,111971,148],{"class":98},[92,111973,111918],{"class":102},[92,111975,111511],{"class":207},[92,111977,109],{"class":102},[92,111979,111980,111982,111984,111986,111988],{"class":94,"line":9721},[92,111981,111927],{"class":102},[92,111983,148],{"class":98},[92,111985,111918],{"class":102},[92,111987,111934],{"class":207},[92,111989,109],{"class":102},[92,111991,111992,111995,111997,111999,112001],{"class":94,"line":9744},[92,111993,111994],{"class":102},"    dist ",[92,111996,148],{"class":98},[92,111998,111576],{"class":102},[92,112000,635],{"class":98},[92,112002,111581],{"class":102},[92,112004,112005,112008,112010,112013,112015],{"class":94,"line":9768},[92,112006,112007],{"class":102},"    control_cost ",[92,112009,148],{"class":98},[92,112011,112012],{"class":151}," 0.01",[92,112014,6498],{"class":98},[92,112016,112017],{"class":102}," np.sum(np.square(data.ctrl))\n",[92,112019,112020,112022,112024,112026,112028,112030,112032],{"class":94,"line":9773},[92,112021,4069],{"class":98},[92,112023,109772],{"class":151},[92,112025,103],{"class":102},[92,112027,635],{"class":98},[92,112029,111571],{"class":102},[92,112031,635],{"class":98},[92,112033,112034],{"class":102}," control_cost)\n",[92,112036,112037],{"class":94,"line":9778},[92,112038,2379],{"emptyLinePlaceholder":17},[92,112040,112041],{"class":94,"line":9783},[92,112042,2379],{"emptyLinePlaceholder":17},[92,112044,112045,112047,112049,112051,112053],{"class":94,"line":9792},[92,112046,31928],{"class":98},[92,112048,1952],{"class":1942},[92,112050,101373],{"class":102},[92,112052,95666],{"class":151},[92,112054,3718],{"class":102},[92,112056,112057,112059,112061,112063,112065],{"class":94,"line":9797},[92,112058,101382],{"class":102},[92,112060,148],{"class":98},[92,112062,101387],{"class":102},[92,112064,101289],{"class":151},[92,112066,109],{"class":102},[92,112068,112069,112071,112073],{"class":94,"line":9803},[92,112070,101396],{"class":102},[92,112072,148],{"class":98},[92,112074,101401],{"class":102},[92,112076,112077,112079,112081],{"class":94,"line":9824},[92,112078,110128],{"class":102},[92,112080,148],{"class":98},[92,112082,104736],{"class":151},[92,112084,112085],{"class":94,"line":9830},[92,112086,2379],{"emptyLinePlaceholder":17},[92,112088,112089,112091,112093,112095,112097,112099,112101],{"class":94,"line":9844},[92,112090,3180],{"class":98},[92,112092,31597],{"class":102},[92,112094,26024],{"class":98},[92,112096,32424],{"class":151},[92,112098,103],{"class":102},[92,112100,65054],{"class":151},[92,112102,30767],{"class":102},[92,112104,112105],{"class":94,"line":9850},[92,112106,112107],{"class":102},"        mujoco.mj_forward(model, data)\n",[92,112109,112110,112113,112115,112117,112119],{"class":94,"line":9877},[92,112111,112112],{"class":102},"        tip ",[92,112114,148],{"class":98},[92,112116,111918],{"class":102},[92,112118,111511],{"class":207},[92,112120,109],{"class":102},[92,112122,112123,112126,112128,112130,112132],{"class":94,"line":9886},[92,112124,112125],{"class":102},"        target ",[92,112127,148],{"class":98},[92,112129,111918],{"class":102},[92,112131,111934],{"class":207},[92,112133,109],{"class":102},[92,112135,112136,112139,112141,112144,112146],{"class":94,"line":9892},[92,112137,112138],{"class":102},"        error ",[92,112140,148],{"class":98},[92,112142,112143],{"class":102}," target ",[92,112145,635],{"class":98},[92,112147,112148],{"class":102}," tip\n",[92,112150,112151],{"class":94,"line":9900},[92,112152,2379],{"emptyLinePlaceholder":17},[92,112154,112155,112157,112159,112161,112163,112166,112168,112170,112173,112175,112178,112180,112182,112184,112186],{"class":94,"line":9905},[92,112156,106592],{"class":102},[92,112158,294],{"class":151},[92,112160,4422],{"class":102},[92,112162,148],{"class":98},[92,112164,112165],{"class":102}," np.clip(",[92,112167,105235],{"class":151},[92,112169,6498],{"class":98},[92,112171,112172],{"class":102}," error[",[92,112174,180],{"class":151},[92,112176,112177],{"class":102},"], ",[92,112179,635],{"class":98},[92,112181,102378],{"class":151},[92,112183,12415],{"class":102},[92,112185,102378],{"class":151},[92,112187,109],{"class":102},[92,112189,112190,112192,112194,112196,112198,112200,112202,112204,112206,112208,112210,112212,112214,112216,112218],{"class":94,"line":16584},[92,112191,106592],{"class":102},[92,112193,320],{"class":151},[92,112195,4422],{"class":102},[92,112197,148],{"class":98},[92,112199,112165],{"class":102},[92,112201,105235],{"class":151},[92,112203,6498],{"class":98},[92,112205,112172],{"class":102},[92,112207,294],{"class":151},[92,112209,112177],{"class":102},[92,112211,635],{"class":98},[92,112213,102378],{"class":151},[92,112215,12415],{"class":102},[92,112217,102378],{"class":151},[92,112219,109],{"class":102},[92,112221,112222],{"class":94,"line":16590},[92,112223,2379],{"emptyLinePlaceholder":17},[92,112225,112226],{"class":94,"line":16613},[92,112227,101491],{"class":102},[92,112229,112230,112232,112234],{"class":94,"line":16619},[92,112231,110272],{"class":102},[92,112233,9457],{"class":98},[92,112235,112236],{"class":102}," reward(model, data)\n",[92,112238,112239],{"class":94,"line":16642},[92,112240,2379],{"emptyLinePlaceholder":17},[92,112242,112243,112245,112247,112249,112251,112253,112255],{"class":94,"line":16656},[92,112244,2476],{"class":98},[92,112246,31597],{"class":102},[92,112248,431],{"class":98},[92,112250,5734],{"class":151},[92,112252,101534],{"class":98},[92,112254,4072],{"class":151},[92,112256,3718],{"class":102},[92,112258,112259,112262,112264],{"class":94,"line":16676},[92,112260,112261],{"class":102},"            obs ",[92,112263,148],{"class":98},[92,112265,112266],{"class":102}," get_obs(model, data)\n",[92,112268,112269,112271,112273,112275],{"class":94,"line":16682},[92,112270,34631],{"class":151},[92,112272,103],{"class":102},[92,112274,110306],{"class":207},[92,112276,112277],{"class":102},", step)\n",[92,112279,112280,112282,112284,112287,112290,112292],{"class":94,"line":16693},[92,112281,34631],{"class":151},[92,112283,103],{"class":102},[92,112285,112286],{"class":207},"\"  tip:\"",[92,112288,112289],{"class":102},", np.round(tip, ",[92,112291,174],{"class":151},[92,112293,30478],{"class":102},[92,112295,112296,112298,112300,112303,112306,112308],{"class":94,"line":16716},[92,112297,34631],{"class":151},[92,112299,103],{"class":102},[92,112301,112302],{"class":207},"\"  target:\"",[92,112304,112305],{"class":102},", np.round(target, ",[92,112307,174],{"class":151},[92,112309,30478],{"class":102},[92,112311,112312,112314,112316,112319,112322,112324],{"class":94,"line":16738},[92,112313,34631],{"class":151},[92,112315,103],{"class":102},[92,112317,112318],{"class":207},"\"  ctrl:\"",[92,112320,112321],{"class":102},", np.round(data.ctrl.copy(), ",[92,112323,174],{"class":151},[92,112325,30478],{"class":102},[92,112327,112328,112330,112332,112335,112338,112340],{"class":94,"line":16743},[92,112329,34631],{"class":151},[92,112331,103],{"class":102},[92,112333,112334],{"class":207},"\"  obs_dim:\"",[92,112336,112337],{"class":102},", obs.shape[",[92,112339,294],{"class":151},[92,112341,4636],{"class":102},[92,112343,112344],{"class":94,"line":16749},[92,112345,2379],{"emptyLinePlaceholder":17},[92,112347,112348,112350,112352,112354,112356,112358,112360,112362],{"class":94,"line":16763},[92,112349,31280],{"class":151},[92,112351,103],{"class":102},[92,112353,110351],{"class":207},[92,112355,12415],{"class":102},[92,112357,31999],{"class":151},[92,112359,110358],{"class":102},[92,112361,174],{"class":151},[92,112363,30478],{"class":102},[92,112365,112366,112368,112370,112373,112376,112378,112380,112382],{"class":94,"line":16776},[92,112367,31280],{"class":151},[92,112369,103],{"class":102},[92,112371,112372],{"class":207},"\"final tip:\"",[92,112374,112375],{"class":102},", np.round(site_position(model, data, ",[92,112377,111511],{"class":207},[92,112379,110320],{"class":102},[92,112381,174],{"class":151},[92,112383,30478],{"class":102},[92,112385,112386,112388,112390,112393,112395,112397,112399,112401],{"class":94,"line":16781},[92,112387,31280],{"class":151},[92,112389,103],{"class":102},[92,112391,112392],{"class":207},"\"target:\"",[92,112394,112375],{"class":102},[92,112396,111934],{"class":207},[92,112398,110320],{"class":102},[92,112400,174],{"class":151},[92,112402,30478],{"class":102},[92,112404,112405],{"class":94,"line":16795},[92,112406,2379],{"emptyLinePlaceholder":17},[92,112408,112409],{"class":94,"line":16800},[92,112410,2379],{"emptyLinePlaceholder":17},[92,112412,112413,112415,112417,112419,112421],{"class":94,"line":16806},[92,112414,1510],{"class":98},[92,112416,31201],{"class":151},[92,112418,101534],{"class":98},[92,112420,101537],{"class":207},[92,112422,3718],{"class":102},[92,112424,112425],{"class":94,"line":16811},[92,112426,101544],{"class":102},[38,112428,103545],{},[83,112430,112432],{"className":23802,"code":112431,"language":23804,"meta":10,"style":10},"touch ch7_reacher.py\n",[89,112433,112434],{"__ignoreMap":10},[92,112435,112436,112438],{"class":94,"line":95},[92,112437,101258],{"class":1942},[92,112439,112440],{"class":207}," ch7_reacher.py\n",[38,112442,110419],{},[83,112444,112446],{"className":23802,"code":112445,"language":23804,"meta":10,"style":10},"python ch7_reacher.py\n",[89,112447,112448],{"__ignoreMap":10},[92,112449,112450,112452],{"class":94,"line":95},[92,112451,30361],{"class":1942},[92,112453,112440],{"class":207},[63,112455,101547],{"id":101547},[38,112457,112458],{},"读取 site 坐标：",[83,112460,112462],{"className":30359,"code":112461,"language":30361,"meta":10,"style":10},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[89,112463,112464],{"__ignoreMap":10},[92,112465,112466,112468,112470,112472,112474],{"class":94,"line":95},[92,112467,31928],{"class":98},[92,112469,111831],{"class":1942},[92,112471,111834],{"class":102},[92,112473,1278],{"class":151},[92,112475,111839],{"class":102},[38,112477,112478],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[38,112480,110435],{},[83,112482,112484],{"className":30359,"code":112483,"language":30361,"meta":10,"style":10},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[89,112485,112486],{"__ignoreMap":10},[92,112487,112488,112490],{"class":94,"line":95},[92,112489,17026],{"class":98},[92,112491,111943],{"class":102},[38,112493,112494],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[38,112496,109760],{},[83,112498,112500],{"className":30359,"code":112499,"language":30361,"meta":10,"style":10},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[89,112501,112502,112514,112527],{"__ignoreMap":10},[92,112503,112504,112506,112508,112510,112512],{"class":94,"line":95},[92,112505,111571],{"class":102},[92,112507,148],{"class":98},[92,112509,111576],{"class":102},[92,112511,635],{"class":98},[92,112513,111581],{"class":102},[92,112515,112516,112519,112521,112523,112525],{"class":94,"line":11},[92,112517,112518],{"class":102},"control_cost ",[92,112520,148],{"class":98},[92,112522,112012],{"class":151},[92,112524,6498],{"class":98},[92,112526,112017],{"class":102},[92,112528,112529,112531,112533,112535,112537,112539,112541],{"class":94,"line":1158},[92,112530,17026],{"class":98},[92,112532,109772],{"class":151},[92,112534,103],{"class":102},[92,112536,635],{"class":98},[92,112538,111571],{"class":102},[92,112540,635],{"class":98},[92,112542,112034],{"class":102},[38,112544,112545],{},"奖励由两部分组成：",[46,112547,112548,112553],{},[49,112549,112550,112552],{},[89,112551,111598],{},"：末端离目标越远，奖励越低。",[49,112554,112555,112558],{},[89,112556,112557],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[38,112560,112561],{},"简单控制器：",[83,112563,112565],{"className":30359,"code":112564,"language":30361,"meta":10,"style":10},"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",[89,112566,112567,112580,112612],{"__ignoreMap":10},[92,112568,112569,112572,112574,112576,112578],{"class":94,"line":95},[92,112570,112571],{"class":102},"error ",[92,112573,148],{"class":98},[92,112575,112143],{"class":102},[92,112577,635],{"class":98},[92,112579,112148],{"class":102},[92,112581,112582,112584,112586,112588,112590,112592,112594,112596,112598,112600,112602,112604,112606,112608,112610],{"class":94,"line":11},[92,112583,105846],{"class":102},[92,112585,294],{"class":151},[92,112587,4422],{"class":102},[92,112589,148],{"class":98},[92,112591,112165],{"class":102},[92,112593,105235],{"class":151},[92,112595,6498],{"class":98},[92,112597,112172],{"class":102},[92,112599,180],{"class":151},[92,112601,112177],{"class":102},[92,112603,635],{"class":98},[92,112605,102378],{"class":151},[92,112607,12415],{"class":102},[92,112609,102378],{"class":151},[92,112611,109],{"class":102},[92,112613,112614,112616,112618,112620,112622,112624,112626,112628,112630,112632,112634,112636,112638,112640,112642],{"class":94,"line":1158},[92,112615,105846],{"class":102},[92,112617,320],{"class":151},[92,112619,4422],{"class":102},[92,112621,148],{"class":98},[92,112623,112165],{"class":102},[92,112625,105235],{"class":151},[92,112627,6498],{"class":98},[92,112629,112172],{"class":102},[92,112631,294],{"class":151},[92,112633,112177],{"class":102},[92,112635,635],{"class":98},[92,112637,102378],{"class":151},[92,112639,12415],{"class":102},[92,112641,102378],{"class":151},[92,112643,109],{"class":102},[38,112645,112646],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[63,112648,101683],{"id":101683},[83,112650,112651],{"className":30359,"code":112461,"language":30361,"meta":10,"style":10},[89,112652,112653],{"__ignoreMap":10},[92,112654,112655,112657,112659,112661,112663],{"class":94,"line":95},[92,112656,31928],{"class":98},[92,112658,111831],{"class":1942},[92,112660,111834],{"class":102},[92,112662,1278],{"class":151},[92,112664,111839],{"class":102},[38,112666,112667,112668,112670,112671,82519,112673,28366],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[89,112669,79790],{}," 是 site 的名字，比如 ",[89,112672,111511],{},[89,112674,111934],{},[83,112676,112678],{"className":30359,"code":112677,"language":30361,"meta":10,"style":10},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[89,112679,112680],{"__ignoreMap":10},[92,112681,112682,112684,112686],{"class":94,"line":95},[92,112683,103609],{"class":102},[92,112685,148],{"class":98},[92,112687,111848],{"class":102},[38,112689,112690],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[83,112692,112694],{"className":30359,"code":112693,"language":30361,"meta":10,"style":10},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[89,112695,112696,112708],{"__ignoreMap":10},[92,112697,112698,112700,112702,112704,112706],{"class":94,"line":95},[92,112699,1510],{"class":98},[92,112701,103424],{"class":102},[92,112703,1013],{"class":98},[92,112705,4072],{"class":151},[92,112707,3718],{"class":102},[92,112709,112710,112712,112714,112716,112718,112720,112722,112724,112726,112728],{"class":94,"line":11},[92,112711,103870],{"class":98},[92,112713,103410],{"class":151},[92,112715,103],{"class":102},[92,112717,155],{"class":98},[92,112719,111873],{"class":207},[92,112721,999],{"class":151},[92,112723,79790],{"class":102},[92,112725,1049],{"class":151},[92,112727,354],{"class":207},[92,112729,109],{"class":102},[38,112731,112732,112733,112736,112737,112739],{},"如果 site 没找到，就主动报错。",[89,112734,112735],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[89,112738,79790],{}," 的值放进字符串里。",[83,112741,112743],{"className":30359,"code":112742,"language":30361,"meta":10,"style":10},"return data.site_xpos[site_id].copy()\n",[89,112744,112745],{"__ignoreMap":10},[92,112746,112747,112749],{"class":94,"line":95},[92,112748,17026],{"class":98},[92,112750,111890],{"class":102},[38,112752,112753,112754,112756,112757,112760],{},"返回这个 site 的世界坐标。",[89,112755,103655],{}," 里的每一行都是一个 site 的 ",[89,112758,112759],{},"(x, y, z)"," 坐标。",[83,112762,112764],{"className":30359,"code":112763,"language":30361,"meta":10,"style":10},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[89,112765,112766],{"__ignoreMap":10},[92,112767,112768,112770,112772],{"class":94,"line":95},[92,112769,31928],{"class":98},[92,112771,111905],{"class":1942},[92,112773,111908],{"class":102},[38,112775,112776],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[83,112778,112780],{"className":30359,"code":112779,"language":30361,"meta":10,"style":10},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[89,112781,112782,112794],{"__ignoreMap":10},[92,112783,112784,112786,112788,112790,112792],{"class":94,"line":95},[92,112785,111543],{"class":102},[92,112787,148],{"class":98},[92,112789,111918],{"class":102},[92,112791,111511],{"class":207},[92,112793,109],{"class":102},[92,112795,112796,112798,112800,112802,112804],{"class":94,"line":11},[92,112797,111553],{"class":102},[92,112799,148],{"class":98},[92,112801,111918],{"class":102},[92,112803,111934],{"class":207},[92,112805,109],{"class":102},[38,112807,112808],{},"分别读取末端点和目标点的世界坐标。",[83,112810,112811],{"className":30359,"code":112483,"language":30361,"meta":10,"style":10},[89,112812,112813],{"__ignoreMap":10},[92,112814,112815,112817],{"class":94,"line":95},[92,112816,17026],{"class":98},[92,112818,111943],{"class":102},[38,112820,112821],{},"把四部分拼成一个观测数组：",[83,112823,112826],{"className":112824,"code":112825,"language":5167,"meta":10},[5165],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[89,112827,112825],{"__ignoreMap":10},[83,112829,112831],{"className":30359,"code":112830,"language":30361,"meta":10,"style":10},"dist = np.linalg.norm(tip - target)\n",[89,112832,112833],{"__ignoreMap":10},[92,112834,112835,112837,112839,112841,112843],{"class":94,"line":95},[92,112836,111571],{"class":102},[92,112838,148],{"class":98},[92,112840,111576],{"class":102},[92,112842,635],{"class":98},[92,112844,111581],{"class":102},[38,112846,112847,112848,112851,112852,112855],{},"计算 tip 到 target 的距离。",[89,112849,112850],{},"tip - target"," 得到一个三维向量，",[89,112853,112854],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[38,112857,14613],{},[83,112859,112862],{"className":112860,"code":112861,"language":5167,"meta":10},[5165],"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",[89,112863,112861],{"__ignoreMap":10},[83,112865,112867],{"className":30359,"code":112866,"language":30361,"meta":10,"style":10},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[89,112868,112869],{"__ignoreMap":10},[92,112870,112871,112873,112875,112877,112879],{"class":94,"line":95},[92,112872,112518],{"class":102},[92,112874,148],{"class":98},[92,112876,112012],{"class":151},[92,112878,6498],{"class":98},[92,112880,112017],{"class":102},[38,112882,112883,112884,112887,112888,112891],{},"计算动作惩罚。",[89,112885,112886],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[89,112889,112890],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[83,112893,112895],{"className":30359,"code":112894,"language":30361,"meta":10,"style":10},"return float(-dist - control_cost)\n",[89,112896,112897],{"__ignoreMap":10},[92,112898,112899,112901,112903,112905,112907,112909,112911],{"class":94,"line":95},[92,112900,17026],{"class":98},[92,112902,109772],{"class":151},[92,112904,103],{"class":102},[92,112906,635],{"class":98},[92,112908,111571],{"class":102},[92,112910,635],{"class":98},[92,112912,112034],{"class":102},[38,112914,112915],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[83,112917,112918],{"className":30359,"code":110778,"language":30361,"meta":10,"style":10},[89,112919,112920],{"__ignoreMap":10},[92,112921,112922,112924,112926],{"class":94,"line":95},[92,112923,110785],{"class":102},[92,112925,148],{"class":98},[92,112927,104736],{"class":151},[38,112929,112930],{},"累计奖励变量，记录整个运行过程的总分。",[83,112932,112934],{"className":30359,"code":112933,"language":30361,"meta":10,"style":10},"for step in range(500):\n",[89,112935,112936],{"__ignoreMap":10},[92,112937,112938,112940,112942,112944,112946,112948,112950],{"class":94,"line":95},[92,112939,3004],{"class":98},[92,112941,31597],{"class":102},[92,112943,26024],{"class":98},[92,112945,32424],{"class":151},[92,112947,103],{"class":102},[92,112949,65054],{"class":151},[92,112951,30767],{"class":102},[38,112953,112954],{},"运行 500 个控制步。",[83,112956,112957],{"className":30359,"code":104518,"language":30361,"meta":10,"style":10},[89,112958,112959],{"__ignoreMap":10},[92,112960,112961],{"class":94,"line":95},[92,112962,104518],{"class":102},[38,112964,112965,112966,100993,112968,112970],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[89,112967,103206],{},[89,112969,103209],{}," 是当前状态下的坐标。",[83,112972,112974],{"className":30359,"code":112973,"language":30361,"meta":10,"style":10},"error = target - tip\n",[89,112975,112976],{"__ignoreMap":10},[92,112977,112978,112980,112982,112984,112986],{"class":94,"line":95},[92,112979,112571],{"class":102},[92,112981,148],{"class":98},[92,112983,112143],{"class":102},[92,112985,635],{"class":98},[92,112987,112148],{"class":102},[38,112989,112990],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[83,112992,112994],{"className":30359,"code":112993,"language":30361,"meta":10,"style":10},"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",[89,112995,112996,113028],{"__ignoreMap":10},[92,112997,112998,113000,113002,113004,113006,113008,113010,113012,113014,113016,113018,113020,113022,113024,113026],{"class":94,"line":95},[92,112999,105846],{"class":102},[92,113001,294],{"class":151},[92,113003,4422],{"class":102},[92,113005,148],{"class":98},[92,113007,112165],{"class":102},[92,113009,105235],{"class":151},[92,113011,6498],{"class":98},[92,113013,112172],{"class":102},[92,113015,180],{"class":151},[92,113017,112177],{"class":102},[92,113019,635],{"class":98},[92,113021,102378],{"class":151},[92,113023,12415],{"class":102},[92,113025,102378],{"class":151},[92,113027,109],{"class":102},[92,113029,113030,113032,113034,113036,113038,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058],{"class":94,"line":11},[92,113031,105846],{"class":102},[92,113033,320],{"class":151},[92,113035,4422],{"class":102},[92,113037,148],{"class":98},[92,113039,112165],{"class":102},[92,113041,105235],{"class":151},[92,113043,6498],{"class":98},[92,113045,112172],{"class":102},[92,113047,294],{"class":151},[92,113049,112177],{"class":102},[92,113051,635],{"class":98},[92,113053,102378],{"class":151},[92,113055,12415],{"class":102},[92,113057,102378],{"class":151},[92,113059,109],{"class":102},[38,113061,113062,113063,113066],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[89,113064,113065],{},"error -> ctrl -> step"," 的流程。",[83,113068,113069],{"className":30359,"code":104480,"language":30361,"meta":10,"style":10},[89,113070,113071],{"__ignoreMap":10},[92,113072,113073],{"class":94,"line":95},[92,113074,104480],{"class":102},[38,113076,113077],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[83,113079,113081],{"className":30359,"code":113080,"language":30361,"meta":10,"style":10},"obs = get_obs(model, data)\n",[89,113082,113083],{"__ignoreMap":10},[92,113084,113085,113087,113089],{"class":94,"line":95},[92,113086,110829],{"class":102},[92,113088,148],{"class":98},[92,113090,112266],{"class":102},[38,113092,113093,113094,113097],{},"读取最新观测。后面打印 ",[89,113095,113096],{},"obs.shape[0]","，用来确认观测维度是 10。",[33,113099,102291],{"id":102290},[38,113101,113102],{},"观测维度为:",[83,113104,113107],{"className":113105,"code":113106,"language":5167,"meta":10},[5165],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[89,113108,113106],{"__ignoreMap":10},[38,113110,113111],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[38,113113,113114],{},"程序每 100 步打印：",[83,113116,113119],{"className":113117,"code":113118,"language":5167,"meta":10},[5165],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[89,113120,113118],{"__ignoreMap":10},[38,113122,113123,113124,113126],{},"如果控制有效，你应该看到最终 ",[89,113125,103206],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[33,113128,102323],{"id":102322},[46,113130,113131,113134,113137,113143,113149,113156,113166],{},[49,113132,113133],{},"修改目标点位置。",[49,113135,113136],{},"重新运行，观察最终 tip 是否变化。",[49,113138,113139,113140,113142],{},"把 gravity 改成 ",[89,113141,102564],{},"，观察控制是否变差。",[49,113144,111156,113145,111160,113147,28366],{},[89,113146,102133],{},[89,113148,180],{},[49,113150,102386,113151,102389,113153,113155],{},[89,113152,110571],{},[89,113154,107282],{},"，观察机械臂是否更难移动。",[49,113157,102386,113158,82510,113160,102389,113162,113165],{},[89,113159,103209],{},[89,113161,104121],{},[89,113163,113164],{},"0.2 0 0.6","，观察 reward 和 final tip。",[49,113167,113168],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[33,113170,102428],{"id":102427},[63,113172,113174],{"id":113173},"site-not-found",[89,113175,113176],{},"site not found",[38,113178,113179,113180,100993,113183,28366],{},"检查 XML 中是否有 ",[89,113181,113182],{},"site name=\"tip\"",[89,113184,113185],{},"site name=\"target\"",[63,113187,113188],{"id":113188},"机械臂完全不动",[38,113190,102498],{},[46,113192,113193,113198,113201,113206],{},[49,113194,113195,113197],{},[89,113196,102133],{}," 是否为 2",[49,113199,113200],{},"actuator 是否引用正确 joint",[49,113202,113203,113205],{},[89,113204,101051],{}," 是否被赋值",[49,113207,113208,113209],{},"是否执行了 ",[89,113210,100660],{},[63,113212,113213],{"id":113213},"控制效果不好",[38,113215,113216],{},"正常。本章重点不是控制器最优，而是任务结构:",[83,113218,113221],{"className":113219,"code":113220,"language":5167,"meta":10},[5165],"obs → action → mj_step → reward → next_obs\n",[89,113222,113220],{"__ignoreMap":10},[63,113224,113226],{"id":113225},"tip-坐标不变化","tip 坐标不变化",[38,113228,102550],{},[46,113230,113231,113236,113244,113253],{},[49,113232,113233,113234,28366],{},"是否每步调用了 ",[89,113235,100660],{},[49,113237,113238,113239,100993,113241,28366],{},"是否写入了 ",[89,113240,106101],{},[89,113242,113243],{},"data.ctrl[1]",[49,113245,113246,113247,315,113250,28366],{},"actuator 是否正确引用 ",[89,113248,113249],{},"joint1",[89,113251,113252],{},"joint2",[49,113254,113255],{},"控制输入是否太小。",[63,113257,113258],{"id":113258},"目标点不会动",[38,113260,113261],{},"本章的 target 是固定 site：",[83,113263,113265],{"className":53047,"code":113264,"language":53049,"meta":10,"style":10},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[89,113266,113267],{"__ignoreMap":10},[92,113268,113269,113271,113273,113275,113277,113279,113281,113283,113286],{"class":94,"line":95},[92,113270,1013],{"class":102},[92,113272,103185],{"class":51280},[92,113274,14900],{"class":1942},[92,113276,148],{"class":102},[92,113278,111934],{"class":207},[92,113280,101081],{"class":1942},[92,113282,148],{"class":102},[92,113284,113285],{"class":207},"\"0.5 0 0.4\"",[92,113287,113288],{"class":102}," ...\u002F>\n",[38,113290,113291,113292,113294],{},"它直接挂在 ",[89,113293,101816],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[63,113296,113297],{"id":113297},"机械臂不像真实机械臂",[38,113299,113300],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[33,113302,102582],{"id":102581},[38,113304,113305],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[38,113307,113308],{},"核心公式：",[83,113310,113313],{"className":113311,"code":113312,"language":5167,"meta":10},[5165],"distance = ||tip - target||\nreward = -distance - action_cost\n",[89,113314,113312],{"__ignoreMap":10},[38,113316,113317],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5106,113319,113320],{},"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":10,"searchDepth":11,"depth":11,"links":113322},[113323,113324,113325,113330,113334,113335,113336,113344],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":113326},[113327,113328,113329],{"id":111526,"depth":1158,"text":111527},{"id":111602,"depth":1158,"text":111602},{"id":111632,"depth":1158,"text":111633},{"id":101227,"depth":11,"text":101228,"children":113331},[113332,113333],{"id":101547,"depth":1158,"text":101547},{"id":101683,"depth":1158,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":113337},[113338,113339,113340,113341,113342,113343],{"id":113173,"depth":1158,"text":113176},{"id":113188,"depth":1158,"text":113188},{"id":113213,"depth":1158,"text":113213},{"id":113225,"depth":1158,"text":113226},{"id":113258,"depth":1158,"text":113258},{"id":113297,"depth":1158,"text":113297},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111330,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113351,"title":113352,"body":113353,"description":10,"extension":14,"meta":116815,"navigation":17,"path":116816,"seo":116817,"stem":116818,"__hash__":116819},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113354,"toc":116786},[113355,113358,113360,113363,113366,113391,113394,113400,113403,113409,113411,113413,113437,113439,113457,113459,113502,113504,113531,113533,113536,113588,113591,113597,113606,113609,113647,113650,113689,113692,113700,113707,113710,113716,113718,113772,113779,113824,113827,113831,113847,113857,113859,115120,115122,115134,115136,115147,115149,115152,115173,115176,115179,115212,115218,115221,115254,115257,115260,115301,115306,115320,115323,115336,115341,115364,115366,115381,115391,115406,115413,115433,115448,115466,115469,115486,115494,115510,115516,115548,115561,115593,115603,115638,115652,115698,115712,115754,115765,115778,115784,115817,115820,115847,115857,115897,115907,115924,115931,115949,115952,115993,116006,116021,116024,116047,116050,116062,116065,116084,116089,116110,116113,116128,116131,116165,116177,116192,116195,116220,116223,116242,116245,116277,116280,116304,116310,116340,116347,116360,116363,116365,116367,116373,116376,116379,116391,116394,116396,116450,116452,116456,116462,116471,116474,116481,116483,116506,116509,116513,116515,116533,116539,116541,116574,116577,116583,116587,116590,116610,116615,116619,116626,116646,116651,116655,116658,116678,116681,116767,116771,116774,116780,116783],[29,113356,113352],{"id":113357},"_8gymnasium-风格强化学习接口基础",[33,113359,100622],{"id":100621},[38,113361,113362],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[38,113364,113365],{},"你将实现:",[83,113367,113369],{"className":30359,"code":113368,"language":30361,"meta":10,"style":10},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[89,113370,113371,113381],{"__ignoreMap":10},[92,113372,113373,113376,113378],{"class":94,"line":95},[92,113374,113375],{"class":102},"obs, info ",[92,113377,148],{"class":98},[92,113379,113380],{"class":102}," env.reset()\n",[92,113382,113383,113386,113388],{"class":94,"line":11},[92,113384,113385],{"class":102},"obs, reward, terminated, truncated, info ",[92,113387,148],{"class":98},[92,113389,113390],{"class":102}," env.step(action)\n",[38,113392,113393],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[38,113395,113396,113397,113399],{},"前面章节的代码都是“脚本式”的：在 ",[89,113398,102270],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[38,113401,113402],{},"可以先记住 Gymnasium 环境的核心交互：",[83,113404,113407],{"className":113405,"code":113406,"language":5167,"meta":10},[5165],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[89,113408,113406],{"__ignoreMap":10},[33,113410,100745],{"id":100744},[38,113412,100748],{},[83,113414,113415],{"className":23802,"code":104363,"language":23804,"meta":10,"style":10},[89,113416,113417],{"__ignoreMap":10},[92,113418,113419,113421,113423,113425,113427,113429,113431,113433,113435],{"class":94,"line":95},[92,113420,24557],{"class":1942},[92,113422,26296],{"class":207},[92,113424,23814],{"class":207},[92,113426,26381],{"class":151},[92,113428,104378],{"class":207},[92,113430,100773],{"class":207},[92,113432,102476],{"class":207},[92,113434,100789],{"class":207},[92,113436,104387],{"class":207},[38,113438,102794],{},[83,113440,113442],{"className":23802,"code":113441,"language":23804,"meta":10,"style":10},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[89,113443,113444],{"__ignoreMap":10},[92,113445,113446,113448,113450,113452,113454],{"class":94,"line":95},[92,113447,23811],{"class":1942},[92,113449,23814],{"class":207},[92,113451,100905],{"class":207},[92,113453,107686],{"class":207},[92,113455,113456],{"class":207}," gymnasium\n",[38,113458,102811],{},[83,113460,113462],{"className":23802,"code":113461,"language":23804,"meta":10,"style":10},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[89,113463,113464,113481,113490],{"__ignoreMap":10},[92,113465,113466,113468,113470,113472,113475,113477,113479],{"class":94,"line":95},[92,113467,30311],{"class":1942},[92,113469,29157],{"class":207},[92,113471,25096],{"class":151},[92,113473,113474],{"class":207}," mujoco-gym-api",[92,113476,100950],{"class":207},[92,113478,100953],{"class":151},[92,113480,100956],{"class":151},[92,113482,113483,113485,113487],{"class":94,"line":11},[92,113484,30311],{"class":1942},[92,113486,100963],{"class":207},[92,113488,113489],{"class":207}," mujoco-gym-api\n",[92,113491,113492,113494,113496,113498,113500],{"class":94,"line":1158},[92,113493,23811],{"class":1942},[92,113495,23814],{"class":207},[92,113497,100905],{"class":207},[92,113499,107686],{"class":207},[92,113501,113456],{"class":207},[38,113503,100979],{},[46,113505,113506,113516,113519,113525],{},[49,113507,113508,113509,113512,113513,28366],{},"本章使用 ",[89,113510,113511],{},"gymnasium","，不是旧版 ",[89,113514,113515],{},"gym",[49,113517,113518],{},"Gymnasium API 与旧 Gym API 有差异。",[49,113520,113521,113522,28366],{},"旧 Gym 常见返回值是 4 个: ",[89,113523,113524],{},"obs, reward, done, info",[49,113526,113527,113528,28366],{},"Gymnasium 返回值是 5 个: ",[89,113529,113530],{},"obs, reward, terminated, truncated, info",[33,113532,101020],{"id":101019},[38,113534,113535],{},"强化学习环境接口包含:",[240,113537,113538,113547],{},[243,113539,113540],{},[246,113541,113542,113545],{},[249,113543,113544],{"align":23716},"方法",[249,113546,102671],{"align":23716},[287,113548,113549,113559,113569,113579],{},[246,113550,113551,113556],{},[292,113552,113553],{"align":23716},[89,113554,113555],{},"reset()",[292,113557,113558],{"align":23716},"重置环境",[246,113560,113561,113566],{},[292,113562,113563],{"align":23716},[89,113564,113565],{},"step(action)",[292,113567,113568],{"align":23716},"执行动作",[246,113570,113571,113576],{},[292,113572,113573],{"align":23716},[89,113574,113575],{},"observation_space",[292,113577,113578],{"align":23716},"观测空间",[246,113580,113581,113586],{},[292,113582,113583],{"align":23716},[89,113584,113585],{},"action_space",[292,113587,23634],{"align":23716},[38,113589,113590],{},"一个最小环境需要完成:",[83,113592,113595],{"className":113593,"code":113594,"language":5167,"meta":10},[5165],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[89,113596,113594],{"__ignoreMap":10},[63,113598,113600,100993,113603,104613],{"id":113599},"terminated-和-truncated-的区别",[89,113601,113602],{},"terminated",[89,113604,113605],{},"truncated",[38,113607,113608],{},"Gymnasium 把“结束”拆成两个概念：",[240,113610,113611,113621],{},[243,113612,113613],{},[246,113614,113615,113617,113619],{},[249,113616,104549],{"align":23716},[249,113618,100675],{"align":23716},[249,113620,21167],{"align":23716},[287,113622,113623,113635],{},[246,113624,113625,113629,113632],{},[292,113626,113627],{"align":23716},[89,113628,113602],{},[292,113630,113631],{"align":23716},"任务自然结束",[292,113633,113634],{"align":23716},"机械臂到达目标、机器人摔倒",[246,113636,113637,113641,113644],{},[292,113638,113639],{"align":23716},[89,113640,113605],{},[292,113642,113643],{"align":23716},"因外部限制截断",[292,113645,113646],{"align":23716},"达到最大步数、时间限制",[38,113648,113649],{},"本章中：",[83,113651,113653],{"className":30359,"code":113652,"language":30361,"meta":10,"style":10},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[89,113654,113655,113670],{"__ignoreMap":10},[92,113656,113657,113660,113662,113665,113667],{"class":94,"line":95},[92,113658,113659],{"class":102},"terminated ",[92,113661,148],{"class":98},[92,113663,113664],{"class":102}," dist ",[92,113666,1013],{"class":98},[92,113668,113669],{"class":151}," 0.05\n",[92,113671,113672,113675,113677,113679,113682,113684,113686],{"class":94,"line":11},[92,113673,113674],{"class":102},"truncated ",[92,113676,148],{"class":98},[92,113678,38854],{"class":151},[92,113680,113681],{"class":102},".steps ",[92,113683,1689],{"class":98},[92,113685,38854],{"class":151},[92,113687,113688],{"class":102},".max_steps\n",[38,113690,113691],{},"也就是：",[46,113693,113694,113697],{},[49,113695,113696],{},"末端距离目标小于 0.05，任务成功结束。",[49,113698,113699],{},"步数超过上限，episode 被截断。",[63,113701,113703,100993,113705],{"id":113702},"observation_space-和-action_space",[89,113704,113575],{},[89,113706,113585],{},[38,113708,113709],{},"这两个对象告诉算法：",[83,113711,113714],{"className":113712,"code":113713,"language":5167,"meta":10},[5165],"观测长什么样\n动作允许多大\n",[89,113715,113713],{"__ignoreMap":10},[38,113717,14613],{},[83,113719,113721],{"className":30359,"code":113720,"language":30361,"meta":10,"style":10},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[89,113722,113723],{"__ignoreMap":10},[92,113724,113725,113727,113730,113732,113735,113738,113741,113743,113745,113748,113750,113752,113754,113756,113758,113760,113762,113765,113767,113769],{"class":94,"line":95},[92,113726,30804],{"class":151},[92,113728,113729],{"class":102},".action_space ",[92,113731,148],{"class":98},[92,113733,113734],{"class":102}," spaces.Box(",[92,113736,113737],{"class":5196},"low",[92,113739,113740],{"class":98},"=-",[92,113742,102378],{"class":151},[92,113744,12415],{"class":102},[92,113746,113747],{"class":5196},"high",[92,113749,148],{"class":98},[92,113751,102378],{"class":151},[92,113753,12415],{"class":102},[92,113755,95943],{"class":5196},[92,113757,148],{"class":98},[92,113759,103],{"class":102},[92,113761,180],{"class":151},[92,113763,113764],{"class":102},",), ",[92,113766,93480],{"class":5196},[92,113768,148],{"class":98},[92,113770,113771],{"class":102},"np.float32)\n",[38,113773,113774,113775,113778],{},"表示动作是 2 维数组，每个值都在 ",[89,113776,113777],{},"[-1, 1]"," 范围内。",[83,113780,113782],{"className":30359,"code":113781,"language":30361,"meta":10,"style":10},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[89,113783,113784],{"__ignoreMap":10},[92,113785,113786,113788,113791,113793,113795,113797,113799,113802,113804,113806,113808,113810,113812,113814,113816,113818,113820,113822],{"class":94,"line":95},[92,113787,30804],{"class":151},[92,113789,113790],{"class":102},".observation_space ",[92,113792,148],{"class":98},[92,113794,113734],{"class":102},[92,113796,113737],{"class":5196},[92,113798,113740],{"class":98},[92,113800,113801],{"class":102},"np.inf, ",[92,113803,113747],{"class":5196},[92,113805,148],{"class":98},[92,113807,113801],{"class":102},[92,113809,95943],{"class":5196},[92,113811,148],{"class":98},[92,113813,103],{"class":102},[92,113815,549],{"class":151},[92,113817,113764],{"class":102},[92,113819,93480],{"class":5196},[92,113821,148],{"class":98},[92,113823,113771],{"class":102},[38,113825,113826],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[63,113828,113830],{"id":113829},"frame_skip-是什么","frame_skip 是什么",[83,113832,113834],{"className":30359,"code":113833,"language":30361,"meta":10,"style":10},"self.frame_skip = 5\n",[89,113835,113836],{"__ignoreMap":10},[92,113837,113838,113840,113843,113845],{"class":94,"line":95},[92,113839,30804],{"class":151},[92,113841,113842],{"class":102},".frame_skip ",[92,113844,148],{"class":98},[92,113846,54407],{"class":151},[38,113848,113849,113850,113853,113854,113856],{},"表示外部调用一次 ",[89,113851,113852],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[89,113855,101190],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[33,113858,101228],{"id":101227},[83,113860,113862],{"className":30359,"code":113861,"language":30361,"meta":10,"style":10},"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",[89,113863,113864,113876,113882,113892,113903,113907,113911,113919,113924,113928,113932,113936,113940,113944,113948,113952,113957,113961,113965,113969,113974,113978,113982,113986,113990,113994,113998,114002,114006,114010,114014,114018,114022,114026,114044,114059,114063,114076,114086,114101,114118,114122,114143,114162,114187,114201,114205,114215,114227,114237,114241,114283,114321,114325,114335,114351,114366,114385,114392,114396,114409,114424,114439,114452,114471,114487,114491,114532,114547,114562,114566,114605,114616,114629,114633,114643,114652,114656,114666,114681,114699,114703,114714,114731,114744,114748,114758,114762,114773,114784,114788,114802,114816,114832,114836,114849,114866,114881,114888,114892,114896,114908,114918,114936,114948,114960,114964,114972,114988,114997,115006,115014,115056,115069,115074,115078,115096,115100,115104,115116],{"__ignoreMap":10},[92,113865,113866,113868,113871,113873],{"class":94,"line":95},[92,113867,30373],{"class":98},[92,113869,113870],{"class":102}," gymnasium ",[92,113872,31364],{"class":98},[92,113874,113875],{"class":102}," gym\n",[92,113877,113878,113880],{"class":94,"line":11},[92,113879,30373],{"class":98},[92,113881,101276],{"class":102},[92,113883,113884,113886,113888,113890],{"class":94,"line":1158},[92,113885,30373],{"class":98},[92,113887,31361],{"class":102},[92,113889,31364],{"class":98},[92,113891,31367],{"class":102},[92,113893,113894,113896,113898,113900],{"class":94,"line":1173},[92,113895,30718],{"class":98},[92,113897,113870],{"class":102},[92,113899,30373],{"class":98},[92,113901,113902],{"class":102}," spaces\n",[92,113904,113905],{"class":94,"line":1179},[92,113906,2379],{"emptyLinePlaceholder":17},[92,113908,113909],{"class":94,"line":1193},[92,113910,2379],{"emptyLinePlaceholder":17},[92,113912,113913,113915,113917],{"class":94,"line":1199},[92,113914,101289],{"class":151},[92,113916,13544],{"class":98},[92,113918,101294],{"class":207},[92,113920,113921],{"class":94,"line":1290},[92,113922,113923],{"class":207},"\u003Cmujoco model=\"gym_reacher\">\n",[92,113925,113926],{"class":94,"line":1296},[92,113927,111713],{"class":207},[92,113929,113930],{"class":94,"line":1308},[92,113931,2379],{"emptyLinePlaceholder":17},[92,113933,113934],{"class":94,"line":1591},[92,113935,101313],{"class":207},[92,113937,113938],{"class":94,"line":1596},[92,113939,111731],{"class":207},[92,113941,113942],{"class":94,"line":1602},[92,113943,2379],{"emptyLinePlaceholder":17},[92,113945,113946],{"class":94,"line":1607},[92,113947,111740],{"class":207},[92,113949,113950],{"class":94,"line":1621},[92,113951,111745],{"class":207},[92,113953,113954],{"class":94,"line":1626},[92,113955,113956],{"class":207},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[92,113958,113959],{"class":94,"line":1632},[92,113960,2379],{"emptyLinePlaceholder":17},[92,113962,113963],{"class":94,"line":1653},[92,113964,111759],{"class":207},[92,113966,113967],{"class":94,"line":1658},[92,113968,111764],{"class":207},[92,113970,113971],{"class":94,"line":1672},[92,113972,113973],{"class":207},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[92,113975,113976],{"class":94,"line":1677},[92,113977,111774],{"class":207},[92,113979,113980],{"class":94,"line":1706},[92,113981,106413],{"class":207},[92,113983,113984],{"class":94,"line":1711},[92,113985,101342],{"class":207},[92,113987,113988],{"class":94,"line":1728},[92,113989,101347],{"class":207},[92,113991,113992],{"class":94,"line":1733},[92,113993,2379],{"emptyLinePlaceholder":17},[92,113995,113996],{"class":94,"line":1738},[92,113997,106430],{"class":207},[92,113999,114000],{"class":94,"line":1743},[92,114001,111799],{"class":207},[92,114003,114004],{"class":94,"line":1757},[92,114005,111804],{"class":207},[92,114007,114008],{"class":94,"line":1762},[92,114009,106440],{"class":207},[92,114011,114012],{"class":94,"line":2556},[92,114013,101352],{"class":207},[92,114015,114016],{"class":94,"line":2570},[92,114017,95678],{"class":207},[92,114019,114020],{"class":94,"line":2578},[92,114021,2379],{"emptyLinePlaceholder":17},[92,114023,114024],{"class":94,"line":2583},[92,114025,2379],{"emptyLinePlaceholder":17},[92,114027,114028,114030,114033,114035,114037,114039,114042],{"class":94,"line":2589},[92,114029,14674],{"class":98},[92,114031,114032],{"class":1942}," ReacherEnv",[92,114034,103],{"class":102},[92,114036,113515],{"class":1942},[92,114038,661],{"class":102},[92,114040,114041],{"class":1942},"Env",[92,114043,30767],{"class":102},[92,114045,114046,114049,114051,114053,114056],{"class":94,"line":2595},[92,114047,114048],{"class":102},"    metadata ",[92,114050,148],{"class":98},[92,114052,4427],{"class":102},[92,114054,114055],{"class":207},"\"render_modes\"",[92,114057,114058],{"class":102},": []}\n",[92,114060,114061],{"class":94,"line":2600},[92,114062,2379],{"emptyLinePlaceholder":17},[92,114064,114065,114067,114069,114072,114074],{"class":94,"line":7928},[92,114066,30782],{"class":98},[92,114068,30785],{"class":151},[92,114070,114071],{"class":102},"(self) -> ",[92,114073,95666],{"class":151},[92,114075,3718],{"class":102},[92,114077,114078,114080,114082,114084],{"class":94,"line":7952},[92,114079,30798],{"class":151},[92,114081,17241],{"class":102},[92,114083,30810],{"class":151},[92,114085,1955],{"class":102},[92,114087,114088,114090,114093,114095,114097,114099],{"class":94,"line":7957},[92,114089,30826],{"class":151},[92,114091,114092],{"class":102},".model ",[92,114094,148],{"class":98},[92,114096,101387],{"class":102},[92,114098,101289],{"class":151},[92,114100,109],{"class":102},[92,114102,114103,114105,114108,114110,114113,114115],{"class":94,"line":7963},[92,114104,30826],{"class":151},[92,114106,114107],{"class":102},".data ",[92,114109,148],{"class":98},[92,114111,114112],{"class":102}," mujoco.MjData(",[92,114114,30804],{"class":151},[92,114116,114117],{"class":102},".model)\n",[92,114119,114120],{"class":94,"line":7990},[92,114121,2379],{"emptyLinePlaceholder":17},[92,114123,114124,114126,114129,114131,114134,114136,114139,114141],{"class":94,"line":7995},[92,114125,30826],{"class":151},[92,114127,114128],{"class":102},".tip_site_id ",[92,114130,148],{"class":98},[92,114132,114133],{"class":102}," mujoco.mj_name2id(",[92,114135,30804],{"class":151},[92,114137,114138],{"class":102},".model, mujoco.mjtObj.mjOBJ_SITE, ",[92,114140,111511],{"class":207},[92,114142,109],{"class":102},[92,114144,114145,114147,114150,114152,114154,114156,114158,114160],{"class":94,"line":8001},[92,114146,30826],{"class":151},[92,114148,114149],{"class":102},".target_site_id ",[92,114151,148],{"class":98},[92,114153,114133],{"class":102},[92,114155,30804],{"class":151},[92,114157,114138],{"class":102},[92,114159,111934],{"class":207},[92,114161,109],{"class":102},[92,114163,114164,114166,114168,114170,114172,114174,114177,114179,114181,114183,114185],{"class":94,"line":8013},[92,114165,2476],{"class":98},[92,114167,38854],{"class":151},[92,114169,114128],{"class":102},[92,114171,1013],{"class":98},[92,114173,4072],{"class":151},[92,114175,114176],{"class":98}," or",[92,114178,38854],{"class":151},[92,114180,114149],{"class":102},[92,114182,1013],{"class":98},[92,114184,4072],{"class":151},[92,114186,3718],{"class":102},[92,114188,114189,114192,114194,114196,114199],{"class":94,"line":8025},[92,114190,114191],{"class":98},"            raise",[92,114193,103410],{"class":151},[92,114195,103],{"class":102},[92,114197,114198],{"class":207},"\"required sites not found\"",[92,114200,109],{"class":102},[92,114202,114203],{"class":94,"line":8037},[92,114204,2379],{"emptyLinePlaceholder":17},[92,114206,114207,114209,114211,114213],{"class":94,"line":9696},[92,114208,30826],{"class":151},[92,114210,113842],{"class":102},[92,114212,148],{"class":98},[92,114214,54407],{"class":151},[92,114216,114217,114219,114222,114224],{"class":94,"line":9721},[92,114218,30826],{"class":151},[92,114220,114221],{"class":102},".max_steps ",[92,114223,148],{"class":98},[92,114225,114226],{"class":151}," 200\n",[92,114228,114229,114231,114233,114235],{"class":94,"line":9744},[92,114230,30826],{"class":151},[92,114232,113681],{"class":102},[92,114234,148],{"class":98},[92,114236,47314],{"class":151},[92,114238,114239],{"class":94,"line":9768},[92,114240,2379],{"emptyLinePlaceholder":17},[92,114242,114243,114245,114247,114249,114251,114253,114255,114257,114259,114261,114263,114265,114267,114269,114271,114273,114275,114277,114279,114281],{"class":94,"line":9773},[92,114244,30826],{"class":151},[92,114246,113729],{"class":102},[92,114248,148],{"class":98},[92,114250,113734],{"class":102},[92,114252,113737],{"class":5196},[92,114254,113740],{"class":98},[92,114256,102378],{"class":151},[92,114258,12415],{"class":102},[92,114260,113747],{"class":5196},[92,114262,148],{"class":98},[92,114264,102378],{"class":151},[92,114266,12415],{"class":102},[92,114268,95943],{"class":5196},[92,114270,148],{"class":98},[92,114272,103],{"class":102},[92,114274,180],{"class":151},[92,114276,113764],{"class":102},[92,114278,93480],{"class":5196},[92,114280,148],{"class":98},[92,114282,113771],{"class":102},[92,114284,114285,114287,114289,114291,114293,114295,114297,114299,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319],{"class":94,"line":9778},[92,114286,30826],{"class":151},[92,114288,113790],{"class":102},[92,114290,148],{"class":98},[92,114292,113734],{"class":102},[92,114294,113737],{"class":5196},[92,114296,113740],{"class":98},[92,114298,113801],{"class":102},[92,114300,113747],{"class":5196},[92,114302,148],{"class":98},[92,114304,113801],{"class":102},[92,114306,95943],{"class":5196},[92,114308,148],{"class":98},[92,114310,103],{"class":102},[92,114312,549],{"class":151},[92,114314,113764],{"class":102},[92,114316,93480],{"class":5196},[92,114318,148],{"class":98},[92,114320,113771],{"class":102},[92,114322,114323],{"class":94,"line":9783},[92,114324,2379],{"emptyLinePlaceholder":17},[92,114326,114327,114329,114332],{"class":94,"line":9792},[92,114328,30782],{"class":98},[92,114330,114331],{"class":1942}," _get_obs",[92,114333,114334],{"class":102},"(self) -> np.ndarray:\n",[92,114336,114337,114339,114341,114343,114346,114348],{"class":94,"line":9797},[92,114338,112112],{"class":102},[92,114340,148],{"class":98},[92,114342,38854],{"class":151},[92,114344,114345],{"class":102},".data.site_xpos[",[92,114347,30804],{"class":151},[92,114349,114350],{"class":102},".tip_site_id].copy()\n",[92,114352,114353,114355,114357,114359,114361,114363],{"class":94,"line":9803},[92,114354,112125],{"class":102},[92,114356,148],{"class":98},[92,114358,38854],{"class":151},[92,114360,114345],{"class":102},[92,114362,30804],{"class":151},[92,114364,114365],{"class":102},".target_site_id].copy()\n",[92,114367,114368,114370,114372,114375,114377,114380,114382],{"class":94,"line":9824},[92,114369,110157],{"class":102},[92,114371,148],{"class":98},[92,114373,114374],{"class":102}," np.concatenate([",[92,114376,30804],{"class":151},[92,114378,114379],{"class":102},".data.qpos.copy(), ",[92,114381,30804],{"class":151},[92,114383,114384],{"class":102},".data.qvel.copy(), tip, target])\n",[92,114386,114387,114389],{"class":94,"line":9830},[92,114388,14732],{"class":98},[92,114390,114391],{"class":102}," obs.astype(np.float32)\n",[92,114393,114394],{"class":94,"line":9844},[92,114395,2379],{"emptyLinePlaceholder":17},[92,114397,114398,114400,114403,114405,114407],{"class":94,"line":9850},[92,114399,30782],{"class":98},[92,114401,114402],{"class":1942}," _get_reward",[92,114404,114071],{"class":102},[92,114406,142],{"class":151},[92,114408,3718],{"class":102},[92,114410,114411,114413,114415,114417,114419,114421],{"class":94,"line":9877},[92,114412,112112],{"class":102},[92,114414,148],{"class":98},[92,114416,38854],{"class":151},[92,114418,114345],{"class":102},[92,114420,30804],{"class":151},[92,114422,114423],{"class":102},".tip_site_id]\n",[92,114425,114426,114428,114430,114432,114434,114436],{"class":94,"line":9886},[92,114427,112125],{"class":102},[92,114429,148],{"class":98},[92,114431,38854],{"class":151},[92,114433,114345],{"class":102},[92,114435,30804],{"class":151},[92,114437,114438],{"class":102},".target_site_id]\n",[92,114440,114441,114444,114446,114448,114450],{"class":94,"line":9892},[92,114442,114443],{"class":102},"        dist ",[92,114445,148],{"class":98},[92,114447,111576],{"class":102},[92,114449,635],{"class":98},[92,114451,111581],{"class":102},[92,114453,114454,114457,114459,114461,114463,114466,114468],{"class":94,"line":9900},[92,114455,114456],{"class":102},"        control_cost ",[92,114458,148],{"class":98},[92,114460,112012],{"class":151},[92,114462,6498],{"class":98},[92,114464,114465],{"class":102}," np.sum(np.square(",[92,114467,30804],{"class":151},[92,114469,114470],{"class":102},".data.ctrl))\n",[92,114472,114473,114475,114477,114479,114481,114483,114485],{"class":94,"line":9905},[92,114474,14732],{"class":98},[92,114476,109772],{"class":151},[92,114478,103],{"class":102},[92,114480,635],{"class":98},[92,114482,111571],{"class":102},[92,114484,635],{"class":98},[92,114486,112034],{"class":102},[92,114488,114489],{"class":94,"line":16584},[92,114490,2379],{"emptyLinePlaceholder":17},[92,114492,114493,114495,114498,114501,114503,114506,114508,114510,114512,114514,114516,114519,114522,114524,114526,114528,114530],{"class":94,"line":16590},[92,114494,30782],{"class":98},[92,114496,114497],{"class":1942}," reset",[92,114499,114500],{"class":102},"(self, ",[92,114502,558],{"class":98},[92,114504,114505],{"class":102},", seed: ",[92,114507,106],{"class":151},[92,114509,25090],{"class":98},[92,114511,38914],{"class":151},[92,114513,13544],{"class":98},[92,114515,38914],{"class":151},[92,114517,114518],{"class":102},", options: ",[92,114520,114521],{"class":151},"dict",[92,114523,25090],{"class":98},[92,114525,38914],{"class":151},[92,114527,13544],{"class":98},[92,114529,38914],{"class":151},[92,114531,30767],{"class":102},[92,114533,114534,114536,114539,114542,114544],{"class":94,"line":16613},[92,114535,30798],{"class":151},[92,114537,114538],{"class":102},"().reset(",[92,114540,114541],{"class":5196},"seed",[92,114543,148],{"class":98},[92,114545,114546],{"class":102},"seed)\n",[92,114548,114549,114552,114554,114557,114559],{"class":94,"line":16619},[92,114550,114551],{"class":102},"        mujoco.mj_resetData(",[92,114553,30804],{"class":151},[92,114555,114556],{"class":102},".model, ",[92,114558,30804],{"class":151},[92,114560,114561],{"class":102},".data)\n",[92,114563,114564],{"class":94,"line":16642},[92,114565,2379],{"emptyLinePlaceholder":17},[92,114567,114568,114570,114573,114575,114577,114580,114582,114584,114586,114588,114590,114592,114594,114596,114598,114600,114602],{"class":94,"line":16656},[92,114569,30826],{"class":151},[92,114571,114572],{"class":102},".data.qpos[:] ",[92,114574,148],{"class":98},[92,114576,38854],{"class":151},[92,114578,114579],{"class":102},".np_random.uniform(",[92,114581,113737],{"class":5196},[92,114583,113740],{"class":98},[92,114585,86190],{"class":151},[92,114587,12415],{"class":102},[92,114589,113747],{"class":5196},[92,114591,148],{"class":98},[92,114593,86190],{"class":151},[92,114595,12415],{"class":102},[92,114597,31477],{"class":5196},[92,114599,148],{"class":98},[92,114601,30804],{"class":151},[92,114603,114604],{"class":102},".model.nq)\n",[92,114606,114607,114609,114612,114614],{"class":94,"line":16676},[92,114608,30826],{"class":151},[92,114610,114611],{"class":102},".data.qvel[:] ",[92,114613,148],{"class":98},[92,114615,104736],{"class":151},[92,114617,114618,114621,114623,114625,114627],{"class":94,"line":16682},[92,114619,114620],{"class":102},"        mujoco.mj_forward(",[92,114622,30804],{"class":151},[92,114624,114556],{"class":102},[92,114626,30804],{"class":151},[92,114628,114561],{"class":102},[92,114630,114631],{"class":94,"line":16693},[92,114632,2379],{"emptyLinePlaceholder":17},[92,114634,114635,114637,114639,114641],{"class":94,"line":16716},[92,114636,30826],{"class":151},[92,114638,113681],{"class":102},[92,114640,148],{"class":98},[92,114642,47314],{"class":151},[92,114644,114645,114647,114649],{"class":94,"line":16738},[92,114646,14732],{"class":98},[92,114648,38854],{"class":151},[92,114650,114651],{"class":102},"._get_obs(), {}\n",[92,114653,114654],{"class":94,"line":16743},[92,114655,2379],{"emptyLinePlaceholder":17},[92,114657,114658,114660,114663],{"class":94,"line":16749},[92,114659,30782],{"class":98},[92,114661,114662],{"class":1942}," step",[92,114664,114665],{"class":102},"(self, action):\n",[92,114667,114668,114670,114672,114675,114677,114679],{"class":94,"line":16763},[92,114669,110197],{"class":102},[92,114671,148],{"class":98},[92,114673,114674],{"class":102}," np.asarray(action, ",[92,114676,93480],{"class":5196},[92,114678,148],{"class":98},[92,114680,113771],{"class":102},[92,114682,114683,114685,114687,114689,114691,114694,114696],{"class":94,"line":16776},[92,114684,110197],{"class":102},[92,114686,148],{"class":98},[92,114688,107422],{"class":102},[92,114690,30804],{"class":151},[92,114692,114693],{"class":102},".action_space.low, ",[92,114695,30804],{"class":151},[92,114697,114698],{"class":102},".action_space.high)\n",[92,114700,114701],{"class":94,"line":16781},[92,114702,2379],{"emptyLinePlaceholder":17},[92,114704,114705,114707,114710,114712],{"class":94,"line":16795},[92,114706,30826],{"class":151},[92,114708,114709],{"class":102},".data.ctrl[:] ",[92,114711,148],{"class":98},[92,114713,107445],{"class":102},[92,114715,114716,114718,114720,114722,114724,114726,114728],{"class":94,"line":16800},[92,114717,3382],{"class":98},[92,114719,101476],{"class":102},[92,114721,26024],{"class":98},[92,114723,32424],{"class":151},[92,114725,103],{"class":102},[92,114727,30804],{"class":151},[92,114729,114730],{"class":102},".frame_skip):\n",[92,114732,114733,114736,114738,114740,114742],{"class":94,"line":16806},[92,114734,114735],{"class":102},"            mujoco.mj_step(",[92,114737,30804],{"class":151},[92,114739,114556],{"class":102},[92,114741,30804],{"class":151},[92,114743,114561],{"class":102},[92,114745,114746],{"class":94,"line":16811},[92,114747,2379],{"emptyLinePlaceholder":17},[92,114749,114750,114752,114754,114756],{"class":94,"line":16825},[92,114751,30826],{"class":151},[92,114753,113681],{"class":102},[92,114755,9457],{"class":98},[92,114757,55679],{"class":151},[92,114759,114760],{"class":94,"line":16830},[92,114761,2379],{"emptyLinePlaceholder":17},[92,114763,114764,114766,114768,114770],{"class":94,"line":16835},[92,114765,110157],{"class":102},[92,114767,148],{"class":98},[92,114769,38854],{"class":151},[92,114771,114772],{"class":102},"._get_obs()\n",[92,114774,114775,114777,114779,114781],{"class":94,"line":16849},[92,114776,110262],{"class":102},[92,114778,148],{"class":98},[92,114780,38854],{"class":151},[92,114782,114783],{"class":102},"._get_reward()\n",[92,114785,114786],{"class":94,"line":16861},[92,114787,2379],{"emptyLinePlaceholder":17},[92,114789,114790,114792,114794,114796,114798,114800],{"class":94,"line":16866},[92,114791,112112],{"class":102},[92,114793,148],{"class":98},[92,114795,38854],{"class":151},[92,114797,114345],{"class":102},[92,114799,30804],{"class":151},[92,114801,114423],{"class":102},[92,114803,114804,114806,114808,114810,114812,114814],{"class":94,"line":16879},[92,114805,112125],{"class":102},[92,114807,148],{"class":98},[92,114809,38854],{"class":151},[92,114811,114345],{"class":102},[92,114813,30804],{"class":151},[92,114815,114438],{"class":102},[92,114817,114818,114820,114822,114824,114827,114829],{"class":94,"line":16884},[92,114819,114443],{"class":102},[92,114821,148],{"class":98},[92,114823,109772],{"class":151},[92,114825,114826],{"class":102},"(np.linalg.norm(tip ",[92,114828,635],{"class":98},[92,114830,114831],{"class":102}," target))\n",[92,114833,114834],{"class":94,"line":16889},[92,114835,2379],{"emptyLinePlaceholder":17},[92,114837,114838,114841,114843,114845,114847],{"class":94,"line":16894},[92,114839,114840],{"class":102},"        terminated ",[92,114842,148],{"class":98},[92,114844,113664],{"class":102},[92,114846,1013],{"class":98},[92,114848,113669],{"class":151},[92,114850,114851,114854,114856,114858,114860,114862,114864],{"class":94,"line":16907},[92,114852,114853],{"class":102},"        truncated ",[92,114855,148],{"class":98},[92,114857,38854],{"class":151},[92,114859,113681],{"class":102},[92,114861,1689],{"class":98},[92,114863,38854],{"class":151},[92,114865,113688],{"class":102},[92,114867,114868,114871,114873,114875,114878],{"class":94,"line":16912},[92,114869,114870],{"class":102},"        info ",[92,114872,148],{"class":98},[92,114874,4427],{"class":102},[92,114876,114877],{"class":207},"\"distance\"",[92,114879,114880],{"class":102},": dist}\n",[92,114882,114883,114885],{"class":94,"line":32614},[92,114884,14732],{"class":98},[92,114886,114887],{"class":102}," obs, reward, terminated, truncated, info\n",[92,114889,114890],{"class":94,"line":32620},[92,114891,2379],{"emptyLinePlaceholder":17},[92,114893,114894],{"class":94,"line":32626},[92,114895,2379],{"emptyLinePlaceholder":17},[92,114897,114898,114900,114902,114904,114906],{"class":94,"line":32632},[92,114899,31928],{"class":98},[92,114901,1952],{"class":1942},[92,114903,101373],{"class":102},[92,114905,95666],{"class":151},[92,114907,3718],{"class":102},[92,114909,114910,114913,114915],{"class":94,"line":32638},[92,114911,114912],{"class":102},"    env ",[92,114914,148],{"class":98},[92,114916,114917],{"class":102}," ReacherEnv()\n",[92,114919,114920,114923,114925,114928,114930,114932,114934],{"class":94,"line":32649},[92,114921,114922],{"class":102},"    obs, info ",[92,114924,148],{"class":98},[92,114926,114927],{"class":102}," env.reset(",[92,114929,114541],{"class":5196},[92,114931,148],{"class":98},[92,114933,294],{"class":151},[92,114935,109],{"class":102},[92,114937,114938,114940,114942,114945],{"class":94,"line":32655},[92,114939,31280],{"class":151},[92,114941,103],{"class":102},[92,114943,114944],{"class":207},"\"initial obs shape:\"",[92,114946,114947],{"class":102},", obs.shape)\n",[92,114949,114950,114952,114954,114957],{"class":94,"line":32675},[92,114951,31280],{"class":151},[92,114953,103],{"class":102},[92,114955,114956],{"class":207},"\"initial info:\"",[92,114958,114959],{"class":102},", info)\n",[92,114961,114962],{"class":94,"line":32681},[92,114963,2379],{"emptyLinePlaceholder":17},[92,114965,114966,114968,114970],{"class":94,"line":32692},[92,114967,110128],{"class":102},[92,114969,148],{"class":98},[92,114971,104736],{"class":151},[92,114973,114974,114976,114978,114980,114982,114984,114986],{"class":94,"line":32698},[92,114975,3180],{"class":98},[92,114977,31597],{"class":102},[92,114979,26024],{"class":98},[92,114981,32424],{"class":151},[92,114983,103],{"class":102},[92,114985,803],{"class":151},[92,114987,30767],{"class":102},[92,114989,114990,114992,114994],{"class":94,"line":32704},[92,114991,110197],{"class":102},[92,114993,148],{"class":98},[92,114995,114996],{"class":102}," env.action_space.sample()\n",[92,114998,114999,115002,115004],{"class":94,"line":32710},[92,115000,115001],{"class":102},"        obs, reward, terminated, truncated, info ",[92,115003,148],{"class":98},[92,115005,113390],{"class":102},[92,115007,115008,115010,115012],{"class":94,"line":32716},[92,115009,110272],{"class":102},[92,115011,9457],{"class":98},[92,115013,110277],{"class":102},[92,115015,115016,115018,115020,115022,115024,115027,115029,115031,115034,115036,115038,115041,115043,115045,115048,115050,115052,115054],{"class":94,"line":32722},[92,115017,32432],{"class":151},[92,115019,103],{"class":102},[92,115021,110306],{"class":207},[92,115023,110309],{"class":102},[92,115025,115026],{"class":207},"\"reward:\"",[92,115028,12415],{"class":102},[92,115030,31999],{"class":151},[92,115032,115033],{"class":102},"(reward, ",[92,115035,174],{"class":151},[92,115037,110320],{"class":102},[92,115039,115040],{"class":207},"\"distance:\"",[92,115042,12415],{"class":102},[92,115044,31999],{"class":151},[92,115046,115047],{"class":102},"(info[",[92,115049,114877],{"class":207},[92,115051,112177],{"class":102},[92,115053,174],{"class":151},[92,115055,30478],{"class":102},[92,115057,115058,115060,115063,115066],{"class":94,"line":32728},[92,115059,2476],{"class":98},[92,115061,115062],{"class":102}," terminated ",[92,115064,115065],{"class":98},"or",[92,115067,115068],{"class":102}," truncated:\n",[92,115070,115071],{"class":94,"line":32734},[92,115072,115073],{"class":98},"            break\n",[92,115075,115076],{"class":94,"line":32754},[92,115077,2379],{"emptyLinePlaceholder":17},[92,115079,115080,115082,115084,115086,115088,115090,115092,115094],{"class":94,"line":32760},[92,115081,31280],{"class":151},[92,115083,103],{"class":102},[92,115085,110351],{"class":207},[92,115087,12415],{"class":102},[92,115089,31999],{"class":151},[92,115091,110358],{"class":102},[92,115093,174],{"class":151},[92,115095,30478],{"class":102},[92,115097,115098],{"class":94,"line":32776},[92,115099,2379],{"emptyLinePlaceholder":17},[92,115101,115102],{"class":94,"line":32782},[92,115103,2379],{"emptyLinePlaceholder":17},[92,115105,115106,115108,115110,115112,115114],{"class":94,"line":32796},[92,115107,1510],{"class":98},[92,115109,31201],{"class":151},[92,115111,101534],{"class":98},[92,115113,101537],{"class":207},[92,115115,3718],{"class":102},[92,115117,115118],{"class":94,"line":32802},[92,115119,101544],{"class":102},[38,115121,103545],{},[83,115123,115125],{"className":23802,"code":115124,"language":23804,"meta":10,"style":10},"touch ch8_gym_env.py\n",[89,115126,115127],{"__ignoreMap":10},[92,115128,115129,115131],{"class":94,"line":95},[92,115130,101258],{"class":1942},[92,115132,115133],{"class":207}," ch8_gym_env.py\n",[38,115135,110419],{},[83,115137,115139],{"className":23802,"code":115138,"language":23804,"meta":10,"style":10},"python ch8_gym_env.py\n",[89,115140,115141],{"__ignoreMap":10},[92,115142,115143,115145],{"class":94,"line":95},[92,115144,30361],{"class":1942},[92,115146,115133],{"class":207},[63,115148,101547],{"id":101547},[38,115150,115151],{},"继承 Gymnasium 环境：",[83,115153,115155],{"className":30359,"code":115154,"language":30361,"meta":10,"style":10},"class ReacherEnv(gym.Env):\n",[89,115156,115157],{"__ignoreMap":10},[92,115158,115159,115161,115163,115165,115167,115169,115171],{"class":94,"line":95},[92,115160,14674],{"class":98},[92,115162,114032],{"class":1942},[92,115164,103],{"class":102},[92,115166,113515],{"class":1942},[92,115168,661],{"class":102},[92,115170,114041],{"class":1942},[92,115172,30767],{"class":102},[38,115174,115175],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[38,115177,115178],{},"初始化模型：",[83,115180,115182],{"className":30359,"code":115181,"language":30361,"meta":10,"style":10},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[89,115183,115184,115198],{"__ignoreMap":10},[92,115185,115186,115188,115190,115192,115194,115196],{"class":94,"line":95},[92,115187,30804],{"class":151},[92,115189,114092],{"class":102},[92,115191,148],{"class":98},[92,115193,101387],{"class":102},[92,115195,101289],{"class":151},[92,115197,109],{"class":102},[92,115199,115200,115202,115204,115206,115208,115210],{"class":94,"line":11},[92,115201,30804],{"class":151},[92,115203,114107],{"class":102},[92,115205,148],{"class":98},[92,115207,114112],{"class":102},[92,115209,30804],{"class":151},[92,115211,114117],{"class":102},[38,115213,115214,115215,115217],{},"这和前面章节一样，只是现在放到了类的 ",[89,115216,30810],{}," 里。",[38,115219,115220],{},"缓存 site ID：",[83,115222,115224],{"className":30359,"code":115223,"language":30361,"meta":10,"style":10},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[89,115225,115226,115240],{"__ignoreMap":10},[92,115227,115228,115230,115232,115234,115236,115238],{"class":94,"line":95},[92,115229,30804],{"class":151},[92,115231,114128],{"class":102},[92,115233,148],{"class":98},[92,115235,114133],{"class":102},[92,115237,89534],{"class":151},[92,115239,109],{"class":102},[92,115241,115242,115244,115246,115248,115250,115252],{"class":94,"line":11},[92,115243,30804],{"class":151},[92,115245,114149],{"class":102},[92,115247,148],{"class":98},[92,115249,114133],{"class":102},[92,115251,89534],{"class":151},[92,115253,109],{"class":102},[38,115255,115256],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[38,115258,115259],{},"reset：",[83,115261,115263],{"className":30359,"code":115262,"language":30361,"meta":10,"style":10},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[89,115264,115265],{"__ignoreMap":10},[92,115266,115267,115269,115271,115273,115275,115277,115279,115281,115283,115285,115287,115289,115291,115293,115295,115297,115299],{"class":94,"line":95},[92,115268,31928],{"class":98},[92,115270,114497],{"class":1942},[92,115272,114500],{"class":102},[92,115274,558],{"class":98},[92,115276,114505],{"class":102},[92,115278,106],{"class":151},[92,115280,25090],{"class":98},[92,115282,38914],{"class":151},[92,115284,13544],{"class":98},[92,115286,38914],{"class":151},[92,115288,114518],{"class":102},[92,115290,114521],{"class":151},[92,115292,25090],{"class":98},[92,115294,38914],{"class":151},[92,115296,13544],{"class":98},[92,115298,38914],{"class":151},[92,115300,30767],{"class":102},[38,115302,115303,115305],{},[89,115304,70036],{}," 做四件事：",[46,115307,115308,115311,115314,115317],{},[49,115309,115310],{},"设置随机种子。",[49,115312,115313],{},"重置 MuJoCo data。",[49,115315,115316],{},"随机初始化关节角。",[49,115318,115319],{},"返回初始观测和 info。",[38,115321,115322],{},"step：",[83,115324,115326],{"className":30359,"code":115325,"language":30361,"meta":10,"style":10},"def step(self, action):\n",[89,115327,115328],{"__ignoreMap":10},[92,115329,115330,115332,115334],{"class":94,"line":95},[92,115331,31928],{"class":98},[92,115333,114662],{"class":1942},[92,115335,114665],{"class":102},[38,115337,115338,115340],{},[89,115339,107109],{}," 做六件事：",[46,115342,115343,115346,115352,115355,115358,115361],{},[49,115344,115345],{},"检查并裁剪 action。",[49,115347,115348,115349,28366],{},"写入 ",[89,115350,115351],{},"self.data.ctrl",[49,115353,115354],{},"连续推进若干个 MuJoCo 物理步。",[49,115356,115357],{},"计算新观测。",[49,115359,115360],{},"计算奖励和结束条件。",[49,115362,115363],{},"返回 Gymnasium 标准五元组。",[63,115365,101683],{"id":101683},[83,115367,115369],{"className":30359,"code":115368,"language":30361,"meta":10,"style":10},"import gymnasium as gym\n",[89,115370,115371],{"__ignoreMap":10},[92,115372,115373,115375,115377,115379],{"class":94,"line":95},[92,115374,30373],{"class":98},[92,115376,113870],{"class":102},[92,115378,31364],{"class":98},[92,115380,113875],{"class":102},[38,115382,115383,115384,115386,115387,115390],{},"导入 Gymnasium，并起别名 ",[89,115385,113515],{},"。后面写 ",[89,115388,115389],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[83,115392,115394],{"className":30359,"code":115393,"language":30361,"meta":10,"style":10},"from gymnasium import spaces\n",[89,115395,115396],{"__ignoreMap":10},[92,115397,115398,115400,115402,115404],{"class":94,"line":95},[92,115399,30718],{"class":98},[92,115401,113870],{"class":102},[92,115403,30373],{"class":98},[92,115405,113902],{"class":102},[38,115407,115408,115409,115412],{},"导入空间定义工具。",[89,115410,115411],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[83,115414,115415],{"className":30359,"code":115154,"language":30361,"meta":10,"style":10},[89,115416,115417],{"__ignoreMap":10},[92,115418,115419,115421,115423,115425,115427,115429,115431],{"class":94,"line":95},[92,115420,14674],{"class":98},[92,115422,114032],{"class":1942},[92,115424,103],{"class":102},[92,115426,113515],{"class":1942},[92,115428,661],{"class":102},[92,115430,114041],{"class":1942},[92,115432,30767],{"class":102},[38,115434,115435,115436,115439,115440,115442,115443,100993,115445,115447],{},"定义一个类，名字叫 ",[89,115437,115438],{},"ReacherEnv","。括号里的 ",[89,115441,115389],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[89,115444,70036],{},[89,115446,107109],{}," 这两个核心方法。",[83,115449,115451],{"className":30359,"code":115450,"language":30361,"meta":10,"style":10},"metadata = {\"render_modes\": []}\n",[89,115452,115453],{"__ignoreMap":10},[92,115454,115455,115458,115460,115462,115464],{"class":94,"line":95},[92,115456,115457],{"class":102},"metadata ",[92,115459,148],{"class":98},[92,115461,4427],{"class":102},[92,115463,114055],{"class":207},[92,115465,114058],{"class":102},[38,115467,115468],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[83,115470,115472],{"className":30359,"code":115471,"language":30361,"meta":10,"style":10},"def __init__(self) -> None:\n",[89,115473,115474],{"__ignoreMap":10},[92,115475,115476,115478,115480,115482,115484],{"class":94,"line":95},[92,115477,31928],{"class":98},[92,115479,30785],{"class":151},[92,115481,114071],{"class":102},[92,115483,95666],{"class":151},[92,115485,3718],{"class":102},[38,115487,115488,115490,115491,28366],{},[89,115489,30810],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[89,115492,115493],{},"env = ReacherEnv()",[83,115495,115497],{"className":30359,"code":115496,"language":30361,"meta":10,"style":10},"super().__init__()\n",[89,115498,115499],{"__ignoreMap":10},[92,115500,115501,115504,115506,115508],{"class":94,"line":95},[92,115502,115503],{"class":151},"super",[92,115505,17241],{"class":102},[92,115507,30810],{"class":151},[92,115509,1955],{"class":102},[38,115511,115512,115513,115515],{},"调用父类 ",[89,115514,115389],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[83,115517,115518],{"className":30359,"code":115181,"language":30361,"meta":10,"style":10},[89,115519,115520,115534],{"__ignoreMap":10},[92,115521,115522,115524,115526,115528,115530,115532],{"class":94,"line":95},[92,115523,30804],{"class":151},[92,115525,114092],{"class":102},[92,115527,148],{"class":98},[92,115529,101387],{"class":102},[92,115531,101289],{"class":151},[92,115533,109],{"class":102},[92,115535,115536,115538,115540,115542,115544,115546],{"class":94,"line":11},[92,115537,30804],{"class":151},[92,115539,114107],{"class":102},[92,115541,148],{"class":98},[92,115543,114112],{"class":102},[92,115545,30804],{"class":151},[92,115547,114117],{"class":102},[38,115549,115550,115551,115553,115554,100993,115557,115560],{},"把 MuJoCo 模型和状态保存到 ",[89,115552,30804],{}," 上。",[89,115555,115556],{},"self.model",[89,115558,115559],{},"self.data"," 表示这个环境对象自己的模型和状态。",[83,115562,115563],{"className":30359,"code":115223,"language":30361,"meta":10,"style":10},[89,115564,115565,115579],{"__ignoreMap":10},[92,115566,115567,115569,115571,115573,115575,115577],{"class":94,"line":95},[92,115568,30804],{"class":151},[92,115570,114128],{"class":102},[92,115572,148],{"class":98},[92,115574,114133],{"class":102},[92,115576,89534],{"class":151},[92,115578,109],{"class":102},[92,115580,115581,115583,115585,115587,115589,115591],{"class":94,"line":11},[92,115582,30804],{"class":151},[92,115584,114149],{"class":102},[92,115586,148],{"class":98},[92,115588,114133],{"class":102},[92,115590,89534],{"class":151},[92,115592,109],{"class":102},[38,115594,115595,115596,100993,115599,115602],{},"提前查好 tip 和 target 的 site ID。这样 ",[89,115597,115598],{},"_get_obs",[89,115600,115601],{},"_get_reward"," 里就不用每次按名字查找。",[83,115604,115606],{"className":30359,"code":115605,"language":30361,"meta":10,"style":10},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[89,115607,115608,115618,115628],{"__ignoreMap":10},[92,115609,115610,115612,115614,115616],{"class":94,"line":95},[92,115611,30804],{"class":151},[92,115613,113842],{"class":102},[92,115615,148],{"class":98},[92,115617,54407],{"class":151},[92,115619,115620,115622,115624,115626],{"class":94,"line":11},[92,115621,30804],{"class":151},[92,115623,114221],{"class":102},[92,115625,148],{"class":98},[92,115627,114226],{"class":151},[92,115629,115630,115632,115634,115636],{"class":94,"line":1158},[92,115631,30804],{"class":151},[92,115633,113681],{"class":102},[92,115635,148],{"class":98},[92,115637,47314],{"class":151},[38,115639,115640,115643,115644,115647,115648,115651],{},[89,115641,115642],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[89,115645,115646],{},"max_steps"," 是一个 episode 最多运行多少步。",[89,115649,115650],{},"steps"," 记录当前 episode 已经走了多少步。",[83,115653,115654],{"className":30359,"code":113720,"language":30361,"meta":10,"style":10},[89,115655,115656],{"__ignoreMap":10},[92,115657,115658,115660,115662,115664,115666,115668,115670,115672,115674,115676,115678,115680,115682,115684,115686,115688,115690,115692,115694,115696],{"class":94,"line":95},[92,115659,30804],{"class":151},[92,115661,113729],{"class":102},[92,115663,148],{"class":98},[92,115665,113734],{"class":102},[92,115667,113737],{"class":5196},[92,115669,113740],{"class":98},[92,115671,102378],{"class":151},[92,115673,12415],{"class":102},[92,115675,113747],{"class":5196},[92,115677,148],{"class":98},[92,115679,102378],{"class":151},[92,115681,12415],{"class":102},[92,115683,95943],{"class":5196},[92,115685,148],{"class":98},[92,115687,103],{"class":102},[92,115689,180],{"class":151},[92,115691,113764],{"class":102},[92,115693,93480],{"class":5196},[92,115695,148],{"class":98},[92,115697,113771],{"class":102},[38,115699,115700,115701,115704,115705,100993,115708,115711],{},"定义动作空间。",[89,115702,115703],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[89,115706,115707],{},"low=-1.0",[89,115709,115710],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[83,115713,115714],{"className":30359,"code":113781,"language":30361,"meta":10,"style":10},[89,115715,115716],{"__ignoreMap":10},[92,115717,115718,115720,115722,115724,115726,115728,115730,115732,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752],{"class":94,"line":95},[92,115719,30804],{"class":151},[92,115721,113790],{"class":102},[92,115723,148],{"class":98},[92,115725,113734],{"class":102},[92,115727,113737],{"class":5196},[92,115729,113740],{"class":98},[92,115731,113801],{"class":102},[92,115733,113747],{"class":5196},[92,115735,148],{"class":98},[92,115737,113801],{"class":102},[92,115739,95943],{"class":5196},[92,115741,148],{"class":98},[92,115743,103],{"class":102},[92,115745,549],{"class":151},[92,115747,113764],{"class":102},[92,115749,93480],{"class":5196},[92,115751,148],{"class":98},[92,115753,113771],{"class":102},[38,115755,115756,115757,115760,115761,115764],{},"定义观测空间。",[89,115758,115759],{},"shape=(10,)"," 表示观测是 10 个数。",[89,115762,115763],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[83,115766,115768],{"className":30359,"code":115767,"language":30361,"meta":10,"style":10},"def _get_obs(self) -> np.ndarray:\n",[89,115769,115770],{"__ignoreMap":10},[92,115771,115772,115774,115776],{"class":94,"line":95},[92,115773,31928],{"class":98},[92,115775,114331],{"class":1942},[92,115777,114334],{"class":102},[38,115779,115780,115781,115783],{},"定义内部函数，用来生成观测。函数名前面的 ",[89,115782,1095],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[83,115785,115787],{"className":30359,"code":115786,"language":30361,"meta":10,"style":10},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[89,115788,115789,115803],{"__ignoreMap":10},[92,115790,115791,115793,115795,115797,115799,115801],{"class":94,"line":95},[92,115792,111543],{"class":102},[92,115794,148],{"class":98},[92,115796,38854],{"class":151},[92,115798,114345],{"class":102},[92,115800,30804],{"class":151},[92,115802,114350],{"class":102},[92,115804,115805,115807,115809,115811,115813,115815],{"class":94,"line":11},[92,115806,111553],{"class":102},[92,115808,148],{"class":98},[92,115810,38854],{"class":151},[92,115812,114345],{"class":102},[92,115814,30804],{"class":151},[92,115816,114365],{"class":102},[38,115818,115819],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[83,115821,115823],{"className":30359,"code":115822,"language":30361,"meta":10,"style":10},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[89,115824,115825,115841],{"__ignoreMap":10},[92,115826,115827,115829,115831,115833,115835,115837,115839],{"class":94,"line":95},[92,115828,110829],{"class":102},[92,115830,148],{"class":98},[92,115832,114374],{"class":102},[92,115834,30804],{"class":151},[92,115836,114379],{"class":102},[92,115838,30804],{"class":151},[92,115840,114384],{"class":102},[92,115842,115843,115845],{"class":94,"line":11},[92,115844,17026],{"class":98},[92,115846,114391],{"class":102},[38,115848,115849,115850,115853,115854,115856],{},"拼接观测，并转换成 ",[89,115851,115852],{},"float32","。很多强化学习库默认使用 ",[89,115855,115852],{},"，所以这里主动转换。",[83,115858,115859],{"className":30359,"code":115262,"language":30361,"meta":10,"style":10},[89,115860,115861],{"__ignoreMap":10},[92,115862,115863,115865,115867,115869,115871,115873,115875,115877,115879,115881,115883,115885,115887,115889,115891,115893,115895],{"class":94,"line":95},[92,115864,31928],{"class":98},[92,115866,114497],{"class":1942},[92,115868,114500],{"class":102},[92,115870,558],{"class":98},[92,115872,114505],{"class":102},[92,115874,106],{"class":151},[92,115876,25090],{"class":98},[92,115878,38914],{"class":151},[92,115880,13544],{"class":98},[92,115882,38914],{"class":151},[92,115884,114518],{"class":102},[92,115886,114521],{"class":151},[92,115888,25090],{"class":98},[92,115890,38914],{"class":151},[92,115892,13544],{"class":98},[92,115894,38914],{"class":151},[92,115896,30767],{"class":102},[38,115898,115899,115900,115902,115903,115906],{},"定义 reset。",[89,115901,114541],{}," 用来控制随机数，保证实验可以复现。",[89,115904,115905],{},"options"," 用来接收额外配置，本章暂时不用。",[83,115908,115910],{"className":30359,"code":115909,"language":30361,"meta":10,"style":10},"super().reset(seed=seed)\n",[89,115911,115912],{"__ignoreMap":10},[92,115913,115914,115916,115918,115920,115922],{"class":94,"line":95},[92,115915,115503],{"class":151},[92,115917,114538],{"class":102},[92,115919,114541],{"class":5196},[92,115921,148],{"class":98},[92,115923,114546],{"class":102},[38,115925,115926,115927,115930],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[89,115928,115929],{},"self.np_random"," 生成可复现的随机数。",[83,115932,115934],{"className":30359,"code":115933,"language":30361,"meta":10,"style":10},"mujoco.mj_resetData(self.model, self.data)\n",[89,115935,115936],{"__ignoreMap":10},[92,115937,115938,115941,115943,115945,115947],{"class":94,"line":95},[92,115939,115940],{"class":102},"mujoco.mj_resetData(",[92,115942,30804],{"class":151},[92,115944,114556],{"class":102},[92,115946,30804],{"class":151},[92,115948,114561],{"class":102},[38,115950,115951],{},"把 MuJoCo 状态重置到默认状态。",[83,115953,115955],{"className":30359,"code":115954,"language":30361,"meta":10,"style":10},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[89,115956,115957],{"__ignoreMap":10},[92,115958,115959,115961,115963,115965,115967,115969,115971,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991],{"class":94,"line":95},[92,115960,30804],{"class":151},[92,115962,114572],{"class":102},[92,115964,148],{"class":98},[92,115966,38854],{"class":151},[92,115968,114579],{"class":102},[92,115970,113737],{"class":5196},[92,115972,113740],{"class":98},[92,115974,86190],{"class":151},[92,115976,12415],{"class":102},[92,115978,113747],{"class":5196},[92,115980,148],{"class":98},[92,115982,86190],{"class":151},[92,115984,12415],{"class":102},[92,115986,31477],{"class":5196},[92,115988,148],{"class":98},[92,115990,30804],{"class":151},[92,115992,114604],{"class":102},[38,115994,115316,115995,115998,115999,116002,116003,116005],{},[89,115996,115997],{},"[:]"," 表示修改整个数组。",[89,116000,116001],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[89,116004,102125],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[83,116007,116009],{"className":30359,"code":116008,"language":30361,"meta":10,"style":10},"self.data.qvel[:] = 0.0\n",[89,116010,116011],{"__ignoreMap":10},[92,116012,116013,116015,116017,116019],{"class":94,"line":95},[92,116014,30804],{"class":151},[92,116016,114611],{"class":102},[92,116018,148],{"class":98},[92,116020,104736],{"class":151},[38,116022,116023],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[83,116025,116027],{"className":30359,"code":116026,"language":30361,"meta":10,"style":10},"self.steps = 0\nreturn self._get_obs(), {}\n",[89,116028,116029,116039],{"__ignoreMap":10},[92,116030,116031,116033,116035,116037],{"class":94,"line":95},[92,116032,30804],{"class":151},[92,116034,113681],{"class":102},[92,116036,148],{"class":98},[92,116038,47314],{"class":151},[92,116040,116041,116043,116045],{"class":94,"line":11},[92,116042,17026],{"class":98},[92,116044,38854],{"class":151},[92,116046,114651],{"class":102},[38,116048,116049],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[83,116051,116052],{"className":30359,"code":115325,"language":30361,"meta":10,"style":10},[89,116053,116054],{"__ignoreMap":10},[92,116055,116056,116058,116060],{"class":94,"line":95},[92,116057,31928],{"class":98},[92,116059,114662],{"class":1942},[92,116061,114665],{"class":102},[38,116063,116064],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[83,116066,116068],{"className":30359,"code":116067,"language":30361,"meta":10,"style":10},"action = np.asarray(action, dtype=np.float32)\n",[89,116069,116070],{"__ignoreMap":10},[92,116071,116072,116074,116076,116078,116080,116082],{"class":94,"line":95},[92,116073,107417],{"class":102},[92,116075,148],{"class":98},[92,116077,114674],{"class":102},[92,116079,93480],{"class":5196},[92,116081,148],{"class":98},[92,116083,113771],{"class":102},[38,116085,116086,116087,28366],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[89,116088,115852],{},[83,116090,116092],{"className":30359,"code":116091,"language":30361,"meta":10,"style":10},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[89,116093,116094],{"__ignoreMap":10},[92,116095,116096,116098,116100,116102,116104,116106,116108],{"class":94,"line":95},[92,116097,107417],{"class":102},[92,116099,148],{"class":98},[92,116101,107422],{"class":102},[92,116103,30804],{"class":151},[92,116105,114693],{"class":102},[92,116107,30804],{"class":151},[92,116109,114698],{"class":102},[38,116111,116112],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[83,116114,116116],{"className":30359,"code":116115,"language":30361,"meta":10,"style":10},"self.data.ctrl[:] = action\n",[89,116117,116118],{"__ignoreMap":10},[92,116119,116120,116122,116124,116126],{"class":94,"line":95},[92,116121,30804],{"class":151},[92,116123,114709],{"class":102},[92,116125,148],{"class":98},[92,116127,107445],{"class":102},[38,116129,116130],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[83,116132,116134],{"className":30359,"code":116133,"language":30361,"meta":10,"style":10},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[89,116135,116136,116152],{"__ignoreMap":10},[92,116137,116138,116140,116142,116144,116146,116148,116150],{"class":94,"line":95},[92,116139,3004],{"class":98},[92,116141,101476],{"class":102},[92,116143,26024],{"class":98},[92,116145,32424],{"class":151},[92,116147,103],{"class":102},[92,116149,30804],{"class":151},[92,116151,114730],{"class":102},[92,116153,116154,116157,116159,116161,116163],{"class":94,"line":11},[92,116155,116156],{"class":102},"    mujoco.mj_step(",[92,116158,30804],{"class":151},[92,116160,114556],{"class":102},[92,116162,30804],{"class":151},[92,116164,114561],{"class":102},[38,116166,116167,116168,116171,116172,116174,116175,28366],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[89,116169,116170],{},"frame_skip=5","，所以外部调用一次 ",[89,116173,113852],{},"，内部实际执行 5 次 ",[89,116176,101190],{},[83,116178,116180],{"className":30359,"code":116179,"language":30361,"meta":10,"style":10},"self.steps += 1\n",[89,116181,116182],{"__ignoreMap":10},[92,116183,116184,116186,116188,116190],{"class":94,"line":95},[92,116185,30804],{"class":151},[92,116187,113681],{"class":102},[92,116189,9457],{"class":98},[92,116191,55679],{"class":151},[38,116193,116194],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[83,116196,116198],{"className":30359,"code":116197,"language":30361,"meta":10,"style":10},"obs = self._get_obs()\nreward = self._get_reward()\n",[89,116199,116200,116210],{"__ignoreMap":10},[92,116201,116202,116204,116206,116208],{"class":94,"line":95},[92,116203,110829],{"class":102},[92,116205,148],{"class":98},[92,116207,38854],{"class":151},[92,116209,114772],{"class":102},[92,116211,116212,116214,116216,116218],{"class":94,"line":11},[92,116213,110980],{"class":102},[92,116215,148],{"class":98},[92,116217,38854],{"class":151},[92,116219,114783],{"class":102},[38,116221,116222],{},"计算新的观测和奖励。",[83,116224,116226],{"className":30359,"code":116225,"language":30361,"meta":10,"style":10},"dist = float(np.linalg.norm(tip - target))\n",[89,116227,116228],{"__ignoreMap":10},[92,116229,116230,116232,116234,116236,116238,116240],{"class":94,"line":95},[92,116231,111571],{"class":102},[92,116233,148],{"class":98},[92,116235,109772],{"class":151},[92,116237,114826],{"class":102},[92,116239,635],{"class":98},[92,116241,114831],{"class":102},[38,116243,116244],{},"计算末端到目标的距离，并转换成 Python float。",[83,116246,116247],{"className":30359,"code":113652,"language":30361,"meta":10,"style":10},[89,116248,116249,116261],{"__ignoreMap":10},[92,116250,116251,116253,116255,116257,116259],{"class":94,"line":95},[92,116252,113659],{"class":102},[92,116254,148],{"class":98},[92,116256,113664],{"class":102},[92,116258,1013],{"class":98},[92,116260,113669],{"class":151},[92,116262,116263,116265,116267,116269,116271,116273,116275],{"class":94,"line":11},[92,116264,113674],{"class":102},[92,116266,148],{"class":98},[92,116268,38854],{"class":151},[92,116270,113681],{"class":102},[92,116272,1689],{"class":98},[92,116274,38854],{"class":151},[92,116276,113688],{"class":102},[38,116278,116279],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[83,116281,116283],{"className":30359,"code":116282,"language":30361,"meta":10,"style":10},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[89,116284,116285,116298],{"__ignoreMap":10},[92,116286,116287,116290,116292,116294,116296],{"class":94,"line":95},[92,116288,116289],{"class":102},"info ",[92,116291,148],{"class":98},[92,116293,4427],{"class":102},[92,116295,114877],{"class":207},[92,116297,114880],{"class":102},[92,116299,116300,116302],{"class":94,"line":11},[92,116301,17026],{"class":98},[92,116303,114887],{"class":102},[38,116305,116306,116309],{},[89,116307,116308],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[83,116311,116313],{"className":30359,"code":116312,"language":30361,"meta":10,"style":10},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[89,116314,116315,116324],{"__ignoreMap":10},[92,116316,116317,116320,116322],{"class":94,"line":95},[92,116318,116319],{"class":102},"env ",[92,116321,148],{"class":98},[92,116323,114917],{"class":102},[92,116325,116326,116328,116330,116332,116334,116336,116338],{"class":94,"line":11},[92,116327,113375],{"class":102},[92,116329,148],{"class":98},[92,116331,114927],{"class":102},[92,116333,114541],{"class":5196},[92,116335,148],{"class":98},[92,116337,294],{"class":151},[92,116339,109],{"class":102},[38,116341,116342,116343,116346],{},"创建环境并重置。",[89,116344,116345],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[83,116348,116350],{"className":30359,"code":116349,"language":30361,"meta":10,"style":10},"action = env.action_space.sample()\n",[89,116351,116352],{"__ignoreMap":10},[92,116353,116354,116356,116358],{"class":94,"line":95},[92,116355,107417],{"class":102},[92,116357,148],{"class":98},[92,116359,114996],{"class":102},[38,116361,116362],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[33,116364,102291],{"id":102290},[38,116366,105459],{},[83,116368,116371],{"className":116369,"code":116370,"language":5167,"meta":10},[5165],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[89,116372,116370],{"__ignoreMap":10},[38,116374,116375],{},"这个环境已经具备强化学习环境的基本结构。",[38,116377,116378],{},"主函数里使用随机动作：",[83,116380,116381],{"className":30359,"code":116349,"language":30361,"meta":10,"style":10},[89,116382,116383],{"__ignoreMap":10},[92,116384,116385,116387,116389],{"class":94,"line":95},[92,116386,107417],{"class":102},[92,116388,148],{"class":98},[92,116390,114996],{"class":102},[38,116392,116393],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[33,116395,102323],{"id":102322},[46,116397,116398,116401,116407,116416,116425,116434,116440],{},[49,116399,116400],{},"运行程序。",[49,116402,116403,116404,28366],{},"确认 ",[89,116405,116406],{},"obs.shape == (10,)",[49,116408,111156,116409,116412,116413,28366],{},[89,116410,116411],{},"env.action_space","，应类似 ",[89,116414,116415],{},"Box(-1.0, 1.0, (2,), float32)",[49,116417,105560,116418,116421,116422,28366],{},[89,116419,116420],{},"self.max_steps = 10","，确认环境会更快 ",[89,116423,116424],{},"truncated=True",[49,116426,102386,116427,102389,116430,116433],{},[89,116428,116429],{},"terminated = dist \u003C 0.05",[89,116431,116432],{},"dist \u003C 0.2","，观察是否更容易结束。",[49,116435,102386,116436,116439],{},[89,116437,116438],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[49,116441,116442,116443,116445,116446,116449],{},"在 ",[89,116444,116308],{}," 里加入 ",[89,116447,116448],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[33,116451,102428],{"id":102427},[63,116453,116455],{"id":116454},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[38,116457,116458,116459,116461],{},"Gymnasium 的 ",[89,116460,107109],{}," 返回 5 个值:",[83,116463,116465],{"className":30359,"code":116464,"language":30361,"meta":10,"style":10},"obs, reward, terminated, truncated, info\n",[89,116466,116467],{"__ignoreMap":10},[92,116468,116469],{"class":94,"line":95},[92,116470,116464],{"class":102},[38,116472,116473],{},"不是旧 Gym 的 4 个值。",[63,116475,116477,116480],{"id":116476},"datactrl-action-维度错误",[89,116478,116479],{},"data.ctrl[:] = action"," 维度错误",[38,116482,102498],{},[83,116484,116486],{"className":30359,"code":116485,"language":30361,"meta":10,"style":10},"print(self.model.nu)\nprint(action.shape)\n",[89,116487,116488,116499],{"__ignoreMap":10},[92,116489,116490,116492,116494,116496],{"class":94,"line":95},[92,116491,30396],{"class":151},[92,116493,103],{"class":102},[92,116495,30804],{"class":151},[92,116497,116498],{"class":102},".model.nu)\n",[92,116500,116501,116503],{"class":94,"line":11},[92,116502,30396],{"class":151},[92,116504,116505],{"class":102},"(action.shape)\n",[38,116507,116508],{},"两者必须匹配。",[63,116510,116512],{"id":116511},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[38,116514,102437],{},[83,116516,116518],{"className":30359,"code":116517,"language":30361,"meta":10,"style":10},"mujoco.mj_forward(self.model, self.data)\n",[89,116519,116520],{"__ignoreMap":10},[92,116521,116522,116525,116527,116529,116531],{"class":94,"line":95},[92,116523,116524],{"class":102},"mujoco.mj_forward(",[92,116526,30804],{"class":151},[92,116528,114556],{"class":102},[92,116530,30804],{"class":151},[92,116532,114561],{"class":102},[63,116534,116536,116538],{"id":116535},"observation_space-维度和-obs-不一致",[89,116537,113575],{}," 维度和 obs 不一致",[38,116540,102550],{},[83,116542,116544],{"className":30359,"code":116543,"language":30361,"meta":10,"style":10},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[89,116545,116546,116556,116563],{"__ignoreMap":10},[92,116547,116548,116550,116552,116554],{"class":94,"line":95},[92,116549,110829],{"class":102},[92,116551,148],{"class":98},[92,116553,38854],{"class":151},[92,116555,114772],{"class":102},[92,116557,116558,116560],{"class":94,"line":11},[92,116559,30396],{"class":151},[92,116561,116562],{"class":102},"(obs.shape)\n",[92,116564,116565,116567,116569,116571],{"class":94,"line":1158},[92,116566,30396],{"class":151},[92,116568,103],{"class":102},[92,116570,30804],{"class":151},[92,116572,116573],{"class":102},".observation_space.shape)\n",[38,116575,116576],{},"两者必须一致。本章观测是：",[83,116578,116581],{"className":116579,"code":116580,"language":5167,"meta":10},[5165],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[89,116582,116580],{"__ignoreMap":10},[63,116584,116586],{"id":116585},"action-超过范围","action 超过范围",[38,116588,116589],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[83,116591,116592],{"className":30359,"code":116091,"language":30361,"meta":10,"style":10},[89,116593,116594],{"__ignoreMap":10},[92,116595,116596,116598,116600,116602,116604,116606,116608],{"class":94,"line":95},[92,116597,107417],{"class":102},[92,116599,148],{"class":98},[92,116601,107422],{"class":102},[92,116603,30804],{"class":151},[92,116605,114693],{"class":102},[92,116607,30804],{"class":151},[92,116609,114698],{"class":102},[38,116611,116612,116613,28366],{},"这能避免无效动作直接写入 ",[89,116614,101051],{},[63,116616,116618],{"id":116617},"忘记返回-info","忘记返回 info",[38,116620,116458,116621,100993,116623,116625],{},[89,116622,70036],{},[89,116624,107109],{}," 都会返回 info：",[83,116627,116628],{"className":30359,"code":113368,"language":30361,"meta":10,"style":10},[89,116629,116630,116638],{"__ignoreMap":10},[92,116631,116632,116634,116636],{"class":94,"line":95},[92,116633,113375],{"class":102},[92,116635,148],{"class":98},[92,116637,113380],{"class":102},[92,116639,116640,116642,116644],{"class":94,"line":11},[92,116641,113385],{"class":102},[92,116643,148],{"class":98},[92,116645,113390],{"class":102},[38,116647,116648,116649,28366],{},"即使暂时没有额外信息，也返回 ",[89,116650,32440],{},[33,116652,116654],{"id":116653},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[38,116656,116657],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[46,116659,116660,116663,116666,116669,116672,116675],{},[49,116661,116662],{},"更稳定的 reward。",[49,116664,116665],{},"合理的 episode 长度。",[49,116667,116668],{},"可重复的随机目标采样。",[49,116670,116671],{},"render 接口。",[49,116673,116674],{},"环境注册代码。",[49,116676,116677],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[38,116679,116680],{},"如果只是自己写训练循环，最小形式是：",[83,116682,116684],{"className":30359,"code":116683,"language":30361,"meta":10,"style":10},"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",[89,116685,116686,116694,116710,116714,116730,116739,116748,116758],{"__ignoreMap":10},[92,116687,116688,116690,116692],{"class":94,"line":95},[92,116689,116319],{"class":102},[92,116691,148],{"class":98},[92,116693,114917],{"class":102},[92,116695,116696,116698,116700,116702,116704,116706,116708],{"class":94,"line":11},[92,116697,113375],{"class":102},[92,116699,148],{"class":98},[92,116701,114927],{"class":102},[92,116703,114541],{"class":5196},[92,116705,148],{"class":98},[92,116707,294],{"class":151},[92,116709,109],{"class":102},[92,116711,116712],{"class":94,"line":1158},[92,116713,2379],{"emptyLinePlaceholder":17},[92,116715,116716,116718,116720,116722,116724,116726,116728],{"class":94,"line":1173},[92,116717,3004],{"class":98},[92,116719,101476],{"class":102},[92,116721,26024],{"class":98},[92,116723,32424],{"class":151},[92,116725,103],{"class":102},[92,116727,6390],{"class":151},[92,116729,30767],{"class":102},[92,116731,116732,116735,116737],{"class":94,"line":1179},[92,116733,116734],{"class":102},"    action ",[92,116736,148],{"class":98},[92,116738,114996],{"class":102},[92,116740,116741,116744,116746],{"class":94,"line":1193},[92,116742,116743],{"class":102},"    obs, reward, terminated, truncated, info ",[92,116745,148],{"class":98},[92,116747,113390],{"class":102},[92,116749,116750,116752,116754,116756],{"class":94,"line":1199},[92,116751,3080],{"class":98},[92,116753,115062],{"class":102},[92,116755,115065],{"class":98},[92,116757,115068],{"class":102},[92,116759,116760,116763,116765],{"class":94,"line":1290},[92,116761,116762],{"class":102},"        obs, info ",[92,116764,148],{"class":98},[92,116766,113380],{"class":102},[33,116768,116770],{"id":116769},"_9本章小结","9.本章小结",[38,116772,116773],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[83,116775,116778],{"className":116776,"code":116777,"language":5167,"meta":10},[5165],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[89,116779,116777],{"__ignoreMap":10},[38,116781,116782],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5106,116784,116785],{},"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":10,"searchDepth":11,"depth":11,"links":116787},[116788,116789,116790,116797,116801,116802,116803,116813,116814],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":116791},[116792,116794,116796],{"id":113599,"depth":1158,"text":116793},"terminated 和 truncated 的区别",{"id":113702,"depth":1158,"text":116795},"observation_space 和 action_space",{"id":113829,"depth":1158,"text":113830},{"id":101227,"depth":11,"text":101228,"children":116798},[116799,116800],{"id":101547,"depth":1158,"text":101547},{"id":101683,"depth":1158,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":116804},[116805,116806,116808,116809,116811,116812],{"id":116454,"depth":1158,"text":116455},{"id":116476,"depth":1158,"text":116807},"data.ctrl[:] = action 维度错误",{"id":116511,"depth":1158,"text":116512},{"id":116535,"depth":1158,"text":116810},"observation_space 维度和 obs 不一致",{"id":116585,"depth":1158,"text":116586},{"id":116617,"depth":1158,"text":116618},{"id":116653,"depth":11,"text":116654},{"id":116769,"depth":11,"text":116770},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113352,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116821,"title":116822,"body":116823,"description":117246,"extension":14,"meta":117247,"navigation":17,"path":117248,"seo":117249,"stem":117250,"__hash__":117251},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116824,"toc":117236},[116825,116829,116832,116835,116855,116861,116867,116877,116880,116883,116903,116906,116910,116913,116919,116922,116936,116939,116942,117016,117019,117025,117028,117051,117054,117104,117107,117113,117116,117119,117122,117141,117144,117150,117153,117156,117159,117179,117182,117185,117188,117233],[29,116826,116828],{"id":116827},"mujoco-学习","MuJoCo 学习",[38,116830,116831],{},"初版",[38,116833,116834],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[46,116836,116837,116840,116843,116852],{},[49,116838,116839],{},"MuJoCo 模型文件在描述什么。",[49,116841,116842],{},"Python 代码怎样读取和推进仿真。",[49,116844,116845,315,116847,315,116849,116851],{},[89,116846,104005],{},[89,116848,104335],{},[89,116850,104338],{}," 这些数组为什么重要。",[49,116853,116854],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[38,116856,116857,116858,116860],{},"默认环境为 Fedora 44、Python >= 3.10、",[89,116859,101002],{}," 官方 Python bindings。",[38,116862,116863,116864,116866],{},"注意：本文禁止使用 ",[89,116865,100987],{},"。所有示例均使用：",[83,116868,116869],{"className":30359,"code":101553,"language":30361,"meta":10,"style":10},[89,116870,116871],{"__ignoreMap":10},[92,116872,116873,116875],{"class":94,"line":95},[92,116874,30373],{"class":98},[92,116876,101276],{"class":102},[33,116878,116879],{"id":116879},"适合谁阅读",[38,116881,116882],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[46,116884,116885,116888,116891,116894],{},[49,116886,116887],{},"没学过 MuJoCo，只会一点 Python。",[49,116889,116890],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[49,116892,116893],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[49,116895,116896,116897,116899,116900,116902],{},"以前接触过 ",[89,116898,100987],{},"，现在想迁移到官方 ",[89,116901,100996],{}," Python bindings。",[38,116904,116905],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[33,116907,116909],{"id":116908},"mujoco-到底是什么","MuJoCo 到底是什么",[38,116911,116912],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[83,116914,116917],{"className":116915,"code":116916,"language":5167,"meta":10},[5165],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[89,116918,116916],{"__ignoreMap":10},[38,116920,116921],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[46,116923,116924,116927,116930,116933],{},[49,116925,116926],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[49,116928,116929],{},"快速测试控制算法，不必一开始就上真实机器人。",[49,116931,116932],{},"生成强化学习环境。",[49,116934,116935],{},"采集状态、动作、图像、奖励等训练数据。",[33,116937,116938],{"id":116938},"学习前的心智模型",[38,116940,116941],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[240,116943,116944,116956],{},[243,116945,116946],{},[246,116947,116948,116951,116954],{},[249,116949,116950],{"align":23716},"部分",[249,116952,116953],{"align":23716},"负责什么",[249,116955,21167],{"align":23716},[287,116957,116958,116969,116981,116993,117005],{},[246,116959,116960,116963,116966],{},[292,116961,116962],{"align":23716},"MJCF XML",[292,116964,116965],{"align":23716},"定义世界和机器人结构",[292,116967,116968],{"align":23716},"地面、盒子、关节、电机、摄像头",[246,116970,116971,116975,116978],{},[292,116972,116973],{"align":23716},[89,116974,100684],{},[292,116976,116977],{"align":23716},"编译后的静态模型",[292,116979,116980],{"align":23716},"有几个关节、有几个电机、时间步长是多少",[246,116982,116983,116987,116990],{},[292,116984,116985],{"align":23716},[89,116986,100694],{},[292,116988,116989],{"align":23716},"运行中的动态状态",[292,116991,116992],{"align":23716},"当前时间、位置、速度、电机输入",[246,116994,116995,116999,117002],{},[292,116996,116997],{"align":23716},[89,116998,101190],{},[292,117000,117001],{"align":23716},"推进一步物理仿真",[292,117003,117004],{"align":23716},"根据重力、力、碰撞更新状态",[246,117006,117007,117010,117013],{},[292,117008,117009],{"align":23716},"Viewer \u002F Renderer",[292,117011,117012],{"align":23716},"把仿真显示出来",[292,117014,117015],{"align":23716},"打开窗口或保存图片",[38,117017,117018],{},"一句话总结：",[83,117020,117023],{"className":117021,"code":117022,"language":5167,"meta":10},[5165],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[89,117024,117022],{"__ignoreMap":10},[38,117026,117027],{},"参考来源：",[1110,117029,117030,117037,117044],{},[49,117031,117032,117033],{},"MuJoCo Python 官方文档：",[341,117034,117035],{"href":117035,"rel":117036},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23845],[49,117038,117039,117040],{},"MuJoCo XML Reference：",[341,117041,117042],{"href":117042,"rel":117043},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23845],[49,117045,117046,117047],{},"MuJoCo Overview：",[341,117048,117049],{"href":117049,"rel":117050},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23845],[33,117052,117053],{"id":117053},"章节目录",[46,117055,117056,117062,117068,117074,117080,117086,117092,117098],{},[49,117057,117058],{},[341,117059,117061],{"href":117060},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[49,117063,117064],{},[341,117065,117067],{"href":117066},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[49,117069,117070],{},[341,117071,117073],{"href":117072},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[49,117075,117076],{},[341,117077,117079],{"href":117078},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[49,117081,117082],{},[341,117083,117085],{"href":117084},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[49,117087,117088],{},[341,117089,117091],{"href":117090},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[49,117093,117094],{},[341,117095,117097],{"href":117096},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[49,117099,117100],{},[341,117101,117103],{"href":117102},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[33,117105,117106],{"id":117106},"推荐学习路线",[83,117108,117111],{"className":117109,"code":117110,"language":5167,"meta":10},[5165],"环境安装\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",[89,117112,117110],{"__ignoreMap":10},[38,117114,117115],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[33,117117,117118],{"id":117118},"建议的目录结构",[38,117120,117121],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[83,117123,117125],{"className":23802,"code":117124,"language":23804,"meta":10,"style":10},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[89,117126,117127,117135],{"__ignoreMap":10},[92,117128,117129,117131,117133],{"class":94,"line":95},[92,117130,101241],{"class":1942},[92,117132,29197],{"class":151},[92,117134,101246],{"class":207},[92,117136,117137,117139],{"class":94,"line":11},[92,117138,101251],{"class":151},[92,117140,101246],{"class":207},[38,117142,117143],{},"每一章的代码都单独保存：",[83,117145,117148],{"className":117146,"code":117147,"language":5167,"meta":10},[5165],"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",[89,117149,117147],{"__ignoreMap":10},[38,117151,117152],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[33,117154,117155],{"id":117155},"学习方法",[38,117157,117158],{},"每章建议按这个顺序操作：",[46,117160,117161,117164,117167,117170,117173,117176],{},[49,117162,117163],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[49,117165,117166],{},"复制最小可运行代码，保存成指定文件。",[49,117168,117169],{},"运行代码，确认没有报错。",[49,117171,117172],{},"对照“运行结果说明”理解输出。",[49,117174,117175],{},"做“验证步骤”，主动改一两个参数。",[49,117177,117178],{},"遇到报错先看“常见错误与解决方案”。",[38,117180,117181],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[33,117183,117184],{"id":117184},"全局排错顺序",[38,117186,117187],{},"遇到问题时，按下面顺序查：",[46,117189,117190,117196,117202,117207,117210,117213,117220,117230],{},[49,117191,117192,117193],{},"Python 环境是否激活：",[89,117194,117195],{},"which python",[49,117197,117198,117199],{},"MuJoCo 是否能导入：",[89,117200,117201],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[49,117203,117204,117205],{},"是否误装了 ",[89,117206,100987],{},[49,117208,117209],{},"XML 标签是否闭合、属性是否拼写正确",[49,117211,117212],{},"actuator 引用的 joint 名字是否存在",[49,117214,117215,117217,117218],{},[89,117216,101051],{}," 的长度是否等于 ",[89,117219,102133],{},[49,117221,105560,117222,82519,117224,117226,117227],{},[89,117223,104005],{},[89,117225,104335],{}," 后是否调用了 ",[89,117228,117229],{},"mujoco.mj_forward",[49,117231,117232],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5106,117234,117235],{},"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":10,"searchDepth":11,"depth":11,"links":117237},[117238,117239,117240,117241,117242,117243,117244,117245],{"id":116879,"depth":11,"text":116879},{"id":116908,"depth":11,"text":116909},{"id":116938,"depth":11,"text":116938},{"id":117053,"depth":11,"text":117053},{"id":117106,"depth":11,"text":117106},{"id":117118,"depth":11,"text":117118},{"id":117155,"depth":11,"text":117155},{"id":117184,"depth":11,"text":117184},"仿真搭建。",{"category":23358},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116822,"description":117246},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117253,"title":117254,"body":117255,"description":13,"extension":14,"meta":117710,"navigation":17,"path":117711,"seo":117712,"stem":117713,"__hash__":117714},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117256,"toc":117708},[117257,117260,117263,117269,117705],[29,117258,117254],{"id":117259},"_1-最常用的基本操作更新",[38,117261,117262],{},"装linux系统教程：",[38,117264,117265],{},[341,117266,117267],{"href":117267,"rel":117268},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23845],[83,117270,117274],{"className":117271,"code":117272,"language":117273,"meta":10,"style":10},"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",[89,117275,117276,117281,117286,117295,117300,117309,117314,117334,117339,117350,117355,117364,117369,117397,117402,117421,117426,117445,117449,117454,117470,117474,117479,117509,117513,117518,117534,117538,117543,117558,117562,117567,117583,117587,117592,117604,117616,117620,117625,117642,117646,117651,117669,117673,117678,117687,117691,117696],{"__ignoreMap":10},[92,117277,117278],{"class":94,"line":95},[92,117279,117280],{"class":161},"#更新相关的知识\n",[92,117282,117283],{"class":94,"line":11},[92,117284,117285],{"class":161},"# 更新软件包列表（从服务器获取最新软件信息）\n",[92,117287,117288,117290,117293],{"class":94,"line":1158},[92,117289,24557],{"class":1942},[92,117291,117292],{"class":207}," apt",[92,117294,26223],{"class":207},[92,117296,117297],{"class":94,"line":1173},[92,117298,117299],{"class":161},"# 升级所有可更新的软件包（不删除旧包）\n",[92,117301,117302,117304,117306],{"class":94,"line":1179},[92,117303,24557],{"class":1942},[92,117305,117292],{"class":207},[92,117307,117308],{"class":207}," upgrade\n",[92,117310,117311],{"class":94,"line":1193},[92,117312,117313],{"class":161},"#更新和升级软件包\n",[92,117315,117316,117318,117320,117323,117325,117327,117329,117332],{"class":94,"line":1199},[92,117317,24557],{"class":1942},[92,117319,117292],{"class":207},[92,117321,117322],{"class":207}," update",[92,117324,26171],{"class":102},[92,117326,24557],{"class":1942},[92,117328,117292],{"class":207},[92,117330,117331],{"class":207}," upgrade",[92,117333,100956],{"class":151},[92,117335,117336],{"class":94,"line":1290},[92,117337,117338],{"class":161},"#列出可更新的软件包及版本信息\n",[92,117340,117341,117344,117347],{"class":94,"line":1296},[92,117342,117343],{"class":1942},"apt",[92,117345,117346],{"class":207}," list",[92,117348,117349],{"class":151}," --upgradable\n",[92,117351,117352],{"class":94,"line":1308},[92,117353,117354],{"class":161},"#彻底升级（处理依赖关系，可能删除旧包）\n",[92,117356,117357,117359,117361],{"class":94,"line":1591},[92,117358,24557],{"class":1942},[92,117360,117292],{"class":207},[92,117362,117363],{"class":207}," full-upgrade\n",[92,117365,117366],{"class":94,"line":1596},[92,117367,117368],{"class":161},"#设置指定版本\n",[92,117370,117371,117373,117375,117377,117379,117382,117384,117386,117388,117390,117393,117395],{"class":94,"line":1602},[92,117372,24557],{"class":1942},[92,117374,117292],{"class":207},[92,117376,23814],{"class":207},[92,117378,28883],{"class":98},[92,117380,117381],{"class":207},"package_nam",[92,117383,177],{"class":102},[92,117385,1063],{"class":98},[92,117387,148],{"class":207},[92,117389,1013],{"class":98},[92,117391,117392],{"class":207},"version_numbe",[92,117394,773],{"class":102},[92,117396,51287],{"class":98},[92,117398,117399],{"class":94,"line":1607},[92,117400,117401],{"class":161},"#只安装软件包不升级\n",[92,117403,117404,117406,117408,117410,117412,117414,117416,117418],{"class":94,"line":1621},[92,117405,24557],{"class":1942},[92,117407,117292],{"class":207},[92,117409,23814],{"class":207},[92,117411,28883],{"class":98},[92,117413,117381],{"class":207},[92,117415,177],{"class":102},[92,117417,1063],{"class":98},[92,117419,117420],{"class":151}," --no-upgrade\n",[92,117422,117423],{"class":94,"line":1626},[92,117424,117425],{"class":161},"#只升级，不存在就不安装\n",[92,117427,117428,117430,117432,117434,117436,117438,117440,117442],{"class":94,"line":1632},[92,117429,24557],{"class":1942},[92,117431,117292],{"class":207},[92,117433,23814],{"class":207},[92,117435,28883],{"class":98},[92,117437,117381],{"class":207},[92,117439,177],{"class":102},[92,117441,1063],{"class":98},[92,117443,117444],{"class":151}," --only-upgrade\n",[92,117446,117447],{"class":94,"line":1653},[92,117448,2379],{"emptyLinePlaceholder":17},[92,117450,117451],{"class":94,"line":1658},[92,117452,117453],{"class":161},"#安装指定的软件命令\n",[92,117455,117456,117458,117460,117462,117464,117466,117468],{"class":94,"line":1672},[92,117457,24557],{"class":1942},[92,117459,117292],{"class":207},[92,117461,23814],{"class":207},[92,117463,28883],{"class":98},[92,117465,117381],{"class":207},[92,117467,177],{"class":102},[92,117469,51287],{"class":98},[92,117471,117472],{"class":94,"line":1677},[92,117473,2379],{"emptyLinePlaceholder":17},[92,117475,117476],{"class":94,"line":1706},[92,117477,117478],{"class":161},"#安装多个软件包\n",[92,117480,117481,117483,117485,117487,117489,117492,117495,117497,117499,117502,117504,117506],{"class":94,"line":1711},[92,117482,24557],{"class":1942},[92,117484,117292],{"class":207},[92,117486,23814],{"class":207},[92,117488,28883],{"class":98},[92,117490,117491],{"class":207},"package_",[92,117493,117494],{"class":98},"1>",[92,117496,28883],{"class":98},[92,117498,117491],{"class":207},[92,117500,117501],{"class":98},"2>",[92,117503,28883],{"class":98},[92,117505,117491],{"class":207},[92,117507,117508],{"class":98},"3>\n",[92,117510,117511],{"class":94,"line":1728},[92,117512,2379],{"emptyLinePlaceholder":17},[92,117514,117515],{"class":94,"line":1733},[92,117516,117517],{"class":161},"#更新指定的软件命令\n",[92,117519,117520,117522,117524,117526,117528,117530,117532],{"class":94,"line":1738},[92,117521,24557],{"class":1942},[92,117523,117292],{"class":207},[92,117525,117322],{"class":207},[92,117527,28883],{"class":98},[92,117529,117381],{"class":207},[92,117531,177],{"class":102},[92,117533,51287],{"class":98},[92,117535,117536],{"class":94,"line":1743},[92,117537,2379],{"emptyLinePlaceholder":17},[92,117539,117540],{"class":94,"line":1757},[92,117541,117542],{"class":161},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[92,117544,117545,117547,117550,117552,117554,117556],{"class":94,"line":1762},[92,117546,117343],{"class":1942},[92,117548,117549],{"class":207}," show",[92,117551,28883],{"class":98},[92,117553,117381],{"class":207},[92,117555,177],{"class":102},[92,117557,51287],{"class":98},[92,117559,117560],{"class":94,"line":2556},[92,117561,2379],{"emptyLinePlaceholder":17},[92,117563,117564],{"class":94,"line":2570},[92,117565,117566],{"class":161},"#删除软件包命令\n",[92,117568,117569,117571,117573,117575,117577,117579,117581],{"class":94,"line":2578},[92,117570,24557],{"class":1942},[92,117572,117292],{"class":207},[92,117574,26060],{"class":207},[92,117576,28883],{"class":98},[92,117578,117381],{"class":207},[92,117580,177],{"class":102},[92,117582,51287],{"class":98},[92,117584,117585],{"class":94,"line":2583},[92,117586,2379],{"emptyLinePlaceholder":17},[92,117588,117589],{"class":94,"line":2589},[92,117590,117591],{"class":161},"# 清理旧版本和缓存（释放磁盘空间）\n",[92,117593,117594,117596,117598,117601],{"class":94,"line":2595},[92,117595,24557],{"class":1942},[92,117597,117292],{"class":207},[92,117599,117600],{"class":207}," autoremove",[92,117602,117603],{"class":161},"  # 删除不再需要的依赖和库文件\n",[92,117605,117606,117608,117610,117613],{"class":94,"line":2600},[92,117607,24557],{"class":1942},[92,117609,117292],{"class":207},[92,117611,117612],{"class":207}," clean",[92,117614,117615],{"class":161},"       # 清理下载的缓存包\n",[92,117617,117618],{"class":94,"line":7928},[92,117619,2379],{"emptyLinePlaceholder":17},[92,117621,117622],{"class":94,"line":7952},[92,117623,117624],{"class":161},"#移除软件包及配置文件\n",[92,117626,117627,117629,117631,117634,117636,117638,117640],{"class":94,"line":7957},[92,117628,24557],{"class":1942},[92,117630,117292],{"class":207},[92,117632,117633],{"class":207}," purge",[92,117635,28883],{"class":98},[92,117637,117381],{"class":207},[92,117639,177],{"class":102},[92,117641,51287],{"class":98},[92,117643,117644],{"class":94,"line":7963},[92,117645,2379],{"emptyLinePlaceholder":17},[92,117647,117648],{"class":94,"line":7990},[92,117649,117650],{"class":161},"#查找软件包命令\n",[92,117652,117653,117655,117657,117660,117662,117665,117667],{"class":94,"line":7995},[92,117654,24557],{"class":1942},[92,117656,117292],{"class":207},[92,117658,117659],{"class":207}," search",[92,117661,28883],{"class":98},[92,117663,117664],{"class":207},"keywor",[92,117666,417],{"class":102},[92,117668,51287],{"class":98},[92,117670,117671],{"class":94,"line":8001},[92,117672,2379],{"emptyLinePlaceholder":17},[92,117674,117675],{"class":94,"line":8013},[92,117676,117677],{"class":161},"#列出所有已安装的包\n",[92,117679,117680,117682,117684],{"class":94,"line":8025},[92,117681,117343],{"class":1942},[92,117683,117346],{"class":207},[92,117685,117686],{"class":151}," --installed\n",[92,117688,117689],{"class":94,"line":8037},[92,117690,2379],{"emptyLinePlaceholder":17},[92,117692,117693],{"class":94,"line":9696},[92,117694,117695],{"class":161},"#列出所有已安装的包的版本信息\n",[92,117697,117698,117700,117702],{"class":94,"line":9721},[92,117699,117343],{"class":1942},[92,117701,117346],{"class":207},[92,117703,117704],{"class":151}," --all-versions\n",[5106,117706,117707],{},"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":10,"searchDepth":11,"depth":11,"links":117709},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117254,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117716,"title":117717,"body":117718,"description":13,"extension":14,"meta":118459,"navigation":17,"path":118460,"seo":118461,"stem":118462,"__hash__":118463},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117719,"toc":118446},[117720,117723,117727,117730,117736,117740,117744,117750,117755,117760,117765,117770,117775,117778,117781,117784,117787,117791,117794,117799,117802,117807,117810,117815,117822,117825,117828,117831,117834,117837,117848,117852,117856,117861,117866,117870,117875,117879,117884,117888,117892,117897,117900,117945,117950,117954,117958,117963,117969,117974,117984,117989,117999,118004,118009,118036,118040,118043,118048,118051,118076,118080,118085,118088,118093,118098,118118,118123,118126,118141,118145,118198,118201,118206,118210,118213,118228,118231,118234,118239,118243,118247,118250,118254,118258,118261,118266,118271,118275,118282,118290,118293,118300,118305,118310,118313,118318,118325,118330,118337,118341,118343,118348,118352,118355,118358,118363,118366,118371,118374,118379,118384,118389,118393,118398,118402,118443],[29,117721,117717],{"id":117722},"_2-linux装机教程",[33,117724,117726],{"id":117725},"_21-实体机","2.1 实体机",[38,117728,117729],{},"使用清华源：（Ubuntu24.04）",[38,117731,117732],{},[341,117733,117734],{"href":117734,"rel":117735},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23845],[33,117737,117739],{"id":117738},"_22-普通虚拟机","2.2 普通虚拟机",[63,117741,117743],{"id":117742},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[38,117745,117746],{},[341,117747,117748],{"href":117748,"rel":117749},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23845],[38,117751,117752],{},[1441,117753],{"alt":10,"src":117754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[38,117756,117757],{},[1441,117758],{"alt":10,"src":117759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[38,117761,117762],{},[1441,117763],{"alt":10,"src":117764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[38,117766,117767],{},[1441,117768],{"alt":10,"src":117769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[38,117771,117772],{},[1441,117773],{"alt":10,"src":117774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[38,117776,117777],{},"内存4G（4096MB）；",[38,117779,117780],{},"CPU给4个核；",[38,117782,117783],{},"硬盘动态分配60G；",[38,117785,117786],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[63,117788,117790],{"id":117789},"_222-安装ubuntu","2.2.2 安装Ubuntu",[38,117792,117793],{},"按照1.1的步骤下载Ubuntu",[38,117795,117796],{},[1441,117797],{"alt":10,"src":117798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[38,117800,117801],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[38,117803,117804],{},[1441,117805],{"alt":10,"src":117806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[38,117808,117809],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[38,117811,117812],{},[1441,117813],{"alt":10,"src":117814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[38,117816,117817,117818,117821],{},"选择“正常安装”(找不到都用Alt+F7)， ",[252,117819,117820],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[38,117823,117824],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[38,117826,117827],{},"将改动写入磁盘吗 继续",[38,117829,117830],{},"选择东八区（shanghai，大致在地图上点一下），继续",[38,117832,117833],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[38,117835,117836],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[38,117838,117839,117840,117843,117844,117847],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[252,117841,117842],{},"除了"," 选不发送系统信息与不升级之外， ",[252,117845,117846],{},"其它"," 都跳过或前进）",[63,117849,117851],{"id":117850},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21978,117853,117855],{"id":117854},"_2231-全屏","2.2.3.1 全屏",[38,117857,117858],{},[1441,117859],{"alt":10,"src":117860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[38,117862,117863],{},[1441,117864],{"alt":10,"src":117865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[21978,117867,117869],{"id":117868},"_2232-文件交换","2.2.3.2 文件交换",[38,117871,117872],{},[1441,117873],{"alt":10,"src":117874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21978,117876,117878],{"id":117877},"_2233-新建文本文档","2.2.3.3 新建文本文档",[38,117880,117881],{},[1441,117882],{"alt":10,"src":117883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[33,117885,117887],{"id":117886},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[63,117889,117891],{"id":117890},"_231-简介与优缺点","2.3.1 简介与优缺点",[46,117893,117894],{},[49,117895,117896],{},"什么情况下推荐？",[38,117898,117899],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[46,117901,117902],{"start":11},[49,117903,117904,117905],{},"优缺点：",[46,117906,117907,117937],{},[49,117908,117909,117910],{},"优点：",[46,117911,117912,117915,117922,117925,117928,117931,117934],{},[49,117913,117914],{},"WSL2是最好的Linux发行版;(bushi)",[49,117916,117917,117918,117921],{},"性能损耗极低。且比在Windows上跑深度性能 ",[252,117919,117920],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[49,117923,117924],{},"非常方便调用USB设备，可以USB直通;",[49,117926,117927],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[49,117929,117930],{},"非常方便Win与WSL2互相传文件等协同操作;",[49,117932,117933],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[49,117935,117936],{},"非常方便使用Windows的VScode远程开发;",[49,117938,117939,117940],{},"缺点：",[46,117941,117942],{},[49,117943,117944],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[38,117946,117947],{},[1441,117948],{"alt":10,"src":117949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[63,117951,117953],{"id":117952},"_232-安装教程","2.3.2 安装教程",[21978,117955,117957],{"id":117956},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[46,117959,117960],{},[49,117961,117962],{},"方法一(图形界面)",[38,117964,117965,117966,24599],{},"用Win+R输入",[89,117967,117968],{},"appwiz.cpl",[38,117970,117971],{},[1441,117972],{"alt":10,"src":117973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[38,117975,117976,117977,117980,117981,26454],{},"点击OK进入 ",[252,117978,117979],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[252,117982,117983],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[38,117985,117986],{},[1441,117987],{"alt":10,"src":117988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[38,117990,117991,117992,100993,117995,117998],{},"选择 ",[252,117993,117994],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[252,117996,117997],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[38,118000,118001],{},[1441,118002],{"alt":10,"src":118003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[46,118005,118006],{"start":11},[49,118007,118008],{},"方法二(命令行)",[83,118010,118014],{"className":118011,"code":118012,"language":118013,"meta":10,"style":10},"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",[89,118015,118016,118021,118026,118031],{"__ignoreMap":10},[92,118017,118018],{"class":94,"line":95},[92,118019,118020],{},"# 开启 Linux 子系统\n",[92,118022,118023],{"class":94,"line":11},[92,118024,118025],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[92,118027,118028],{"class":94,"line":1158},[92,118029,118030],{},"# 开启虚拟机平台\n",[92,118032,118033],{"class":94,"line":1173},[92,118034,118035],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21978,118037,118039],{"id":118038},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[38,118041,118042],{},"用管理员权限打开powershell",[38,118044,118045],{},[1441,118046],{"alt":10,"src":118047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[38,118049,118050],{},"升级WSL并设置默认版本为WSL2",[83,118052,118054],{"className":118011,"code":118053,"language":118013,"meta":10,"style":10},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[89,118055,118056,118061,118066,118071],{"__ignoreMap":10},[92,118057,118058],{"class":94,"line":95},[92,118059,118060],{},"# 更新 wsl\n",[92,118062,118063],{"class":94,"line":11},[92,118064,118065],{},"wsl --update\n",[92,118067,118068],{"class":94,"line":1158},[92,118069,118070],{},"# 将 wsl 版本设置为 wsl2\n",[92,118072,118073],{"class":94,"line":1173},[92,118074,118075],{},"wsl --set-default-version 2\n",[21978,118077,118079],{"id":118078},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[46,118081,118082],{},[49,118083,118084],{},"方式一(商店下载)",[38,118086,118087],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[38,118089,118090],{},[1441,118091],{"alt":10,"src":118092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[46,118094,118095],{"start":11},[49,118096,118097],{},"方式二(命令行安装)",[83,118099,118101],{"className":118011,"code":118100,"language":118013,"meta":10,"style":10},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[89,118102,118103,118108,118113],{"__ignoreMap":10},[92,118104,118105],{"class":94,"line":95},[92,118106,118107],{},"# 列出可安装的 Linux 版本\n",[92,118109,118110],{"class":94,"line":11},[92,118111,118112],{},"#（需要科学手段）\n",[92,118114,118115],{"class":94,"line":1158},[92,118116,118117],{},"wsl --list --online\n",[38,118119,118120],{},[1441,118121],{"alt":10,"src":118122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[38,118124,118125],{},"选择对应发行版并安装",[83,118127,118129],{"className":118011,"code":118128,"language":118013,"meta":10,"style":10},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[89,118130,118131,118136],{"__ignoreMap":10},[92,118132,118133],{"class":94,"line":95},[92,118134,118135],{},"# Ubuntu安装完毕后需要重启系统\n",[92,118137,118138],{"class":94,"line":11},[92,118139,118140],{},"wsl --install -d Ubuntu-24.04\n",[21978,118142,118144],{"id":118143},"_2324-查看系统状态","2.3.2.4 查看系统状态",[83,118146,118148],{"className":118011,"code":118147,"language":118013,"meta":10,"style":10},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[89,118149,118150,118155,118160,118165,118170,118174,118178,118183,118188,118193],{"__ignoreMap":10},[92,118151,118152],{"class":94,"line":95},[92,118153,118154],{},"# 查看 wsl\n",[92,118156,118157],{"class":94,"line":11},[92,118158,118159],{},"wsl -l\n",[92,118161,118162],{"class":94,"line":1158},[92,118163,118164],{},"# 查看 wsl 运行版本或模式\n",[92,118166,118167],{"class":94,"line":1173},[92,118168,118169],{},"wsl -l -v\n",[92,118171,118172],{"class":94,"line":1179},[92,118173,2379],{"emptyLinePlaceholder":17},[92,118175,118176],{"class":94,"line":1193},[92,118177,2379],{"emptyLinePlaceholder":17},[92,118179,118180],{"class":94,"line":1199},[92,118181,118182],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[92,118184,118185],{"class":94,"line":1290},[92,118186,118187],{},"wsl --set-version \u003Cdistro> 2\n",[92,118189,118190],{"class":94,"line":1296},[92,118191,118192],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[92,118194,118195],{"class":94,"line":1308},[92,118196,118197],{},"wsl --unregister \u003Cdistro>\n",[38,118199,118200],{},"输出Version为2即正常",[38,118202,118203],{},[1441,118204],{"alt":10,"src":118205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21978,118207,118209],{"id":118208},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[38,118211,118212],{},"直接在Powershell里输入wsl命令进入子系统",[83,118214,118216],{"className":118011,"code":118215,"language":118013,"meta":10,"style":10},"# 进入子系统\nwsl\n",[89,118217,118218,118223],{"__ignoreMap":10},[92,118219,118220],{"class":94,"line":95},[92,118221,118222],{},"# 进入子系统\n",[92,118224,118225],{"class":94,"line":11},[92,118226,118227],{},"wsl\n",[38,118229,118230],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[38,118232,118233],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[38,118235,118236],{},[1441,118237],{"alt":10,"src":118238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[63,118240,118242],{"id":118241},"_233-配置各种环境","2.3.3 配置各种环境",[21978,118244,118246],{"id":118245},"_2331-换源","2.3.3.1 换源",[38,118248,118249],{},"(同实体机LINUX，往下找教程)",[21978,118251,118253],{"id":118252},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22890,118255,118257],{"id":118256},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[38,118259,118260],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[38,118262,118263],{},[1441,118264],{"alt":10,"src":118265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[38,118267,118268],{},[1441,118269],{"alt":10,"src":118270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22890,118272,118274],{"id":118273},"_23322-cuda","2.3.3.2.2 CUDA",[38,118276,118277,118278],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[341,118279,118280],{"href":118280,"rel":118281},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23845],[38,118283,118284,118287],{},[1441,118285],{"alt":10,"src":118286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1441,118288],{"alt":10,"src":118289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[38,118291,118292],{},"在下方的网站，选择合适的版本。",[38,118294,118295,118296],{},"WSL2 专属 CUDA 指南：",[341,118297,118298],{"href":118298,"rel":118299},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23845],[38,118301,118302],{},[252,118303,118304],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[38,118306,118307],{},[1441,118308],{"alt":10,"src":118309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[38,118311,118312],{},"挨行敲一遍",[38,118314,118315],{},[1441,118316],{"alt":10,"src":118317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[38,118319,118320,118321,118324],{},"敲完后，输入",[89,118322,118323],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[38,118326,118327],{},[1441,118328],{"alt":10,"src":118329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[38,118331,118332,118333,118336],{},"（请详看下方教程的",[252,118334,118335],{},"安装CUDA的配置环境来看","如何配置环境）",[22890,118338,118340],{"id":118339},"_23323-cudnn","2.3.3.2.3 cuDNN",[38,118342,118249],{},[38,118344,118345],{},[1441,118346],{"alt":10,"src":118347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21978,118349,118351],{"id":118350},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[38,118353,118354],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[38,118356,118357],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[38,118359,118360],{},[1441,118361],{"alt":10,"src":118362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[38,118364,118365],{},"连接WSL2",[38,118367,118368],{},[1441,118369],{"alt":10,"src":118370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[38,118372,118373],{},"远程开发成功。",[38,118375,118376],{},[1441,118377],{"alt":10,"src":118378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[38,118380,118381],{},[1441,118382],{"alt":10,"src":118383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[38,118385,118386],{},[1441,118387],{"alt":10,"src":118388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[21978,118390,118392],{"id":118391},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[38,118394,118395],{},[1441,118396],{"alt":10,"src":118397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21978,118399,118401],{"id":118400},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[83,118403,118405],{"className":117271,"code":118404,"language":117273,"meta":10,"style":10},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[89,118406,118407,118415,118423,118434,118438],{"__ignoreMap":10},[92,118408,118409,118411,118413],{"class":94,"line":95},[92,118410,24557],{"class":1942},[92,118412,117292],{"class":207},[92,118414,26223],{"class":207},[92,118416,118417,118419,118421],{"class":94,"line":11},[92,118418,24557],{"class":1942},[92,118420,117292],{"class":207},[92,118422,117308],{"class":207},[92,118424,118425,118427,118429,118431],{"class":94,"line":1158},[92,118426,24557],{"class":1942},[92,118428,117292],{"class":207},[92,118430,23814],{"class":207},[92,118432,118433],{"class":207}," mesa-utils\n",[92,118435,118436],{"class":94,"line":1173},[92,118437,2379],{"emptyLinePlaceholder":17},[92,118439,118440],{"class":94,"line":1179},[92,118441,118442],{"class":161},"#然后重启wsl2即可\n",[5106,118444,118445],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":10,"searchDepth":11,"depth":11,"links":118447},[118448,118449,118454],{"id":117725,"depth":11,"text":117726},{"id":117738,"depth":11,"text":117739,"children":118450},[118451,118452,118453],{"id":117742,"depth":1158,"text":117743},{"id":117789,"depth":1158,"text":117790},{"id":117850,"depth":1158,"text":117851},{"id":117886,"depth":11,"text":117887,"children":118455},[118456,118457,118458],{"id":117890,"depth":1158,"text":117891},{"id":117952,"depth":1158,"text":117953},{"id":118241,"depth":1158,"text":118242},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117717,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118465,"title":118466,"body":118467,"description":13,"extension":14,"meta":121403,"navigation":17,"path":121404,"seo":121405,"stem":121406,"__hash__":121407},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118468,"toc":121375},[118469,118472,118476,118482,118486,118492,118496,118684,118687,118692,118696,118700,118703,118706,118712,118717,118720,118723,118728,118761,118766,118770,118847,118850,118855,118859,118862,118901,118904,118913,118931,118936,118943,119060,119065,119068,119095,119100,119104,119113,119163,119170,119174,119177,119191,119198,119232,119237,119241,119264,119267,119272,119276,119279,119282,119285,119327,119331,119334,119337,119378,119382,119386,119389,119394,119399,119402,119425,119428,119436,119441,119444,119449,119454,119457,119462,119466,119471,119494,119499,119561,119569,119574,119579,119582,119587,119590,119595,119600,119618,119623,119629,119634,119648,119652,119655,119658,119661,119704,119707,119712,119813,119816,119821,119825,119829,119866,119870,119874,119878,119924,119928,119973,119977,119984,119992,120047,120050,120127,120130,120153,120157,120160,120165,120170,120178,120181,120186,120191,120196,120199,120204,120213,120216,120221,120224,120295,120300,120303,120308,120311,120316,120319,120324,120327,120332,120337,120340,120415,120418,120431,120436,120439,120453,120456,120485,120490,120519,120522,120527,120531,120536,120545,120548,120553,120556,120561,120564,120567,120572,120575,120580,120585,120588,120593,120596,120721,120726,120756,120759,120764,120769,120786,120789,120832,120835,120862,120867,120880,121023,121027,121032,121046,121049,121100,121103,121133,121136,121152,121157,121171,121174,121241,121246,121255,121260,121263,121275,121280,121287,121311,121314,121319,121322,121341,121346,121353,121365,121372],[29,118470,118466],{"id":118471},"_3-安装必备配置",[33,118473,118475],{"id":118474},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[83,118477,118480],{"className":118478,"code":118479,"language":5167},[5165],"  打开下方网站（注意，该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",[89,118481,118479],{"__ignoreMap":10},[63,118483,118485],{"id":118484},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[83,118487,118490],{"className":118488,"code":118489,"language":5167},[5165],"  输入以下命令\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",[89,118491,118489],{"__ignoreMap":10},[63,118493,118495],{"id":118494},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[83,118497,118501],{"className":118498,"code":118499,"language":118500,"meta":10,"style":10},"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",[89,118502,118503,118511,118522,118534,118548,118552,118562,118567,118571,118575,118580,118584,118596,118600,118605,118609,118620,118624,118640,118644,118655,118659,118664,118668,118676],{"__ignoreMap":10},[92,118504,118505,118507,118509],{"class":94,"line":95},[92,118506,24557],{"class":1942},[92,118508,117292],{"class":207},[92,118510,26223],{"class":207},[92,118512,118513,118515,118517,118519],{"class":94,"line":11},[92,118514,24557],{"class":1942},[92,118516,117292],{"class":207},[92,118518,23814],{"class":207},[92,118520,118521],{"class":207}," vim\n",[92,118523,118524,118526,118529,118531],{"class":94,"line":1158},[92,118525,24557],{"class":1942},[92,118527,118528],{"class":207}," rm",[92,118530,25306],{"class":151},[92,118532,118533],{"class":207}," \u002Fetc\u002Fapt\u002Fsources.list\n",[92,118535,118536,118538,118540,118542,118545],{"class":94,"line":1173},[92,118537,24557],{"class":1942},[92,118539,118528],{"class":207},[92,118541,25306],{"class":151},[92,118543,118544],{"class":207}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[92,118546,118547],{"class":151},"**\n",[92,118549,118550],{"class":94,"line":1179},[92,118551,2379],{"emptyLinePlaceholder":17},[92,118553,118554,118556,118559],{"class":94,"line":1193},[92,118555,24557],{"class":1942},[92,118557,118558],{"class":207}," vim",[92,118560,118561],{"class":207}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[92,118563,118564],{"class":94,"line":1199},[92,118565,118566],{"class":207},"```\n",[92,118568,118569],{"class":94,"line":1290},[92,118570,2379],{"emptyLinePlaceholder":17},[92,118572,118573],{"class":94,"line":1296},[92,118574,2379],{"emptyLinePlaceholder":17},[92,118576,118577],{"class":94,"line":1308},[92,118578,118579],{"class":1942},"选择好Ubuntu版本后，复制下方的内容。\n",[92,118581,118582],{"class":94,"line":1591},[92,118583,2379],{"emptyLinePlaceholder":17},[92,118585,118586,118588,118591,118594],{"class":94,"line":1596},[92,118587,329],{"class":98},[92,118589,118590],{"class":207},"[](",[92,118592,118593],{"class":1942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[92,118595,109],{"class":207},[92,118597,118598],{"class":94,"line":1602},[92,118599,2379],{"emptyLinePlaceholder":17},[92,118601,118602],{"class":94,"line":1607},[92,118603,118604],{"class":1942},"粘贴进去\n",[92,118606,118607],{"class":94,"line":1621},[92,118608,2379],{"emptyLinePlaceholder":17},[92,118610,118611,118613,118615,118618],{"class":94,"line":1626},[92,118612,329],{"class":98},[92,118614,118590],{"class":207},[92,118616,118617],{"class":1942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[92,118619,109],{"class":207},[92,118621,118622],{"class":94,"line":1632},[92,118623,2379],{"emptyLinePlaceholder":17},[92,118625,118626,118629,118632,118635,118637],{"class":94,"line":1653},[92,118627,118628],{"class":1942},"按一下ESC，然后英文冒号，输入",[92,118630,118631],{"class":207}," `",[92,118633,118634],{"class":1942},":wq!",[92,118636,1075],{"class":207},[92,118638,118639],{"class":1942},"然后回车\n",[92,118641,118642],{"class":94,"line":1658},[92,118643,2379],{"emptyLinePlaceholder":17},[92,118645,118646,118648,118650,118653],{"class":94,"line":1672},[92,118647,329],{"class":98},[92,118649,118590],{"class":207},[92,118651,118652],{"class":1942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[92,118654,109],{"class":207},[92,118656,118657],{"class":94,"line":1677},[92,118658,2379],{"emptyLinePlaceholder":17},[92,118660,118661],{"class":94,"line":1706},[92,118662,118663],{"class":1942},"输入以下命令\n",[92,118665,118666],{"class":94,"line":1711},[92,118667,2379],{"emptyLinePlaceholder":17},[92,118669,118670,118673],{"class":94,"line":1728},[92,118671,118672],{"class":207},"```",[92,118674,118675],{"class":1942},"Bash\n",[92,118677,118678,118680,118682],{"class":94,"line":1733},[92,118679,24557],{"class":1942},[92,118681,117292],{"class":207},[92,118683,26223],{"class":207},[38,118685,118686],{},"这里被替换成对应学校则成功",[38,118688,118689],{},[1441,118690],{"alt":10,"src":118691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[33,118693,118695],{"id":118694},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[63,118697,118699],{"id":118698},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[38,118701,118702],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[38,118704,118705],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[38,118707,118708],{},[341,118709,118710],{"href":118710,"rel":118711},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23845],[38,118713,118714],{},[1441,118715],{"alt":10,"src":118716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[38,118718,118719],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[38,118721,118722],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[38,118724,118725],{},[1441,118726],{"alt":10,"src":118727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[83,118729,118731],{"className":117271,"code":118730,"language":117273,"meta":10,"style":10},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[89,118732,118733,118738,118745,118750],{"__ignoreMap":10},[92,118734,118735],{"class":94,"line":95},[92,118736,118737],{"class":161},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[92,118739,118740,118742],{"class":94,"line":11},[92,118741,101251],{"class":151},[92,118743,118744],{"class":207}," ~\u002FDownloads\n",[92,118746,118747],{"class":94,"line":1158},[92,118748,118749],{"class":161},"#下方chrome安装包名不一定是这个，根据名字来看\n",[92,118751,118752,118754,118756,118758],{"class":94,"line":1173},[92,118753,24557],{"class":1942},[92,118755,117292],{"class":207},[92,118757,23814],{"class":207},[92,118759,118760],{"class":207}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[38,118762,118763],{},[1441,118764],{"alt":10,"src":118765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[63,118767,118769],{"id":118768},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[83,118771,118773],{"className":117271,"code":118772,"language":117273,"meta":10,"style":10},"# 老版\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",[89,118774,118775,118780,118788,118799,118804,118808,118813,118823,118831,118842],{"__ignoreMap":10},[92,118776,118777],{"class":94,"line":95},[92,118778,118779],{"class":161},"# 老版\n",[92,118781,118782,118784,118786],{"class":94,"line":11},[92,118783,24557],{"class":1942},[92,118785,117292],{"class":207},[92,118787,26223],{"class":207},[92,118789,118790,118792,118794,118796],{"class":94,"line":1158},[92,118791,24557],{"class":1942},[92,118793,117292],{"class":207},[92,118795,23814],{"class":207},[92,118797,118798],{"class":207}," neofetch\n",[92,118800,118801],{"class":94,"line":1173},[92,118802,118803],{"class":1942},"neofetch\n",[92,118805,118806],{"class":94,"line":1179},[92,118807,2379],{"emptyLinePlaceholder":17},[92,118809,118810],{"class":94,"line":1193},[92,118811,118812],{"class":161},"# 新版\n",[92,118814,118815,118817,118820],{"class":94,"line":1199},[92,118816,24557],{"class":1942},[92,118818,118819],{"class":207}," add-apt-repository",[92,118821,118822],{"class":207}," ppa:zhangsongcui3371\u002Ffastfetch\n",[92,118824,118825,118827,118829],{"class":94,"line":1290},[92,118826,24557],{"class":1942},[92,118828,117292],{"class":207},[92,118830,26223],{"class":207},[92,118832,118833,118835,118837,118839],{"class":94,"line":1296},[92,118834,24557],{"class":1942},[92,118836,117292],{"class":207},[92,118838,23814],{"class":207},[92,118840,118841],{"class":207}," fastfetch\n",[92,118843,118844],{"class":94,"line":1308},[92,118845,118846],{"class":1942},"fastfetch\n",[38,118848,118849],{},"这里显示，一共有3162个debian的程序，7个snap程序",[38,118851,118852],{},[1441,118853],{"alt":10,"src":118854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[63,118856,118858],{"id":118857},"_323-移除snap应用","3.2.3 移除snap应用",[38,118860,118861],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[83,118863,118865],{"className":117271,"code":118864,"language":117273,"meta":10,"style":10},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[89,118866,118867,118879,118890],{"__ignoreMap":10},[92,118868,118869,118871,118873,118876],{"class":94,"line":95},[92,118870,24557],{"class":1942},[92,118872,26494],{"class":207},[92,118874,118875],{"class":207}," disable",[92,118877,118878],{"class":207}," snapd.service\n",[92,118880,118881,118883,118885,118887],{"class":94,"line":11},[92,118882,24557],{"class":1942},[92,118884,26494],{"class":207},[92,118886,118875],{"class":207},[92,118888,118889],{"class":207}," snapd.socket\n",[92,118891,118892,118894,118896,118898],{"class":94,"line":1158},[92,118893,24557],{"class":1942},[92,118895,26494],{"class":207},[92,118897,118875],{"class":207},[92,118899,118900],{"class":207}," snapd.seeded.service\n",[38,118902,118903],{},"然后查看snap应用列表",[38,118905,118906,118907,118912],{},"根据你安装的选择不同（最小安装或普通安装），有",[341,118908,118911],{"href":118909,"rel":118910},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23845],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[83,118914,118916],{"className":117271,"code":118915,"language":117273,"meta":10,"style":10},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[89,118917,118918,118923],{"__ignoreMap":10},[92,118919,118920],{"class":94,"line":95},[92,118921,118922],{"class":161},"# 查询当前系统上snap安装了哪些app\n",[92,118924,118925,118928],{"class":94,"line":11},[92,118926,118927],{"class":1942},"snap",[92,118929,118930],{"class":207}," list\n",[38,118932,118933],{},[1441,118934],{"alt":10,"src":118935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[38,118937,118938,118939,118942],{},"卸载掉图中所有应用，按照 ",[252,118940,118941],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[83,118944,118946],{"className":117271,"code":118945,"language":117273,"meta":10,"style":10},"#移除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",[89,118947,118948,118953,118965,118970,118981,118986,118997,119002,119013,119018,119022,119027,119038,119049],{"__ignoreMap":10},[92,118949,118950],{"class":94,"line":95},[92,118951,118952],{"class":161},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[92,118954,118955,118957,118960,118962],{"class":94,"line":11},[92,118956,24557],{"class":1942},[92,118958,118959],{"class":207}," snap",[92,118961,26060],{"class":207},[92,118963,118964],{"class":207}," snap-store\n",[92,118966,118967],{"class":94,"line":1158},[92,118968,118969],{"class":161},"#移除firefox浏览器\n",[92,118971,118972,118974,118976,118978],{"class":94,"line":1173},[92,118973,24557],{"class":1942},[92,118975,118959],{"class":207},[92,118977,26060],{"class":207},[92,118979,118980],{"class":207}," firefox\n",[92,118982,118983],{"class":94,"line":1179},[92,118984,118985],{"class":161},"#移除gnome-42-2204\n",[92,118987,118988,118990,118992,118994],{"class":94,"line":1193},[92,118989,24557],{"class":1942},[92,118991,118959],{"class":207},[92,118993,26060],{"class":207},[92,118995,118996],{"class":207}," gnome-42-2204\n",[92,118998,118999],{"class":94,"line":1199},[92,119000,119001],{"class":161},"#移除gtk-common-themes\n",[92,119003,119004,119006,119008,119010],{"class":94,"line":1290},[92,119005,24557],{"class":1942},[92,119007,118959],{"class":207},[92,119009,26060],{"class":207},[92,119011,119012],{"class":207}," gtk-common-themes\n",[92,119014,119015],{"class":94,"line":1296},[92,119016,119017],{"class":161},"#移除其它...\n",[92,119019,119020],{"class":94,"line":1308},[92,119021,2653],{"class":102},[92,119023,119024],{"class":94,"line":1591},[92,119025,119026],{"class":161},"#移除core22,bare以及snapd\n",[92,119028,119029,119031,119033,119035],{"class":94,"line":1596},[92,119030,24557],{"class":1942},[92,119032,118959],{"class":207},[92,119034,26060],{"class":207},[92,119036,119037],{"class":207}," core22\n",[92,119039,119040,119042,119044,119046],{"class":94,"line":1602},[92,119041,24557],{"class":1942},[92,119043,118959],{"class":207},[92,119045,26060],{"class":207},[92,119047,119048],{"class":207}," bare\n",[92,119050,119051,119053,119055,119057],{"class":94,"line":1607},[92,119052,24557],{"class":1942},[92,119054,118959],{"class":207},[92,119056,26060],{"class":207},[92,119058,119059],{"class":207}," snapd\n",[38,119061,119062],{},[1441,119063],{"alt":10,"src":119064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[38,119066,119067],{},"输入以下命令查看是否还有snap包",[83,119069,119071],{"className":117271,"code":119070,"language":117273,"meta":10,"style":10},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[89,119072,119073,119079,119083,119087,119091],{"__ignoreMap":10},[92,119074,119075,119077],{"class":94,"line":95},[92,119076,118927],{"class":1942},[92,119078,118930],{"class":207},[92,119080,119081],{"class":94,"line":11},[92,119082,118779],{"class":161},[92,119084,119085],{"class":94,"line":1158},[92,119086,118803],{"class":1942},[92,119088,119089],{"class":94,"line":1173},[92,119090,118812],{"class":161},[92,119092,119093],{"class":94,"line":1179},[92,119094,118846],{"class":1942},[38,119096,119097],{},[1441,119098],{"alt":10,"src":119099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[63,119101,119103],{"id":119102},"_324-移除snap","3.2.4 移除snap",[38,119105,119106,119107,119112],{},"在删除掉",[341,119108,119111],{"href":119109,"rel":119110},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23845],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[83,119114,119116],{"className":117271,"code":119115,"language":117273,"meta":10,"style":10}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[89,119117,119118,119123,119136,119141,119152],{"__ignoreMap":10},[92,119119,119120],{"class":94,"line":95},[92,119121,119122],{"class":161}," #使用apt移除掉snap\n",[92,119124,119125,119127,119129,119131,119134],{"class":94,"line":11},[92,119126,24557],{"class":1942},[92,119128,117292],{"class":207},[92,119130,117600],{"class":207},[92,119132,119133],{"class":151}," --purge",[92,119135,119059],{"class":207},[92,119137,119138],{"class":94,"line":1158},[92,119139,119140],{"class":161},"#移除snapd的一些目录\n",[92,119142,119143,119145,119147,119149],{"class":94,"line":1173},[92,119144,24557],{"class":1942},[92,119146,118528],{"class":207},[92,119148,25306],{"class":151},[92,119150,119151],{"class":207}," \u002Fvar\u002Fcache\u002Fsnapd\n",[92,119153,119154,119156,119158,119160],{"class":94,"line":1179},[92,119155,24557],{"class":1942},[92,119157,118528],{"class":207},[92,119159,25306],{"class":151},[92,119161,119162],{"class":207}," ~\u002Fsnap\n",[38,119164,119165,119166,119169],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[89,119167,119168],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[63,119171,119173],{"id":119172},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[38,119175,119176],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[83,119178,119180],{"className":117271,"code":119179,"language":117273,"meta":10,"style":10},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[89,119181,119182],{"__ignoreMap":10},[92,119183,119184,119186,119188],{"class":94,"line":95},[92,119185,24557],{"class":1942},[92,119187,118558],{"class":207},[92,119189,119190],{"class":207}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[38,119192,119193,119194,119197],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[89,119195,119196],{},":wq"," 回车",[83,119199,119201],{"className":117271,"code":119200,"language":117273,"meta":10,"style":10},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[89,119202,119203,119210,119224],{"__ignoreMap":10},[92,119204,119205,119208],{"class":94,"line":95},[92,119206,119207],{"class":1942},"Package:",[92,119209,119059],{"class":207},[92,119211,119212,119215,119218,119221],{"class":94,"line":11},[92,119213,119214],{"class":1942},"Pin:",[92,119216,119217],{"class":207}," release",[92,119219,119220],{"class":207}," a=",[92,119222,119223],{"class":151},"*\n",[92,119225,119226,119229],{"class":94,"line":1158},[92,119227,119228],{"class":1942},"Pin-Priority:",[92,119230,119231],{"class":151}," -10\n",[38,119233,119234],{},[1441,119235],{"alt":10,"src":119236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[63,119238,119240],{"id":119239},"_326-测试是否成功","3.2.6 测试是否成功",[83,119242,119244],{"className":117271,"code":119243,"language":117273,"meta":10,"style":10},"sudo apt update\nsudo apt install firefox\n",[89,119245,119246,119254],{"__ignoreMap":10},[92,119247,119248,119250,119252],{"class":94,"line":95},[92,119249,24557],{"class":1942},[92,119251,117292],{"class":207},[92,119253,26223],{"class":207},[92,119255,119256,119258,119260,119262],{"class":94,"line":11},[92,119257,24557],{"class":1942},[92,119259,117292],{"class":207},[92,119261,23814],{"class":207},[92,119263,118980],{"class":207},[38,119265,119266],{},"这里提示snapd无法被安装，就证明成功了",[38,119268,119269],{},[1441,119270],{"alt":10,"src":119271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[63,119273,119275],{"id":119274},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[38,119277,119278],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[38,119280,119281],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[38,119283,119284],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[83,119286,119288],{"className":117271,"code":119287,"language":117273,"meta":10,"style":10},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[89,119289,119290,119295,119304,119309,119317],{"__ignoreMap":10},[92,119291,119292],{"class":94,"line":95},[92,119293,119294],{"class":161},"# 添加Mozilla提供的源\n",[92,119296,119297,119299,119301],{"class":94,"line":11},[92,119298,24557],{"class":1942},[92,119300,118819],{"class":207},[92,119302,119303],{"class":207}," ppa:mozillateam\u002Fppa\n",[92,119305,119306],{"class":94,"line":1158},[92,119307,119308],{"class":161},"# 安装Firefox\n",[92,119310,119311,119313,119315],{"class":94,"line":1173},[92,119312,24557],{"class":1942},[92,119314,117292],{"class":207},[92,119316,26223],{"class":207},[92,119318,119319,119321,119323,119325],{"class":94,"line":1179},[92,119320,24557],{"class":1942},[92,119322,117292],{"class":207},[92,119324,23814],{"class":207},[92,119326,118980],{"class":207},[63,119328,119330],{"id":119329},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[38,119332,119333],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[38,119335,119336],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[83,119338,119340],{"className":117271,"code":119339,"language":117273,"meta":10,"style":10},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[89,119341,119342,119347,119357,119365,119369],{"__ignoreMap":10},[92,119343,119344],{"class":94,"line":95},[92,119345,119346],{"class":161},"#删掉禁止安装snap的配置文件\n",[92,119348,119349,119351,119353,119355],{"class":94,"line":11},[92,119350,24557],{"class":1942},[92,119352,118528],{"class":207},[92,119354,25306],{"class":151},[92,119356,119190],{"class":207},[92,119358,119359,119361,119363],{"class":94,"line":1158},[92,119360,24557],{"class":1942},[92,119362,117292],{"class":207},[92,119364,26223],{"class":207},[92,119366,119367],{"class":94,"line":1173},[92,119368,2379],{"emptyLinePlaceholder":17},[92,119370,119371,119373,119375],{"class":94,"line":1179},[92,119372,24557],{"class":1942},[92,119374,117292],{"class":207},[92,119376,119377],{"class":207}," dist-update\n",[33,119379,119381],{"id":119380},"_33-中文输入法","3.3 中文输入法",[63,119383,119385],{"id":119384},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[38,119387,119388],{},"官网下载搜狗输入法",[38,119390,119391],{},[1441,119392],{"alt":10,"src":119393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[38,119395,119396],{},[1441,119397],{"alt":10,"src":119398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[38,119400,119401],{},"打开终端输入如下",[83,119403,119405],{"className":117271,"code":119404,"language":117273,"meta":10,"style":10},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[89,119406,119407,119414],{"__ignoreMap":10},[92,119408,119409,119411],{"class":94,"line":95},[92,119410,101251],{"class":151},[92,119412,119413],{"class":207}," ~\u002FDownloads\u002F\n",[92,119415,119416,119418,119420,119422],{"class":94,"line":11},[92,119417,24557],{"class":1942},[92,119419,117292],{"class":207},[92,119421,23814],{"class":207},[92,119423,119424],{"class":207}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[38,119426,119427],{},"打开Fcitx",[38,119429,119430,119433],{},[1441,119431],{"alt":10,"src":119432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1441,119434],{"alt":10,"src":119435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[38,119437,119438],{},[1441,119439],{"alt":10,"src":119440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[38,119442,119443],{},"添加搜狗输入法",[38,119445,119446],{},[1441,119447],{"alt":10,"src":119448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[38,119450,119451],{},[1441,119452],{"alt":10,"src":119453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[38,119455,119456],{},"将搜狗输入法设置为唯一输入法",[38,119458,119459],{},[1441,119460],{"alt":10,"src":119461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[63,119463,119465],{"id":119464},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[46,119467,119468],{},[49,119469,119470],{},"卸载旧输入法",[83,119472,119474],{"className":118498,"code":119473,"language":118500,"meta":10,"style":10},"sudo apt purge fcitx* ibus*\n",[89,119475,119476],{"__ignoreMap":10},[92,119477,119478,119480,119482,119484,119487,119489,119492],{"class":94,"line":95},[92,119479,24557],{"class":1942},[92,119481,117292],{"class":207},[92,119483,117633],{"class":207},[92,119485,119486],{"class":207}," fcitx",[92,119488,558],{"class":151},[92,119490,119491],{"class":207}," ibus",[92,119493,119223],{"class":151},[46,119495,119496],{"start":11},[49,119497,119498],{},"安装Fcitx5",[83,119500,119502],{"className":117271,"code":119501,"language":117273,"meta":10,"style":10},"# 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",[89,119503,119504,119509,119523,119527,119532,119541,119549],{"__ignoreMap":10},[92,119505,119506],{"class":94,"line":95},[92,119507,119508],{"class":161},"# Ubuntu22.04及以上、Debian12及以上\n",[92,119510,119511,119513,119515,119517,119520],{"class":94,"line":11},[92,119512,24557],{"class":1942},[92,119514,117292],{"class":207},[92,119516,23814],{"class":207},[92,119518,119519],{"class":207}," fcitx5",[92,119521,119522],{"class":207}," fcitx5-chinese-addons\n",[92,119524,119525],{"class":94,"line":1158},[92,119526,2379],{"emptyLinePlaceholder":17},[92,119528,119529],{"class":94,"line":1173},[92,119530,119531],{"class":161},"# Ubuntu20.04\n",[92,119533,119534,119536,119538],{"class":94,"line":1179},[92,119535,24557],{"class":1942},[92,119537,118819],{"class":207},[92,119539,119540],{"class":207}," ppa:zhsj\u002Ffcitx5\n",[92,119542,119543,119545,119547],{"class":94,"line":1193},[92,119544,24557],{"class":1942},[92,119546,117292],{"class":207},[92,119548,26223],{"class":207},[92,119550,119551,119553,119555,119557,119559],{"class":94,"line":1199},[92,119552,24557],{"class":1942},[92,119554,117292],{"class":207},[92,119556,23814],{"class":207},[92,119558,119519],{"class":207},[92,119560,119522],{"class":207},[46,119562,119563,119566],{"start":1158},[49,119564,119565],{},"Reboot System",[49,119567,119568],{},"启动Fcitx5",[38,119570,119571],{},[1441,119572],{"alt":10,"src":119573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[46,119575,119576],{"start":1179},[49,119577,119578],{},"修改一些设置",[38,119580,119581],{},"将Pinyin和Keyboard - English US加入到左边。",[38,119583,119584],{},[1441,119585],{"alt":10,"src":119586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[38,119588,119589],{},"添加快捷键以便于更好切换中英文",[38,119591,119592],{},[1441,119593],{"alt":10,"src":119594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[46,119596,119597],{"start":1193},[49,119598,119599],{},"重启",[83,119601,119603],{"className":118498,"code":119602,"language":118500,"meta":10,"style":10},"sudo shutdown -r now\n",[89,119604,119605],{"__ignoreMap":10},[92,119606,119607,119609,119612,119615],{"class":94,"line":95},[92,119608,24557],{"class":1942},[92,119610,119611],{"class":207}," shutdown",[92,119613,119614],{"class":151}," -r",[92,119616,119617],{"class":207}," now\n",[46,119619,119620],{"start":1199},[49,119621,119622],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[38,119624,119625],{},[341,119626,119627],{"href":119627,"rel":119628},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23845],[46,119630,119631],{"start":1290},[49,119632,119633],{},"再重启",[83,119635,119636],{"className":118498,"code":119602,"language":118500,"meta":10,"style":10},[89,119637,119638],{"__ignoreMap":10},[92,119639,119640,119642,119644,119646],{"class":94,"line":95},[92,119641,24557],{"class":1942},[92,119643,119611],{"class":207},[92,119645,119614],{"class":151},[92,119647,119617],{"class":207},[33,119649,119651],{"id":119650},"_34-pip3源替换","3.4 pip3源替换",[38,119653,119654],{},"非Debian系发行版需要做。",[38,119656,119657],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[38,119659,119660],{},"使用dnf的系统也可能不用做。",[83,119662,119664],{"className":117271,"code":119663,"language":117273,"meta":10,"style":10},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[89,119665,119666,119671,119678,119683,119688],{"__ignoreMap":10},[92,119667,119668],{"class":94,"line":95},[92,119669,119670],{"class":161},"# 检查是否已安装 pip\n",[92,119672,119673,119676],{"class":94,"line":11},[92,119674,119675],{"class":1942},"pip3",[92,119677,26274],{"class":151},[92,119679,119680],{"class":94,"line":1158},[92,119681,119682],{"class":161},"# 如果未安装，先安装 pip3（见下方）\n",[92,119684,119685],{"class":94,"line":1173},[92,119686,119687],{"class":161},"# 配置 pip 使用清华源\n",[92,119689,119690,119692,119695,119698,119701],{"class":94,"line":1179},[92,119691,119675],{"class":1942},[92,119693,119694],{"class":207}," config",[92,119696,119697],{"class":207}," set",[92,119699,119700],{"class":207}," global.index-url",[92,119702,119703],{"class":207}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[38,119705,119706],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[38,119708,119709],{},[1441,119710],{"alt":10,"src":119711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[83,119713,119715],{"className":117271,"code":119714,"language":117273,"meta":10,"style":10},"#安装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",[89,119716,119717,119722,119730,119741,119745,119750,119769,119773,119778,119790,119794,119799],{"__ignoreMap":10},[92,119718,119719],{"class":94,"line":95},[92,119720,119721],{"class":161},"#安装pip3\n",[92,119723,119724,119726,119728],{"class":94,"line":11},[92,119725,24557],{"class":1942},[92,119727,117292],{"class":207},[92,119729,26223],{"class":207},[92,119731,119732,119734,119736,119738],{"class":94,"line":1158},[92,119733,24557],{"class":1942},[92,119735,26057],{"class":207},[92,119737,23814],{"class":207},[92,119739,119740],{"class":207}," python3-pip\n",[92,119742,119743],{"class":94,"line":1173},[92,119744,2379],{"emptyLinePlaceholder":17},[92,119746,119747],{"class":94,"line":1179},[92,119748,119749],{"class":161},"#更新pip3\n",[92,119751,119752,119754,119756,119758,119760,119762,119765,119767],{"class":94,"line":1193},[92,119753,100854],{"class":1942},[92,119755,100857],{"class":151},[92,119757,100880],{"class":207},[92,119759,23814],{"class":207},[92,119761,26411],{"class":151},[92,119763,119764],{"class":207}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[92,119766,100885],{"class":151},[92,119768,100888],{"class":207},[92,119770,119771],{"class":94,"line":1199},[92,119772,2379],{"emptyLinePlaceholder":17},[92,119774,119775],{"class":94,"line":1290},[92,119776,119777],{"class":161},"#设置pip源为清华源\n",[92,119779,119780,119782,119784,119786,119788],{"class":94,"line":1296},[92,119781,119675],{"class":1942},[92,119783,119694],{"class":207},[92,119785,119697],{"class":207},[92,119787,119700],{"class":207},[92,119789,119703],{"class":207},[92,119791,119792],{"class":94,"line":1308},[92,119793,2379],{"emptyLinePlaceholder":17},[92,119795,119796],{"class":94,"line":1591},[92,119797,119798],{"class":161},"#测试\n",[92,119800,119801,119803,119805,119807,119809,119811],{"class":94,"line":1596},[92,119802,100854],{"class":1942},[92,119804,100857],{"class":151},[92,119806,100880],{"class":207},[92,119808,23814],{"class":207},[92,119810,100885],{"class":151},[92,119812,100888],{"class":207},[38,119814,119815],{},"成功的话，会看到Looking后面是tsinghua字样。",[38,119817,119818],{},[1441,119819],{"alt":10,"src":119820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[33,119822,119824],{"id":119823},"_35-显卡驱动安装","3.5 显卡驱动安装",[63,119826,119828],{"id":119827},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[83,119830,119832],{"className":118498,"code":119831,"language":118500,"meta":10,"style":10},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[89,119833,119834,119839,119854,119859],{"__ignoreMap":10},[92,119835,119836],{"class":94,"line":95},[92,119837,119838],{"class":161},"# 如果是使用apt安装的驱动\n",[92,119840,119841,119843,119845,119847,119849,119852],{"class":94,"line":11},[92,119842,24557],{"class":1942},[92,119844,26057],{"class":207},[92,119846,26060],{"class":207},[92,119848,119133],{"class":151},[92,119850,119851],{"class":207}," nvidia",[92,119853,119223],{"class":151},[92,119855,119856],{"class":94,"line":1158},[92,119857,119858],{"class":161},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[92,119860,119861,119863],{"class":94,"line":1173},[92,119862,24557],{"class":1942},[92,119864,119865],{"class":207}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[63,119867,119869],{"id":119868},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21978,119871,119873],{"id":119872},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22890,119875,119877],{"id":119876},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[83,119879,119881],{"className":118498,"code":119880,"language":118500,"meta":10,"style":10},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[89,119882,119883,119888,119899,119904,119914,119919],{"__ignoreMap":10},[92,119884,119885],{"class":94,"line":95},[92,119886,119887],{"class":161},"# 安装英伟达驱动\n",[92,119889,119890,119892,119894,119896],{"class":94,"line":11},[92,119891,24557],{"class":1942},[92,119893,117292],{"class":207},[92,119895,23814],{"class":207},[92,119897,119898],{"class":207}," nvidia-driver-版本号\n",[92,119900,119901],{"class":94,"line":1158},[92,119902,119903],{"class":161},"# 重启 \n",[92,119905,119906,119908,119910,119912],{"class":94,"line":1173},[92,119907,24557],{"class":1942},[92,119909,119611],{"class":207},[92,119911,119614],{"class":151},[92,119913,119617],{"class":207},[92,119915,119916],{"class":94,"line":1179},[92,119917,119918],{"class":161},"# 检查驱动是否安装成功\n",[92,119920,119921],{"class":94,"line":1193},[92,119922,119923],{"class":1942},"nvidia-smi\n",[22890,119925,119927],{"id":119926},"_35212-debian","3.5.2.1.2 Debian",[83,119929,119931],{"className":118498,"code":119930,"language":118500,"meta":10,"style":10},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[89,119932,119933,119937,119951,119955,119965,119969],{"__ignoreMap":10},[92,119934,119935],{"class":94,"line":95},[92,119936,119887],{"class":161},[92,119938,119939,119941,119943,119945,119948],{"class":94,"line":11},[92,119940,24557],{"class":1942},[92,119942,117292],{"class":207},[92,119944,23814],{"class":207},[92,119946,119947],{"class":207}," nvidia-driver",[92,119949,119950],{"class":207}," nvidia-settings\n",[92,119952,119953],{"class":94,"line":1158},[92,119954,119903],{"class":161},[92,119956,119957,119959,119961,119963],{"class":94,"line":1173},[92,119958,24557],{"class":1942},[92,119960,119611],{"class":207},[92,119962,119614],{"class":151},[92,119964,119617],{"class":207},[92,119966,119967],{"class":94,"line":1179},[92,119968,119918],{"class":161},[92,119970,119971],{"class":94,"line":1193},[92,119972,119923],{"class":1942},[21978,119974,119976],{"id":119975},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[38,119978,119979,119980,119983],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[252,119981,119982],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[38,119985,119986,119987],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23533,119988,119989],{},[252,119990,119991],{},"（也可以不禁用桌面环境，直接进行下一步。）",[83,119993,119995],{"className":118498,"code":119994,"language":118500,"meta":10,"style":10},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[89,119996,119997,120002,120012,120017,120030,120035],{"__ignoreMap":10},[92,119998,119999],{"class":94,"line":95},[92,120000,120001],{"class":161},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[92,120003,120004,120006,120009],{"class":94,"line":11},[92,120005,24557],{"class":1942},[92,120007,120008],{"class":207}," telinit",[92,120010,120011],{"class":151}," 3\n",[92,120013,120014],{"class":94,"line":1158},[92,120015,120016],{"class":161},"# ubuntu 使用下方命令\n",[92,120018,120019,120021,120024,120027],{"class":94,"line":1173},[92,120020,24557],{"class":1942},[92,120022,120023],{"class":207}," service",[92,120025,120026],{"class":207}," lightdm",[92,120028,120029],{"class":207}," stop\n",[92,120031,120032],{"class":94,"line":1179},[92,120033,120034],{"class":161},"# Fedora 使用下方命令\n",[92,120036,120037,120039,120041,120044],{"class":94,"line":1193},[92,120038,24557],{"class":1942},[92,120040,26494],{"class":207},[92,120042,120043],{"class":207}," isolate",[92,120045,120046],{"class":207}," multi-user.target\n",[38,120048,120049],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[83,120051,120053],{"className":118498,"code":120052,"language":118500,"meta":10,"style":10},"# 编译环境+准备工作\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",[89,120054,120055,120060,120071,120076,120083,120088,120100,120105,120112,120117],{"__ignoreMap":10},[92,120056,120057],{"class":94,"line":95},[92,120058,120059],{"class":161},"# 编译环境+准备工作\n",[92,120061,120062,120064,120066,120068],{"class":94,"line":11},[92,120063,24557],{"class":1942},[92,120065,117292],{"class":207},[92,120067,23814],{"class":207},[92,120069,120070],{"class":207}," build-essential\n",[92,120072,120073],{"class":94,"line":1158},[92,120074,120075],{"class":161},"# 进入到.run目录中\n",[92,120077,120078,120080],{"class":94,"line":1173},[92,120079,101251],{"class":151},[92,120081,120082],{"class":207}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[92,120084,120085],{"class":94,"line":1179},[92,120086,120087],{"class":161},"# 给驱动文件增加可执行权限：\n",[92,120089,120090,120092,120094,120097],{"class":94,"line":1193},[92,120091,24557],{"class":1942},[92,120093,24560],{"class":207},[92,120095,120096],{"class":207}," a+x",[92,120098,120099],{"class":207}," NVIDIA-Linux-x86_64-550.107.02.run\n",[92,120101,120102],{"class":94,"line":1199},[92,120103,120104],{"class":161},"# 然后执行安装：\n",[92,120106,120107,120109],{"class":94,"line":1290},[92,120108,24557],{"class":1942},[92,120110,120111],{"class":207}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[92,120113,120114],{"class":94,"line":1296},[92,120115,120116],{"class":161},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[92,120118,120119,120121,120124],{"class":94,"line":1308},[92,120120,24557],{"class":1942},[92,120122,120123],{"class":207}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[92,120125,120126],{"class":151},"  --no-opengl-files\n",[38,120128,120129],{},"安装完毕重启即可",[83,120131,120133],{"className":118498,"code":120132,"language":118500,"meta":10,"style":10},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[89,120134,120135,120139,120145,120149],{"__ignoreMap":10},[92,120136,120137],{"class":94,"line":95},[92,120138,119903],{"class":161},[92,120140,120141,120143],{"class":94,"line":11},[92,120142,24557],{"class":1942},[92,120144,26628],{"class":207},[92,120146,120147],{"class":94,"line":1158},[92,120148,119918],{"class":161},[92,120150,120151],{"class":94,"line":1173},[92,120152,119923],{"class":1942},[63,120154,120156],{"id":120155},"_353-安装cuda","3.5.3 安装CUDA",[38,120158,120159],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[38,120161,120162],{},[1441,120163],{"alt":10,"src":120164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[46,120166,120167],{},[49,120168,120169],{},"先查看显卡驱动所支持的最高CUDA版本",[83,120171,120172],{"className":118498,"code":119923,"language":118500,"meta":10,"style":10},[89,120173,120174],{"__ignoreMap":10},[92,120175,120176],{"class":94,"line":95},[92,120177,119923],{"class":1942},[38,120179,120180],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[38,120182,120183],{},[1441,120184],{"alt":10,"src":120185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[46,120187,120188],{"start":11},[49,120189,120190],{},"下载CUDA并安装CUDA",[38,120192,118277,120193],{},[341,120194,118280],{"href":118280,"rel":120195},[23845],[38,120197,120198],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[38,120200,120201],{},[1441,120202],{"alt":10,"src":120203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[38,120205,120206,120207,120212],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[341,120208,120211],{"href":120209,"rel":120210},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23845],"Vinci机器人队单片机教程","）",[38,120214,120215],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[38,120217,120218],{},[1441,120219],{"alt":10,"src":120220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[38,120222,120223],{},"将最下方框框里的命令敲入终端",[83,120225,120227],{"className":118498,"code":120226,"language":118500,"meta":10,"style":10},"# 在当前文件夹下创建一个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",[89,120228,120229,120234,120243,120248,120255,120260,120268,120273,120284,120289],{"__ignoreMap":10},[92,120230,120231],{"class":94,"line":95},[92,120232,120233],{"class":161},"# 在当前文件夹下创建一个ttt的子文件夹\n",[92,120235,120236,120238,120240],{"class":94,"line":11},[92,120237,101241],{"class":1942},[92,120239,29197],{"class":151},[92,120241,120242],{"class":207}," .\u002Fttt\n",[92,120244,120245],{"class":94,"line":1158},[92,120246,120247],{"class":161},"# 进入ttt文件夹\n",[92,120249,120250,120252],{"class":94,"line":1173},[92,120251,101251],{"class":151},[92,120253,120254],{"class":207}," ttt\n",[92,120256,120257],{"class":94,"line":1179},[92,120258,120259],{"class":161},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[92,120261,120262,120265],{"class":94,"line":1193},[92,120263,120264],{"class":1942},"wget",[92,120266,120267],{"class":207}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[92,120269,120270],{"class":94,"line":1199},[92,120271,120272],{"class":161},"# 给予权限\n",[92,120274,120275,120277,120279,120281],{"class":94,"line":1290},[92,120276,24557],{"class":1942},[92,120278,24560],{"class":207},[92,120280,120096],{"class":207},[92,120282,120283],{"class":207}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[92,120285,120286],{"class":94,"line":1296},[92,120287,120288],{"class":161},"# 运行脚本\n",[92,120290,120291,120293],{"class":94,"line":1308},[92,120292,24557],{"class":1942},[92,120294,120283],{"class":207},[38,120296,120297],{},[1441,120298],{"alt":10,"src":120299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[38,120301,120302],{},"正在安装中：",[38,120304,120305],{},[1441,120306],{"alt":10,"src":120307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[38,120309,120310],{},"输入accept接受即可",[38,120312,120313],{},[1441,120314],{"alt":10,"src":120315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[38,120317,120318],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[38,120320,120321],{},[1441,120322],{"alt":10,"src":120323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[38,120325,120326],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[38,120328,120329],{},[1441,120330],{"alt":10,"src":120331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[46,120333,120334],{"start":1158},[49,120335,120336],{},"配置环境",[38,120338,120339],{},"根据上方确认一下路径，比如我上面红色框起来的为",[83,120341,120343],{"className":118498,"code":120342,"language":118500,"meta":10,"style":10},"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",[89,120344,120345,120361,120376],{"__ignoreMap":10},[92,120346,120347,120350,120353,120356,120359],{"class":94,"line":95},[92,120348,120349],{"class":1942},"Please",[92,120351,120352],{"class":207}," make",[92,120354,120355],{"class":207}," sure",[92,120357,120358],{"class":207}," that",[92,120360,2653],{"class":102},[92,120362,120363,120365,120368,120371,120374],{"class":94,"line":11},[92,120364,52251],{"class":1942},[92,120366,120367],{"class":207},"   PATH",[92,120369,120370],{"class":207}," includes",[92,120372,120373],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[92,120375,2653],{"class":102},[92,120377,120378,120380,120383,120385,120388,120391,120393,120396,120399,120402,120405,120407,120410,120412],{"class":94,"line":1158},[92,120379,52251],{"class":1942},[92,120381,120382],{"class":207},"   LD_LIBRARY_PATH",[92,120384,120370],{"class":207},[92,120386,120387],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[92,120389,120390],{"class":207}," or,",[92,120392,5189],{"class":207},[92,120394,120395],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[92,120397,120398],{"class":207}," to",[92,120400,120401],{"class":207}," \u002Fetc\u002Fld.so.conf",[92,120403,120404],{"class":207}," and",[92,120406,27211],{"class":207},[92,120408,120409],{"class":207}," ldconfig",[92,120411,64584],{"class":207},[92,120413,120414],{"class":207}," root\n",[38,120416,120417],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[83,120419,120421],{"className":118498,"code":120420,"language":118500,"meta":10,"style":10},"which nvcc\n",[89,120422,120423],{"__ignoreMap":10},[92,120424,120425,120428],{"class":94,"line":95},[92,120426,120427],{"class":151},"which",[92,120429,120430],{"class":207}," nvcc\n",[38,120432,120433],{},[1441,120434],{"alt":10,"src":120435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[38,120437,120438],{},"所以我进行以下操作：",[83,120440,120442],{"className":118498,"code":120441,"language":118500,"meta":10,"style":10},"sudo vim ~\u002F.bashrc\n",[89,120443,120444],{"__ignoreMap":10},[92,120445,120446,120448,120450],{"class":94,"line":95},[92,120447,24557],{"class":1942},[92,120449,118558],{"class":207},[92,120451,120452],{"class":207}," ~\u002F.bashrc\n",[38,120454,120455],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[83,120457,120459],{"className":118498,"code":120458,"language":118500,"meta":10,"style":10},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[89,120460,120461,120473],{"__ignoreMap":10},[92,120462,120463,120465,120468,120470],{"class":94,"line":95},[92,120464,25023],{"class":98},[92,120466,120467],{"class":102}," PATH",[92,120469,148],{"class":98},[92,120471,120472],{"class":102},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[92,120474,120475,120477,120480,120482],{"class":94,"line":11},[92,120476,25023],{"class":98},[92,120478,120479],{"class":102}," LD_LIBRARY_PATH",[92,120481,148],{"class":98},[92,120483,120484],{"class":102},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[38,120486,120487],{},[1441,120488],{"alt":10,"src":120489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[83,120491,120493],{"className":118498,"code":120492,"language":118500,"meta":10,"style":10},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[89,120494,120495,120500,120506,120511],{"__ignoreMap":10},[92,120496,120497],{"class":94,"line":95},[92,120498,120499],{"class":161},"# 刷新当前终端的环境变量\n",[92,120501,120502,120504],{"class":94,"line":11},[92,120503,100868],{"class":151},[92,120505,120452],{"class":207},[92,120507,120508],{"class":94,"line":1158},[92,120509,120510],{"class":161},"# 验证CUDA是否安装成功\n",[92,120512,120513,120516],{"class":94,"line":1173},[92,120514,120515],{"class":1942},"nvcc",[92,120517,120518],{"class":151}," -V\n",[38,120520,120521],{},"出现下图这种则安装成功。",[38,120523,120524],{},[1441,120525],{"alt":10,"src":120526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[63,120528,120530],{"id":120529},"_354-安装cudnn","3.5.4 安装cuDNN",[46,120532,120533],{},[49,120534,120535],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[38,120537,120538,120539,120544],{},"前往 NVIDIA cuDNN 下载页面：",[341,120540,120543],{"href":120541,"rel":120542},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23845],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[38,120546,120547],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[38,120549,120550],{},[1441,120551],{"alt":10,"src":120552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[38,120554,120555],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[38,120557,120558],{},[1441,120559],{"alt":10,"src":120560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[38,120562,120563],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[38,120565,120566],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[38,120568,120569],{},[252,120570,120571],{},"我这里选择所有Linux X86_64最通用的办法：",[38,120573,120574],{},"下载好的：",[38,120576,120577],{},[1441,120578],{"alt":10,"src":120579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[46,120581,120582],{"start":11},[49,120583,120584],{},"安装cuDNN",[38,120586,120587],{},"找到该文件所在目录，并打开终端，cd到该目录。",[38,120589,120590],{},[1441,120591],{"alt":10,"src":120592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[38,120594,120595],{},"解压文件，并复制到对应位置完成安装",[83,120597,120599],{"className":118498,"code":120598,"language":118500,"meta":10,"style":10},"# 解压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",[89,120600,120601,120606,120617,120622,120629,120634,120650,120664,120669,120680,120689,120693,120709],{"__ignoreMap":10},[92,120602,120603],{"class":94,"line":95},[92,120604,120605],{"class":161},"# 解压cuDNN文件\n",[92,120607,120608,120611,120614],{"class":94,"line":11},[92,120609,120610],{"class":1942},"tar",[92,120612,120613],{"class":151}," -xvf",[92,120615,120616],{"class":207}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[92,120618,120619],{"class":94,"line":1158},[92,120620,120621],{"class":161},"# cd进文件夹\n",[92,120623,120624,120626],{"class":94,"line":1173},[92,120625,101251],{"class":151},[92,120627,120628],{"class":207}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[92,120630,120631],{"class":94,"line":1179},[92,120632,120633],{"class":161},"# 复制cuDNN文件到CUDA目录\n",[92,120635,120636,120638,120640,120643,120645,120648],{"class":94,"line":1193},[92,120637,24557],{"class":1942},[92,120639,27842],{"class":207},[92,120641,120642],{"class":207}," include\u002Fcudnn",[92,120644,558],{"class":151},[92,120646,120647],{"class":207},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[92,120649,2653],{"class":102},[92,120651,120652,120654,120656,120659,120661],{"class":94,"line":1199},[92,120653,24557],{"class":1942},[92,120655,27842],{"class":207},[92,120657,120658],{"class":207}," lib\u002Flibcudnn",[92,120660,558],{"class":151},[92,120662,120663],{"class":207},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[92,120665,120666],{"class":94,"line":1290},[92,120667,120668],{"class":161},"# 对比一下有没有缺文件\n",[92,120670,120671,120673,120676,120678],{"class":94,"line":1296},[92,120672,26742],{"class":1942},[92,120674,120675],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[92,120677,558],{"class":151},[92,120679,2653],{"class":102},[92,120681,120682,120684,120687],{"class":94,"line":1308},[92,120683,26742],{"class":1942},[92,120685,120686],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[92,120688,119223],{"class":151},[92,120690,120691],{"class":94,"line":1591},[92,120692,120272],{"class":161},[92,120694,120695,120697,120699,120702,120704,120706],{"class":94,"line":1596},[92,120696,24557],{"class":1942},[92,120698,24560],{"class":207},[92,120700,120701],{"class":207}," a+r",[92,120703,120675],{"class":207},[92,120705,558],{"class":151},[92,120707,120708],{"class":102},"   \n",[92,120710,120711,120713,120715,120717,120719],{"class":94,"line":1602},[92,120712,24557],{"class":1942},[92,120714,24560],{"class":207},[92,120716,120701],{"class":207},[92,120718,120686],{"class":207},[92,120720,119223],{"class":151},[46,120722,120723],{"start":1158},[49,120724,120725],{},"检查是否安装成功",[83,120727,120729],{"className":118498,"code":120728,"language":118500,"meta":10,"style":10},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[89,120730,120731,120736],{"__ignoreMap":10},[92,120732,120733],{"class":94,"line":95},[92,120734,120735],{"class":161},"# 检查cuDNN版本命令\n",[92,120737,120738,120741,120744,120746,120748,120751,120754],{"class":94,"line":11},[92,120739,120740],{"class":1942},"cat",[92,120742,120743],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[92,120745,25090],{"class":98},[92,120747,30217],{"class":1942},[92,120749,120750],{"class":207}," CUDNN_MAJOR",[92,120752,120753],{"class":151}," -A",[92,120755,47704],{"class":151},[38,120757,120758],{},"出现下图这样的就是安装成功了",[38,120760,120761],{},[1441,120762],{"alt":10,"src":120763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[46,120765,120766],{"start":1173},[49,120767,120768],{},"软链接(一般不需要)",[83,120770,120772],{"className":118498,"code":120771,"language":118500,"meta":10,"style":10},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[89,120773,120774,120779],{"__ignoreMap":10},[92,120775,120776],{"class":94,"line":95},[92,120777,120778],{"class":161},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[92,120780,120781,120783],{"class":94,"line":11},[92,120782,24557],{"class":1942},[92,120784,120785],{"class":207}," ldconfig\n",[38,120787,120788],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[83,120790,120795],{"className":120791,"code":120792,"language":120793,"meta":120794,"style":10},"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",[89,120796,120797,120802,120807,120812,120817,120822,120827],{"__ignoreMap":10},[92,120798,120799],{"class":94,"line":95},[92,120800,120801],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[92,120803,120804],{"class":94,"line":11},[92,120805,120806],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[92,120808,120809],{"class":94,"line":1158},[92,120810,120811],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[92,120813,120814],{"class":94,"line":1173},[92,120815,120816],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[92,120818,120819],{"class":94,"line":1179},[92,120820,120821],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[92,120823,120824],{"class":94,"line":1193},[92,120825,120826],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[92,120828,120829],{"class":94,"line":1199},[92,120830,120831],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[38,120833,120834],{},"运行下方的命令",[83,120836,120838],{"className":118498,"code":120837,"language":118500,"meta":10,"style":10},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[89,120839,120840,120845,120852,120857],{"__ignoreMap":10},[92,120841,120842],{"class":94,"line":95},[92,120843,120844],{"class":161},"# cd进入CUDA路径\n",[92,120846,120847,120849],{"class":94,"line":11},[92,120848,101251],{"class":151},[92,120850,120851],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[92,120853,120854],{"class":94,"line":1158},[92,120855,120856],{"class":161}," # 查看本路径下的需要软链接的文件名\n",[92,120858,120859],{"class":94,"line":1173},[92,120860,120861],{"class":1942}," ls\n",[38,120863,120864],{},[1441,120865],{"alt":10,"src":120866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[38,120868,120869,120870,18390,120873,18390,120876,120879],{},"如上图，我需要将",[89,120871,120872],{},"libcudnn_xxx_xxxxx.so.8.9.7",[89,120874,120875],{},"libcudnn_xxx_xxxxx.so.8",[89,120877,120878],{},"libcudnn_xxx_xxxxx.so","软链接",[83,120881,120883],{"className":118498,"code":120882,"language":118500,"meta":10,"style":10},"# 创建符号链接。对于每个 .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",[89,120884,120885,120890,120906,120920,120934,120948,120962,120976,120990,120995,121001,121006],{"__ignoreMap":10},[92,120886,120887],{"class":94,"line":95},[92,120888,120889],{"class":161},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[92,120891,120892,120894,120897,120900,120903],{"class":94,"line":11},[92,120893,24557],{"class":1942},[92,120895,120896],{"class":207}," ln",[92,120898,120899],{"class":151}," -sf",[92,120901,120902],{"class":207}," libcudnn_cnn_train.so.8.9.7",[92,120904,120905],{"class":207}," libcudnn_cnn_train.so.8\n",[92,120907,120908,120910,120912,120914,120917],{"class":94,"line":1158},[92,120909,24557],{"class":1942},[92,120911,120896],{"class":207},[92,120913,120899],{"class":151},[92,120915,120916],{"class":207}," libcudnn_adv_infer.so.8.9.7",[92,120918,120919],{"class":207}," libcudnn_adv_infer.so.8\n",[92,120921,120922,120924,120926,120928,120931],{"class":94,"line":1173},[92,120923,24557],{"class":1942},[92,120925,120896],{"class":207},[92,120927,120899],{"class":151},[92,120929,120930],{"class":207}," libcudnn_adv_train.so.8.9.7",[92,120932,120933],{"class":207}," libcudnn_adv_train.so.8\n",[92,120935,120936,120938,120940,120942,120945],{"class":94,"line":1179},[92,120937,24557],{"class":1942},[92,120939,120896],{"class":207},[92,120941,120899],{"class":151},[92,120943,120944],{"class":207}," libcudnn_cnn_infer.so.8.9.7",[92,120946,120947],{"class":207}," libcudnn_cnn_infer.so.8\n",[92,120949,120950,120952,120954,120956,120959],{"class":94,"line":1193},[92,120951,24557],{"class":1942},[92,120953,120896],{"class":207},[92,120955,120899],{"class":151},[92,120957,120958],{"class":207}," libcudnn.so.8.9.7",[92,120960,120961],{"class":207}," libcudnn.so.8\n",[92,120963,120964,120966,120968,120970,120973],{"class":94,"line":1199},[92,120965,24557],{"class":1942},[92,120967,120896],{"class":207},[92,120969,120899],{"class":151},[92,120971,120972],{"class":207}," libcudnn_ops_infer.so.8.9.7",[92,120974,120975],{"class":207}," libcudnn_ops_infer.so.8\n",[92,120977,120978,120980,120982,120984,120987],{"class":94,"line":1290},[92,120979,24557],{"class":1942},[92,120981,120896],{"class":207},[92,120983,120899],{"class":151},[92,120985,120986],{"class":207}," libcudnn_ops_train.so.8.9.7",[92,120988,120989],{"class":207}," libcudnn_ops_train.so.8\n",[92,120991,120992],{"class":94,"line":1296},[92,120993,120994],{"class":161},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[92,120996,120997,120999],{"class":94,"line":1308},[92,120998,24557],{"class":1942},[92,121000,120785],{"class":207},[92,121002,121003],{"class":94,"line":1591},[92,121004,121005],{"class":161},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[92,121007,121008,121010,121013,121016,121018,121021],{"class":94,"line":1596},[92,121009,26742],{"class":1942},[92,121011,121012],{"class":151}," -l",[92,121014,121015],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[92,121017,558],{"class":151},[92,121019,121020],{"class":207},".so",[92,121022,119223],{"class":151},[63,121024,121026],{"id":121025},"_355-常见问题","3.5.5 常见问题",[46,121028,121029],{},[49,121030,121031],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[83,121033,121035],{"className":118498,"code":121034,"language":118500,"meta":10,"style":10},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[89,121036,121037],{"__ignoreMap":10},[92,121038,121039,121041,121043],{"class":94,"line":95},[92,121040,24557],{"class":1942},[92,121042,118558],{"class":207},[92,121044,121045],{"class":207}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[38,121047,121048],{},"blacklist-nouveau.conf文件内容如下：",[83,121050,121052],{"className":118498,"code":121051,"language":118500,"meta":10,"style":10},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[89,121053,121054,121062,121069,121081,121091],{"__ignoreMap":10},[92,121055,121056,121059],{"class":94,"line":95},[92,121057,121058],{"class":1942},"blacklist",[92,121060,121061],{"class":207}," nouveau\n",[92,121063,121064,121066],{"class":94,"line":11},[92,121065,121058],{"class":1942},[92,121067,121068],{"class":207}," lbm-nouveau\n",[92,121070,121071,121073,121076,121079],{"class":94,"line":1158},[92,121072,115905],{"class":1942},[92,121074,121075],{"class":207}," nouveau",[92,121077,121078],{"class":207}," modeset=",[92,121080,3064],{"class":151},[92,121082,121083,121086,121088],{"class":94,"line":1173},[92,121084,121085],{"class":151},"alias",[92,121087,121075],{"class":207},[92,121089,121090],{"class":207}," off\n",[92,121092,121093,121095,121098],{"class":94,"line":1179},[92,121094,121085],{"class":151},[92,121096,121097],{"class":207}," lbm-nouveau",[92,121099,121090],{"class":207},[38,121101,121102],{},"接着运行下方命令",[83,121104,121106],{"className":118498,"code":121105,"language":118500,"meta":10,"style":10},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[89,121107,121108,121118,121123],{"__ignoreMap":10},[92,121109,121110,121112,121115],{"class":94,"line":95},[92,121111,24557],{"class":1942},[92,121113,121114],{"class":207}," update-initramfs",[92,121116,121117],{"class":151}," -u\n",[92,121119,121120],{"class":94,"line":11},[92,121121,121122],{"class":1942},"或者\n",[92,121124,121125,121127,121130],{"class":94,"line":1158},[92,121126,24557],{"class":1942},[92,121128,121129],{"class":207}," dracut",[92,121131,121132],{"class":151}," --force\n",[38,121134,121135],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[83,121137,121139],{"className":118498,"code":121138,"language":118500,"meta":10,"style":10},"lsmod | grep nouveau\n",[89,121140,121141],{"__ignoreMap":10},[92,121142,121143,121146,121148,121150],{"class":94,"line":95},[92,121144,121145],{"class":1942},"lsmod",[92,121147,25090],{"class":98},[92,121149,30217],{"class":1942},[92,121151,121061],{"class":207},[46,121153,121154],{"start":11},[49,121155,121156],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[83,121158,121160],{"className":118498,"code":121159,"language":118500,"meta":10,"style":10},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[89,121161,121162],{"__ignoreMap":10},[92,121163,121164,121166,121168],{"class":94,"line":95},[92,121165,24557],{"class":1942},[92,121167,118558],{"class":207},[92,121169,121170],{"class":207}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[38,121172,121173],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[83,121175,121177],{"className":118498,"code":121176,"language":118500,"meta":10,"style":10},"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",[89,121178,121179,121187,121195,121203,121210,121218,121228,121236],{"__ignoreMap":10},[92,121180,121181,121184],{"class":94,"line":95},[92,121182,121183],{"class":1942},"Section",[92,121185,121186],{"class":207}," \"OutputClass\"\n",[92,121188,121189,121192],{"class":94,"line":11},[92,121190,121191],{"class":1942},"   Identifier",[92,121193,121194],{"class":207}," \"nvidia\"\n",[92,121196,121197,121200],{"class":94,"line":1158},[92,121198,121199],{"class":1942},"   MatchDriver",[92,121201,121202],{"class":207}," \"nvidia-drm\"\n",[92,121204,121205,121208],{"class":94,"line":1173},[92,121206,121207],{"class":1942},"   Driver",[92,121209,121194],{"class":207},[92,121211,121212,121215],{"class":94,"line":1179},[92,121213,121214],{"class":1942},"   Option",[92,121216,121217],{"class":207}," \"AllowEmptyInitialConfiguration\"\n",[92,121219,121220,121222,121225],{"class":94,"line":1193},[92,121221,121214],{"class":1942},[92,121223,121224],{"class":207}," \"PrimaryGPU\"",[92,121226,121227],{"class":207}," \"yes\"\n",[92,121229,121230,121233],{"class":94,"line":1199},[92,121231,121232],{"class":1942},"   ModulePath",[92,121234,121235],{"class":207}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[92,121237,121238],{"class":94,"line":1290},[92,121239,121240],{"class":1942},"EndSection\n",[46,121242,121243],{"start":1158},[49,121244,121245],{},"安装N卡驱动提示错误",[83,121247,121249],{"className":120791,"code":121248,"language":120793,"meta":120794,"style":10},"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",[89,121250,121251],{"__ignoreMap":10},[92,121252,121253],{"class":94,"line":95},[92,121254,121248],{},[46,121256,121257],{},[49,121258,121259],{},"检查当前运行的内核版本：",[38,121261,121262],{},"运行以下命令以查看你当前正在使用的内核版本：",[83,121264,121266],{"className":117271,"code":121265,"language":117273,"meta":10,"style":10},"uname -r\n",[89,121267,121268],{"__ignoreMap":10},[92,121269,121270,121272],{"class":94,"line":95},[92,121271,70184],{"class":1942},[92,121273,121274],{"class":151}," -r\n",[46,121276,121277],{"start":11},[49,121278,121279],{},"安装内核开发文件：",[38,121281,121282,121283,121286],{},"确保你已经安装了与当前内核版本相匹配的 ",[89,121284,121285],{},"kernel-devel"," 包。运行以下命令来安装：",[83,121288,121290],{"className":117271,"code":121289,"language":117273,"meta":10,"style":10},"sudo dnf install kernel-devel-$(uname -r)\n",[89,121291,121292],{"__ignoreMap":10},[92,121293,121294,121296,121298,121300,121303,121305,121307,121309],{"class":94,"line":95},[92,121295,24557],{"class":1942},[92,121297,26296],{"class":207},[92,121299,23814],{"class":207},[92,121301,121302],{"class":207}," kernel-devel-",[92,121304,25080],{"class":102},[92,121306,70184],{"class":1942},[92,121308,119614],{"class":151},[92,121310,109],{"class":102},[38,121312,121313],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[46,121315,121316],{"start":1158},[49,121317,121318],{},"安装内核源代码（如果需要）：",[38,121320,121321],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[83,121323,121325],{"className":117271,"code":121324,"language":117273,"meta":10,"style":10},"sudo dnf install kernel-headers kernel-source\n",[89,121326,121327],{"__ignoreMap":10},[92,121328,121329,121331,121333,121335,121338],{"class":94,"line":95},[92,121330,24557],{"class":1942},[92,121332,26296],{"class":207},[92,121334,23814],{"class":207},[92,121336,121337],{"class":207}," kernel-headers",[92,121339,121340],{"class":207}," kernel-source\n",[46,121342,121343],{"start":1173},[49,121344,121345],{},"检查安装：",[38,121347,121348,121349,121352],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[89,121350,121351],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[83,121354,121356],{"className":117271,"code":121355,"language":117273,"meta":10,"style":10},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[89,121357,121358],{"__ignoreMap":10},[92,121359,121360,121362],{"class":94,"line":95},[92,121361,26742],{"class":1942},[92,121363,121364],{"class":207}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[38,121366,121367,121368,121371],{},"如果仍然遇到问题，可以通过 ",[89,121369,121370],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5106,121373,121374],{},"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":10,"searchDepth":11,"depth":11,"links":121376},[121377,121381,121391,121395,121396],{"id":118474,"depth":11,"text":118475,"children":121378},[121379,121380],{"id":118484,"depth":1158,"text":118485},{"id":118494,"depth":1158,"text":118495},{"id":118694,"depth":11,"text":118695,"children":121382},[121383,121384,121385,121386,121387,121388,121389,121390],{"id":118698,"depth":1158,"text":118699},{"id":118768,"depth":1158,"text":118769},{"id":118857,"depth":1158,"text":118858},{"id":119102,"depth":1158,"text":119103},{"id":119172,"depth":1158,"text":119173},{"id":119239,"depth":1158,"text":119240},{"id":119274,"depth":1158,"text":119275},{"id":119329,"depth":1158,"text":119330},{"id":119380,"depth":11,"text":119381,"children":121392},[121393,121394],{"id":119384,"depth":1158,"text":119385},{"id":119464,"depth":1158,"text":119465},{"id":119650,"depth":11,"text":119651},{"id":119823,"depth":11,"text":119824,"children":121397},[121398,121399,121400,121401,121402],{"id":119827,"depth":1158,"text":119828},{"id":119868,"depth":1158,"text":119869},{"id":120155,"depth":1158,"text":120156},{"id":120529,"depth":1158,"text":120530},{"id":121025,"depth":1158,"text":121026},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118466,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121409,"title":121410,"body":121411,"description":13,"extension":14,"meta":121751,"navigation":17,"path":121752,"seo":121753,"stem":121754,"__hash__":121755},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121412,"toc":121749},[121413,121416,121421,121424,121670,121675,121678,121714,121717,121746],[29,121414,121410],{"id":121415},"_4-命令教程长期积累",[46,121417,121418],{},[49,121419,121420],{},"大多数命令",[38,121422,121423],{},"常用 Linux 命令速查：",[83,121425,121427],{"className":117271,"code":121426,"language":117273,"meta":10,"style":10},"# 文件与目录\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",[89,121428,121429,121434,121441,121448,121456,121463,121470,121478,121486,121493,121500,121508,121512,121517,121524,121532,121539,121543,121548,121555,121563,121571,121579,121587,121591,121596,121604,121611,121618,121626,121634,121638,121643,121652,121661],{"__ignoreMap":10},[92,121430,121431],{"class":94,"line":95},[92,121432,121433],{"class":161},"# 文件与目录\n",[92,121435,121436,121438],{"class":94,"line":11},[92,121437,26742],{"class":1942},[92,121439,121440],{"class":161},"        # 列出目录内容\n",[92,121442,121443,121445],{"class":94,"line":1158},[92,121444,101251],{"class":151},[92,121446,121447],{"class":161},"        # 切换目录\n",[92,121449,121450,121453],{"class":94,"line":1173},[92,121451,121452],{"class":151},"pwd",[92,121454,121455],{"class":161},"       # 显示当前路径\n",[92,121457,121458,121460],{"class":94,"line":1179},[92,121459,101241],{"class":1942},[92,121461,121462],{"class":161},"     # 创建目录\n",[92,121464,121465,121467],{"class":94,"line":1193},[92,121466,25303],{"class":1942},[92,121468,121469],{"class":161},"        # 删除文件或目录\n",[92,121471,121472,121475],{"class":94,"line":1199},[92,121473,121474],{"class":1942},"cp",[92,121476,121477],{"class":161},"        # 复制文件或目录\n",[92,121479,121480,121483],{"class":94,"line":1290},[92,121481,121482],{"class":1942},"mv",[92,121484,121485],{"class":161},"        # 移动\u002F重命名文件或目录\n",[92,121487,121488,121490],{"class":94,"line":1296},[92,121489,101258],{"class":1942},[92,121491,121492],{"class":161},"     # 创建空文件\n",[92,121494,121495,121497],{"class":94,"line":1308},[92,121496,120740],{"class":1942},[92,121498,121499],{"class":161},"       # 查看文件内容\n",[92,121501,121502,121505],{"class":94,"line":1591},[92,121503,121504],{"class":1942},"head\u002Ftail",[92,121506,121507],{"class":161}," # 查看文件头部\u002F尾部\n",[92,121509,121510],{"class":94,"line":1596},[92,121511,2379],{"emptyLinePlaceholder":17},[92,121513,121514],{"class":94,"line":1602},[92,121515,121516],{"class":161},"# 权限管理\n",[92,121518,121519,121521],{"class":94,"line":1607},[92,121520,24592],{"class":1942},[92,121522,121523],{"class":161},"     # 修改文件权限\n",[92,121525,121526,121529],{"class":94,"line":1621},[92,121527,121528],{"class":1942},"chown",[92,121530,121531],{"class":161},"     # 修改文件所有者\n",[92,121533,121534,121536],{"class":94,"line":1626},[92,121535,24557],{"class":1942},[92,121537,121538],{"class":161},"      # 以管理员身份执行\n",[92,121540,121541],{"class":94,"line":1632},[92,121542,2379],{"emptyLinePlaceholder":17},[92,121544,121545],{"class":94,"line":1653},[92,121546,121547],{"class":161},"# 系统信息\n",[92,121549,121550,121552],{"class":94,"line":1658},[92,121551,70184],{"class":1942},[92,121553,121554],{"class":161},"     # 系统信息\n",[92,121556,121557,121560],{"class":94,"line":1672},[92,121558,121559],{"class":1942},"df",[92,121561,121562],{"class":161},"        # 磁盘使用情况\n",[92,121564,121565,121568],{"class":94,"line":1677},[92,121566,121567],{"class":1942},"free",[92,121569,121570],{"class":161},"      # 内存使用情况\n",[92,121572,121573,121576],{"class":94,"line":1706},[92,121574,121575],{"class":1942},"top\u002Fhtop",[92,121577,121578],{"class":161},"  # 进程监控\n",[92,121580,121581,121584],{"class":94,"line":1711},[92,121582,121583],{"class":1942},"ps",[92,121585,121586],{"class":161},"        # 查看进程\n",[92,121588,121589],{"class":94,"line":1728},[92,121590,2379],{"emptyLinePlaceholder":17},[92,121592,121593],{"class":94,"line":1733},[92,121594,121595],{"class":161},"# 网络\n",[92,121597,121598,121601],{"class":94,"line":1738},[92,121599,121600],{"class":1942},"ping",[92,121602,121603],{"class":161},"      # 测试网络连通性\n",[92,121605,121606,121608],{"class":94,"line":1743},[92,121607,26830],{"class":1942},[92,121609,121610],{"class":161},"      # 发送 HTTP 请求\n",[92,121612,121613,121615],{"class":94,"line":1757},[92,121614,120264],{"class":1942},[92,121616,121617],{"class":161},"      # 下载文件\n",[92,121619,121620,121623],{"class":94,"line":1762},[92,121621,121622],{"class":1942},"ssh",[92,121624,121625],{"class":161},"       # 远程登录\n",[92,121627,121628,121631],{"class":94,"line":2556},[92,121629,121630],{"class":1942},"scp",[92,121632,121633],{"class":161},"       # 远程文件传输\n",[92,121635,121636],{"class":94,"line":2570},[92,121637,2379],{"emptyLinePlaceholder":17},[92,121639,121640],{"class":94,"line":2578},[92,121641,121642],{"class":161},"# 包管理（Debian\u002FUbuntu）\n",[92,121644,121645,121647,121649],{"class":94,"line":2583},[92,121646,117343],{"class":1942},[92,121648,117322],{"class":207},[92,121650,121651],{"class":161},"   # 更新软件源\n",[92,121653,121654,121656,121658],{"class":94,"line":2589},[92,121655,117343],{"class":1942},[92,121657,23814],{"class":207},[92,121659,121660],{"class":161},"  # 安装软件包\n",[92,121662,121663,121665,121667],{"class":94,"line":2595},[92,121664,117343],{"class":1942},[92,121666,26060],{"class":207},[92,121668,121669],{"class":161},"   # 卸载软件包\n",[46,121671,121672],{"start":11},[49,121673,121674],{},"KDE Dolphin 以root打开",[38,121676,121677],{},"kde5",[83,121679,121681],{"className":117271,"code":121680,"language":117273,"meta":10,"style":10},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[89,121682,121683],{"__ignoreMap":10},[92,121684,121685,121688,121691,121694,121696,121698,121701,121704,121706,121709,121711],{"class":94,"line":95},[92,121686,121687],{"class":1942},"pkexec",[92,121689,121690],{"class":207}," env",[92,121692,121693],{"class":207}," DISPLAY=",[92,121695,28124],{"class":102},[92,121697,28182],{"class":207},[92,121699,121700],{"class":102},"$XAUTHORITY ",[92,121702,121703],{"class":207},"KDE_SESSION_VERSION=",[92,121705,422],{"class":151},[92,121707,121708],{"class":207}," KDE_FULL_SESSION=",[92,121710,1341],{"class":151},[92,121712,121713],{"class":207}," dolphin\n",[38,121715,121716],{},"kde6",[83,121718,121720],{"className":117271,"code":121719,"language":117273,"meta":10,"style":10},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[89,121721,121722],{"__ignoreMap":10},[92,121723,121724,121726,121728,121730,121732,121734,121736,121738,121740,121742,121744],{"class":94,"line":95},[92,121725,121687],{"class":1942},[92,121727,121690],{"class":207},[92,121729,121693],{"class":207},[92,121731,28124],{"class":102},[92,121733,28182],{"class":207},[92,121735,121700],{"class":102},[92,121737,121703],{"class":207},[92,121739,447],{"class":151},[92,121741,121708],{"class":207},[92,121743,1341],{"class":151},[92,121745,121713],{"class":207},[5106,121747,121748],{},"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":10,"searchDepth":11,"depth":11,"links":121750},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121410,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121757,"title":121758,"body":121759,"description":13,"extension":14,"meta":121773,"navigation":17,"path":121774,"seo":121775,"stem":121776,"__hash__":121777},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121760,"toc":121771},[121761,121764],[29,121762,121758],{"id":121763},"_5-各种环境配置",[38,121765,121766],{},[341,121767,121770],{"href":121768,"rel":121769},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23845],"电控组环境搭建大全",{"title":10,"searchDepth":11,"depth":11,"links":121772},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121758,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121779,"title":121780,"body":121781,"description":13,"extension":14,"meta":122129,"navigation":17,"path":122130,"seo":122131,"stem":122132,"__hash__":122133},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121782,"toc":122121},[121783,121786,121790,121794,121798,121803,121810,121814,122107,122111,122118],[29,121784,121780],{"id":121785},"_6-拓展功能",[33,121787,121789],{"id":121788},"_61-wine","6.1 Wine",[33,121791,121793],{"id":121792},"_62-android","6.2 Android",[63,121795,121797],{"id":121796},"_621-i卡a卡","6.2.1 I卡、A卡",[46,121799,121800],{},[49,121801,121802],{},"Wayland-Waydroid(体验超级好)",[38,121804,121805,121806],{},"Waydroid 官网与安装指南：",[341,121807,121808],{"href":121808,"rel":121809},"https:\u002F\u002Fwaydro.id\u002F",[23845],[63,121811,121813],{"id":121812},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[46,121815,121816],{},[49,121817,121818,121819,121821,121822,121826,121828,121831,121836,122033],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53696,121820],{},"BlissOS 官网下载：",[341,121823,121824],{"href":121824,"rel":121825},"https:\u002F\u002Fblissos.org\u002F",[23845],[53696,121827],{},[1441,121829],{"alt":10,"src":121830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[46,121832,121833],{"start":1158},[49,121834,121835],{},"比较推荐的配置",[83,121837,121839],{"className":117271,"code":121838,"language":117273,"meta":10,"style":10},"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",[89,121840,121841,121848,121858,121868,121878,121890,121900,121907,121917,121926,121935,121945,121955,121964,121974,121984,121996,122006,122015,122025],{"__ignoreMap":10},[92,121842,121843,121846],{"class":94,"line":95},[92,121844,121845],{"class":1942},"qemu-system-x86_64",[92,121847,24659],{"class":151},[92,121849,121850,121853,121856],{"class":94,"line":11},[92,121851,121852],{"class":151},"        -M",[92,121854,121855],{"class":207}," q35,vmport=off",[92,121857,24659],{"class":151},[92,121859,121860,121863,121866],{"class":94,"line":1158},[92,121861,121862],{"class":151},"        -accel",[92,121864,121865],{"class":207}," kvm",[92,121867,24659],{"class":151},[92,121869,121870,121873,121876],{"class":94,"line":1173},[92,121871,121872],{"class":151},"        -cpu",[92,121874,121875],{"class":207}," qemu64,+sse3,+sse4.2",[92,121877,24659],{"class":151},[92,121879,121880,121883,121886,121888],{"class":94,"line":1179},[92,121881,121882],{"class":151},"        -smp",[92,121884,121885],{"class":207}," 8,cores=",[92,121887,396],{"class":151},[92,121889,24659],{"class":151},[92,121891,121892,121895,121898],{"class":94,"line":1193},[92,121893,121894],{"class":151},"        -m",[92,121896,121897],{"class":207}," 6G",[92,121899,24659],{"class":151},[92,121901,121902,121905],{"class":94,"line":1199},[92,121903,121904],{"class":151},"        -usb",[92,121906,24659],{"class":151},[92,121908,121909,121912,121915],{"class":94,"line":1290},[92,121910,121911],{"class":151},"        -device",[92,121913,121914],{"class":207}," virtio-tablet",[92,121916,24659],{"class":151},[92,121918,121919,121921,121924],{"class":94,"line":1296},[92,121920,121911],{"class":151},[92,121922,121923],{"class":207}," virtio-keyboard",[92,121925,24659],{"class":151},[92,121927,121928,121930,121933],{"class":94,"line":1308},[92,121929,121911],{"class":151},[92,121931,121932],{"class":207}," usb-tablet",[92,121934,24659],{"class":151},[92,121936,121937,121940,121943],{"class":94,"line":1591},[92,121938,121939],{"class":151},"        -bios",[92,121941,121942],{"class":207}," OVMF-pure-efi64.fd",[92,121944,24659],{"class":151},[92,121946,121947,121950,121953],{"class":94,"line":1596},[92,121948,121949],{"class":151},"        -net",[92,121951,121952],{"class":207}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[92,121954,24659],{"class":151},[92,121956,121957,121959,121962],{"class":94,"line":1602},[92,121958,121949],{"class":151},[92,121960,121961],{"class":207}," nic,model=virtio",[92,121963,24659],{"class":151},[92,121965,121966,121969,121972],{"class":94,"line":1607},[92,121967,121968],{"class":151},"        -audio",[92,121970,121971],{"class":207}," sdl,model=hda",[92,121973,24659],{"class":151},[92,121975,121976,121979,121982],{"class":94,"line":1621},[92,121977,121978],{"class":151},"        -display",[92,121980,121981],{"class":207}," sdl,gl=on,show-cursor=on",[92,121983,24659],{"class":151},[92,121985,121986,121988,121991,121994],{"class":94,"line":1626},[92,121987,121911],{"class":151},[92,121989,121990],{"class":207}," virtio-vga-gl,xres=1920,yres=",[92,121992,121993],{"class":151},"1080",[92,121995,24659],{"class":151},[92,121997,121998,122001,122004],{"class":94,"line":1632},[92,121999,122000],{"class":151},"        -drive",[92,122002,122003],{"class":207}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[92,122005,24659],{"class":151},[92,122007,122008,122010,122013],{"class":94,"line":1653},[92,122009,122000],{"class":151},[92,122011,122012],{"class":207}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[92,122014,24659],{"class":151},[92,122016,122017,122020,122023],{"class":94,"line":1658},[92,122018,122019],{"class":151},"        -monitor",[92,122021,122022],{"class":207}," stdio",[92,122024,24659],{"class":151},[92,122026,122027,122030],{"class":94,"line":1672},[92,122028,122029],{"class":151},"        -serial",[92,122031,122032],{"class":207}," none\n",[46,122034,122035],{"start":1179},[49,122036,122037,122038],{},"常用操作：",[46,122039,122040,122043,122099],{},[49,122041,122042],{},"全屏：Ctrl+Alt+F",[49,122044,122045,122046,122051],{},"adb调试",[46,122047,122048],{},[49,122049,122050],{},"使Linux与Android用ADB连接。",[83,122052,122054],{"className":117271,"code":122053,"language":117273,"meta":10,"style":10},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[89,122055,122056,122061,122072,122077,122089,122094],{"__ignoreMap":10},[92,122057,122058],{"class":94,"line":95},[92,122059,122060],{"class":161},"# 连接安卓\n",[92,122062,122063,122066,122069],{"class":94,"line":11},[92,122064,122065],{"class":1942},"adb",[92,122067,122068],{"class":207}," connect",[92,122070,122071],{"class":151}," 127.0.0.1\n",[92,122073,122074],{"class":94,"line":1158},[92,122075,122076],{"class":161},"# 打开shell\n",[92,122078,122079,122081,122083,122086],{"class":94,"line":1173},[92,122080,122065],{"class":1942},[92,122082,26864],{"class":151},[92,122084,122085],{"class":207}," 127.0.0.1:5555",[92,122087,122088],{"class":207}," shell\n",[92,122090,122091],{"class":94,"line":1179},[92,122092,122093],{"class":161},"# 使用root权限\n",[92,122095,122096],{"class":94,"line":1193},[92,122097,122098],{"class":1942},"su\n",[49,122100,122101,122102],{},"中文输入法",[46,122103,122104],{},[49,122105,122106],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[33,122108,122110],{"id":122109},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[38,122112,122113,122114],{},"rEFInd 官网与文档：",[341,122115,122116],{"href":122116,"rel":122117},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23845],[5106,122119,122120],{},"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":10,"searchDepth":11,"depth":11,"links":122122},[122123,122124,122128],{"id":121788,"depth":11,"text":121789},{"id":121792,"depth":11,"text":121793,"children":122125},[122126,122127],{"id":121796,"depth":1158,"text":121797},{"id":121812,"depth":1158,"text":121813},{"id":122109,"depth":11,"text":122110},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121780,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122135,"title":122136,"body":122137,"description":13,"extension":14,"meta":125436,"navigation":17,"path":125437,"seo":125438,"stem":125439,"__hash__":125440},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122138,"toc":125410},[122139,122142,122146,122149,122156,122406,122409,122481,122484,122488,122492,122497,122500,122503,122506,122511,122514,122517,122520,122525,122528,122533,122536,122539,122544,122547,122552,122555,122559,122563,122566,122571,122574,122588,122591,122594,122603,122606,122615,122618,122621,122630,122633,122642,122645,122648,122657,122660,122663,122678,122681,122684,122693,122698,122701,122704,122713,122716,122725,122728,122737,122740,122749,122754,122757,122765,122770,122773,122782,122785,122793,122798,122801,122810,122813,122816,122820,122823,122828,122831,122836,122850,122855,122860,122871,122876,122882,122887,122902,122907,122910,122915,122920,122925,122933,122938,122945,122950,122961,122966,122969,122973,122976,122979,122984,122987,123006,123011,123014,123023,123028,123031,123053,123056,123086,123089,123094,123097,123111,123116,123135,123138,123141,123146,123158,123163,123168,123171,123176,123179,123194,123197,123202,123207,123211,123216,123256,123259,123263,123269,123275,123280,123283,123290,123295,123302,123305,123308,123315,123329,123332,123392,123395,123409,123421,123424,123427,123430,123494,123497,123500,123503,123523,123526,123531,123538,123542,123545,123549,123554,123559,123563,123566,123569,123611,123616,123619,123641,123656,123658,123663,123675,123735,123737,123739,123793,123795,123797,123803,123808,123811,123816,123820,123823,123885,123890,123893,123895,123899,123911,123993,123995,123997,124051,124057,124059,124063,124068,124070,124075,124079,124099,124134,124138,124141,124144,124147,124154,124157,124169,124172,124187,124190,124209,124257,124260,124277,124280,124294,124299,124302,124311,124326,124338,124376,124381,124390,124395,124400,124426,124435,124439,124443,124448,124451,124455,124459,124464,124467,124472,124475,124480,124483,124488,124491,124495,124500,124503,124508,124511,124515,124520,124523,124528,124531,124536,124539,124543,124548,124551,124556,124559,124564,124567,124571,124576,124579,124584,124587,124592,124595,124600,124603,124608,124611,124616,124619,124623,124628,124631,124636,124643,124647,124652,124655,124660,124663,124667,124672,124675,124678,124681,124684,124687,124691,124694,124704,124709,124714,124736,124741,124746,124753,124757,124762,124765,124768,124773,124776,124779,124782,124785,124788,124791,124794,124797,124800,124803,124806,124809,124814,124819,124824,124829,124834,124839,124844,124847,124851,124854,124858,124863,124868,124873,124878,124882,124888,124896,124901,124904,124909,124924,124927,124932,124966,124981,124984,125039,125065,125077,125080,125089,125092,125107,125112,125115,125121,125126,125129,125134,125137,125142,125147,125154,125157,125172,125175,125210,125215,125223,125261,125264,125267,125272,125275,125280,125291,125325,125330,125333,125342,125347,125353,125356,125361,125370,125375,125378,125381,125386,125394,125397,125402,125407],[29,122140,122136],{"id":122141},"_7-其他操作",[33,122143,122145],{"id":122144},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[38,122147,122148],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[38,122150,122151,122152,122155],{},"进入工控机的硬盘目录，进入",[89,122153,122154],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[83,122157,122161],{"className":122158,"code":122159,"language":122160,"meta":10,"style":10},"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",[89,122162,122163,122171,122182,122189,122196,122208,122215,122227,122238,122249,122256,122263,122270,122282,122294,122301,122313,122325,122332,122344,122356,122368,122379,122386,122397],{"__ignoreMap":10},[92,122164,122165,122168],{"class":94,"line":95},[92,122166,122167],{"class":51280},"network",[92,122169,122170],{"class":102},": \n",[92,122172,122173,122176,122178,122180],{"class":94,"line":11},[92,122174,122175],{"class":51280},"  version",[92,122177,51417],{"class":102},[92,122179,180],{"class":151},[92,122181,2653],{"class":102},[92,122183,122184,122187],{"class":94,"line":1158},[92,122185,122186],{"class":51280},"  wifis",[92,122188,122170],{"class":102},[92,122190,122191,122194],{"class":94,"line":1173},[92,122192,122193],{"class":51280},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[92,122195,122170],{"class":102},[92,122197,122198,122201,122203,122206],{"class":94,"line":1179},[92,122199,122200],{"class":51280},"      renderer",[92,122202,51417],{"class":102},[92,122204,122205],{"class":207},"NetworkManager",[92,122207,2653],{"class":102},[92,122209,122210,122213],{"class":94,"line":1193},[92,122211,122212],{"class":51280},"      match",[92,122214,122170],{"class":102},[92,122216,122217,122220,122222,122225],{"class":94,"line":1199},[92,122218,122219],{"class":51280},"        name",[92,122221,51417],{"class":102},[92,122223,122224],{"class":207},"\"wlan0\"",[92,122226,2653],{"class":102},[92,122228,122229,122232,122234,122236],{"class":94,"line":1290},[92,122230,122231],{"class":51280},"      dhcp4",[92,122233,51417],{"class":102},[92,122235,1341],{"class":151},[92,122237,2653],{"class":102},[92,122239,122240,122243,122245,122247],{"class":94,"line":1296},[92,122241,122242],{"class":51280},"      dhcp6",[92,122244,51417],{"class":102},[92,122246,1341],{"class":151},[92,122248,2653],{"class":102},[92,122250,122251,122254],{"class":94,"line":1308},[92,122252,122253],{"class":51280},"      access-points",[92,122255,122170],{"class":102},[92,122257,122258,122261],{"class":94,"line":1591},[92,122259,122260],{"class":207},"        \"EMIS_Vinci_Robocon_5G\"",[92,122262,122170],{"class":102},[92,122264,122265,122268],{"class":94,"line":1596},[92,122266,122267],{"class":51280},"          auth",[92,122269,122170],{"class":102},[92,122271,122272,122275,122277,122280],{"class":94,"line":1602},[92,122273,122274],{"class":51280},"            key-management",[92,122276,51417],{"class":102},[92,122278,122279],{"class":207},"\"psk\"",[92,122281,2653],{"class":102},[92,122283,122284,122287,122289,122292],{"class":94,"line":1607},[92,122285,122286],{"class":51280},"            password",[92,122288,51417],{"class":102},[92,122290,122291],{"class":207},"\"vinci666\"",[92,122293,2653],{"class":102},[92,122295,122296,122299],{"class":94,"line":1621},[92,122297,122298],{"class":51280},"          networkmanager",[92,122300,122170],{"class":102},[92,122302,122303,122306,122308,122311],{"class":94,"line":1626},[92,122304,122305],{"class":51280},"            uuid",[92,122307,51417],{"class":102},[92,122309,122310],{"class":207},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[92,122312,2653],{"class":102},[92,122314,122315,122318,122320,122323],{"class":94,"line":1632},[92,122316,122317],{"class":51280},"            name",[92,122319,51417],{"class":102},[92,122321,122322],{"class":207},"\"EMIS_Vinci_Robocon_5G\"",[92,122324,2653],{"class":102},[92,122326,122327,122330],{"class":94,"line":1653},[92,122328,122329],{"class":51280},"            passthrough",[92,122331,122170],{"class":102},[92,122333,122334,122337,122339,122342],{"class":94,"line":1658},[92,122335,122336],{"class":51280},"              wifi-security.auth-alg",[92,122338,51417],{"class":102},[92,122340,122341],{"class":207},"\"open\"",[92,122343,2653],{"class":102},[92,122345,122346,122349,122351,122354],{"class":94,"line":1672},[92,122347,122348],{"class":51280},"              ipv6.addr-gen-mode",[92,122350,51417],{"class":102},[92,122352,122353],{"class":207},"\"default\"",[92,122355,2653],{"class":102},[92,122357,122358,122361,122363,122366],{"class":94,"line":1677},[92,122359,122360],{"class":51280},"              ipv6.ip6-privacy",[92,122362,51417],{"class":102},[92,122364,122365],{"class":207},"\"-1\"",[92,122367,2653],{"class":102},[92,122369,122370,122373,122375,122377],{"class":94,"line":1706},[92,122371,122372],{"class":51280},"              proxy._",[92,122374,51417],{"class":102},[92,122376,7632],{"class":207},[92,122378,2653],{"class":102},[92,122380,122381,122384],{"class":94,"line":1711},[92,122382,122383],{"class":51280},"      networkmanager",[92,122385,122170],{"class":102},[92,122387,122388,122391,122393,122395],{"class":94,"line":1728},[92,122389,122390],{"class":51280},"        uuid",[92,122392,51417],{"class":102},[92,122394,122310],{"class":207},[92,122396,2653],{"class":102},[92,122398,122399,122401,122403],{"class":94,"line":1733},[92,122400,122219],{"class":51280},[92,122402,51417],{"class":102},[92,122404,122405],{"class":207},"\"EMIS_Vinci_Robocon_5G\"\n",[38,122407,122408],{},"将其改为新wifi的名和密码：",[83,122410,122412],{"className":122158,"code":122411,"language":122160,"meta":10,"style":10},"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",[89,122413,122414,122420,122429,122435,122442,122451,122459,122465,122471],{"__ignoreMap":10},[92,122415,122416,122418],{"class":94,"line":95},[92,122417,122167],{"class":51280},[92,122419,3718],{"class":102},[92,122421,122422,122424,122426],{"class":94,"line":11},[92,122423,122175],{"class":51280},[92,122425,51417],{"class":102},[92,122427,122428],{"class":151},"2\n",[92,122430,122431,122433],{"class":94,"line":1158},[92,122432,122186],{"class":51280},[92,122434,3718],{"class":102},[92,122436,122437,122440],{"class":94,"line":1173},[92,122438,122439],{"class":51280},"    wlan0",[92,122441,3718],{"class":102},[92,122443,122444,122446,122448],{"class":94,"line":1179},[92,122445,122231],{"class":51280},[92,122447,51417],{"class":102},[92,122449,122450],{"class":151},"true\n",[92,122452,122453,122455,122457],{"class":94,"line":1193},[92,122454,122242],{"class":51280},[92,122456,51417],{"class":102},[92,122458,122450],{"class":151},[92,122460,122461,122463],{"class":94,"line":1199},[92,122462,122253],{"class":51280},[92,122464,3718],{"class":102},[92,122466,122467,122469],{"class":94,"line":1290},[92,122468,122260],{"class":207},[92,122470,3718],{"class":102},[92,122472,122473,122476,122478],{"class":94,"line":1296},[92,122474,122475],{"class":51280},"          password",[92,122477,51417],{"class":102},[92,122479,122480],{"class":207},"\"vinci666\"\n",[38,122482,122483],{},"工控机开机即可连上网。",[33,122485,122487],{"id":122486},"_72-ssh远程开发","7.2 SSH远程开发",[63,122489,122491],{"id":122490},"_721-环境准备","7.2.1 环境准备",[38,122493,122494],{},[252,122495,122496],{},"1.硬件准备",[38,122498,122499],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[38,122501,122502],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[38,122504,122505],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[38,122507,122508],{},[252,122509,122510],{},"2.设置固定IP",[38,122512,122513],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[38,122515,122516],{},"1.进入设置界面",[38,122518,122519],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[38,122521,122522],{},[1441,122523],{"alt":10,"src":122524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[38,122526,122527],{},"2.配置所连接的网络",[38,122529,122530],{},[1441,122531],{"alt":10,"src":122532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[38,122534,122535],{},"3.设置固定IP",[38,122537,122538],{},"查看当前IP地址。",[38,122540,122541],{},[1441,122542],{"alt":10,"src":122543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[38,122545,122546],{},"设置固定IP。",[38,122548,122549],{},[1441,122550],{"alt":10,"src":122551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[38,122553,122554],{},"至此，IP配置完毕。",[63,122556,122558],{"id":122557},"_722-环境搭建","7.2.2 环境搭建",[38,122560,122561],{},[252,122562,25734],{},[38,122564,122565],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[38,122567,122568],{},[252,122569,122570],{},"实现",[38,122572,122573],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[46,122575,122576,122579,122582,122585],{},[49,122577,122578],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[49,122580,122581],{},"远程主机启动SSH服务；",[49,122583,122584],{},"本地主机登陆远程主机；",[49,122586,122587],{},"实现数据传输。",[38,122589,122590],{},"1.安装SSH客户端与服务端",[38,122592,122593],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[83,122595,122597],{"className":120791,"code":122596,"language":120793,"meta":120794,"style":10}," sudo apt install openssh-server\n",[89,122598,122599],{"__ignoreMap":10},[92,122600,122601],{"class":94,"line":95},[92,122602,122596],{},[38,122604,122605],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[83,122607,122609],{"className":120791,"code":122608,"language":120793,"meta":120794,"style":10},"sudo apt install openssh-client\n",[89,122610,122611],{"__ignoreMap":10},[92,122612,122613],{"class":94,"line":95},[92,122614,122608],{},[38,122616,122617],{},"2.远程主机启动SSH服务",[38,122619,122620],{},"远程主机启动 ssh 服务命令如下：",[83,122622,122624],{"className":120791,"code":122623,"language":120793,"meta":120794,"style":10},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[89,122625,122626],{"__ignoreMap":10},[92,122627,122628],{"class":94,"line":95},[92,122629,122623],{},[38,122631,122632],{},"启动后可使用如下命令查看服务是否正常运行：",[83,122634,122636],{"className":120791,"code":122635,"language":120793,"meta":120794,"style":10},"ps -e | grep ssh\n",[89,122637,122638],{"__ignoreMap":10},[92,122639,122640],{"class":94,"line":95},[92,122641,122635],{},[38,122643,122644],{},"如果启动成功，会包含 sshd 程序。",[38,122646,122647],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[83,122649,122651],{"className":120791,"code":122650,"language":120793,"meta":120794,"style":10},"sudo systemctl enable ssh\n",[89,122652,122653],{"__ignoreMap":10},[92,122654,122655],{"class":94,"line":95},[92,122656,122650],{},[38,122658,122659],{},"3.本地远程登录",[38,122661,122662],{},"登录远程主机可以调用如下命令:",[83,122664,122666],{"className":117271,"code":122665,"language":117273,"meta":10,"style":10},"ssh -X 用户名@ip地址\n",[89,122667,122668],{"__ignoreMap":10},[92,122669,122670,122672,122675],{"class":94,"line":95},[92,122671,121622],{"class":1942},[92,122673,122674],{"class":151}," -X",[92,122676,122677],{"class":207}," 用户名@ip地址\n",[38,122679,122680],{},"然后根据提示，录入登陆密码，即可成功登录。",[38,122682,122683],{},"如果退出，可以调用exit命令：",[83,122685,122687],{"className":120791,"code":122686,"language":120793,"meta":120794,"style":10},"exit\n",[89,122688,122689],{"__ignoreMap":10},[92,122690,122691],{"class":94,"line":95},[92,122692,122686],{},[38,122694,122695],{},[252,122696,122697],{},"4.实现数据传输",[38,122699,122700],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[38,122702,122703],{},"上传文件指令格式如下：",[83,122705,122707],{"className":120791,"code":122706,"language":120793,"meta":120794,"style":10},"scp 本地文件路径 账号@ip:路径\n",[89,122708,122709],{"__ignoreMap":10},[92,122710,122711],{"class":94,"line":95},[92,122712,122706],{},[38,122714,122715],{},"上传文件夹指令格式如下：",[83,122717,122719],{"className":120791,"code":122718,"language":120793,"meta":120794,"style":10},"scp -r 本地文件夹路径 账号@ip:路径\n",[89,122720,122721],{"__ignoreMap":10},[92,122722,122723],{"class":94,"line":95},[92,122724,122718],{},[38,122726,122727],{},"下载文件指令格式如下：",[83,122729,122731],{"className":120791,"code":122730,"language":120793,"meta":120794,"style":10},"scp 账号@ip:路径 本地文件夹路径\n",[89,122732,122733],{"__ignoreMap":10},[92,122734,122735],{"class":94,"line":95},[92,122736,122730],{},[38,122738,122739],{},"下载文件夹指令格式如下：",[83,122741,122743],{"className":120791,"code":122742,"language":120793,"meta":120794,"style":10},"scp -r 账号@ip:路径 本地文件夹路径\n",[89,122744,122745],{"__ignoreMap":10},[92,122746,122747],{"class":94,"line":95},[92,122748,122742],{},[38,122750,122751],{},[252,122752,122753],{},"优化",[38,122755,122756],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[46,122758,122759,122762],{},[49,122760,122761],{},"本地生成密钥对；",[49,122763,122764],{},"将公钥上传至远程主机。",[38,122766,122767],{},[252,122768,122769],{},"1.生成密钥对",[38,122771,122772],{},"本地客户端生成公私钥：（一路回车默认即可）",[83,122774,122776],{"className":120791,"code":122775,"language":120793,"meta":120794,"style":10},"ssh-keygen\n",[89,122777,122778],{"__ignoreMap":10},[92,122779,122780],{"class":94,"line":95},[92,122781,122775],{},[38,122783,122784],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[46,122786,122787,122790],{},[49,122788,122789],{},"id_rsa （私钥）；",[49,122791,122792],{},"id_rsa.pub (公钥)。",[38,122794,122795],{},[252,122796,122797],{},"2.公钥上传",[38,122799,122800],{},"上传指令如下：",[83,122802,122804],{"className":120791,"code":122803,"language":120793,"meta":120794,"style":10},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[89,122805,122806],{"__ignoreMap":10},[92,122807,122808],{"class":94,"line":95},[92,122809,122803],{},[38,122811,122812],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[38,122814,122815],{},"以后再远程登录就无需录入密码了。",[63,122817,122819],{"id":122818},"_723-使用vscode优化","7.2.3 使用VScode优化",[38,122821,122822],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[38,122824,122825],{},[252,122826,122827],{},"1.准备工作",[38,122829,122830],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[38,122832,122833],{},[252,122834,122835],{},"2.为VScode安装远程开发插件",[38,122837,122838,122839,122842,122843,122846,122847,28366],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[89,122840,122841],{},"扩展：商店","的搜索栏输入",[89,122844,122845],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[89,122848,122849],{},"安装",[38,122851,122852],{},[1441,122853],{"alt":10,"src":122854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[38,122856,122857],{},[252,122858,122859],{},"3.配置远程连接",[38,122861,122862,122863,122866,122867,122870],{},"步骤1：使用快捷键",[89,122864,122865],{},"ctrl + shift + p","打开命令输入窗口，并输入",[89,122868,122869],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[38,122872,122873],{},[1441,122874],{"alt":10,"src":122875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[38,122877,122878,122879,28366],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[89,122880,122881],{},"Add New SSH Host",[38,122883,122884],{},[1441,122885],{"alt":10,"src":122886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[38,122888,122889,122890,122893,122894,122897,122898,122901],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[89,122891,122892],{},"ssh +X ubuntu@192.168.43.164","，其中，",[89,122895,122896],{},"ubuntu","需要替换为你的登录用户名，",[89,122899,122900],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[38,122903,122904],{},[1441,122905],{"alt":10,"src":122906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[38,122908,122909],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[38,122911,122912],{},[1441,122913],{"alt":10,"src":122914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[38,122916,122917],{},[1441,122918],{"alt":10,"src":122919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[38,122921,122922],{},[252,122923,122924],{},"4.使用",[38,122926,122927,122928,122866,122930,122932],{},"步骤1：继续使用快捷键",[89,122929,122865],{},[89,122931,122869],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[38,122934,122935],{},[1441,122936],{"alt":10,"src":122937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[38,122939,122940,122941,122944],{},"或者，也可以点击侧边栏的",[89,122942,122943],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[38,122946,122947],{},[1441,122948],{"alt":10,"src":122949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[38,122951,122952,122953,122956,122957,122960],{},"步骤2：选择菜单栏的",[89,122954,122955],{},"文件","下的",[89,122958,122959],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[38,122962,122963],{},[1441,122964],{"alt":10,"src":122965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[38,122967,122968],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[33,122970,122972],{"id":122971},"_73-远程桌面","7.3 远程桌面",[38,122974,122975],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[38,122977,122978],{},"我们选择使用VNC来看。",[46,122980,122981],{},[49,122982,122983],{},"安装VNC服务器：",[38,122985,122986],{},"这里以TigerVNC为例进行安装：",[83,122988,122990],{"className":117271,"code":122989,"language":117273,"meta":10,"style":10},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[89,122991,122992],{"__ignoreMap":10},[92,122993,122994,122996,122998,123000,123003],{"class":94,"line":95},[92,122995,24557],{"class":1942},[92,122997,117292],{"class":207},[92,122999,23814],{"class":207},[92,123001,123002],{"class":207}," tigervnc-standalone-server",[92,123004,123005],{"class":207}," tigervnc-common\n",[46,123007,123008],{"start":11},[49,123009,123010],{},"设置VNC密码：",[38,123012,123013],{},"为VNC用户设置密码，运行以下命令：",[83,123015,123017],{"className":117271,"code":123016,"language":117273,"meta":10,"style":10},"vncpasswd\n",[89,123018,123019],{"__ignoreMap":10},[92,123020,123021],{"class":94,"line":95},[92,123022,123016],{"class":1942},[46,123024,123025],{"start":1158},[49,123026,123027],{},"配置VNC启动脚本:",[38,123029,123030],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[83,123032,123034],{"className":117271,"code":123033,"language":117273,"meta":10,"style":10},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[89,123035,123036,123045],{"__ignoreMap":10},[92,123037,123038,123040,123042],{"class":94,"line":95},[92,123039,101241],{"class":1942},[92,123041,29197],{"class":151},[92,123043,123044],{"class":207}," ~\u002F.vnc\n",[92,123046,123047,123050],{"class":94,"line":11},[92,123048,123049],{"class":1942},"nano",[92,123051,123052],{"class":207}," ~\u002F.vnc\u002Fxstartup\n",[38,123054,123055],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[83,123057,123059],{"className":117271,"code":123058,"language":117273,"meta":10,"style":10},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[89,123060,123061,123066,123074,123081],{"__ignoreMap":10},[92,123062,123063],{"class":94,"line":95},[92,123064,123065],{"class":161},"#!\u002Fbin\u002Fsh\n",[92,123067,123068,123071],{"class":94,"line":11},[92,123069,123070],{"class":151},"unset",[92,123072,123073],{"class":207}," SESSION_MANAGER\n",[92,123075,123076,123078],{"class":94,"line":1158},[92,123077,123070],{"class":151},[92,123079,123080],{"class":207}," DBUS_SESSION_BUS_ADDRESS\n",[92,123082,123083],{"class":94,"line":1173},[92,123084,123085],{"class":1942},"gnome-session\n",[38,123087,123088],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[46,123090,123091],{"start":1173},[49,123092,123093],{},"给予执行权限：",[38,123095,123096],{},"为xstartup文件设置执行权限：",[83,123098,123100],{"className":117271,"code":123099,"language":117273,"meta":10,"style":10},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[89,123101,123102],{"__ignoreMap":10},[92,123103,123104,123106,123109],{"class":94,"line":95},[92,123105,24592],{"class":1942},[92,123107,123108],{"class":207}," +x",[92,123110,123052],{"class":207},[46,123112,123113],{"start":1179},[49,123114,123115],{},"启动VNC服务器：",[83,123117,123119],{"className":117271,"code":123118,"language":117273,"meta":10,"style":10},"vncserver -geometry 1920x1080 -localhost=0\n",[89,123120,123121],{"__ignoreMap":10},[92,123122,123123,123126,123129,123132],{"class":94,"line":95},[92,123124,123125],{"class":1942},"vncserver",[92,123127,123128],{"class":151}," -geometry",[92,123130,123131],{"class":207}," 1920x1080",[92,123133,123134],{"class":151}," -localhost=0\n",[38,123136,123137],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[38,123139,123140],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[46,123142,123143],{"start":1193},[49,123144,123145],{},"查看已开启的VNC服务器：",[83,123147,123149],{"className":117271,"code":123148,"language":117273,"meta":10,"style":10},"vncserver -list\n",[89,123150,123151],{"__ignoreMap":10},[92,123152,123153,123155],{"class":94,"line":95},[92,123154,123125],{"class":1942},[92,123156,123157],{"class":151}," -list\n",[38,123159,123160],{},[1441,123161],{"alt":10,"src":123162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[46,123164,123165],{"start":1199},[49,123166,123167],{},"连接到VNC服务器：",[38,123169,123170],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[46,123172,123173],{"start":1290},[49,123174,123175],{},"停止VNC服务器：",[38,123177,123178],{},"如果需要停止VNC服务器，可以使用以下命令：",[83,123180,123182],{"className":117271,"code":123181,"language":117273,"meta":10,"style":10},"vncserver -kill :1\n",[89,123183,123184],{"__ignoreMap":10},[92,123185,123186,123188,123191],{"class":94,"line":95},[92,123187,123125],{"class":1942},[92,123189,123190],{"class":151}," -kill",[92,123192,123193],{"class":207}," :1\n",[38,123195,123196],{},"将:1替换为你实际使用的显示编号。",[38,123198,123199],{},[1441,123200],{"alt":10,"src":123201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[38,123203,123204],{},[1441,123205],{"alt":10,"src":123206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[33,123208,123210],{"id":123209},"_74-usb端口设置","7.4 USB端口设置",[38,123212,123213],{},[252,123214,123215],{},"首先先配置好权限",[83,123217,123219],{"className":117271,"code":123218,"language":117273,"meta":10,"style":10},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[89,123220,123221,123226,123239,123246,123251],{"__ignoreMap":10},[92,123222,123223],{"class":94,"line":95},[92,123224,123225],{"class":161},"# 将用户权限提高\n",[92,123227,123228,123230,123232,123234,123237],{"class":94,"line":11},[92,123229,24557],{"class":1942},[92,123231,26555],{"class":207},[92,123233,26558],{"class":151},[92,123235,123236],{"class":207}," dialout",[92,123238,26563],{"class":102},[92,123240,123241,123243],{"class":94,"line":1158},[92,123242,26582],{"class":1942},[92,123244,123245],{"class":207}," dialout\n",[92,123247,123248],{"class":94,"line":1173},[92,123249,123250],{"class":161},"# 查看下面命令是否输出dialout（若输出才正常）\n",[92,123252,123253],{"class":94,"line":1179},[92,123254,123255],{"class":1942},"groups\n",[38,123257,123258],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[63,123260,123262],{"id":123261},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[38,123264,123265,123268],{},[252,123266,123267],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[38,123270,123271,123274],{},[252,123272,123273],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[38,123276,123277],{},[252,123278,123279],{},"流程如下：",[38,123281,123282],{},"（1）.查找设备idVendor和idProduct",[38,123284,123285,123286,123289],{},"接入两个USB设备，在终端调用指令",[89,123287,123288],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[38,123291,123292],{},[1441,123293],{"alt":10,"src":123294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[38,123296,123297,123298,123301],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[89,123299,123300],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[38,123303,123304],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[38,123306,123307],{},"（2）.编写映射规则",[38,123309,123310,123311,123314],{},"在",[89,123312,123313],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[83,123316,123318],{"className":117271,"code":123317,"language":117273,"meta":10,"style":10},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[89,123319,123320],{"__ignoreMap":10},[92,123321,123322,123324,123326],{"class":94,"line":95},[92,123323,24557],{"class":1942},[92,123325,118558],{"class":207},[92,123327,123328],{"class":207}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[38,123330,123331],{},"输入如下内容：",[83,123333,123335],{"className":117271,"code":123334,"language":117273,"meta":10,"style":10},"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",[89,123336,123337,123367],{"__ignoreMap":10},[92,123338,123339,123342,123344,123347,123350,123353,123356,123358,123361,123364],{"class":94,"line":95},[92,123340,123341],{"class":102},"KERNEL",[92,123343,148],{"class":98},[92,123345,123346],{"class":207},"=\"ttyUSB*\",",[92,123348,123349],{"class":1942}," ATTRS",[92,123351,123352],{"class":207},"{idVendor}==",[92,123354,123355],{"class":1942},"\"10c4\"",[92,123357,481],{"class":1942},[92,123359,123360],{"class":207}," ATTRS{idProduct}==\"ea60\",",[92,123362,123363],{"class":207}," MODE:=\"0777\",",[92,123365,123366],{"class":207}," SYMLINK+=\"mylidar\"\n",[92,123368,123369,123371,123373,123375,123377,123379,123382,123384,123387,123389],{"class":94,"line":11},[92,123370,123341],{"class":102},[92,123372,148],{"class":98},[92,123374,123346],{"class":207},[92,123376,123349],{"class":1942},[92,123378,123352],{"class":207},[92,123380,123381],{"class":1942},"\"1a86\"",[92,123383,481],{"class":1942},[92,123385,123386],{"class":207}," ATTRS{idProduct}==\"7523\",",[92,123388,123363],{"class":207},[92,123390,123391],{"class":207}," SYMLINK+=\"mycar\"\n",[38,123393,123394],{},"代码解释：",[1110,123396,123397,123400,123403,123406],{},[49,123398,123399],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[49,123401,123402],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[49,123404,123405],{},"SYMLINK是符号连接，即绑定的别名；",[49,123407,123408],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[38,123410,123411,123412,123415,123418],{},"***小提示：***",[23533,123413,123414],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[89,123416,123417],{},"\u002Fetc\u002Fudev\u002Frule.d",[23533,123419,123420],{},"目录即可。",[38,123422,123423],{},"表格 还在加载中，请等待加载完成后再尝试复制",[38,123425,123426],{},"（3）.使规则生效",[38,123428,123429],{},"在终端下输入如下指令：",[83,123431,123433],{"className":117271,"code":123432,"language":117273,"meta":10,"style":10},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[89,123434,123435,123440,123452,123463,123467,123472,123485],{"__ignoreMap":10},[92,123436,123437],{"class":94,"line":95},[92,123438,123439],{"class":161},"# Ubuntu用下方命令\n",[92,123441,123442,123444,123446,123449],{"class":94,"line":11},[92,123443,24557],{"class":1942},[92,123445,120023],{"class":207},[92,123447,123448],{"class":207}," udev",[92,123450,123451],{"class":207}," reload\n",[92,123453,123454,123456,123458,123460],{"class":94,"line":1158},[92,123455,24557],{"class":1942},[92,123457,120023],{"class":207},[92,123459,123448],{"class":207},[92,123461,123462],{"class":207}," restart\n",[92,123464,123465],{"class":94,"line":1173},[92,123466,2379],{"emptyLinePlaceholder":17},[92,123468,123469],{"class":94,"line":1179},[92,123470,123471],{"class":161},"#Fedora用下方命令\n",[92,123473,123474,123476,123479,123482],{"class":94,"line":1193},[92,123475,24557],{"class":1942},[92,123477,123478],{"class":207}," udevadm",[92,123480,123481],{"class":207}," control",[92,123483,123484],{"class":151}," --reload\n",[92,123486,123487,123489,123491],{"class":94,"line":1199},[92,123488,24557],{"class":1942},[92,123490,123478],{"class":207},[92,123492,123493],{"class":207}," trigger\n",[38,123495,123496],{},"再重新插拔设备即可。",[38,123498,123499],{},"（4）.测试",[38,123501,123502],{},"终端下输入如下指令",[83,123504,123506],{"className":117271,"code":123505,"language":117273,"meta":10,"style":10},"ll \u002Fdev | grep ttyUSB\n",[89,123507,123508],{"__ignoreMap":10},[92,123509,123510,123513,123516,123518,123520],{"class":94,"line":95},[92,123511,123512],{"class":1942},"ll",[92,123514,123515],{"class":207}," \u002Fdev",[92,123517,25090],{"class":98},[92,123519,30217],{"class":1942},[92,123521,123522],{"class":207}," ttyUSB\n",[38,123524,123525],{},"运行结果如下：",[38,123527,123528],{},[1441,123529],{"alt":10,"src":123530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[38,123532,123533,123534,123537],{},"也可以多次插拔USB设备，会发现设备端口",[89,123535,123536],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[38,123539,123540],{},[252,123541,117939],{},[38,123543,123544],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[63,123546,123548],{"id":123547},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[38,123550,123551,123553],{},[252,123552,123267],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[38,123555,123556,123558],{},[252,123557,123273],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[38,123560,123561],{},[252,123562,123279],{},[38,123564,123565],{},"（1）.查看所连接的主机USB接口的KERNELS",[38,123567,123568],{},"调用如下指令查看第一台雷达的USB信息：",[83,123570,123572],{"className":117271,"code":123571,"language":117273,"meta":10,"style":10},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[89,123573,123574,123594],{"__ignoreMap":10},[92,123575,123576,123579,123581,123584,123587,123589,123591],{"class":94,"line":95},[92,123577,123578],{"class":1942},"udevadm",[92,123580,69801],{"class":207},[92,123582,123583],{"class":151}," --attribute-walk",[92,123585,123586],{"class":151}," --name=\u002Fdev\u002FttyUSB0",[92,123588,25090],{"class":98},[92,123590,30217],{"class":1942},[92,123592,123593],{"class":207}," KERNELS\n",[92,123595,123596,123598,123600,123602,123605,123607,123609],{"class":94,"line":11},[92,123597,123578],{"class":1942},[92,123599,69801],{"class":207},[92,123601,123583],{"class":151},[92,123603,123604],{"class":151}," --name=\u002Fdev\u002FttyACM0",[92,123606,25090],{"class":98},[92,123608,30217],{"class":1942},[92,123610,123593],{"class":207},[38,123612,123613],{},[1441,123614],{"alt":10,"src":123615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[38,123617,123618],{},"调用如下指令查看第二台雷达的USB信息：",[83,123620,123622],{"className":117271,"code":123621,"language":117273,"meta":10,"style":10},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[89,123623,123624],{"__ignoreMap":10},[92,123625,123626,123628,123630,123632,123635,123637,123639],{"class":94,"line":95},[92,123627,123578],{"class":1942},[92,123629,69801],{"class":207},[92,123631,123583],{"class":151},[92,123633,123634],{"class":151}," --name=\u002Fdev\u002FttyUSB1",[92,123636,25090],{"class":98},[92,123638,30217],{"class":1942},[92,123640,123593],{"class":207},[38,123642,123643,123644,123647,123648,123651,123652,123655],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[89,123645,123646],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[89,123649,123650],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[252,123653,123654],{},"唯一性标识","”。",[38,123657,123307],{},[38,123659,123310,123660,123662],{},[89,123661,123313],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[83,123664,123665],{"className":117271,"code":123317,"language":117273,"meta":10,"style":10},[89,123666,123667],{"__ignoreMap":10},[92,123668,123669,123671,123673],{"class":94,"line":95},[92,123670,24557],{"class":1942},[92,123672,118558],{"class":207},[92,123674,123328],{"class":207},[83,123676,123678],{"className":117271,"code":123677,"language":117273,"meta":10,"style":10},"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",[89,123679,123680,123709],{"__ignoreMap":10},[92,123681,123682,123684,123686,123688,123691,123693,123696,123699,123701,123704,123706],{"class":94,"line":95},[92,123683,123341],{"class":102},[92,123685,148],{"class":98},[92,123687,123346],{"class":207},[92,123689,123690],{"class":102}," KERNELS",[92,123692,148],{"class":98},[92,123694,123695],{"class":207},"=\"1-1.3:1.0\",",[92,123697,123698],{"class":1942}," MODE:",[92,123700,148],{"class":207},[92,123702,123703],{"class":1942},"\"0777\"",[92,123705,481],{"class":1942},[92,123707,123708],{"class":207}," SYMLINK+=\"rplidar_front\"\n",[92,123710,123711,123713,123715,123717,123719,123721,123724,123726,123728,123730,123732],{"class":94,"line":11},[92,123712,123341],{"class":102},[92,123714,148],{"class":98},[92,123716,123346],{"class":207},[92,123718,123690],{"class":102},[92,123720,148],{"class":98},[92,123722,123723],{"class":207},"=\"1-1.4:1.0\",",[92,123725,123698],{"class":1942},[92,123727,148],{"class":207},[92,123729,123703],{"class":1942},[92,123731,481],{"class":1942},[92,123733,123734],{"class":207}," SYMLINK+=\"rplidar_back\"\n",[38,123736,123426],{},[38,123738,123429],{},[83,123740,123741],{"className":117271,"code":123432,"language":117273,"meta":10,"style":10},[89,123742,123743,123747,123757,123767,123771,123775,123785],{"__ignoreMap":10},[92,123744,123745],{"class":94,"line":95},[92,123746,123439],{"class":161},[92,123748,123749,123751,123753,123755],{"class":94,"line":11},[92,123750,24557],{"class":1942},[92,123752,120023],{"class":207},[92,123754,123448],{"class":207},[92,123756,123451],{"class":207},[92,123758,123759,123761,123763,123765],{"class":94,"line":1158},[92,123760,24557],{"class":1942},[92,123762,120023],{"class":207},[92,123764,123448],{"class":207},[92,123766,123462],{"class":207},[92,123768,123769],{"class":94,"line":1173},[92,123770,2379],{"emptyLinePlaceholder":17},[92,123772,123773],{"class":94,"line":1179},[92,123774,123471],{"class":161},[92,123776,123777,123779,123781,123783],{"class":94,"line":1193},[92,123778,24557],{"class":1942},[92,123780,123478],{"class":207},[92,123782,123481],{"class":207},[92,123784,123484],{"class":151},[92,123786,123787,123789,123791],{"class":94,"line":1199},[92,123788,24557],{"class":1942},[92,123790,123478],{"class":207},[92,123792,123493],{"class":207},[38,123794,123496],{},[38,123796,123499],{},[38,123798,123502,123799,123802],{},[89,123800,123801],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[38,123804,123805],{},[1441,123806],{"alt":10,"src":123807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[38,123809,123810],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[38,123812,123813,123815],{},[252,123814,117939],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[63,123817,123819],{"id":123818},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[38,123821,123822],{},"（1）.查看所连接的主机USB接口的信息",[83,123824,123826],{"className":117271,"code":123825,"language":117273,"meta":10,"style":10},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[89,123827,123828,123858],{"__ignoreMap":10},[92,123829,123830,123832,123834,123837,123839,123841,123843,123845,123848,123851,123853,123856],{"class":94,"line":95},[92,123831,123578],{"class":1942},[92,123833,69801],{"class":207},[92,123835,123836],{"class":151}," -a",[92,123838,29197],{"class":151},[92,123840,28403],{"class":102},[92,123842,123578],{"class":1942},[92,123844,69801],{"class":207},[92,123846,123847],{"class":151}," -q",[92,123849,123850],{"class":207}," path",[92,123852,25096],{"class":151},[92,123854,123855],{"class":207}," \u002Fdev\u002FttyACM0",[92,123857,109],{"class":102},[92,123859,123860,123862,123864,123866,123868,123870,123872,123874,123876,123878,123880,123883],{"class":94,"line":11},[92,123861,123578],{"class":1942},[92,123863,69801],{"class":207},[92,123865,123836],{"class":151},[92,123867,29197],{"class":151},[92,123869,28403],{"class":102},[92,123871,123578],{"class":1942},[92,123873,69801],{"class":207},[92,123875,123847],{"class":151},[92,123877,123850],{"class":207},[92,123879,25096],{"class":151},[92,123881,123882],{"class":207}," \u002Fdev\u002FttyUSB0",[92,123884,109],{"class":102},[38,123886,123887],{},[1441,123888],{"alt":10,"src":123889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[38,123891,123892],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[38,123894,123307],{},[38,123896,123310,123897,123662],{},[89,123898,123313],{},[83,123900,123901],{"className":117271,"code":123317,"language":117273,"meta":10,"style":10},[89,123902,123903],{"__ignoreMap":10},[92,123904,123905,123907,123909],{"class":94,"line":95},[92,123906,24557],{"class":1942},[92,123908,118558],{"class":207},[92,123910,123328],{"class":207},[83,123912,123914],{"className":117271,"code":123913,"language":117273,"meta":10,"style":10},"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",[89,123915,123916,123944,123970],{"__ignoreMap":10},[92,123917,123918,123920,123922,123925,123927,123929,123931,123933,123936,123939,123941],{"class":94,"line":95},[92,123919,123341],{"class":102},[92,123921,148],{"class":98},[92,123923,123924],{"class":207},"=\"ttyACM*\",",[92,123926,123349],{"class":1942},[92,123928,123352],{"class":207},[92,123930,123381],{"class":1942},[92,123932,481],{"class":1942},[92,123934,123935],{"class":207}," ATTRS{idProduct}==\"55d4\",",[92,123937,123938],{"class":207}," ATTRS{serial}==\"0001\",",[92,123940,123363],{"class":207},[92,123942,123943],{"class":207}," SYMLINK+=\"ttyACM_MCU\"\n",[92,123945,123946,123948,123950,123952,123954,123956,123958,123960,123962,123965,123967],{"class":94,"line":11},[92,123947,123341],{"class":102},[92,123949,148],{"class":98},[92,123951,123924],{"class":207},[92,123953,123349],{"class":1942},[92,123955,123352],{"class":207},[92,123957,123381],{"class":1942},[92,123959,481],{"class":1942},[92,123961,123935],{"class":207},[92,123963,123964],{"class":207}," ATTRS{serial}==\"0002\",",[92,123966,123363],{"class":207},[92,123968,123969],{"class":207}," SYMLINK+=\"ttyACM_Lidar\"\n",[92,123971,123972,123974,123976,123978,123980,123982,123984,123986,123988,123990],{"class":94,"line":1158},[92,123973,123341],{"class":102},[92,123975,148],{"class":98},[92,123977,123346],{"class":207},[92,123979,123349],{"class":1942},[92,123981,123352],{"class":207},[92,123983,123381],{"class":1942},[92,123985,481],{"class":1942},[92,123987,123386],{"class":207},[92,123989,123363],{"class":207},[92,123991,123992],{"class":207}," SYMLINK+=\"ttyUSB_IMU\"\n",[38,123994,123426],{},[38,123996,123429],{},[83,123998,123999],{"className":117271,"code":123432,"language":117273,"meta":10,"style":10},[89,124000,124001,124005,124015,124025,124029,124033,124043],{"__ignoreMap":10},[92,124002,124003],{"class":94,"line":95},[92,124004,123439],{"class":161},[92,124006,124007,124009,124011,124013],{"class":94,"line":11},[92,124008,24557],{"class":1942},[92,124010,120023],{"class":207},[92,124012,123448],{"class":207},[92,124014,123451],{"class":207},[92,124016,124017,124019,124021,124023],{"class":94,"line":1158},[92,124018,24557],{"class":1942},[92,124020,120023],{"class":207},[92,124022,123448],{"class":207},[92,124024,123462],{"class":207},[92,124026,124027],{"class":94,"line":1173},[92,124028,2379],{"emptyLinePlaceholder":17},[92,124030,124031],{"class":94,"line":1179},[92,124032,123471],{"class":161},[92,124034,124035,124037,124039,124041],{"class":94,"line":1193},[92,124036,24557],{"class":1942},[92,124038,123478],{"class":207},[92,124040,123481],{"class":207},[92,124042,123484],{"class":151},[92,124044,124045,124047,124049],{"class":94,"line":1199},[92,124046,24557],{"class":1942},[92,124048,123478],{"class":207},[92,124050,123493],{"class":207},[38,124052,124053,124054],{},"再重新插拔设备即可，或者 ",[252,124055,124056],{},"直接重启系统。",[38,124058,123499],{},[38,124060,123502,124061,123802],{},[89,124062,123801],{},[38,124064,124065],{},[1441,124066],{"alt":10,"src":124067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[38,124069,123810],{},[38,124071,124072,124074],{},[252,124073,117939],{}," 一些设备可能没有串口号等。",[63,124076,124078],{"id":124077},"_744-其他注意事项","7.4.4 其他注意事项",[38,124080,124081,124082,124084,124085,124088,124089,18390,124092,124095,124096,124098],{},"并非所有的USB设备端口号都是",[89,124083,123536],{},"的格式，比如Arduino的端口号可能是",[89,124086,124087],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[89,124090,124091],{},"videon",[89,124093,124094],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[89,124097,124091],{},"端口，绑定时需要关联的也是该接口。",[38,124100,124101,124102,124105,124106,124109,124110,124112,124113,124116,124117,124120,124121,124124,124125,124124,124128,124124,124131,28366],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[89,124103,124104],{},"KERNEL==\"ttyUSB*\"","修改为",[89,124107,124108],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[89,124111,124104],{},"修改为类似于",[89,124114,124115],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[89,124118,124119],{},"video[0,2,4,6]","表示可以绑定的端口为",[89,124122,124123],{},"video0","或",[89,124126,124127],{},"video2",[89,124129,124130],{},"video4",[89,124132,124133],{},"video6",[33,124135,124137],{"id":124136},"_75-挂载内网网页","7.5 挂载内网网页",[38,124139,124140],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[38,124142,124143],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[38,124145,124146],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[38,124148,124149,124150],{},"Termux 下载地址（F-Droid）：",[341,124151,124152],{"href":124152,"rel":124153},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23845],[38,124155,124156],{},"首先打开app后，先更新软件缓存：",[83,124158,124160],{"className":117271,"code":124159,"language":117273,"meta":10,"style":10},"pkg update\n",[89,124161,124162],{"__ignoreMap":10},[92,124163,124164,124167],{"class":94,"line":95},[92,124165,124166],{"class":1942},"pkg",[92,124168,26223],{"class":207},[38,124170,124171],{},"然后换源",[83,124173,124175],{"className":117271,"code":124174,"language":117273,"meta":10,"style":10},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[89,124176,124177],{"__ignoreMap":10},[92,124178,124179,124181,124184],{"class":94,"line":95},[92,124180,123049],{"class":1942},[92,124182,124183],{"class":102}," $PREFIX",[92,124185,124186],{"class":207},"\u002Fetc\u002Fapt\u002Fsources.list\n",[38,124188,124189],{},"将该文件内容替换为下面：",[83,124191,124193],{"className":117271,"code":124192,"language":117273,"meta":10,"style":10},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[89,124194,124195],{"__ignoreMap":10},[92,124196,124197,124200,124203,124206],{"class":94,"line":95},[92,124198,124199],{"class":1942},"deb",[92,124201,124202],{"class":207}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[92,124204,124205],{"class":207}," stable",[92,124207,124208],{"class":207}," main\n",[1110,124210,124211,124238],{},[49,124212,124213,124214,124216,124217],{},"如果你使用的是",[89,124215,123049],{},"编辑器：",[1110,124218,124219,124226,124232],{},[49,124220,124221,124222,124225],{},"按 ",[89,124223,124224],{},"Ctrl+O"," 保存文件。",[49,124227,124221,124228,124231],{},[89,124229,124230],{},"Enter"," 确认文件名。",[49,124233,124221,124234,124237],{},[89,124235,124236],{},"Ctrl+X"," 退出编辑器。",[49,124239,124213,124240,124216,124243],{},[89,124241,124242],{},"vim",[1110,124244,124245,124251],{},[49,124246,124221,124247,124250],{},[89,124248,124249],{},"Esc"," 退出编辑模式。",[49,124252,124253,124254,124256],{},"输入 ",[89,124255,119196],{}," 保存并退出。",[38,124258,124259],{},"接下来重新更新软件源：",[83,124261,124263],{"className":117271,"code":124262,"language":117273,"meta":10,"style":10},"pkg update && pkg upgrade\n",[89,124264,124265],{"__ignoreMap":10},[92,124266,124267,124269,124271,124273,124275],{"class":94,"line":95},[92,124268,124166],{"class":1942},[92,124270,117322],{"class":207},[92,124272,26171],{"class":102},[92,124274,124166],{"class":1942},[92,124276,117308],{"class":207},[38,124278,124279],{},"安装python：",[83,124281,124283],{"className":117271,"code":124282,"language":117273,"meta":10,"style":10},"pkg install python\n",[89,124284,124285],{"__ignoreMap":10},[92,124286,124287,124289,124291],{"class":94,"line":95},[92,124288,124166],{"class":1942},[92,124290,23814],{"class":207},[92,124292,124293],{"class":207}," python\n",[38,124295,124296,26454],{},[252,124297,124298],{},"通过Termux访问设备存储",[38,124300,124301],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[83,124303,124305],{"className":117271,"code":124304,"language":117273,"meta":10,"style":10},"termux-setup-storage\n",[89,124306,124307],{"__ignoreMap":10},[92,124308,124309],{"class":94,"line":95},[92,124310,124304],{"class":1942},[46,124312,124313],{},[49,124314,124315,26454,124318],{},[252,124316,124317],{},"进入HTML文件所在的目录",[46,124319,124320],{},[49,124321,124322,124323,124325],{},"使用",[89,124324,101251],{},"命令进入HTML文件所在的目录：",[83,124327,124329],{"className":117271,"code":124328,"language":117273,"meta":10,"style":10},"cd ~\u002Fyour_html_folder\n",[89,124330,124331],{"__ignoreMap":10},[92,124332,124333,124335],{"class":94,"line":95},[92,124334,101251],{"class":151},[92,124336,124337],{"class":207}," ~\u002Fyour_html_folder\n",[46,124339,124340],{"start":11},[49,124341,124342,26454,124345,124350,124367],{},[252,124343,124344],{},"启动Python HTTP服务器",[46,124346,124347],{},[49,124348,124349],{},"运行以下命令启动一个简单的HTTP服务器：",[83,124351,124353],{"className":117271,"code":124352,"language":117273,"meta":10,"style":10},"python -m http.server 8000\n",[89,124354,124355],{"__ignoreMap":10},[92,124356,124357,124359,124361,124364],{"class":94,"line":95},[92,124358,30361],{"class":1942},[92,124360,100857],{"class":151},[92,124362,124363],{"class":207}," http.server",[92,124365,124366],{"class":151}," 8000\n",[46,124368,124369],{"start":1158},[49,124370,124371,124372,124375],{},"这会在端口",[89,124373,124374],{},"8000","上启动一个Web服务器。",[1110,124377,124378],{},[49,124379,124380],{},"启动服务器后，Termux会显示日志信息，例如：",[83,124382,124384],{"className":120791,"code":124383,"language":120793,"meta":120794,"style":10},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[89,124385,124386],{"__ignoreMap":10},[92,124387,124388],{"class":94,"line":95},[92,124389,124383],{},[1110,124391,124392],{},[49,124393,124394],{},"这表示服务器已成功启动。",[38,124396,124397],{},[252,124398,124399],{},"在浏览器中访问HTML文件",[46,124401,124402],{},[49,124403,124404,26454,124407,124412],{},[252,124405,124406],{},"在同一设备上访问",[46,124408,124409],{},[49,124410,124411],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[83,124413,124416],{"className":124414,"code":124415,"language":71644,"meta":10,"style":10},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[89,124417,124418],{"__ignoreMap":10},[92,124419,124420,124423],{"class":94,"line":95},[92,124421,124422],{"class":102},"http:",[92,124424,124425],{"class":161},"\u002F\u002Flocalhost:8000\n",[1110,124427,124428],{},[49,124429,124430,124431,124434],{},"如果HTML文件中有",[89,124432,124433],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[33,124436,124438],{"id":124437},"_76-linux重点知识","7.6 Linux重点知识",[63,124440,124442],{"id":124441},"_761-关于点的说明","7.6.1 关于点的说明",[38,124444,124445],{},[1441,124446],{"alt":10,"src":124447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[38,124449,124450],{},"一点本目录，两点上目录",[63,124452,124454],{"id":124453},"_762-目录","7.6.2 目录",[21978,124456,124458],{"id":124457},"_7621-系统启动必须","7.6.2.1 系统启动必须",[38,124460,124461],{},[252,124462,124463],{},"\u002Fboot:",[38,124465,124466],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[38,124468,124469],{},[252,124470,124471],{},"\u002Fetc:",[38,124473,124474],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[38,124476,124477],{},[252,124478,124479],{},"\u002Flib：",[38,124481,124482],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[38,124484,124485],{},[252,124486,124487],{},"\u002Fsys:",[38,124489,124490],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21978,124492,124494],{"id":124493},"_7622-指令集合","7.6.2.2 指令集合",[38,124496,124497],{},[252,124498,124499],{},"\u002Fbin:",[38,124501,124502],{},"为二进制文件的缩写，存放最经常使用的命令",[38,124504,124505],{},[252,124506,124507],{},"\u002Fsbin:",[38,124509,124510],{},"只有系统管理员才能使用的程序和指令",[21978,124512,124514],{"id":124513},"_7623-外部文件管理","7.6.2.3 外部文件管理",[38,124516,124517],{},[252,124518,124519],{},"\u002Fdev:",[38,124521,124522],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[38,124524,124525],{},[252,124526,124527],{},"\u002Fmedia:",[38,124529,124530],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[38,124532,124533],{},[252,124534,124535],{},"\u002Fmnt:",[38,124537,124538],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21978,124540,124542],{"id":124541},"_7624-临时文件","7.6.2.4 临时文件",[38,124544,124545],{},[252,124546,124547],{},"\u002Frun:",[38,124549,124550],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[38,124552,124553],{},[252,124554,124555],{},"\u002Flost+found:",[38,124557,124558],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[38,124560,124561],{},[252,124562,124563],{},"\u002Ftmp:",[38,124565,124566],{},"这个目录是用来存放一些临时文件的",[21978,124568,124570],{"id":124569},"_7625-账户","7.6.2.5 账户",[38,124572,124573],{},[252,124574,124575],{},"\u002Froot：",[38,124577,124578],{},"系统管理员的用户主目录",[38,124580,124581,26454],{},[252,124582,124583],{},"\u002Fhome",[38,124585,124586],{},"用户的主目录，以用户的账号命名的",[38,124588,124589,26454],{},[252,124590,124591],{},"\u002Fusr",[38,124593,124594],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[38,124596,124597],{},[252,124598,124599],{},"\u002Fusr\u002Fbin：",[38,124601,124602],{},"系统用户使用的应用程序与指令",[38,124604,124605],{},[252,124606,124607],{},"\u002Fusr\u002Fsbin：",[38,124609,124610],{},"超级用户使用的比较高级的管理程序和系统守护程序",[38,124612,124613],{},[252,124614,124615],{},"\u002Fusr\u002Fsrc：",[38,124617,124618],{},"内核源代码默认的放置目录",[21978,124620,124622],{"id":124621},"_7626-运行过程要用","7.6.2.6 运行过程要用",[38,124624,124625],{},[252,124626,124627],{},"\u002Fvar：",[38,124629,124630],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[38,124632,124633],{},[252,124634,124635],{},"\u002Fproc:",[38,124637,124638,124639,124642],{},"管理 ",[252,124640,124641],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21978,124644,124646],{"id":124645},"_7627-扩展用的","7.6.2.7 扩展用的",[38,124648,124649],{},[252,124650,124651],{},"\u002Fopt:",[38,124653,124654],{},"默认是空的，我们安装额外软件可以放在这个里面",[38,124656,124657],{},[252,124658,124659],{},"\u002Fsrv:",[38,124661,124662],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[63,124664,124666],{"id":124665},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[38,124668,124669],{},[1441,124670],{"alt":10,"src":124671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[38,124673,124674],{},"windows-->linux:",[38,124676,124677],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[38,124679,124680],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[38,124682,124683],{},"linux传输文件到windows",[38,124685,124686],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[63,124688,124690],{"id":124689},"_764-易忘知识","7.6.4 易忘知识",[38,124692,124693],{},"操作系统内核查看",[83,124695,124696],{"className":117271,"code":121265,"language":117273,"meta":10,"style":10},[89,124697,124698],{"__ignoreMap":10},[92,124699,124700,124702],{"class":94,"line":95},[92,124701,70184],{"class":1942},[92,124703,121274],{"class":151},[38,124705,124706],{},[1441,124707],{"alt":10,"src":124708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[38,124710,124711],{},[1441,124712],{"alt":10,"src":124713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[83,124715,124717],{"className":117271,"code":124716,"language":117273,"meta":10,"style":10},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[89,124718,124719,124731],{"__ignoreMap":10},[92,124720,124721,124723,124726,124729],{"class":94,"line":95},[92,124722,121482],{"class":1942},[92,124724,124725],{"class":207}," mvtest",[92,124727,124728],{"class":207}," mvtest2",[92,124730,2653],{"class":102},[92,124732,124733],{"class":94,"line":11},[92,124734,124735],{"class":1942},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[38,124737,124738],{},[1441,124739],{"alt":10,"src":124740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[38,124742,124743],{},[1441,124744],{"alt":10,"src":124745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[38,124747,124748,124749,124752],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[89,124750,124751],{},"du -a"," 可以快速查看磁盘使用细节。",[63,124754,124756],{"id":124755},"_765-vim","7.6.5 Vim",[38,124758,124759],{},[1441,124760],{"alt":10,"src":124761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[38,124763,124764],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[38,124766,124767],{},"一开始进去为命令模式，此时点击输入的字母为命令",[38,124769,124770],{},[252,124771,124772],{},"1.命令模式：",[38,124774,124775],{},"i 切换到输入模式，在光标当前位置开始输入文本",[38,124777,124778],{},"x 删除当前光标所在处的字符",[38,124780,124781],{},"：切换到底线命令模式，以在最底一行输入命令",[38,124783,124784],{},"a 进行插入模式，在光标下一个位置输入文本",[38,124786,124787],{},"o 在当前的下方插入一个新行，并进入插入模式",[38,124789,124790],{},"0 在当前行的上方插入一个新行，并进入插入模式",[38,124792,124793],{},"dd 剪切当前行",[38,124795,124796],{},"yy 复制当前行",[38,124798,124799],{},"p 粘贴剪贴板内容到光标下方",[38,124801,124802],{},"P 粘贴剪贴板内容到光标上方",[38,124804,124805],{},"u 撤销上一次操作",[38,124807,124808],{},"ctrl+r 重做上一次操作",[38,124810,124811,124813],{},[898,124812],{}," 保存文件",[38,124815,124816,124818],{},[748,124817],{}," 退出Vim编辑器",[38,124820,124821,124823],{},[748,124822],{},"! 强制退出Vim编辑器，不保存修改",[38,124825,124826],{},[252,124827,124828],{},"2.输入模式：",[38,124830,124831],{},[1441,124832],{"alt":10,"src":124833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[38,124835,124836],{},[252,124837,124838],{},"3.底线命令模式：",[38,124840,124841],{},[1441,124842],{"alt":10,"src":124843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[38,124845,124846],{},"按下esc可以退出底线命令模式",[63,124848,124850],{"id":124849},"_766-apt","7.6.6 apt",[38,124852,124853],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[63,124855,124857],{"id":124856},"_767-home与root的区别","7.6.7 home与root的区别",[38,124859,124860],{},[1441,124861],{"alt":10,"src":124862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[38,124864,124865],{},[1441,124866],{"alt":10,"src":124867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[38,124869,124870],{},[1441,124871],{"alt":10,"src":124872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[38,124874,124875],{},[1441,124876],{"alt":10,"src":124877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[63,124879,124881],{"id":124880},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[38,124883,124884],{},[341,124885,124886],{"href":124886,"rel":124887},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23845],[46,124889,124890,124893],{},[49,124891,124892],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[49,124894,124895],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[38,124897,124898],{},[1441,124899],{"alt":10,"src":124900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[38,124902,124903],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[38,124905,124906],{},[1441,124907],{"alt":10,"src":124908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[83,124910,124912],{"className":120791,"code":124911,"language":120793,"meta":120794,"style":10},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[89,124913,124914,124919],{"__ignoreMap":10},[92,124915,124916],{"class":94,"line":95},[92,124917,124918],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[92,124920,124921],{"class":94,"line":11},[92,124922,124923],{},".\u002Fpycharm.sh\n",[38,124925,124926],{},"3️⃣创建.desktop文件",[38,124928,124929],{},[252,124930,124931],{},"原理：",[1110,124933,124934,124944],{},[49,124935,124936,124937,124943],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[252,124938,124939,124942],{},[89,124940,124941],{},".desktop"," 文件"," 来识别应用。",[49,124945,124946,124948,124949],{},[89,124947,124941],{}," 文件相当于一个“应用注册表”，告诉系统：",[1110,124950,124951,124954,124957,124960,124963],{},[49,124952,124953],{},"应用名字（Name）",[49,124955,124956],{},"图标（Icon）",[49,124958,124959],{},"执行命令（Exec）",[49,124961,124962],{},"分类（Categories）",[49,124964,124965],{},"是否需要终端（Terminal）",[83,124967,124969],{"className":120791,"code":124968,"language":120793,"meta":120794,"style":10},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[89,124970,124971,124976],{"__ignoreMap":10},[92,124972,124973],{"class":94,"line":95},[92,124974,124975],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[92,124977,124978],{"class":94,"line":11},[92,124979,124980],{},"nano pycharm.desktop\n",[38,124982,124983],{},"nano是一个命令行下的编辑器，也可以使用vim",[83,124985,124987],{"className":120791,"code":124986,"language":120793,"meta":120794,"style":10},"[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",[89,124988,124989,124994,124999,125004,125009,125014,125019,125024,125029,125034],{"__ignoreMap":10},[92,124990,124991],{"class":94,"line":95},[92,124992,124993],{},"[Desktop Entry]\n",[92,124995,124996],{"class":94,"line":11},[92,124997,124998],{},"Version=1.0\n",[92,125000,125001],{"class":94,"line":1158},[92,125002,125003],{},"Type=Application\n",[92,125005,125006],{"class":94,"line":1173},[92,125007,125008],{},"Name=PyCharm\n",[92,125010,125011],{"class":94,"line":1179},[92,125012,125013],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[92,125015,125016],{"class":94,"line":1193},[92,125017,125018],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[92,125020,125021],{"class":94,"line":1199},[92,125022,125023],{},"Comment=JetBrains PyCharm IDE\n",[92,125025,125026],{"class":94,"line":1290},[92,125027,125028],{},"Categories=Development;IDE;\n",[92,125030,125031],{"class":94,"line":1296},[92,125032,125033],{},"Terminal=false\n",[92,125035,125036],{"class":94,"line":1308},[92,125037,125038],{},"StartupWMClass=jetbrains-pycharm\n",[1110,125040,125041,125047,125053,125059],{},[49,125042,125043,125046],{},[89,125044,125045],{},"Exec"," → 点击图标时执行的命令",[49,125048,125049,125052],{},[89,125050,125051],{},"Icon"," → 显示在菜单和桌面上的图标",[49,125054,125055,125058],{},[89,125056,125057],{},"Terminal=false"," → 不打开终端",[49,125060,125061,125064],{},[89,125062,125063],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125066,125067,125068],"blockquote",{},[38,125069,125070,125071,125073,125074],{},"可以理解成 ",[89,125072,124941],{}," 文件是 Linux 的 ",[252,125075,125076],{},"快捷方式配置文件",[38,125078,125079],{},"4️⃣设置可执行权限",[83,125081,125083],{"className":120791,"code":125082,"language":120793,"meta":120794,"style":10},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[89,125084,125085],{"__ignoreMap":10},[92,125086,125087],{"class":94,"line":95},[92,125088,125082],{},[38,125090,125091],{},"5️⃣桌面图标启动的话如下：",[83,125093,125095],{"className":120791,"code":125094,"language":120793,"meta":120794,"style":10},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[89,125096,125097,125102],{"__ignoreMap":10},[92,125098,125099],{"class":94,"line":95},[92,125100,125101],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[92,125103,125104],{"class":94,"line":11},[92,125105,125106],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[46,125108,125109],{"start":1158},[49,125110,125111],{},"下载Appimage文件实现软件的安装",[38,125113,125114],{},"1️⃣先下载appimage",[38,125116,125117],{},[341,125118,125119],{"href":125119,"rel":125120},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23845],[38,125122,125123],{},[1441,125124],{"alt":10,"src":125125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[38,125127,125128],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[38,125130,125131],{},[1441,125132],{"alt":10,"src":125133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[38,125135,125136],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[38,125138,125139],{},[1441,125140],{"alt":10,"src":125141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[38,125143,125144],{},[1441,125145],{"alt":10,"src":125146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[38,125148,125149,125150,125153],{},"3️⃣给他们放在",[89,125151,125152],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[38,125155,125156],{},"4️⃣给软件执行权限",[83,125158,125160],{"className":120791,"code":125159,"language":120793,"meta":120794,"style":10},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[89,125161,125162,125167],{"__ignoreMap":10},[92,125163,125164],{"class":94,"line":95},[92,125165,125166],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[92,125168,125169],{"class":94,"line":11},[92,125170,125171],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[38,125173,125174],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[83,125176,125178],{"className":117271,"code":125177,"language":117273,"meta":10,"style":10},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[89,125179,125180,125187,125194,125200],{"__ignoreMap":10},[92,125181,125182,125184],{"class":94,"line":95},[92,125183,101251],{"class":151},[92,125185,125186],{"class":207}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[92,125188,125189,125191],{"class":94,"line":11},[92,125190,101258],{"class":1942},[92,125192,125193],{"class":207}," .\u002Fqqmusic.desktop\n",[92,125195,125196,125198],{"class":94,"line":1158},[92,125197,124242],{"class":1942},[92,125199,125193],{"class":207},[92,125201,125202,125204,125206,125208],{"class":94,"line":1173},[92,125203,24557],{"class":1942},[92,125205,24560],{"class":207},[92,125207,123108],{"class":207},[92,125209,125193],{"class":207},[38,125211,125212,125214],{},[89,125213,101258],{},"：一个 Linux 命令，主要功能是：",[1110,125216,125217,125220],{},[49,125218,125219],{},"如果文件不存在，就创建一个新的空文件",[49,125221,125222],{},"如果文件已存在，就更新该文件的最后修改时间",[83,125224,125226],{"className":120791,"code":125225,"language":120793,"meta":120794,"style":10},"[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",[89,125227,125228,125232,125237,125242,125247,125251,125256],{"__ignoreMap":10},[92,125229,125230],{"class":94,"line":95},[92,125231,124993],{},[92,125233,125234],{"class":94,"line":11},[92,125235,125236],{},"Name=QQ音乐\n",[92,125238,125239],{"class":94,"line":1158},[92,125240,125241],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[92,125243,125244],{"class":94,"line":1173},[92,125245,125246],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[92,125248,125249],{"class":94,"line":1179},[92,125250,125003],{},[92,125252,125253],{"class":94,"line":1193},[92,125254,125255],{},"Categories=Audio;Music;Player;\n",[92,125257,125258],{"class":94,"line":1199},[92,125259,125260],{},"Comment=QQ Music Client for Linux\n",[38,125262,125263],{},"将文件复制进去",[38,125265,125266],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[38,125268,125269],{},[1441,125270],{"alt":10,"src":125271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[38,125273,125274],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[38,125276,125277],{},[1441,125278],{"alt":10,"src":125279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[38,125281,125282,125283,125286,125287,125290],{},"如果你用的不是KDE，那么也可以直接修改",[89,125284,125285],{},"qqmuic.desktop","：在exec的末尾加上",[89,125288,125289],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[83,125292,125294],{"className":120791,"code":125293,"language":120793,"meta":120794,"style":10},"[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",[89,125295,125296,125300,125304,125309,125313,125317,125321],{"__ignoreMap":10},[92,125297,125298],{"class":94,"line":95},[92,125299,124993],{},[92,125301,125302],{"class":94,"line":11},[92,125303,125236],{},[92,125305,125306],{"class":94,"line":1158},[92,125307,125308],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[92,125310,125311],{"class":94,"line":1173},[92,125312,125246],{},[92,125314,125315],{"class":94,"line":1179},[92,125316,125003],{},[92,125318,125319],{"class":94,"line":1193},[92,125320,125255],{},[92,125322,125323],{"class":94,"line":1199},[92,125324,125260],{},[38,125326,125327],{},[1441,125328],{"alt":10,"src":125329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[38,125331,125332],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[83,125334,125336],{"className":120791,"code":125335,"language":120793,"meta":120794,"style":10},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[89,125337,125338],{"__ignoreMap":10},[92,125339,125340],{"class":94,"line":95},[92,125341,125335],{},[46,125343,125344],{"start":1173},[49,125345,125346],{},"去Flathub上安装软件",[38,125348,125349],{},[341,125350,125351],{"href":125351,"rel":125352},"https:\u002F\u002Fflathub.org\u002F",[23845],[38,125354,125355],{},"1️⃣去上面的官网搜索软件+下载软件",[38,125357,125358],{},[1441,125359],{"alt":10,"src":125360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[83,125362,125364],{"className":120791,"code":125363,"language":120793,"meta":120794,"style":10},"flatpak install flathub com.obsproject.Studio\n",[89,125365,125366],{"__ignoreMap":10},[92,125367,125368],{"class":94,"line":95},[92,125369,125363],{},[38,125371,125372],{},[1441,125373],{"alt":10,"src":125374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[38,125376,125377],{},"2️⃣运行软件",[38,125379,125380],{},"a.官方方式：",[38,125382,125383],{},[1441,125384],{"alt":10,"src":125385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[83,125387,125388],{"className":120791,"code":125363,"language":120793,"meta":120794,"style":10},[89,125389,125390],{"__ignoreMap":10},[92,125391,125392],{"class":94,"line":95},[92,125393,125363],{},[38,125395,125396],{},"b.当普通软件运行：",[38,125398,125399],{},[1441,125400],{"alt":10,"src":125401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[38,125403,125404],{},[1441,125405],{"alt":10,"src":125406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5106,125408,125409],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":10,"searchDepth":11,"depth":11,"links":125411},[125412,125413,125418,125419,125425,125426],{"id":122144,"depth":11,"text":122145},{"id":122486,"depth":11,"text":122487,"children":125414},[125415,125416,125417],{"id":122490,"depth":1158,"text":122491},{"id":122557,"depth":1158,"text":122558},{"id":122818,"depth":1158,"text":122819},{"id":122971,"depth":11,"text":122972},{"id":123209,"depth":11,"text":123210,"children":125420},[125421,125422,125423,125424],{"id":123261,"depth":1158,"text":123262},{"id":123547,"depth":1158,"text":123548},{"id":123818,"depth":1158,"text":123819},{"id":124077,"depth":1158,"text":124078},{"id":124136,"depth":11,"text":124137},{"id":124437,"depth":11,"text":124438,"children":125427},[125428,125429,125430,125431,125432,125433,125434,125435],{"id":124441,"depth":1158,"text":124442},{"id":124453,"depth":1158,"text":124454},{"id":124665,"depth":1158,"text":124666},{"id":124689,"depth":1158,"text":124690},{"id":124755,"depth":1158,"text":124756},{"id":124849,"depth":1158,"text":124850},{"id":124856,"depth":1158,"text":124857},{"id":124880,"depth":1158,"text":124881},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122136,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125442,"title":125443,"body":125444,"description":13,"extension":14,"meta":125448,"navigation":17,"path":125449,"seo":125450,"stem":125451,"__hash__":125452},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125445,"toc":125446},[],{"title":10,"searchDepth":11,"depth":11,"links":125447},[],{"category":30244},"\u002Fwiki\u002F2025-01-27-linux",{"title":125443,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125454,"title":125455,"body":125456,"description":125460,"extension":14,"meta":125851,"navigation":17,"path":125852,"seo":125853,"stem":125854,"__hash__":125855},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125457,"toc":125849},[125458,125461,125465,125482,125485,125538,125542,125544,125584,125593,125597,125600,125841,125846],[38,125459,125460],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[29,125462,125464],{"id":125463},"_1ubuntu环境配置","1.Ubuntu环境配置",[46,125466,125467,125470,125473,125476,125479],{},[49,125468,125469],{},"ubuntu环境换源",[49,125471,125472],{},"安装cuda",[49,125474,125475],{},"安装miniconda",[49,125477,125478],{},"安装pytorch",[49,125480,125481],{},"安装genesis",[38,125483,125484],{},"参考链接：",[83,125486,125488],{"className":23802,"code":125487,"language":23804,"meta":10,"style":10},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[89,125489,125490],{"__ignoreMap":10},[92,125491,125492,125495,125498,125501,125503,125506,125509,125511,125514,125517,125519,125522,125525,125527,125530,125533,125535],{"class":94,"line":95},[92,125493,125494],{"class":1942},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[92,125496,125497],{"class":207},"=blogdetail",[92,125499,125500],{"class":102},"&sharetype",[92,125502,148],{"class":98},[92,125504,125505],{"class":207},"blogdetail",[92,125507,125508],{"class":102},"&sharerId",[92,125510,148],{"class":98},[92,125512,125513],{"class":207},"144728092",[92,125515,125516],{"class":102},"&sharerefer",[92,125518,148],{"class":98},[92,125520,125521],{"class":207},"PC",[92,125523,125524],{"class":102},"&sharesource",[92,125526,148],{"class":98},[92,125528,125529],{"class":207},"qq_69379513",[92,125531,125532],{"class":102},"&sharefrom",[92,125534,148],{"class":98},[92,125536,125537],{"class":207},"from_link\n",[29,125539,125541],{"id":125540},"_2genesis-报错issue","2.Genesis 报错issue",[38,125543,125484],{},[83,125545,125546],{"className":23802,"code":125487,"language":23804,"meta":10,"style":10},[89,125547,125548],{"__ignoreMap":10},[92,125549,125550,125552,125554,125556,125558,125560,125562,125564,125566,125568,125570,125572,125574,125576,125578,125580,125582],{"class":94,"line":95},[92,125551,125494],{"class":1942},[92,125553,125497],{"class":207},[92,125555,125500],{"class":102},[92,125557,148],{"class":98},[92,125559,125505],{"class":207},[92,125561,125508],{"class":102},[92,125563,148],{"class":98},[92,125565,125513],{"class":207},[92,125567,125516],{"class":102},[92,125569,148],{"class":98},[92,125571,125521],{"class":207},[92,125573,125524],{"class":102},[92,125575,148],{"class":98},[92,125577,125529],{"class":207},[92,125579,125532],{"class":102},[92,125581,148],{"class":98},[92,125583,125537],{"class":207},[83,125585,125587],{"className":23802,"code":125586,"language":23804,"meta":10,"style":10},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[89,125588,125589],{"__ignoreMap":10},[92,125590,125591],{"class":94,"line":95},[92,125592,125586],{"class":1942},[29,125594,125596],{"id":125595},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[38,125598,125599],{},"hello_robot.py",[83,125601,125603],{"className":30359,"code":125602,"language":30361,"meta":10,"style":10},"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",[89,125604,125605,125611,125626,125630,125642,125654,125658,125671,125675,125694,125704,125714,125728,125732,125736,125741,125745,125755,125762,125776,125783,125793,125798,125802,125820,125825,125829,125836],{"__ignoreMap":10},[92,125606,125607,125609],{"class":94,"line":95},[92,125608,30373],{"class":98},[92,125610,45286],{"class":102},[92,125612,125613,125616,125619,125621,125623],{"class":94,"line":11},[92,125614,125615],{"class":102},"os.environ[",[92,125617,125618],{"class":207},"'PYOPENGL_PLATFORM'",[92,125620,4422],{"class":102},[92,125622,148],{"class":98},[92,125624,125625],{"class":207}," 'glx'\n",[92,125627,125628],{"class":94,"line":1158},[92,125629,2379],{"emptyLinePlaceholder":17},[92,125631,125632,125634,125637,125639],{"class":94,"line":1173},[92,125633,30373],{"class":98},[92,125635,125636],{"class":102}," genesis ",[92,125638,31364],{"class":98},[92,125640,125641],{"class":102}," gs\n",[92,125643,125644,125646,125649,125651],{"class":94,"line":1179},[92,125645,30718],{"class":98},[92,125647,125648],{"class":102}," pynput ",[92,125650,30373],{"class":98},[92,125652,125653],{"class":102}," keyboard\n",[92,125655,125656],{"class":94,"line":1193},[92,125657,2379],{"emptyLinePlaceholder":17},[92,125659,125660,125663,125666,125668],{"class":94,"line":1199},[92,125661,125662],{"class":102},"gs.init(",[92,125664,125665],{"class":5196},"backend",[92,125667,148],{"class":98},[92,125669,125670],{"class":102},"gs.gpu)\n",[92,125672,125673],{"class":94,"line":1290},[92,125674,2379],{"emptyLinePlaceholder":17},[92,125676,125677,125680,125682,125685,125688,125690,125692],{"class":94,"line":1296},[92,125678,125679],{"class":102},"scene ",[92,125681,148],{"class":98},[92,125683,125684],{"class":102}," gs.Scene(",[92,125686,125687],{"class":5196},"show_viewer",[92,125689,148],{"class":98},[92,125691,31457],{"class":151},[92,125693,109],{"class":102},[92,125695,125696,125699,125701],{"class":94,"line":1308},[92,125697,125698],{"class":102},"plane ",[92,125700,148],{"class":98},[92,125702,125703],{"class":102}," scene.add_entity(gs.morphs.Plane())\n",[92,125705,125706,125709,125711],{"class":94,"line":1591},[92,125707,125708],{"class":102},"franka ",[92,125710,148],{"class":98},[92,125712,125713],{"class":102}," scene.add_entity(\n",[92,125715,125716,125719,125721,125723,125726],{"class":94,"line":1596},[92,125717,125718],{"class":102},"    gs.morphs.MJCF(",[92,125720,45335],{"class":5196},[92,125722,148],{"class":98},[92,125724,125725],{"class":207},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[92,125727,38028],{"class":102},[92,125729,125730],{"class":94,"line":1602},[92,125731,109],{"class":102},[92,125733,125734],{"class":94,"line":1607},[92,125735,2379],{"emptyLinePlaceholder":17},[92,125737,125738],{"class":94,"line":1621},[92,125739,125740],{"class":102},"scene.build()\n",[92,125742,125743],{"class":94,"line":1626},[92,125744,2379],{"emptyLinePlaceholder":17},[92,125746,125747,125749,125752],{"class":94,"line":1632},[92,125748,31928],{"class":98},[92,125750,125751],{"class":1942}," on_press",[92,125753,125754],{"class":102},"(key):\n",[92,125756,125757,125760],{"class":94,"line":1653},[92,125758,125759],{"class":98},"    try",[92,125761,3718],{"class":102},[92,125763,125764,125766,125769,125771,125774],{"class":94,"line":1658},[92,125765,2476],{"class":98},[92,125767,125768],{"class":102}," key.char ",[92,125770,2928],{"class":98},[92,125772,125773],{"class":207}," 'q'",[92,125775,3718],{"class":102},[92,125777,125778,125780],{"class":94,"line":1672},[92,125779,15712],{"class":98},[92,125781,125782],{"class":151}," False\n",[92,125784,125785,125788,125791],{"class":94,"line":1677},[92,125786,125787],{"class":98},"    except",[92,125789,125790],{"class":151}," AttributeError",[92,125792,3718],{"class":102},[92,125794,125795],{"class":94,"line":1706},[92,125796,125797],{"class":98},"        pass\n",[92,125799,125800],{"class":94,"line":1711},[92,125801,2379],{"emptyLinePlaceholder":17},[92,125803,125804,125807,125809,125812,125815,125817],{"class":94,"line":1728},[92,125805,125806],{"class":102},"listener ",[92,125808,148],{"class":98},[92,125810,125811],{"class":102}," keyboard.Listener(",[92,125813,125814],{"class":5196},"on_press",[92,125816,148],{"class":98},[92,125818,125819],{"class":102},"on_press)\n",[92,125821,125822],{"class":94,"line":1733},[92,125823,125824],{"class":102},"listener.start()\n",[92,125826,125827],{"class":94,"line":1738},[92,125828,2379],{"emptyLinePlaceholder":17},[92,125830,125831,125833],{"class":94,"line":1743},[92,125832,108638],{"class":98},[92,125834,125835],{"class":102}," listener.running:\n",[92,125837,125838],{"class":94,"line":1757},[92,125839,125840],{"class":102},"    scene.step()\n",[38,125842,125843],{},[1441,125844],{"alt":10,"src":125845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5106,125847,125848],{},"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":10,"searchDepth":11,"depth":11,"links":125850},[],{"category":23358},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125455,"description":125460},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125857,"title":125858,"body":125859,"description":13,"extension":14,"meta":125874,"navigation":17,"path":125875,"seo":125876,"stem":125877,"__hash__":125878},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125860,"toc":125871},[125861,125864,125868],[29,125862,125858],{"id":125863},"_1-基础知识",[33,125865,125867],{"id":125866},"_11-js的组成","1.1 js的组成",[38,125869,125870],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":10,"searchDepth":11,"depth":11,"links":125872},[125873],{"id":125866,"depth":11,"text":125867},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125858,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125880,"title":125881,"body":125882,"description":13,"extension":14,"meta":126021,"navigation":17,"path":126022,"seo":126023,"stem":126024,"__hash__":126025},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125883,"toc":126009},[125884,125887,125891,125894,125898,125908,125912,125915,125918,125921,125925,125932,125938,125942,125948,125959,125963,125966,125970,125973,125977,125980,125984,125987,125991,125994,125997,126000,126003,126006],[29,125885,125881],{"id":125886},"_2-vscode必备内容",[33,125888,125890],{"id":125889},"_21-标签分类","2.1 标签分类",[38,125892,125893],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[33,125895,125897],{"id":125896},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[38,125899,125900,125901,125903,125904,125907],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[89,125902,329],{}," 然后按 ",[89,125905,125906],{},"Tab","，快速自动生成基本结构。",[33,125909,125911],{"id":125910},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[38,125913,125914],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[38,125916,125917],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[38,125919,125920],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[33,125922,125924],{"id":125923},"_24-视图缩放","2.4 视图缩放",[38,125926,125927,125928,125931],{},"缩放视图 ",[89,125929,125930],{},"ctrl+"," 可实现代码增大。",[38,125933,125934,125937],{},[89,125935,125936],{},"ctrl-"," 可实现代码减小。",[33,125939,125941],{"id":125940},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[38,125943,125944,125945,28366],{},"VSCode 新建文件快捷键为 ",[89,125946,125947],{},"ctrl+N",[38,125949,125950,125951,125954,125955,125958],{},"保存快捷键为 ",[89,125952,125953],{},"ctrl+S","，将文本保存为 ",[89,125956,125957],{},".html"," 文件。",[33,125960,125962],{"id":125961},"_26-auto-rename-tag","2.6 Auto Rename Tag",[38,125964,125965],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[33,125967,125969],{"id":125968},"_27-vscode-icons","2.7 vscode-icons",[38,125971,125972],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[33,125974,125976],{"id":125975},"_28-easy-less","2.8 Easy LESS",[38,125978,125979],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[33,125981,125983],{"id":125982},"_29-会了吧插件","2.9 会了吧插件",[38,125985,125986],{},"会了吧插件可以展示代码中英语单词的意思。",[33,125988,125990],{"id":125989},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[38,125992,125993],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[38,125995,125996],{},"②选定多个相同的单词:ctrl+D",[38,125998,125999],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[38,126001,126002],{},"④全局替换某些单词:ctrl+h",[38,126004,126005],{},"⑤快速定位到某一行:ctrl+g",[38,126007,126008],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":10,"searchDepth":11,"depth":11,"links":126010},[126011,126012,126013,126014,126015,126016,126017,126018,126019,126020],{"id":125889,"depth":11,"text":125890},{"id":125896,"depth":11,"text":125897},{"id":125910,"depth":11,"text":125911},{"id":125923,"depth":11,"text":125924},{"id":125940,"depth":11,"text":125941},{"id":125961,"depth":11,"text":125962},{"id":125968,"depth":11,"text":125969},{"id":125975,"depth":11,"text":125976},{"id":125982,"depth":11,"text":125983},{"id":125989,"depth":11,"text":125990},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125881,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126027,"title":126028,"body":126029,"description":13,"extension":14,"meta":126188,"navigation":17,"path":126189,"seo":126190,"stem":126191,"__hash__":126192},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126030,"toc":126180},[126031,126034,126038,126048,126054,126060,126064,126073,126077,126082,126085,126088,126092,126095,126105,126114,126123,126132,126142,126149,126154,126159,126172],[29,126032,126028],{"id":126033},"_3-html文本与容器标签",[33,126035,126037],{"id":126036},"_31-标题标签","3.1 标题标签",[38,126039,126040,126043,126044,126047],{},[89,126041,126042],{},"\u003Ch1>","我是一级标签",[89,126045,126046],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[38,126049,126050,126043,126052],{},[89,126051,126042],{},[89,126053,126046],{},[38,126055,123310,126056,126059],{},[89,126057,126058],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[33,126061,126063],{"id":126062},"_32-段落标签","3.2 段落标签",[38,126065,126066,126069,126070],{},[89,126067,126068],{},"\u003Cp>","....",[89,126071,126072],{},"\u003C\u002Fp>",[33,126074,126076],{"id":126075},"_33-换行标签","3.3 换行标签",[38,126078,126079],{},[89,126080,126081],{},"\u003Cbr \u002F>",[38,126083,126084],{},"具有强制换行的作用",[38,126086,126087],{},"单标签",[33,126089,126091],{"id":126090},"_34-文本格式化标签","3.4 文本格式化标签",[38,126093,126094],{},"提供粗体、斜体和下划线等效果",[38,126096,126097,126098,82519,126101,126104],{},"加粗：",[89,126099,126100],{},"\u003Cstrong>...\u003C\u002Fstrong>",[89,126102,126103],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[38,126106,126107,126108,82519,126111,126104],{},"斜体：",[89,126109,126110],{},"\u003Cem>...\u003C\u002Fem>",[89,126112,126113],{},"\u003Ci>...\u003C\u002Fi>",[38,126115,126116,126117,82519,126120,126104],{},"删除线：",[89,126118,126119],{},"\u003Cdel>...\u003C\u002Fdel>",[89,126121,126122],{},"\u003Cs>...\u003C\u002Fs>",[38,126124,126125,126126,82519,126129,126104],{},"下划线：",[89,126127,126128],{},"\u003Cins>...\u003C\u002Fins>",[89,126130,126131],{},"\u003Cu>...\u003C\u002Fu>",[33,126133,126135,126136,18390,126139,102668],{"id":126134},"_35-div和span标签","3.5 ",[89,126137,126138],{},"\u003Cdiv>",[89,126140,126141],{},"\u003Cspan>",[38,126143,126144,100993,126146,126148],{},[89,126145,126138],{},[89,126147,126141],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[38,126150,126151],{},[89,126152,126153],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[38,126155,126156],{},[89,126157,126158],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[38,126160,126161,126162,126164,126165,126167,126168,126171],{},"两者特点：①",[89,126163,126138],{}," 标签用来布局，但一行通常只放一个 ",[89,126166,126138],{},"。可以理解为一个大盒子，独占一行，在 ",[89,126169,126170],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[38,126173,77229,126174,126176,126177,126179],{},[89,126175,126141],{}," 标签也可用于布局，一行可以放多个 ",[89,126178,126141],{},"，可理解为小盒子。",{"title":10,"searchDepth":11,"depth":11,"links":126181},[126182,126183,126184,126185,126186],{"id":126036,"depth":11,"text":126037},{"id":126062,"depth":11,"text":126063},{"id":126075,"depth":11,"text":126076},{"id":126090,"depth":11,"text":126091},{"id":126134,"depth":11,"text":126187},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126028,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126194,"title":126195,"body":126196,"description":13,"extension":14,"meta":126393,"navigation":17,"path":126394,"seo":126395,"stem":126396,"__hash__":126397},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126197,"toc":126385},[126198,126201,126205,126208,126214,126221,126227,126233,126236,126239,126242,126245,126248,126251,126254,126258,126261,126264,126267,126273,126279,126285,126292,126296,126302,126308,126311,126314,126320,126326,126332,126335,126338,126342,126345,126355,126361,126365,126374,126378,126381],[29,126199,126195],{"id":126200},"_4-html图像与链接",[33,126202,126204],{"id":126203},"_41-图像标签","4.1 图像标签",[38,126206,126207],{},"（1）标签",[38,126209,126210,126213],{},[89,126211,126212],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[38,126215,126216,126217,126220],{},"src是",[89,126218,126219],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[38,126222,126223,126224],{},"alt:文本，替换文本。图像不能显示的文字 ",[89,126225,126226],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[38,126228,126229,126230],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[89,126231,126232],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[38,126234,126235],{},"width:像素，设置图像的宽度",[38,126237,126238],{},"height:像素，设置图像的高度",[38,126240,126241],{},"border：像素，设置图像的边框粗细",[38,126243,126244],{},"（2）图像标签属性的注意点：",[38,126246,126247],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[38,126249,126250],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[38,126252,126253],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[33,126255,126257],{"id":126256},"_42-路径注意要点","4.2 路径注意要点：",[38,126259,126260],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[38,126262,126263],{},"（2）根目录：就是打开文件夹的第一层根目录",[38,126265,126266],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[38,126268,126269,126270],{},"①同一级路径：图像文件位于HTML文件同一级，如",[89,126271,126272],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[38,126274,126275,126276],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[89,126277,126278],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[38,126280,126281,126282],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[89,126283,126284],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[38,126286,126287,126288,354],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[341,126289,126290],{"href":126290,"rel":126291},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23845],[33,126293,126295],{"id":126294},"_43-超链接标签","4.3 超链接标签",[38,126297,126298,126301],{},[89,126299,126300],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[38,126303,126304,126305],{},"①语法格式：",[89,126306,126307],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[38,126309,126310],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[38,126312,126313],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[38,126315,126316,126317],{},"③链接分类：外部链接：",[89,126318,126319],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[38,126321,126322,126323],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[89,126324,126325],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[38,126327,126328,126329],{},"空链接：如果当时没有确定链接目标时，",[89,126330,126331],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[38,126333,126334],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[38,126336,126337],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[33,126339,126341],{"id":126340},"_44-锚点链接","4.4 锚点链接",[38,126343,126344],{},"点我们点击链接，可以快速定位到页面中的某个位置",[38,126346,126347,126348,126351,126352],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[89,126349,126350],{},"\u003Ca href=\"#two\">","第二级",[89,126353,126354],{},"\u003C\u002Fa>",[38,126356,126357,126358],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[89,126359,126360],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[33,126362,126364],{"id":126363},"_45-注释标签","4.5 注释标签",[38,126366,126367,126370,126371],{},[89,126368,126369],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[89,126372,126373],{},"ctrl+\u002F",[33,126375,126377],{"id":126376},"_46-特殊字符","4.6 特殊字符",[38,126379,126380],{},"可以实现添加多个空格",[1441,126382],{"style":126383,"src":126384},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":10,"searchDepth":11,"depth":11,"links":126386},[126387,126388,126389,126390,126391,126392],{"id":126203,"depth":11,"text":126204},{"id":126256,"depth":11,"text":126257},{"id":126294,"depth":11,"text":126295},{"id":126340,"depth":11,"text":126341},{"id":126363,"depth":11,"text":126364},{"id":126376,"depth":11,"text":126377},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126195,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126399,"title":126400,"body":126401,"description":13,"extension":14,"meta":126694,"navigation":17,"path":126695,"seo":126696,"stem":126697,"__hash__":126698},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126402,"toc":126685},[126403,126406,126410,126413,126416,126419,126422,126425,126428,126431,126434,126437,126457,126463,126467,126470,126473,126476,126479,126482,126485,126489,126492,126495,126498,126501,126514,126519,126522,126525,126540,126543,126546,126549,126552,126555,126559,126562,126569,126572,126575,126578,126581,126584,126590,126593,126596,126602,126605,126608,126611,126617,126620,126623,126637,126644,126647,126650,126657,126666,126669,126672,126675,126679,126682],[29,126404,126400],{"id":126405},"_5-html表格列表与表单",[33,126407,126409],{"id":126408},"_51-表格标签","5.1 表格标签",[38,126411,126412],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[38,126414,126415],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[38,126417,126418],{},"②表格基本语法：",[1441,126420],{"style":126383,"src":126421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[38,126423,126424],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1441,126426],{"style":126383,"src":126427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[38,126429,126430],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1441,126432],{"style":126383,"src":126433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[38,126435,126436],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[38,126438,126439,126442,126443,126445,126446,126449,126450,126452,126453,126456],{},[89,126440,126441],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[89,126444,126441],{},"内部必须拥有",[89,126447,126448],{},"\u003Ctr>","标签，一般位于第一行，",[89,126451,126441],{},"比",[89,126454,126455],{},"\u003Cth>","范围广",[38,126458,126459,126462],{},[89,126460,126461],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[33,126464,126466],{"id":126465},"_52-合并单元格","5.2 合并单元格",[38,126468,126469],{},"（1）合并单元格方式：",[38,126471,126472],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[38,126474,126475],{},"②跨列合并：colspan=\"合并单元格的个数\"",[38,126477,126478],{},"（2）目标单元格：",[38,126480,126481],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[38,126483,126484],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[33,126486,126488],{"id":126487},"_53-列表标签","5.3 列表标签",[38,126490,126491],{},"（1）分类：无序列表、有序列表、自定义列表",[38,126493,126494],{},"①无序列表：",[1441,126496],{"style":126383,"src":126497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[38,126499,126500],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[38,126502,126503,126506,126507,126510,126511,126513],{},[89,126504,126505],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[89,126508,126509],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[89,126512,126505],{},"中输入其他标签或文字是不对的",[38,126515,126516,126518],{},[89,126517,126509],{},"之间相当于一个容器，可以容纳所有元素",[38,126520,126521],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[38,126523,126524],{},"在css中去除前边的小圆点采用如下代码:",[83,126526,126530],{"className":126527,"code":126528,"language":126529,"meta":10,"style":10},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[89,126531,126532],{"__ignoreMap":10},[92,126533,126534,126537],{"class":94,"line":95},[92,126535,126536],{"class":51280},"list-style",[92,126538,126539],{"class":102},": none;\n",[38,126541,126542],{},"②有序列表：",[1441,126544],{"style":126383,"src":126545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[38,126547,126548],{},"③自定义列表：",[1441,126550],{"style":126383,"src":126551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1441,126553],{"style":126383,"src":126554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[33,126556,126558],{"id":126557},"_54-表单标签","5.4 表单标签",[38,126560,126561],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[38,126563,126564,126565,126568],{},"（1）表单域：包含单元素的区域，",[89,126566,126567],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1441,126570],{"style":126383,"src":126571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[38,126573,126574],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[38,126576,126577],{},"表单元素提交必须有name属性",[38,126579,126580],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[38,126582,126583],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[38,126585,77206,126586,126589],{},[89,126587,126588],{},"\u003Cinput>","输入表单元素",[1441,126591],{"style":126383,"src":126592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1441,126594],{"style":126383,"src":126595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[38,126597,126598,126599],{},"单选按钮：",[89,126600,126601],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1441,126603],{"style":126383,"src":126604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[38,126606,126607],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1441,126609],{"style":126383,"src":126610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[38,126612,126613,126616],{},[252,126614,126615],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[38,126618,126619],{},"②select下拉表单元素：可以节约页面控件",[1441,126621],{"style":126383,"src":126622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[38,126624,126625,13775,126627,126630,126631,126633,126634,126636],{},[252,126626,132],{},[89,126628,126629],{},"\u003Cselect>","中至少包含一对",[89,126632,102689],{},"；在",[89,126635,102689],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[38,126638,126639,126640,126643],{},"③",[89,126641,126642],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1441,126645],{"style":126383,"src":126646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[38,126648,126649],{},"3行20列",[33,126651,126653,126654,102668],{"id":126652},"_55-lable标签","5.5 ",[89,126655,126656],{},"\u003Clable>",[38,126658,126659,126660,126662,126663,126665],{},"它不是表单标签，但常常与表单标签搭配使用，",[89,126661,126656],{},"标签用于绑定一个表单标签，当点击",[89,126664,126656],{},"标签内的文本",[38,126667,126668],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1441,126670],{"style":126383,"src":126671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1441,126673],{"style":126383,"src":126674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[33,126676,126678],{"id":126677},"_56-实例","5.6 实例",[1441,126680],{"style":126383,"src":126681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5106,126683,126684],{},"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":10,"searchDepth":11,"depth":11,"links":126686},[126687,126688,126689,126690,126691,126693],{"id":126408,"depth":11,"text":126409},{"id":126465,"depth":11,"text":126466},{"id":126487,"depth":11,"text":126488},{"id":126557,"depth":11,"text":126558},{"id":126652,"depth":11,"text":126692},"5.5 \u003Clable>标签",{"id":126677,"depth":11,"text":126678},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126400,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126700,"title":126701,"body":126702,"description":13,"extension":14,"meta":127251,"navigation":17,"path":127252,"seo":127253,"stem":127254,"__hash__":127255},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126703,"toc":127226},[126704,126707,126711,126714,126717,126721,126724,126727,126730,126733,126736,126739,126742,126746,126749,126753,126756,126759,126762,126766,126769,126772,126775,126781,126784,126787,126790,126793,126796,126799,126802,126835,126839,126842,126845,126848,126852,126855,126858,126861,126864,126867,126871,126874,126877,126880,126884,126887,126891,126894,126898,126901,126906,126910,126913,126917,126920,126923,126926,126929,126956,126959,126963,126966,126969,126974,126977,126980,126984,126987,126992,126995,126998,127001,127005,127008,127011,127014,127018,127021,127024,127027,127031,127035,127038,127078,127081,127085,127092,127095,127099,127102,127148,127152,127155,127158,127161,127189,127193,127196,127223],[29,126705,126701],{"id":126706},"_6-css语法与文本样式",[33,126708,126710],{"id":126709},"_61-css语法规范","6.1 css语法规范",[38,126712,126713],{},"由两部分组成，选择器及一条或多条声明",[1441,126715],{"style":126383,"src":126716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[38,126718,126719],{},[252,126720,132],{},[38,126722,126723],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[38,126725,126726],{},"②属性与属性值以“键值对”的形式出现",[38,126728,126729],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[38,126731,126732],{},"④属性和属性值之间用英文“;”分开",[1441,126734],{"style":126383,"src":126735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1441,126737],{"style":126383,"src":126738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1441,126740],{"style":126383,"src":126741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[33,126743,126745],{"id":126744},"_62-css选择器","6.2 css选择器",[38,126747,126748],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[63,126750,126752],{"id":126751},"_621-标签选择器","6.2.1 标签选择器",[38,126754,126755],{},"①优点：能快速为页面中同类型的标签统一设置样式",[38,126757,126758],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1441,126760],{"style":126383,"src":126761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[63,126763,126765],{"id":126764},"_622-类选择器","6.2.2 类选择器",[38,126767,126768],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[38,126770,126771],{},"②样例",[1441,126773],{"style":126383,"src":126774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[38,126776,126777,126778,126780],{},"③ ",[252,126779,126615],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[38,126782,126783],{},"可以理解为给这个标签起了个名字，来表示；",[38,126785,126786],{},"长名称或词组可以使用横线来为选择器命名；",[38,126788,126789],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[38,126791,126792],{},"命名要有意义；",[1441,126794],{"style":126383,"src":126795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[38,126797,126798],{},"类选择器也可以指定特殊的元素p.center{}",[38,126800,126801],{},"p.center和.center都对",[83,126803,126805],{"className":126527,"code":126804,"language":126529,"meta":10,"style":10},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[89,126806,126807,126812,126821,126831],{"__ignoreMap":10},[92,126808,126809],{"class":94,"line":95},[92,126810,126811],{"class":161},"\u002F* 类选择器指定特殊元素 *\u002F\n",[92,126813,126814,126816,126819],{"class":94,"line":11},[92,126815,38],{"class":51280},[92,126817,126818],{"class":1942},".center",[92,126820,15552],{"class":102},[92,126822,126823,126825,126827,126829],{"class":94,"line":1158},[92,126824,70506],{"class":151},[92,126826,51417],{"class":102},[92,126828,51572],{"class":151},[92,126830,1269],{"class":102},[92,126832,126833],{"class":94,"line":1173},[92,126834,1544],{"class":102},[63,126836,126838],{"id":126837},"_623-多类名使用","6.2.3 多类名使用",[38,126840,126841],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1441,126843],{"style":126383,"src":126844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[38,126846,126847],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[63,126849,126851],{"id":126850},"_624-id选择器","6.2.4 id选择器",[38,126853,126854],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[38,126856,126857],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1441,126859],{"style":126383,"src":126860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[38,126862,126863],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[38,126865,126866],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[63,126868,126870],{"id":126869},"_625-通配符选择器","6.2.5 通配符选择器",[38,126872,126873],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[38,126875,126876],{},"* {",[38,126878,126879],{},"color=\"red\"}",[63,126881,126883],{"id":126882},"_626-总结","6.2.6 总结",[1441,126885],{"style":126383,"src":126886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[33,126888,126890],{"id":126889},"_63-css字体属性","6.3 css字体属性",[38,126892,126893],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[63,126895,126897],{"id":126896},"_631-字体系列","6.3.1 字体系列",[38,126899,126900],{},"font-family: '宋体';",[38,126902,126903,126905],{},[252,126904,132],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[63,126907,126909],{"id":126908},"_632-字体大小","6.3.2 字体大小",[38,126911,126912],{},"font-size: 20px",[38,126914,126915,26454],{},[252,126916,126615],{},[38,126918,126919],{},"①px（像素）大小是网页的最常用单位",[38,126921,126922],{},"②谷歌浏览器默认为16px",[38,126924,126925],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[38,126927,126928],{},"④可以给body指定整个页面的大小：会自动引用",[83,126930,126932],{"className":126527,"code":126931,"language":126529,"meta":10,"style":10},"body {\n  font-size: 16px;\n}\n",[89,126933,126934,126940,126952],{"__ignoreMap":10},[92,126935,126936,126938],{"class":94,"line":95},[92,126937,51780],{"class":51280},[92,126939,15552],{"class":102},[92,126941,126942,126944,126946,126948,126950],{"class":94,"line":11},[92,126943,70606],{"class":151},[92,126945,51417],{"class":102},[92,126947,704],{"class":151},[92,126949,51472],{"class":98},[92,126951,1269],{"class":102},[92,126953,126954],{"class":94,"line":1158},[92,126955,1544],{"class":102},[38,126957,126958],{},"⑤标题标签比较特殊，需要单独指定大小",[63,126960,126962],{"id":126961},"_633-字体粗细","6.3.3 字体粗细",[38,126964,126965],{},"font-weight: bold;",[38,126967,126968],{},"font-weight: 100；",[38,126970,126971,126973],{},[252,126972,132],{}," ①粗体文字变细：尽量别用normal，多用数字",[38,126975,126976],{},"font-weight= 400;",[38,126978,126979],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[63,126981,126983],{"id":126982},"_634-文字样式","6.3.4 文字样式",[38,126985,126986],{},"font-style: normal；",[38,126988,126989,26454],{},[252,126990,126991],{},"属性值",[38,126993,126994],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[38,126996,126997],{},"②italic：浏览器会显示斜体的字体样式",[1441,126999],{"style":126383,"src":127000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[63,127002,127004],{"id":127003},"_635-字体符合属性","6.3.5 字体符合属性",[1441,127006],{"style":126383,"src":127007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1441,127009],{"style":126383,"src":127010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[38,127012,127013],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[38,127015,127016,26454],{},[252,127017,126615],{},[38,127019,127020],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[38,127022,127023],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[38,127025,127026],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[33,127028,127030],{"id":127029},"_64-css-test文本属性","6.4 css test文本属性",[63,127032,127034],{"id":127033},"_641-文本颜色","6.4.1 文本颜色",[38,127036,127037],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[83,127039,127041],{"className":126527,"code":127040,"language":126529,"meta":10,"style":10},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[89,127042,127043,127048,127054,127064,127069,127074],{"__ignoreMap":10},[92,127044,127045],{"class":94,"line":95},[92,127046,127047],{"class":161},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[92,127049,127050,127052],{"class":94,"line":11},[92,127051,38],{"class":51280},[92,127053,15552],{"class":102},[92,127055,127056,127058,127060,127062],{"class":94,"line":1158},[92,127057,70885],{"class":151},[92,127059,51417],{"class":102},[92,127061,57401],{"class":151},[92,127063,1269],{"class":102},[92,127065,127066],{"class":94,"line":1173},[92,127067,127068],{"class":161},"  \u002F* color: #ff0000; *\u002F\n",[92,127070,127071],{"class":94,"line":1179},[92,127072,127073],{"class":161},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[92,127075,127076],{"class":94,"line":1193},[92,127077,1544],{"class":102},[1441,127079],{"style":126383,"src":127080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[63,127082,127084],{"id":127083},"_642-对齐文本","6.4.2 对齐文本",[38,127086,127087,127088,127091],{},"text-align属于用于设置元素内文本内容的 ",[252,127089,127090],{},"水平对齐"," 方式",[38,127093,127094],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[63,127096,127098],{"id":127097},"_643-装饰文本","6.4.3 装饰文本",[38,127100,127101],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[83,127103,127105],{"className":126527,"code":127104,"language":126529,"meta":10,"style":10},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[89,127106,127107,127113,127123,127127,127133,127144],{"__ignoreMap":10},[92,127108,127109,127111],{"class":94,"line":95},[92,127110,341],{"class":51280},[92,127112,15552],{"class":102},[92,127114,127115,127117,127119,127121],{"class":94,"line":11},[92,127116,70482],{"class":151},[92,127118,51417],{"class":102},[92,127120,54717],{"class":151},[92,127122,1269],{"class":102},[92,127124,127125],{"class":94,"line":1158},[92,127126,1544],{"class":102},[92,127128,127129,127131],{"class":94,"line":1173},[92,127130,38],{"class":51280},[92,127132,15552],{"class":102},[92,127134,127135,127137,127139,127142],{"class":94,"line":1179},[92,127136,70482],{"class":151},[92,127138,51417],{"class":102},[92,127140,127141],{"class":151},"underline",[92,127143,1269],{"class":102},[92,127145,127146],{"class":94,"line":1193},[92,127147,1544],{"class":102},[63,127149,127151],{"id":127150},"_644-文本缩进","6.4.4 文本缩进",[38,127153,127154],{},"实现文本的第一行首行缩进自己指定的距离",[38,127156,127157],{},"20px往右边走；-20px往左边走",[38,127159,127160],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[83,127162,127164],{"className":126527,"code":127163,"language":126529,"meta":10,"style":10},"p {\n  text-indent: 2em;\n}\n",[89,127165,127166,127172,127185],{"__ignoreMap":10},[92,127167,127168,127170],{"class":94,"line":95},[92,127169,38],{"class":51280},[92,127171,15552],{"class":102},[92,127173,127174,127177,127179,127181,127183],{"class":94,"line":11},[92,127175,127176],{"class":151},"  text-indent",[92,127178,51417],{"class":102},[92,127180,180],{"class":151},[92,127182,23533],{"class":98},[92,127184,1269],{"class":102},[92,127186,127187],{"class":94,"line":1158},[92,127188,1544],{"class":102},[63,127190,127192],{"id":127191},"_645-行间距","6.4.5 行间距",[38,127194,127195],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[83,127197,127199],{"className":126527,"code":127198,"language":126529,"meta":10,"style":10},"p {\n  line-height: 1.6;\n}\n",[89,127200,127201,127207,127219],{"__ignoreMap":10},[92,127202,127203,127205],{"class":94,"line":95},[92,127204,38],{"class":51280},[92,127206,15552],{"class":102},[92,127208,127209,127212,127214,127217],{"class":94,"line":11},[92,127210,127211],{"class":151},"  line-height",[92,127213,51417],{"class":102},[92,127215,127216],{"class":151},"1.6",[92,127218,1269],{"class":102},[92,127220,127221],{"class":94,"line":1158},[92,127222,1544],{"class":102},[5106,127224,127225],{},"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":10,"searchDepth":11,"depth":11,"links":127227},[127228,127229,127237,127244],{"id":126709,"depth":11,"text":126710},{"id":126744,"depth":11,"text":126745,"children":127230},[127231,127232,127233,127234,127235,127236],{"id":126751,"depth":1158,"text":126752},{"id":126764,"depth":1158,"text":126765},{"id":126837,"depth":1158,"text":126838},{"id":126850,"depth":1158,"text":126851},{"id":126869,"depth":1158,"text":126870},{"id":126882,"depth":1158,"text":126883},{"id":126889,"depth":11,"text":126890,"children":127238},[127239,127240,127241,127242,127243],{"id":126896,"depth":1158,"text":126897},{"id":126908,"depth":1158,"text":126909},{"id":126961,"depth":1158,"text":126962},{"id":126982,"depth":1158,"text":126983},{"id":127003,"depth":1158,"text":127004},{"id":127029,"depth":11,"text":127030,"children":127245},[127246,127247,127248,127249,127250],{"id":127033,"depth":1158,"text":127034},{"id":127083,"depth":1158,"text":127084},{"id":127097,"depth":1158,"text":127098},{"id":127150,"depth":1158,"text":127151},{"id":127191,"depth":1158,"text":127192},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126701,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127257,"title":127258,"body":127259,"description":13,"extension":14,"meta":127908,"navigation":17,"path":127909,"seo":127910,"stem":127911,"__hash__":127912},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127260,"toc":127889},[127261,127264,127268,127272,127332,127336,127346,127349,127352,127356,127381,127385,127388,127391,127394,127397,127400,127404,127407,127410,127452,127455,127481,127487,127490,127494,127498,127504,127507,127510,127513,127516,127519,127522,127567,127571,127574,127577,127581,127585,127614,127617,127622,127625,127628,127631,127634,127638,127642,127645,127647,127650,127654,127657,127661,127664,127667,127670,127674,127678,127684,127694,127697,127700,127703,127706,127709,127832,127840,127848,127886],[29,127262,127258],{"id":127263},"_7-css引入方式与选择器进阶",[33,127265,127267],{"id":127266},"_71-css引入方式","7.1 css引入方式",[63,127269,127271],{"id":127270},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[83,127273,127277],{"className":127274,"code":127275,"language":127276,"meta":10,"style":10},"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",[89,127278,127279,127287,127294,127306,127319,127324],{"__ignoreMap":10},[92,127280,127281,127283,127285],{"class":94,"line":95},[92,127282,1013],{"class":102},[92,127284,5106],{"class":51280},[92,127286,51287],{"class":102},[92,127288,127289,127292],{"class":94,"line":11},[92,127290,127291],{"class":51280},"  h1",[92,127293,15552],{"class":102},[92,127295,127296,127299,127301,127304],{"class":94,"line":1158},[92,127297,127298],{"class":151},"    color",[92,127300,51417],{"class":102},[92,127302,127303],{"class":151},"blue",[92,127305,1269],{"class":102},[92,127307,127308,127311,127313,127315,127317],{"class":94,"line":1173},[92,127309,127310],{"class":151},"    font-size",[92,127312,51417],{"class":102},[92,127314,903],{"class":151},[92,127316,51472],{"class":98},[92,127318,1269],{"class":102},[92,127320,127321],{"class":94,"line":1179},[92,127322,127323],{"class":102},"  }\n",[92,127325,127326,127328,127330],{"class":94,"line":1193},[92,127327,51765],{"class":102},[92,127329,5106],{"class":51280},[92,127331,51287],{"class":102},[38,127333,127334,26454],{},[252,127335,126615],{},[38,127337,77206,127338,127341,127342,127345],{},[89,127339,127340],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[89,127343,127344],{},"\u003Chead>","标签中",[38,127347,127348],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[38,127350,127351],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[63,127353,127355],{"id":127354},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[83,127357,127359],{"className":127274,"code":127358,"language":127276,"meta":10,"style":10},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[89,127360,127361],{"__ignoreMap":10},[92,127362,127363,127365,127367,127369,127371,127374,127377,127379],{"class":94,"line":95},[92,127364,1013],{"class":102},[92,127366,38],{"class":51280},[92,127368,62606],{"class":1942},[92,127370,148],{"class":102},[92,127372,127373],{"class":207},"\"color: red; font-size: 16px;\"",[92,127375,127376],{"class":102},">这是一个段落\u003C\u002F",[92,127378,38],{"class":51280},[92,127380,51287],{"class":102},[38,127382,127383,26454],{},[252,127384,126615],{},[38,127386,127387],{},"①style其实就是标签的属性",[38,127389,127390],{},"②在双引号中间，写法要符合css规范",[38,127392,127393],{},"③可以控制当前的标签设置样式",[38,127395,127396],{},"④书写繁琐，简单时才用",[38,127398,127399],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[63,127401,127403],{"id":127402},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[38,127405,127406],{},"使用最多，单独建一个css文件，然后html引用",[38,127408,127409],{},"①css文件部分： style.css",[83,127411,127413],{"className":126527,"code":127412,"language":126529,"meta":10,"style":10},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[89,127414,127415,127420,127426,127436,127448],{"__ignoreMap":10},[92,127416,127417],{"class":94,"line":95},[92,127418,127419],{"class":161},"\u002F* style.css *\u002F\n",[92,127421,127422,127424],{"class":94,"line":11},[92,127423,29],{"class":51280},[92,127425,15552],{"class":102},[92,127427,127428,127430,127432,127434],{"class":94,"line":1158},[92,127429,70885],{"class":151},[92,127431,51417],{"class":102},[92,127433,127303],{"class":151},[92,127435,1269],{"class":102},[92,127437,127438,127440,127442,127444,127446],{"class":94,"line":1173},[92,127439,70606],{"class":151},[92,127441,51417],{"class":102},[92,127443,903],{"class":151},[92,127445,51472],{"class":98},[92,127447,1269],{"class":102},[92,127449,127450],{"class":94,"line":1179},[92,127451,1544],{"class":102},[38,127453,127454],{},"②html部分",[83,127456,127458],{"className":127274,"code":127457,"language":127276,"meta":10,"style":10},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[89,127459,127460],{"__ignoreMap":10},[92,127461,127462,127464,127466,127468,127470,127472,127474,127476,127479],{"class":94,"line":95},[92,127463,1013],{"class":102},[92,127465,68985],{"class":51280},[92,127467,68988],{"class":1942},[92,127469,148],{"class":102},[92,127471,68993],{"class":207},[92,127473,61037],{"class":1942},[92,127475,148],{"class":102},[92,127477,127478],{"class":207},"\"style.css\"",[92,127480,51287],{"class":102},[38,127482,127483,127486],{},[89,127484,127485],{},"\u003Chr>","水平线标签（但是不常用！）",[38,127488,127489],{},"ctrl+0回到页面原来大小",[33,127491,127493],{"id":127492},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[63,127495,127497],{"id":127496},"_721-快速生成html","7.2.1 快速生成html",[38,127499,127500,127501],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[89,127502,127503],{},"\u003Cdiv>``\u003C\u002Fdiv>",[38,127505,127506],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[38,127508,127509],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[38,127511,127512],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[38,127514,127515],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[38,127517,127518],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[38,127520,127521],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[83,127523,127525],{"className":127274,"code":127524,"language":127276,"meta":10,"style":10},"\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",[89,127526,127527,127532,127537,127542,127547,127552,127557,127562],{"__ignoreMap":10},[92,127528,127529],{"class":94,"line":95},[92,127530,127531],{"class":161},"\u003C!-- Emmet 语法示例 -->\n",[92,127533,127534],{"class":94,"line":11},[92,127535,127536],{"class":161},"\u003C!-- div*3        → 生成3个div -->\n",[92,127538,127539],{"class":94,"line":1158},[92,127540,127541],{"class":161},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[92,127543,127544],{"class":94,"line":1173},[92,127545,127546],{"class":161},"\u003C!-- div+p        → 兄弟div和p -->\n",[92,127548,127549],{"class":94,"line":1179},[92,127550,127551],{"class":161},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[92,127553,127554],{"class":94,"line":1193},[92,127555,127556],{"class":161},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[92,127558,127559],{"class":94,"line":1199},[92,127560,127561],{"class":161},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[92,127563,127564],{"class":94,"line":1290},[92,127565,127566],{"class":161},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[63,127568,127570],{"id":127569},"_722-快速生成css","7.2.2 快速生成css",[38,127572,127573],{},"简写开头",[38,127575,127576],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[33,127578,127580],{"id":127579},"_73-css复合选择器","7.3 css复合选择器",[63,127582,127584],{"id":127583},"_731-后代选择器","7.3.1 后代选择器",[83,127586,127588],{"className":126527,"code":127587,"language":126529,"meta":10,"style":10},".parent .child {\n  color: blue;\n}\n",[89,127589,127590,127600,127610],{"__ignoreMap":10},[92,127591,127592,127595,127598],{"class":94,"line":95},[92,127593,127594],{"class":1942},".parent",[92,127596,127597],{"class":1942}," .child",[92,127599,15552],{"class":102},[92,127601,127602,127604,127606,127608],{"class":94,"line":11},[92,127603,70885],{"class":151},[92,127605,51417],{"class":102},[92,127607,127303],{"class":151},[92,127609,1269],{"class":102},[92,127611,127612],{"class":94,"line":1158},[92,127613,1544],{"class":102},[38,127615,127616],{},"元素1 元素2 {样式声明}",[38,127618,127619],{},[252,127620,127621],{},"注意点:",[38,127623,127624],{},"①元素1和元素2中间用空格隔开",[38,127626,127627],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[38,127629,127630],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[38,127632,127633],{},"④元素1和元素2可以是任意基础选择器",[63,127635,127637],{"id":127636},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[38,127639,127640],{},[252,127641,127621],{},[38,127643,127644],{},"①元素1和元素2中间用大于号隔开",[38,127646,127627],{},[38,127648,127649],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[63,127651,127653],{"id":127652},"_733-并集选择器","7.3.3 并集选择器",[38,127655,127656],{},"元素1，元素2 {样式声明}",[38,127658,127659],{},[252,127660,127621],{},[38,127662,127663],{},"①元素1和元素2中间用逗号隔开",[38,127665,127666],{},"②逗号可以理解为和的意思",[38,127668,127669],{},"③并集选择器通常用于集体声明",[63,127671,127673],{"id":127672},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[38,127675,127676],{},[252,127677,127621],{},[38,127679,127680,127681,127683],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68985,127682],{},"－:visited－:hover－:active。",[38,127685,127686,127687,127690,127691,25721],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127688,127689],"hover",{}," 、 ",[127692,127693],"first-child",{},[38,127695,127696],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[38,127698,127699],{},"link对没访问的进行设置",[38,127701,127702],{},"vistied对已访问的进行改变",[38,127704,127705],{},"hover鼠标经过就会变",[38,127707,127708],{},"active常按(点)就会变",[83,127710,127712],{"className":126527,"code":127711,"language":126529,"meta":10,"style":10},"\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",[89,127713,127714,127719,127728,127738,127748,127752,127761,127772,127776,127784,127794,127804,127808,127817,127828],{"__ignoreMap":10},[92,127715,127716],{"class":94,"line":95},[92,127717,127718],{"class":161},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[92,127720,127721,127723,127726],{"class":94,"line":11},[92,127722,341],{"class":51280},[92,127724,127725],{"class":1942},":link",[92,127727,15552],{"class":102},[92,127729,127730,127732,127734,127736],{"class":94,"line":1158},[92,127731,70885],{"class":151},[92,127733,51417],{"class":102},[92,127735,62349],{"class":151},[92,127737,1269],{"class":102},[92,127739,127740,127742,127744,127746],{"class":94,"line":1173},[92,127741,70482],{"class":151},[92,127743,51417],{"class":102},[92,127745,54717],{"class":151},[92,127747,1269],{"class":102},[92,127749,127750],{"class":94,"line":1179},[92,127751,1544],{"class":102},[92,127753,127754,127756,127759],{"class":94,"line":1193},[92,127755,341],{"class":51280},[92,127757,127758],{"class":1942},":visited",[92,127760,15552],{"class":102},[92,127762,127763,127765,127767,127770],{"class":94,"line":1199},[92,127764,70885],{"class":151},[92,127766,51417],{"class":102},[92,127768,127769],{"class":151},"purple",[92,127771,1269],{"class":102},[92,127773,127774],{"class":94,"line":1290},[92,127775,1544],{"class":102},[92,127777,127778,127780,127782],{"class":94,"line":1296},[92,127779,341],{"class":51280},[92,127781,60920],{"class":1942},[92,127783,15552],{"class":102},[92,127785,127786,127788,127790,127792],{"class":94,"line":1308},[92,127787,70885],{"class":151},[92,127789,51417],{"class":102},[92,127791,54869],{"class":151},[92,127793,1269],{"class":102},[92,127795,127796,127798,127800,127802],{"class":94,"line":1591},[92,127797,70482],{"class":151},[92,127799,51417],{"class":102},[92,127801,127141],{"class":151},[92,127803,1269],{"class":102},[92,127805,127806],{"class":94,"line":1596},[92,127807,1544],{"class":102},[92,127809,127810,127812,127815],{"class":94,"line":1602},[92,127811,341],{"class":51280},[92,127813,127814],{"class":1942},":active",[92,127816,15552],{"class":102},[92,127818,127819,127821,127823,127826],{"class":94,"line":1607},[92,127820,70885],{"class":151},[92,127822,51417],{"class":102},[92,127824,127825],{"class":151},"green",[92,127827,1269],{"class":102},[92,127829,127830],{"class":94,"line":1621},[92,127831,1544],{"class":102},[63,127833,127835,127836,127839],{"id":127834},"_735-伪类选择器","7.3.5 ",[127837,127838],"focus",{},"伪类选择器",[38,127841,127842,127844,127845,127847],{},[127837,127843],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[89,127846,126588],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[83,127849,127851],{"className":126527,"code":127850,"language":126529,"meta":10,"style":10},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[89,127852,127853,127861,127872,127882],{"__ignoreMap":10},[92,127854,127855,127857,127859],{"class":94,"line":95},[92,127856,53801],{"class":51280},[92,127858,61880],{"class":1942},[92,127860,15552],{"class":102},[92,127862,127863,127866,127868,127870],{"class":94,"line":11},[92,127864,127865],{"class":151},"  border-color",[92,127867,51417],{"class":102},[92,127869,54869],{"class":151},[92,127871,1269],{"class":102},[92,127873,127874,127876,127878,127880],{"class":94,"line":1158},[92,127875,70778],{"class":151},[92,127877,51417],{"class":102},[92,127879,54717],{"class":151},[92,127881,1269],{"class":102},[92,127883,127884],{"class":94,"line":1173},[92,127885,1544],{"class":102},[5106,127887,127888],{},"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":10,"searchDepth":11,"depth":11,"links":127890},[127891,127896,127900],{"id":127266,"depth":11,"text":127267,"children":127892},[127893,127894,127895],{"id":127270,"depth":1158,"text":127271},{"id":127354,"depth":1158,"text":127355},{"id":127402,"depth":1158,"text":127403},{"id":127492,"depth":11,"text":127493,"children":127897},[127898,127899],{"id":127496,"depth":1158,"text":127497},{"id":127569,"depth":1158,"text":127570},{"id":127579,"depth":11,"text":127580,"children":127901},[127902,127903,127904,127905,127906],{"id":127583,"depth":1158,"text":127584},{"id":127636,"depth":1158,"text":127637},{"id":127652,"depth":1158,"text":127653},{"id":127672,"depth":1158,"text":127673},{"id":127834,"depth":1158,"text":127907},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127258,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127914,"title":127915,"body":127916,"description":13,"extension":14,"meta":129839,"navigation":17,"path":129840,"seo":129841,"stem":129842,"__hash__":129843},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127917,"toc":129813},[127918,127921,127925,127934,127938,127964,127969,127972,127975,127978,127981,127985,127988,127998,128006,128010,128045,128050,128053,128056,128059,128062,128066,128069,128078,128082,128095,128100,128103,128106,128109,128113,128116,128120,128123,128178,128181,128212,128215,128269,128273,128276,128442,128565,128568,128571,128574,128577,128581,128584,128588,128591,128594,128598,128601,128632,128659,128687,128690,128694,128720,128763,128767,128861,128864,128891,128894,128897,128900,128903,128906,128909,128912,128915,128918,128922,128979,129006,129010,129058,129062,129103,129105,129108,129111,129114,129117,129121,129213,129216,129219,129222,129226,129349,129550,129554,129558,129561,129564,129567,129571,129574,129577,129602,129605,129608,129611,129614,129617,129621,129629,129691,129694,129752,129755,129758,129761,129764,129767,129770,129773,129810],[29,127919,127915],{"id":127920},"_8-css显示模式与背景特性",[33,127922,127924],{"id":127923},"_81-css元素显示模式","8.1 css元素显示模式",[38,127926,127927,127928,127930,127931,127933],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[89,127929,126138],{},"自己占一行，比如一行可以放多个",[89,127932,126141],{},"，HTML 元素一般分为块元素和行内元素两种类型",[63,127935,127937],{"id":127936},"_811-块元素","8.1.1 块元素",[38,127939,127940,127941,127943,127944,315,127947,315,127949,315,127951,315,127954,315,127957,127960,127961,127963],{},"常见的块元素有",[89,127942,126042],{},"~",[89,127945,127946],{},"\u003Ch6>",[89,127948,126068],{},[89,127950,126138],{},[89,127952,127953],{},"\u003Cul>",[89,127955,127956],{},"\u003Col>",[89,127958,127959],{},"\u003Cli>","等，其中 ",[89,127962,126138],{}," 标签是最典型的块元素",[38,127965,127966],{},[252,127967,127968],{},"块级元素的特点：",[38,127970,127971],{},"① 比较霸道，自己独占一行。",[38,127973,127974],{},"② 高度，宽度、外边距以及内边距都可以控制。",[38,127976,127977],{},"③ 宽度默认是容器（父级宽度）的100%。",[38,127979,127980],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[38,127982,127983],{},[252,127984,132],{},[38,127986,127987],{},"①文字类的元素内不能使用块级元素",[38,127989,77229,127990,127992,127993,127995,127996],{},[89,127991,126068],{}," 标签主要用于存放文字，因此 ",[89,127994,126068],{}," 里面不能放块级元素，特别是不能放",[89,127997,126138],{},[38,127999,128000,128001,127943,128003,128005],{},"⑥同理， ",[89,128002,126042],{},[89,128004,127946],{},"等都是文字类块级标签，里面也不能放其他块级元素",[63,128007,128009],{"id":128008},"_812-行内元素","8.1.2 行内元素",[38,128011,128012,128013,315,128015,315,128018,315,128021,315,128024,315,128027,315,128030,315,128033,315,128036,315,128039,128041,128042,128044],{},"常见的行内元素有 ",[89,128014,126300],{},[89,128016,128017],{},"\u003Cstrong>",[89,128019,128020],{},"\u003Cb>",[89,128022,128023],{},"\u003Cem>",[89,128025,128026],{},"\u003Ci>",[89,128028,128029],{},"\u003Cdel>",[89,128031,128032],{},"\u003Cs>",[89,128034,128035],{},"\u003Cins>",[89,128037,128038],{},"\u003Cu>",[89,128040,126141],{}," 等，其中 ",[89,128043,126141],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[38,128046,128047],{},[252,128048,128049],{},"特点：",[38,128051,128052],{},"① 相邻行内元素在一行上，一行可以显示多个。",[38,128054,128055],{},"② 高、宽直接设置是无效的。",[38,128057,128058],{},"③ 默认宽度就是它本身内容的宽度。",[38,128060,128061],{},"④ 行内元素只能容纳文本或其他行内元素。",[38,128063,128064],{},[252,128065,132],{},[38,128067,128068],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[38,128070,128071,128072,128074,128075,128077],{},"②特殊情况链接 ",[89,128073,126300],{}," 里面可以放块级元素，但是给 ",[89,128076,126300],{}," 转换一下块级模式最安全",[63,128079,128081],{"id":128080},"_813-行内块元素","8.1.3 行内块元素",[38,128083,128084,128085,315,128088,315,128091,128094],{},"在行内元素中有几个特殊的标签 —— ",[89,128086,128087],{},"\u003Cimg \u002F>",[89,128089,128090],{},"\u003Cinput \u002F>",[89,128092,128093],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[38,128096,128097],{},[252,128098,128099],{},"行内块元素的特点：",[38,128101,128102],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[38,128104,128105],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[38,128107,128108],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[63,128110,128112],{"id":128111},"_814-总结","8.1.4 总结",[1441,128114],{"style":126383,"src":128115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[63,128117,128119],{"id":128118},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[38,128121,128122],{},"①转换为块元素：display:block;",[83,128124,128126],{"className":126527,"code":128125,"language":126529,"meta":10,"style":10},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[89,128127,128128,128133,128139,128150,128162,128174],{"__ignoreMap":10},[92,128129,128130],{"class":94,"line":95},[92,128131,128132],{"class":161},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[92,128134,128135,128137],{"class":94,"line":11},[92,128136,341],{"class":51280},[92,128138,15552],{"class":102},[92,128140,128141,128144,128146,128148],{"class":94,"line":1158},[92,128142,128143],{"class":151},"  display",[92,128145,51417],{"class":102},[92,128147,60849],{"class":151},[92,128149,1269],{"class":102},[92,128151,128152,128154,128156,128158,128160],{"class":94,"line":1173},[92,128153,70548],{"class":151},[92,128155,51417],{"class":102},[92,128157,414],{"class":151},[92,128159,51472],{"class":98},[92,128161,1269],{"class":102},[92,128163,128164,128166,128168,128170,128172],{"class":94,"line":1179},[92,128165,70768],{"class":151},[92,128167,51417],{"class":102},[92,128169,504],{"class":151},[92,128171,51472],{"class":98},[92,128173,1269],{"class":102},[92,128175,128176],{"class":94,"line":1193},[92,128177,1544],{"class":102},[38,128179,128180],{},"②转换为行内元素：display:inline;",[83,128182,128184],{"className":126527,"code":128183,"language":126529,"meta":10,"style":10},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[89,128185,128186,128191,128197,128208],{"__ignoreMap":10},[92,128187,128188],{"class":94,"line":95},[92,128189,128190],{"class":161},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[92,128192,128193,128195],{"class":94,"line":11},[92,128194,51591],{"class":51280},[92,128196,15552],{"class":102},[92,128198,128199,128201,128203,128206],{"class":94,"line":1158},[92,128200,128143],{"class":151},[92,128202,51417],{"class":102},[92,128204,128205],{"class":151},"inline",[92,128207,1269],{"class":102},[92,128209,128210],{"class":94,"line":1173},[92,128211,1544],{"class":102},[38,128213,128214],{},"③转换为行内块：display:inline-block;",[83,128216,128218],{"className":126527,"code":128217,"language":126529,"meta":10,"style":10},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[89,128219,128220,128225,128231,128241,128253,128265],{"__ignoreMap":10},[92,128221,128222],{"class":94,"line":95},[92,128223,128224],{"class":161},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[92,128226,128227,128229],{"class":94,"line":11},[92,128228,92],{"class":51280},[92,128230,15552],{"class":102},[92,128232,128233,128235,128237,128239],{"class":94,"line":1158},[92,128234,128143],{"class":151},[92,128236,51417],{"class":102},[92,128238,72363],{"class":151},[92,128240,1269],{"class":102},[92,128242,128243,128245,128247,128249,128251],{"class":94,"line":1173},[92,128244,70548],{"class":151},[92,128246,51417],{"class":102},[92,128248,715],{"class":151},[92,128250,51472],{"class":98},[92,128252,1269],{"class":102},[92,128254,128255,128257,128259,128261,128263],{"class":94,"line":1179},[92,128256,70768],{"class":151},[92,128258,51417],{"class":102},[92,128260,1054],{"class":151},[92,128262,51472],{"class":98},[92,128264,1269],{"class":102},[92,128266,128267],{"class":94,"line":1193},[92,128268,1544],{"class":102},[63,128270,128272],{"id":128271},"_816-小米侧边栏","8.1.6 小米侧边栏",[1441,128274],{"style":126383,"src":128275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[83,128277,128279],{"className":127274,"code":128278,"language":127276,"meta":10,"style":10},"\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",[89,128280,128281,128286,128301,128320,128339,128358,128377,128396,128415,128434],{"__ignoreMap":10},[92,128282,128283],{"class":94,"line":95},[92,128284,128285],{"class":161},"\u003C!-- 小米侧边栏案例 -->\n",[92,128287,128288,128290,128292,128294,128296,128299],{"class":94,"line":11},[92,128289,1013],{"class":102},[92,128291,51591],{"class":51280},[92,128293,53466],{"class":1942},[92,128295,148],{"class":102},[92,128297,128298],{"class":207},"\"sidebar\"",[92,128300,51287],{"class":102},[92,128302,128303,128305,128307,128309,128311,128313,128316,128318],{"class":94,"line":1158},[92,128304,52124],{"class":102},[92,128306,341],{"class":51280},[92,128308,61037],{"class":1942},[92,128310,148],{"class":102},[92,128312,61042],{"class":207},[92,128314,128315],{"class":102},">手机 电话卡\u003C\u002F",[92,128317,341],{"class":51280},[92,128319,51287],{"class":102},[92,128321,128322,128324,128326,128328,128330,128332,128335,128337],{"class":94,"line":1173},[92,128323,52124],{"class":102},[92,128325,341],{"class":51280},[92,128327,61037],{"class":1942},[92,128329,148],{"class":102},[92,128331,61042],{"class":207},[92,128333,128334],{"class":102},">电视 盒子\u003C\u002F",[92,128336,341],{"class":51280},[92,128338,51287],{"class":102},[92,128340,128341,128343,128345,128347,128349,128351,128354,128356],{"class":94,"line":1179},[92,128342,52124],{"class":102},[92,128344,341],{"class":51280},[92,128346,61037],{"class":1942},[92,128348,148],{"class":102},[92,128350,61042],{"class":207},[92,128352,128353],{"class":102},">笔记本 平板\u003C\u002F",[92,128355,341],{"class":51280},[92,128357,51287],{"class":102},[92,128359,128360,128362,128364,128366,128368,128370,128373,128375],{"class":94,"line":1193},[92,128361,52124],{"class":102},[92,128363,341],{"class":51280},[92,128365,61037],{"class":1942},[92,128367,148],{"class":102},[92,128369,61042],{"class":207},[92,128371,128372],{"class":102},">出行 穿戴\u003C\u002F",[92,128374,341],{"class":51280},[92,128376,51287],{"class":102},[92,128378,128379,128381,128383,128385,128387,128389,128392,128394],{"class":94,"line":1199},[92,128380,52124],{"class":102},[92,128382,341],{"class":51280},[92,128384,61037],{"class":1942},[92,128386,148],{"class":102},[92,128388,61042],{"class":207},[92,128390,128391],{"class":102},">智能 路由器\u003C\u002F",[92,128393,341],{"class":51280},[92,128395,51287],{"class":102},[92,128397,128398,128400,128402,128404,128406,128408,128411,128413],{"class":94,"line":1290},[92,128399,52124],{"class":102},[92,128401,341],{"class":51280},[92,128403,61037],{"class":1942},[92,128405,148],{"class":102},[92,128407,61042],{"class":207},[92,128409,128410],{"class":102},">健康 儿童\u003C\u002F",[92,128412,341],{"class":51280},[92,128414,51287],{"class":102},[92,128416,128417,128419,128421,128423,128425,128427,128430,128432],{"class":94,"line":1296},[92,128418,52124],{"class":102},[92,128420,341],{"class":51280},[92,128422,61037],{"class":1942},[92,128424,148],{"class":102},[92,128426,61042],{"class":207},[92,128428,128429],{"class":102},">耳机 音响\u003C\u002F",[92,128431,341],{"class":51280},[92,128433,51287],{"class":102},[92,128435,128436,128438,128440],{"class":94,"line":1308},[92,128437,51765],{"class":102},[92,128439,51591],{"class":51280},[92,128441,51287],{"class":102},[83,128443,128445],{"className":126527,"code":128444,"language":126529,"meta":10,"style":10},".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",[89,128446,128447,128456,128466,128479,128491,128503,128515,128525,128536,128540,128550,128561],{"__ignoreMap":10},[92,128448,128449,128452,128454],{"class":94,"line":95},[92,128450,128451],{"class":1942},".sidebar",[92,128453,1377],{"class":51280},[92,128455,15552],{"class":102},[92,128457,128458,128460,128462,128464],{"class":94,"line":11},[92,128459,128143],{"class":151},[92,128461,51417],{"class":102},[92,128463,60849],{"class":151},[92,128465,1269],{"class":102},[92,128467,128468,128470,128472,128475,128477],{"class":94,"line":1158},[92,128469,70548],{"class":151},[92,128471,51417],{"class":102},[92,128473,128474],{"class":151},"234",[92,128476,51472],{"class":98},[92,128478,1269],{"class":102},[92,128480,128481,128483,128485,128487,128489],{"class":94,"line":1173},[92,128482,70768],{"class":151},[92,128484,51417],{"class":102},[92,128486,555],{"class":151},[92,128488,51472],{"class":98},[92,128490,1269],{"class":102},[92,128492,128493,128495,128497,128499,128501],{"class":94,"line":1179},[92,128494,127211],{"class":151},[92,128496,51417],{"class":102},[92,128498,555],{"class":151},[92,128500,51472],{"class":98},[92,128502,1269],{"class":102},[92,128504,128505,128507,128509,128511,128513],{"class":94,"line":1193},[92,128506,70803],{"class":151},[92,128508,51417],{"class":102},[92,128510,1054],{"class":151},[92,128512,51472],{"class":98},[92,128514,1269],{"class":102},[92,128516,128517,128519,128521,128523],{"class":94,"line":1199},[92,128518,70885],{"class":151},[92,128520,51417],{"class":102},[92,128522,60822],{"class":151},[92,128524,1269],{"class":102},[92,128526,128527,128529,128531,128534],{"class":94,"line":1290},[92,128528,70858],{"class":151},[92,128530,51417],{"class":102},[92,128532,128533],{"class":151},"#55585a",[92,128535,1269],{"class":102},[92,128537,128538],{"class":94,"line":1296},[92,128539,1544],{"class":102},[92,128541,128542,128544,128546,128548],{"class":94,"line":1308},[92,128543,128451],{"class":1942},[92,128545,1377],{"class":51280},[92,128547,60920],{"class":1942},[92,128549,15552],{"class":102},[92,128551,128552,128554,128556,128559],{"class":94,"line":1591},[92,128553,70858],{"class":151},[92,128555,51417],{"class":102},[92,128557,128558],{"class":151},"#ff6700",[92,128560,1269],{"class":102},[92,128562,128563],{"class":94,"line":1596},[92,128564,1544],{"class":102},[1441,128566],{"style":126383,"src":128567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[38,128569,128570],{},"行高=盒子高度：实现文字的垂直居中",[38,128572,128573],{},"原理讲解：",[1441,128575],{"style":126383,"src":128576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[33,128578,128580],{"id":128579},"_82-css背景","8.2 css背景",[38,128582,128583],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[63,128585,128587],{"id":128586},"_821-背景颜色","8.2.1 背景颜色",[38,128589,128590],{},"background-color:颜色值;",[38,128592,128593],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[63,128595,128597],{"id":128596},"_822-背景图片","8.2.2 背景图片",[38,128599,128600],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[83,128602,128604],{"className":126527,"code":128603,"language":126529,"meta":10,"style":10},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[89,128605,128606,128612,128628],{"__ignoreMap":10},[92,128607,128608,128610],{"class":94,"line":95},[92,128609,51591],{"class":51280},[92,128611,15552],{"class":102},[92,128613,128614,128617,128619,128621,128623,128626],{"class":94,"line":11},[92,128615,128616],{"class":151},"  background-image",[92,128618,51417],{"class":102},[92,128620,61706],{"class":151},[92,128622,103],{"class":102},[92,128624,128625],{"class":5196},"images\u002Fbg.png",[92,128627,2698],{"class":102},[92,128629,128630],{"class":94,"line":1158},[92,128631,1544],{"class":102},[240,128633,128634,128643],{},[243,128635,128636],{},[246,128637,128638,128641],{},[249,128639,128640],{"align":23716},"参数值",[249,128642,102671],{"align":23716},[287,128644,128645,128652],{},[246,128646,128647,128649],{},[292,128648,54717],{"align":23716},[292,128650,128651],{"align":23716},"无背景图（默认的）",[246,128653,128654,128656],{},[292,128655,61706],{"align":23716},[292,128657,128658],{"align":23716},"使用绝对或相对地址指定背景图像",[83,128660,128661],{"className":126527,"code":128603,"language":126529,"meta":10,"style":10},[89,128662,128663,128669,128683],{"__ignoreMap":10},[92,128664,128665,128667],{"class":94,"line":95},[92,128666,51591],{"class":51280},[92,128668,15552],{"class":102},[92,128670,128671,128673,128675,128677,128679,128681],{"class":94,"line":11},[92,128672,128616],{"class":151},[92,128674,51417],{"class":102},[92,128676,61706],{"class":151},[92,128678,103],{"class":102},[92,128680,128625],{"class":5196},[92,128682,2698],{"class":102},[92,128684,128685],{"class":94,"line":1158},[92,128686,1544],{"class":102},[38,128688,128689],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[63,128691,128693],{"id":128692},"_823-背景平铺","8.2.3 背景平铺",[83,128695,128697],{"className":126527,"code":128696,"language":126529,"meta":10,"style":10},"div {\n  background-repeat: no-repeat;\n}\n",[89,128698,128699,128705,128716],{"__ignoreMap":10},[92,128700,128701,128703],{"class":94,"line":95},[92,128702,51591],{"class":51280},[92,128704,15552],{"class":102},[92,128706,128707,128710,128712,128714],{"class":94,"line":11},[92,128708,128709],{"class":151},"  background-repeat",[92,128711,51417],{"class":102},[92,128713,61716],{"class":151},[92,128715,1269],{"class":102},[92,128717,128718],{"class":94,"line":1158},[92,128719,1544],{"class":102},[240,128721,128722,128730],{},[243,128723,128724],{},[246,128725,128726,128728],{},[249,128727,128640],{"align":23716},[249,128729,102671],{"align":23716},[287,128731,128732,128740,128747,128755],{},[246,128733,128734,128737],{},[292,128735,128736],{"align":23716},"repeat",[292,128738,128739],{"align":23716},"背景图像在纵向和横向上平铺（默认的）",[246,128741,128742,128744],{},[292,128743,61716],{"align":23716},[292,128745,128746],{"align":23716},"背景图像不平铺",[246,128748,128749,128752],{},[292,128750,128751],{"align":23716},"repeat-x",[292,128753,128754],{"align":23716},"背景图像在横向上平铺",[246,128756,128757,128760],{},[292,128758,128759],{"align":23716},"repeat-y",[292,128761,128762],{"align":23716},"背景图像在纵向平铺",[63,128764,128766],{"id":128765},"_824-背景图片位置","8.2.4 背景图片位置",[83,128768,128770],{"className":126527,"code":128769,"language":126529,"meta":10,"style":10},"\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",[89,128771,128772,128777,128783,128797,128801,128806,128812,128828,128832,128837,128843,128857],{"__ignoreMap":10},[92,128773,128774],{"class":94,"line":95},[92,128775,128776],{"class":161},"\u002F* 方位名词 *\u002F\n",[92,128778,128779,128781],{"class":94,"line":11},[92,128780,51591],{"class":51280},[92,128782,15552],{"class":102},[92,128784,128785,128788,128790,128792,128795],{"class":94,"line":1158},[92,128786,128787],{"class":151},"  background-position",[92,128789,51417],{"class":102},[92,128791,51572],{"class":151},[92,128793,128794],{"class":151}," top",[92,128796,1269],{"class":102},[92,128798,128799],{"class":94,"line":1173},[92,128800,1544],{"class":102},[92,128802,128803],{"class":94,"line":1179},[92,128804,128805],{"class":161},"\u002F* 精确单位 *\u002F\n",[92,128807,128808,128810],{"class":94,"line":1193},[92,128809,51591],{"class":51280},[92,128811,15552],{"class":102},[92,128813,128814,128816,128818,128820,128822,128824,128826],{"class":94,"line":1199},[92,128815,128787],{"class":151},[92,128817,51417],{"class":102},[92,128819,803],{"class":151},[92,128821,51472],{"class":98},[92,128823,57484],{"class":151},[92,128825,51472],{"class":98},[92,128827,1269],{"class":102},[92,128829,128830],{"class":94,"line":1290},[92,128831,1544],{"class":102},[92,128833,128834],{"class":94,"line":1296},[92,128835,128836],{"class":161},"\u002F* 混合单位 *\u002F\n",[92,128838,128839,128841],{"class":94,"line":1308},[92,128840,51591],{"class":51280},[92,128842,15552],{"class":102},[92,128844,128845,128847,128849,128851,128853,128855],{"class":94,"line":1591},[92,128846,128787],{"class":151},[92,128848,51417],{"class":102},[92,128850,803],{"class":151},[92,128852,51472],{"class":98},[92,128854,17124],{"class":151},[92,128856,1269],{"class":102},[92,128858,128859],{"class":94,"line":1596},[92,128860,1544],{"class":102},[38,128862,128863],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[240,128865,128866,128874],{},[243,128867,128868],{},[246,128869,128870,128872],{},[249,128871,128640],{"align":23716},[249,128873,25850],{"align":23716},[287,128875,128876,128883],{},[246,128877,128878,128880],{},[292,128879,51948],{"align":23716},[292,128881,128882],{"align":23716},"百分数|由浮点数和单位标识符组成的长度值",[246,128884,128885,128888],{},[292,128886,128887],{"align":23716},"position",[292,128889,128890],{"align":23716},"top|center|bottom|left|center|right 方位名词",[38,128892,128893],{},"其他说明：",[38,128895,128896],{},"①参数是方位名词",[38,128898,128899],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[38,128901,128902],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[38,128904,128905],{},"②参数是精确单位",[38,128907,128908],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[38,128910,128911],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[38,128913,128914],{},"③参数是混合单位",[38,128916,128917],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[63,128919,128921],{"id":128920},"_825-背景图片固定","8.2.5 背景图片固定",[83,128923,128925],{"className":126527,"code":128924,"language":126529,"meta":10,"style":10},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[89,128926,128927,128932,128938,128950,128954,128959,128965,128975],{"__ignoreMap":10},[92,128928,128929],{"class":94,"line":95},[92,128930,128931],{"class":161},"\u002F* 背景滚动（默认） *\u002F\n",[92,128933,128934,128936],{"class":94,"line":11},[92,128935,51591],{"class":51280},[92,128937,15552],{"class":102},[92,128939,128940,128943,128945,128948],{"class":94,"line":1158},[92,128941,128942],{"class":151},"  background-attachment",[92,128944,51417],{"class":102},[92,128946,128947],{"class":151},"scroll",[92,128949,1269],{"class":102},[92,128951,128952],{"class":94,"line":1173},[92,128953,1544],{"class":102},[92,128955,128956],{"class":94,"line":1179},[92,128957,128958],{"class":161},"\u002F* 背景固定 *\u002F\n",[92,128960,128961,128963],{"class":94,"line":1193},[92,128962,51591],{"class":51280},[92,128964,15552],{"class":102},[92,128966,128967,128969,128971,128973],{"class":94,"line":1199},[92,128968,128942],{"class":151},[92,128970,51417],{"class":102},[92,128972,86213],{"class":151},[92,128974,1269],{"class":102},[92,128976,128977],{"class":94,"line":1290},[92,128978,1544],{"class":102},[240,128980,128981,128990],{},[243,128982,128983],{},[246,128984,128985,128988],{},[249,128986,128987],{"align":23716},"参数",[249,128989,102671],{"align":23716},[287,128991,128992,128999],{},[246,128993,128994,128996],{},[292,128995,128947],{"align":23716},[292,128997,128998],{"align":23716},"背景图像是随对象内容滚动",[246,129000,129001,129003],{},[292,129002,86213],{"align":23716},[292,129004,129005],{"align":23716},"背景图像固定",[63,129007,129009],{"id":129008},"_826-背景样式合写","8.2.6 背景样式合写",[83,129011,129013],{"className":126527,"code":129012,"language":126529,"meta":10,"style":10},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[89,129014,129015,129020,129026,129054],{"__ignoreMap":10},[92,129016,129017],{"class":94,"line":95},[92,129018,129019],{"class":161},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[92,129021,129022,129024],{"class":94,"line":11},[92,129023,51591],{"class":51280},[92,129025,15552],{"class":102},[92,129027,129028,129030,129032,129034,129037,129039,129041,129043,129045,129048,129050,129052],{"class":94,"line":1158},[92,129029,70591],{"class":151},[92,129031,51417],{"class":102},[92,129033,60822],{"class":151},[92,129035,129036],{"class":151}," url",[92,129038,103],{"class":102},[92,129040,128625],{"class":5196},[92,129042,13694],{"class":102},[92,129044,61716],{"class":151},[92,129046,129047],{"class":151}," fixed",[92,129049,17124],{"class":151},[92,129051,128794],{"class":151},[92,129053,1269],{"class":102},[92,129055,129056],{"class":94,"line":1173},[92,129057,1544],{"class":102},[63,129059,129061],{"id":129060},"_827-背景色半透明","8.2.7 背景色半透明",[83,129063,129065],{"className":126527,"code":129064,"language":126529,"meta":10,"style":10},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[89,129066,129067,129073,129099],{"__ignoreMap":10},[92,129068,129069,129071],{"class":94,"line":95},[92,129070,51591],{"class":51280},[92,129072,15552],{"class":102},[92,129074,129075,129077,129079,129081,129083,129085,129087,129089,129091,129093,129095,129097],{"class":94,"line":11},[92,129076,70591],{"class":151},[92,129078,51417],{"class":102},[92,129080,55090],{"class":151},[92,129082,103],{"class":102},[92,129084,294],{"class":151},[92,129086,12415],{"class":102},[92,129088,294],{"class":151},[92,129090,12415],{"class":102},[92,129092,294],{"class":151},[92,129094,12415],{"class":102},[92,129096,100501],{"class":151},[92,129098,2698],{"class":102},[92,129100,129101],{"class":94,"line":1158},[92,129102,1544],{"class":102},[38,129104,99376],{},[38,129106,129107],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[38,129109,129110],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[38,129112,129113],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[38,129115,129116],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[63,129118,129120],{"id":129119},"_828-总结","8.2.8 总结",[240,129122,129123,129134],{},[243,129124,129125],{},[246,129126,129127,129130,129132],{},[249,129128,129129],{"align":23716},"属性",[249,129131,102671],{"align":23716},[249,129133,255],{"align":23716},[287,129135,129136,129147,129158,129169,129180,129191,129202],{},[246,129137,129138,129141,129144],{},[292,129139,129140],{"align":23716},"background-color",[292,129142,129143],{"align":23716},"背景颜色",[292,129145,129146],{"align":23716},"预定义的颜色值\u002F十六进制\u002FRGB代码",[246,129148,129149,129152,129155],{},[292,129150,129151],{"align":23716},"background-image",[292,129153,129154],{"align":23716},"背景图片",[292,129156,129157],{"align":23716},"url(图片路径)",[246,129159,129160,129163,129166],{},[292,129161,129162],{"align":23716},"background-repeat",[292,129164,129165],{"align":23716},"是否平铺",[292,129167,129168],{"align":23716},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[246,129170,129171,129174,129177],{},[292,129172,129173],{"align":23716},"background-position",[292,129175,129176],{"align":23716},"背景位置",[292,129178,129179],{"align":23716},"length\u002Fposition 分别是x和y坐标",[246,129181,129182,129185,129188],{},[292,129183,129184],{"align":23716},"background-attachment",[292,129186,129187],{"align":23716},"背景附着",[292,129189,129190],{"align":23716},"scroll(背景滚动) \u002Ffixed (背景固定)",[246,129192,129193,129196,129199],{},[292,129194,129195],{"align":23716},"背景简写",[292,129197,129198],{"align":23716},"书写更简单",[292,129200,129201],{"align":23716},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[246,129203,129204,129207,129210],{},[292,129205,129206],{"align":23716},"背景半透明",[292,129208,129209],{"align":23716},"背景颜色半透明",[292,129211,129212],{"align":23716},"background: rgba(0,0,0.3); 后面必须是4个值",[38,129214,129215],{},"颜色渐变：",[1441,129217],{"style":126383,"src":129218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1441,129220],{"style":126383,"src":129221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[63,129223,129225],{"id":129224},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[83,129227,129229],{"className":127274,"code":129228,"language":127276,"meta":10,"style":10},"\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",[89,129230,129231,129246,129265,129284,129303,129322,129341],{"__ignoreMap":10},[92,129232,129233,129235,129237,129239,129241,129244],{"class":94,"line":95},[92,129234,1013],{"class":102},[92,129236,51591],{"class":51280},[92,129238,53466],{"class":1942},[92,129240,148],{"class":102},[92,129242,129243],{"class":207},"\"nav\"",[92,129245,51287],{"class":102},[92,129247,129248,129250,129252,129254,129256,129258,129261,129263],{"class":94,"line":11},[92,129249,52124],{"class":102},[92,129251,341],{"class":51280},[92,129253,61037],{"class":1942},[92,129255,148],{"class":102},[92,129257,61042],{"class":207},[92,129259,129260],{"class":102},">五彩导航1\u003C\u002F",[92,129262,341],{"class":51280},[92,129264,51287],{"class":102},[92,129266,129267,129269,129271,129273,129275,129277,129280,129282],{"class":94,"line":1158},[92,129268,52124],{"class":102},[92,129270,341],{"class":51280},[92,129272,61037],{"class":1942},[92,129274,148],{"class":102},[92,129276,61042],{"class":207},[92,129278,129279],{"class":102},">五彩导航2\u003C\u002F",[92,129281,341],{"class":51280},[92,129283,51287],{"class":102},[92,129285,129286,129288,129290,129292,129294,129296,129299,129301],{"class":94,"line":1173},[92,129287,52124],{"class":102},[92,129289,341],{"class":51280},[92,129291,61037],{"class":1942},[92,129293,148],{"class":102},[92,129295,61042],{"class":207},[92,129297,129298],{"class":102},">五彩导航3\u003C\u002F",[92,129300,341],{"class":51280},[92,129302,51287],{"class":102},[92,129304,129305,129307,129309,129311,129313,129315,129318,129320],{"class":94,"line":1179},[92,129306,52124],{"class":102},[92,129308,341],{"class":51280},[92,129310,61037],{"class":1942},[92,129312,148],{"class":102},[92,129314,61042],{"class":207},[92,129316,129317],{"class":102},">五彩导航4\u003C\u002F",[92,129319,341],{"class":51280},[92,129321,51287],{"class":102},[92,129323,129324,129326,129328,129330,129332,129334,129337,129339],{"class":94,"line":1193},[92,129325,52124],{"class":102},[92,129327,341],{"class":51280},[92,129329,61037],{"class":1942},[92,129331,148],{"class":102},[92,129333,61042],{"class":207},[92,129335,129336],{"class":102},">五彩导航5\u003C\u002F",[92,129338,341],{"class":51280},[92,129340,51287],{"class":102},[92,129342,129343,129345,129347],{"class":94,"line":1199},[92,129344,51765],{"class":102},[92,129346,51591],{"class":51280},[92,129348,51287],{"class":102},[83,129350,129352],{"className":126527,"code":129351,"language":126529,"meta":10,"style":10},".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",[89,129353,129354,129363,129373,129385,129397,129407,129419,129429,129433,129458,129481,129504,129527],{"__ignoreMap":10},[92,129355,129356,129359,129361],{"class":94,"line":95},[92,129357,129358],{"class":1942},".nav",[92,129360,1377],{"class":51280},[92,129362,15552],{"class":102},[92,129364,129365,129367,129369,129371],{"class":94,"line":11},[92,129366,128143],{"class":151},[92,129368,51417],{"class":102},[92,129370,72363],{"class":151},[92,129372,1269],{"class":102},[92,129374,129375,129377,129379,129381,129383],{"class":94,"line":1158},[92,129376,70548],{"class":151},[92,129378,51417],{"class":102},[92,129380,920],{"class":151},[92,129382,51472],{"class":98},[92,129384,1269],{"class":102},[92,129386,129387,129389,129391,129393,129395],{"class":94,"line":1173},[92,129388,70768],{"class":151},[92,129390,51417],{"class":102},[92,129392,959],{"class":151},[92,129394,51472],{"class":98},[92,129396,1269],{"class":102},[92,129398,129399,129401,129403,129405],{"class":94,"line":1179},[92,129400,70506],{"class":151},[92,129402,51417],{"class":102},[92,129404,51572],{"class":151},[92,129406,1269],{"class":102},[92,129408,129409,129411,129413,129415,129417],{"class":94,"line":1193},[92,129410,127211],{"class":151},[92,129412,51417],{"class":102},[92,129414,959],{"class":151},[92,129416,51472],{"class":98},[92,129418,1269],{"class":102},[92,129420,129421,129423,129425,129427],{"class":94,"line":1199},[92,129422,70885],{"class":151},[92,129424,51417],{"class":102},[92,129426,60822],{"class":151},[92,129428,1269],{"class":102},[92,129430,129431],{"class":94,"line":1290},[92,129432,1544],{"class":102},[92,129434,129435,129437,129439,129442,129444,129446,129449,129451,129453,129455],{"class":94,"line":1296},[92,129436,129358],{"class":1942},[92,129438,1377],{"class":51280},[92,129440,129441],{"class":1942},":nth-child",[92,129443,103],{"class":102},[92,129445,320],{"class":151},[92,129447,129448],{"class":102},") { ",[92,129450,129140],{"class":151},[92,129452,51417],{"class":102},[92,129454,128558],{"class":151},[92,129456,129457],{"class":102},"; }\n",[92,129459,129460,129462,129464,129466,129468,129470,129472,129474,129476,129479],{"class":94,"line":1308},[92,129461,129358],{"class":1942},[92,129463,1377],{"class":51280},[92,129465,129441],{"class":1942},[92,129467,103],{"class":102},[92,129469,180],{"class":151},[92,129471,129448],{"class":102},[92,129473,129140],{"class":151},[92,129475,51417],{"class":102},[92,129477,129478],{"class":151},"#ff0000",[92,129480,129457],{"class":102},[92,129482,129483,129485,129487,129489,129491,129493,129495,129497,129499,129502],{"class":94,"line":1591},[92,129484,129358],{"class":1942},[92,129486,1377],{"class":51280},[92,129488,129441],{"class":1942},[92,129490,103],{"class":102},[92,129492,174],{"class":151},[92,129494,129448],{"class":102},[92,129496,129140],{"class":151},[92,129498,51417],{"class":102},[92,129500,129501],{"class":151},"#00a4ff",[92,129503,129457],{"class":102},[92,129505,129506,129508,129510,129512,129514,129516,129518,129520,129522,129525],{"class":94,"line":1596},[92,129507,129358],{"class":1942},[92,129509,1377],{"class":51280},[92,129511,129441],{"class":1942},[92,129513,103],{"class":102},[92,129515,396],{"class":151},[92,129517,129448],{"class":102},[92,129519,129140],{"class":151},[92,129521,51417],{"class":102},[92,129523,129524],{"class":151},"#ff00ff",[92,129526,129457],{"class":102},[92,129528,129529,129531,129533,129535,129537,129539,129541,129543,129545,129548],{"class":94,"line":1602},[92,129530,129358],{"class":1942},[92,129532,1377],{"class":51280},[92,129534,129441],{"class":1942},[92,129536,103],{"class":102},[92,129538,422],{"class":151},[92,129540,129448],{"class":102},[92,129542,129140],{"class":151},[92,129544,51417],{"class":102},[92,129546,129547],{"class":151},"#00ff00",[92,129549,129457],{"class":102},[33,129551,129553],{"id":129552},"_83-css三大特性","8.3 css三大特性",[63,129555,129557],{"id":129556},"_831-层叠性","8.3.1 层叠性",[38,129559,129560],{},"为了解决样式冲突问题",[38,129562,129563],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[38,129565,129566],{},"   ②样式不冲突，不会层叠",[63,129568,129570],{"id":129569},"_832-继承性","8.3.2 继承性",[38,129572,129573],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[38,129575,129576],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[83,129578,129580],{"className":126527,"code":129579,"language":126529,"meta":10,"style":10},"p {\n  color: #333;\n}\n",[89,129581,129582,129588,129598],{"__ignoreMap":10},[92,129583,129584,129586],{"class":94,"line":95},[92,129585,38],{"class":51280},[92,129587,15552],{"class":102},[92,129589,129590,129592,129594,129596],{"class":94,"line":11},[92,129591,70885],{"class":151},[92,129593,51417],{"class":102},[92,129595,62349],{"class":151},[92,129597,1269],{"class":102},[92,129599,129600],{"class":94,"line":1158},[92,129601,1544],{"class":102},[1441,129603],{"style":126383,"src":129604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[38,129606,129607],{},"解释：①行高可以跟单位也可以不跟单位",[38,129609,129610],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[38,129612,129613],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[38,129615,129616],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[63,129618,129620],{"id":129619},"_833-优先级","8.3.3 优先级",[46,129622,129623,129626],{},[49,129624,129625],{},"选择器相同，则执行层叠性",[49,129627,129628],{},"选择器不同，则根据选择器权重执行",[240,129630,129631,129641],{},[243,129632,129633],{},[246,129634,129635,129638],{},[249,129636,129637],{"align":23716},"选择器",[249,129639,129640],{"align":23716},"选择器权重",[287,129642,129643,129651,129659,129667,129675,129683],{},[246,129644,129645,129648],{},[292,129646,129647],{"align":23716},"继承 或者*",[292,129649,129650],{"align":23716},"0，0，0，0",[246,129652,129653,129656],{},[292,129654,129655],{"align":23716},"标签选择器",[292,129657,129658],{"align":23716},"0，0，0，1",[246,129660,129661,129664],{},[292,129662,129663],{"align":23716},"类选择器，伪类选择器",[292,129665,129666],{"align":23716},"0，0，1，0",[246,129668,129669,129672],{},[292,129670,129671],{"align":23716},"ID选择器",[292,129673,129674],{"align":23716},"0，1，0，0",[246,129676,129677,129680],{},[292,129678,129679],{"align":23716},"行内样式",[292,129681,129682],{"align":23716},"1，0，0，0",[246,129684,129685,129688],{},[292,129686,129687],{"align":23716},"！important",[292,129689,129690],{"align":23716},"无穷大",[38,129692,129693],{},"! important用法：",[83,129695,129697],{"className":126527,"code":129696,"language":126529,"meta":10,"style":10},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[89,129698,129699,129704,129710,129723,129727,129732,129738,129748],{"__ignoreMap":10},[92,129700,129701],{"class":94,"line":95},[92,129702,129703],{"class":161},"\u002F* !important 拥有最高优先级 *\u002F\n",[92,129705,129706,129708],{"class":94,"line":11},[92,129707,51591],{"class":51280},[92,129709,15552],{"class":102},[92,129711,129712,129714,129716,129718,129721],{"class":94,"line":1158},[92,129713,70885],{"class":151},[92,129715,51417],{"class":102},[92,129717,51625],{"class":151},[92,129719,129720],{"class":98}," !important",[92,129722,1269],{"class":102},[92,129724,129725],{"class":94,"line":1173},[92,129726,1544],{"class":102},[92,129728,129729],{"class":94,"line":1179},[92,129730,129731],{"class":161},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[92,129733,129734,129736],{"class":94,"line":1193},[92,129735,51591],{"class":51280},[92,129737,15552],{"class":102},[92,129739,129740,129742,129744,129746],{"class":94,"line":1199},[92,129741,70885],{"class":151},[92,129743,51417],{"class":102},[92,129745,57401],{"class":151},[92,129747,1269],{"class":102},[92,129749,129750],{"class":94,"line":1290},[92,129751,1544],{"class":102},[38,129753,129754],{},"优先级注意点：",[38,129756,129757],{},"①权重是有4组数字组成,但是不会有进位",[38,129759,129760],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[38,129762,129763],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[38,129765,129766],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[38,129768,129769],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[38,129771,129772],{},"⑥复合选择器",[240,129774,129775,129785],{},[243,129776,129777],{},[246,129778,129779,129782],{},[249,129780,129781],{"align":23716},"div ul li",[249,129783,129784],{"align":23716},"0,0,0,3",[287,129786,129787,129795,129803],{},[246,129788,129789,129792],{},[292,129790,129791],{"align":23716},".nav ul li",[292,129793,129794],{"align":23716},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[246,129796,129797,129800],{},[292,129798,129799],{"align":23716},"a:hover",[292,129801,129802],{"align":23716},"0,0,1,1",[246,129804,129805,129808],{},[292,129806,129807],{"align":23716},".nav a",[292,129809,129802],{"align":23716},[5106,129811,129812],{},"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":10,"searchDepth":11,"depth":11,"links":129814},[129815,129823,129834],{"id":127923,"depth":11,"text":127924,"children":129816},[129817,129818,129819,129820,129821,129822],{"id":127936,"depth":1158,"text":127937},{"id":128008,"depth":1158,"text":128009},{"id":128080,"depth":1158,"text":128081},{"id":128111,"depth":1158,"text":128112},{"id":128118,"depth":1158,"text":128119},{"id":128271,"depth":1158,"text":128272},{"id":128579,"depth":11,"text":128580,"children":129824},[129825,129826,129827,129828,129829,129830,129831,129832,129833],{"id":128586,"depth":1158,"text":128587},{"id":128596,"depth":1158,"text":128597},{"id":128692,"depth":1158,"text":128693},{"id":128765,"depth":1158,"text":128766},{"id":128920,"depth":1158,"text":128921},{"id":129008,"depth":1158,"text":129009},{"id":129060,"depth":1158,"text":129061},{"id":129119,"depth":1158,"text":129120},{"id":129224,"depth":1158,"text":129225},{"id":129552,"depth":11,"text":129553,"children":129835},[129836,129837,129838],{"id":129556,"depth":1158,"text":129557},{"id":129569,"depth":1158,"text":129570},{"id":129619,"depth":1158,"text":129620},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127915,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129845,"title":129846,"body":129847,"description":13,"extension":14,"meta":131437,"navigation":17,"path":131438,"seo":131439,"stem":131440,"__hash__":131441},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129848,"toc":131416},[129849,129852,129856,129859,129862,129865,129868,129871,129874,129877,129881,129889,129926,129962,129965,129979,129984,130018,130021,130114,130119,130122,130152,130155,130160,130168,130172,130179,130225,130269,130274,130277,130280,130283,130286,130289,130292,130294,130297,130301,130306,130350,130355,130358,130361,130398,130403,130406,130409,130412,130415,130447,130450,130453,130456,130488,130491,130494,130497,130501,130504,130536,130539,130543,130563,130566,130574,130577,130581,130586,130589,130621,130626,130629,130667,130671,130676,130679,130682,130713,130716,130733,130738,130790,130850,130855,130909,130947,130951,130955,130958,130962,130970,130973,130975,130986,130991,131039,131073,131076,131079,131082,131085,131129,131132,131135,131138,131141,131144,131147,131191,131194,131197,131200,131203,131206,131209,131215,131218,131262,131265,131268,131271,131274,131277,131321,131324,131326,131329,131333,131337,131375,131379,131382,131385,131389,131397,131401,131404,131407,131410,131413],[29,129850,129846],{"id":129851},"_9-css盒模型浮动与切图",[33,129853,129855],{"id":129854},"_91-盒子模型","9.1 盒子模型",[38,129857,129858],{},"利用盒子来设计网页",[38,129860,129861],{},"盒子包含：边框、外边距、内边距、实际内容",[38,129863,129864],{},"网页布局设置：",[38,129866,129867],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[38,129869,129870],{},"②利用css设置好盒子样式，然后摆放到相应位置",[38,129872,129873],{},"③往盒子里装内容",[1441,129875],{"style":126383,"src":129876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[63,129878,129880],{"id":129879},"_911-边框border","9.1.1 边框（border）",[46,129882,129883,129886],{},[49,129884,129885],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[49,129887,129888],{},"语法",[83,129890,129892],{"className":126527,"code":129891,"language":126529,"meta":10,"style":10},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[89,129893,129894,129899,129905,129922],{"__ignoreMap":10},[92,129895,129896],{"class":94,"line":95},[92,129897,129898],{"class":161},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[92,129900,129901,129903],{"class":94,"line":11},[92,129902,51591],{"class":51280},[92,129904,15552],{"class":102},[92,129906,129907,129909,129911,129913,129915,129917,129920],{"class":94,"line":1158},[92,129908,70876],{"class":151},[92,129910,51417],{"class":102},[92,129912,320],{"class":151},[92,129914,51472],{"class":98},[92,129916,51501],{"class":151},[92,129918,129919],{"class":151}," #ccc",[92,129921,1269],{"class":102},[92,129923,129924],{"class":94,"line":1173},[92,129925,1544],{"class":102},[240,129927,129928,129936],{},[243,129929,129930],{},[246,129931,129932,129934],{},[249,129933,129129],{"align":23716},[249,129935,102671],{"align":23716},[287,129937,129938,129946,129954],{},[246,129939,129940,129943],{},[292,129941,129942],{"align":23716},"border-width",[292,129944,129945],{"align":23716},"定义边框粗细，单位是px",[246,129947,129948,129951],{},[292,129949,129950],{"align":23716},"border-style",[292,129952,129953],{"align":23716},"边框的样式",[246,129955,129956,129959],{},[292,129957,129958],{"align":23716},"border-color",[292,129960,129961],{"align":23716},"边框的颜色",[38,129963,129964],{},"边框样式 border-style 可以设置如下值：",[1110,129966,129967,129970,129973,129976],{},[49,129968,129969],{},"none：没有边框即忽略所有边框的宽度（默认值）",[49,129971,129972],{},"solid：边框为单实线(最为常用的)",[49,129974,129975],{},"dashed：边框为虚线",[49,129977,129978],{},"dotted：边框为点线",[46,129980,129981],{"start":1158},[49,129982,129983],{},"边框的合写分写",[83,129985,129986],{"className":126527,"code":129891,"language":126529,"meta":10,"style":10},[89,129987,129988,129992,129998,130014],{"__ignoreMap":10},[92,129989,129990],{"class":94,"line":95},[92,129991,129898],{"class":161},[92,129993,129994,129996],{"class":94,"line":11},[92,129995,51591],{"class":51280},[92,129997,15552],{"class":102},[92,129999,130000,130002,130004,130006,130008,130010,130012],{"class":94,"line":1158},[92,130001,70876],{"class":151},[92,130003,51417],{"class":102},[92,130005,320],{"class":151},[92,130007,51472],{"class":98},[92,130009,51501],{"class":151},[92,130011,129919],{"class":151},[92,130013,1269],{"class":102},[92,130015,130016],{"class":94,"line":1173},[92,130017,1544],{"class":102},[38,130019,130020],{},"边框分开写法：",[83,130022,130024],{"className":126527,"code":130023,"language":126529,"meta":10,"style":10},"\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",[89,130025,130026,130031,130037,130055,130073,130092,130110],{"__ignoreMap":10},[92,130027,130028],{"class":94,"line":95},[92,130029,130030],{"class":161},"\u002F* 边框分开写法 *\u002F\n",[92,130032,130033,130035],{"class":94,"line":11},[92,130034,51591],{"class":51280},[92,130036,15552],{"class":102},[92,130038,130039,130042,130044,130046,130048,130050,130053],{"class":94,"line":1158},[92,130040,130041],{"class":151},"  border-top",[92,130043,51417],{"class":102},[92,130045,320],{"class":151},[92,130047,51472],{"class":98},[92,130049,51501],{"class":151},[92,130051,130052],{"class":151}," #000",[92,130054,1269],{"class":102},[92,130056,130057,130060,130062,130064,130066,130068,130071],{"class":94,"line":1173},[92,130058,130059],{"class":151},"  border-right",[92,130061,51417],{"class":102},[92,130063,180],{"class":151},[92,130065,51472],{"class":98},[92,130067,62221],{"class":151},[92,130069,130070],{"class":151}," #333",[92,130072,1269],{"class":102},[92,130074,130075,130078,130080,130082,130084,130087,130090],{"class":94,"line":1179},[92,130076,130077],{"class":151},"  border-bottom",[92,130079,51417],{"class":102},[92,130081,174],{"class":151},[92,130083,51472],{"class":98},[92,130085,130086],{"class":151}," dotted",[92,130088,130089],{"class":151}," #666",[92,130091,1269],{"class":102},[92,130093,130094,130097,130099,130101,130103,130105,130108],{"class":94,"line":1193},[92,130095,130096],{"class":151},"  border-left",[92,130098,51417],{"class":102},[92,130100,320],{"class":151},[92,130102,51472],{"class":98},[92,130104,51501],{"class":151},[92,130106,130107],{"class":151}," #999",[92,130109,1269],{"class":102},[92,130111,130112],{"class":94,"line":1199},[92,130113,1544],{"class":102},[46,130115,130116],{"start":1173},[49,130117,130118],{},"表格的细线边框",[38,130120,130121],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[83,130123,130125],{"className":126527,"code":130124,"language":126529,"meta":10,"style":10},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[89,130126,130127,130132,130138,130148],{"__ignoreMap":10},[92,130128,130129],{"class":94,"line":95},[92,130130,130131],{"class":161},"\u002F* 表格细线边框合并 *\u002F\n",[92,130133,130134,130136],{"class":94,"line":11},[92,130135,240],{"class":51280},[92,130137,15552],{"class":102},[92,130139,130140,130142,130144,130146],{"class":94,"line":1158},[92,130141,70558],{"class":151},[92,130143,51417],{"class":102},[92,130145,65015],{"class":151},[92,130147,1269],{"class":102},[92,130149,130150],{"class":94,"line":1173},[92,130151,1544],{"class":102},[38,130153,130154],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[46,130156,130157],{"start":1179},[49,130158,130159],{},"解决边框额外增加盒子的实际大小的方法：",[1110,130161,130162,130165],{},[49,130163,130164],{},"测量盒子大小的时候,不量边框",[49,130166,130167],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[63,130169,130171],{"id":130170},"_912-内边距","9.1.2 内边距",[46,130173,130174,130177],{},[49,130175,130176],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[49,130178,129888],{},[240,130180,130181,130191],{},[243,130182,130183],{},[246,130184,130185,130188],{},[249,130186,130187],{"align":23716},"值的个数",[249,130189,130190],{"align":23716},"表达意思",[287,130192,130193,130201,130209,130217],{},[246,130194,130195,130198],{},[292,130196,130197],{"align":23716},"padding: 5px;",[292,130199,130200],{"align":23716},"1个值，代表上下左右都有5个元素",[246,130202,130203,130206],{},[292,130204,130205],{"align":23716},"padding: 5px 10px;",[292,130207,130208],{"align":23716},"2个值，代表上下内边距为5像素，左右内边距为10像素",[246,130210,130211,130214],{},[292,130212,130213],{"align":23716},"padding: 5px 10px 20px;",[292,130215,130216],{"align":23716},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[246,130218,130219,130222],{},[292,130220,130221],{"align":23716},"padding: 5px 10px 20px 30px;",[292,130223,130224],{"align":23716},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[240,130226,130227,130235],{},[243,130228,130229],{},[246,130230,130231,130233],{},[249,130232,129129],{"align":23716},[249,130234,102671],{"align":23716},[287,130236,130237,130245,130253,130261],{},[246,130238,130239,130242],{},[292,130240,130241],{"align":23716},"padding-left",[292,130243,130244],{"align":23716},"左内边距",[246,130246,130247,130250],{},[292,130248,130249],{"align":23716},"padding-right",[292,130251,130252],{"align":23716},"右内边距",[246,130254,130255,130258],{},[292,130256,130257],{"align":23716},"padding-top",[292,130259,130260],{"align":23716},"上内边距",[246,130262,130263,130266],{},[292,130264,130265],{"align":23716},"padding-bottom",[292,130267,130268],{"align":23716},"下内边距",[46,130270,130271],{"start":1158},[49,130272,130273],{},"内边距会影响盒子的实际大小",[38,130275,130276],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[38,130278,130279],{},"①内容和边框有了距离，添加了内边距",[38,130281,130282],{},"②padding影响了盒子实际大小",[38,130284,130285],{},"内边距对盒子大小的影响：",[38,130287,130288],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[38,130290,130291],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[38,130293,95200],{},[38,130295,130296],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[63,130298,130300],{"id":130299},"_913-外边距","9.1.3 外边距",[46,130302,130303],{},[49,130304,130305],{},"控制盒子与盒子之间的距离",[240,130307,130308,130316],{},[243,130309,130310],{},[246,130311,130312,130314],{},[249,130313,129129],{"align":23716},[249,130315,102671],{"align":23716},[287,130317,130318,130326,130334,130342],{},[246,130319,130320,130323],{},[292,130321,130322],{"align":23716},"margin-left",[292,130324,130325],{"align":23716},"左外边距",[246,130327,130328,130331],{},[292,130329,130330],{"align":23716},"margin-right",[292,130332,130333],{"align":23716},"右外边距",[246,130335,130336,130339],{},[292,130337,130338],{"align":23716},"margin-top",[292,130340,130341],{"align":23716},"上外边距",[246,130343,130344,130347],{},[292,130345,130346],{"align":23716},"margin-bottom",[292,130348,130349],{"align":23716},"下外边距",[46,130351,130352],{"start":11},[49,130353,130354],{},"外边距可以让块级盒子水平居中的两个条件：",[38,130356,130357],{},"①盒子必须指定了宽度（width）",[38,130359,130360],{},"②盒子左右的外边距都设置为 auto",[83,130362,130364],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[89,130365,130366,130371,130378,130394],{"__ignoreMap":10},[92,130367,130368],{"class":94,"line":95},[92,130369,130370],{"class":161},"\u002F* margin 复合写法（同上） *\u002F\n",[92,130372,130373,130376],{"class":94,"line":11},[92,130374,130375],{"class":1942},".box",[92,130377,15552],{"class":102},[92,130379,130380,130382,130384,130386,130388,130391],{"class":94,"line":1158},[92,130381,70450],{"class":151},[92,130383,51417],{"class":102},[92,130385,294],{"class":151},[92,130387,51536],{"class":151},[92,130389,130390],{"class":102},";  ",[92,130392,130393],{"class":161},"\u002F* 块级盒子水平居中 *\u002F\n",[92,130395,130396],{"class":94,"line":1173},[92,130397,1544],{"class":102},[46,130399,130400],{"start":1158},[49,130401,130402],{},"外边距塌陷问题",[38,130404,130405],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1441,130407],{"style":126383,"src":130408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[38,130410,130411],{},"解决方案：",[38,130413,130414],{},"①可以为父亲元素定义上边距",[83,130416,130417],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},[89,130418,130419,130423,130429,130443],{"__ignoreMap":10},[92,130420,130421],{"class":94,"line":95},[92,130422,130370],{"class":161},[92,130424,130425,130427],{"class":94,"line":11},[92,130426,130375],{"class":1942},[92,130428,15552],{"class":102},[92,130430,130431,130433,130435,130437,130439,130441],{"class":94,"line":1158},[92,130432,70450],{"class":151},[92,130434,51417],{"class":102},[92,130436,294],{"class":151},[92,130438,51536],{"class":151},[92,130440,130390],{"class":102},[92,130442,130393],{"class":161},[92,130444,130445],{"class":94,"line":1173},[92,130446,1544],{"class":102},[38,130448,130449],{},"②可以为父亲元素定义上内边距",[38,130451,130452],{},"③可以为父亲元素添加overflow:hidden",[1441,130454],{"style":126383,"src":130455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[83,130457,130458],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},[89,130459,130460,130464,130470,130484],{"__ignoreMap":10},[92,130461,130462],{"class":94,"line":95},[92,130463,130370],{"class":161},[92,130465,130466,130468],{"class":94,"line":11},[92,130467,130375],{"class":1942},[92,130469,15552],{"class":102},[92,130471,130472,130474,130476,130478,130480,130482],{"class":94,"line":1158},[92,130473,70450],{"class":151},[92,130475,51417],{"class":102},[92,130477,294],{"class":151},[92,130479,51536],{"class":151},[92,130481,130390],{"class":102},[92,130483,130393],{"class":161},[92,130485,130486],{"class":94,"line":1173},[92,130487,1544],{"class":102},[1441,130489],{"style":126383,"src":130490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[38,130492,130493],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[38,130495,130496],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[63,130498,130500],{"id":130499},"_914-清除内外边距","9.1.4 清除内外边距",[38,130502,130503],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[83,130505,130506],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},[89,130507,130508,130512,130518,130532],{"__ignoreMap":10},[92,130509,130510],{"class":94,"line":95},[92,130511,130370],{"class":161},[92,130513,130514,130516],{"class":94,"line":11},[92,130515,130375],{"class":1942},[92,130517,15552],{"class":102},[92,130519,130520,130522,130524,130526,130528,130530],{"class":94,"line":1158},[92,130521,70450],{"class":151},[92,130523,51417],{"class":102},[92,130525,294],{"class":151},[92,130527,51536],{"class":151},[92,130529,130390],{"class":102},[92,130531,130393],{"class":161},[92,130533,130534],{"class":94,"line":1173},[92,130535,1544],{"class":102},[38,130537,130538],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[63,130540,130542],{"id":130541},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1110,130544,130545,130548,130551,130554,130557,130560],{},[49,130546,130547],{},"文件→打开 ：可以打开我们要测量的图片",[49,130549,130550],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[49,130552,130553],{},"右击标尺，把里面的单位改为像素",[49,130555,130556],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[49,130558,130559],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[49,130561,130562],{},"用选区拖动 可以测量大小",[1441,130564],{"style":126383,"src":130565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1110,130567,130568,130571],{},[49,130569,130570],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[49,130572,130573],{},"吸管取色工具",[1441,130575],{"style":126383,"src":130576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[63,130578,130580],{"id":130579},"_916-案例","9.1.6 案例",[46,130582,130583],{},[49,130584,130585],{},"小米商品",[1441,130587],{"style":126383,"src":130588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[83,130590,130591],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},[89,130592,130593,130597,130603,130617],{"__ignoreMap":10},[92,130594,130595],{"class":94,"line":95},[92,130596,130370],{"class":161},[92,130598,130599,130601],{"class":94,"line":11},[92,130600,130375],{"class":1942},[92,130602,15552],{"class":102},[92,130604,130605,130607,130609,130611,130613,130615],{"class":94,"line":1158},[92,130606,70450],{"class":151},[92,130608,51417],{"class":102},[92,130610,294],{"class":151},[92,130612,51536],{"class":151},[92,130614,130390],{"class":102},[92,130616,130393],{"class":161},[92,130618,130619],{"class":94,"line":1173},[92,130620,1544],{"class":102},[46,130622,130623],{"start":11},[49,130624,130625],{},"快报模块",[1441,130627],{"style":126383,"src":130628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[83,130630,130632],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[89,130633,130634,130639,130654,130659],{"__ignoreMap":10},[92,130635,130636],{"class":94,"line":95},[92,130637,130638],{"class":161},"\u003C!-- HTML 代码示例 -->\n",[92,130640,130641,130643,130645,130647,130649,130652],{"class":94,"line":11},[92,130642,1013],{"class":102},[92,130644,51591],{"class":51280},[92,130646,53466],{"class":1942},[92,130648,148],{"class":102},[92,130650,130651],{"class":207},"\"example\"",[92,130653,51287],{"class":102},[92,130655,130656],{"class":94,"line":1158},[92,130657,130658],{"class":102},"  示例内容\n",[92,130660,130661,130663,130665],{"class":94,"line":1173},[92,130662,51765],{"class":102},[92,130664,51591],{"class":51280},[92,130666,51287],{"class":102},[63,130668,130670],{"id":130669},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[46,130672,130673],{},[49,130674,130675],{},"圆角边框",[38,130677,130678],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1441,130680],{"style":126383,"src":130681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[83,130683,130685],{"className":126527,"code":130684,"language":126529,"meta":10,"style":10},"div {\n  border: 1px solid #ccc;\n}\n",[89,130686,130687,130693,130709],{"__ignoreMap":10},[92,130688,130689,130691],{"class":94,"line":95},[92,130690,51591],{"class":51280},[92,130692,15552],{"class":102},[92,130694,130695,130697,130699,130701,130703,130705,130707],{"class":94,"line":11},[92,130696,70876],{"class":151},[92,130698,51417],{"class":102},[92,130700,320],{"class":151},[92,130702,51472],{"class":98},[92,130704,51501],{"class":151},[92,130706,129919],{"class":151},[92,130708,1269],{"class":102},[92,130710,130711],{"class":94,"line":1158},[92,130712,1544],{"class":102},[38,130714,130715],{},"解释:",[1110,130717,130718,130721,130724,130727,130730],{},[49,130719,130720],{},"参数值可以为数值或百分比的形式",[49,130722,130723],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[49,130725,130726],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[49,130728,130729],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[49,130731,130732],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[46,130734,130735],{"start":11},[49,130736,130737],{},"盒子阴影",[83,130739,130741],{"className":126527,"code":130740,"language":126529,"meta":10,"style":10},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[89,130742,130743,130749,130786],{"__ignoreMap":10},[92,130744,130745,130747],{"class":94,"line":95},[92,130746,51591],{"class":51280},[92,130748,15552],{"class":102},[92,130750,130751,130754,130756,130758,130760,130762,130764,130766,130768,130770,130772,130774,130776,130778,130780,130782,130784],{"class":94,"line":11},[92,130752,130753],{"class":151},"  box-shadow",[92,130755,51417],{"class":102},[92,130757,294],{"class":151},[92,130759,14735],{"class":151},[92,130761,51472],{"class":98},[92,130763,2017],{"class":151},[92,130765,51472],{"class":98},[92,130767,78747],{"class":151},[92,130769,103],{"class":102},[92,130771,294],{"class":151},[92,130773,12415],{"class":102},[92,130775,294],{"class":151},[92,130777,12415],{"class":102},[92,130779,294],{"class":151},[92,130781,12415],{"class":102},[92,130783,86190],{"class":151},[92,130785,2698],{"class":102},[92,130787,130788],{"class":94,"line":1158},[92,130789,1544],{"class":102},[240,130791,130792,130800],{},[243,130793,130794],{},[246,130795,130796,130798],{},[249,130797,255],{"align":23716},[249,130799,27470],{"align":23716},[287,130801,130802,130810,130818,130826,130834,130842],{},[246,130803,130804,130807],{},[292,130805,130806],{"align":23716},"h-shadow",[292,130808,130809],{"align":23716},"必需,水平阴影的位置,允许负值",[246,130811,130812,130815],{},[292,130813,130814],{"align":23716},"v-shadow",[292,130816,130817],{"align":23716},"必需,垂直阴影的位置,允许负值",[246,130819,130820,130823],{},[292,130821,130822],{"align":23716},"blur",[292,130824,130825],{"align":23716},"可选,模糊距离,就是影子的虚实",[246,130827,130828,130831],{},[292,130829,130830],{"align":23716},"spread",[292,130832,130833],{"align":23716},"可选,阴影尺寸",[246,130835,130836,130839],{},[292,130837,130838],{"align":23716},"color",[292,130840,130841],{"align":23716},"可选,阴影的颜色",[246,130843,130844,130847],{},[292,130845,130846],{"align":23716},"inset",[292,130848,130849],{"align":23716},"可选,将外部阴影(outset)改为内部阴影",[46,130851,130852],{"start":1158},[49,130853,130854],{},"文字阴影",[83,130856,130858],{"className":126527,"code":130857,"language":126529,"meta":10,"style":10},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[89,130859,130860,130866,130905],{"__ignoreMap":10},[92,130861,130862,130864],{"class":94,"line":95},[92,130863,38],{"class":51280},[92,130865,15552],{"class":102},[92,130867,130868,130871,130873,130875,130877,130879,130881,130883,130885,130887,130889,130891,130893,130895,130897,130899,130901,130903],{"class":94,"line":11},[92,130869,130870],{"class":151},"  text-shadow",[92,130872,51417],{"class":102},[92,130874,320],{"class":151},[92,130876,51472],{"class":98},[92,130878,25099],{"class":151},[92,130880,51472],{"class":98},[92,130882,14735],{"class":151},[92,130884,51472],{"class":98},[92,130886,78747],{"class":151},[92,130888,103],{"class":102},[92,130890,294],{"class":151},[92,130892,12415],{"class":102},[92,130894,294],{"class":151},[92,130896,12415],{"class":102},[92,130898,294],{"class":151},[92,130900,12415],{"class":102},[92,130902,100501],{"class":151},[92,130904,2698],{"class":102},[92,130906,130907],{"class":94,"line":1158},[92,130908,1544],{"class":102},[240,130910,130911,130919],{},[243,130912,130913],{},[246,130914,130915,130917],{},[249,130916,255],{"align":23716},[249,130918,27470],{"align":23716},[287,130920,130921,130927,130934,130941],{},[246,130922,130923,130925],{},[292,130924,130806],{"align":23716},[292,130926,130809],{"align":23716},[246,130928,130929,130931],{},[292,130930,130814],{"align":23716},[292,130932,130933],{"align":23716},"必需,垂直阴影位置,允许负值",[246,130935,130936,130938],{},[292,130937,130822],{"align":23716},[292,130939,130940],{"align":23716},"可选,模糊的距离",[246,130942,130943,130945],{},[292,130944,130838],{"align":23716},[292,130946,130841],{"align":23716},[33,130948,130950],{"id":130949},"_92-浮动","9.2 浮动",[63,130952,130954],{"id":130953},"_921-浮动介绍","9.2.1 浮动介绍",[38,130956,130957],{},"在16.2中详细介绍",[63,130959,130961],{"id":130960},"_922-清除浮动","9.2.2 清除浮动",[46,130963,130964,130967],{},[49,130965,130966],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[49,130968,130969],{},"清除浮动的本质",[38,130971,130972],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[38,130974,9005],{},[1110,130976,130977,130980,130983],{},[49,130978,130979],{},"如果父盒子本身有高度，则不需要清除浮动",[49,130981,130982],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[49,130984,130985],{},"父级有了高度，就不会影响下面的标准流了",[46,130987,130988],{"start":1158},[49,130989,130990],{},"清除浮动样式",[83,130992,130994],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[89,130995,130996,131003,131014,131018,131025,131035],{"__ignoreMap":10},[92,130997,130998,131001],{"class":94,"line":95},[92,130999,131000],{"class":1942},".left",[92,131002,15552],{"class":102},[92,131004,131005,131008,131010,131012],{"class":94,"line":11},[92,131006,131007],{"class":151},"  float",[92,131009,51417],{"class":102},[92,131011,23716],{"class":151},[92,131013,1269],{"class":102},[92,131015,131016],{"class":94,"line":1158},[92,131017,1544],{"class":102},[92,131019,131020,131023],{"class":94,"line":1173},[92,131021,131022],{"class":1942},".right",[92,131024,15552],{"class":102},[92,131026,131027,131029,131031,131033],{"class":94,"line":1179},[92,131028,131007],{"class":151},[92,131030,51417],{"class":102},[92,131032,72502],{"class":151},[92,131034,1269],{"class":102},[92,131036,131037],{"class":94,"line":1193},[92,131038,1544],{"class":102},[240,131040,131041,131049],{},[243,131042,131043],{},[246,131044,131045,131047],{},[249,131046,126991],{"align":23716},[249,131048,27470],{"align":23716},[287,131050,131051,131058,131065],{},[246,131052,131053,131055],{},[292,131054,23716],{"align":23716},[292,131056,131057],{"align":23716},"不允许左侧有浮动元素（清除左侧浮动的影响）",[246,131059,131060,131062],{},[292,131061,72502],{"align":23716},[292,131063,131064],{"align":23716},"不允许右侧有浮动元素（清除右侧浮动的影响）",[246,131066,131067,131070],{},[292,131068,131069],{"align":23716},"both",[292,131071,131072],{"align":23716},"同时清除左右侧浮动的影响",[38,131074,131075],{},"法一",[38,131077,131078],{},"额外标签法也称为隔墙法",[38,131080,131081],{},"使用方式：",[38,131083,131084],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[83,131086,131087],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[89,131088,131089,131095,131105,131109,131115,131125],{"__ignoreMap":10},[92,131090,131091,131093],{"class":94,"line":95},[92,131092,131000],{"class":1942},[92,131094,15552],{"class":102},[92,131096,131097,131099,131101,131103],{"class":94,"line":11},[92,131098,131007],{"class":151},[92,131100,51417],{"class":102},[92,131102,23716],{"class":151},[92,131104,1269],{"class":102},[92,131106,131107],{"class":94,"line":1158},[92,131108,1544],{"class":102},[92,131110,131111,131113],{"class":94,"line":1173},[92,131112,131022],{"class":1942},[92,131114,15552],{"class":102},[92,131116,131117,131119,131121,131123],{"class":94,"line":1179},[92,131118,131007],{"class":151},[92,131120,51417],{"class":102},[92,131122,72502],{"class":151},[92,131124,1269],{"class":102},[92,131126,131127],{"class":94,"line":1193},[92,131128,1544],{"class":102},[38,131130,131131],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[38,131133,131134],{},"优点： 通俗易懂，书写方便",[38,131136,131137],{},"缺点： 添加许多无意义的标签，结构化较差",[38,131139,131140],{},"注意： 要求这个新的空标签必须是块级元素。",[38,131142,131143],{},"法二",[38,131145,131146],{},"父级添加overflow属性",[83,131148,131149],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[89,131150,131151,131157,131167,131171,131177,131187],{"__ignoreMap":10},[92,131152,131153,131155],{"class":94,"line":95},[92,131154,131000],{"class":1942},[92,131156,15552],{"class":102},[92,131158,131159,131161,131163,131165],{"class":94,"line":11},[92,131160,131007],{"class":151},[92,131162,51417],{"class":102},[92,131164,23716],{"class":151},[92,131166,1269],{"class":102},[92,131168,131169],{"class":94,"line":1158},[92,131170,1544],{"class":102},[92,131172,131173,131175],{"class":94,"line":1173},[92,131174,131022],{"class":1942},[92,131176,15552],{"class":102},[92,131178,131179,131181,131183,131185],{"class":94,"line":1179},[92,131180,131007],{"class":151},[92,131182,51417],{"class":102},[92,131184,72502],{"class":151},[92,131186,1269],{"class":102},[92,131188,131189],{"class":94,"line":1193},[92,131190,1544],{"class":102},[38,131192,131193],{},"overflow: hidden;",[38,131195,131196],{},"优点：代码简洁",[38,131198,131199],{},"缺点：无法显示溢出的部分",[38,131201,131202],{},"注意：是给父元素添加代码",[38,131204,131205],{},"法三",[38,131207,131208],{},"父级添加after伪元素",[38,131210,131211,131214],{},[131212,131213],"after",{}," 方式是额外标签法的升级版",[38,131216,131217],{},"使用的时候复制就可以",[83,131219,131220],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[89,131221,131222,131228,131238,131242,131248,131258],{"__ignoreMap":10},[92,131223,131224,131226],{"class":94,"line":95},[92,131225,131000],{"class":1942},[92,131227,15552],{"class":102},[92,131229,131230,131232,131234,131236],{"class":94,"line":11},[92,131231,131007],{"class":151},[92,131233,51417],{"class":102},[92,131235,23716],{"class":151},[92,131237,1269],{"class":102},[92,131239,131240],{"class":94,"line":1158},[92,131241,1544],{"class":102},[92,131243,131244,131246],{"class":94,"line":1173},[92,131245,131022],{"class":1942},[92,131247,15552],{"class":102},[92,131249,131250,131252,131254,131256],{"class":94,"line":1179},[92,131251,131007],{"class":151},[92,131253,51417],{"class":102},[92,131255,72502],{"class":151},[92,131257,1269],{"class":102},[92,131259,131260],{"class":94,"line":1193},[92,131261,1544],{"class":102},[38,131263,131264],{},"优点：没有增加标签，结构更简单",[38,131266,131267],{},"缺点：照顾低版本浏览器",[38,131269,131270],{},"代表网站： 百度、淘宝网、网易等",[38,131272,131273],{},"法四",[38,131275,131276],{},"父级添加双伪元素",[83,131278,131279],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[89,131280,131281,131287,131297,131301,131307,131317],{"__ignoreMap":10},[92,131282,131283,131285],{"class":94,"line":95},[92,131284,131000],{"class":1942},[92,131286,15552],{"class":102},[92,131288,131289,131291,131293,131295],{"class":94,"line":11},[92,131290,131007],{"class":151},[92,131292,51417],{"class":102},[92,131294,23716],{"class":151},[92,131296,1269],{"class":102},[92,131298,131299],{"class":94,"line":1158},[92,131300,1544],{"class":102},[92,131302,131303,131305],{"class":94,"line":1173},[92,131304,131022],{"class":1942},[92,131306,15552],{"class":102},[92,131308,131309,131311,131313,131315],{"class":94,"line":1179},[92,131310,131007],{"class":151},[92,131312,51417],{"class":102},[92,131314,72502],{"class":151},[92,131316,1269],{"class":102},[92,131318,131319],{"class":94,"line":1193},[92,131320,1544],{"class":102},[38,131322,131323],{},"优点：代码更简洁",[38,131325,131267],{},[38,131327,131328],{},"代表网站：小米、腾讯等",[33,131330,131332],{"id":131331},"_93-ps切图","9.3 PS切图",[63,131334,131336],{"id":131335},"_931-常见图片格式","9.3.1 常见图片格式",[240,131338,131339,131349],{},[243,131340,131341],{},[246,131342,131343,131346],{},[249,131344,131345],{"align":23716},"jpg图像格式",[249,131347,131348],{"align":23716},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[287,131350,131351,131359,131367],{},[246,131352,131353,131356],{},[292,131354,131355],{"align":23716},"gif图像格式",[292,131357,131358],{"align":23716},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[246,131360,131361,131364],{},[292,131362,131363],{"align":23716},"png图像格式",[292,131365,131366],{"align":23716},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[246,131368,131369,131372],{},[292,131370,131371],{"align":23716},"PSD图像格式",[292,131373,131374],{"align":23716},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[63,131376,131378],{"id":131377},"_932-图层切图","9.3.2 图层切图",[38,131380,131381],{},"最简单的切图方式：右击图层 → 导出 → 切片",[38,131383,131384],{},"按住shift选中两个图层->图层菜单->合并图层",[63,131386,131388],{"id":131387},"_933-切片切图","9.3.3 切片切图",[1110,131390,131391,131394],{},[49,131392,131393],{},"利用切片工具手动划出",[49,131395,131396],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[63,131398,131400],{"id":131399},"_934-切图步骤","9.3.4 切图步骤",[38,131402,131403],{},"用切片工具选中：",[1441,131405],{"style":126383,"src":131406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[38,131408,131409],{},"文件 -> 导出",[1441,131411],{"style":126383,"src":131412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5106,131414,131415],{},"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":10,"searchDepth":11,"depth":11,"links":131417},[131418,131427,131431],{"id":129854,"depth":11,"text":129855,"children":131419},[131420,131421,131422,131423,131424,131425,131426],{"id":129879,"depth":1158,"text":129880},{"id":130170,"depth":1158,"text":130171},{"id":130299,"depth":1158,"text":130300},{"id":130499,"depth":1158,"text":130500},{"id":130541,"depth":1158,"text":130542},{"id":130579,"depth":1158,"text":130580},{"id":130669,"depth":1158,"text":130670},{"id":130949,"depth":11,"text":130950,"children":131428},[131429,131430],{"id":130953,"depth":1158,"text":130954},{"id":130960,"depth":1158,"text":130961},{"id":131331,"depth":11,"text":131332,"children":131432},[131433,131434,131435,131436],{"id":131335,"depth":1158,"text":131336},{"id":131377,"depth":1158,"text":131378},{"id":131387,"depth":1158,"text":131388},{"id":131399,"depth":1158,"text":131400},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129846,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131443,"title":131444,"body":131445,"description":13,"extension":14,"meta":132086,"navigation":17,"path":132087,"seo":132088,"stem":132089,"__hash__":132090},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131446,"toc":132074},[131447,131450,131454,131480,131514,131518,131522,131525,131567,131574,131584,131592,131594,131597,131600,131603,131610,131624,131628,131631,131660,131664,131667,131681,131685,131688,131716,131720,131723,131749,131753,131758,131791,131796,131824,131828,131845,131891,131896,131940,131957,132064,132072],[29,131448,131444],{"id":131449},"_10-css规范与学成在线案例",[33,131451,131453],{"id":131452},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[46,131455,131456,131462,131468,131474],{},[49,131457,131458,131461],{},[252,131459,131460],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[49,131463,131464,131467],{},[252,131465,131466],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[49,131469,131470,131473],{},[252,131471,131472],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[49,131475,131476,131479],{},[252,131477,131478],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[83,131481,131482],{"className":126527,"code":129891,"language":126529,"meta":10,"style":10},[89,131483,131484,131488,131494,131510],{"__ignoreMap":10},[92,131485,131486],{"class":94,"line":95},[92,131487,129898],{"class":161},[92,131489,131490,131492],{"class":94,"line":11},[92,131491,51591],{"class":51280},[92,131493,15552],{"class":102},[92,131495,131496,131498,131500,131502,131504,131506,131508],{"class":94,"line":1158},[92,131497,70876],{"class":151},[92,131499,51417],{"class":102},[92,131501,320],{"class":151},[92,131503,51472],{"class":98},[92,131505,51501],{"class":151},[92,131507,129919],{"class":151},[92,131509,1269],{"class":102},[92,131511,131512],{"class":94,"line":1173},[92,131513,1544],{"class":102},[33,131515,131517],{"id":131516},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[63,131519,131521],{"id":131520},"_1021-header头部制作","10.2.1 header头部制作",[1441,131523],{"style":126383,"src":131524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1110,131526,131527,131534,131541,131547,131554,131561],{},[49,131528,131529,131530,131533],{},"1号是版心盒子 ",[252,131531,131532],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[49,131535,131536,131537,131540],{},"版心盒子 里面包含 2号盒子 ",[252,131538,131539],{},"logo"," 图标",[49,131542,131543,131544,131546],{},"版心盒子 里面包含 3号盒子 ",[252,131545,53693],{}," 导航栏",[49,131548,131549,131550,131553],{},"版心盒子 里面包含 4号盒子 ",[252,131551,131552],{},"search"," 搜索框",[49,131555,131556,131557,131560],{},"版心盒子 里面包含 5号盒子 ",[252,131558,131559],{},"user"," 个人信息",[49,131562,131563,131564],{},"注意，要求里面的 ",[252,131565,131566],{},"4个子盒子 必须都浮动",[46,131568,131569],{},[49,131570,131571],{},[252,131572,131573],{},"导航栏注意点:",[38,131575,131576,131577,131580,131581],{},"实际开发中， ",[252,131578,131579],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[252,131582,131583],{},"用 li 包含链接(li+a)的做法",[1110,131585,131586,131589],{},[49,131587,131588],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[49,131590,131591],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[38,131593,9005],{},[38,131595,131596],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[38,131598,131599],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[38,131601,131602],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[46,131604,131605],{"start":11},[49,131606,131607],{},[252,131608,131609],{},"4号盒子search的细节：",[1110,131611,131612,131615,131618],{},[49,131613,131614],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[49,131616,131617],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[49,131619,131620,131623],{},[89,131621,131622],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[63,131625,131627],{"id":131626},"_1022-banner制作","10.2.2 banner制作",[1441,131629],{"style":126383,"src":131630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1110,131632,131633,131640,131646,131653],{},[49,131634,131635,131636,131639],{},"1号盒子是通栏的大盒子 ",[252,131637,131638],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[49,131641,131642,131643,131645],{},"2号盒子是版心 ",[252,131644,898],{}," ， 要水平居中对齐",[49,131647,131648,131649,131652],{},"3号盒子版心内，左对齐 ",[252,131650,131651],{},"subnav"," 侧导航栏",[49,131654,131655,131656,131659],{},"4号盒子版心内，右对齐 ",[252,131657,131658],{},"course"," 课程",[63,131661,131663],{"id":131662},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1441,131665],{"style":126383,"src":131666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1110,131668,131669,131672,131675,131678],{},[49,131670,131671],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[49,131673,131674],{},"1号盒子是标题 H3 左侧浮动",[49,131676,131677],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[49,131679,131680],{},"3号盒子 右浮动 mod 修改",[63,131682,131684],{"id":131683},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1441,131686],{"style":126383,"src":131687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1110,131689,131690,131696,131703,131710,131713],{},[49,131691,131692,131693,131695],{},"1号盒子为最大的盒子 ",[252,131694,53694],{}," 版心水平居中对齐",[49,131697,131698,131699,131702],{},"2号盒子为上面部分 ",[252,131700,131701],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[49,131704,131705,131706,131709],{},"3号盒子为底下部分 ",[252,131707,131708],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[49,131711,131712],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[49,131714,131715],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[63,131717,131719],{"id":131718},"_1025-底部模块制作","10.2.5 底部模块制作",[1441,131721],{"style":126383,"src":131722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1110,131724,131725,131732,131735,131742],{},[49,131726,131727,131728,131731],{},"1号盒子通栏大盒子 底部 ",[252,131729,131730],{},"footer"," 给高度 底色是白色",[49,131733,131734],{},"2号盒子版心水平居中",[49,131736,131737,131738,131741],{},"3号盒子版权 ",[252,131739,131740],{},"copyright"," 左对齐",[49,131743,131744,131745,131748],{},"4号盒子 链接组 ",[252,131746,131747],{},"links"," 右对齐",[63,131750,131752],{"id":131751},"_1026-代码模块","10.2.6 代码模块",[46,131754,131755],{},[49,131756,131757],{},"html部分",[83,131759,131761],{"className":127274,"code":131760,"language":127276,"meta":10,"style":10},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[89,131762,131763],{"__ignoreMap":10},[92,131764,131765,131767,131769,131771,131773,131776,131779,131781,131784,131787,131789],{"class":94,"line":95},[92,131766,1013],{"class":102},[92,131768,341],{"class":51280},[92,131770,61037],{"class":1942},[92,131772,148],{"class":102},[92,131774,131775],{"class":207},"\"https:\u002F\u002Fexample.com\"",[92,131777,131778],{"class":1942}," target",[92,131780,148],{"class":102},[92,131782,131783],{"class":207},"\"_blank\"",[92,131785,131786],{"class":102},">链接文字\u003C\u002F",[92,131788,341],{"class":51280},[92,131790,51287],{"class":102},[46,131792,131793],{"start":11},[49,131794,131795],{},"css部分",[83,131797,131798],{"className":127274,"code":131760,"language":127276,"meta":10,"style":10},[89,131799,131800],{"__ignoreMap":10},[92,131801,131802,131804,131806,131808,131810,131812,131814,131816,131818,131820,131822],{"class":94,"line":95},[92,131803,1013],{"class":102},[92,131805,341],{"class":51280},[92,131807,61037],{"class":1942},[92,131809,148],{"class":102},[92,131811,131775],{"class":207},[92,131813,131778],{"class":1942},[92,131815,148],{"class":102},[92,131817,131783],{"class":207},[92,131819,131786],{"class":102},[92,131821,341],{"class":51280},[92,131823,51287],{"class":102},[63,131825,131827],{"id":131826},"_1027-收获","10.2.7 收获",[46,131829,131830,131833,131836,131839,131842],{},[49,131831,131832],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[49,131834,131835],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[49,131837,131838],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[49,131840,131841],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[49,131843,131844],{},"遗忘代码",[83,131846,131848],{"className":126527,"code":131847,"language":126529,"meta":10,"style":10},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[89,131849,131850,131872,131877,131887],{"__ignoreMap":10},[92,131851,131852,131854,131856,131858,131860,131862,131864,131866,131868,131870],{"class":94,"line":95},[92,131853,51591],{"class":51280},[92,131855,12415],{"class":102},[92,131857,38],{"class":51280},[92,131859,12415],{"class":102},[92,131861,29],{"class":51280},[92,131863,12415],{"class":102},[92,131865,1110],{"class":51280},[92,131867,12415],{"class":102},[92,131869,49],{"class":51280},[92,131871,15552],{"class":102},[92,131873,131874],{"class":94,"line":11},[92,131875,131876],{"class":161},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[92,131878,131879,131881,131883,131885],{"class":94,"line":1158},[92,131880,128143],{"class":151},[92,131882,51417],{"class":102},[92,131884,60849],{"class":151},[92,131886,1269],{"class":102},[92,131888,131889],{"class":94,"line":1173},[92,131890,1544],{"class":102},[46,131892,131893],{"start":1193},[49,131894,131895],{},"html引css的程序",[83,131897,131898],{"className":126527,"code":131847,"language":126529,"meta":10,"style":10},[89,131899,131900,131922,131926,131936],{"__ignoreMap":10},[92,131901,131902,131904,131906,131908,131910,131912,131914,131916,131918,131920],{"class":94,"line":95},[92,131903,51591],{"class":51280},[92,131905,12415],{"class":102},[92,131907,38],{"class":51280},[92,131909,12415],{"class":102},[92,131911,29],{"class":51280},[92,131913,12415],{"class":102},[92,131915,1110],{"class":51280},[92,131917,12415],{"class":102},[92,131919,49],{"class":51280},[92,131921,15552],{"class":102},[92,131923,131924],{"class":94,"line":11},[92,131925,131876],{"class":161},[92,131927,131928,131930,131932,131934],{"class":94,"line":1158},[92,131929,128143],{"class":151},[92,131931,51417],{"class":102},[92,131933,60849],{"class":151},[92,131935,1269],{"class":102},[92,131937,131938],{"class":94,"line":1173},[92,131939,1544],{"class":102},[46,131941,131942,131945,131948,131951,131954],{"start":1199},[49,131943,131944],{},"浮动的盒子不会有外边距合并问题",[49,131946,131947],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[49,131949,131950],{},"ctrl+g快速定位行；shift+alt多个光标",[49,131952,131953],{},"学习上方各个模块的选择器起名方法，以后就这样用",[49,131955,131956],{},"在写选择器时尽量写全一些，例如",[83,131958,131960],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},"\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",[89,131961,131962,131967,131983,131988,132003,132008,132023,132028,132043,132048],{"__ignoreMap":10},[92,131963,131964],{"class":94,"line":95},[92,131965,131966],{"class":161},"\u002F* 静态定位（默认） *\u002F\n",[92,131968,131969,131972,131974,131976,131978,131981],{"class":94,"line":11},[92,131970,131971],{"class":1942},".static",[92,131973,79787],{"class":102},[92,131975,128887],{"class":151},[92,131977,51417],{"class":102},[92,131979,131980],{"class":151},"static",[92,131982,129457],{"class":102},[92,131984,131985],{"class":94,"line":1158},[92,131986,131987],{"class":161},"\u002F* 相对定位 *\u002F\n",[92,131989,131990,131993,131995,131997,131999,132001],{"class":94,"line":1173},[92,131991,131992],{"class":1942},".relative",[92,131994,79787],{"class":102},[92,131996,128887],{"class":151},[92,131998,51417],{"class":102},[92,132000,54744],{"class":151},[92,132002,129457],{"class":102},[92,132004,132005],{"class":94,"line":1179},[92,132006,132007],{"class":161},"\u002F* 绝对定位 *\u002F\n",[92,132009,132010,132013,132015,132017,132019,132021],{"class":94,"line":1193},[92,132011,132012],{"class":1942},".absolute",[92,132014,79787],{"class":102},[92,132016,128887],{"class":151},[92,132018,51417],{"class":102},[92,132020,54811],{"class":151},[92,132022,129457],{"class":102},[92,132024,132025],{"class":94,"line":1199},[92,132026,132027],{"class":161},"\u002F* 固定定位 *\u002F\n",[92,132029,132030,132033,132035,132037,132039,132041],{"class":94,"line":1290},[92,132031,132032],{"class":1942},".fixed",[92,132034,79787],{"class":102},[92,132036,128887],{"class":151},[92,132038,51417],{"class":102},[92,132040,86213],{"class":151},[92,132042,129457],{"class":102},[92,132044,132045],{"class":94,"line":1296},[92,132046,132047],{"class":161},"\u002F* 粘性定位 *\u002F\n",[92,132049,132050,132053,132055,132057,132059,132062],{"class":94,"line":1308},[92,132051,132052],{"class":1942},".sticky",[92,132054,79787],{"class":102},[92,132056,128887],{"class":151},[92,132058,51417],{"class":102},[92,132060,132061],{"class":151},"sticky",[92,132063,129457],{"class":102},[46,132065,132066,132069],{"start":1596},[49,132067,132068],{},"一定要用好注释",[49,132070,132071],{},"浮动的盒子不会有外边距合并的问题",[5106,132073,131415],{},{"title":10,"searchDepth":11,"depth":11,"links":132075},[132076,132077],{"id":131452,"depth":11,"text":131453},{"id":131516,"depth":11,"text":131517,"children":132078},[132079,132080,132081,132082,132083,132084,132085],{"id":131520,"depth":1158,"text":131521},{"id":131626,"depth":1158,"text":131627},{"id":131662,"depth":1158,"text":131663},{"id":131683,"depth":1158,"text":131684},{"id":131718,"depth":1158,"text":131719},{"id":131751,"depth":1158,"text":131752},{"id":131826,"depth":1158,"text":131827},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131444,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132092,"title":132093,"body":132094,"description":13,"extension":14,"meta":133580,"navigation":17,"path":133581,"seo":133582,"stem":133583,"__hash__":133584},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132095,"toc":133572},[132096,132099,132103,132107,132118,132122,132139,132183,132216,132219,132236,132239,132242,132286,132290,132294,132297,132300,132304,132307,132318,132381,132422,132425,132440,132494,132502,132505,132516,132570,132596,132599,132612,132666,132698,132752,132775,132829,132832,132835,132842,132896,132917,132971,132974,132977,133062,133070,133127,133150,133154,133157,133175,133179,133198,133252,133290,133294,133297,133300,133322,133326,133334,133337,133342,133353,133356,133360,133374,133418,133421,133425,133428,133433,133459,133464,133541,133544,133548,133551,133554,133557,133560,133563,133566,133569],[29,132097,132093],{"id":132098},"_11-传统布局与定位体系",[33,132100,132102],{"id":132101},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[63,132104,132106],{"id":132105},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1110,132108,132109,132112,132115],{},[49,132110,132111],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[49,132113,132114],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[49,132116,132117],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[63,132119,132121],{"id":132120},"_1112-浮动","11.1.2 浮动",[1110,132123,132124,132127,132130,132133,132136],{},[49,132125,132126],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[49,132128,132129],{},"浮动可以改变元素标签默认的排列方式",[49,132131,132132],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[49,132134,132135],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[49,132137,132138],{},"在使用行内块转换时盒子之间是有空隙的",[83,132140,132141],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[89,132142,132143,132149,132159,132163,132169,132179],{"__ignoreMap":10},[92,132144,132145,132147],{"class":94,"line":95},[92,132146,131000],{"class":1942},[92,132148,15552],{"class":102},[92,132150,132151,132153,132155,132157],{"class":94,"line":11},[92,132152,131007],{"class":151},[92,132154,51417],{"class":102},[92,132156,23716],{"class":151},[92,132158,1269],{"class":102},[92,132160,132161],{"class":94,"line":1158},[92,132162,1544],{"class":102},[92,132164,132165,132167],{"class":94,"line":1173},[92,132166,131022],{"class":1942},[92,132168,15552],{"class":102},[92,132170,132171,132173,132175,132177],{"class":94,"line":1179},[92,132172,131007],{"class":151},[92,132174,51417],{"class":102},[92,132176,72502],{"class":151},[92,132178,1269],{"class":102},[92,132180,132181],{"class":94,"line":1193},[92,132182,1544],{"class":102},[240,132184,132185,132193],{},[243,132186,132187],{},[246,132188,132189,132191],{},[249,132190,126991],{"align":23716},[249,132192,27470],{"align":23716},[287,132194,132195,132202,132209],{},[246,132196,132197,132199],{},[292,132198,54717],{"align":23716},[292,132200,132201],{"align":23716},"元素不浮动（默认值）",[246,132203,132204,132206],{},[292,132205,23716],{"align":23716},[292,132207,132208],{"align":23716},"元素向左浮动",[246,132210,132211,132213],{},[292,132212,72502],{"align":23716},[292,132214,132215],{"align":23716},"元素向右浮动",[38,132217,132218],{},"浮动重点：",[1110,132220,132221,132224,132227,132230,132233],{},[49,132222,132223],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[49,132225,132226],{},"浮动的元素会一行内显示并且元素顶部对齐",[49,132228,132229],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[49,132231,132232],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[49,132234,132235],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[38,132237,132238],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[38,132240,132241],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[83,132243,132244],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[89,132245,132246,132252,132262,132266,132272,132282],{"__ignoreMap":10},[92,132247,132248,132250],{"class":94,"line":95},[92,132249,131000],{"class":1942},[92,132251,15552],{"class":102},[92,132253,132254,132256,132258,132260],{"class":94,"line":11},[92,132255,131007],{"class":151},[92,132257,51417],{"class":102},[92,132259,23716],{"class":151},[92,132261,1269],{"class":102},[92,132263,132264],{"class":94,"line":1158},[92,132265,1544],{"class":102},[92,132267,132268,132270],{"class":94,"line":1173},[92,132269,131022],{"class":1942},[92,132271,15552],{"class":102},[92,132273,132274,132276,132278,132280],{"class":94,"line":1179},[92,132275,131007],{"class":151},[92,132277,51417],{"class":102},[92,132279,72502],{"class":151},[92,132281,1269],{"class":102},[92,132283,132284],{"class":94,"line":1193},[92,132285,1544],{"class":102},[63,132287,132289],{"id":132288},"_1113-定位","11.1.3 定位",[21978,132291,132293],{"id":132292},"_11131-使用场景","11.1.3.1 使用场景",[38,132295,132296],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[38,132298,132299],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21978,132301,132303],{"id":132302},"_11132-定位组成","11.1.3.2 定位组成",[38,132305,132306],{},"定位 = 定位模式 + 边偏移",[46,132308,132309],{},[49,132310,132311,132314,132315],{},[252,132312,132313],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[252,132316,132317],{},"定位模式",[83,132319,132321],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[89,132322,132323,132329,132343,132360,132377],{"__ignoreMap":10},[92,132324,132325,132327],{"class":94,"line":95},[92,132326,130375],{"class":1942},[92,132328,15552],{"class":102},[92,132330,132331,132334,132336,132338,132340],{"class":94,"line":11},[92,132332,132333],{"class":151},"  position",[92,132335,51417],{"class":102},[92,132337,54744],{"class":151},[92,132339,130390],{"class":102},[92,132341,132342],{"class":161},"\u002F* 定位模式 *\u002F\n",[92,132344,132345,132348,132350,132352,132354,132357],{"class":94,"line":1158},[92,132346,132347],{"class":151},"  top",[92,132349,51417],{"class":102},[92,132351,549],{"class":151},[92,132353,51472],{"class":98},[92,132355,132356],{"class":102},";           ",[92,132358,132359],{"class":161},"\u002F* 边偏移：上 *\u002F\n",[92,132361,132362,132365,132367,132369,132371,132374],{"class":94,"line":1173},[92,132363,132364],{"class":151},"  left",[92,132366,51417],{"class":102},[92,132368,803],{"class":151},[92,132370,51472],{"class":98},[92,132372,132373],{"class":102},";          ",[92,132375,132376],{"class":161},"\u002F* 边偏移：左 *\u002F\n",[92,132378,132379],{"class":94,"line":1179},[92,132380,1544],{"class":102},[240,132382,132383,132392],{},[243,132384,132385],{},[246,132386,132387,132389],{},[249,132388,255],{"align":23716},[249,132390,132391],{"align":23716},"语义",[287,132393,132394,132401,132408,132415],{},[246,132395,132396,132398],{},[292,132397,131980],{"align":23716},[292,132399,132400],{"align":23716},"静态定位",[246,132402,132403,132405],{},[292,132404,54744],{"align":23716},[292,132406,132407],{"align":23716},"相对定位",[246,132409,132410,132412],{},[292,132411,54811],{"align":23716},[292,132413,132414],{"align":23716},"绝对定位",[246,132416,132417,132419],{},[292,132418,86213],{"align":23716},[292,132420,132421],{"align":23716},"固定定位",[38,132423,132424],{},"（1）静态定位：",[1110,132426,132427,132438],{},[49,132428,132429,132430,132433,132434,132437],{},"静态定位是元素的 ",[252,132431,132432],{},"默认定位方式"," ， ",[252,132435,132436],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[49,132439,5161],{},[83,132441,132442],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[89,132443,132444,132450,132462,132476,132490],{"__ignoreMap":10},[92,132445,132446,132448],{"class":94,"line":95},[92,132447,130375],{"class":1942},[92,132449,15552],{"class":102},[92,132451,132452,132454,132456,132458,132460],{"class":94,"line":11},[92,132453,132333],{"class":151},[92,132455,51417],{"class":102},[92,132457,54744],{"class":151},[92,132459,130390],{"class":102},[92,132461,132342],{"class":161},[92,132463,132464,132466,132468,132470,132472,132474],{"class":94,"line":1158},[92,132465,132347],{"class":151},[92,132467,51417],{"class":102},[92,132469,549],{"class":151},[92,132471,51472],{"class":98},[92,132473,132356],{"class":102},[92,132475,132359],{"class":161},[92,132477,132478,132480,132482,132484,132486,132488],{"class":94,"line":1173},[92,132479,132364],{"class":151},[92,132481,51417],{"class":102},[92,132483,803],{"class":151},[92,132485,51472],{"class":98},[92,132487,132373],{"class":102},[92,132489,132376],{"class":161},[92,132491,132492],{"class":94,"line":1179},[92,132493,1544],{"class":102},[1110,132495,132496,132499],{},[49,132497,132498],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[49,132500,132501],{},"静态定位在布局时我们几乎不用的",[38,132503,132504],{},"（2）相对定位",[1110,132506,132507,132514],{},[49,132508,132509,132510,132513],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[252,132511,132512],{},"原来的位置"," 来说的（自恋型）",[49,132515,5161],{},[83,132517,132518],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[89,132519,132520,132526,132538,132552,132566],{"__ignoreMap":10},[92,132521,132522,132524],{"class":94,"line":95},[92,132523,130375],{"class":1942},[92,132525,15552],{"class":102},[92,132527,132528,132530,132532,132534,132536],{"class":94,"line":11},[92,132529,132333],{"class":151},[92,132531,51417],{"class":102},[92,132533,54744],{"class":151},[92,132535,130390],{"class":102},[92,132537,132342],{"class":161},[92,132539,132540,132542,132544,132546,132548,132550],{"class":94,"line":1158},[92,132541,132347],{"class":151},[92,132543,51417],{"class":102},[92,132545,549],{"class":151},[92,132547,51472],{"class":98},[92,132549,132356],{"class":102},[92,132551,132359],{"class":161},[92,132553,132554,132556,132558,132560,132562,132564],{"class":94,"line":1173},[92,132555,132364],{"class":151},[92,132557,51417],{"class":102},[92,132559,803],{"class":151},[92,132561,51472],{"class":98},[92,132563,132373],{"class":102},[92,132565,132376],{"class":161},[92,132567,132568],{"class":94,"line":1179},[92,132569,1544],{"class":102},[1110,132571,132572],{},[49,132573,132574,132575,132577,132578,132580,132581,132584,132585,132588,132589,132591,132592,132595],{},"相对定位的特点：",[53696,132576],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53696,132579],{},"  ② ",[252,132582,132583],{},"原来"," 在标准流的 ",[252,132586,132587],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53696,132590],{},"  ③因此， ",[252,132593,132594],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[38,132597,132598],{},"（3）绝对定位",[1110,132600,132601,132610],{},[49,132602,132603,132605,132606,132609],{},[252,132604,132414],{}," 是元素在移动位置的时候，是相对于它 ",[252,132607,132608],{},"祖先元素"," 来说的（拼爹型）",[49,132611,5161],{},[83,132613,132614],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[89,132615,132616,132622,132634,132648,132662],{"__ignoreMap":10},[92,132617,132618,132620],{"class":94,"line":95},[92,132619,130375],{"class":1942},[92,132621,15552],{"class":102},[92,132623,132624,132626,132628,132630,132632],{"class":94,"line":11},[92,132625,132333],{"class":151},[92,132627,51417],{"class":102},[92,132629,54744],{"class":151},[92,132631,130390],{"class":102},[92,132633,132342],{"class":161},[92,132635,132636,132638,132640,132642,132644,132646],{"class":94,"line":1158},[92,132637,132347],{"class":151},[92,132639,51417],{"class":102},[92,132641,549],{"class":151},[92,132643,51472],{"class":98},[92,132645,132356],{"class":102},[92,132647,132359],{"class":161},[92,132649,132650,132652,132654,132656,132658,132660],{"class":94,"line":1173},[92,132651,132364],{"class":151},[92,132653,51417],{"class":102},[92,132655,803],{"class":151},[92,132657,51472],{"class":98},[92,132659,132373],{"class":102},[92,132661,132376],{"class":161},[92,132663,132664],{"class":94,"line":1179},[92,132665,1544],{"class":102},[1110,132667,132668,132683,132692,132695],{},[49,132669,132670,132671,132673,132674,132676,132677,132679,132680,132682],{},"绝对定位的特点：",[53696,132672],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53696,132675],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53696,132678],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53696,132681],{},"  (4)固定定位",[49,132684,132685,132687,132688,132691],{},[252,132686,132421],{}," 是元素 ",[252,132689,132690],{},"固定于浏览器可视区的位置"," 。（认死理型）",[49,132693,132694],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[49,132696,132697],{},"语法:",[83,132699,132700],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[89,132701,132702,132708,132720,132734,132748],{"__ignoreMap":10},[92,132703,132704,132706],{"class":94,"line":95},[92,132705,130375],{"class":1942},[92,132707,15552],{"class":102},[92,132709,132710,132712,132714,132716,132718],{"class":94,"line":11},[92,132711,132333],{"class":151},[92,132713,51417],{"class":102},[92,132715,54744],{"class":151},[92,132717,130390],{"class":102},[92,132719,132342],{"class":161},[92,132721,132722,132724,132726,132728,132730,132732],{"class":94,"line":1158},[92,132723,132347],{"class":151},[92,132725,51417],{"class":102},[92,132727,549],{"class":151},[92,132729,51472],{"class":98},[92,132731,132356],{"class":102},[92,132733,132359],{"class":161},[92,132735,132736,132738,132740,132742,132744,132746],{"class":94,"line":1173},[92,132737,132364],{"class":151},[92,132739,51417],{"class":102},[92,132741,803],{"class":151},[92,132743,51472],{"class":98},[92,132745,132373],{"class":102},[92,132747,132376],{"class":161},[92,132749,132750],{"class":94,"line":1179},[92,132751,1544],{"class":102},[1110,132753,132754,132763],{},[49,132755,132756,132757,132759,132760,132762],{},"特点:",[53696,132758],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53696,132761],{},"  ②固定定位不再占有原先的位置,完全脱标",[49,132764,132765,132766,132768,132769,132771,132772,132774],{},"固定在版心位置的方法:",[53696,132767],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53696,132770],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53696,132773],{},"  实例：",[83,132776,132777],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[89,132778,132779,132785,132797,132811,132825],{"__ignoreMap":10},[92,132780,132781,132783],{"class":94,"line":95},[92,132782,130375],{"class":1942},[92,132784,15552],{"class":102},[92,132786,132787,132789,132791,132793,132795],{"class":94,"line":11},[92,132788,132333],{"class":151},[92,132790,51417],{"class":102},[92,132792,54744],{"class":151},[92,132794,130390],{"class":102},[92,132796,132342],{"class":161},[92,132798,132799,132801,132803,132805,132807,132809],{"class":94,"line":1158},[92,132800,132347],{"class":151},[92,132802,51417],{"class":102},[92,132804,549],{"class":151},[92,132806,51472],{"class":98},[92,132808,132356],{"class":102},[92,132810,132359],{"class":161},[92,132812,132813,132815,132817,132819,132821,132823],{"class":94,"line":1173},[92,132814,132364],{"class":151},[92,132816,51417],{"class":102},[92,132818,803],{"class":151},[92,132820,51472],{"class":98},[92,132822,132373],{"class":102},[92,132824,132376],{"class":161},[92,132826,132827],{"class":94,"line":1179},[92,132828,1544],{"class":102},[1441,132830],{"style":126383,"src":132831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[38,132833,132834],{},"(5)粘性定位",[1110,132836,132837,132840],{},[49,132838,132839],{},"粘性定位可以被认为是相对定位和固定定位的混合",[49,132841,5161],{},[83,132843,132844],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[89,132845,132846,132852,132864,132878,132892],{"__ignoreMap":10},[92,132847,132848,132850],{"class":94,"line":95},[92,132849,130375],{"class":1942},[92,132851,15552],{"class":102},[92,132853,132854,132856,132858,132860,132862],{"class":94,"line":11},[92,132855,132333],{"class":151},[92,132857,51417],{"class":102},[92,132859,54744],{"class":151},[92,132861,130390],{"class":102},[92,132863,132342],{"class":161},[92,132865,132866,132868,132870,132872,132874,132876],{"class":94,"line":1158},[92,132867,132347],{"class":151},[92,132869,51417],{"class":102},[92,132871,549],{"class":151},[92,132873,51472],{"class":98},[92,132875,132356],{"class":102},[92,132877,132359],{"class":161},[92,132879,132880,132882,132884,132886,132888,132890],{"class":94,"line":1173},[92,132881,132364],{"class":151},[92,132883,51417],{"class":102},[92,132885,803],{"class":151},[92,132887,51472],{"class":98},[92,132889,132373],{"class":102},[92,132891,132376],{"class":161},[92,132893,132894],{"class":94,"line":1179},[92,132895,1544],{"class":102},[1110,132897,132898],{},[49,132899,132900,132901,132903,132904,132906,132907,132909,132910,132913,132914,132916],{},"粘性定位的特点：",[53696,132902],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53696,132905],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53696,132908],{},"  ③必须添加 top 、left、right、bottom ",[252,132911,132912],{},"其中一个"," 才有效",[53696,132915],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[83,132918,132919],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[89,132920,132921,132927,132939,132953,132967],{"__ignoreMap":10},[92,132922,132923,132925],{"class":94,"line":95},[92,132924,130375],{"class":1942},[92,132926,15552],{"class":102},[92,132928,132929,132931,132933,132935,132937],{"class":94,"line":11},[92,132930,132333],{"class":151},[92,132932,51417],{"class":102},[92,132934,54744],{"class":151},[92,132936,130390],{"class":102},[92,132938,132342],{"class":161},[92,132940,132941,132943,132945,132947,132949,132951],{"class":94,"line":1158},[92,132942,132347],{"class":151},[92,132944,51417],{"class":102},[92,132946,549],{"class":151},[92,132948,51472],{"class":98},[92,132950,132356],{"class":102},[92,132952,132359],{"class":161},[92,132954,132955,132957,132959,132961,132963,132965],{"class":94,"line":1173},[92,132956,132364],{"class":151},[92,132958,51417],{"class":102},[92,132960,803],{"class":151},[92,132962,51472],{"class":98},[92,132964,132373],{"class":102},[92,132966,132376],{"class":161},[92,132968,132969],{"class":94,"line":1179},[92,132970,1544],{"class":102},[1441,132972],{"style":126383,"src":132973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[38,132975,132976],{},"(6)总结",[240,132978,132979,132994],{},[243,132980,132981],{},[246,132982,132983,132985,132988,132991],{},[249,132984,132317],{"align":23716},[249,132986,132987],{"align":23716},"是否脱标",[249,132989,132990],{"align":23716},"移动位置",[249,132992,132993],{"align":23716},"是否常用",[287,132995,132996,133009,133023,133037,133050],{},[246,132997,132998,133001,133003,133006],{},[292,132999,133000],{"align":23716},"Static 静态定位",[292,133002,104653],{"align":23716},[292,133004,133005],{"align":23716},"不能使用边偏移",[292,133007,133008],{"align":23716},"很少",[246,133010,133011,133014,133017,133020],{},[292,133012,133013],{"align":23716},"Relative 相对定位",[292,133015,133016],{"align":23716},"否(占有位置)",[292,133018,133019],{"align":23716},"相对于自身位置移动",[292,133021,133022],{"align":23716},"基本单独使用",[246,133024,133025,133028,133031,133034],{},[292,133026,133027],{"align":23716},"Absolute 绝对定位",[292,133029,133030],{"align":23716},"是(不占有位置)",[292,133032,133033],{"align":23716},"带有定位的父级",[292,133035,133036],{"align":23716},"要和定位父级元素搭配使用",[246,133038,133039,133042,133044,133047],{},[292,133040,133041],{"align":23716},"Fixed 固定定位",[292,133043,133030],{"align":23716},[292,133045,133046],{"align":23716},"浏览器可视区",[292,133048,133049],{"align":23716},"单独使用,不需要父级",[246,133051,133052,133055,133057,133059],{},[292,133053,133054],{"align":23716},"Sticky 粘性定位",[292,133056,133016],{"align":23716},[292,133058,133046],{"align":23716},[292,133060,133061],{"align":23716},"当前阶段少",[46,133063,133064],{"start":11},[49,133065,133066,133069],{},[252,133067,133068],{},"边偏移"," 则决定了该元素的最终位置",[240,133071,133072,133083],{},[243,133073,133074],{},[246,133075,133076,133079,133081],{},[249,133077,133078],{"align":23716},"边偏移属性",[249,133080,27473],{"align":23716},[249,133082,27470],{"align":23716},[287,133084,133085,133096,133107,133117],{},[246,133086,133087,133090,133093],{},[292,133088,133089],{"align":23716},"top",[292,133091,133092],{"align":23716},"top: 80px;",[292,133094,133095],{"align":23716},"顶端偏移量，定义元素相对于父元素上边线的距离",[246,133097,133098,133101,133104],{},[292,133099,133100],{"align":23716},"bottom",[292,133102,133103],{"align":23716},"bottom: 80px ;",[292,133105,133106],{"align":23716},"底部偏移量，定义元素相对于其父元素下边线的距离",[246,133108,133109,133111,133114],{},[292,133110,23716],{"align":23716},[292,133112,133113],{"align":23716},"left: 80px ;",[292,133115,133116],{"align":23716},"左侧偏移量，定义元素相对于其父元素左边线的距离",[246,133118,133119,133121,133124],{},[292,133120,72502],{"align":23716},[292,133122,133123],{"align":23716},"right: 80px ;",[292,133125,133126],{"align":23716},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1110,133128,133129],{},[49,133130,9005,133131,133133,133134,133136,133137,133139,133140,133143,133144,133146,133147,133149],{},[53696,133132],{},"  ① ",[252,133135,133068],{}," 需要和 ",[252,133138,132317],{}," 联合使用， ",[252,133141,133142],{},"单独使用无效"," ；",[53696,133145],{},"  ②top和bottom不要同时使用",[53696,133148],{},"  ③left和right不要同时使用",[21978,133151,133153],{"id":133152},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[38,133155,133156],{},"子级是绝对定位的话，父级要用相对定位",[1110,133158,133159,133162,133165,133168],{},[49,133160,133161],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[49,133163,133164],{},"父盒子需要加定位限制子盒子在父盒子内显示",[49,133166,133167],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[49,133169,133170,133171,133174],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[252,133172,133173],{},"子绝父绝"," 也会遇到",[21978,133176,133178],{"id":133177},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1110,133180,133181,133196],{},[49,133182,133183,133184,133187,133188,133191,133192,133195],{},"在使用 ",[252,133185,133186],{},"定位"," 布局时，可能会 ",[252,133189,133190],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[252,133193,133194],{},"z-index"," 来控制盒子的前后次序 (z轴)",[49,133197,5161],{},[83,133199,133200],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[89,133201,133202,133208,133220,133234,133248],{"__ignoreMap":10},[92,133203,133204,133206],{"class":94,"line":95},[92,133205,130375],{"class":1942},[92,133207,15552],{"class":102},[92,133209,133210,133212,133214,133216,133218],{"class":94,"line":11},[92,133211,132333],{"class":151},[92,133213,51417],{"class":102},[92,133215,54744],{"class":151},[92,133217,130390],{"class":102},[92,133219,132342],{"class":161},[92,133221,133222,133224,133226,133228,133230,133232],{"class":94,"line":1158},[92,133223,132347],{"class":151},[92,133225,51417],{"class":102},[92,133227,549],{"class":151},[92,133229,51472],{"class":98},[92,133231,132356],{"class":102},[92,133233,132359],{"class":161},[92,133235,133236,133238,133240,133242,133244,133246],{"class":94,"line":1173},[92,133237,132364],{"class":151},[92,133239,51417],{"class":102},[92,133241,803],{"class":151},[92,133243,51472],{"class":98},[92,133245,132373],{"class":102},[92,133247,132376],{"class":161},[92,133249,133250],{"class":94,"line":1179},[92,133251,1544],{"class":102},[1110,133253,133254],{},[49,133255,133256,133257,133133,133259,133261,133262,127690,133265,82519,133268,133270,133271,133273,133274,133277,133278,133143,133281,133283,133284,133287,133289],{},"z-index的特性",[53696,133258],{},[252,133260,126991],{}," ： ",[252,133263,133264],{},"正整数",[252,133266,133267],{},"负整数",[252,133269,294],{}," ，默认值是 0，数值越大，盒子越靠上；",[53696,133272],{},"  ②如果 ",[252,133275,133276],{},"属性值相同"," ，则按照书写顺序， ",[252,133279,133280],{},"后来居上",[53696,133282],{},"  ③数字后面 ",[252,133285,133286],{},"不能加单位",[53696,133288],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21978,133291,133293],{"id":133292},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[38,133295,133296],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[38,133298,133299],{},"方法:",[1110,133301,133302,133312],{},[49,133303,133304,133305,133308,133309],{},"left: 50%; 让 ",[252,133306,133307],{},"盒子的左侧"," 移动到 ",[252,133310,133311],{},"父级元素的水平中心位置",[49,133313,133314,133315,133318,133319],{},"margin-left: -100px; 让盒子 ",[252,133316,133317],{},"向左"," 移动 ",[252,133320,133321],{},"自身宽度的一半",[21978,133323,133325],{"id":133324},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[46,133327,133328,133331],{},[49,133329,133330],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[49,133332,133333],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[38,133335,133336],{},"也就是说绝对定位和固定定位和浮动类似",[46,133338,133339],{"start":1158},[49,133340,133341],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1110,133343,133344,133347,133350],{},[49,133345,133346],{},"可以用inline-block 转换为行内块",[49,133348,133349],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[49,133351,133352],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[38,133354,133355],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21978,133357,133359],{"id":133358},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[46,133361,133362,133365,133368,133371],{},[49,133363,133364],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[49,133366,133367],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[49,133369,133370],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[49,133372,133373],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[83,133375,133376],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[89,133377,133378,133384,133394,133398,133404,133414],{"__ignoreMap":10},[92,133379,133380,133382],{"class":94,"line":95},[92,133381,131000],{"class":1942},[92,133383,15552],{"class":102},[92,133385,133386,133388,133390,133392],{"class":94,"line":11},[92,133387,131007],{"class":151},[92,133389,51417],{"class":102},[92,133391,23716],{"class":151},[92,133393,1269],{"class":102},[92,133395,133396],{"class":94,"line":1158},[92,133397,1544],{"class":102},[92,133399,133400,133402],{"class":94,"line":1173},[92,133401,131022],{"class":1942},[92,133403,15552],{"class":102},[92,133405,133406,133408,133410,133412],{"class":94,"line":1179},[92,133407,131007],{"class":151},[92,133409,51417],{"class":102},[92,133411,72502],{"class":151},[92,133413,1269],{"class":102},[92,133415,133416],{"class":94,"line":1193},[92,133417,1544],{"class":102},[1441,133419],{"style":126383,"src":133420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21978,133422,133424],{"id":133423},"_11138-轮播图","11.1.3.8 轮播图",[1441,133426],{"style":126383,"src":133427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[46,133429,133430],{},[49,133431,133432],{},"制作顺序:",[1110,133434,133435,133438,133441,133450],{},[49,133436,133437],{},"大盒子我们类名为： tb-promo 淘宝广告",[49,133439,133440],{},"里面先放一张图片",[49,133442,133443,133444,133446,133447,133449],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53696,133445],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53696,133448],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[49,133451,133452,133453,133455,133456,133458],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53696,133454],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53696,133457],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[46,133460,133461],{"start":11},[49,133462,133463],{},"代码模块",[83,133465,133467],{"className":126527,"code":133466,"language":126529,"meta":10,"style":10},"\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",[89,133468,133469,133474,133481,133491,133501,133511,133515,133520,133527,133537],{"__ignoreMap":10},[92,133470,133471],{"class":94,"line":95},[92,133472,133473],{"class":161},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[92,133475,133476,133479],{"class":94,"line":11},[92,133477,133478],{"class":1942},".son",[92,133480,15552],{"class":102},[92,133482,133483,133485,133487,133489],{"class":94,"line":1158},[92,133484,132333],{"class":151},[92,133486,51417],{"class":102},[92,133488,54811],{"class":151},[92,133490,1269],{"class":102},[92,133492,133493,133495,133497,133499],{"class":94,"line":1173},[92,133494,132347],{"class":151},[92,133496,51417],{"class":102},[92,133498,294],{"class":151},[92,133500,1269],{"class":102},[92,133502,133503,133505,133507,133509],{"class":94,"line":1179},[92,133504,132364],{"class":151},[92,133506,51417],{"class":102},[92,133508,294],{"class":151},[92,133510,1269],{"class":102},[92,133512,133513],{"class":94,"line":1193},[92,133514,1544],{"class":102},[92,133516,133517],{"class":94,"line":1199},[92,133518,133519],{"class":161},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[92,133521,133522,133525],{"class":94,"line":1290},[92,133523,133524],{"class":1942},".father",[92,133526,15552],{"class":102},[92,133528,133529,133531,133533,133535],{"class":94,"line":1296},[92,133530,132333],{"class":151},[92,133532,51417],{"class":102},[92,133534,54744],{"class":151},[92,133536,1269],{"class":102},[92,133538,133539],{"class":94,"line":1308},[92,133540,1544],{"class":102},[38,133542,133543],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[63,133545,133547],{"id":133546},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1441,133549],{"style":126383,"src":133550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[38,133552,133553],{},"✨ 黄金口诀：",[38,133555,133556],{},"\"TOP正下负上，LEFT正右负左\"",[38,133558,133559],{},"\"RIGHT正左负右，BOTTOM正上负下",[38,133561,133562],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[38,133564,133565],{},"✨ 简单记：",[38,133567,133568],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5106,133570,133571],{},"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":10,"searchDepth":11,"depth":11,"links":133573},[133574],{"id":132101,"depth":11,"text":132102,"children":133575},[133576,133577,133578,133579],{"id":132105,"depth":1158,"text":132106},{"id":132120,"depth":1158,"text":132121},{"id":132288,"depth":1158,"text":132289},{"id":133546,"depth":1158,"text":133547},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132093,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133586,"title":133587,"body":133588,"description":13,"extension":14,"meta":135011,"navigation":17,"path":135012,"seo":135013,"stem":135014,"__hash__":135015},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133589,"toc":134990},[133590,133593,133597,133605,133609,133614,133622,133634,133638,133643,133651,133662,133666,133671,133712,133720,133724,133727,133730,133733,133827,133830,133924,133927,134021,134024,134027,134062,134065,134068,134098,134101,134104,134107,134110,134113,134116,134119,134189,134192,134196,134200,134241,134245,134251,134254,134257,134261,134264,134267,134270,134351,134354,134357,134361,134365,134368,134371,134374,134377,134380,134386,134395,134399,134418,134422,134432,134435,134438,134441,134444,134447,134450,134453,134456,134465,134469,134478,134481,134486,134539,134544,134710,134713,134716,134721,134724,134727,134730,134733,134738,134886,134889,134892,134897,134900,134905,134939,134942,134945,134949,134952,134959,134962,134965,134968,134971,134974,134977,134980,134984,134987],[29,133591,133587],{"id":133592},"_12-显示隐藏与图形资源",[33,133594,133596],{"id":133595},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1110,133598,133599,133602],{},[49,133600,133601],{},"目的:让一个元素在页面中消失或者显示出来",[49,133603,133604],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[63,133606,133608],{"id":133607},"_1211-display-显示","12.1.1 display 显示",[46,133610,133611],{},[49,133612,133613],{},"display 设置或检索对象是否及如何显示",[1110,133615,133616,133619],{},[49,133617,133618],{},"display: none;隐藏对象",[49,133620,133621],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[46,133623,133624,133631],{"start":11},[49,133625,133626,133627,133630],{},"特点： display 隐藏元素后， ",[252,133628,133629],{},"不再占"," 有原来的位置",[49,133632,133633],{},"在js中使用非常的广泛",[63,133635,133637],{"id":133636},"_1212-visibility可见性","12.1.2 visibility可见性",[46,133639,133640],{},[49,133641,133642],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1110,133644,133645,133648],{},[49,133646,133647],{},"visibility： visible；元素可见",[49,133649,133650],{},"visibility：hidden；元素隐藏",[46,133652,133653,133656,133659],{"start":11},[49,133654,133655],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[49,133657,133658],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[49,133660,133661],{},"隐藏后继续占有原有位置",[63,133663,133665],{"id":133664},"_1213-overflow溢出","12.1.3 overflow溢出",[1110,133667,133668],{},[49,133669,133670],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[240,133672,133673,133681],{},[243,133674,133675],{},[246,133676,133677,133679],{},[249,133678,126991],{"align":23716},[249,133680,27470],{"align":23716},[287,133682,133683,133691,133698,133705],{},[246,133684,133685,133688],{},[292,133686,133687],{"align":23716},"visible",[292,133689,133690],{"align":23716},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[246,133692,133693,133695],{},[292,133694,61694],{"align":23716},[292,133696,133697],{"align":23716},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[246,133699,133700,133702],{},[292,133701,128947],{"align":23716},[292,133703,133704],{"align":23716},"不管超出内容否，总是显示滚动条",[246,133706,133707,133709],{},[292,133708,72643],{"align":23716},[292,133710,133711],{"align":23716},"超出自动显示滚动条，不超出不显示滚动条",[1110,133713,133714,133717],{},[49,133715,133716],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[49,133718,133719],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[63,133721,133723],{"id":133722},"_1214-案例收获","12.1.4 案例收获",[1441,133725],{"style":126383,"src":133726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[38,133728,133729],{},"问题：没做出来动态效果，使用hover没实现",[38,133731,133732],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[83,133734,133735],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[89,133736,133737,133741,133755,133759,133773,133777,133791,133795,133809,133813],{"__ignoreMap":10},[92,133738,133739],{"class":94,"line":95},[92,133740,131966],{"class":161},[92,133742,133743,133745,133747,133749,133751,133753],{"class":94,"line":11},[92,133744,131971],{"class":1942},[92,133746,79787],{"class":102},[92,133748,128887],{"class":151},[92,133750,51417],{"class":102},[92,133752,131980],{"class":151},[92,133754,129457],{"class":102},[92,133756,133757],{"class":94,"line":1158},[92,133758,131987],{"class":161},[92,133760,133761,133763,133765,133767,133769,133771],{"class":94,"line":1173},[92,133762,131992],{"class":1942},[92,133764,79787],{"class":102},[92,133766,128887],{"class":151},[92,133768,51417],{"class":102},[92,133770,54744],{"class":151},[92,133772,129457],{"class":102},[92,133774,133775],{"class":94,"line":1179},[92,133776,132007],{"class":161},[92,133778,133779,133781,133783,133785,133787,133789],{"class":94,"line":1193},[92,133780,132012],{"class":1942},[92,133782,79787],{"class":102},[92,133784,128887],{"class":151},[92,133786,51417],{"class":102},[92,133788,54811],{"class":151},[92,133790,129457],{"class":102},[92,133792,133793],{"class":94,"line":1199},[92,133794,132027],{"class":161},[92,133796,133797,133799,133801,133803,133805,133807],{"class":94,"line":1290},[92,133798,132032],{"class":1942},[92,133800,79787],{"class":102},[92,133802,128887],{"class":151},[92,133804,51417],{"class":102},[92,133806,86213],{"class":151},[92,133808,129457],{"class":102},[92,133810,133811],{"class":94,"line":1296},[92,133812,132047],{"class":161},[92,133814,133815,133817,133819,133821,133823,133825],{"class":94,"line":1308},[92,133816,132052],{"class":1942},[92,133818,79787],{"class":102},[92,133820,128887],{"class":151},[92,133822,51417],{"class":102},[92,133824,132061],{"class":151},[92,133826,129457],{"class":102},[38,133828,133829],{},"完整代码：",[83,133831,133832],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[89,133833,133834,133838,133852,133856,133870,133874,133888,133892,133906,133910],{"__ignoreMap":10},[92,133835,133836],{"class":94,"line":95},[92,133837,131966],{"class":161},[92,133839,133840,133842,133844,133846,133848,133850],{"class":94,"line":11},[92,133841,131971],{"class":1942},[92,133843,79787],{"class":102},[92,133845,128887],{"class":151},[92,133847,51417],{"class":102},[92,133849,131980],{"class":151},[92,133851,129457],{"class":102},[92,133853,133854],{"class":94,"line":1158},[92,133855,131987],{"class":161},[92,133857,133858,133860,133862,133864,133866,133868],{"class":94,"line":1173},[92,133859,131992],{"class":1942},[92,133861,79787],{"class":102},[92,133863,128887],{"class":151},[92,133865,51417],{"class":102},[92,133867,54744],{"class":151},[92,133869,129457],{"class":102},[92,133871,133872],{"class":94,"line":1179},[92,133873,132007],{"class":161},[92,133875,133876,133878,133880,133882,133884,133886],{"class":94,"line":1193},[92,133877,132012],{"class":1942},[92,133879,79787],{"class":102},[92,133881,128887],{"class":151},[92,133883,51417],{"class":102},[92,133885,54811],{"class":151},[92,133887,129457],{"class":102},[92,133889,133890],{"class":94,"line":1199},[92,133891,132027],{"class":161},[92,133893,133894,133896,133898,133900,133902,133904],{"class":94,"line":1290},[92,133895,132032],{"class":1942},[92,133897,79787],{"class":102},[92,133899,128887],{"class":151},[92,133901,51417],{"class":102},[92,133903,86213],{"class":151},[92,133905,129457],{"class":102},[92,133907,133908],{"class":94,"line":1296},[92,133909,132047],{"class":161},[92,133911,133912,133914,133916,133918,133920,133922],{"class":94,"line":1308},[92,133913,132052],{"class":1942},[92,133915,79787],{"class":102},[92,133917,128887],{"class":151},[92,133919,51417],{"class":102},[92,133921,132061],{"class":151},[92,133923,129457],{"class":102},[38,133925,133926],{},"分布思路重点详解：",[83,133928,133929],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[89,133930,133931,133935,133949,133953,133967,133971,133985,133989,134003,134007],{"__ignoreMap":10},[92,133932,133933],{"class":94,"line":95},[92,133934,131966],{"class":161},[92,133936,133937,133939,133941,133943,133945,133947],{"class":94,"line":11},[92,133938,131971],{"class":1942},[92,133940,79787],{"class":102},[92,133942,128887],{"class":151},[92,133944,51417],{"class":102},[92,133946,131980],{"class":151},[92,133948,129457],{"class":102},[92,133950,133951],{"class":94,"line":1158},[92,133952,131987],{"class":161},[92,133954,133955,133957,133959,133961,133963,133965],{"class":94,"line":1173},[92,133956,131992],{"class":1942},[92,133958,79787],{"class":102},[92,133960,128887],{"class":151},[92,133962,51417],{"class":102},[92,133964,54744],{"class":151},[92,133966,129457],{"class":102},[92,133968,133969],{"class":94,"line":1179},[92,133970,132007],{"class":161},[92,133972,133973,133975,133977,133979,133981,133983],{"class":94,"line":1193},[92,133974,132012],{"class":1942},[92,133976,79787],{"class":102},[92,133978,128887],{"class":151},[92,133980,51417],{"class":102},[92,133982,54811],{"class":151},[92,133984,129457],{"class":102},[92,133986,133987],{"class":94,"line":1199},[92,133988,132027],{"class":161},[92,133990,133991,133993,133995,133997,133999,134001],{"class":94,"line":1290},[92,133992,132032],{"class":1942},[92,133994,79787],{"class":102},[92,133996,128887],{"class":151},[92,133998,51417],{"class":102},[92,134000,86213],{"class":151},[92,134002,129457],{"class":102},[92,134004,134005],{"class":94,"line":1296},[92,134006,132047],{"class":161},[92,134008,134009,134011,134013,134015,134017,134019],{"class":94,"line":1308},[92,134010,132052],{"class":1942},[92,134012,79787],{"class":102},[92,134014,128887],{"class":151},[92,134016,51417],{"class":102},[92,134018,132061],{"class":151},[92,134020,129457],{"class":102},[1441,134022],{"style":126383,"src":134023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[38,134025,134026],{},"图片太大，盒子太小，此时需要修改图片的大小",[83,134028,134030],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[89,134031,134032],{"__ignoreMap":10},[92,134033,134034,134036,134038,134040,134042,134045,134047,134049,134052,134055,134057,134060],{"class":94,"line":95},[92,134035,1013],{"class":102},[92,134037,1441],{"class":51280},[92,134039,55219],{"class":1942},[92,134041,148],{"class":102},[92,134043,134044],{"class":207},"\"images\u002Fpic.jpg\"",[92,134046,55227],{"class":1942},[92,134048,148],{"class":102},[92,134050,134051],{"class":207},"\"描述文字\"",[92,134053,134054],{"class":1942}," title",[92,134056,148],{"class":102},[92,134058,134059],{"class":207},"\"悬停提示\"",[92,134061,51287],{"class":102},[1441,134063],{"style":126383,"src":134064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[38,134066,134067],{},"制造遮罩层",[83,134069,134070],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,134071,134072],{"__ignoreMap":10},[92,134073,134074,134076,134078,134080,134082,134084,134086,134088,134090,134092,134094,134096],{"class":94,"line":95},[92,134075,1013],{"class":102},[92,134077,1441],{"class":51280},[92,134079,55219],{"class":1942},[92,134081,148],{"class":102},[92,134083,134044],{"class":207},[92,134085,55227],{"class":1942},[92,134087,148],{"class":102},[92,134089,134051],{"class":207},[92,134091,134054],{"class":1942},[92,134093,148],{"class":102},[92,134095,134059],{"class":207},[92,134097,51287],{"class":102},[38,134099,134100],{},"此时是这样的为标准流",[1441,134102],{"style":126383,"src":134103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[38,134105,134106],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[38,134108,134109],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[38,134111,134112],{},"让他在中间，用center(background-position)",[38,134114,134115],{},"将需要变的尽可能放到一个盒子中",[38,134117,134118],{},"放大盒子上内部盒子发生变化",[83,134120,134122],{"className":126527,"code":134121,"language":126529,"meta":10,"style":10},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[89,134123,134124,134130,134140,134144,134151,134161,134173,134185],{"__ignoreMap":10},[92,134125,134126,134128],{"class":94,"line":95},[92,134127,127594],{"class":1942},[92,134129,15552],{"class":102},[92,134131,134132,134134,134136,134138],{"class":94,"line":11},[92,134133,132333],{"class":151},[92,134135,51417],{"class":102},[92,134137,54744],{"class":151},[92,134139,1269],{"class":102},[92,134141,134142],{"class":94,"line":1158},[92,134143,1544],{"class":102},[92,134145,134146,134149],{"class":94,"line":1173},[92,134147,134148],{"class":1942},".child",[92,134150,15552],{"class":102},[92,134152,134153,134155,134157,134159],{"class":94,"line":1179},[92,134154,132333],{"class":151},[92,134156,51417],{"class":102},[92,134158,54811],{"class":151},[92,134160,1269],{"class":102},[92,134162,134163,134165,134167,134169,134171],{"class":94,"line":1193},[92,134164,132347],{"class":151},[92,134166,51417],{"class":102},[92,134168,759],{"class":151},[92,134170,431],{"class":98},[92,134172,1269],{"class":102},[92,134174,134175,134177,134179,134181,134183],{"class":94,"line":1199},[92,134176,132364],{"class":151},[92,134178,51417],{"class":102},[92,134180,759],{"class":151},[92,134182,431],{"class":98},[92,134184,1269],{"class":102},[92,134186,134187],{"class":94,"line":1290},[92,134188,1544],{"class":102},[38,134190,134191],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[33,134193,134195],{"id":134194},"_122-精灵图","12.2 精灵图",[63,134197,134199],{"id":134198},"_1221-理解","12.2.1 理解",[46,134201,134202,134220],{},[49,134203,134204,134205,132433,134208,134211,134212,134215,134216,134219],{},"目的： ",[252,134206,134207],{},"为了有效地减少服务器接收和发送请求的次数",[252,134209,134210],{},"提高"," 页面的 ",[252,134213,134214],{},"加载速度"," ，出现了 ",[252,134217,134218],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[49,134221,134222,134223,134225,134226,134228,134229,134231,134232,134234,134235,134237,134238,134240],{},"使用精灵图核心：",[53696,134224],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53696,134227],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53696,134230],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53696,134233],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53696,134236],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53696,134239],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[63,134242,134244],{"id":134243},"_1222-扒图","12.2.2 扒图",[83,134246,134249],{"className":134247,"code":134248,"language":5167},[5165],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[89,134250,134248],{"__ignoreMap":10},[1441,134252],{"style":126383,"src":134253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1441,134255],{"style":126383,"src":134256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[63,134258,134260],{"id":134259},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1441,134262],{"style":126383,"src":134263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[38,134265,134266],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1441,134268],{"style":126383,"src":134269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[83,134271,134273],{"className":126527,"code":134272,"language":126529,"meta":10,"style":10},"\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",[89,134274,134275,134280,134287,134299,134311,134330,134347],{"__ignoreMap":10},[92,134276,134277],{"class":94,"line":95},[92,134278,134279],{"class":161},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[92,134281,134282,134285],{"class":94,"line":11},[92,134283,134284],{"class":1942},".icon",[92,134286,15552],{"class":102},[92,134288,134289,134291,134293,134295,134297],{"class":94,"line":1158},[92,134290,70548],{"class":151},[92,134292,51417],{"class":102},[92,134294,803],{"class":151},[92,134296,51472],{"class":98},[92,134298,1269],{"class":102},[92,134300,134301,134303,134305,134307,134309],{"class":94,"line":1173},[92,134302,70768],{"class":151},[92,134304,51417],{"class":102},[92,134306,803],{"class":151},[92,134308,51472],{"class":98},[92,134310,1269],{"class":102},[92,134312,134313,134315,134317,134319,134321,134324,134326,134328],{"class":94,"line":1179},[92,134314,70591],{"class":151},[92,134316,51417],{"class":102},[92,134318,61706],{"class":151},[92,134320,103],{"class":102},[92,134322,134323],{"class":5196},"sprites.png",[92,134325,13694],{"class":102},[92,134327,61716],{"class":151},[92,134329,1269],{"class":102},[92,134331,134332,134334,134336,134338,134340,134343,134345],{"class":94,"line":1193},[92,134333,128787],{"class":151},[92,134335,51417],{"class":102},[92,134337,51743],{"class":151},[92,134339,51472],{"class":98},[92,134341,134342],{"class":151}," -20",[92,134344,51472],{"class":98},[92,134346,1269],{"class":102},[92,134348,134349],{"class":94,"line":1199},[92,134350,1544],{"class":102},[1441,134352],{"style":126383,"src":134353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[38,134355,134356],{},"在前端中坐标轴的正方向是右和下",[33,134358,134360],{"id":134359},"_123-字体图标","12.3 字体图标",[63,134362,134364],{"id":134363},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[38,134366,134367],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[38,134369,134370],{},"精灵图是有诸多优点的，但是缺点很明显。",[38,134372,134373],{},"1.图片文件还是比较大的。",[38,134375,134376],{},"2.图片本身放大和缩小会失真。",[38,134378,134379],{},"3.一旦图片制作完毕想要更换非常复杂。",[38,134381,134382,134383,25721],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[252,134384,134385],{},"字体图标 iconfont",[38,134387,134388,134391,134392,28366],{},[252,134389,134390],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[252,134393,134394],{},"展示的是图标，本质属于字体",[63,134396,134398],{"id":134397},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1110,134400,134401,134406,134409,134412,134415],{},[49,134402,134403,134405],{},[252,134404,25857],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[49,134407,134408],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[49,134410,134411],{},"兼容性：几乎支持所有的浏览器，请放心使用",[49,134413,134414],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[49,134416,134417],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[63,134419,134421],{"id":134420},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1110,134423,134424],{},[49,134425,134426,134427],{},"icomoon字体库：",[341,134428,134431],{"href":134429,"rel":134430},"http:\u002F\u002Ficomoon.io\u002F",[23845],"http:\u002F\u002Ficomoon.io",[38,134433,134434],{},"进去之后点icomoon app",[1441,134436],{"style":126383,"src":134437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[38,134439,134440],{},"可以对其编辑：",[1441,134442],{"style":126383,"src":134443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[38,134445,134446],{},"生成字体：",[1441,134448],{"style":126383,"src":134449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[38,134451,134452],{},"下载：",[1441,134454],{"style":126383,"src":134455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1110,134457,134458],{},[49,134459,134460,134461],{},"阿里iconfont字体库： ",[341,134462,134463],{"href":134463,"rel":134464},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23845],[63,134466,134468],{"id":134467},"_1234-字体图标的引入","12.3.4 字体图标的引入",[46,134470,134471],{},[49,134472,134473,134474,134477],{},"把下载包里面的 ",[252,134475,134476],{},"fonts"," 文件夹放入页面根目录下",[1441,134479],{"style":126383,"src":134480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[46,134482,134483],{"start":11},[49,134484,134485],{},"字体文件格式",[240,134487,134488,134497],{},[243,134489,134490],{},[246,134491,134492,134495],{},[249,134493,134494],{"align":23716},"格式",[249,134496,23720],{"align":23716},[287,134498,134499,134509,134519,134529],{},[246,134500,134501,134506],{},[292,134502,134503],{"align":23716},[252,134504,134505],{},".ttf",[292,134507,134508],{"align":23716},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[246,134510,134511,134516],{},[292,134512,134513],{"align":23716},[252,134514,134515],{},".woff",[292,134517,134518],{"align":23716},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[246,134520,134521,134526],{},[292,134522,134523],{"align":23716},[252,134524,134525],{},".eot",[292,134527,134528],{"align":23716},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[246,134530,134531,134536],{},[292,134532,134533],{"align":23716},[252,134534,134535],{},"svg",[292,134537,134538],{"align":23716},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[46,134540,134541],{"start":1158},[49,134542,134543],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[83,134545,134547],{"className":126527,"code":134546,"language":126529,"meta":10,"style":10},"\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",[89,134548,134549,134554,134561,134573,134589,134614,134635,134655,134675,134679,134685,134695,134706],{"__ignoreMap":10},[92,134550,134551],{"class":94,"line":95},[92,134552,134553],{"class":161},"\u002F* 引入字体图标 *\u002F\n",[92,134555,134556,134559],{"class":94,"line":11},[92,134557,134558],{"class":98},"@font-face",[92,134560,15552],{"class":102},[92,134562,134563,134566,134568,134571],{"class":94,"line":1158},[92,134564,134565],{"class":151},"  font-family",[92,134567,51417],{"class":102},[92,134569,134570],{"class":207},"'icomoon'",[92,134572,1269],{"class":102},[92,134574,134575,134578,134580,134582,134584,134587],{"class":94,"line":1173},[92,134576,134577],{"class":151},"  src",[92,134579,51417],{"class":102},[92,134581,61706],{"class":151},[92,134583,103],{"class":102},[92,134585,134586],{"class":207},"'fonts\u002Ficomoon.eot'",[92,134588,2698],{"class":102},[92,134590,134591,134593,134595,134597,134599,134602,134604,134607,134609,134612],{"class":94,"line":1179},[92,134592,134577],{"class":151},[92,134594,51417],{"class":102},[92,134596,61706],{"class":151},[92,134598,103],{"class":102},[92,134600,134601],{"class":207},"'fonts\u002Ficomoon.eot?#iefix'",[92,134603,13694],{"class":102},[92,134605,134606],{"class":151},"format",[92,134608,103],{"class":102},[92,134610,134611],{"class":207},"'embedded-opentype'",[92,134613,38028],{"class":102},[92,134615,134616,134619,134621,134624,134626,134628,134630,134633],{"class":94,"line":1193},[92,134617,134618],{"class":151},"       url",[92,134620,103],{"class":102},[92,134622,134623],{"class":207},"'fonts\u002Ficomoon.woff'",[92,134625,13694],{"class":102},[92,134627,134606],{"class":151},[92,134629,103],{"class":102},[92,134631,134632],{"class":207},"'woff'",[92,134634,38028],{"class":102},[92,134636,134637,134639,134641,134644,134646,134648,134650,134653],{"class":94,"line":1199},[92,134638,134618],{"class":151},[92,134640,103],{"class":102},[92,134642,134643],{"class":207},"'fonts\u002Ficomoon.ttf'",[92,134645,13694],{"class":102},[92,134647,134606],{"class":151},[92,134649,103],{"class":102},[92,134651,134652],{"class":207},"'truetype'",[92,134654,38028],{"class":102},[92,134656,134657,134659,134661,134664,134666,134668,134670,134673],{"class":94,"line":1290},[92,134658,134618],{"class":151},[92,134660,103],{"class":102},[92,134662,134663],{"class":207},"'fonts\u002Ficomoon.svg#icomoon'",[92,134665,13694],{"class":102},[92,134667,134606],{"class":151},[92,134669,103],{"class":102},[92,134671,134672],{"class":207},"'svg'",[92,134674,2698],{"class":102},[92,134676,134677],{"class":94,"line":1296},[92,134678,1544],{"class":102},[92,134680,134681,134683],{"class":94,"line":1308},[92,134682,134284],{"class":1942},[92,134684,15552],{"class":102},[92,134686,134687,134689,134691,134693],{"class":94,"line":1591},[92,134688,134565],{"class":151},[92,134690,51417],{"class":102},[92,134692,134570],{"class":207},[92,134694,1269],{"class":102},[92,134696,134697,134700,134702,134704],{"class":94,"line":1596},[92,134698,134699],{"class":151},"  font-style",[92,134701,51417],{"class":102},[92,134703,63821],{"class":151},[92,134705,1269],{"class":102},[92,134707,134708],{"class":94,"line":1602},[92,134709,1544],{"class":102},[38,134711,134712],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1441,134714],{"style":126383,"src":134715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[46,134717,134718],{"start":1173},[49,134719,134720],{},"添加字体",[1441,134722],{"style":126383,"src":134723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[38,134725,134726],{},"复制：",[1441,134728],{"style":126383,"src":134729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[38,134731,134732],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[46,134734,134735],{"start":1179},[49,134736,134737],{},"代码展示：",[83,134739,134740],{"className":126527,"code":134546,"language":126529,"meta":10,"style":10},[89,134741,134742,134746,134752,134762,134776,134798,134816,134834,134852,134856,134862,134872,134882],{"__ignoreMap":10},[92,134743,134744],{"class":94,"line":95},[92,134745,134553],{"class":161},[92,134747,134748,134750],{"class":94,"line":11},[92,134749,134558],{"class":98},[92,134751,15552],{"class":102},[92,134753,134754,134756,134758,134760],{"class":94,"line":1158},[92,134755,134565],{"class":151},[92,134757,51417],{"class":102},[92,134759,134570],{"class":207},[92,134761,1269],{"class":102},[92,134763,134764,134766,134768,134770,134772,134774],{"class":94,"line":1173},[92,134765,134577],{"class":151},[92,134767,51417],{"class":102},[92,134769,61706],{"class":151},[92,134771,103],{"class":102},[92,134773,134586],{"class":207},[92,134775,2698],{"class":102},[92,134777,134778,134780,134782,134784,134786,134788,134790,134792,134794,134796],{"class":94,"line":1179},[92,134779,134577],{"class":151},[92,134781,51417],{"class":102},[92,134783,61706],{"class":151},[92,134785,103],{"class":102},[92,134787,134601],{"class":207},[92,134789,13694],{"class":102},[92,134791,134606],{"class":151},[92,134793,103],{"class":102},[92,134795,134611],{"class":207},[92,134797,38028],{"class":102},[92,134799,134800,134802,134804,134806,134808,134810,134812,134814],{"class":94,"line":1193},[92,134801,134618],{"class":151},[92,134803,103],{"class":102},[92,134805,134623],{"class":207},[92,134807,13694],{"class":102},[92,134809,134606],{"class":151},[92,134811,103],{"class":102},[92,134813,134632],{"class":207},[92,134815,38028],{"class":102},[92,134817,134818,134820,134822,134824,134826,134828,134830,134832],{"class":94,"line":1199},[92,134819,134618],{"class":151},[92,134821,103],{"class":102},[92,134823,134643],{"class":207},[92,134825,13694],{"class":102},[92,134827,134606],{"class":151},[92,134829,103],{"class":102},[92,134831,134652],{"class":207},[92,134833,38028],{"class":102},[92,134835,134836,134838,134840,134842,134844,134846,134848,134850],{"class":94,"line":1290},[92,134837,134618],{"class":151},[92,134839,103],{"class":102},[92,134841,134663],{"class":207},[92,134843,13694],{"class":102},[92,134845,134606],{"class":151},[92,134847,103],{"class":102},[92,134849,134672],{"class":207},[92,134851,2698],{"class":102},[92,134853,134854],{"class":94,"line":1296},[92,134855,1544],{"class":102},[92,134857,134858,134860],{"class":94,"line":1308},[92,134859,134284],{"class":1942},[92,134861,15552],{"class":102},[92,134863,134864,134866,134868,134870],{"class":94,"line":1591},[92,134865,134565],{"class":151},[92,134867,51417],{"class":102},[92,134869,134570],{"class":207},[92,134871,1269],{"class":102},[92,134873,134874,134876,134878,134880],{"class":94,"line":1596},[92,134875,134699],{"class":151},[92,134877,51417],{"class":102},[92,134879,63821],{"class":151},[92,134881,1269],{"class":102},[92,134883,134884],{"class":94,"line":1602},[92,134885,1544],{"class":102},[1441,134887],{"style":126383,"src":134888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[38,134890,134891],{},"更加细节展示：",[46,134893,134894],{},[49,134895,134896],{},"html 标签内添加小图标",[1441,134898],{"style":126383,"src":134899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[46,134901,134902],{"start":11},[49,134903,134904],{},"给标签定义字体",[83,134906,134907],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[89,134908,134909,134913,134927,134931],{"__ignoreMap":10},[92,134910,134911],{"class":94,"line":95},[92,134912,130638],{"class":161},[92,134914,134915,134917,134919,134921,134923,134925],{"class":94,"line":11},[92,134916,1013],{"class":102},[92,134918,51591],{"class":51280},[92,134920,53466],{"class":1942},[92,134922,148],{"class":102},[92,134924,130651],{"class":207},[92,134926,51287],{"class":102},[92,134928,134929],{"class":94,"line":1158},[92,134930,130658],{"class":102},[92,134932,134933,134935,134937],{"class":94,"line":1173},[92,134934,51765],{"class":102},[92,134936,51591],{"class":51280},[92,134938,51287],{"class":102},[38,134940,134941],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1441,134943],{"style":126383,"src":134944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[63,134946,134948],{"id":134947},"_1235-字体图标的追加","12.3.5 字体图标的追加",[38,134950,134951],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[38,134953,134954,134955,134958],{},"把压缩包里面的 ",[252,134956,134957],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[38,134960,134961],{},"打开网站，点下方：",[1441,134963],{"style":126383,"src":134964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1441,134966],{"style":126383,"src":134967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1441,134969],{"style":126383,"src":134970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[38,134972,134973],{},"点yes重新加载",[38,134975,134976],{},"然后重复之前的操作就可以实现了",[38,134978,134979],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[63,134981,134983],{"id":134982},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1441,134985],{"style":126383,"src":134986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5106,134988,134989],{},"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":10,"searchDepth":11,"depth":11,"links":134991},[134992,134998,135003],{"id":133595,"depth":11,"text":133596,"children":134993},[134994,134995,134996,134997],{"id":133607,"depth":1158,"text":133608},{"id":133636,"depth":1158,"text":133637},{"id":133664,"depth":1158,"text":133665},{"id":133722,"depth":1158,"text":133723},{"id":134194,"depth":11,"text":134195,"children":134999},[135000,135001,135002],{"id":134198,"depth":1158,"text":134199},{"id":134243,"depth":1158,"text":134244},{"id":134259,"depth":1158,"text":134260},{"id":134359,"depth":11,"text":134360,"children":135004},[135005,135006,135007,135008,135009,135010],{"id":134363,"depth":1158,"text":134364},{"id":134397,"depth":1158,"text":134398},{"id":134420,"depth":1158,"text":134421},{"id":134467,"depth":1158,"text":134468},{"id":134947,"depth":1158,"text":134948},{"id":134982,"depth":1158,"text":134983},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133587,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135017,"title":135018,"body":135019,"description":13,"extension":14,"meta":136246,"navigation":17,"path":136247,"seo":136248,"stem":136249,"__hash__":136250},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135020,"toc":136227},[135021,135024,135028,135031,135045,135113,135143,135146,135150,135154,135256,135303,135307,135310,135313,135347,135350,135353,135356,135359,135362,135365,135368,135370,135373,135376,135379,135382,135385,135388,135391,135419,135422,135426,135429,135436,135439,135442,135468,135471,135475,135478,135481,135488,135492,135495,135497,135529,135532,135535,135547,135553,135556,135559,135562,135564,135568,135571,135574,135577,135622,135626,135628,135631,135638,135680,135683,135687,135692,135706,135710,135713,135716,135719,135722,135725,135759,135762,135765,135819,135822,135825,135828,135831,135883,135886,135889,135938,135942,135944,135947,135950,135953,135956,135959,136017,136020,136026,136029,136032,136064,136067,136071,136075,136078,136110,136114,136117,136161,136165,136168,136171,136174,136177,136180,136183,136186,136188,136191,136193,136196,136199,136202,136205,136210,136213,136215,136218,136221,136224],[29,135022,135018],{"id":135023},"_13-界面样式与布局技巧",[33,135025,135027],{"id":135026},"_131-css三角","13.1 css三角",[38,135029,135030],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1110,135032,135033,135036,135039,135042],{},[49,135034,135035],{},"用css 边框可以模拟三角效果",[49,135037,135038],{},"宽度高度为0",[49,135040,135041],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[49,135043,135044],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[83,135046,135048],{"className":126527,"code":135047,"language":126529,"meta":10,"style":10},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[89,135049,135050,135055,135062,135072,135082,135098,135109],{"__ignoreMap":10},[92,135051,135052],{"class":94,"line":95},[92,135053,135054],{"class":161},"\u002F* CSS 实现三角形 *\u002F\n",[92,135056,135057,135060],{"class":94,"line":11},[92,135058,135059],{"class":1942},".triangle",[92,135061,15552],{"class":102},[92,135063,135064,135066,135068,135070],{"class":94,"line":1158},[92,135065,70548],{"class":151},[92,135067,51417],{"class":102},[92,135069,294],{"class":151},[92,135071,1269],{"class":102},[92,135073,135074,135076,135078,135080],{"class":94,"line":1173},[92,135075,70768],{"class":151},[92,135077,51417],{"class":102},[92,135079,294],{"class":151},[92,135081,1269],{"class":102},[92,135083,135084,135086,135088,135090,135092,135094,135096],{"class":94,"line":1179},[92,135085,70876],{"class":151},[92,135087,51417],{"class":102},[92,135089,549],{"class":151},[92,135091,51472],{"class":98},[92,135093,51501],{"class":151},[92,135095,63971],{"class":151},[92,135097,1269],{"class":102},[92,135099,135100,135103,135105,135107],{"class":94,"line":1193},[92,135101,135102],{"class":151},"  border-bottom-color",[92,135104,51417],{"class":102},[92,135106,62349],{"class":151},[92,135108,1269],{"class":102},[92,135110,135111],{"class":94,"line":1199},[92,135112,1544],{"class":102},[83,135114,135115],{"className":126527,"code":130684,"language":126529,"meta":10,"style":10},[89,135116,135117,135123,135139],{"__ignoreMap":10},[92,135118,135119,135121],{"class":94,"line":95},[92,135120,51591],{"class":51280},[92,135122,15552],{"class":102},[92,135124,135125,135127,135129,135131,135133,135135,135137],{"class":94,"line":11},[92,135126,70876],{"class":151},[92,135128,51417],{"class":102},[92,135130,320],{"class":151},[92,135132,51472],{"class":98},[92,135134,51501],{"class":151},[92,135136,129919],{"class":151},[92,135138,1269],{"class":102},[92,135140,135141],{"class":94,"line":1158},[92,135142,1544],{"class":102},[1441,135144],{"style":126383,"src":135145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[33,135147,135149],{"id":135148},"_132-css用户界面样式","13.2 css用户界面样式",[63,135151,135153],{"id":135152},"_1321-鼠标样式","13.2.1 鼠标样式",[83,135155,135157],{"className":126527,"code":135156,"language":126529,"meta":10,"style":10},"\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",[89,135158,135159,135164,135183,135201,135220,135237],{"__ignoreMap":10},[92,135160,135161],{"class":94,"line":95},[92,135162,135163],{"class":161},"\u002F* 鼠标样式 *\u002F\n",[92,135165,135166,135168,135170,135173,135175,135177,135180],{"class":94,"line":11},[92,135167,51591],{"class":51280},[92,135169,79787],{"class":102},[92,135171,135172],{"class":151},"cursor",[92,135174,51417],{"class":102},[92,135176,62010],{"class":151},[92,135178,135179],{"class":102},"; }   ",[92,135181,135182],{"class":161},"\u002F* 手型 *\u002F\n",[92,135184,135185,135187,135189,135191,135193,135196,135198],{"class":94,"line":1158},[92,135186,51591],{"class":51280},[92,135188,79787],{"class":102},[92,135190,135172],{"class":151},[92,135192,51417],{"class":102},[92,135194,135195],{"class":151},"default",[92,135197,135179],{"class":102},[92,135199,135200],{"class":161},"\u002F* 默认 *\u002F\n",[92,135202,135203,135205,135207,135209,135211,135214,135217],{"class":94,"line":1173},[92,135204,51591],{"class":51280},[92,135206,79787],{"class":102},[92,135208,135172],{"class":151},[92,135210,51417],{"class":102},[92,135212,135213],{"class":151},"move",[92,135215,135216],{"class":102},"; }      ",[92,135218,135219],{"class":161},"\u002F* 移动 *\u002F\n",[92,135221,135222,135224,135226,135228,135230,135232,135234],{"class":94,"line":1179},[92,135223,51591],{"class":51280},[92,135225,79787],{"class":102},[92,135227,135172],{"class":151},[92,135229,51417],{"class":102},[92,135231,5167],{"class":151},[92,135233,135216],{"class":102},[92,135235,135236],{"class":161},"\u002F* 文本 *\u002F\n",[92,135238,135239,135241,135243,135245,135247,135250,135253],{"class":94,"line":1193},[92,135240,51591],{"class":51280},[92,135242,79787],{"class":102},[92,135244,135172],{"class":151},[92,135246,51417],{"class":102},[92,135248,135249],{"class":151},"not-allowed",[92,135251,135252],{"class":102},"; } ",[92,135254,135255],{"class":161},"\u002F* 禁止 *\u002F\n",[240,135257,135258,135266],{},[243,135259,135260],{},[246,135261,135262,135264],{},[249,135263,126991],{"align":23716},[249,135265,27470],{"align":23716},[287,135267,135268,135275,135282,135289,135296],{},[246,135269,135270,135272],{},[292,135271,135195],{"align":23716},[292,135273,135274],{"align":23716},"小白 默认",[246,135276,135277,135279],{},[292,135278,62010],{"align":23716},[292,135280,135281],{"align":23716},"小手",[246,135283,135284,135286],{},[292,135285,135213],{"align":23716},[292,135287,135288],{"align":23716},"移动",[246,135290,135291,135293],{},[292,135292,5167],{"align":23716},[292,135294,135295],{"align":23716},"文本",[246,135297,135298,135300],{},[292,135299,135249],{"align":23716},[292,135301,135302],{"align":23716},"禁止",[63,135304,135306],{"id":135305},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[38,135308,135309],{},"去除表单轮廓线",[38,135311,135312],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[83,135314,135315],{"className":126527,"code":129891,"language":126529,"meta":10,"style":10},[89,135316,135317,135321,135327,135343],{"__ignoreMap":10},[92,135318,135319],{"class":94,"line":95},[92,135320,129898],{"class":161},[92,135322,135323,135325],{"class":94,"line":11},[92,135324,51591],{"class":51280},[92,135326,15552],{"class":102},[92,135328,135329,135331,135333,135335,135337,135339,135341],{"class":94,"line":1158},[92,135330,70876],{"class":151},[92,135332,51417],{"class":102},[92,135334,320],{"class":151},[92,135336,51472],{"class":98},[92,135338,51501],{"class":151},[92,135340,129919],{"class":151},[92,135342,1269],{"class":102},[92,135344,135345],{"class":94,"line":1173},[92,135346,1544],{"class":102},[38,135348,135349],{},"文本域：",[1441,135351],{"style":126383,"src":135352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[38,135354,135355],{},"此时会有一个空白区域",[1441,135357],{"style":126383,"src":135358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[38,135360,135361],{},"写在同一行就不会出现这个问题",[1441,135363],{"style":126383,"src":135364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[38,135366,135367],{},"文本域是行内块元素，一定记住！！！",[38,135369,98213],{},[1441,135371],{"style":126383,"src":135372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[38,135374,135375],{},"文本域尽量放在一行",[38,135377,135378],{},"知识回顾：cols是列，rols是行",[1441,135380],{"style":126383,"src":135381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[38,135383,135384],{},"它可以进行拖动，显然这是我们不愿意看到的",[1441,135386],{"style":126383,"src":135387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[38,135389,135390],{},"使用resize进行解决",[83,135392,135394],{"className":126527,"code":135393,"language":126529,"meta":10,"style":10},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[89,135395,135396,135402,135415],{"__ignoreMap":10},[92,135397,135398,135400],{"class":94,"line":95},[92,135399,53801],{"class":51280},[92,135401,15552],{"class":102},[92,135403,135404,135406,135408,135410,135412],{"class":94,"line":11},[92,135405,70778],{"class":151},[92,135407,51417],{"class":102},[92,135409,54717],{"class":151},[92,135411,130390],{"class":102},[92,135413,135414],{"class":161},"\u002F* 取消表单轮廓线 *\u002F\n",[92,135416,135417],{"class":94,"line":1158},[92,135418,1544],{"class":102},[38,135420,135421],{},"此时就无法通过右下方实现拖动了",[63,135423,135425],{"id":135424},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[38,135427,135428],{},"实现一个盒子中的文字和图片对齐",[38,135430,135431,135432,135435],{},"用于设置一个元素的 ",[252,135433,135434],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[38,135437,135438],{},"图片和文字默认是基线对齐",[1441,135440],{"style":126383,"src":135441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[83,135443,135444],{"className":126527,"code":135393,"language":126529,"meta":10,"style":10},[89,135445,135446,135452,135464],{"__ignoreMap":10},[92,135447,135448,135450],{"class":94,"line":95},[92,135449,53801],{"class":51280},[92,135451,15552],{"class":102},[92,135453,135454,135456,135458,135460,135462],{"class":94,"line":11},[92,135455,70778],{"class":151},[92,135457,51417],{"class":102},[92,135459,54717],{"class":151},[92,135461,130390],{"class":102},[92,135463,135414],{"class":161},[92,135465,135466],{"class":94,"line":1158},[92,135467,1544],{"class":102},[1441,135469],{"style":126383,"src":135470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21978,135472,135474],{"id":135473},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[38,135476,135477],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1441,135479],{"style":126383,"src":135480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[38,135482,135483,135484,135487],{},"此时可以给图片、表单这些行内块元素的 ",[252,135485,135486],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21978,135489,135491],{"id":135490},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[38,135493,135494],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[38,135496,14613],{},[83,135498,135500],{"className":126527,"code":135499,"language":126529,"meta":10,"style":10},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[89,135501,135502,135507,135513,135525],{"__ignoreMap":10},[92,135503,135504],{"class":94,"line":95},[92,135505,135506],{"class":161},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[92,135508,135509,135511],{"class":94,"line":11},[92,135510,1441],{"class":51280},[92,135512,15552],{"class":102},[92,135514,135515,135518,135520,135523],{"class":94,"line":1158},[92,135516,135517],{"class":151},"  vertical-align",[92,135519,51417],{"class":102},[92,135521,135522],{"class":151},"middle",[92,135524,1269],{"class":102},[92,135526,135527],{"class":94,"line":1173},[92,135528,1544],{"class":102},[1441,135530],{"style":126383,"src":135531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[38,135533,135534],{},"主要解决方法有两种：",[46,135536,135537],{},[49,135538,135539,135542,135543,135546],{},[252,135540,135541],{},"给图片"," 添加 ",[252,135544,135545],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[38,135548,135549,135550],{},"2.把图片转换为块级元素 ",[252,135551,135552],{},"display: block",[38,135554,135555],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[38,135557,135558],{},"img {",[38,135560,135561],{},"vertical-align:middle;",[38,135563,1049],{},[63,135565,135567],{"id":135566},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[38,135569,135570],{},"效果：",[1441,135572],{"style":126383,"src":135573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[38,135575,135576],{},"单行文本溢出显示省略号--必须满足三个条件：",[83,135578,135580],{"className":126527,"code":135579,"language":126529,"meta":10,"style":10},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[89,135581,135582,135587,135593,135603,135608,135618],{"__ignoreMap":10},[92,135583,135584],{"class":94,"line":95},[92,135585,135586],{"class":161},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[92,135588,135589,135591],{"class":94,"line":11},[92,135590,1441],{"class":51280},[92,135592,15552],{"class":102},[92,135594,135595,135597,135599,135601],{"class":94,"line":1158},[92,135596,135517],{"class":151},[92,135598,51417],{"class":102},[92,135600,135522],{"class":151},[92,135602,1269],{"class":102},[92,135604,135605],{"class":94,"line":1173},[92,135606,135607],{"class":161},"  \u002F* 或 *\u002F\n",[92,135609,135610,135612,135614,135616],{"class":94,"line":1179},[92,135611,128143],{"class":151},[92,135613,51417],{"class":102},[92,135615,60849],{"class":151},[92,135617,1269],{"class":102},[92,135619,135620],{"class":94,"line":1193},[92,135621,1544],{"class":102},[63,135623,135625],{"id":135624},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[38,135627,135570],{},[1441,135629],{"style":126383,"src":135630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[38,135632,135633,135634,135637],{},"多行文本溢出显示省略号， ",[252,135635,135636],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[83,135639,135640],{"className":126527,"code":135579,"language":126529,"meta":10,"style":10},[89,135641,135642,135646,135652,135662,135666,135676],{"__ignoreMap":10},[92,135643,135644],{"class":94,"line":95},[92,135645,135586],{"class":161},[92,135647,135648,135650],{"class":94,"line":11},[92,135649,1441],{"class":51280},[92,135651,15552],{"class":102},[92,135653,135654,135656,135658,135660],{"class":94,"line":1158},[92,135655,135517],{"class":151},[92,135657,51417],{"class":102},[92,135659,135522],{"class":151},[92,135661,1269],{"class":102},[92,135663,135664],{"class":94,"line":1173},[92,135665,135607],{"class":161},[92,135667,135668,135670,135672,135674],{"class":94,"line":1179},[92,135669,128143],{"class":151},[92,135671,51417],{"class":102},[92,135673,60849],{"class":151},[92,135675,1269],{"class":102},[92,135677,135678],{"class":94,"line":1193},[92,135679,1544],{"class":102},[38,135681,135682],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[33,135684,135686],{"id":135685},"_133-常见布局技巧","13.3 常见布局技巧",[38,135688,135689],{},[252,135690,135691],{},"巧妙利用一个技术更快更好的布局：",[46,135693,135694,135697,135700,135703],{},[49,135695,135696],{},"margin负值的运用",[49,135698,135699],{},"文字围绕浮动元素",[49,135701,135702],{},"行内块的巧妙运用",[49,135704,135705],{},"CSS三角强化",[63,135707,135709],{"id":135708},"_1331-margin负值的运用","13.3.1 margin负值的运用",[38,135711,135712],{},"应用场景：",[1441,135714],{"style":126383,"src":135715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1441,135717],{"style":126383,"src":135718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[38,135720,135721],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[38,135723,135724],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[83,135726,135727],{"className":126527,"code":129891,"language":126529,"meta":10,"style":10},[89,135728,135729,135733,135739,135755],{"__ignoreMap":10},[92,135730,135731],{"class":94,"line":95},[92,135732,129898],{"class":161},[92,135734,135735,135737],{"class":94,"line":11},[92,135736,51591],{"class":51280},[92,135738,15552],{"class":102},[92,135740,135741,135743,135745,135747,135749,135751,135753],{"class":94,"line":1158},[92,135742,70876],{"class":151},[92,135744,51417],{"class":102},[92,135746,320],{"class":151},[92,135748,51472],{"class":98},[92,135750,51501],{"class":151},[92,135752,129919],{"class":151},[92,135754,1269],{"class":102},[92,135756,135757],{"class":94,"line":1173},[92,135758,1544],{"class":102},[1441,135760],{"style":126383,"src":135761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[38,135763,135764],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[83,135766,135768],{"className":126527,"code":135767,"language":126529,"meta":10,"style":10},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[89,135769,135770,135775,135781,135791,135803,135815],{"__ignoreMap":10},[92,135771,135772],{"class":94,"line":95},[92,135773,135774],{"class":161},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[92,135776,135777,135779],{"class":94,"line":11},[92,135778,130375],{"class":1942},[92,135780,15552],{"class":102},[92,135782,135783,135785,135787,135789],{"class":94,"line":1158},[92,135784,132333],{"class":151},[92,135786,51417],{"class":102},[92,135788,54744],{"class":151},[92,135790,1269],{"class":102},[92,135792,135793,135795,135797,135799,135801],{"class":94,"line":1173},[92,135794,132347],{"class":151},[92,135796,51417],{"class":102},[92,135798,549],{"class":151},[92,135800,51472],{"class":98},[92,135802,1269],{"class":102},[92,135804,135805,135807,135809,135811,135813],{"class":94,"line":1179},[92,135806,132364],{"class":151},[92,135808,51417],{"class":102},[92,135810,803],{"class":151},[92,135812,51472],{"class":98},[92,135814,1269],{"class":102},[92,135816,135817],{"class":94,"line":1193},[92,135818,1544],{"class":102},[38,135820,135821],{},"加上上述代码会发现：",[1441,135823],{"style":126383,"src":135824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[38,135826,135827],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[38,135829,135830],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[83,135832,135833],{"className":126527,"code":135767,"language":126529,"meta":10,"style":10},[89,135834,135835,135839,135845,135855,135867,135879],{"__ignoreMap":10},[92,135836,135837],{"class":94,"line":95},[92,135838,135774],{"class":161},[92,135840,135841,135843],{"class":94,"line":11},[92,135842,130375],{"class":1942},[92,135844,15552],{"class":102},[92,135846,135847,135849,135851,135853],{"class":94,"line":1158},[92,135848,132333],{"class":151},[92,135850,51417],{"class":102},[92,135852,54744],{"class":151},[92,135854,1269],{"class":102},[92,135856,135857,135859,135861,135863,135865],{"class":94,"line":1173},[92,135858,132347],{"class":151},[92,135860,51417],{"class":102},[92,135862,549],{"class":151},[92,135864,51472],{"class":98},[92,135866,1269],{"class":102},[92,135868,135869,135871,135873,135875,135877],{"class":94,"line":1179},[92,135870,132364],{"class":151},[92,135872,51417],{"class":102},[92,135874,803],{"class":151},[92,135876,51472],{"class":98},[92,135878,1269],{"class":102},[92,135880,135881],{"class":94,"line":1193},[92,135882,1544],{"class":102},[38,135884,135885],{},"解决方式2：",[38,135887,135888],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[83,135890,135892],{"className":126527,"code":135891,"language":126529,"meta":10,"style":10},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[89,135893,135894,135900,135910,135922,135934],{"__ignoreMap":10},[92,135895,135896,135898],{"class":94,"line":95},[92,135897,51591],{"class":51280},[92,135899,15552],{"class":102},[92,135901,135902,135904,135906,135908],{"class":94,"line":11},[92,135903,132333],{"class":151},[92,135905,51417],{"class":102},[92,135907,54744],{"class":151},[92,135909,1269],{"class":102},[92,135911,135912,135914,135916,135918,135920],{"class":94,"line":1158},[92,135913,132347],{"class":151},[92,135915,51417],{"class":102},[92,135917,549],{"class":151},[92,135919,51472],{"class":98},[92,135921,1269],{"class":102},[92,135923,135924,135926,135928,135930,135932],{"class":94,"line":1173},[92,135925,132364],{"class":151},[92,135927,51417],{"class":102},[92,135929,803],{"class":151},[92,135931,51472],{"class":98},[92,135933,1269],{"class":102},[92,135935,135936],{"class":94,"line":1179},[92,135937,1544],{"class":102},[63,135939,135941],{"id":135940},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[38,135943,135712],{},[1441,135945],{"style":126383,"src":135946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[38,135948,135949],{},"实现结构图：",[1441,135951],{"style":126383,"src":135952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[38,135954,135955],{},"巧妙运用浮动元素不会压住文字的特性",[38,135957,135958],{},"代码显示：",[83,135960,135962],{"className":126527,"code":135961,"language":126529,"meta":10,"style":10},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[89,135963,135964,135970,135980,135984,135989,135993,135999,136013],{"__ignoreMap":10},[92,135965,135966,135968],{"class":94,"line":95},[92,135967,130375],{"class":1942},[92,135969,15552],{"class":102},[92,135971,135972,135974,135976,135978],{"class":94,"line":11},[92,135973,131007],{"class":151},[92,135975,51417],{"class":102},[92,135977,23716],{"class":151},[92,135979,1269],{"class":102},[92,135981,135982],{"class":94,"line":1158},[92,135983,1544],{"class":102},[92,135985,135986],{"class":94,"line":1173},[92,135987,135988],{"class":102},"```Css\n",[92,135990,135991],{"class":94,"line":1179},[92,135992,130370],{"class":161},[92,135994,135995,135997],{"class":94,"line":1193},[92,135996,130375],{"class":1942},[92,135998,15552],{"class":102},[92,136000,136001,136003,136005,136007,136009,136011],{"class":94,"line":1199},[92,136002,70450],{"class":151},[92,136004,51417],{"class":102},[92,136006,294],{"class":151},[92,136008,51536],{"class":151},[92,136010,130390],{"class":102},[92,136012,130393],{"class":161},[92,136014,136015],{"class":94,"line":1290},[92,136016,1544],{"class":102},[38,136018,136019],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[83,136021,136024],{"className":136022,"code":136023,"language":5167},[5165],"\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",[89,136025,136023],{"__ignoreMap":10},[1441,136027],{"style":126383,"src":136028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[38,136030,136031],{},"最终展示结果：",[83,136033,136034],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},[89,136035,136036,136040,136046,136060],{"__ignoreMap":10},[92,136037,136038],{"class":94,"line":95},[92,136039,130370],{"class":161},[92,136041,136042,136044],{"class":94,"line":11},[92,136043,130375],{"class":1942},[92,136045,15552],{"class":102},[92,136047,136048,136050,136052,136054,136056,136058],{"class":94,"line":1158},[92,136049,70450],{"class":151},[92,136051,51417],{"class":102},[92,136053,294],{"class":151},[92,136055,51536],{"class":151},[92,136057,130390],{"class":102},[92,136059,130393],{"class":161},[92,136061,136062],{"class":94,"line":1173},[92,136063,1544],{"class":102},[1441,136065],{"style":126383,"src":136066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[33,136068,136070],{"id":136069},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[63,136072,136074],{"id":136073},"_1341-原理","13.4.1 原理",[1441,136076],{"style":126383,"src":136077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[83,136079,136080],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},[89,136081,136082,136086,136092,136106],{"__ignoreMap":10},[92,136083,136084],{"class":94,"line":95},[92,136085,130370],{"class":161},[92,136087,136088,136090],{"class":94,"line":11},[92,136089,130375],{"class":1942},[92,136091,15552],{"class":102},[92,136093,136094,136096,136098,136100,136102,136104],{"class":94,"line":1158},[92,136095,70450],{"class":151},[92,136097,51417],{"class":102},[92,136099,294],{"class":151},[92,136101,51536],{"class":151},[92,136103,130390],{"class":102},[92,136105,130393],{"class":161},[92,136107,136108],{"class":94,"line":1173},[92,136109,1544],{"class":102},[63,136111,136113],{"id":136112},"_1342-实例","13.4.2 实例",[1441,136115],{"style":126383,"src":136116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[83,136118,136119],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[89,136120,136121,136127,136137,136141,136147,136157],{"__ignoreMap":10},[92,136122,136123,136125],{"class":94,"line":95},[92,136124,131000],{"class":1942},[92,136126,15552],{"class":102},[92,136128,136129,136131,136133,136135],{"class":94,"line":11},[92,136130,131007],{"class":151},[92,136132,51417],{"class":102},[92,136134,23716],{"class":151},[92,136136,1269],{"class":102},[92,136138,136139],{"class":94,"line":1158},[92,136140,1544],{"class":102},[92,136142,136143,136145],{"class":94,"line":1173},[92,136144,131022],{"class":1942},[92,136146,15552],{"class":102},[92,136148,136149,136151,136153,136155],{"class":94,"line":1179},[92,136150,131007],{"class":151},[92,136152,51417],{"class":102},[92,136154,72502],{"class":151},[92,136156,1269],{"class":102},[92,136158,136159],{"class":94,"line":1193},[92,136160,1544],{"class":102},[33,136162,136164],{"id":136163},"_135-css的初始化","13.5 css的初始化",[38,136166,136167],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[38,136169,136170],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[38,136172,136173],{},"每个网页都必须首先进行 CSS初始化。",[38,136175,136176],{},"这里我们以 京东CSS初始化代码为例。",[38,136178,136179],{},"在网页右键查看网页源代码",[38,136181,136182],{},"找到css的link引入语句",[38,136184,136185],{},"然后ctrl+f 输入body",[38,136187,77206],{},[1441,136189],{"style":126383,"src":136190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[38,136192,77229],{},[1441,136194],{"style":126383,"src":136195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[38,136197,136198],{},"③打开了网页上传压缩的代码",[1441,136200],{"style":126383,"src":136201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[38,136203,136204],{},"④从body前可以查看这个网页的初始化代码",[38,136206,136207],{},[252,136208,136209],{},"Unicode编码字体：",[38,136211,136212],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[38,136214,83187],{},[38,136216,136217],{},"黑体 \\9ED1\\4F53",[38,136219,136220],{},"宋体 \\5B8B\\4F53",[38,136222,136223],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5106,136225,136226],{},"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":10,"searchDepth":11,"depth":11,"links":136228},[136229,136230,136237,136241,136245],{"id":135026,"depth":11,"text":135027},{"id":135148,"depth":11,"text":135149,"children":136231},[136232,136233,136234,136235,136236],{"id":135152,"depth":1158,"text":135153},{"id":135305,"depth":1158,"text":135306},{"id":135424,"depth":1158,"text":135425},{"id":135566,"depth":1158,"text":135567},{"id":135624,"depth":1158,"text":135625},{"id":135685,"depth":11,"text":135686,"children":136238},[136239,136240],{"id":135708,"depth":1158,"text":135709},{"id":135940,"depth":1158,"text":135941},{"id":136069,"depth":11,"text":136070,"children":136242},[136243,136244],{"id":136073,"depth":1158,"text":136074},{"id":136112,"depth":1158,"text":136113},{"id":136163,"depth":11,"text":136164},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135018,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136252,"title":136253,"body":136254,"description":13,"extension":14,"meta":137940,"navigation":17,"path":137941,"seo":137942,"stem":137943,"__hash__":137944},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136255,"toc":137929},[136256,136259,136263,136267,136270,136277,136280,136283,136321,136324,136326,136340,136344,136353,136357,136362,136365,136368,136371,136406,136411,136414,136444,136447,136452,136455,136458,136488,136491,136545,136548,136552,136557,136569,136572,136576,136606,136609,136614,136617,136647,136650,136654,136671,136675,136679,136682,136715,136718,136722,136725,136728,136731,136734,136737,136848,136851,136854,136857,136959,136962,136966,136970,136974,136977,137017,137020,137022,137038,137042,137045,137050,137131,137134,137137,137263,137268,137271,137279,137282,137287,137372,137375,137379,137382,137385,137389,137409,137414,137498,137501,137506,137509,137512,137590,137593,137596,137599,137602,137605,137610,137613,137616,137688,137691,137696,137699,137796,137799,137805,137808,137811,137814,137817,137820,137823,137826,137829,137833,137838,137841,137874,137879,137882,137923,137926],[29,136257,136253],{"id":136258},"_14-html5与css3新特性",[33,136260,136262],{"id":136261},"_141-html5的新特性","14.1 HTML5的新特性",[63,136264,136266],{"id":136265},"_1411-基本标签","14.1.1 基本标签",[38,136268,136269],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[38,136271,136272,136273,136276],{},"这些新特性都有兼容性问题，基本是 ",[252,136274,136275],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[38,136278,136279],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[38,136281,136282],{},"现在使用的是新特性：",[1110,136284,136285,136291,136297,136303,136309,136315],{},[49,136286,136287,136290],{},[89,136288,136289],{},"\u003Cheader>"," 头部标签",[49,136292,136293,136296],{},[89,136294,136295],{},"\u003Cnav>"," 导航标签",[49,136298,136299,136302],{},[89,136300,136301],{},"\u003Carticle>"," 内容标签",[49,136304,136305,136308],{},[89,136306,136307],{},"\u003Csection>"," 定义文档某个区域",[49,136310,136311,136314],{},[89,136312,136313],{},"\u003Caside>"," 侧边栏标签",[49,136316,136317,136320],{},[89,136318,136319],{},"\u003Cfooter>"," 尾部标签",[1441,136322],{"style":126383,"src":136323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[38,136325,132],{},[1110,136327,136328,136331,136334,136337],{},[49,136329,136330],{},"这种语义化标准主要是针对搜索引擎的",[49,136332,136333],{},"这些标签页面中可以经常使用",[49,136335,136336],{},"在IE9中，需要把这些元素转换为块级元素",[49,136338,136339],{},"移动端更喜欢使用这些标签",[63,136341,136343],{"id":136342},"_1412-多媒体标签","14.1.2 多媒体标签",[38,136345,136346,136347,136349,136350,136352],{},"音频 ",[252,136348,28155],{}," 和视频 ",[252,136351,28164],{}," 两个标签",[21978,136354,136356],{"id":136355},"_14121-视频标签-video","14.1.2.1 视频标签- video",[46,136358,136359],{},[49,136360,136361],{},"支持格式：",[1441,136363],{"style":126383,"src":136364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[38,136366,136367],{},"尽量使用MP4，兼容性好",[38,136369,136370],{},"用MP4就可以",[83,136372,136374],{"className":127274,"code":136373,"language":127276,"meta":10,"style":10},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[89,136375,136376],{"__ignoreMap":10},[92,136377,136378,136380,136382,136384,136386,136389,136391,136394,136397,136400,136402,136404],{"class":94,"line":95},[92,136379,1013],{"class":102},[92,136381,28164],{"class":51280},[92,136383,55219],{"class":1942},[92,136385,148],{"class":102},[92,136387,136388],{"class":207},"\"movie.mp4\"",[92,136390,92403],{"class":1942},[92,136392,136393],{"class":1942}," autoplay",[92,136395,136396],{"class":1942}," muted",[92,136398,136399],{"class":1942}," loop",[92,136401,55294],{"class":102},[92,136403,28164],{"class":51280},[92,136405,51287],{"class":102},[46,136407,136408],{"start":11},[49,136409,136410],{},"兼容写法",[38,136412,136413],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[83,136415,136416],{"className":127274,"code":136373,"language":127276,"meta":10,"style":10},[89,136417,136418],{"__ignoreMap":10},[92,136419,136420,136422,136424,136426,136428,136430,136432,136434,136436,136438,136440,136442],{"class":94,"line":95},[92,136421,1013],{"class":102},[92,136423,28164],{"class":51280},[92,136425,55219],{"class":1942},[92,136427,148],{"class":102},[92,136429,136388],{"class":207},[92,136431,92403],{"class":1942},[92,136433,136393],{"class":1942},[92,136435,136396],{"class":1942},[92,136437,136399],{"class":1942},[92,136439,55294],{"class":102},[92,136441,28164],{"class":51280},[92,136443,51287],{"class":102},[38,136445,136446],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[46,136448,136449],{"start":1158},[49,136450,136451],{},"video常用属性",[1441,136453],{"style":126383,"src":136454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[38,136456,136457],{},"poster属性后面是跟的等待加载图片的地址",[83,136459,136460],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,136461,136462],{"__ignoreMap":10},[92,136463,136464,136466,136468,136470,136472,136474,136476,136478,136480,136482,136484,136486],{"class":94,"line":95},[92,136465,1013],{"class":102},[92,136467,1441],{"class":51280},[92,136469,55219],{"class":1942},[92,136471,148],{"class":102},[92,136473,134044],{"class":207},[92,136475,55227],{"class":1942},[92,136477,148],{"class":102},[92,136479,134051],{"class":207},[92,136481,134054],{"class":1942},[92,136483,148],{"class":102},[92,136485,134059],{"class":207},[92,136487,51287],{"class":102},[38,136489,136490],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[83,136492,136494],{"className":126527,"code":136493,"language":126529,"meta":10,"style":10},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[89,136495,136496,136501,136507,136531,136536,136541],{"__ignoreMap":10},[92,136497,136498],{"class":94,"line":95},[92,136499,136500],{"class":161},"\u002F* 2D 位移 *\u002F\n",[92,136502,136503,136505],{"class":94,"line":11},[92,136504,51591],{"class":51280},[92,136506,15552],{"class":102},[92,136508,136509,136512,136514,136517,136519,136521,136523,136525,136527,136529],{"class":94,"line":1158},[92,136510,136511],{"class":151},"  transform",[92,136513,51417],{"class":102},[92,136515,136516],{"class":151},"translate",[92,136518,103],{"class":102},[92,136520,414],{"class":151},[92,136522,51472],{"class":98},[92,136524,12415],{"class":102},[92,136526,759],{"class":151},[92,136528,51472],{"class":98},[92,136530,2698],{"class":102},[92,136532,136533],{"class":94,"line":1173},[92,136534,136535],{"class":161},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[92,136537,136538],{"class":94,"line":1179},[92,136539,136540],{"class":161},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[92,136542,136543],{"class":94,"line":1193},[92,136544,1544],{"class":102},[38,136546,136547],{},"muted:自动静音属性",[21978,136549,136551],{"id":136550},"_14122-音频标签audio","14.1.2.2 音频标签audio",[46,136553,136554],{},[49,136555,136556],{},"基本使用",[38,136558,136559,136560,136565,136566],{},"当前 ",[252,136561,136562],{},[89,136563,136564],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[252,136567,136568],{},"mp3格式",[1441,136570],{"style":126383,"src":136571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[46,136573,136574],{"start":11},[49,136575,136410],{},[83,136577,136578],{"className":127274,"code":136373,"language":127276,"meta":10,"style":10},[89,136579,136580],{"__ignoreMap":10},[92,136581,136582,136584,136586,136588,136590,136592,136594,136596,136598,136600,136602,136604],{"class":94,"line":95},[92,136583,1013],{"class":102},[92,136585,28164],{"class":51280},[92,136587,55219],{"class":1942},[92,136589,148],{"class":102},[92,136591,136388],{"class":207},[92,136593,92403],{"class":1942},[92,136595,136393],{"class":1942},[92,136597,136396],{"class":1942},[92,136599,136399],{"class":1942},[92,136601,55294],{"class":102},[92,136603,28164],{"class":51280},[92,136605,51287],{"class":102},[38,136607,136608],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[46,136610,136611],{"start":1158},[49,136612,136613],{},"常用属性",[1441,136615],{"style":126383,"src":136616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[83,136618,136619],{"className":127274,"code":136373,"language":127276,"meta":10,"style":10},[89,136620,136621],{"__ignoreMap":10},[92,136622,136623,136625,136627,136629,136631,136633,136635,136637,136639,136641,136643,136645],{"class":94,"line":95},[92,136624,1013],{"class":102},[92,136626,28164],{"class":51280},[92,136628,55219],{"class":1942},[92,136630,148],{"class":102},[92,136632,136388],{"class":207},[92,136634,92403],{"class":1942},[92,136636,136393],{"class":1942},[92,136638,136396],{"class":1942},[92,136640,136399],{"class":1942},[92,136642,55294],{"class":102},[92,136644,28164],{"class":51280},[92,136646,51287],{"class":102},[38,136648,136649],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21978,136651,136653],{"id":136652},"_14123-总结","14.1.2.3 总结",[1110,136655,136656,136659,136662,136665,136668],{},[49,136657,136658],{},"音频标签和视频标签使用方式基本一致",[49,136660,136661],{},"浏览器支持情况不同",[49,136663,136664],{},"谷歌浏览器把音频和视频自动播放禁止了",[49,136666,136667],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[49,136669,136670],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[63,136672,136674],{"id":136673},"_1413-表单元素","14.1.3 表单元素",[21978,136676,136678],{"id":136677},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1441,136680],{"style":126383,"src":136681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[83,136683,136685],{"className":127274,"code":136684,"language":127276,"meta":10,"style":10},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[89,136686,136687],{"__ignoreMap":10},[92,136688,136689,136691,136693,136695,136697,136699,136701,136703,136706,136708,136710,136713],{"class":94,"line":95},[92,136690,1013],{"class":102},[92,136692,53801],{"class":51280},[92,136694,53804],{"class":1942},[92,136696,148],{"class":102},[92,136698,62679],{"class":207},[92,136700,14900],{"class":1942},[92,136702,148],{"class":102},[92,136704,136705],{"class":207},"\"username\"",[92,136707,61000],{"class":1942},[92,136709,148],{"class":102},[92,136711,136712],{"class":207},"\"请输入用户名\"",[92,136714,51287],{"class":102},[1441,136716],{"style":126383,"src":136717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21978,136719,136721],{"id":136720},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1441,136723],{"style":126383,"src":136724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[38,136726,136727],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[38,136729,136730],{},"快捷操作：",[1441,136732],{"style":126383,"src":136733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[38,136735,136736],{},"例子1：",[83,136738,136740],{"className":127274,"code":136739,"language":127276,"meta":10,"style":10},"\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",[89,136741,136742,136765,136792,136821,136840],{"__ignoreMap":10},[92,136743,136744,136746,136748,136750,136752,136755,136758,136760,136763],{"class":94,"line":95},[92,136745,1013],{"class":102},[92,136747,66605],{"class":51280},[92,136749,66608],{"class":1942},[92,136751,148],{"class":102},[92,136753,136754],{"class":207},"\"\u002Fsubmit\"",[92,136756,136757],{"class":1942}," method",[92,136759,148],{"class":102},[92,136761,136762],{"class":207},"\"post\"",[92,136764,51287],{"class":102},[92,136766,136767,136769,136771,136773,136775,136777,136779,136781,136783,136785,136787,136790],{"class":94,"line":11},[92,136768,52124],{"class":102},[92,136770,53801],{"class":51280},[92,136772,53804],{"class":1942},[92,136774,148],{"class":102},[92,136776,62679],{"class":207},[92,136778,14900],{"class":1942},[92,136780,148],{"class":102},[92,136782,136705],{"class":207},[92,136784,61000],{"class":1942},[92,136786,148],{"class":102},[92,136788,136789],{"class":207},"\"用户名\"",[92,136791,51287],{"class":102},[92,136793,136794,136796,136798,136800,136802,136805,136807,136809,136812,136814,136816,136819],{"class":94,"line":1158},[92,136795,52124],{"class":102},[92,136797,53801],{"class":51280},[92,136799,53804],{"class":1942},[92,136801,148],{"class":102},[92,136803,136804],{"class":207},"\"password\"",[92,136806,14900],{"class":1942},[92,136808,148],{"class":102},[92,136810,136811],{"class":207},"\"pwd\"",[92,136813,61000],{"class":1942},[92,136815,148],{"class":102},[92,136817,136818],{"class":207},"\"密码\"",[92,136820,51287],{"class":102},[92,136822,136823,136825,136827,136829,136831,136833,136836,136838],{"class":94,"line":1173},[92,136824,52124],{"class":102},[92,136826,53867],{"class":51280},[92,136828,53804],{"class":1942},[92,136830,148],{"class":102},[92,136832,66628],{"class":207},[92,136834,136835],{"class":102},">提交\u003C\u002F",[92,136837,53867],{"class":51280},[92,136839,51287],{"class":102},[92,136841,136842,136844,136846],{"class":94,"line":1179},[92,136843,51765],{"class":102},[92,136845,66605],{"class":51280},[92,136847,51287],{"class":102},[1441,136849],{"style":126383,"src":136850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[38,136852,136853],{},"value是表单域的内容",[38,136855,136856],{},"例子2：",[83,136858,136859],{"className":127274,"code":136739,"language":127276,"meta":10,"style":10},[89,136860,136861,136881,136907,136933,136951],{"__ignoreMap":10},[92,136862,136863,136865,136867,136869,136871,136873,136875,136877,136879],{"class":94,"line":95},[92,136864,1013],{"class":102},[92,136866,66605],{"class":51280},[92,136868,66608],{"class":1942},[92,136870,148],{"class":102},[92,136872,136754],{"class":207},[92,136874,136757],{"class":1942},[92,136876,148],{"class":102},[92,136878,136762],{"class":207},[92,136880,51287],{"class":102},[92,136882,136883,136885,136887,136889,136891,136893,136895,136897,136899,136901,136903,136905],{"class":94,"line":11},[92,136884,52124],{"class":102},[92,136886,53801],{"class":51280},[92,136888,53804],{"class":1942},[92,136890,148],{"class":102},[92,136892,62679],{"class":207},[92,136894,14900],{"class":1942},[92,136896,148],{"class":102},[92,136898,136705],{"class":207},[92,136900,61000],{"class":1942},[92,136902,148],{"class":102},[92,136904,136789],{"class":207},[92,136906,51287],{"class":102},[92,136908,136909,136911,136913,136915,136917,136919,136921,136923,136925,136927,136929,136931],{"class":94,"line":1158},[92,136910,52124],{"class":102},[92,136912,53801],{"class":51280},[92,136914,53804],{"class":1942},[92,136916,148],{"class":102},[92,136918,136804],{"class":207},[92,136920,14900],{"class":1942},[92,136922,148],{"class":102},[92,136924,136811],{"class":207},[92,136926,61000],{"class":1942},[92,136928,148],{"class":102},[92,136930,136818],{"class":207},[92,136932,51287],{"class":102},[92,136934,136935,136937,136939,136941,136943,136945,136947,136949],{"class":94,"line":1173},[92,136936,52124],{"class":102},[92,136938,53867],{"class":51280},[92,136940,53804],{"class":1942},[92,136942,148],{"class":102},[92,136944,66628],{"class":207},[92,136946,136835],{"class":102},[92,136948,53867],{"class":51280},[92,136950,51287],{"class":102},[92,136952,136953,136955,136957],{"class":94,"line":1179},[92,136954,51765],{"class":102},[92,136956,66605],{"class":51280},[92,136958,51287],{"class":102},[1441,136960],{"style":126383,"src":136961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[33,136963,136965],{"id":136964},"_142-css新特性","14.2 CSS新特性",[63,136967,136969],{"id":136968},"_1421-新增选择器","14.2.1 新增选择器",[21978,136971,136973],{"id":136972},"_14211-属性选择器","14.2.1.1 属性选择器",[1441,136975],{"style":126383,"src":136976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[83,136978,136980],{"className":126527,"code":136979,"language":126529,"meta":10,"style":10},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[89,136981,136982,136997,137013],{"__ignoreMap":10},[92,136983,136984,136986,136988,136990,136992,136994],{"class":94,"line":95},[92,136985,53801],{"class":51280},[92,136987,993],{"class":102},[92,136989,103082],{"class":1942},[92,136991,148],{"class":98},[92,136993,62679],{"class":207},[92,136995,136996],{"class":102},"] {\n",[92,136998,136999,137001,137003,137005,137007,137009,137011],{"class":94,"line":11},[92,137000,70876],{"class":151},[92,137002,51417],{"class":102},[92,137004,320],{"class":151},[92,137006,51472],{"class":98},[92,137008,51501],{"class":151},[92,137010,130107],{"class":151},[92,137012,1269],{"class":102},[92,137014,137015],{"class":94,"line":1158},[92,137016,1544],{"class":102},[1441,137018],{"style":126383,"src":137019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[38,137021,132],{},[1110,137023,137024,137027,137030,137033],{},[49,137025,137026],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[49,137028,137029],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[49,137031,137032],{},"属性选择器也可以选择出来自定义的属性",[49,137034,137035,137037],{},[252,137036,9005],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21978,137039,137041],{"id":137040},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1441,137043],{"style":126383,"src":137044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[46,137046,137047],{},[49,137048,137049],{},"fist-child",[83,137051,137053],{"className":126527,"code":137052,"language":126529,"meta":10,"style":10},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[89,137054,137055,137060,137075,137095,137113],{"__ignoreMap":10},[92,137056,137057],{"class":94,"line":95},[92,137058,137059],{"class":161},"\u002F* 属性选择器 *\u002F\n",[92,137061,137062,137064,137066,137068,137070,137072],{"class":94,"line":11},[92,137063,53801],{"class":51280},[92,137065,993],{"class":102},[92,137067,103082],{"class":1942},[92,137069,148],{"class":98},[92,137071,62679],{"class":207},[92,137073,137074],{"class":102},"] { }\n",[92,137076,137077,137079,137081,137083,137086,137089,137092],{"class":94,"line":1158},[92,137078,53801],{"class":51280},[92,137080,993],{"class":102},[92,137082,14674],{"class":1942},[92,137084,137085],{"class":98},"^=",[92,137087,137088],{"class":207},"\"icon\"",[92,137090,137091],{"class":102},"] { }  ",[92,137093,137094],{"class":161},"\u002F* 以 icon 开头 *\u002F\n",[92,137096,137097,137099,137101,137103,137106,137108,137110],{"class":94,"line":1173},[92,137098,53801],{"class":51280},[92,137100,993],{"class":102},[92,137102,14674],{"class":1942},[92,137104,137105],{"class":98},"$=",[92,137107,137088],{"class":207},[92,137109,137091],{"class":102},[92,137111,137112],{"class":161},"\u002F* 以 icon 结尾 *\u002F\n",[92,137114,137115,137117,137119,137121,137124,137126,137128],{"class":94,"line":1179},[92,137116,53801],{"class":51280},[92,137118,993],{"class":102},[92,137120,14674],{"class":1942},[92,137122,137123],{"class":98},"*=",[92,137125,137088],{"class":207},[92,137127,137091],{"class":102},[92,137129,137130],{"class":161},"\u002F* 包含 icon *\u002F\n",[38,137132,137133],{},"ul的第一个儿子文本为红色",[38,137135,137136],{},"一定要在冒号前加空格，不然就是选中所有的了",[83,137138,137140],{"className":126527,"code":137139,"language":126529,"meta":10,"style":10},".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",[89,137141,137142,137148,137158,137162,137166,137171,137184,137197,137213,137230,137247],{"__ignoreMap":10},[92,137143,137144,137146],{"class":94,"line":95},[92,137145,126818],{"class":1942},[92,137147,15552],{"class":102},[92,137149,137150,137152,137154,137156],{"class":94,"line":11},[92,137151,70885],{"class":151},[92,137153,51417],{"class":102},[92,137155,57401],{"class":151},[92,137157,1269],{"class":102},[92,137159,137160],{"class":94,"line":1158},[92,137161,1544],{"class":102},[92,137163,137164],{"class":94,"line":1173},[92,137165,135988],{"class":102},[92,137167,137168],{"class":94,"line":1179},[92,137169,137170],{"class":161},"\u002F* 结构伪类选择器 *\u002F\n",[92,137172,137173,137175,137178,137181],{"class":94,"line":1193},[92,137174,49],{"class":51280},[92,137176,137177],{"class":1942},":first-child",[92,137179,137180],{"class":102}," { }           ",[92,137182,137183],{"class":161},"\u002F* 第一个 *\u002F\n",[92,137185,137186,137188,137191,137194],{"class":94,"line":1199},[92,137187,49],{"class":51280},[92,137189,137190],{"class":1942},":last-child",[92,137192,137193],{"class":102}," { }            ",[92,137195,137196],{"class":161},"\u002F* 最后一个 *\u002F\n",[92,137198,137199,137201,137203,137205,137207,137210],{"class":94,"line":1290},[92,137200,49],{"class":51280},[92,137202,129441],{"class":1942},[92,137204,103],{"class":102},[92,137206,180],{"class":151},[92,137208,137209],{"class":102},") { }          ",[92,137211,137212],{"class":161},"\u002F* 第2个 *\u002F\n",[92,137214,137215,137217,137219,137221,137224,137227],{"class":94,"line":1296},[92,137216,49],{"class":51280},[92,137218,129441],{"class":1942},[92,137220,103],{"class":102},[92,137222,137223],{"class":151},"2n",[92,137225,137226],{"class":102},") { }         ",[92,137228,137229],{"class":161},"\u002F* 偶数 *\u002F\n",[92,137231,137232,137234,137236,137238,137241,137244],{"class":94,"line":1308},[92,137233,49],{"class":51280},[92,137235,129441],{"class":1942},[92,137237,103],{"class":102},[92,137239,137240],{"class":151},"2n+1",[92,137242,137243],{"class":102},") { }       ",[92,137245,137246],{"class":161},"\u002F* 奇数 *\u002F\n",[92,137248,137249,137251,137253,137255,137258,137260],{"class":94,"line":1591},[92,137250,49],{"class":51280},[92,137252,129441],{"class":1942},[92,137254,103],{"class":102},[92,137256,137257],{"class":151},"-n+3",[92,137259,137243],{"class":102},[92,137261,137262],{"class":161},"\u002F* 前3个 *\u002F\n",[51591,137264,137267],{"className":137265},[137266],"example","\n  示例内容\n",[38,137269,137270],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1110,137272,137273],{},[49,137274,137275,137278],{},[89,137276,137277],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[38,137280,137281],{},"也就是说它选择的是熊大",[46,137283,137284],{"start":1193},[49,137285,137286],{},"权重",[83,137288,137290],{"className":126527,"code":137289,"language":126529,"meta":10,"style":10},"\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",[89,137291,137292,137296,137306,137316,137330,137344,137358],{"__ignoreMap":10},[92,137293,137294],{"class":94,"line":95},[92,137295,137170],{"class":161},[92,137297,137298,137300,137302,137304],{"class":94,"line":11},[92,137299,49],{"class":51280},[92,137301,137177],{"class":1942},[92,137303,137180],{"class":102},[92,137305,137183],{"class":161},[92,137307,137308,137310,137312,137314],{"class":94,"line":1158},[92,137309,49],{"class":51280},[92,137311,137190],{"class":1942},[92,137313,137193],{"class":102},[92,137315,137196],{"class":161},[92,137317,137318,137320,137322,137324,137326,137328],{"class":94,"line":1173},[92,137319,49],{"class":51280},[92,137321,129441],{"class":1942},[92,137323,103],{"class":102},[92,137325,180],{"class":151},[92,137327,137209],{"class":102},[92,137329,137212],{"class":161},[92,137331,137332,137334,137336,137338,137340,137342],{"class":94,"line":1179},[92,137333,49],{"class":51280},[92,137335,129441],{"class":1942},[92,137337,103],{"class":102},[92,137339,137223],{"class":151},[92,137341,137226],{"class":102},[92,137343,137229],{"class":161},[92,137345,137346,137348,137350,137352,137354,137356],{"class":94,"line":1193},[92,137347,49],{"class":51280},[92,137349,129441],{"class":1942},[92,137351,103],{"class":102},[92,137353,137240],{"class":151},[92,137355,137243],{"class":102},[92,137357,137246],{"class":161},[92,137359,137360,137362,137364,137366,137368,137370],{"class":94,"line":1199},[92,137361,49],{"class":51280},[92,137363,129441],{"class":1942},[92,137365,103],{"class":102},[92,137367,137257],{"class":151},[92,137369,137243],{"class":102},[92,137371,137262],{"class":161},[38,137373,137374],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21978,137376,137378],{"id":137377},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[38,137380,137381],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1441,137383],{"style":126383,"src":137384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[46,137386,137387],{},[49,137388,132],{},[1110,137390,137391,137394,137397,137400,137403,137406],{},[49,137392,137393],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[49,137395,137396],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[49,137398,137399],{},"语法： element::before {}",[49,137401,137402],{},"before 和 after 必须有 content 属性",[49,137404,137405],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[49,137407,137408],{},"伪元素选择器和标签选择器一样，权重为 1",[46,137410,137411],{"start":11},[49,137412,137413],{},"实例",[83,137415,137416],{"className":126527,"code":137289,"language":126529,"meta":10,"style":10},[89,137417,137418,137422,137432,137442,137456,137470,137484],{"__ignoreMap":10},[92,137419,137420],{"class":94,"line":95},[92,137421,137170],{"class":161},[92,137423,137424,137426,137428,137430],{"class":94,"line":11},[92,137425,49],{"class":51280},[92,137427,137177],{"class":1942},[92,137429,137180],{"class":102},[92,137431,137183],{"class":161},[92,137433,137434,137436,137438,137440],{"class":94,"line":1158},[92,137435,49],{"class":51280},[92,137437,137190],{"class":1942},[92,137439,137193],{"class":102},[92,137441,137196],{"class":161},[92,137443,137444,137446,137448,137450,137452,137454],{"class":94,"line":1173},[92,137445,49],{"class":51280},[92,137447,129441],{"class":1942},[92,137449,103],{"class":102},[92,137451,180],{"class":151},[92,137453,137209],{"class":102},[92,137455,137212],{"class":161},[92,137457,137458,137460,137462,137464,137466,137468],{"class":94,"line":1179},[92,137459,49],{"class":51280},[92,137461,129441],{"class":1942},[92,137463,103],{"class":102},[92,137465,137223],{"class":151},[92,137467,137226],{"class":102},[92,137469,137229],{"class":161},[92,137471,137472,137474,137476,137478,137480,137482],{"class":94,"line":1193},[92,137473,49],{"class":51280},[92,137475,129441],{"class":1942},[92,137477,103],{"class":102},[92,137479,137240],{"class":151},[92,137481,137243],{"class":102},[92,137483,137246],{"class":161},[92,137485,137486,137488,137490,137492,137494,137496],{"class":94,"line":1199},[92,137487,49],{"class":51280},[92,137489,129441],{"class":1942},[92,137491,103],{"class":102},[92,137493,137257],{"class":151},[92,137495,137243],{"class":102},[92,137497,137262],{"class":161},[1441,137499],{"style":126383,"src":137500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[46,137502,137503],{"start":1158},[49,137504,137505],{},"使用场景1",[1441,137507],{"style":126383,"src":137508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[38,137510,137511],{},"不需要再加盒子来整红色那部分了",[83,137513,137515],{"className":126527,"code":137514,"language":126529,"meta":10,"style":10},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[89,137516,137517,137522,137531,137542,137552,137556,137565,137576,137586],{"__ignoreMap":10},[92,137518,137519],{"class":94,"line":95},[92,137520,137521],{"class":161},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[92,137523,137524,137526,137529],{"class":94,"line":11},[92,137525,51591],{"class":51280},[92,137527,137528],{"class":1942},"::before",[92,137530,15552],{"class":102},[92,137532,137533,137536,137538,137540],{"class":94,"line":1158},[92,137534,137535],{"class":151},"  content",[92,137537,51417],{"class":102},[92,137539,7632],{"class":207},[92,137541,1269],{"class":102},[92,137543,137544,137546,137548,137550],{"class":94,"line":1173},[92,137545,128143],{"class":151},[92,137547,51417],{"class":102},[92,137549,60849],{"class":151},[92,137551,1269],{"class":102},[92,137553,137554],{"class":94,"line":1179},[92,137555,1544],{"class":102},[92,137557,137558,137560,137563],{"class":94,"line":1193},[92,137559,51591],{"class":51280},[92,137561,137562],{"class":1942},"::after",[92,137564,15552],{"class":102},[92,137566,137567,137569,137571,137574],{"class":94,"line":1199},[92,137568,137535],{"class":151},[92,137570,51417],{"class":102},[92,137572,137573],{"class":207},"\"→\"",[92,137575,1269],{"class":102},[92,137577,137578,137580,137582,137584],{"class":94,"line":1290},[92,137579,70885],{"class":151},[92,137581,51417],{"class":102},[92,137583,62050],{"class":151},[92,137585,1269],{"class":102},[92,137587,137588],{"class":94,"line":1296},[92,137589,1544],{"class":102},[1441,137591],{"style":126383,"src":137592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[38,137594,137595],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1441,137597],{"style":126383,"src":137598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[38,137600,137601],{},"但是在引用时需要先转义一下",[38,137603,137604],{},"content='\\e930'",[46,137606,137607],{"start":1173},[49,137608,137609],{},"使用场景2",[38,137611,137612],{},"仿土豆效果",[38,137614,137615],{},"通过使用伪元素选择器可以减少body中盒子的数量",[83,137617,137618],{"className":126527,"code":137514,"language":126529,"meta":10,"style":10},[89,137619,137620,137624,137632,137642,137652,137656,137664,137674,137684],{"__ignoreMap":10},[92,137621,137622],{"class":94,"line":95},[92,137623,137521],{"class":161},[92,137625,137626,137628,137630],{"class":94,"line":11},[92,137627,51591],{"class":51280},[92,137629,137528],{"class":1942},[92,137631,15552],{"class":102},[92,137633,137634,137636,137638,137640],{"class":94,"line":1158},[92,137635,137535],{"class":151},[92,137637,51417],{"class":102},[92,137639,7632],{"class":207},[92,137641,1269],{"class":102},[92,137643,137644,137646,137648,137650],{"class":94,"line":1173},[92,137645,128143],{"class":151},[92,137647,51417],{"class":102},[92,137649,60849],{"class":151},[92,137651,1269],{"class":102},[92,137653,137654],{"class":94,"line":1179},[92,137655,1544],{"class":102},[92,137657,137658,137660,137662],{"class":94,"line":1193},[92,137659,51591],{"class":51280},[92,137661,137562],{"class":1942},[92,137663,15552],{"class":102},[92,137665,137666,137668,137670,137672],{"class":94,"line":1199},[92,137667,137535],{"class":151},[92,137669,51417],{"class":102},[92,137671,137573],{"class":207},[92,137673,1269],{"class":102},[92,137675,137676,137678,137680,137682],{"class":94,"line":1290},[92,137677,70885],{"class":151},[92,137679,51417],{"class":102},[92,137681,62050],{"class":151},[92,137683,1269],{"class":102},[92,137685,137686],{"class":94,"line":1296},[92,137687,1544],{"class":102},[1441,137689],{"style":126383,"src":137690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[46,137692,137693],{"start":1179},[49,137694,137695],{},"使用场景3",[38,137697,137698],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[83,137700,137702],{"className":126527,"code":137701,"language":126529,"meta":10,"style":10},".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",[89,137703,137704,137710,137720,137724,137728,137732,137740,137750,137760,137764,137772,137782,137792],{"__ignoreMap":10},[92,137705,137706,137708],{"class":94,"line":95},[92,137707,130375],{"class":1942},[92,137709,15552],{"class":102},[92,137711,137712,137714,137716,137718],{"class":94,"line":11},[92,137713,131007],{"class":151},[92,137715,51417],{"class":102},[92,137717,23716],{"class":151},[92,137719,1269],{"class":102},[92,137721,137722],{"class":94,"line":1158},[92,137723,1544],{"class":102},[92,137725,137726],{"class":94,"line":1173},[92,137727,135988],{"class":102},[92,137729,137730],{"class":94,"line":1179},[92,137731,137521],{"class":161},[92,137733,137734,137736,137738],{"class":94,"line":1193},[92,137735,51591],{"class":51280},[92,137737,137528],{"class":1942},[92,137739,15552],{"class":102},[92,137741,137742,137744,137746,137748],{"class":94,"line":1199},[92,137743,137535],{"class":151},[92,137745,51417],{"class":102},[92,137747,7632],{"class":207},[92,137749,1269],{"class":102},[92,137751,137752,137754,137756,137758],{"class":94,"line":1290},[92,137753,128143],{"class":151},[92,137755,51417],{"class":102},[92,137757,60849],{"class":151},[92,137759,1269],{"class":102},[92,137761,137762],{"class":94,"line":1296},[92,137763,1544],{"class":102},[92,137765,137766,137768,137770],{"class":94,"line":1308},[92,137767,51591],{"class":51280},[92,137769,137562],{"class":1942},[92,137771,15552],{"class":102},[92,137773,137774,137776,137778,137780],{"class":94,"line":1591},[92,137775,137535],{"class":151},[92,137777,51417],{"class":102},[92,137779,137573],{"class":207},[92,137781,1269],{"class":102},[92,137783,137784,137786,137788,137790],{"class":94,"line":1596},[92,137785,70885],{"class":151},[92,137787,51417],{"class":102},[92,137789,62050],{"class":151},[92,137791,1269],{"class":102},[92,137793,137794],{"class":94,"line":1602},[92,137795,1544],{"class":102},[38,137797,137798],{},"div {\nmargin: 0 auto;\n}",[83,137800,137803],{"className":137801,"code":137802,"language":5167},[5165],"\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",[89,137804,137802],{"__ignoreMap":10},[38,137806,137807],{},"如果想让多个元素都发生变化",[38,137809,137810],{},"不能如下操作：",[38,137812,137813],{},"transition: width 2s ease 0.5s;",[38,137815,137816],{},"transition: height 2s ease 0.5s;不对！！！",[38,137818,137819],{},"上方会样式冲突，导致不显示任何过渡效果",[38,137821,137822],{},"使用如下：加逗号隔开",[38,137824,137825],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[38,137827,137828],{},"transition all 2s ease;",[63,137830,137832],{"id":137831},"_1426-过渡练习","14.2.6 过渡练习",[46,137834,137835],{},[49,137836,137837],{},"进度条",[1441,137839],{"style":126383,"src":137840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[83,137842,137844],{"className":126527,"code":137843,"language":126529,"meta":10,"style":10},"div {\n  transition: all 0.3s ease;\n}\n",[89,137845,137846,137852,137870],{"__ignoreMap":10},[92,137847,137848,137850],{"class":94,"line":95},[92,137849,51591],{"class":51280},[92,137851,15552],{"class":102},[92,137853,137854,137857,137859,137861,137864,137866,137868],{"class":94,"line":11},[92,137855,137856],{"class":151},"  transition",[92,137858,51417],{"class":102},[92,137860,28102],{"class":151},[92,137862,137863],{"class":151}," 0.3",[92,137865,798],{"class":98},[92,137867,78660],{"class":151},[92,137869,1269],{"class":102},[92,137871,137872],{"class":94,"line":1158},[92,137873,1544],{"class":102},[46,137875,137876],{"start":11},[49,137877,137878],{},"小米logo",[38,137880,137881],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[83,137883,137885],{"className":126527,"code":137884,"language":126529,"meta":10,"style":10},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[89,137886,137887,137892,137898,137914,137919],{"__ignoreMap":10},[92,137888,137889],{"class":94,"line":95},[92,137890,137891],{"class":161},"\u002F* CSS3 过渡 *\u002F\n",[92,137893,137894,137896],{"class":94,"line":11},[92,137895,51591],{"class":51280},[92,137897,15552],{"class":102},[92,137899,137900,137902,137904,137906,137908,137910,137912],{"class":94,"line":1158},[92,137901,137856],{"class":151},[92,137903,51417],{"class":102},[92,137905,28102],{"class":151},[92,137907,137863],{"class":151},[92,137909,798],{"class":98},[92,137911,78660],{"class":151},[92,137913,1269],{"class":102},[92,137915,137916],{"class":94,"line":1173},[92,137917,137918],{"class":161},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[92,137920,137921],{"class":94,"line":1179},[92,137922,1544],{"class":102},[38,137924,137925],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5106,137927,137928],{},"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":10,"searchDepth":11,"depth":11,"links":137930},[137931,137936],{"id":136261,"depth":11,"text":136262,"children":137932},[137933,137934,137935],{"id":136265,"depth":1158,"text":136266},{"id":136342,"depth":1158,"text":136343},{"id":136673,"depth":1158,"text":136674},{"id":136964,"depth":11,"text":136965,"children":137937},[137938,137939],{"id":136968,"depth":1158,"text":136969},{"id":137831,"depth":1158,"text":137832},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136253,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137946,"title":137947,"body":137948,"description":13,"extension":14,"meta":139692,"navigation":17,"path":139693,"seo":139694,"stem":139695,"__hash__":139696},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137949,"toc":139673},[137950,137953,137957,137960,137966,137972,137976,137978,137981,137984,137987,137990,137993,137996,137999,138003,138007,138010,138013,138016,138020,138023,138026,138031,138034,138037,138040,138044,138047,138056,138059,138062,138066,138069,138072,138077,138084,138098,138106,138113,138118,138121,138124,138127,138134,138138,138144,138150,138153,138156,138161,138167,138169,138177,138182,138185,138191,138193,138198,138203,138206,138208,138213,138216,138221,138226,138260,138264,138268,138271,138275,138278,138364,138367,138404,138407,138443,138447,138452,138465,138519,138521,138549,138551,138579,138585,138599,138601,138645,138647,138691,138694,138701,138712,138714,138741,138743,138769,138776,138792,138794,138888,138890,138984,138991,138994,138999,139005,139079,139082,139084,139120,139122,139158,139161,139168,139187,139190,139193,139195,139220,139222,139246,139249,139252,139282,139286,139289,139352,139354,139420,139422,139486,139489,139521,139523,139549,139551,139577,139580,139611,139613,139639,139641,139667,139670],[29,137951,137947],{"id":137952},"_15-品优购项目上篇-搭建与公共模块",[33,137954,137956],{"id":137955},"_151-项目规划","15.1 项目规划",[1441,137958],{"style":126383,"src":137959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[38,137961,137962,137965],{},[252,137963,137964],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[38,137967,137968,137971],{},[252,137969,137970],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[33,137973,137975],{"id":137974},"_152-项目介绍","15.2 项目介绍",[38,137977,137964],{},[1441,137979],{"style":126383,"src":137980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[38,137982,137983],{},"主页：",[1441,137985],{"style":126383,"src":137986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[38,137988,137989],{},"列表页：",[1441,137991],{"style":126383,"src":137992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[38,137994,137995],{},"注册页：",[1441,137997],{"style":126383,"src":137998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[33,138000,138002],{"id":138001},"_153-项目搭建工作","15.3 项目搭建工作",[63,138004,138006],{"id":138005},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1441,138008],{"style":126383,"src":138009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[38,138011,138012],{},"经常更换的图片要放到upload文件夹中",[38,138014,138015],{},"不经常换的放到images文件夹中",[63,138017,138019],{"id":138018},"_1532-创建文件如下","15.3.2 创建文件如下",[1441,138021],{"style":126383,"src":138022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1441,138024],{"style":126383,"src":138025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[38,138027,138028],{},[252,138029,138030],{},"初始化样式：",[38,138032,138033],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[38,138035,138036],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[38,138038,138039],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[63,138041,138043],{"id":138042},"_1533-项目模块化开发","15.3.3 项目模块化开发",[38,138045,138046],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[38,138048,138049,138050,138055],{},"这里最典型的应用就是 ",[252,138051,138052],{},[89,138053,138054],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1441,138057],{"style":126383,"src":138058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[38,138060,138061],{},"通过link方法来引入",[63,138063,138065],{"id":138064},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1441,138067],{"style":126383,"src":138068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[38,138070,138071],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[46,138073,138074],{},[49,138075,138076],{},"制作favicon图标",[38,138078,138079,138080,138083],{},"①把品优购图标切成 ",[89,138081,138082],{},"png"," 图片",[38,138085,138086,138087,138089,138090,138093,138094],{},"②把 ",[89,138088,138082],{}," 图片转换为 ",[89,138091,138092],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[341,138095,138096],{"href":138096,"rel":138097},"http:\u002F\u002Fwww.bitbug.net\u002F",[23845],[46,138099,138100,138103],{"start":11},[49,138101,138102],{},"favicon图标放到网站根目录下",[49,138104,138105],{},"HTML页面引入favicon",[38,138107,138108,138109,138112],{},"在html 页面里面的 ",[89,138110,138111],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[38,138114,138115],{},[89,138116,138117],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[38,138119,138120],{},"复制这行代码或者在生成这个的网站进行复制",[1441,138122],{"style":126383,"src":138123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[38,138125,138126],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[38,138128,138129,138130],{},"例如:",[341,138131,138132],{"href":138132,"rel":138133},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23845],[63,138135,138137],{"id":138136},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[38,138139,138140,138143],{},[252,138141,138142],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[38,138145,138146,138149],{},[252,138147,138148],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[38,138151,138152],{},"页面必须有三个标签用来符合 SEO 优化",[1441,138154],{"style":126383,"src":138155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[46,138157,138158],{},[49,138159,138160],{},"title网站标题",[38,138162,138163,138166],{},[252,138164,138165],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[38,138168,68770],{},[1110,138170,138171,138174],{},[49,138172,138173],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[49,138175,138176],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[46,138178,138179],{"start":11},[49,138180,138181],{},"description网站描述",[38,138183,138184],{},"简要说明我们网站主要是做什么的",[38,138186,138187,138190],{},[252,138188,138189],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[38,138192,68770],{},[38,138194,138195],{},[89,138196,138197],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[46,138199,138200],{"start":1158},[49,138201,138202],{},"keywords关键词",[38,138204,138205],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[38,138207,68770],{},[38,138209,138210],{},[89,138211,138212],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[38,138214,138215],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[38,138217,138218],{},[252,138219,138220],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[46,138222,138223],{"start":1173},[49,138224,138225],{},"代码总结",[83,138227,138228],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[89,138229,138230,138234,138248,138252],{"__ignoreMap":10},[92,138231,138232],{"class":94,"line":95},[92,138233,130638],{"class":161},[92,138235,138236,138238,138240,138242,138244,138246],{"class":94,"line":11},[92,138237,1013],{"class":102},[92,138239,51591],{"class":51280},[92,138241,53466],{"class":1942},[92,138243,148],{"class":102},[92,138245,130651],{"class":207},[92,138247,51287],{"class":102},[92,138249,138250],{"class":94,"line":1158},[92,138251,130658],{"class":102},[92,138253,138254,138256,138258],{"class":94,"line":1173},[92,138255,51765],{"class":102},[92,138257,51591],{"class":51280},[92,138259,51287],{"class":102},[33,138261,138263],{"id":138262},"_154-项目公共部分制作","15.4 项目公共部分制作",[63,138265,138267],{"id":138266},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1441,138269],{"style":126383,"src":138270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[63,138272,138274],{"id":138273},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[38,138276,138277],{},"布局思路：",[1110,138279,138280,138283,138286,138308,138341],{},[49,138281,138282],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[49,138284,138285],{},"里面包含版心的盒子",[49,138287,138288,138289],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1110,138290,138291,138299,138305],{},[49,138292,138293,138294,21480,138296,138298],{},"1 号盒子 里面包含一个",[89,138295,1110],{},[89,138297,1110],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[49,138300,138301,138302,138304],{},"里面的内容是水平排列，所以需要给",[89,138303,49],{},"设置浮动",[49,138306,138307],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[49,138309,138310,138311],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1110,138312,138313,138327,138332],{},[49,138314,138315,138316,21480,138318,138320,138321,138323,138324,138326],{},"2 号盒子 里面包含一个",[89,138317,1110],{},[89,138319,1110],{},"包裹",[89,138322,49],{},"，中间的",[89,138325,1024],{},"可以用样式去设置，也可以用字符 |",[49,138328,138329,138330,138304],{},"里面内容水平排列，给",[89,138331,49],{},[49,138333,138334,138335,138337,138338,138340],{},"找到里面所有偶数的 ",[89,138336,49],{}," 设置样式（偶数的 ",[89,138339,49],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[49,138342,138343,138344],{},"需要用到字体图标",[1110,138345,138346,138352,138355,138358,138361],{},[49,138347,138348,138349],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[89,138350,138351],{},"arrow-icon",[49,138353,138354],{},"先要引入字体图片的资源",[49,138356,138357],{},"在样式里面利用 font-face 来进行声明",[49,138359,138360],{},"在伪元素的 content属性设置 图标的编码",[49,138362,138363],{},"给伪元素设置font-family属性",[38,138365,138366],{},"结构实例代码：",[83,138368,138370],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},"div::before {\n  content: \"\";\n  display: block;\n}\n",[89,138371,138372,138380,138390,138400],{"__ignoreMap":10},[92,138373,138374,138376,138378],{"class":94,"line":95},[92,138375,51591],{"class":51280},[92,138377,137528],{"class":1942},[92,138379,15552],{"class":102},[92,138381,138382,138384,138386,138388],{"class":94,"line":11},[92,138383,137535],{"class":151},[92,138385,51417],{"class":102},[92,138387,7632],{"class":207},[92,138389,1269],{"class":102},[92,138391,138392,138394,138396,138398],{"class":94,"line":1158},[92,138393,128143],{"class":151},[92,138395,51417],{"class":102},[92,138397,60849],{"class":151},[92,138399,1269],{"class":102},[92,138401,138402],{"class":94,"line":1173},[92,138403,1544],{"class":102},[38,138405,138406],{},"样式实例代码：",[83,138408,138409],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[89,138410,138411,138419,138429,138439],{"__ignoreMap":10},[92,138412,138413,138415,138417],{"class":94,"line":95},[92,138414,51591],{"class":51280},[92,138416,137528],{"class":1942},[92,138418,15552],{"class":102},[92,138420,138421,138423,138425,138427],{"class":94,"line":11},[92,138422,137535],{"class":151},[92,138424,51417],{"class":102},[92,138426,7632],{"class":207},[92,138428,1269],{"class":102},[92,138430,138431,138433,138435,138437],{"class":94,"line":1158},[92,138432,128143],{"class":151},[92,138434,51417],{"class":102},[92,138436,60849],{"class":151},[92,138438,1269],{"class":102},[92,138440,138441],{"class":94,"line":1173},[92,138442,1544],{"class":102},[63,138444,138446],{"id":138445},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1110,138448,138449],{},[49,138450,138451],{},"header 盒子必须要有高度",[38,138453,138454,138455,138457,138458],{},"1 号盒子是 ",[89,138456,131539],{}," 标志定位，在正常开发过程中， ",[252,138459,138460,138461,138464],{},"logo的布局其实是有讲究的，需要进行 ",[89,138462,138463],{},"logoSEO","的优化 （★★★）",[1110,138466,138467,138475,138483,138510],{},[49,138468,138469,138471,138472,138474],{},[89,138470,131539],{}," 里面首先放一个 ",[89,138473,29],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[49,138476,138477,138479,138480,138482],{},[89,138478,29],{}," 里面再放一个链接，可以返回首页的，把 ",[89,138481,131539],{}," 的背景图片给链接即可",[49,138484,138485,138486],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1110,138487,138488,138503],{},[49,138489,138490,138491,138494,138495,138498,138499,138502],{},"方法1：",[89,138492,138493],{},"text-indent"," 移到盒子外面（",[89,138496,138497],{},"text-indent: -9999px",") ，然后 ",[89,138500,138501],{},"overflow:hidden"," ，淘宝的做法",[49,138504,138505,138506,138509],{},"方法2：直接给 ",[89,138507,138508],{},"font-size: 0;"," 就看不到文字了，京东的做法",[49,138511,138512,138513,138515,138516,138518],{},"最后给链接一个 ",[89,138514,51387],{}," 属性，这样鼠标放到 ",[89,138517,131539],{}," 上就可以看到提示文字了",[38,138520,138366],{},[83,138522,138523],{"className":127274,"code":131760,"language":127276,"meta":10,"style":10},[89,138524,138525],{"__ignoreMap":10},[92,138526,138527,138529,138531,138533,138535,138537,138539,138541,138543,138545,138547],{"class":94,"line":95},[92,138528,1013],{"class":102},[92,138530,341],{"class":51280},[92,138532,61037],{"class":1942},[92,138534,148],{"class":102},[92,138536,131775],{"class":207},[92,138538,131778],{"class":1942},[92,138540,148],{"class":102},[92,138542,131783],{"class":207},[92,138544,131786],{"class":102},[92,138546,341],{"class":51280},[92,138548,51287],{"class":102},[38,138550,138406],{},[83,138552,138553],{"className":127274,"code":131760,"language":127276,"meta":10,"style":10},[89,138554,138555],{"__ignoreMap":10},[92,138556,138557,138559,138561,138563,138565,138567,138569,138571,138573,138575,138577],{"class":94,"line":95},[92,138558,1013],{"class":102},[92,138560,341],{"class":51280},[92,138562,61037],{"class":1942},[92,138564,148],{"class":102},[92,138566,131775],{"class":207},[92,138568,131778],{"class":1942},[92,138570,148],{"class":102},[92,138572,131783],{"class":207},[92,138574,131786],{"class":102},[92,138576,341],{"class":51280},[92,138578,51287],{"class":102},[38,138580,138581,138582,138584],{},"2 号盒子是 ",[89,138583,131552],{}," 搜索模块定位",[1110,138586,138587,138590,138593,138596],{},[49,138588,138589],{},"search盒子利用定位的方式放在对应的位置",[49,138591,138592],{},"search盒子设置绝对定位，header盒子设置相对定位",[49,138594,138595],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[49,138597,138598],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[38,138600,138366],{},[83,138602,138603],{"className":126527,"code":131847,"language":126529,"meta":10,"style":10},[89,138604,138605,138627,138631,138641],{"__ignoreMap":10},[92,138606,138607,138609,138611,138613,138615,138617,138619,138621,138623,138625],{"class":94,"line":95},[92,138608,51591],{"class":51280},[92,138610,12415],{"class":102},[92,138612,38],{"class":51280},[92,138614,12415],{"class":102},[92,138616,29],{"class":51280},[92,138618,12415],{"class":102},[92,138620,1110],{"class":51280},[92,138622,12415],{"class":102},[92,138624,49],{"class":51280},[92,138626,15552],{"class":102},[92,138628,138629],{"class":94,"line":11},[92,138630,131876],{"class":161},[92,138632,138633,138635,138637,138639],{"class":94,"line":1158},[92,138634,128143],{"class":151},[92,138636,51417],{"class":102},[92,138638,60849],{"class":151},[92,138640,1269],{"class":102},[92,138642,138643],{"class":94,"line":1173},[92,138644,1544],{"class":102},[38,138646,138406],{},[83,138648,138649],{"className":126527,"code":131847,"language":126529,"meta":10,"style":10},[89,138650,138651,138673,138677,138687],{"__ignoreMap":10},[92,138652,138653,138655,138657,138659,138661,138663,138665,138667,138669,138671],{"class":94,"line":95},[92,138654,51591],{"class":51280},[92,138656,12415],{"class":102},[92,138658,38],{"class":51280},[92,138660,12415],{"class":102},[92,138662,29],{"class":51280},[92,138664,12415],{"class":102},[92,138666,1110],{"class":51280},[92,138668,12415],{"class":102},[92,138670,49],{"class":51280},[92,138672,15552],{"class":102},[92,138674,138675],{"class":94,"line":11},[92,138676,131876],{"class":161},[92,138678,138679,138681,138683,138685],{"class":94,"line":1158},[92,138680,128143],{"class":151},[92,138682,51417],{"class":102},[92,138684,60849],{"class":151},[92,138686,1269],{"class":102},[92,138688,138689],{"class":94,"line":1173},[92,138690,1544],{"class":102},[38,138692,138693],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[38,138695,138696,138697,138700],{},"3 号盒子是 ",[89,138698,138699],{},"hotwords"," 热词模块定位",[1110,138702,138703,138706,138709],{},[49,138704,138705],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[49,138707,138708],{},"给里面所有的a标签设置 左右10px的外边距",[49,138710,138711],{},"给第一个a标签设置文字变红色（#c81623）",[38,138713,138366],{},[83,138715,138717],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},"div {\n  margin: 0 auto;\n}\n",[89,138718,138719,138725,138737],{"__ignoreMap":10},[92,138720,138721,138723],{"class":94,"line":95},[92,138722,51591],{"class":51280},[92,138724,15552],{"class":102},[92,138726,138727,138729,138731,138733,138735],{"class":94,"line":11},[92,138728,70450],{"class":151},[92,138730,51417],{"class":102},[92,138732,294],{"class":151},[92,138734,51536],{"class":151},[92,138736,1269],{"class":102},[92,138738,138739],{"class":94,"line":1158},[92,138740,1544],{"class":102},[38,138742,138406],{},[83,138744,138745],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[89,138746,138747,138753,138765],{"__ignoreMap":10},[92,138748,138749,138751],{"class":94,"line":95},[92,138750,51591],{"class":51280},[92,138752,15552],{"class":102},[92,138754,138755,138757,138759,138761,138763],{"class":94,"line":11},[92,138756,70450],{"class":151},[92,138758,51417],{"class":102},[92,138760,294],{"class":151},[92,138762,51536],{"class":151},[92,138764,1269],{"class":102},[92,138766,138767],{"class":94,"line":1158},[92,138768,1544],{"class":102},[38,138770,138771,138772,138775],{},"4 号盒子是 ",[89,138773,138774],{},"shopcar"," 购物车模块",[1110,138777,138778,138783,138786,138789],{},[49,138779,123310,138780,138782],{},[89,138781,138774],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[49,138784,138785],{},"count 统计部分用绝对定位做",[49,138787,138788],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[49,138790,138791],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[38,138793,138366],{},[83,138795,138796],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[89,138797,138798,138802,138816,138820,138834,138838,138852,138856,138870,138874],{"__ignoreMap":10},[92,138799,138800],{"class":94,"line":95},[92,138801,131966],{"class":161},[92,138803,138804,138806,138808,138810,138812,138814],{"class":94,"line":11},[92,138805,131971],{"class":1942},[92,138807,79787],{"class":102},[92,138809,128887],{"class":151},[92,138811,51417],{"class":102},[92,138813,131980],{"class":151},[92,138815,129457],{"class":102},[92,138817,138818],{"class":94,"line":1158},[92,138819,131987],{"class":161},[92,138821,138822,138824,138826,138828,138830,138832],{"class":94,"line":1173},[92,138823,131992],{"class":1942},[92,138825,79787],{"class":102},[92,138827,128887],{"class":151},[92,138829,51417],{"class":102},[92,138831,54744],{"class":151},[92,138833,129457],{"class":102},[92,138835,138836],{"class":94,"line":1179},[92,138837,132007],{"class":161},[92,138839,138840,138842,138844,138846,138848,138850],{"class":94,"line":1193},[92,138841,132012],{"class":1942},[92,138843,79787],{"class":102},[92,138845,128887],{"class":151},[92,138847,51417],{"class":102},[92,138849,54811],{"class":151},[92,138851,129457],{"class":102},[92,138853,138854],{"class":94,"line":1199},[92,138855,132027],{"class":161},[92,138857,138858,138860,138862,138864,138866,138868],{"class":94,"line":1290},[92,138859,132032],{"class":1942},[92,138861,79787],{"class":102},[92,138863,128887],{"class":151},[92,138865,51417],{"class":102},[92,138867,86213],{"class":151},[92,138869,129457],{"class":102},[92,138871,138872],{"class":94,"line":1296},[92,138873,132047],{"class":161},[92,138875,138876,138878,138880,138882,138884,138886],{"class":94,"line":1308},[92,138877,132052],{"class":1942},[92,138879,79787],{"class":102},[92,138881,128887],{"class":151},[92,138883,51417],{"class":102},[92,138885,132061],{"class":151},[92,138887,129457],{"class":102},[38,138889,138406],{},[83,138891,138892],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[89,138893,138894,138898,138912,138916,138930,138934,138948,138952,138966,138970],{"__ignoreMap":10},[92,138895,138896],{"class":94,"line":95},[92,138897,131966],{"class":161},[92,138899,138900,138902,138904,138906,138908,138910],{"class":94,"line":11},[92,138901,131971],{"class":1942},[92,138903,79787],{"class":102},[92,138905,128887],{"class":151},[92,138907,51417],{"class":102},[92,138909,131980],{"class":151},[92,138911,129457],{"class":102},[92,138913,138914],{"class":94,"line":1158},[92,138915,131987],{"class":161},[92,138917,138918,138920,138922,138924,138926,138928],{"class":94,"line":1173},[92,138919,131992],{"class":1942},[92,138921,79787],{"class":102},[92,138923,128887],{"class":151},[92,138925,51417],{"class":102},[92,138927,54744],{"class":151},[92,138929,129457],{"class":102},[92,138931,138932],{"class":94,"line":1179},[92,138933,132007],{"class":161},[92,138935,138936,138938,138940,138942,138944,138946],{"class":94,"line":1193},[92,138937,132012],{"class":1942},[92,138939,79787],{"class":102},[92,138941,128887],{"class":151},[92,138943,51417],{"class":102},[92,138945,54811],{"class":151},[92,138947,129457],{"class":102},[92,138949,138950],{"class":94,"line":1199},[92,138951,132027],{"class":161},[92,138953,138954,138956,138958,138960,138962,138964],{"class":94,"line":1290},[92,138955,132032],{"class":1942},[92,138957,79787],{"class":102},[92,138959,128887],{"class":151},[92,138961,51417],{"class":102},[92,138963,86213],{"class":151},[92,138965,129457],{"class":102},[92,138967,138968],{"class":94,"line":1296},[92,138969,132047],{"class":161},[92,138971,138972,138974,138976,138978,138980,138982],{"class":94,"line":1308},[92,138973,132052],{"class":1942},[92,138975,79787],{"class":102},[92,138977,128887],{"class":151},[92,138979,51417],{"class":102},[92,138981,132061],{"class":151},[92,138983,129457],{"class":102},[63,138985,138987,138988,138990],{"id":138986},"_1544-nav导航模块制作","15.4.4 ",[89,138989,53693],{},"导航模块制作",[1441,138992],{"style":126383,"src":138993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[38,138995,138996,138998],{},[89,138997,53693],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[38,139000,139001,139002],{},"1 号盒子左侧浮动，",[89,139003,139004],{},"dropdown",[1110,139006,139007,139017,139025,139031,139039,139049,139057,139068],{},[49,139008,139009,139010,100993,139013,139016],{},"1号盒子有讲究，根据相关性 里面包含 ",[89,139011,139012],{},".dt",[89,139014,139015],{},".dd"," 两个盒子",[49,139018,139019,139021,139022,139024],{},[89,139020,139012],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[89,139023,139015],{}," 挤到下面去了",[49,139026,139027,139028,139030],{},"给 ",[89,139029,139015],{}," 盒子设置宽度 和 高度，以及背景颜色",[49,139032,139027,139033,139035,139036,120212],{},[89,139034,139015],{}," 盒子里面定义 无序列表 （",[89,139037,139038],{},"ul > li > a",[49,139040,139041,139042,139044,139045,139048],{},"每个 ",[89,139043,49],{}," 都有一个高度（",[89,139046,139047],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[49,139050,139027,139051,139053,139054,120212],{},[89,139052,49],{}," 里面的a设置文字大小（",[89,139055,139056],{},"14px",[49,139058,139027,139059,139061,139062,139064,139065,139067],{},[89,139060,49],{}," 设置 ",[89,139063,127688],{},"，当鼠标移入的时候，让",[89,139066,49],{},"的背景变成白色，让里面的文字变成红色",[49,139069,139070,139072,139073,139075,139076,139078],{},[89,139071,49],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[89,139074,49],{},"的右侧，那么给",[89,139077,49],{},"设置相对定位",[38,139080,139081],{},"一定要注意相关性",[38,139083,138366],{},[83,139085,139086],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[89,139087,139088,139096,139106,139116],{"__ignoreMap":10},[92,139089,139090,139092,139094],{"class":94,"line":95},[92,139091,51591],{"class":51280},[92,139093,137528],{"class":1942},[92,139095,15552],{"class":102},[92,139097,139098,139100,139102,139104],{"class":94,"line":11},[92,139099,137535],{"class":151},[92,139101,51417],{"class":102},[92,139103,7632],{"class":207},[92,139105,1269],{"class":102},[92,139107,139108,139110,139112,139114],{"class":94,"line":1158},[92,139109,128143],{"class":151},[92,139111,51417],{"class":102},[92,139113,60849],{"class":151},[92,139115,1269],{"class":102},[92,139117,139118],{"class":94,"line":1173},[92,139119,1544],{"class":102},[38,139121,138406],{},[83,139123,139124],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[89,139125,139126,139134,139144,139154],{"__ignoreMap":10},[92,139127,139128,139130,139132],{"class":94,"line":95},[92,139129,51591],{"class":51280},[92,139131,137528],{"class":1942},[92,139133,15552],{"class":102},[92,139135,139136,139138,139140,139142],{"class":94,"line":11},[92,139137,137535],{"class":151},[92,139139,51417],{"class":102},[92,139141,7632],{"class":207},[92,139143,1269],{"class":102},[92,139145,139146,139148,139150,139152],{"class":94,"line":1158},[92,139147,128143],{"class":151},[92,139149,51417],{"class":102},[92,139151,60849],{"class":151},[92,139153,1269],{"class":102},[92,139155,139156],{"class":94,"line":1173},[92,139157,1544],{"class":102},[38,139159,139160],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[38,139162,139163,139164,139167],{},"2 号盒子左侧浮动，",[89,139165,139166],{},"navitems"," 导航栏组",[1110,139169,139170,139175,139184],{},[49,139171,139172,139173],{},"里面结构是 ",[89,139174,139038],{},[49,139176,139177,139178,139180,139181,139183],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[89,139179,341],{},"左右的",[89,139182,30864],{},"把两侧撑开",[49,139185,139186],{},"让文字垂直居中（行高等于高度）",[1441,139188],{"style":126383,"src":139189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[38,139191,139192],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[38,139194,138366],{},[83,139196,139198],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},".box {\n  float: left;\n}\n",[89,139199,139200,139206,139216],{"__ignoreMap":10},[92,139201,139202,139204],{"class":94,"line":95},[92,139203,130375],{"class":1942},[92,139205,15552],{"class":102},[92,139207,139208,139210,139212,139214],{"class":94,"line":11},[92,139209,131007],{"class":151},[92,139211,51417],{"class":102},[92,139213,23716],{"class":151},[92,139215,1269],{"class":102},[92,139217,139218],{"class":94,"line":1158},[92,139219,1544],{"class":102},[38,139221,138406],{},[83,139223,139224],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,139225,139226,139232,139242],{"__ignoreMap":10},[92,139227,139228,139230],{"class":94,"line":95},[92,139229,130375],{"class":1942},[92,139231,15552],{"class":102},[92,139233,139234,139236,139238,139240],{"class":94,"line":11},[92,139235,131007],{"class":151},[92,139237,51417],{"class":102},[92,139239,23716],{"class":151},[92,139241,1269],{"class":102},[92,139243,139244],{"class":94,"line":1158},[92,139245,1544],{"class":102},[38,139247,139248],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1441,139250],{"style":126383,"src":139251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[83,139253,139254],{"className":126527,"code":130684,"language":126529,"meta":10,"style":10},[89,139255,139256,139262,139278],{"__ignoreMap":10},[92,139257,139258,139260],{"class":94,"line":95},[92,139259,51591],{"class":51280},[92,139261,15552],{"class":102},[92,139263,139264,139266,139268,139270,139272,139274,139276],{"class":94,"line":11},[92,139265,70876],{"class":151},[92,139267,51417],{"class":102},[92,139269,320],{"class":151},[92,139271,51472],{"class":98},[92,139273,51501],{"class":151},[92,139275,129919],{"class":151},[92,139277,1269],{"class":102},[92,139279,139280],{"class":94,"line":1158},[92,139281,1544],{"class":102},[63,139283,139285],{"id":139284},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1441,139287],{"style":126383,"src":139288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1110,139290,139291,139296,139301],{},[49,139292,139293,139295],{},[89,139294,131730],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[49,139297,139298,139300],{},[89,139299,131730],{}," 里面有一个大的版心",[49,139302,139303,139304,139307,139308],{},"版心里面包含 1 号盒子，",[89,139305,139306],{},"mod_service"," 是服务模块，mod 是模块的意思",[1110,139309,139310,139315,139328,139344,139349],{},[49,139311,139027,139312,139314],{},[89,139313,139306],{}," 设置高度（80px）和下边框",[49,139316,139317,139318,139321,139322,139324,139325,139327],{},"在里面定义 ",[89,139319,139320],{},"ul > li"," ,每个",[89,139323,49],{}," 宽度是300px 高度是 50px，给每个",[89,139326,49],{},"设置35px的左内边距",[49,139329,139330,139331,139333,139334,139336,139337,139339,139340,18390,139342,120212],{},"在每个",[89,139332,49],{},"里面，放一个 ",[89,139335,22890],{},"（里面放图标），一个",[89,139338,51591],{},"（里面放",[89,139341,51591],{},[89,139343,38],{},[49,139345,139027,139346,139348],{},[89,139347,22890],{},"设置浮动，让h5与这个div左右排列",[49,139350,139351],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[38,139353,138366],{},[83,139355,139357],{"className":126527,"code":139356,"language":126529,"meta":10,"style":10},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[89,139358,139359,139365,139377,139389,139416],{"__ignoreMap":10},[92,139360,139361,139363],{"class":94,"line":95},[92,139362,134284],{"class":1942},[92,139364,15552],{"class":102},[92,139366,139367,139369,139371,139373,139375],{"class":94,"line":11},[92,139368,70548],{"class":151},[92,139370,51417],{"class":102},[92,139372,803],{"class":151},[92,139374,51472],{"class":98},[92,139376,1269],{"class":102},[92,139378,139379,139381,139383,139385,139387],{"class":94,"line":1158},[92,139380,70768],{"class":151},[92,139382,51417],{"class":102},[92,139384,803],{"class":151},[92,139386,51472],{"class":98},[92,139388,1269],{"class":102},[92,139390,139391,139393,139395,139397,139399,139401,139403,139405,139408,139410,139412,139414],{"class":94,"line":1173},[92,139392,70591],{"class":151},[92,139394,51417],{"class":102},[92,139396,61706],{"class":151},[92,139398,103],{"class":102},[92,139400,134323],{"class":5196},[92,139402,13694],{"class":102},[92,139404,61716],{"class":151},[92,139406,139407],{"class":151}," -10",[92,139409,51472],{"class":98},[92,139411,134342],{"class":151},[92,139413,51472],{"class":98},[92,139415,1269],{"class":102},[92,139417,139418],{"class":94,"line":1179},[92,139419,1544],{"class":102},[38,139421,138406],{},[83,139423,139424],{"className":126527,"code":139356,"language":126529,"meta":10,"style":10},[89,139425,139426,139432,139444,139456,139482],{"__ignoreMap":10},[92,139427,139428,139430],{"class":94,"line":95},[92,139429,134284],{"class":1942},[92,139431,15552],{"class":102},[92,139433,139434,139436,139438,139440,139442],{"class":94,"line":11},[92,139435,70548],{"class":151},[92,139437,51417],{"class":102},[92,139439,803],{"class":151},[92,139441,51472],{"class":98},[92,139443,1269],{"class":102},[92,139445,139446,139448,139450,139452,139454],{"class":94,"line":1158},[92,139447,70768],{"class":151},[92,139449,51417],{"class":102},[92,139451,803],{"class":151},[92,139453,51472],{"class":98},[92,139455,1269],{"class":102},[92,139457,139458,139460,139462,139464,139466,139468,139470,139472,139474,139476,139478,139480],{"class":94,"line":1173},[92,139459,70591],{"class":151},[92,139461,51417],{"class":102},[92,139463,61706],{"class":151},[92,139465,103],{"class":102},[92,139467,134323],{"class":5196},[92,139469,13694],{"class":102},[92,139471,61716],{"class":151},[92,139473,139407],{"class":151},[92,139475,51472],{"class":98},[92,139477,134342],{"class":151},[92,139479,51472],{"class":98},[92,139481,1269],{"class":102},[92,139483,139484],{"class":94,"line":1179},[92,139485,1544],{"class":102},[38,139487,139488],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1110,139490,139491,139494,139500,139506,139518],{},[49,139492,139493],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[49,139495,139496,139497,120212],{},"里面的布局利用 自定义列表来实现（",[89,139498,139499],{},"dl > dt + dd",[49,139501,139027,139502,139505],{},[89,139503,139504],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[49,139507,139027,139508,139511,139512,18390,139514,139517],{},[89,139509,139510],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[89,139513,139510],{},[89,139515,139516],{},"dd","之间有些距离",[49,139519,139520],{},"最后一个 dl 结构和样式不一样，需要单独设置",[38,139522,138366],{},[83,139524,139525],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[89,139526,139527,139533,139545],{"__ignoreMap":10},[92,139528,139529,139531],{"class":94,"line":95},[92,139530,51591],{"class":51280},[92,139532,15552],{"class":102},[92,139534,139535,139537,139539,139541,139543],{"class":94,"line":11},[92,139536,70450],{"class":151},[92,139538,51417],{"class":102},[92,139540,294],{"class":151},[92,139542,51536],{"class":151},[92,139544,1269],{"class":102},[92,139546,139547],{"class":94,"line":1158},[92,139548,1544],{"class":102},[38,139550,138406],{},[83,139552,139553],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[89,139554,139555,139561,139573],{"__ignoreMap":10},[92,139556,139557,139559],{"class":94,"line":95},[92,139558,51591],{"class":51280},[92,139560,15552],{"class":102},[92,139562,139563,139565,139567,139569,139571],{"class":94,"line":11},[92,139564,70450],{"class":151},[92,139566,51417],{"class":102},[92,139568,294],{"class":151},[92,139570,51536],{"class":151},[92,139572,1269],{"class":102},[92,139574,139575],{"class":94,"line":1158},[92,139576,1544],{"class":102},[38,139578,139579],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1110,139581,139582,139591,139594,139605],{},[49,139583,139584,139585,139587,139588,139590],{},"分为上下两块，上面是 ",[89,139586,131747],{}," 友情链接，下面是 ",[89,139589,131740],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[49,139592,139593],{},"把内容分别复制到相应模块中",[49,139595,139027,139596,139598,139599,139601,139602,139604],{},[89,139597,131747],{}," 设置 15px 的下外边距，给",[89,139600,131747],{}," 里面 的 ",[89,139603,341],{}," 标签设置 左右 3px 的外边距",[49,139606,139607,139608,139610],{},"给",[89,139609,131740],{}," 设置 20px 的行高",[38,139612,138366],{},[83,139614,139615],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[89,139616,139617,139623,139635],{"__ignoreMap":10},[92,139618,139619,139621],{"class":94,"line":95},[92,139620,51591],{"class":51280},[92,139622,15552],{"class":102},[92,139624,139625,139627,139629,139631,139633],{"class":94,"line":11},[92,139626,70450],{"class":151},[92,139628,51417],{"class":102},[92,139630,294],{"class":151},[92,139632,51536],{"class":151},[92,139634,1269],{"class":102},[92,139636,139637],{"class":94,"line":1158},[92,139638,1544],{"class":102},[38,139640,138406],{},[83,139642,139643],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[89,139644,139645,139651,139663],{"__ignoreMap":10},[92,139646,139647,139649],{"class":94,"line":95},[92,139648,51591],{"class":51280},[92,139650,15552],{"class":102},[92,139652,139653,139655,139657,139659,139661],{"class":94,"line":11},[92,139654,70450],{"class":151},[92,139656,51417],{"class":102},[92,139658,294],{"class":151},[92,139660,51536],{"class":151},[92,139662,1269],{"class":102},[92,139664,139665],{"class":94,"line":1158},[92,139666,1544],{"class":102},[38,139668,139669],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5106,139671,139672],{},"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":10,"searchDepth":11,"depth":11,"links":139674},[139675,139676,139677,139684],{"id":137955,"depth":11,"text":137956},{"id":137974,"depth":11,"text":137975},{"id":138001,"depth":11,"text":138002,"children":139678},[139679,139680,139681,139682,139683],{"id":138005,"depth":1158,"text":138006},{"id":138018,"depth":1158,"text":138019},{"id":138042,"depth":1158,"text":138043},{"id":138064,"depth":1158,"text":138065},{"id":138136,"depth":1158,"text":138137},{"id":138262,"depth":11,"text":138263,"children":139685},[139686,139687,139688,139689,139691],{"id":138266,"depth":1158,"text":138267},{"id":138273,"depth":1158,"text":138274},{"id":138445,"depth":1158,"text":138446},{"id":138986,"depth":1158,"text":139690},"15.4.4 nav导航模块制作",{"id":139284,"depth":1158,"text":139285},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137947,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139698,"title":139699,"body":139700,"description":13,"extension":14,"meta":142102,"navigation":17,"path":142103,"seo":142104,"stem":142105,"__hash__":142106},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139701,"toc":142079},[139702,139705,139709,139713,139725,139728,139731,139734,139745,139747,139771,139773,139797,139802,139805,139807,139843,139845,139881,139884,139889,139892,139895,139898,139928,139935,139938,139948,139950,139984,139987,140021,140027,140044,140046,140082,140084,140120,140125,140150,140152,140178,140180,140204,140211,140214,140278,140280,140322,140324,140364,140371,140376,140378,140408,140410,140440,140444,140447,140454,140466,140468,140494,140496,140520,140523,140525,140549,140555,140565,140567,140597,140599,140629,140636,140677,140679,140715,140717,140753,140757,140760,140763,140766,140772,140777,140780,140803,140806,140830,140833,140857,140862,140865,140868,140871,140874,140877,140951,140953,140983,140985,141015,141018,141021,141053,141057,141061,141075,141084,141087,141092,141094,141188,141190,141284,141307,141309,141333,141335,141359,141366,141369,141379,141381,141405,141410,141418,141420,141450,141455,141495,141497,141523,141525,141551,141555,141558,141563,141566,141570,141578,141585,141593,141595,141625,141627,141657,141665,141668,141671,141673,141703,141705,141735,141738,141743,141745,141769,141771,141795,141798,141883,141885,141909,141911,141935,141939,141941,141965,141967,142001,142005,142019,142022,142027,142030,142035,142038,142068,142076],[29,139703,139699],{"id":139704},"_16-品优购项目下篇-主体与页面开发",[33,139706,139708],{"id":139707},"_161-项目主体模块制作","16.1 项目主体模块制作",[63,139710,139712],{"id":139711},"_1611-首页制作","16.1.1 首页制作",[38,139714,139715,139717,139718,139720,139721,139724],{},[252,139716,102033],{}," 主体模块是 ",[252,139719,74038],{}," 里面专有的，注意需要新的样式文件 ",[252,139722,139723],{},"index.css，"," 就不要写在common.css中了",[1441,139726],{"style":126383,"src":139727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1441,139729],{"style":126383,"src":139730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[38,139732,139733],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1110,139735,139736,139739,139742],{},[49,139737,139738],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[49,139740,139741],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[49,139743,139744],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[38,139746,138366],{},[83,139748,139749],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,139750,139751,139757,139767],{"__ignoreMap":10},[92,139752,139753,139755],{"class":94,"line":95},[92,139754,130375],{"class":1942},[92,139756,15552],{"class":102},[92,139758,139759,139761,139763,139765],{"class":94,"line":11},[92,139760,131007],{"class":151},[92,139762,51417],{"class":102},[92,139764,23716],{"class":151},[92,139766,1269],{"class":102},[92,139768,139769],{"class":94,"line":1158},[92,139770,1544],{"class":102},[38,139772,138406],{},[83,139774,139775],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,139776,139777,139783,139793],{"__ignoreMap":10},[92,139778,139779,139781],{"class":94,"line":95},[92,139780,130375],{"class":1942},[92,139782,15552],{"class":102},[92,139784,139785,139787,139789,139791],{"class":94,"line":11},[92,139786,131007],{"class":151},[92,139788,51417],{"class":102},[92,139790,23716],{"class":151},[92,139792,1269],{"class":102},[92,139794,139795],{"class":94,"line":1158},[92,139796,1544],{"class":102},[46,139798,139799],{},[49,139800,139801],{},"左侧focus模块制作",[1441,139803],{"style":126383,"src":139804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[38,139806,138366],{},[83,139808,139809],{"className":126527,"code":127850,"language":126529,"meta":10,"style":10},[89,139810,139811,139819,139829,139839],{"__ignoreMap":10},[92,139812,139813,139815,139817],{"class":94,"line":95},[92,139814,53801],{"class":51280},[92,139816,61880],{"class":1942},[92,139818,15552],{"class":102},[92,139820,139821,139823,139825,139827],{"class":94,"line":11},[92,139822,127865],{"class":151},[92,139824,51417],{"class":102},[92,139826,54869],{"class":151},[92,139828,1269],{"class":102},[92,139830,139831,139833,139835,139837],{"class":94,"line":1158},[92,139832,70778],{"class":151},[92,139834,51417],{"class":102},[92,139836,54717],{"class":151},[92,139838,1269],{"class":102},[92,139840,139841],{"class":94,"line":1173},[92,139842,1544],{"class":102},[38,139844,138406],{},[83,139846,139847],{"className":126527,"code":127850,"language":126529,"meta":10,"style":10},[89,139848,139849,139857,139867,139877],{"__ignoreMap":10},[92,139850,139851,139853,139855],{"class":94,"line":95},[92,139852,53801],{"class":51280},[92,139854,61880],{"class":1942},[92,139856,15552],{"class":102},[92,139858,139859,139861,139863,139865],{"class":94,"line":11},[92,139860,127865],{"class":151},[92,139862,51417],{"class":102},[92,139864,54869],{"class":151},[92,139866,1269],{"class":102},[92,139868,139869,139871,139873,139875],{"class":94,"line":1158},[92,139870,70778],{"class":151},[92,139872,51417],{"class":102},[92,139874,54717],{"class":151},[92,139876,1269],{"class":102},[92,139878,139879],{"class":94,"line":1173},[92,139880,1544],{"class":102},[38,139882,139883],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[46,139885,139886],{"start":11},[49,139887,139888],{},"右侧newsflash模块制作",[1441,139890],{"style":126383,"src":139891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[38,139893,139894],{},"右侧的模块 分为上中下三个盒子",[38,139896,139897],{},"结构代码：",[83,139899,139900],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,139901,139902],{"__ignoreMap":10},[92,139903,139904,139906,139908,139910,139912,139914,139916,139918,139920,139922,139924,139926],{"class":94,"line":95},[92,139905,1013],{"class":102},[92,139907,1441],{"class":51280},[92,139909,55219],{"class":1942},[92,139911,148],{"class":102},[92,139913,134044],{"class":207},[92,139915,55227],{"class":1942},[92,139917,148],{"class":102},[92,139919,134051],{"class":207},[92,139921,134054],{"class":1942},[92,139923,148],{"class":102},[92,139925,134059],{"class":207},[92,139927,51287],{"class":102},[38,139929,139930,139931,139934],{},"1 号盒子为 ",[89,139932,139933],{},"news"," 新闻模块 高度为 165px",[1441,139936],{"style":126383,"src":139937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[38,139939,139940,139941,139944,139945],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[89,139942,139943],{},"news-hd","，下面是 ",[89,139946,139947],{},"news-bd",[38,139949,139897],{},[83,139951,139952],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[89,139953,139954,139958,139972,139976],{"__ignoreMap":10},[92,139955,139956],{"class":94,"line":95},[92,139957,130638],{"class":161},[92,139959,139960,139962,139964,139966,139968,139970],{"class":94,"line":11},[92,139961,1013],{"class":102},[92,139963,51591],{"class":51280},[92,139965,53466],{"class":1942},[92,139967,148],{"class":102},[92,139969,130651],{"class":207},[92,139971,51287],{"class":102},[92,139973,139974],{"class":94,"line":1158},[92,139975,130658],{"class":102},[92,139977,139978,139980,139982],{"class":94,"line":1173},[92,139979,51765],{"class":102},[92,139981,51591],{"class":51280},[92,139983,51287],{"class":102},[38,139985,139986],{},"样式代码：",[83,139988,139989],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[89,139990,139991,139995,140009,140013],{"__ignoreMap":10},[92,139992,139993],{"class":94,"line":95},[92,139994,130638],{"class":161},[92,139996,139997,139999,140001,140003,140005,140007],{"class":94,"line":11},[92,139998,1013],{"class":102},[92,140000,51591],{"class":51280},[92,140002,53466],{"class":1942},[92,140004,148],{"class":102},[92,140006,130651],{"class":207},[92,140008,51287],{"class":102},[92,140010,140011],{"class":94,"line":1158},[92,140012,130658],{"class":102},[92,140014,140015,140017,140019],{"class":94,"line":1173},[92,140016,51765],{"class":102},[92,140018,51591],{"class":51280},[92,140020,51287],{"class":102},[38,140022,140023,140024,140026],{},"上面是",[89,140025,139943],{},"，设置高度是 33px，设置下边框",[1110,140028,140029,140035],{},[49,140030,140031,140032,140034],{},"里面放一个",[89,140033,22890],{}," 标题",[49,140036,140037,140038,140040,140041,140043],{},"放一个a",[89,140039,102668],{},"，内容是 更多，然后让 ",[89,140042,341],{}," 进行右浮动，三角用伪元素设置字体图标就好",[38,140045,139897],{},[83,140047,140048],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[89,140049,140050,140058,140068,140078],{"__ignoreMap":10},[92,140051,140052,140054,140056],{"class":94,"line":95},[92,140053,51591],{"class":51280},[92,140055,137528],{"class":1942},[92,140057,15552],{"class":102},[92,140059,140060,140062,140064,140066],{"class":94,"line":11},[92,140061,137535],{"class":151},[92,140063,51417],{"class":102},[92,140065,7632],{"class":207},[92,140067,1269],{"class":102},[92,140069,140070,140072,140074,140076],{"class":94,"line":1158},[92,140071,128143],{"class":151},[92,140073,51417],{"class":102},[92,140075,60849],{"class":151},[92,140077,1269],{"class":102},[92,140079,140080],{"class":94,"line":1173},[92,140081,1544],{"class":102},[38,140083,139986],{},[83,140085,140086],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[89,140087,140088,140096,140106,140116],{"__ignoreMap":10},[92,140089,140090,140092,140094],{"class":94,"line":95},[92,140091,51591],{"class":51280},[92,140093,137528],{"class":1942},[92,140095,15552],{"class":102},[92,140097,140098,140100,140102,140104],{"class":94,"line":11},[92,140099,137535],{"class":151},[92,140101,51417],{"class":102},[92,140103,7632],{"class":207},[92,140105,1269],{"class":102},[92,140107,140108,140110,140112,140114],{"class":94,"line":1158},[92,140109,128143],{"class":151},[92,140111,51417],{"class":102},[92,140113,60849],{"class":151},[92,140115,1269],{"class":102},[92,140117,140118],{"class":94,"line":1173},[92,140119,1544],{"class":102},[38,140121,140122,140123],{},"下面是",[89,140124,139947],{},[1110,140126,140127,140135],{},[49,140128,140129,140130,100993,140132,140134],{},"里面包含 ",[89,140131,1110],{},[89,140133,49],{}," 还有链接",[49,140136,139607,140137,140139,140140,140142,140143,140146,140147],{},[89,140138,49],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[89,140141,131193],{}," 2.设置 ",[89,140144,140145],{},"white-space: nowrap;"," 3. 设置 ",[89,140148,140149],{},"text-overflow: ellipsis;",[38,140151,139897],{},[83,140153,140155],{"className":126527,"code":140154,"language":126529,"meta":10,"style":10},"div {\n  overflow: hidden;\n}\n",[89,140156,140157,140163,140174],{"__ignoreMap":10},[92,140158,140159,140161],{"class":94,"line":95},[92,140160,51591],{"class":51280},[92,140162,15552],{"class":102},[92,140164,140165,140168,140170,140172],{"class":94,"line":11},[92,140166,140167],{"class":151},"  overflow",[92,140169,51417],{"class":102},[92,140171,61694],{"class":151},[92,140173,1269],{"class":102},[92,140175,140176],{"class":94,"line":1158},[92,140177,1544],{"class":102},[38,140179,139986],{},[83,140181,140182],{"className":126527,"code":140154,"language":126529,"meta":10,"style":10},[89,140183,140184,140190,140200],{"__ignoreMap":10},[92,140185,140186,140188],{"class":94,"line":95},[92,140187,51591],{"class":51280},[92,140189,15552],{"class":102},[92,140191,140192,140194,140196,140198],{"class":94,"line":11},[92,140193,140167],{"class":151},[92,140195,51417],{"class":102},[92,140197,61694],{"class":151},[92,140199,1269],{"class":102},[92,140201,140202],{"class":94,"line":1158},[92,140203,1544],{"class":102},[38,140205,140206,140207,140210],{},"2 号盒子为 ",[89,140208,140209],{},"lifeservice"," 生活服务模块 高度为 209px",[1441,140212],{"style":126383,"src":140213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1110,140215,140216,140219,140229,140253,140264],{},[49,140217,140218],{},"设置边框（左右下边框）",[49,140220,140221,140222,140225,140226,140228],{},"里面的内容 是 ",[89,140223,140224],{},"ul > 12*li","，给",[89,140227,49],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[49,140230,140231,140232],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1110,140233,140234,140239,140248],{},[49,140235,140236,140238],{},[89,140237,140209],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[49,140240,140241,140242,140244,140245,140247],{},"可以让 ",[89,140243,140209],{}," 里面的 ",[89,140246,1110],{}," 宽度为 252，就可以装的下 4 个 小 li",[49,140249,140250,140252],{},[89,140251,140209],{}," 盒子 overflow 隐藏多余的部分就可以了",[49,140254,116442,140255,140257,140258,140260,140261,140263],{},[89,140256,49],{}," 里面放一个 ",[89,140259,544],{},"（里面放图标），下面的文本用 ",[89,140262,38],{}," 标签包裹",[49,140265,139027,140266,140268,140269,140271,140272,139061,140274,140277],{},[89,140267,544],{}," 设置 24px宽和28px的高（注意 ",[89,140270,544],{}," 是行内元素， 转成行内块），给 ",[89,140273,49],{},[89,140275,140276],{},"text-align:center"," 让里面内容居中显示",[38,140279,139897],{},[83,140281,140283],{"className":126527,"code":140282,"language":126529,"meta":10,"style":10},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[89,140284,140285,140303,140308,140318],{"__ignoreMap":10},[92,140286,140287,140289,140291,140293,140295,140297,140299,140301],{"class":94,"line":95},[92,140288,92],{"class":51280},[92,140290,12415],{"class":102},[92,140292,341],{"class":51280},[92,140294,12415],{"class":102},[92,140296,23533],{"class":51280},[92,140298,12415],{"class":102},[92,140300,252],{"class":51280},[92,140302,15552],{"class":102},[92,140304,140305],{"class":94,"line":11},[92,140306,140307],{"class":161},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[92,140309,140310,140312,140314,140316],{"class":94,"line":1158},[92,140311,128143],{"class":151},[92,140313,51417],{"class":102},[92,140315,128205],{"class":151},[92,140317,1269],{"class":102},[92,140319,140320],{"class":94,"line":1173},[92,140321,1544],{"class":102},[38,140323,139986],{},[83,140325,140326],{"className":126527,"code":140282,"language":126529,"meta":10,"style":10},[89,140327,140328,140346,140350,140360],{"__ignoreMap":10},[92,140329,140330,140332,140334,140336,140338,140340,140342,140344],{"class":94,"line":95},[92,140331,92],{"class":51280},[92,140333,12415],{"class":102},[92,140335,341],{"class":51280},[92,140337,12415],{"class":102},[92,140339,23533],{"class":51280},[92,140341,12415],{"class":102},[92,140343,252],{"class":51280},[92,140345,15552],{"class":102},[92,140347,140348],{"class":94,"line":11},[92,140349,140307],{"class":161},[92,140351,140352,140354,140356,140358],{"class":94,"line":1158},[92,140353,128143],{"class":151},[92,140355,51417],{"class":102},[92,140357,128205],{"class":151},[92,140359,1269],{"class":102},[92,140361,140362],{"class":94,"line":1173},[92,140363,1544],{"class":102},[38,140365,140366,140367,140370],{},"3 号盒子为 ",[89,140368,140369],{},"bargain"," 特价商品",[1110,140372,140373],{},[49,140374,140375],{},"这个比较简单，直接插入一张图片即可",[38,140377,139897],{},[83,140379,140380],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,140381,140382],{"__ignoreMap":10},[92,140383,140384,140386,140388,140390,140392,140394,140396,140398,140400,140402,140404,140406],{"class":94,"line":95},[92,140385,1013],{"class":102},[92,140387,1441],{"class":51280},[92,140389,55219],{"class":1942},[92,140391,148],{"class":102},[92,140393,134044],{"class":207},[92,140395,55227],{"class":1942},[92,140397,148],{"class":102},[92,140399,134051],{"class":207},[92,140401,134054],{"class":1942},[92,140403,148],{"class":102},[92,140405,134059],{"class":207},[92,140407,51287],{"class":102},[38,140409,139986],{},[83,140411,140412],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,140413,140414],{"__ignoreMap":10},[92,140415,140416,140418,140420,140422,140424,140426,140428,140430,140432,140434,140436,140438],{"class":94,"line":95},[92,140417,1013],{"class":102},[92,140419,1441],{"class":51280},[92,140421,55219],{"class":1942},[92,140423,148],{"class":102},[92,140425,134044],{"class":207},[92,140427,55227],{"class":1942},[92,140429,148],{"class":102},[92,140431,134051],{"class":207},[92,140433,134054],{"class":1942},[92,140435,148],{"class":102},[92,140437,134059],{"class":207},[92,140439,51287],{"class":102},[63,140441,140443],{"id":140442},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1441,140445],{"style":126383,"src":140446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[38,140448,140449,140450,140453],{},"大盒子 ",[89,140451,140452],{},"recom"," 推荐模块 recommend",[1110,140455,140456],{},[49,140457,140458,140459,140461,140462,140465],{},"给这个 ",[89,140460,140452],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[89,140463,140464],{},"#ebebeb","），设置距离上边 12px",[38,140467,139897],{},[83,140469,140471],{"className":126527,"code":140470,"language":126529,"meta":10,"style":10},"div {\n  background-color: #f0f0f0;\n}\n",[89,140472,140473,140479,140490],{"__ignoreMap":10},[92,140474,140475,140477],{"class":94,"line":95},[92,140476,51591],{"class":51280},[92,140478,15552],{"class":102},[92,140480,140481,140483,140485,140488],{"class":94,"line":11},[92,140482,70858],{"class":151},[92,140484,51417],{"class":102},[92,140486,140487],{"class":151},"#f0f0f0",[92,140489,1269],{"class":102},[92,140491,140492],{"class":94,"line":1158},[92,140493,1544],{"class":102},[38,140495,139986],{},[83,140497,140498],{"className":126527,"code":140470,"language":126529,"meta":10,"style":10},[89,140499,140500,140506,140516],{"__ignoreMap":10},[92,140501,140502,140504],{"class":94,"line":95},[92,140503,51591],{"class":51280},[92,140505,15552],{"class":102},[92,140507,140508,140510,140512,140514],{"class":94,"line":11},[92,140509,70858],{"class":151},[92,140511,51417],{"class":102},[92,140513,140487],{"class":151},[92,140515,1269],{"class":102},[92,140517,140518],{"class":94,"line":1158},[92,140519,1544],{"class":102},[38,140521,140522],{},"里面包含 2 个盒子， 浮动即可",[38,140524,139897],{},[83,140526,140527],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,140528,140529,140535,140545],{"__ignoreMap":10},[92,140530,140531,140533],{"class":94,"line":95},[92,140532,130375],{"class":1942},[92,140534,15552],{"class":102},[92,140536,140537,140539,140541,140543],{"class":94,"line":11},[92,140538,131007],{"class":151},[92,140540,51417],{"class":102},[92,140542,23716],{"class":151},[92,140544,1269],{"class":102},[92,140546,140547],{"class":94,"line":1158},[92,140548,1544],{"class":102},[38,140550,140551,140552],{},"1 号盒子 ",[89,140553,140554],{},"recom_hd",[1110,140556,140557,140560],{},[49,140558,140559],{},"设置宽度205px，高度163px",[49,140561,140031,140562,140564],{},[89,140563,1441],{},"标签，插入图片即可",[38,140566,139897],{},[83,140568,140569],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,140570,140571],{"__ignoreMap":10},[92,140572,140573,140575,140577,140579,140581,140583,140585,140587,140589,140591,140593,140595],{"class":94,"line":95},[92,140574,1013],{"class":102},[92,140576,1441],{"class":51280},[92,140578,55219],{"class":1942},[92,140580,148],{"class":102},[92,140582,134044],{"class":207},[92,140584,55227],{"class":1942},[92,140586,148],{"class":102},[92,140588,134051],{"class":207},[92,140590,134054],{"class":1942},[92,140592,148],{"class":102},[92,140594,134059],{"class":207},[92,140596,51287],{"class":102},[38,140598,139986],{},[83,140600,140601],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,140602,140603],{"__ignoreMap":10},[92,140604,140605,140607,140609,140611,140613,140615,140617,140619,140621,140623,140625,140627],{"class":94,"line":95},[92,140606,1013],{"class":102},[92,140608,1441],{"class":51280},[92,140610,55219],{"class":1942},[92,140612,148],{"class":102},[92,140614,134044],{"class":207},[92,140616,55227],{"class":1942},[92,140618,148],{"class":102},[92,140620,134051],{"class":207},[92,140622,134054],{"class":1942},[92,140624,148],{"class":102},[92,140626,134059],{"class":207},[92,140628,51287],{"class":102},[38,140630,140631,140632,140635],{},"2 号盒子 ",[89,140633,140634],{},"recom_bd"," ，注意里面的小竖线",[1110,140637,140638,140649,140652,140657,140662],{},[49,140639,140640,140641,140643,140644,140646,140647],{},"右侧结构里面放 ",[89,140642,1110],{}," 包含 4个 ",[89,140645,49],{},"，每个li里面包含一个",[89,140648,1441],{},[49,140650,140651],{},"直接利用切片工具把里面的内容当成一张图片",[49,140653,139027,140654,140656],{},[89,140655,49],{}," 设置浮动",[49,140658,139027,140659,140661],{},[89,140660,1441],{}," 设置宽高，宽度 248px，高度 163px",[49,140663,140664,140665,140225,140668,140670,140671,140673,140674],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[89,140666,140667],{},"top 10px",[89,140669,49],{},"设置相对定位（注意，最后一个",[89,140672,49],{},"不用设置伪元素），可以利用 ",[89,140675,140676],{},"nth-child(-n+3){...}",[38,140678,139897],{},[83,140680,140681],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[89,140682,140683,140691,140701,140711],{"__ignoreMap":10},[92,140684,140685,140687,140689],{"class":94,"line":95},[92,140686,51591],{"class":51280},[92,140688,137528],{"class":1942},[92,140690,15552],{"class":102},[92,140692,140693,140695,140697,140699],{"class":94,"line":11},[92,140694,137535],{"class":151},[92,140696,51417],{"class":102},[92,140698,7632],{"class":207},[92,140700,1269],{"class":102},[92,140702,140703,140705,140707,140709],{"class":94,"line":1158},[92,140704,128143],{"class":151},[92,140706,51417],{"class":102},[92,140708,60849],{"class":151},[92,140710,1269],{"class":102},[92,140712,140713],{"class":94,"line":1173},[92,140714,1544],{"class":102},[38,140716,139986],{},[83,140718,140719],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[89,140720,140721,140729,140739,140749],{"__ignoreMap":10},[92,140722,140723,140725,140727],{"class":94,"line":95},[92,140724,51591],{"class":51280},[92,140726,137528],{"class":1942},[92,140728,15552],{"class":102},[92,140730,140731,140733,140735,140737],{"class":94,"line":11},[92,140732,137535],{"class":151},[92,140734,51417],{"class":102},[92,140736,7632],{"class":207},[92,140738,1269],{"class":102},[92,140740,140741,140743,140745,140747],{"class":94,"line":1158},[92,140742,128143],{"class":151},[92,140744,51417],{"class":102},[92,140746,60849],{"class":151},[92,140748,1269],{"class":102},[92,140750,140751],{"class":94,"line":1173},[92,140752,1544],{"class":102},[63,140754,140756],{"id":140755},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1441,140758],{"style":126383,"src":140759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[38,140761,140762],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[38,140764,140765],{},"第一楼是家用电器模块： 里面包含两个盒子",[38,140767,140768,140771],{},[89,140769,140770],{},"box_hd"," 制作",[38,140773,140551,140774,140776],{},[89,140775,140770],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1441,140778],{"style":126383,"src":140779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1110,140781,140782,140787,140792,140795],{},[49,140783,140784,140786],{},[89,140785,140770],{}," 给 30px 的高度，2个像素的下边框",[49,140788,140789,140790],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[89,140791,139038],{},[49,140793,140794],{},"左侧盒左浮动，右侧盒子右浮动",[49,140796,140797,140799,140800,140802],{},[89,140798,341],{},"标签之间的距离用左右的",[89,140801,30864],{},"撑开即可",[38,140804,140805],{},"结构代码",[83,140807,140808],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,140809,140810,140816,140826],{"__ignoreMap":10},[92,140811,140812,140814],{"class":94,"line":95},[92,140813,130375],{"class":1942},[92,140815,15552],{"class":102},[92,140817,140818,140820,140822,140824],{"class":94,"line":11},[92,140819,131007],{"class":151},[92,140821,51417],{"class":102},[92,140823,23716],{"class":151},[92,140825,1269],{"class":102},[92,140827,140828],{"class":94,"line":1158},[92,140829,1544],{"class":102},[38,140831,140832],{},"样式代码",[83,140834,140835],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,140836,140837,140843,140853],{"__ignoreMap":10},[92,140838,140839,140841],{"class":94,"line":95},[92,140840,130375],{"class":1942},[92,140842,15552],{"class":102},[92,140844,140845,140847,140849,140851],{"class":94,"line":11},[92,140846,131007],{"class":151},[92,140848,51417],{"class":102},[92,140850,23716],{"class":151},[92,140852,1269],{"class":102},[92,140854,140855],{"class":94,"line":1158},[92,140856,1544],{"class":102},[38,140858,140859,140771],{},[89,140860,140861],{},"box_bd",[38,140863,140864],{},"2 号盒子 box_bd，不要给高度",[1441,140866],{"style":126383,"src":140867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[38,140869,140870],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[38,140872,140873],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[38,140875,140876],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1110,140878,140879,140891,140907],{},[49,140880,140881,140883,140884,140887,140888,140890],{},[89,140882,140861],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[89,140885,140886],{},"tab_content","，在",[89,140889,140886],{}," 里面包裹tab选项卡对应的内容",[49,140892,140893,140894,140897,140898,140900,140901,140903,140904,140906],{},"内容被一个大盒子包裹（",[89,140895,140896],{},"tab_list_item","），里面是 ",[89,140899,1110],{}," 包裹 5个 ",[89,140902,49],{},"，每个",[89,140905,49],{},"设置对应的宽度，然后设置浮动",[49,140908,140909,140910,140912,140913,140915,140916],{},"而这5个",[89,140911,49],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[89,140914,49],{},"设置",[1110,140917,140918,140936,140939],{},[49,140919,140920,140921,140923,140924,140926,140927,140929,140930,140932,140933,140935],{},"第一个小 ",[89,140922,49],{}," 分为上下结构，上面是 ",[89,140925,1110],{}," 包裹 ",[89,140928,49],{}," ，",[89,140931,49],{},"里面包裹 ",[89,140934,341],{},"，下面插入一张图片",[49,140937,140938],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[49,140940,140941,140942,140944,140945,140947,140948,140950],{},"后面的小 ",[89,140943,49],{}," 里面先放一个",[89,140946,341],{},"标签，然后在",[89,140949,341],{},"标签里面插入图片即可",[38,140952,140805],{},[83,140954,140955],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,140956,140957],{"__ignoreMap":10},[92,140958,140959,140961,140963,140965,140967,140969,140971,140973,140975,140977,140979,140981],{"class":94,"line":95},[92,140960,1013],{"class":102},[92,140962,1441],{"class":51280},[92,140964,55219],{"class":1942},[92,140966,148],{"class":102},[92,140968,134044],{"class":207},[92,140970,55227],{"class":1942},[92,140972,148],{"class":102},[92,140974,134051],{"class":207},[92,140976,134054],{"class":1942},[92,140978,148],{"class":102},[92,140980,134059],{"class":207},[92,140982,51287],{"class":102},[38,140984,140832],{},[83,140986,140987],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,140988,140989],{"__ignoreMap":10},[92,140990,140991,140993,140995,140997,140999,141001,141003,141005,141007,141009,141011,141013],{"class":94,"line":95},[92,140992,1013],{"class":102},[92,140994,1441],{"class":51280},[92,140996,55219],{"class":1942},[92,140998,148],{"class":102},[92,141000,134044],{"class":207},[92,141002,55227],{"class":1942},[92,141004,148],{"class":102},[92,141006,134051],{"class":207},[92,141008,134054],{"class":1942},[92,141010,148],{"class":102},[92,141012,134059],{"class":207},[92,141014,51287],{"class":102},[38,141016,141017],{},"tab栏切换需求！！！！！！介绍：",[1441,141019],{"style":126383,"src":141020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1110,141022,141023,141031,141037,141040],{},[49,141024,141025,141028,141029],{},[89,141026,141027],{},"tab","栏的布局是 ",[89,141030,139038],{},[49,141032,141033,141034,141036],{},"有多少个",[89,141035,141027],{},"选项卡，那么对应就有多少个内容",[49,141038,141039],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[49,141041,141042,141043,141046,141047,141049,141050,141052],{},"等后面我们学习了",[89,141044,141045],{},"js","之后，我们就会配合",[89,141048,141045],{},"来实现，",[89,141051,141027],{},"栏的切换",[33,141054,141056],{"id":141055},"_162-列表制作","16.2 列表制作",[63,141058,141060],{"id":141059},"_1621-准备工作","16.2.1 准备工作",[1110,141062,141063,141066,141069,141072],{},[49,141064,141065],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[49,141067,141068],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[49,141070,141071],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[49,141073,141074],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[63,141076,141078,141079,100993,141081,141083],{"id":141077},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[89,141080,131532],{},[89,141082,53693],{}," 修改",[1441,141085],{"style":126383,"src":141086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1110,141088,141089],{},[49,141090,141091],{},"秒杀盒子 sk（ second kill ） 定位即可",[38,141093,139897],{},[83,141095,141096],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[89,141097,141098,141102,141116,141120,141134,141138,141152,141156,141170,141174],{"__ignoreMap":10},[92,141099,141100],{"class":94,"line":95},[92,141101,131966],{"class":161},[92,141103,141104,141106,141108,141110,141112,141114],{"class":94,"line":11},[92,141105,131971],{"class":1942},[92,141107,79787],{"class":102},[92,141109,128887],{"class":151},[92,141111,51417],{"class":102},[92,141113,131980],{"class":151},[92,141115,129457],{"class":102},[92,141117,141118],{"class":94,"line":1158},[92,141119,131987],{"class":161},[92,141121,141122,141124,141126,141128,141130,141132],{"class":94,"line":1173},[92,141123,131992],{"class":1942},[92,141125,79787],{"class":102},[92,141127,128887],{"class":151},[92,141129,51417],{"class":102},[92,141131,54744],{"class":151},[92,141133,129457],{"class":102},[92,141135,141136],{"class":94,"line":1179},[92,141137,132007],{"class":161},[92,141139,141140,141142,141144,141146,141148,141150],{"class":94,"line":1193},[92,141141,132012],{"class":1942},[92,141143,79787],{"class":102},[92,141145,128887],{"class":151},[92,141147,51417],{"class":102},[92,141149,54811],{"class":151},[92,141151,129457],{"class":102},[92,141153,141154],{"class":94,"line":1199},[92,141155,132027],{"class":161},[92,141157,141158,141160,141162,141164,141166,141168],{"class":94,"line":1290},[92,141159,132032],{"class":1942},[92,141161,79787],{"class":102},[92,141163,128887],{"class":151},[92,141165,51417],{"class":102},[92,141167,86213],{"class":151},[92,141169,129457],{"class":102},[92,141171,141172],{"class":94,"line":1296},[92,141173,132047],{"class":161},[92,141175,141176,141178,141180,141182,141184,141186],{"class":94,"line":1308},[92,141177,132052],{"class":1942},[92,141179,79787],{"class":102},[92,141181,128887],{"class":151},[92,141183,51417],{"class":102},[92,141185,132061],{"class":151},[92,141187,129457],{"class":102},[38,141189,139986],{},[83,141191,141192],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[89,141193,141194,141198,141212,141216,141230,141234,141248,141252,141266,141270],{"__ignoreMap":10},[92,141195,141196],{"class":94,"line":95},[92,141197,131966],{"class":161},[92,141199,141200,141202,141204,141206,141208,141210],{"class":94,"line":11},[92,141201,131971],{"class":1942},[92,141203,79787],{"class":102},[92,141205,128887],{"class":151},[92,141207,51417],{"class":102},[92,141209,131980],{"class":151},[92,141211,129457],{"class":102},[92,141213,141214],{"class":94,"line":1158},[92,141215,131987],{"class":161},[92,141217,141218,141220,141222,141224,141226,141228],{"class":94,"line":1173},[92,141219,131992],{"class":1942},[92,141221,79787],{"class":102},[92,141223,128887],{"class":151},[92,141225,51417],{"class":102},[92,141227,54744],{"class":151},[92,141229,129457],{"class":102},[92,141231,141232],{"class":94,"line":1179},[92,141233,132007],{"class":161},[92,141235,141236,141238,141240,141242,141244,141246],{"class":94,"line":1193},[92,141237,132012],{"class":1942},[92,141239,79787],{"class":102},[92,141241,128887],{"class":151},[92,141243,51417],{"class":102},[92,141245,54811],{"class":151},[92,141247,129457],{"class":102},[92,141249,141250],{"class":94,"line":1199},[92,141251,132027],{"class":161},[92,141253,141254,141256,141258,141260,141262,141264],{"class":94,"line":1290},[92,141255,132032],{"class":1942},[92,141257,79787],{"class":102},[92,141259,128887],{"class":151},[92,141261,51417],{"class":102},[92,141263,86213],{"class":151},[92,141265,129457],{"class":102},[92,141267,141268],{"class":94,"line":1296},[92,141269,132047],{"class":161},[92,141271,141272,141274,141276,141278,141280,141282],{"class":94,"line":1308},[92,141273,132052],{"class":1942},[92,141275,79787],{"class":102},[92,141277,128887],{"class":151},[92,141279,51417],{"class":102},[92,141281,132061],{"class":151},[92,141283,129457],{"class":102},[1110,141285,141286,141297],{},[49,141287,141288,141289,141292,141293,100993,141295],{},"1 号盒子左侧浮动 ",[89,141290,141291],{},"sk_list"," 里面包含 ",[89,141294,1110],{},[89,141296,49],{},[49,141298,141299,141300,141292,141303,100993,141305],{},"2 号盒子左侧浮动 ",[89,141301,141302],{},"sk_con",[89,141304,1110],{},[89,141306,49],{},[38,141308,139897],{},[83,141310,141311],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,141312,141313,141319,141329],{"__ignoreMap":10},[92,141314,141315,141317],{"class":94,"line":95},[92,141316,130375],{"class":1942},[92,141318,15552],{"class":102},[92,141320,141321,141323,141325,141327],{"class":94,"line":11},[92,141322,131007],{"class":151},[92,141324,51417],{"class":102},[92,141326,23716],{"class":151},[92,141328,1269],{"class":102},[92,141330,141331],{"class":94,"line":1158},[92,141332,1544],{"class":102},[38,141334,139986],{},[83,141336,141337],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,141338,141339,141345,141355],{"__ignoreMap":10},[92,141340,141341,141343],{"class":94,"line":95},[92,141342,130375],{"class":1942},[92,141344,15552],{"class":102},[92,141346,141347,141349,141351,141353],{"class":94,"line":11},[92,141348,131007],{"class":151},[92,141350,51417],{"class":102},[92,141352,23716],{"class":151},[92,141354,1269],{"class":102},[92,141356,141357],{"class":94,"line":1158},[92,141358,1544],{"class":102},[63,141360,141362,141363],{"id":141361},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[89,141364,141365],{},"sk_container",[1441,141367],{"style":126383,"src":141368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1110,141370,141371,141376],{},[49,141372,140551,141373,141375],{},[89,141374,141365],{}," 给宽度 1200，不要给高度",[49,141377,141378],{},"一定不要忘记清除浮动",[38,141380,139897],{},[83,141382,141383],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,141384,141385,141391,141401],{"__ignoreMap":10},[92,141386,141387,141389],{"class":94,"line":95},[92,141388,130375],{"class":1942},[92,141390,15552],{"class":102},[92,141392,141393,141395,141397,141399],{"class":94,"line":11},[92,141394,131007],{"class":151},[92,141396,51417],{"class":102},[92,141398,23716],{"class":151},[92,141400,1269],{"class":102},[92,141402,141403],{"class":94,"line":1158},[92,141404,1544],{"class":102},[46,141406,141407],{},[49,141408,141409],{},"sk_hd制作",[1110,141411,141412],{},[49,141413,140631,141414,141417],{},[89,141415,141416],{},"sk_hd"," ，插入图片即可",[38,141419,139897],{},[83,141421,141422],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,141423,141424],{"__ignoreMap":10},[92,141425,141426,141428,141430,141432,141434,141436,141438,141440,141442,141444,141446,141448],{"class":94,"line":95},[92,141427,1013],{"class":102},[92,141429,1441],{"class":51280},[92,141431,55219],{"class":1942},[92,141433,148],{"class":102},[92,141435,134044],{"class":207},[92,141437,55227],{"class":1942},[92,141439,148],{"class":102},[92,141441,134051],{"class":207},[92,141443,134054],{"class":1942},[92,141445,148],{"class":102},[92,141447,134059],{"class":207},[92,141449,51287],{"class":102},[46,141451,141452],{"start":11},[49,141453,141454],{},"sk_bd制作",[1110,141456,141457],{},[49,141458,141459,141460,141463,141464,100993,141466,141468],{},"3 号盒子 ",[89,141461,141462],{},"sk_bd"," ，里面包含很多的 ",[89,141465,1110],{},[89,141467,49],{},[1110,141469,141470,141479],{},[49,141471,141472,141473,141475,141476,141478],{},"当鼠标移入到 ",[89,141474,49],{}," 上面的时候显示红色的边框，在这里先给 ",[89,141477,49],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[49,141480,141481,141482,141484,141485,141487,141488,141491,141492,141494],{},"由于给每个 ",[89,141483,49],{}," 都设置了外边距，导致一行的最后一个 ",[89,141486,49],{}," 掉了下来，在这里我们利用 ",[89,141489,141490],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[89,141493,49],{},"，去掉外边距就好了",[38,141496,139897],{},[83,141498,141499],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[89,141500,141501,141507,141519],{"__ignoreMap":10},[92,141502,141503,141505],{"class":94,"line":95},[92,141504,51591],{"class":51280},[92,141506,15552],{"class":102},[92,141508,141509,141511,141513,141515,141517],{"class":94,"line":11},[92,141510,70450],{"class":151},[92,141512,51417],{"class":102},[92,141514,294],{"class":151},[92,141516,51536],{"class":151},[92,141518,1269],{"class":102},[92,141520,141521],{"class":94,"line":1158},[92,141522,1544],{"class":102},[38,141524,139986],{},[83,141526,141527],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[89,141528,141529,141535,141547],{"__ignoreMap":10},[92,141530,141531,141533],{"class":94,"line":95},[92,141532,51591],{"class":51280},[92,141534,15552],{"class":102},[92,141536,141537,141539,141541,141543,141545],{"class":94,"line":11},[92,141538,70450],{"class":151},[92,141540,51417],{"class":102},[92,141542,294],{"class":151},[92,141544,51536],{"class":151},[92,141546,1269],{"class":102},[92,141548,141549],{"class":94,"line":1158},[92,141550,1544],{"class":102},[33,141552,141554],{"id":141553},"_163-注册页面制作","16.3 注册页面制作",[1441,141556],{"style":126383,"src":141557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[38,141559,141560,141562],{},[252,141561,9005],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1441,141564],{"style":126383,"src":141565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[63,141567,141569],{"id":141568},"_1631-准备工作","16.3.1 准备工作",[1110,141571,141572,141575],{},[49,141573,141574],{},"创建register.html，引入 base.css，引入favicon图标",[49,141576,141577],{},"创建register.css ，在html页面进行引入",[63,141579,141581,141582,141584],{"id":141580},"_1632-header-头部实现","16.3.2 ",[89,141583,131532],{}," 头部实现",[1110,141586,141587,141590],{},[49,141588,141589],{},"整个内容用 版心 进行包裹",[49,141591,141592],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[38,141594,139897],{},[83,141596,141597],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,141598,141599],{"__ignoreMap":10},[92,141600,141601,141603,141605,141607,141609,141611,141613,141615,141617,141619,141621,141623],{"class":94,"line":95},[92,141602,1013],{"class":102},[92,141604,1441],{"class":51280},[92,141606,55219],{"class":1942},[92,141608,148],{"class":102},[92,141610,134044],{"class":207},[92,141612,55227],{"class":1942},[92,141614,148],{"class":102},[92,141616,134051],{"class":207},[92,141618,134054],{"class":1942},[92,141620,148],{"class":102},[92,141622,134059],{"class":207},[92,141624,51287],{"class":102},[38,141626,139986],{},[83,141628,141629],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,141630,141631],{"__ignoreMap":10},[92,141632,141633,141635,141637,141639,141641,141643,141645,141647,141649,141651,141653,141655],{"class":94,"line":95},[92,141634,1013],{"class":102},[92,141636,1441],{"class":51280},[92,141638,55219],{"class":1942},[92,141640,148],{"class":102},[92,141642,134044],{"class":207},[92,141644,55227],{"class":1942},[92,141646,148],{"class":102},[92,141648,134051],{"class":207},[92,141650,134054],{"class":1942},[92,141652,148],{"class":102},[92,141654,134059],{"class":207},[92,141656,51287],{"class":102},[63,141658,141660,141661,141664],{"id":141659},"_1633-registerarea-主体模块实现","16.3.3 ",[89,141662,141663],{},"registerarea"," 主体模块实现",[1441,141666],{"style":126383,"src":141667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[38,141669,141670],{},"整个大盒子 高度为 522px，设置4个边框",[38,141672,139897],{},[83,141674,141675],{"className":126527,"code":130684,"language":126529,"meta":10,"style":10},[89,141676,141677,141683,141699],{"__ignoreMap":10},[92,141678,141679,141681],{"class":94,"line":95},[92,141680,51591],{"class":51280},[92,141682,15552],{"class":102},[92,141684,141685,141687,141689,141691,141693,141695,141697],{"class":94,"line":11},[92,141686,70876],{"class":151},[92,141688,51417],{"class":102},[92,141690,320],{"class":151},[92,141692,51472],{"class":98},[92,141694,51501],{"class":151},[92,141696,129919],{"class":151},[92,141698,1269],{"class":102},[92,141700,141701],{"class":94,"line":1158},[92,141702,1544],{"class":102},[38,141704,139986],{},[83,141706,141707],{"className":126527,"code":130684,"language":126529,"meta":10,"style":10},[89,141708,141709,141715,141731],{"__ignoreMap":10},[92,141710,141711,141713],{"class":94,"line":95},[92,141712,51591],{"class":51280},[92,141714,15552],{"class":102},[92,141716,141717,141719,141721,141723,141725,141727,141729],{"class":94,"line":11},[92,141718,70876],{"class":151},[92,141720,51417],{"class":102},[92,141722,320],{"class":151},[92,141724,51472],{"class":98},[92,141726,51501],{"class":151},[92,141728,129919],{"class":151},[92,141730,1269],{"class":102},[92,141732,141733],{"class":94,"line":1158},[92,141734,1544],{"class":102},[38,141736,141737],{},"1号盒子 是一个 h3 标签，放标题",[1110,141739,141740],{},[49,141741,141742],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[38,141744,139897],{},[83,141746,141747],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,141748,141749,141755,141765],{"__ignoreMap":10},[92,141750,141751,141753],{"class":94,"line":95},[92,141752,130375],{"class":1942},[92,141754,15552],{"class":102},[92,141756,141757,141759,141761,141763],{"class":94,"line":11},[92,141758,131007],{"class":151},[92,141760,51417],{"class":102},[92,141762,23716],{"class":151},[92,141764,1269],{"class":102},[92,141766,141767],{"class":94,"line":1158},[92,141768,1544],{"class":102},[38,141770,139986],{},[83,141772,141773],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,141774,141775,141781,141791],{"__ignoreMap":10},[92,141776,141777,141779],{"class":94,"line":95},[92,141778,130375],{"class":1942},[92,141780,15552],{"class":102},[92,141782,141783,141785,141787,141789],{"class":94,"line":11},[92,141784,131007],{"class":151},[92,141786,51417],{"class":102},[92,141788,23716],{"class":151},[92,141790,1269],{"class":102},[92,141792,141793],{"class":94,"line":1158},[92,141794,1544],{"class":102},[38,141796,141797],{},"2号盒子 里面放注册的内容",[1110,141799,141800,141803,141812,141826,141839,141842,141845,141863,141877],{},[49,141801,141802],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[49,141804,141805,141806,141808,141809,141811],{},"里面的内容利用 ",[89,141807,1110],{}," 包含 ",[89,141810,49],{}," 来实现的（不需要用表格）",[49,141813,139041,141814,141816,141817,141819,141820,141822,141823,141825],{},[89,141815,49],{}," 里面，左侧放 ",[89,141818,33589],{}," 标签， 中间放",[89,141821,53801],{}," 标签， 右侧放 ",[89,141824,92],{}," 提示信息",[49,141827,141828,141829,141831,141832,141834,141835,141838],{},"左侧 ",[89,141830,33589],{},"里面的文字都是右对齐，我们可以给",[89,141833,33589],{},"设置一个宽度（88px），然后利用",[89,141836,141837],{},"text-align"," 来设置右对齐",[49,141840,141841],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[49,141843,141844],{},"右侧 span修饰一下文字颜色",[49,141846,141847,141848],{},"提示信息的样式优化",[1110,141849,141850,141853,141856],{},[49,141851,141852],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[49,141854,141855],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[49,141857,141858,141859,141862],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[89,141860,141861],{},"vertical-algin"," 来设置 图片与文字对齐方式",[49,141864,141865,141866],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1110,141867,141868,141874],{},[49,141869,141870,141871,141873],{},"设置 ",[89,141872,23533],{}," 的 左右 12px 的内边距，设置一下文字颜色",[49,141875,141876],{},"分别设置 背景颜色",[49,141878,141879,141880,141882],{},"同意协议 和 完成注册 都是用 ",[89,141881,49],{}," 进行包裹",[38,141884,139897],{},[83,141886,141887],{"className":126527,"code":140470,"language":126529,"meta":10,"style":10},[89,141888,141889,141895,141905],{"__ignoreMap":10},[92,141890,141891,141893],{"class":94,"line":95},[92,141892,51591],{"class":51280},[92,141894,15552],{"class":102},[92,141896,141897,141899,141901,141903],{"class":94,"line":11},[92,141898,70858],{"class":151},[92,141900,51417],{"class":102},[92,141902,140487],{"class":151},[92,141904,1269],{"class":102},[92,141906,141907],{"class":94,"line":1158},[92,141908,1544],{"class":102},[38,141910,139986],{},[83,141912,141913],{"className":126527,"code":140470,"language":126529,"meta":10,"style":10},[89,141914,141915,141921,141931],{"__ignoreMap":10},[92,141916,141917,141919],{"class":94,"line":95},[92,141918,51591],{"class":51280},[92,141920,15552],{"class":102},[92,141922,141923,141925,141927,141929],{"class":94,"line":11},[92,141924,70858],{"class":151},[92,141926,51417],{"class":102},[92,141928,140487],{"class":151},[92,141930,1269],{"class":102},[92,141932,141933],{"class":94,"line":1158},[92,141934,1544],{"class":102},[63,141936,141938],{"id":141937},"_1634-底部实现","16.3.4 底部实现",[38,141940,139897],{},[83,141942,141943],{"className":126527,"code":140470,"language":126529,"meta":10,"style":10},[89,141944,141945,141951,141961],{"__ignoreMap":10},[92,141946,141947,141949],{"class":94,"line":95},[92,141948,51591],{"class":51280},[92,141950,15552],{"class":102},[92,141952,141953,141955,141957,141959],{"class":94,"line":11},[92,141954,70858],{"class":151},[92,141956,51417],{"class":102},[92,141958,140487],{"class":151},[92,141960,1269],{"class":102},[92,141962,141963],{"class":94,"line":1158},[92,141964,1544],{"class":102},[38,141966,139986],{},[83,141968,141969],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[89,141970,141971,141975,141989,141993],{"__ignoreMap":10},[92,141972,141973],{"class":94,"line":95},[92,141974,130638],{"class":161},[92,141976,141977,141979,141981,141983,141985,141987],{"class":94,"line":11},[92,141978,1013],{"class":102},[92,141980,51591],{"class":51280},[92,141982,53466],{"class":1942},[92,141984,148],{"class":102},[92,141986,130651],{"class":207},[92,141988,51287],{"class":102},[92,141990,141991],{"class":94,"line":1158},[92,141992,130658],{"class":102},[92,141994,141995,141997,141999],{"class":94,"line":1173},[92,141996,51765],{"class":102},[92,141998,51591],{"class":51280},[92,142000,51287],{"class":102},[33,142002,142004],{"id":142003},"_164-项目总结","16.4 项目总结",[46,142006,142007,142010,142013,142016],{},[49,142008,142009],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[49,142011,142012],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[49,142014,142015],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[49,142017,142018],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1441,142020],{"style":126383,"src":142021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[46,142023,142024],{"start":1179},[49,142025,142026],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1441,142028],{"style":126383,"src":142029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[46,142031,142032],{"start":1193},[49,142033,142034],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1441,142036],{"style":126383,"src":142037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[83,142039,142040],{"className":127274,"code":136684,"language":127276,"meta":10,"style":10},[89,142041,142042],{"__ignoreMap":10},[92,142043,142044,142046,142048,142050,142052,142054,142056,142058,142060,142062,142064,142066],{"class":94,"line":95},[92,142045,1013],{"class":102},[92,142047,53801],{"class":51280},[92,142049,53804],{"class":1942},[92,142051,148],{"class":102},[92,142053,62679],{"class":207},[92,142055,14900],{"class":1942},[92,142057,148],{"class":102},[92,142059,136705],{"class":207},[92,142061,61000],{"class":1942},[92,142063,148],{"class":102},[92,142065,136712],{"class":207},[92,142067,51287],{"class":102},[46,142069,142070,142073],{"start":1199},[49,142071,142072],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[49,142074,142075],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5106,142077,142078],{},"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":10,"searchDepth":11,"depth":11,"links":142080},[142081,142086,142093,142101],{"id":139707,"depth":11,"text":139708,"children":142082},[142083,142084,142085],{"id":139711,"depth":1158,"text":139712},{"id":140442,"depth":1158,"text":140443},{"id":140755,"depth":1158,"text":140756},{"id":141055,"depth":11,"text":141056,"children":142087},[142088,142089,142091],{"id":141059,"depth":1158,"text":141060},{"id":141077,"depth":1158,"text":142090},"16.2.2 列表页 header 和 nav 修改",{"id":141361,"depth":1158,"text":142092},"16.2.3 列表页主体 sk_container",{"id":141553,"depth":11,"text":141554,"children":142094},[142095,142096,142098,142100],{"id":141568,"depth":1158,"text":141569},{"id":141580,"depth":1158,"text":142097},"16.3.2 header 头部实现",{"id":141659,"depth":1158,"text":142099},"16.3.3 registerarea 主体模块实现",{"id":141937,"depth":1158,"text":141938},{"id":142003,"depth":11,"text":142004},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139699,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142108,"title":142109,"body":142110,"description":13,"extension":14,"meta":142218,"navigation":17,"path":142219,"seo":142220,"stem":142221,"__hash__":142222},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142111,"toc":142213},[142112,142115,142119,142122,142125,142134,142143,142147,142152,142159,142177,142180,142183,142186,142189,142192,142195,142198,142201,142204,142207,142210],[29,142113,142109],{"id":142114},"_17-web服务器与网站发布",[33,142116,142118],{"id":142117},"_171-web服务器","17.1 Web服务器",[38,142120,142121],{},"把自己网站上传到服务器上，可以让其他人访问",[1441,142123],{"style":126383,"src":142124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[38,142126,142127,142130,142131],{},[252,142128,142129],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[252,142132,142133],{},"Web 服务器等",[38,142135,142136,142137,100993,142140,25721],{},"根据服务器在网络中所在的位置不同，又可分为 ",[252,142138,142139],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[252,142141,142142],{},"远程服务器",[63,142144,142146],{"id":142145},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[38,142148,142149],{},[252,142150,142151],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[38,142153,142154,142155],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[341,142156,142157],{"href":142157,"rel":142158},"http:\u002F\u002Ffree.3v.do\u002F",[23845],[1110,142160,142161,142164,142167,142174],{},[49,142162,142163],{},"去免费空间网站注册账号。",[49,142165,142166],{},"记录下主机名、用户名、密码、域名。",[49,142168,142169,142170,142173],{},"利用 ",[89,142171,142172],{},"utftp"," 软件 上传网站到远程服务器",[49,142175,142176],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[38,142178,142179],{},"使用软件上传，对上传软件文件进行解压",[1441,142181],{"style":126383,"src":142182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1441,142184],{"style":126383,"src":142185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[38,142187,142188],{},"输入刚刚申请的服务器账号信息：",[1441,142190],{"style":126383,"src":142191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1441,142193],{"style":126383,"src":142194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1441,142196],{"style":126383,"src":142197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1441,142199],{"style":126383,"src":142200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[38,142202,142203],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1441,142205],{"style":126383,"src":142206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[38,142208,142209],{},"浏览器输入域名即可访问",[38,142211,142212],{},"首页一定必须是index",{"title":10,"searchDepth":11,"depth":11,"links":142214},[142215],{"id":142117,"depth":11,"text":142118,"children":142216},[142217],{"id":142145,"depth":1158,"text":142146},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142109,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142224,"title":142225,"body":142226,"description":13,"extension":14,"meta":143153,"navigation":17,"path":143154,"seo":143155,"stem":143156,"__hash__":143157},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142227,"toc":143136},[142228,142231,142235,142238,142241,142252,142255,142259,142263,142268,142271,142274,142277,142280,142284,142310,142314,142318,142321,142324,142328,142361,142365,142368,142371,142435,142439,142443,142446,142449,142452,142456,142501,142505,142508,142538,142542,142546,142549,142552,142556,142559,142628,142631,142739,142741,142747,142751,142754,142757,142853,142856,142860,142884,142888,142891,142895,142898,142902,142905,142908,142911,142914,142918,142921,142924,142928,142932,142935,142938,142941,142944,142948,142951,142955,142958,142961,143006,143010,143014,143017,143020,143023,143055,143059,143062,143096,143100,143103,143133],[29,142229,142225],{"id":142230},"_18-2d动画与3d转换",[33,142232,142234],{"id":142233},"_181-css3-2d转换","18.1 CSS3 2D转换",[38,142236,142237],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[38,142239,142240],{},"转换（transform）你可以简单理解为变形",[1110,142242,142243,142246,142249],{},[49,142244,142245],{},"移动：translate",[49,142247,142248],{},"旋转：rotate",[49,142250,142251],{},"缩放：scale",[1441,142253],{"style":126383,"src":142254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[63,142256,142258],{"id":142257},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21978,142260,142262],{"id":142261},"_18111-translate介绍","18.1.1.1 translate介绍",[38,142264,142265,142266],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[252,142267,133186],{},[1441,142269],{"style":126383,"src":142270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[38,142272,142273],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[38,142275,142276],{},"对于行内元素无效",[38,142278,142279],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21978,142281,142283],{"id":142282},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[83,142285,142286],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[89,142287,142288,142294,142306],{"__ignoreMap":10},[92,142289,142290,142292],{"class":94,"line":95},[92,142291,51591],{"class":51280},[92,142293,15552],{"class":102},[92,142295,142296,142298,142300,142302,142304],{"class":94,"line":11},[92,142297,70450],{"class":151},[92,142299,51417],{"class":102},[92,142301,294],{"class":151},[92,142303,51536],{"class":151},[92,142305,1269],{"class":102},[92,142307,142308],{"class":94,"line":1158},[92,142309,1544],{"class":102},[63,142311,142313],{"id":142312},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21978,142315,142317],{"id":142316},"_18121-rotate介绍","18.1.2.1 rotate介绍",[38,142319,142320],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1441,142322],{"style":126383,"src":142323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21978,142325,142327],{"id":142326},"_18122-旋转效果","18.1.2.2 旋转效果",[83,142329,142331],{"className":126527,"code":142330,"language":126529,"meta":10,"style":10},"div {\n  transform: rotate(45deg);\n}\n",[89,142332,142333,142339,142357],{"__ignoreMap":10},[92,142334,142335,142337],{"class":94,"line":95},[92,142336,51591],{"class":51280},[92,142338,15552],{"class":102},[92,142340,142341,142343,142345,142348,142350,142352,142355],{"class":94,"line":11},[92,142342,136511],{"class":151},[92,142344,51417],{"class":102},[92,142346,142347],{"class":151},"rotate",[92,142349,103],{"class":102},[92,142351,632],{"class":151},[92,142353,142354],{"class":98},"deg",[92,142356,2698],{"class":102},[92,142358,142359],{"class":94,"line":1158},[92,142360,1544],{"class":102},[21978,142362,142364],{"id":142363},"_18123-三角做法","18.1.2.3 三角做法",[38,142366,142367],{},"该下标当经过最外层大盒子时会实现向上反转",[1441,142369],{"style":126383,"src":142370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[83,142372,142373],{"className":126527,"code":135047,"language":126529,"meta":10,"style":10},[89,142374,142375,142379,142385,142395,142405,142421,142431],{"__ignoreMap":10},[92,142376,142377],{"class":94,"line":95},[92,142378,135054],{"class":161},[92,142380,142381,142383],{"class":94,"line":11},[92,142382,135059],{"class":1942},[92,142384,15552],{"class":102},[92,142386,142387,142389,142391,142393],{"class":94,"line":1158},[92,142388,70548],{"class":151},[92,142390,51417],{"class":102},[92,142392,294],{"class":151},[92,142394,1269],{"class":102},[92,142396,142397,142399,142401,142403],{"class":94,"line":1173},[92,142398,70768],{"class":151},[92,142400,51417],{"class":102},[92,142402,294],{"class":151},[92,142404,1269],{"class":102},[92,142406,142407,142409,142411,142413,142415,142417,142419],{"class":94,"line":1179},[92,142408,70876],{"class":151},[92,142410,51417],{"class":102},[92,142412,549],{"class":151},[92,142414,51472],{"class":98},[92,142416,51501],{"class":151},[92,142418,63971],{"class":151},[92,142420,1269],{"class":102},[92,142422,142423,142425,142427,142429],{"class":94,"line":1193},[92,142424,135102],{"class":151},[92,142426,51417],{"class":102},[92,142428,62349],{"class":151},[92,142430,1269],{"class":102},[92,142432,142433],{"class":94,"line":1199},[92,142434,1544],{"class":102},[63,142436,142438],{"id":142437},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21978,142440,142442],{"id":142441},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[38,142444,142445],{},"设置中心点",[1441,142447],{"style":126383,"src":142448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[38,142450,142451],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21978,142453,142455],{"id":142454},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[83,142457,142459],{"className":126527,"code":142458,"language":126529,"meta":10,"style":10},"\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",[89,142460,142461,142466,142472,142487,142492,142497],{"__ignoreMap":10},[92,142462,142463],{"class":94,"line":95},[92,142464,142465],{"class":161},"\u002F* 转换中心点 *\u002F\n",[92,142467,142468,142470],{"class":94,"line":11},[92,142469,51591],{"class":51280},[92,142471,15552],{"class":102},[92,142473,142474,142477,142479,142481,142483,142485],{"class":94,"line":1158},[92,142475,142476],{"class":151},"  transform-origin",[92,142478,51417],{"class":102},[92,142480,51572],{"class":151},[92,142482,17124],{"class":151},[92,142484,130390],{"class":102},[92,142486,135200],{"class":161},[92,142488,142489],{"class":94,"line":1173},[92,142490,142491],{"class":161},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[92,142493,142494],{"class":94,"line":1179},[92,142495,142496],{"class":161},"  \u002F* transform-origin: left top; *\u002F\n",[92,142498,142499],{"class":94,"line":1193},[92,142500,1544],{"class":102},[21978,142502,142504],{"id":142503},"_18133-旋转案例","18.1.3.3 旋转案例",[1441,142506],{"style":126383,"src":142507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[83,142509,142510],{"className":126527,"code":142330,"language":126529,"meta":10,"style":10},[89,142511,142512,142518,142534],{"__ignoreMap":10},[92,142513,142514,142516],{"class":94,"line":95},[92,142515,51591],{"class":51280},[92,142517,15552],{"class":102},[92,142519,142520,142522,142524,142526,142528,142530,142532],{"class":94,"line":11},[92,142521,136511],{"class":151},[92,142523,51417],{"class":102},[92,142525,142347],{"class":151},[92,142527,103],{"class":102},[92,142529,632],{"class":151},[92,142531,142354],{"class":98},[92,142533,2698],{"class":102},[92,142535,142536],{"class":94,"line":1158},[92,142537,1544],{"class":102},[63,142539,142541],{"id":142540},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21978,142543,142545],{"id":142544},"_18141-scale介绍","18.1.4.1 scale介绍",[38,142547,142548],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1441,142550],{"style":126383,"src":142551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21978,142553,142555],{"id":142554},"_18142-分页按钮","18.1.4.2 分页按钮",[1441,142557],{"style":126383,"src":142558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[83,142560,142562],{"className":126527,"code":142561,"language":126529,"meta":10,"style":10},"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",[89,142563,142564,142570,142586,142590,142594,142599,142605,142619,142624],{"__ignoreMap":10},[92,142565,142566,142568],{"class":94,"line":95},[92,142567,51591],{"class":51280},[92,142569,15552],{"class":102},[92,142571,142572,142574,142576,142579,142581,142584],{"class":94,"line":11},[92,142573,136511],{"class":151},[92,142575,51417],{"class":102},[92,142577,142578],{"class":151},"scale",[92,142580,103],{"class":102},[92,142582,142583],{"class":151},"1.2",[92,142585,2698],{"class":102},[92,142587,142588],{"class":94,"line":1158},[92,142589,1544],{"class":102},[92,142591,142592],{"class":94,"line":1173},[92,142593,135988],{"class":102},[92,142595,142596],{"class":94,"line":1179},[92,142597,142598],{"class":161},"\u002F* 2D 缩放 *\u002F\n",[92,142600,142601,142603],{"class":94,"line":1193},[92,142602,51591],{"class":51280},[92,142604,15552],{"class":102},[92,142606,142607,142609,142611,142613,142615,142617],{"class":94,"line":1199},[92,142608,136511],{"class":151},[92,142610,51417],{"class":102},[92,142612,142578],{"class":151},[92,142614,103],{"class":102},[92,142616,142583],{"class":151},[92,142618,2698],{"class":102},[92,142620,142621],{"class":94,"line":1290},[92,142622,142623],{"class":161},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[92,142625,142626],{"class":94,"line":1296},[92,142627,1544],{"class":102},[38,142629,142630],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[83,142632,142634],{"className":126527,"code":142633,"language":126529,"meta":10,"style":10},"\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",[89,142635,142636,142641,142651,142672,142693,142697,142702,142708,142735],{"__ignoreMap":10},[92,142637,142638],{"class":94,"line":95},[92,142639,142640],{"class":161},"\u002F* 定义动画 *\u002F\n",[92,142642,142643,142646,142649],{"class":94,"line":11},[92,142644,142645],{"class":98},"@keyframes",[92,142647,142648],{"class":5196}," move",[92,142650,15552],{"class":102},[92,142652,142653,142656,142658,142660,142662,142665,142667,142669],{"class":94,"line":1158},[92,142654,142655],{"class":1942},"  0%",[92,142657,79787],{"class":102},[92,142659,48115],{"class":151},[92,142661,51417],{"class":102},[92,142663,142664],{"class":151},"translateX",[92,142666,103],{"class":102},[92,142668,294],{"class":151},[92,142670,142671],{"class":102},"); }\n",[92,142673,142674,142677,142679,142681,142683,142685,142687,142689,142691],{"class":94,"line":1173},[92,142675,142676],{"class":1942},"  100%",[92,142678,79787],{"class":102},[92,142680,48115],{"class":151},[92,142682,51417],{"class":102},[92,142684,142664],{"class":151},[92,142686,103],{"class":102},[92,142688,414],{"class":151},[92,142690,51472],{"class":98},[92,142692,142671],{"class":102},[92,142694,142695],{"class":94,"line":1179},[92,142696,1544],{"class":102},[92,142698,142699],{"class":94,"line":1193},[92,142700,142701],{"class":161},"\u002F* 调用动画 *\u002F\n",[92,142703,142704,142706],{"class":94,"line":1199},[92,142705,51591],{"class":51280},[92,142707,15552],{"class":102},[92,142709,142710,142713,142715,142717,142719,142721,142723,142725,142727,142730,142733],{"class":94,"line":1290},[92,142711,142712],{"class":151},"  animation",[92,142714,51417],{"class":102},[92,142716,135213],{"class":151},[92,142718,25099],{"class":151},[92,142720,798],{"class":98},[92,142722,78660],{"class":151},[92,142724,4072],{"class":151},[92,142726,798],{"class":98},[92,142728,142729],{"class":151}," infinite",[92,142731,142732],{"class":151}," alternate",[92,142734,1269],{"class":102},[92,142736,142737],{"class":94,"line":1296},[92,142738,1544],{"class":102},[38,142740,142630],{},[83,142742,142745],{"className":142743,"code":142744,"language":5167},[5165],"\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",[89,142746,142744],{"__ignoreMap":10},[21978,142748,142750],{"id":142749},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[38,142752,142753],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1441,142755],{"style":126383,"src":142756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[83,142758,142759],{"className":126527,"code":142633,"language":126529,"meta":10,"style":10},[89,142760,142761,142765,142773,142791,142811,142815,142819,142825,142849],{"__ignoreMap":10},[92,142762,142763],{"class":94,"line":95},[92,142764,142640],{"class":161},[92,142766,142767,142769,142771],{"class":94,"line":11},[92,142768,142645],{"class":98},[92,142770,142648],{"class":5196},[92,142772,15552],{"class":102},[92,142774,142775,142777,142779,142781,142783,142785,142787,142789],{"class":94,"line":1158},[92,142776,142655],{"class":1942},[92,142778,79787],{"class":102},[92,142780,48115],{"class":151},[92,142782,51417],{"class":102},[92,142784,142664],{"class":151},[92,142786,103],{"class":102},[92,142788,294],{"class":151},[92,142790,142671],{"class":102},[92,142792,142793,142795,142797,142799,142801,142803,142805,142807,142809],{"class":94,"line":1173},[92,142794,142676],{"class":1942},[92,142796,79787],{"class":102},[92,142798,48115],{"class":151},[92,142800,51417],{"class":102},[92,142802,142664],{"class":151},[92,142804,103],{"class":102},[92,142806,414],{"class":151},[92,142808,51472],{"class":98},[92,142810,142671],{"class":102},[92,142812,142813],{"class":94,"line":1179},[92,142814,1544],{"class":102},[92,142816,142817],{"class":94,"line":1193},[92,142818,142701],{"class":161},[92,142820,142821,142823],{"class":94,"line":1199},[92,142822,51591],{"class":51280},[92,142824,15552],{"class":102},[92,142826,142827,142829,142831,142833,142835,142837,142839,142841,142843,142845,142847],{"class":94,"line":1290},[92,142828,142712],{"class":151},[92,142830,51417],{"class":102},[92,142832,135213],{"class":151},[92,142834,25099],{"class":151},[92,142836,798],{"class":98},[92,142838,78660],{"class":151},[92,142840,4072],{"class":151},[92,142842,798],{"class":98},[92,142844,142729],{"class":151},[92,142846,142732],{"class":151},[92,142848,1269],{"class":102},[92,142850,142851],{"class":94,"line":1296},[92,142852,1544],{"class":102},[38,142854,142855],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[63,142857,142859],{"id":142858},"_1823-知识点回顾","18.2.3 知识点回顾",[83,142861,142862],{"className":126527,"code":128696,"language":126529,"meta":10,"style":10},[89,142863,142864,142870,142880],{"__ignoreMap":10},[92,142865,142866,142868],{"class":94,"line":95},[92,142867,51591],{"class":51280},[92,142869,15552],{"class":102},[92,142871,142872,142874,142876,142878],{"class":94,"line":11},[92,142873,128709],{"class":151},[92,142875,51417],{"class":102},[92,142877,61716],{"class":151},[92,142879,1269],{"class":102},[92,142881,142882],{"class":94,"line":1158},[92,142883,1544],{"class":102},[33,142885,142887],{"id":142886},"_183-3d-转换","18.3 3D 转换",[38,142889,142890],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[63,142892,142894],{"id":142893},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1441,142896],{"style":126383,"src":142897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[63,142899,142901],{"id":142900},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1441,142903],{"style":126383,"src":142904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[38,142906,142907],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[38,142909,142910],{},"translate3d的效果需要搭配透视perspective来使用",[1441,142912],{"style":126383,"src":142913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[63,142915,142917],{"id":142916},"_1833-透视-perspective","18.3.3 透视 perspective",[1441,142919],{"style":126383,"src":142920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[38,142922,142923],{},"透视写在父盒子上，单位为像素",[63,142925,142927],{"id":142926},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21978,142929,142931],{"id":142930},"_18341-分开解释","18.3.4.1 分开解释",[1441,142933],{"style":126383,"src":142934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1441,142936],{"style":126383,"src":142937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1441,142939],{"style":126383,"src":142940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[38,142942,142943],{},"总结来说就是左手原则",[21978,142945,142947],{"id":142946},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1441,142949],{"style":126383,"src":142950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[63,142952,142954],{"id":142953},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1441,142956],{"style":126383,"src":142957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1441,142959],{"style":126383,"src":142960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[83,142962,142964],{"className":126527,"code":142963,"language":126529,"meta":10,"style":10},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[89,142965,142966,142972,142985,143002],{"__ignoreMap":10},[92,142967,142968,142970],{"class":94,"line":95},[92,142969,51591],{"class":51280},[92,142971,15552],{"class":102},[92,142973,142974,142977,142979,142981,142983],{"class":94,"line":11},[92,142975,142976],{"class":151},"  perspective",[92,142978,51417],{"class":102},[92,142980,65054],{"class":151},[92,142982,51472],{"class":98},[92,142984,1269],{"class":102},[92,142986,142987,142989,142991,142994,142996,142998,143000],{"class":94,"line":1158},[92,142988,136511],{"class":151},[92,142990,51417],{"class":102},[92,142992,142993],{"class":151},"rotateX",[92,142995,103],{"class":102},[92,142997,632],{"class":151},[92,142999,142354],{"class":98},[92,143001,2698],{"class":102},[92,143003,143004],{"class":94,"line":1173},[92,143005,1544],{"class":102},[63,143007,143009],{"id":143008},"_1836-案例","18.3.6 案例",[21978,143011,143013],{"id":143012},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1441,143015],{"style":126383,"src":143016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1441,143018],{"style":126383,"src":143019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1441,143021],{"style":126383,"src":143022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[83,143024,143026],{"className":126527,"code":143025,"language":126529,"meta":10,"style":10},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[89,143027,143028,143033,143039,143051],{"__ignoreMap":10},[92,143029,143030],{"class":94,"line":95},[92,143031,143032],{"class":161},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[92,143034,143035,143037],{"class":94,"line":11},[92,143036,133524],{"class":1942},[92,143038,15552],{"class":102},[92,143040,143041,143043,143045,143047,143049],{"class":94,"line":1158},[92,143042,142976],{"class":151},[92,143044,51417],{"class":102},[92,143046,65054],{"class":151},[92,143048,51472],{"class":98},[92,143050,1269],{"class":102},[92,143052,143053],{"class":94,"line":1173},[92,143054,1544],{"class":102},[21978,143056,143058],{"id":143057},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1441,143060],{"style":126383,"src":143061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[83,143063,143064],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[89,143065,143066,143070,143084,143088],{"__ignoreMap":10},[92,143067,143068],{"class":94,"line":95},[92,143069,130638],{"class":161},[92,143071,143072,143074,143076,143078,143080,143082],{"class":94,"line":11},[92,143073,1013],{"class":102},[92,143075,51591],{"class":51280},[92,143077,53466],{"class":1942},[92,143079,148],{"class":102},[92,143081,130651],{"class":207},[92,143083,51287],{"class":102},[92,143085,143086],{"class":94,"line":1158},[92,143087,130658],{"class":102},[92,143089,143090,143092,143094],{"class":94,"line":1173},[92,143091,51765],{"class":102},[92,143093,51591],{"class":51280},[92,143095,51287],{"class":102},[21978,143097,143099],{"id":143098},"_18363-旋转木马","18.3.6.3 旋转木马",[1441,143101],{"style":126383,"src":143102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[83,143104,143105],{"className":126527,"code":142330,"language":126529,"meta":10,"style":10},[89,143106,143107,143113,143129],{"__ignoreMap":10},[92,143108,143109,143111],{"class":94,"line":95},[92,143110,51591],{"class":51280},[92,143112,15552],{"class":102},[92,143114,143115,143117,143119,143121,143123,143125,143127],{"class":94,"line":11},[92,143116,136511],{"class":151},[92,143118,51417],{"class":102},[92,143120,142347],{"class":151},[92,143122,103],{"class":102},[92,143124,632],{"class":151},[92,143126,142354],{"class":98},[92,143128,2698],{"class":102},[92,143130,143131],{"class":94,"line":1158},[92,143132,1544],{"class":102},[5106,143134,143135],{},"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":10,"searchDepth":11,"depth":11,"links":143137},[143138,143145],{"id":142233,"depth":11,"text":142234,"children":143139},[143140,143141,143142,143143,143144],{"id":142257,"depth":1158,"text":142258},{"id":142312,"depth":1158,"text":142313},{"id":142437,"depth":1158,"text":142438},{"id":142540,"depth":1158,"text":142541},{"id":142858,"depth":1158,"text":142859},{"id":142886,"depth":11,"text":142887,"children":143146},[143147,143148,143149,143150,143151,143152],{"id":142893,"depth":1158,"text":142894},{"id":142900,"depth":1158,"text":142901},{"id":142916,"depth":1158,"text":142917},{"id":142926,"depth":1158,"text":142927},{"id":142953,"depth":1158,"text":142954},{"id":143008,"depth":1158,"text":143009},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142225,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143159,"title":143160,"body":143161,"description":13,"extension":14,"meta":143364,"navigation":17,"path":143365,"seo":143366,"stem":143367,"__hash__":143368},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143162,"toc":143353},[143163,143166,143170,143173,143176,143180,143183,143186,143189,143193,143196,143200,143203,143207,143210,143214,143228,143232,143257,143260,143263,143280,143284,143288,143291,143294,143298,143301,143304,143322,143326,143329,143343,143347,143350],[29,143164,143160],{"id":143165},"_19-移动端基础-前缀现状与视口",[33,143167,143169],{"id":143168},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1441,143171],{"style":126383,"src":143172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[38,143174,143175],{},"意思就是加个前缀，增加兼容性",[33,143177,143179],{"id":143178},"_192-移动端现状认识","19.2 移动端现状认识",[1441,143181],{"style":126383,"src":143182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[38,143184,143185],{},"调试方法：",[1441,143187],{"style":126383,"src":143188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[33,143190,143192],{"id":143191},"_193-视口","19.3 视口",[38,143194,143195],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[63,143197,143199],{"id":143198},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1441,143201],{"style":126383,"src":143202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[63,143204,143206],{"id":143205},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1441,143208],{"style":126383,"src":143209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[63,143211,143213],{"id":143212},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1110,143215,143216,143219,143222,143225],{},[49,143217,143218],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[49,143220,143221],{},"理想视口，对设备来讲，是最理想的视口尺寸",[49,143223,143224],{},"需要手动添写meta视口标签通知浏览器操作",[49,143226,143227],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[63,143229,143231],{"id":143230},"_1934-meta视口标签","19.3.4 meta视口标签",[83,143233,143235],{"className":127274,"code":143234,"language":127276,"meta":10,"style":10},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[89,143236,143237],{"__ignoreMap":10},[92,143238,143239,143241,143243,143245,143247,143249,143251,143253,143255],{"class":94,"line":95},[92,143240,1013],{"class":102},[92,143242,51324],{"class":51280},[92,143244,14900],{"class":1942},[92,143246,148],{"class":102},[92,143248,51371],{"class":207},[92,143250,51351],{"class":1942},[92,143252,148],{"class":102},[92,143254,51378],{"class":207},[92,143256,51287],{"class":102},[1441,143258],{"style":126383,"src":143259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[38,143261,143262],{},"标准视口设置：",[46,143264,143265,143268,143271,143274,143277],{},[49,143266,143267],{},"视口宽度和设备保持一致",[49,143269,143270],{},"视口的默认缩放比例1.0",[49,143272,143273],{},"不允许用户自行缩放",[49,143275,143276],{},"最大允许的缩放比例1.0",[49,143278,143279],{},"最小允许的缩放比例1.0",[63,143281,143283],{"id":143282},"_1935-二倍图","19.3.5 二倍图",[21978,143285,143287],{"id":143286},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1441,143289],{"style":126383,"src":143290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1441,143292],{"style":126383,"src":143293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21978,143295,143297],{"id":143296},"_19352-多倍图","19.3.5.2 多倍图",[1441,143299],{"style":126383,"src":143300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[38,143302,143303],{},"二倍图法，代码如下：",[83,143305,143307],{"className":126527,"code":143306,"language":126529,"meta":10,"style":10},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[89,143308,143309,143314],{"__ignoreMap":10},[92,143310,143311],{"class":94,"line":95},[92,143312,143313],{"class":161},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[92,143315,143316,143319],{"class":94,"line":11},[92,143317,143318],{"class":51280},"background-size",[92,143320,143321],{"class":102},": 50% 50%;\n",[21978,143323,143325],{"id":143324},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1441,143327],{"style":126383,"src":143328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[46,143330,143331,143334,143337,143340],{},[49,143332,143333],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[49,143335,143336],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[49,143338,143339],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[49,143341,143342],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21978,143344,143346],{"id":143345},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1441,143348],{"style":126383,"src":143349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5106,143351,143352],{},"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":10,"searchDepth":11,"depth":11,"links":143354},[143355,143356,143357],{"id":143168,"depth":11,"text":143169},{"id":143178,"depth":11,"text":143179},{"id":143191,"depth":11,"text":143192,"children":143358},[143359,143360,143361,143362,143363],{"id":143198,"depth":1158,"text":143199},{"id":143205,"depth":1158,"text":143206},{"id":143212,"depth":1158,"text":143213},{"id":143230,"depth":1158,"text":143231},{"id":143282,"depth":1158,"text":143283},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143160,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143370,"title":143371,"body":143372,"description":13,"extension":14,"meta":144249,"navigation":17,"path":144250,"seo":144251,"stem":144252,"__hash__":144253},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143373,"toc":144233},[143374,143377,143381,143388,143391,143398,143401,143406,143409,143413,143417,143424,143427,143430,143434,143437,143440,143443,143446,143449,143453,143456,143460,143462,143465,143468,143471,143474,143476,143479,143481,143511,143513,143543,143547,143550,143554,143557,143574,143577,143580,143656,143658,143661,143664,143667,143670,143672,143675,143678,143682,143704,143707,143710,143714,143717,143723,143726,143730,143733,143736,143740,143743,143746,143749,143753,143756,143759,143762,143765,143769,143772,143776,143783,143786,143789,143792,143795,143805,143808,143811,143818,143821,143825,143828,143831,143835,143838,143841,143844,143889,143892,143895,143898,143900,144029,144031,144069,144072,144075,144077,144195,144197,144231],[29,143375,143371],{"id":143376},"_20-移动端布局实战上篇",[33,143378,143380],{"id":143379},"_201-移动端主流方案","20.1 移动端主流方案",[46,143382,143383],{},[49,143384,143385],{},[252,143386,143387],{},"单独移动端页面（主流）",[1441,143389],{"style":126383,"src":143390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[46,143392,143393],{"start":11},[49,143394,143395],{},[252,143396,143397],{},"响应式兼容PC移动端",[1441,143399],{"style":126383,"src":143400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[46,143402,143403],{"start":1158},[49,143404,143405],{},"两种页面选型布局方式",[1441,143407],{"style":126383,"src":143408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[33,143410,143412],{"id":143411},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[63,143414,143416],{"id":143415},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[38,143418,143419,143420],{},"官网地址： ",[341,143421,143422],{"href":143422,"rel":143423},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23845],[1441,143425],{"style":126383,"src":143426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1441,143428],{"style":126383,"src":143429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[63,143431,143433],{"id":143432},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1441,143435],{"style":126383,"src":143436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1441,143438],{"style":126383,"src":143439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[38,143441,143442],{},"去除高亮：",[38,143444,143445],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[38,143447,143448],{},"-webkit- tap-highlight-color: transparent;",[33,143450,143452],{"id":143451},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1441,143454],{"style":126383,"src":143455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[33,143457,143459],{"id":143458},"_204-流式布局案例","20.4 流式布局案例",[38,143461,132],{},[38,143463,143464],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[38,143466,143467],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[38,143469,143470],{},"图片格式：",[1441,143472],{"style":126383,"src":143473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[38,143475,135570],{},[1441,143477],{"style":126383,"src":143478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[38,143480,139897],{},[83,143482,143483],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,143484,143485],{"__ignoreMap":10},[92,143486,143487,143489,143491,143493,143495,143497,143499,143501,143503,143505,143507,143509],{"class":94,"line":95},[92,143488,1013],{"class":102},[92,143490,1441],{"class":51280},[92,143492,55219],{"class":1942},[92,143494,148],{"class":102},[92,143496,134044],{"class":207},[92,143498,55227],{"class":1942},[92,143500,148],{"class":102},[92,143502,134051],{"class":207},[92,143504,134054],{"class":1942},[92,143506,148],{"class":102},[92,143508,134059],{"class":207},[92,143510,51287],{"class":102},[38,143512,139986],{},[83,143514,143515],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[89,143516,143517],{"__ignoreMap":10},[92,143518,143519,143521,143523,143525,143527,143529,143531,143533,143535,143537,143539,143541],{"class":94,"line":95},[92,143520,1013],{"class":102},[92,143522,1441],{"class":51280},[92,143524,55219],{"class":1942},[92,143526,148],{"class":102},[92,143528,134044],{"class":207},[92,143530,55227],{"class":1942},[92,143532,148],{"class":102},[92,143534,134051],{"class":207},[92,143536,134054],{"class":1942},[92,143538,148],{"class":102},[92,143540,134059],{"class":207},[92,143542,51287],{"class":102},[33,143544,143546],{"id":143545},"_205-flex布局","20.5 flex布局",[1441,143548],{"style":126383,"src":143549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[63,143551,143553],{"id":143552},"_2051-布局原理","20.5.1 布局原理",[38,143555,143556],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1110,143558,143559,143562,143565,143568,143571],{},[49,143560,143561],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[49,143563,143564],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[49,143566,143567],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[49,143569,143570],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[49,143572,143573],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[38,143575,143576],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[38,143578,143579],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[83,143581,143583],{"className":126527,"code":143582,"language":126529,"meta":10,"style":10},"\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",[89,143584,143585,143590,143597,143607,143619,143630,143641,143652],{"__ignoreMap":10},[92,143586,143587],{"class":94,"line":95},[92,143588,143589],{"class":161},"\u002F* Flex 弹性布局 *\u002F\n",[92,143591,143592,143595],{"class":94,"line":11},[92,143593,143594],{"class":1942},".container",[92,143596,15552],{"class":102},[92,143598,143599,143601,143603,143605],{"class":94,"line":1158},[92,143600,128143],{"class":151},[92,143602,51417],{"class":102},[92,143604,51457],{"class":151},[92,143606,1269],{"class":102},[92,143608,143609,143612,143614,143617],{"class":94,"line":1173},[92,143610,143611],{"class":151},"  flex-direction",[92,143613,51417],{"class":102},[92,143615,143616],{"class":151},"row",[92,143618,1269],{"class":102},[92,143620,143621,143624,143626,143628],{"class":94,"line":1179},[92,143622,143623],{"class":151},"  justify-content",[92,143625,51417],{"class":102},[92,143627,51648],{"class":151},[92,143629,1269],{"class":102},[92,143631,143632,143635,143637,143639],{"class":94,"line":1193},[92,143633,143634],{"class":151},"  align-items",[92,143636,51417],{"class":102},[92,143638,51572],{"class":151},[92,143640,1269],{"class":102},[92,143642,143643,143646,143648,143650],{"class":94,"line":1199},[92,143644,143645],{"class":151},"  flex-wrap",[92,143647,51417],{"class":102},[92,143649,78590],{"class":151},[92,143651,1269],{"class":102},[92,143653,143654],{"class":94,"line":1290},[92,143655,1544],{"class":102},[38,143657,70433],{},[38,143659,143660],{},".form-item .male-label {",[38,143662,143663],{},"   margin-right: 20px;",[38,143665,143666],{},"   display: inline-flex;",[38,143668,143669],{},"   align-items: center;",[38,143671,1049],{},[1441,143673],{"style":126383,"src":143674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1441,143676],{"style":126383,"src":143677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[63,143679,143681],{"id":143680},"_2052-常见父项属性","20.5.2 常见父项属性",[46,143683,143684,143687,143690,143693,143696,143699,143702],{},[49,143685,143686],{},"flex-direction：设置主轴的方向",[49,143688,143689],{},"justify-content：设置主轴上的子元素排列方式",[49,143691,143692],{},"flex-wrap：设置子元素是否换行",[49,143694,143695],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[49,143697,143698],{},"align-items：设置侧轴上的子元素排列方式（单行）",[49,143700,143701],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[49,143703,143686],{},[1441,143705],{"style":126383,"src":143706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1441,143708],{"style":126383,"src":143709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[46,143711,143712],{"start":11},[49,143713,143689],{},[1441,143715],{"style":126383,"src":143716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[38,143718,143719,143722],{},[89,143720,143721],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[38,143724,143725],{},"跟着主轴走",[46,143727,143728],{"start":1158},[49,143729,143692],{},[1441,143731],{"style":126383,"src":143732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[38,143734,143735],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[46,143737,143738],{"start":1173},[49,143739,143695],{},[1441,143741],{"style":126383,"src":143742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[38,143744,143745],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[38,143747,143748],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[46,143750,143751],{"start":1179},[49,143752,143698],{},[1441,143754],{"style":126383,"src":143755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[38,143757,143758],{},"align-items与align-content之间的区别：",[38,143760,143761],{},"单找items，多找content",[1441,143763],{"style":126383,"src":143764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[46,143766,143767],{"start":1193},[49,143768,143701],{},[1441,143770],{"style":126383,"src":143771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[63,143773,143775],{"id":143774},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[46,143777,143778],{},[49,143779,143780],{},[252,143781,143782],{},"flex 属性",[38,143784,143785],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1441,143787],{"style":126383,"src":143788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[38,143790,143791],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[38,143793,143794],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[46,143796,143797],{"start":11},[49,143798,143799,13775,143802],{},[252,143800,143801],{},"align-self",[252,143803,143804],{},"控制子项自己在侧轴上的排列方式",[1441,143806],{"style":126383,"src":143807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[38,143809,143810],{},"单个子盒子在父盒子侧轴上的排列方式",[46,143812,143813],{"start":1158},[49,143814,143815,143817],{},[252,143816,95277],{}," 属性定义项目的排列顺序",[1441,143819],{"style":126383,"src":143820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[63,143822,143824],{"id":143823},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1441,143826],{"style":126383,"src":143827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[38,143829,143830],{},"必须要添加浏览器的私有前缀",[63,143832,143834],{"id":143833},"_2055-携程网首页案例","20.5.5 携程网首页案例",[38,143836,143837],{},"学到最重要的知识：",[38,143839,143840],{},"flex处理这样的布局思路",[1441,143842],{"style":126383,"src":143843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[83,143845,143847],{"className":126527,"code":143846,"language":126529,"meta":10,"style":10},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[89,143848,143849,143855,143865,143875,143885],{"__ignoreMap":10},[92,143850,143851,143853],{"class":94,"line":95},[92,143852,143594],{"class":1942},[92,143854,15552],{"class":102},[92,143856,143857,143859,143861,143863],{"class":94,"line":11},[92,143858,128143],{"class":151},[92,143860,51417],{"class":102},[92,143862,51457],{"class":151},[92,143864,1269],{"class":102},[92,143866,143867,143869,143871,143873],{"class":94,"line":1158},[92,143868,143623],{"class":151},[92,143870,51417],{"class":102},[92,143872,51572],{"class":151},[92,143874,1269],{"class":102},[92,143876,143877,143879,143881,143883],{"class":94,"line":1173},[92,143878,143634],{"class":151},[92,143880,51417],{"class":102},[92,143882,51572],{"class":151},[92,143884,1269],{"class":102},[92,143886,143887],{"class":94,"line":1179},[92,143888,1544],{"class":102},[38,143890,143891],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[38,143893,143894],{},"使用属性选择器",[1441,143896],{"style":126383,"src":143897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[38,143899,68869],{},[83,143901,143903],{"className":127274,"code":143902,"language":127276,"meta":10,"style":10},"\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",[89,143904,143905,143910,143924,143929,143949,143954,143973,143978,143997,144002,144021],{"__ignoreMap":10},[92,143906,143907],{"class":94,"line":95},[92,143908,143909],{"class":161},"\u003C!-- 携程网移动端案例结构 -->\n",[92,143911,143912,143914,143916,143918,143920,143922],{"class":94,"line":11},[92,143913,1013],{"class":102},[92,143915,51591],{"class":51280},[92,143917,53466],{"class":1942},[92,143919,148],{"class":102},[92,143921,92303],{"class":207},[92,143923,51287],{"class":102},[92,143925,143926],{"class":94,"line":1158},[92,143927,143928],{"class":161},"  \u003C!-- 搜索栏 -->\n",[92,143930,143931,143933,143935,143937,143939,143942,143945,143947],{"class":94,"line":1173},[92,143932,52124],{"class":102},[92,143934,51591],{"class":51280},[92,143936,53466],{"class":1942},[92,143938,148],{"class":102},[92,143940,143941],{"class":207},"\"search-index\"",[92,143943,143944],{"class":102},">...\u003C\u002F",[92,143946,51591],{"class":51280},[92,143948,51287],{"class":102},[92,143950,143951],{"class":94,"line":1179},[92,143952,143953],{"class":161},"  \u003C!-- 焦点图 -->\n",[92,143955,143956,143958,143960,143962,143964,143967,143969,143971],{"class":94,"line":1193},[92,143957,52124],{"class":102},[92,143959,51591],{"class":51280},[92,143961,53466],{"class":1942},[92,143963,148],{"class":102},[92,143965,143966],{"class":207},"\"focus\"",[92,143968,143944],{"class":102},[92,143970,51591],{"class":51280},[92,143972,51287],{"class":102},[92,143974,143975],{"class":94,"line":1199},[92,143976,143977],{"class":161},"  \u003C!-- 主导航 -->\n",[92,143979,143980,143982,143984,143986,143988,143991,143993,143995],{"class":94,"line":1290},[92,143981,52124],{"class":102},[92,143983,51591],{"class":51280},[92,143985,53466],{"class":1942},[92,143987,148],{"class":102},[92,143989,143990],{"class":207},"\"local-nav\"",[92,143992,143944],{"class":102},[92,143994,51591],{"class":51280},[92,143996,51287],{"class":102},[92,143998,143999],{"class":94,"line":1296},[92,144000,144001],{"class":161},"  \u003C!-- 子导航 -->\n",[92,144003,144004,144006,144008,144010,144012,144015,144017,144019],{"class":94,"line":1308},[92,144005,52124],{"class":102},[92,144007,51591],{"class":51280},[92,144009,53466],{"class":1942},[92,144011,148],{"class":102},[92,144013,144014],{"class":207},"\"nav-common\"",[92,144016,143944],{"class":102},[92,144018,51591],{"class":51280},[92,144020,51287],{"class":102},[92,144022,144023,144025,144027],{"class":94,"line":1591},[92,144024,51765],{"class":102},[92,144026,51591],{"class":51280},[92,144028,51287],{"class":102},[38,144030,70433],{},[83,144032,144033],{"className":126527,"code":136979,"language":126529,"meta":10,"style":10},[89,144034,144035,144049,144065],{"__ignoreMap":10},[92,144036,144037,144039,144041,144043,144045,144047],{"class":94,"line":95},[92,144038,53801],{"class":51280},[92,144040,993],{"class":102},[92,144042,103082],{"class":1942},[92,144044,148],{"class":98},[92,144046,62679],{"class":207},[92,144048,136996],{"class":102},[92,144050,144051,144053,144055,144057,144059,144061,144063],{"class":94,"line":11},[92,144052,70876],{"class":151},[92,144054,51417],{"class":102},[92,144056,320],{"class":151},[92,144058,51472],{"class":98},[92,144060,51501],{"class":151},[92,144062,130107],{"class":151},[92,144064,1269],{"class":102},[92,144066,144067],{"class":94,"line":1158},[92,144068,1544],{"class":102},[38,144070,144071],{},"总代码和效果展示：",[1441,144073],{"style":126383,"src":144074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[38,144076,68869],{},[83,144078,144079],{"className":127274,"code":143902,"language":127276,"meta":10,"style":10},[89,144080,144081,144085,144099,144103,144121,144125,144143,144147,144165,144169,144187],{"__ignoreMap":10},[92,144082,144083],{"class":94,"line":95},[92,144084,143909],{"class":161},[92,144086,144087,144089,144091,144093,144095,144097],{"class":94,"line":11},[92,144088,1013],{"class":102},[92,144090,51591],{"class":51280},[92,144092,53466],{"class":1942},[92,144094,148],{"class":102},[92,144096,92303],{"class":207},[92,144098,51287],{"class":102},[92,144100,144101],{"class":94,"line":1158},[92,144102,143928],{"class":161},[92,144104,144105,144107,144109,144111,144113,144115,144117,144119],{"class":94,"line":1173},[92,144106,52124],{"class":102},[92,144108,51591],{"class":51280},[92,144110,53466],{"class":1942},[92,144112,148],{"class":102},[92,144114,143941],{"class":207},[92,144116,143944],{"class":102},[92,144118,51591],{"class":51280},[92,144120,51287],{"class":102},[92,144122,144123],{"class":94,"line":1179},[92,144124,143953],{"class":161},[92,144126,144127,144129,144131,144133,144135,144137,144139,144141],{"class":94,"line":1193},[92,144128,52124],{"class":102},[92,144130,51591],{"class":51280},[92,144132,53466],{"class":1942},[92,144134,148],{"class":102},[92,144136,143966],{"class":207},[92,144138,143944],{"class":102},[92,144140,51591],{"class":51280},[92,144142,51287],{"class":102},[92,144144,144145],{"class":94,"line":1199},[92,144146,143977],{"class":161},[92,144148,144149,144151,144153,144155,144157,144159,144161,144163],{"class":94,"line":1290},[92,144150,52124],{"class":102},[92,144152,51591],{"class":51280},[92,144154,53466],{"class":1942},[92,144156,148],{"class":102},[92,144158,143990],{"class":207},[92,144160,143944],{"class":102},[92,144162,51591],{"class":51280},[92,144164,51287],{"class":102},[92,144166,144167],{"class":94,"line":1296},[92,144168,144001],{"class":161},[92,144170,144171,144173,144175,144177,144179,144181,144183,144185],{"class":94,"line":1308},[92,144172,52124],{"class":102},[92,144174,51591],{"class":51280},[92,144176,53466],{"class":1942},[92,144178,148],{"class":102},[92,144180,144014],{"class":207},[92,144182,143944],{"class":102},[92,144184,51591],{"class":51280},[92,144186,51287],{"class":102},[92,144188,144189,144191,144193],{"class":94,"line":1591},[92,144190,51765],{"class":102},[92,144192,51591],{"class":51280},[92,144194,51287],{"class":102},[38,144196,70433],{},[83,144198,144199],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[89,144200,144201,144205,144219,144223],{"__ignoreMap":10},[92,144202,144203],{"class":94,"line":95},[92,144204,130638],{"class":161},[92,144206,144207,144209,144211,144213,144215,144217],{"class":94,"line":11},[92,144208,1013],{"class":102},[92,144210,51591],{"class":51280},[92,144212,53466],{"class":1942},[92,144214,148],{"class":102},[92,144216,130651],{"class":207},[92,144218,51287],{"class":102},[92,144220,144221],{"class":94,"line":1158},[92,144222,130658],{"class":102},[92,144224,144225,144227,144229],{"class":94,"line":1173},[92,144226,51765],{"class":102},[92,144228,51591],{"class":51280},[92,144230,51287],{"class":102},[5106,144232,137928],{},{"title":10,"searchDepth":11,"depth":11,"links":144234},[144235,144236,144240,144241,144242],{"id":143379,"depth":11,"text":143380},{"id":143411,"depth":11,"text":143412,"children":144237},[144238,144239],{"id":143415,"depth":1158,"text":143416},{"id":143432,"depth":1158,"text":143433},{"id":143451,"depth":11,"text":143452},{"id":143458,"depth":11,"text":143459},{"id":143545,"depth":11,"text":143546,"children":144243},[144244,144245,144246,144247,144248],{"id":143552,"depth":1158,"text":143553},{"id":143680,"depth":1158,"text":143681},{"id":143774,"depth":1158,"text":143775},{"id":143823,"depth":1158,"text":143824},{"id":143833,"depth":1158,"text":143834},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143371,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144255,"title":144256,"body":144257,"description":13,"extension":14,"meta":145484,"navigation":17,"path":145485,"seo":145486,"stem":145487,"__hash__":145488},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144258,"toc":145462},[144259,144262,144266,144270,144273,144276,144280,144285,144288,144291,144294,144297,144300,144357,144360,144365,144368,144371,144375,144386,144390,144393,144396,144403,144408,144412,144415,144421,144424,144428,144431,144438,144441,144444,144451,144454,144461,144464,144467,144474,144477,144480,144482,144499,144503,144506,144509,144512,144516,144519,144522,144525,144528,144531,144534,144536,144539,144542,144604,144607,144717,144724,144730,144733,144736,144740,144743,144747,144752,144755,144762,144765,144771,144776,144779,144782,144785,144788,144791,144794,144797,144800,144856,144858,144884,144888,144891,144894,144897,144905,144908,144911,144915,144971,144974,144978,144984,144995,144998,145003,145006,145009,145015,145018,145021,145024,145027,145030,145033,145036,145039,145064,145070,145073,145076,145079,145082,145085,145088,145093,145096,145099,145102,145110,145113,145120,145123,145126,145128,145152,145154,145157,145160,145163,145166,145169,145172,145175,145209,145212,145215,145249,145256,145259,145262,145265,145268,145271,145274,145281,145284,145287,145290,145293,145300,145303,145306,145313,145316,145319,145323,145326,145329,145332,145335,145338,145341,145344,145347,145349,145373,145375,145399,145403,145414,145417,145420,145423,145426,145429,145432,145435,145438,145441,145444,145447,145450,145453,145456,145459],[29,144260,144256],{"id":144261},"_21-移动端布局实战下篇",[33,144263,144265],{"id":144264},"_211-rem适配布局","21.1 rem适配布局",[63,144267,144269],{"id":144268},"_2111-rem单位","21.1.1 rem单位",[1441,144271],{"style":126383,"src":144272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[38,144274,144275],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[63,144277,144279],{"id":144278},"_2112-媒体查询","21.1.2 媒体查询",[46,144281,144282],{},[49,144283,144284],{},"参数介绍",[1441,144286],{"style":126383,"src":144287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1441,144289],{"style":126383,"src":144290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1441,144292],{"style":126383,"src":144293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1441,144295],{"style":126383,"src":144296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1441,144298],{"style":126383,"src":144299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[83,144301,144303],{"className":126527,"code":144302,"language":126529,"meta":10,"style":10},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[89,144304,144305,144310,144329,144336,144349,144353],{"__ignoreMap":10},[92,144306,144307],{"class":94,"line":95},[92,144308,144309],{"class":161},"\u002F* 媒体查询 *\u002F\n",[92,144311,144312,144315,144317,144320,144322,144325,144327],{"class":94,"line":11},[92,144313,144314],{"class":98},"@media",[92,144316,1637],{"class":102},[92,144318,144319],{"class":151},"max-width",[92,144321,51417],{"class":102},[92,144323,144324],{"class":151},"768",[92,144326,51472],{"class":98},[92,144328,12422],{"class":102},[92,144330,144331,144334],{"class":94,"line":1158},[92,144332,144333],{"class":1942},"  .container",[92,144335,15552],{"class":102},[92,144337,144338,144341,144343,144345,144347],{"class":94,"line":1173},[92,144339,144340],{"class":151},"    width",[92,144342,51417],{"class":102},[92,144344,414],{"class":151},[92,144346,431],{"class":98},[92,144348,1269],{"class":102},[92,144350,144351],{"class":94,"line":1179},[92,144352,127323],{"class":102},[92,144354,144355],{"class":94,"line":1193},[92,144356,1544],{"class":102},[38,144358,144359],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[46,144361,144362],{"start":11},[49,144363,144364],{},"引入资源",[1441,144366],{"style":126383,"src":144367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[38,144369,144370],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[63,144372,144374],{"id":144373},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1110,144376,144377,144380,144383],{},[49,144378,144379],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[49,144381,144382],{},"媒体查询可以根据不同设备宽度来修改样式",[49,144384,144385],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[33,144387,144389],{"id":144388},"_212-less基础","21.2 Less基础",[38,144391,144392],{},"css冗余度较高，不利于复用，没有很好的计算能力",[38,144394,144395],{},"Less可以解决该问题，它是css的扩展语言",[38,144397,144398,144399],{},"Less中文网址： ",[341,144400,144401],{"href":144401,"rel":144402},"http:\u002F\u002Flesscss.cn\u002F",[23845],[38,144404,144405],{},[252,144406,144407],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[63,144409,144411],{"id":144410},"_2121-less安装","21.2.1 less安装",[38,144413,144414],{},"如果使用vscode，则无需进行下方安装步骤",[38,144416,144417],{},[341,144418,144419],{"href":144419,"rel":144420},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23845],[1441,144422],{"style":126383,"src":144423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[63,144425,144427],{"id":144426},"_2122-less使用","21.2.2 less使用",[38,144429,144430],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[46,144432,144433],{},[49,144434,144435],{},[252,144436,144437],{},"Less 变量",[1441,144439],{"style":126383,"src":144440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1441,144442],{"style":126383,"src":144443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[46,144445,144446],{"start":11},[49,144447,144448],{},[252,144449,144450],{},"Less 编译",[1441,144452],{"style":126383,"src":144453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[46,144455,144456],{"start":1158},[49,144457,144458],{},[252,144459,144460],{},"Less 嵌套",[1441,144462],{"style":126383,"src":144463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1441,144465],{"style":126383,"src":144466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[46,144468,144469],{"start":1173},[49,144470,144471],{},[252,144472,144473],{},"Less 运算",[1441,144475],{"style":126383,"src":144476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[38,144478,144479],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[38,144481,132],{},[1110,144483,144484,144487,144490,144493,144496],{},[49,144485,144486],{},"乘号（*）和除号（\u002F）的写法",[49,144488,144489],{},"运算符中间左右有个空格隔开 1px + 5",[49,144491,144492],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[49,144494,144495],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[49,144497,144498],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[33,144500,144502],{"id":144501},"_213-rem-适配方案","21.3 rem 适配方案",[38,144504,144505],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[38,144507,144508],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1441,144510],{"style":126383,"src":144511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[63,144513,144515],{"id":144514},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[38,144517,144518],{},"rem + 媒体查询 + less 技术",[1441,144520],{"style":126383,"src":144521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[38,144523,144524],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[38,144526,144527],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1441,144529],{"style":126383,"src":144530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[38,144532,144533],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[38,144535,14613],{},[1441,144537],{"style":126383,"src":144538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[38,144540,144541],{},"index.html:",[83,144543,144545],{"className":126527,"code":144544,"language":126529,"meta":10,"style":10},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[89,144546,144547,144552,144558,144574,144578,144584,144600],{"__ignoreMap":10},[92,144548,144549],{"class":94,"line":95},[92,144550,144551],{"class":161},"\u002F* rem 适配方案 *\u002F\n",[92,144553,144554,144556],{"class":94,"line":11},[92,144555,50615],{"class":51280},[92,144557,15552],{"class":102},[92,144559,144560,144562,144564,144567,144569,144571],{"class":94,"line":1158},[92,144561,70606],{"class":151},[92,144563,51417],{"class":102},[92,144565,144566],{"class":151},"62.5",[92,144568,431],{"class":98},[92,144570,130390],{"class":102},[92,144572,144573],{"class":161},"\u002F* 1rem = 10px *\u002F\n",[92,144575,144576],{"class":94,"line":1173},[92,144577,1544],{"class":102},[92,144579,144580,144582],{"class":94,"line":1179},[92,144581,130375],{"class":1942},[92,144583,15552],{"class":102},[92,144585,144586,144588,144590,144592,144595,144597],{"class":94,"line":1193},[92,144587,70548],{"class":151},[92,144589,51417],{"class":102},[92,144591,549],{"class":151},[92,144593,144594],{"class":98},"rem",[92,144596,130390],{"class":102},[92,144598,144599],{"class":161},"\u002F* 100px *\u002F\n",[92,144601,144602],{"class":94,"line":1199},[92,144603,1544],{"class":102},[38,144605,144606],{},"common.less",[83,144608,144610],{"className":126527,"code":144609,"language":126529,"meta":10,"style":10},"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",[89,144611,144612,144618,144633,144637,144643,144657,144661,144665,144669,144675,144689,144693,144699,144713],{"__ignoreMap":10},[92,144613,144614,144616],{"class":94,"line":95},[92,144615,50615],{"class":51280},[92,144617,15552],{"class":102},[92,144619,144620,144622,144624,144626,144628,144630],{"class":94,"line":11},[92,144621,70606],{"class":151},[92,144623,51417],{"class":102},[92,144625,144566],{"class":151},[92,144627,431],{"class":98},[92,144629,26048],{"class":102},[92,144631,144632],{"class":161},"\u002F* 10px *\u002F\n",[92,144634,144635],{"class":94,"line":1158},[92,144636,1544],{"class":102},[92,144638,144639,144641],{"class":94,"line":1173},[92,144640,51591],{"class":51280},[92,144642,15552],{"class":102},[92,144644,144645,144647,144649,144651,144653,144655],{"class":94,"line":1179},[92,144646,70548],{"class":151},[92,144648,51417],{"class":102},[92,144650,549],{"class":151},[92,144652,144594],{"class":98},[92,144654,26048],{"class":102},[92,144656,144599],{"class":161},[92,144658,144659],{"class":94,"line":1193},[92,144660,1544],{"class":102},[92,144662,144663],{"class":94,"line":1199},[92,144664,135988],{"class":102},[92,144666,144667],{"class":94,"line":1290},[92,144668,144551],{"class":161},[92,144670,144671,144673],{"class":94,"line":1296},[92,144672,50615],{"class":51280},[92,144674,15552],{"class":102},[92,144676,144677,144679,144681,144683,144685,144687],{"class":94,"line":1308},[92,144678,70606],{"class":151},[92,144680,51417],{"class":102},[92,144682,144566],{"class":151},[92,144684,431],{"class":98},[92,144686,130390],{"class":102},[92,144688,144573],{"class":161},[92,144690,144691],{"class":94,"line":1591},[92,144692,1544],{"class":102},[92,144694,144695,144697],{"class":94,"line":1596},[92,144696,130375],{"class":1942},[92,144698,15552],{"class":102},[92,144700,144701,144703,144705,144707,144709,144711],{"class":94,"line":1602},[92,144702,70548],{"class":151},[92,144704,51417],{"class":102},[92,144706,549],{"class":151},[92,144708,144594],{"class":98},[92,144710,130390],{"class":102},[92,144712,144599],{"class":161},[92,144714,144715],{"class":94,"line":1607},[92,144716,1544],{"class":102},[38,144718,144719,144720,144723],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23533,144721,144722],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[83,144725,144728],{"className":144726,"code":144727,"language":5167},[5165],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[89,144729,144727],{"__ignoreMap":10},[38,144731,144732],{},"less保存时会自动变成.css文件",[38,144734,144735],{},"好好搞懂上述代码写法",[63,144737,144739],{"id":144738},"_2132-样式导入样式","21.3.2 样式导入样式",[1441,144741],{"style":126383,"src":144742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[63,144744,144746],{"id":144745},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[46,144748,144749],{},[49,144750,144751],{},"准备工作",[1441,144753],{"style":126383,"src":144754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[38,144756,144757,144758],{},"github地址：",[341,144759,144760],{"href":144760,"rel":144761},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23845],[38,144763,144764],{},"下载之后，将index.js文件拖到项目中就可以了",[38,144766,144767,144768],{},"js文件引入到index.html中使用的是",[89,144769,144770],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[46,144772,144773],{"start":11},[49,144774,144775],{},"vscode插件",[1441,144777],{"style":126383,"src":144778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[38,144780,144781],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[38,144783,144784],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1441,144786],{"style":126383,"src":144787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[38,144789,144790],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1441,144792],{"style":126383,"src":144793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[38,144795,144796],{},"修改成75就可以，alt+z为快捷键",[38,144798,144799],{},"index.css：",[83,144801,144802],{"className":126527,"code":144544,"language":126529,"meta":10,"style":10},[89,144803,144804,144808,144814,144828,144832,144838,144852],{"__ignoreMap":10},[92,144805,144806],{"class":94,"line":95},[92,144807,144551],{"class":161},[92,144809,144810,144812],{"class":94,"line":11},[92,144811,50615],{"class":51280},[92,144813,15552],{"class":102},[92,144815,144816,144818,144820,144822,144824,144826],{"class":94,"line":1158},[92,144817,70606],{"class":151},[92,144819,51417],{"class":102},[92,144821,144566],{"class":151},[92,144823,431],{"class":98},[92,144825,130390],{"class":102},[92,144827,144573],{"class":161},[92,144829,144830],{"class":94,"line":1173},[92,144831,1544],{"class":102},[92,144833,144834,144836],{"class":94,"line":1179},[92,144835,130375],{"class":1942},[92,144837,15552],{"class":102},[92,144839,144840,144842,144844,144846,144848,144850],{"class":94,"line":1193},[92,144841,70548],{"class":151},[92,144843,51417],{"class":102},[92,144845,549],{"class":151},[92,144847,144594],{"class":98},[92,144849,130390],{"class":102},[92,144851,144599],{"class":161},[92,144853,144854],{"class":94,"line":1199},[92,144855,1544],{"class":102},[38,144857,144541],{},[83,144859,144860],{"className":126527,"code":126931,"language":126529,"meta":10,"style":10},[89,144861,144862,144868,144880],{"__ignoreMap":10},[92,144863,144864,144866],{"class":94,"line":95},[92,144865,51780],{"class":51280},[92,144867,15552],{"class":102},[92,144869,144870,144872,144874,144876,144878],{"class":94,"line":11},[92,144871,70606],{"class":151},[92,144873,51417],{"class":102},[92,144875,704],{"class":151},[92,144877,51472],{"class":98},[92,144879,1269],{"class":102},[92,144881,144882],{"class":94,"line":1158},[92,144883,1544],{"class":102},[33,144885,144887],{"id":144886},"_214-响应式开发","21.4 响应式开发",[38,144889,144890],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1441,144892],{"style":126383,"src":144893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[38,144895,144896],{},"做法：",[1110,144898,144899,144902],{},[49,144900,144901],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[49,144903,144904],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1441,144906],{"style":126383,"src":144907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[38,144909,144910],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[63,144912,144914],{"id":144913},"_2141-简单代码示范","21.4.1 简单代码示范",[83,144916,144917],{"className":126527,"code":144544,"language":126529,"meta":10,"style":10},[89,144918,144919,144923,144929,144943,144947,144953,144967],{"__ignoreMap":10},[92,144920,144921],{"class":94,"line":95},[92,144922,144551],{"class":161},[92,144924,144925,144927],{"class":94,"line":11},[92,144926,50615],{"class":51280},[92,144928,15552],{"class":102},[92,144930,144931,144933,144935,144937,144939,144941],{"class":94,"line":1158},[92,144932,70606],{"class":151},[92,144934,51417],{"class":102},[92,144936,144566],{"class":151},[92,144938,431],{"class":98},[92,144940,130390],{"class":102},[92,144942,144573],{"class":161},[92,144944,144945],{"class":94,"line":1173},[92,144946,1544],{"class":102},[92,144948,144949,144951],{"class":94,"line":1179},[92,144950,130375],{"class":1942},[92,144952,15552],{"class":102},[92,144954,144955,144957,144959,144961,144963,144965],{"class":94,"line":1193},[92,144956,70548],{"class":151},[92,144958,51417],{"class":102},[92,144960,549],{"class":151},[92,144962,144594],{"class":98},[92,144964,130390],{"class":102},[92,144966,144599],{"class":161},[92,144968,144969],{"class":94,"line":1199},[92,144970,1544],{"class":102},[38,144972,144973],{},"父盒子一般命名为container",[63,144975,144977],{"id":144976},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[38,144979,144980,144981],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[252,144982,144983],{},"使得 Web 开发更加快捷",[1110,144985,144986],{},[49,144987,144988,144989],{},"官网：",[252,144990,144991],{},[341,144992,144993],{"href":144993,"rel":144994},"http:\u002F\u002Fgetbootstrap.com\u002F",[23845],[38,144996,144997],{},"可以直接去官网拿现成的东西",[46,144999,145000],{},[49,145001,145002],{},"Bootstrap的使用",[38,145004,145005],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[38,145007,145008],{},"Bootstrap 使用四步曲：",[38,145010,145011,145014],{},[252,145012,145013],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1441,145016],{"style":126383,"src":145017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[38,145019,145020],{},"打开Bootstrap官网，然后下载",[1441,145022],{"style":126383,"src":145023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1441,145025],{"style":126383,"src":145026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[38,145028,145029],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[38,145031,145032],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[38,145034,145035],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1441,145037],{"style":126383,"src":145038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[83,145040,145042],{"className":126527,"code":145041,"language":126529,"meta":10,"style":10},".center {\n  color: red;\n}\n",[89,145043,145044,145050,145060],{"__ignoreMap":10},[92,145045,145046,145048],{"class":94,"line":95},[92,145047,126818],{"class":1942},[92,145049,15552],{"class":102},[92,145051,145052,145054,145056,145058],{"class":94,"line":11},[92,145053,70885],{"class":151},[92,145055,51417],{"class":102},[92,145057,57401],{"class":151},[92,145059,1269],{"class":102},[92,145061,145062],{"class":94,"line":1158},[92,145063,1544],{"class":102},[38,145065,145066,145069],{},[89,145067,145068],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1441,145071],{"style":126383,"src":145072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1441,145074],{"style":126383,"src":145075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1441,145077],{"style":126383,"src":145078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[38,145080,145081],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1441,145083],{"style":126383,"src":145084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[38,145086,145087],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[46,145089,145090],{"start":11},[49,145091,145092],{},"布局容器",[1441,145094],{"style":126383,"src":145095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[38,145097,145098],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[38,145100,145101],{},"container-fluid用于移动式布局比较方便",[46,145103,145104],{"start":1158},[49,145105,145106,145107],{},"bootstrap ",[252,145108,145109],{},"栅格系统原理",[1441,145111],{"style":126383,"src":145112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[46,145114,145115],{"start":1173},[49,145116,145117],{},[252,145118,145119],{},"栅格选项参数",[1441,145121],{"style":126383,"src":145122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[38,145124,145125],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[38,145127,14613],{},[83,145129,145130],{"className":126527,"code":145041,"language":126529,"meta":10,"style":10},[89,145131,145132,145138,145148],{"__ignoreMap":10},[92,145133,145134,145136],{"class":94,"line":95},[92,145135,126818],{"class":1942},[92,145137,15552],{"class":102},[92,145139,145140,145142,145144,145146],{"class":94,"line":11},[92,145141,70885],{"class":151},[92,145143,51417],{"class":102},[92,145145,57401],{"class":151},[92,145147,1269],{"class":102},[92,145149,145150],{"class":94,"line":1158},[92,145151,1544],{"class":102},[38,145153,135570],{},[1441,145155],{"style":126383,"src":145156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[38,145158,145159],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[38,145161,145162],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[38,145164,145165],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[38,145167,145168],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[38,145170,145171],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[38,145173,145174],{},"汇总展示说明：",[83,145176,145177],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[89,145178,145179,145183,145197,145201],{"__ignoreMap":10},[92,145180,145181],{"class":94,"line":95},[92,145182,130638],{"class":161},[92,145184,145185,145187,145189,145191,145193,145195],{"class":94,"line":11},[92,145186,1013],{"class":102},[92,145188,51591],{"class":51280},[92,145190,53466],{"class":1942},[92,145192,148],{"class":102},[92,145194,130651],{"class":207},[92,145196,51287],{"class":102},[92,145198,145199],{"class":94,"line":1158},[92,145200,130658],{"class":102},[92,145202,145203,145205,145207],{"class":94,"line":1173},[92,145204,51765],{"class":102},[92,145206,51591],{"class":51280},[92,145208,51287],{"class":102},[1441,145210],{"style":126383,"src":145211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[38,145213,145214],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[83,145216,145217],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[89,145218,145219,145223,145237,145241],{"__ignoreMap":10},[92,145220,145221],{"class":94,"line":95},[92,145222,130638],{"class":161},[92,145224,145225,145227,145229,145231,145233,145235],{"class":94,"line":11},[92,145226,1013],{"class":102},[92,145228,51591],{"class":51280},[92,145230,53466],{"class":1942},[92,145232,148],{"class":102},[92,145234,130651],{"class":207},[92,145236,51287],{"class":102},[92,145238,145239],{"class":94,"line":1158},[92,145240,130658],{"class":102},[92,145242,145243,145245,145247],{"class":94,"line":1173},[92,145244,51765],{"class":102},[92,145246,51591],{"class":51280},[92,145248,51287],{"class":102},[46,145250,145251],{"start":1179},[49,145252,145253],{},[252,145254,145255],{},"列嵌套",[1441,145257],{"style":126383,"src":145258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[38,145260,145261],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[38,145263,145264],{},"没加row内部这样：",[1441,145266],{"style":126383,"src":145267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[38,145269,145270],{},"加上row之后内部为：",[1441,145272],{"style":126383,"src":145273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[46,145275,145276],{"start":1193},[49,145277,145278],{},[252,145279,145280],{},"列偏移",[1441,145282],{"style":126383,"src":145283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[38,145285,145286],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[38,145288,145289],{},"要加偏移量，即偏移份数",[38,145291,145292],{},"偏移的份数=12-两个盒子的份数",[46,145294,145295],{"start":1199},[49,145296,145297],{},[252,145298,145299],{},"列排序",[1441,145301],{"style":126383,"src":145302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[38,145304,145305],{},"pull拉左；push推右",[46,145307,145308],{"start":1290},[49,145309,145310],{},[252,145311,145312],{},"响应式工具",[1441,145314],{"style":126383,"src":145315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[38,145317,145318],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[63,145320,145322],{"id":145321},"_2143-响应式小项目","21.4.3 响应式小项目",[38,145324,145325],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[38,145327,145328],{},"ul {",[38,145330,145331],{},"list-style: none;",[38,145333,145334],{},"margin:0;",[38,145336,145337],{},"padding:0; }",[1441,145339],{"style":126383,"src":145340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1441,145342],{"style":126383,"src":145343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[38,145345,145346],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[38,145348,68869],{},[83,145350,145351],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,145352,145353,145359,145369],{"__ignoreMap":10},[92,145354,145355,145357],{"class":94,"line":95},[92,145356,130375],{"class":1942},[92,145358,15552],{"class":102},[92,145360,145361,145363,145365,145367],{"class":94,"line":11},[92,145362,131007],{"class":151},[92,145364,51417],{"class":102},[92,145366,23716],{"class":151},[92,145368,1269],{"class":102},[92,145370,145371],{"class":94,"line":1158},[92,145372,1544],{"class":102},[38,145374,70433],{},[83,145376,145377],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[89,145378,145379,145385,145395],{"__ignoreMap":10},[92,145380,145381,145383],{"class":94,"line":95},[92,145382,130375],{"class":1942},[92,145384,15552],{"class":102},[92,145386,145387,145389,145391,145393],{"class":94,"line":11},[92,145388,131007],{"class":151},[92,145390,51417],{"class":102},[92,145392,23716],{"class":151},[92,145394,1269],{"class":102},[92,145396,145397],{"class":94,"line":1158},[92,145398,1544],{"class":102},[33,145400,145402],{"id":145401},"_215-swiper-插件使用","21.5 swiper 插件使用",[1110,145404,145405,145408,145411],{},[49,145406,145407],{},"下载需要的css和js文件html页面中 引入相关文件",[49,145409,145410],{},"官网找到类似案例，复制html结构，css样式 js 语法",[49,145412,145413],{},"根据需求定制修改模块",[1441,145415],{"style":126383,"src":145416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[38,145418,145419],{},"解压后将这两部分放到项目中",[1441,145421],{"style":126383,"src":145422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[38,145424,145425],{},"这个插件可以帮助我们实现轮播图效果",[38,145427,145428],{},"用法：",[1441,145430],{"style":126383,"src":145431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[38,145433,145434],{},"找到自己喜欢的",[1441,145436],{"style":126383,"src":145437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[38,145439,145440],{},"右键，查看网页源代码",[1441,145442],{"style":126383,"src":145443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[38,145445,145446],{},"复制人家的结构内容",[38,145448,145449],{},"然后去看API文档：",[1441,145451],{"style":126383,"src":145452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[38,145454,145455],{},"可以看看如何修改样式",[38,145457,145458],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5106,145460,145461],{},"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":10,"searchDepth":11,"depth":11,"links":145463},[145464,145469,145473,145478,145483],{"id":144264,"depth":11,"text":144265,"children":145465},[145466,145467,145468],{"id":144268,"depth":1158,"text":144269},{"id":144278,"depth":1158,"text":144279},{"id":144373,"depth":1158,"text":144374},{"id":144388,"depth":11,"text":144389,"children":145470},[145471,145472],{"id":144410,"depth":1158,"text":144411},{"id":144426,"depth":1158,"text":144427},{"id":144501,"depth":11,"text":144502,"children":145474},[145475,145476,145477],{"id":144514,"depth":1158,"text":144515},{"id":144738,"depth":1158,"text":144739},{"id":144745,"depth":1158,"text":144746},{"id":144886,"depth":11,"text":144887,"children":145479},[145480,145481,145482],{"id":144913,"depth":1158,"text":144914},{"id":144976,"depth":1158,"text":144977},{"id":145321,"depth":1158,"text":145322},{"id":145401,"depth":11,"text":145402},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144256,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145490,"title":145491,"body":145492,"description":13,"extension":14,"meta":145712,"navigation":17,"path":145713,"seo":145714,"stem":145715,"__hash__":145716},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145493,"toc":145708},[145494,145497,145501,145504,145519,145524,145527,145532,145567,145572,145584,145589,145602,145607,145624,145629,145649,145654,145672,145675,145678,145681,145684,145688,145691,145694,145697,145700,145703,145706],[29,145495,145491],{"id":145496},"_22-代码提交与新型相对单位",[33,145498,145500],{"id":145499},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[38,145502,145503],{},"法1：",[46,145505,145506,145513,145516],{},[49,145507,145508,145509],{},"登录网站注册：",[341,145510,145511],{"href":145511,"rel":145512},"https:\u002F\u002Fgitee.com\u002F",[23845],[49,145514,145515],{},"码云创建新的仓库",[49,145517,145518],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1110,145520,145521],{},[49,145522,145523],{},"在网站根目录右键-- Git Bash Here",[1441,145525],{"style":126383,"src":145526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1110,145528,145529],{},[49,145530,145531],{},"如果是第一次利用git提交，请配置好全局选项",[83,145533,145535],{"className":117271,"code":145534,"language":117273,"meta":10,"style":10},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[89,145536,145537,145553],{"__ignoreMap":10},[92,145538,145539,145542,145544,145547,145550],{"class":94,"line":95},[92,145540,145541],{"class":1942},"git",[92,145543,119694],{"class":207},[92,145545,145546],{"class":151}," --global",[92,145548,145549],{"class":207}," user.name",[92,145551,145552],{"class":207}," \"你的名字\"\n",[92,145554,145555,145557,145559,145561,145564],{"class":94,"line":11},[92,145556,145541],{"class":1942},[92,145558,119694],{"class":207},[92,145560,145546],{"class":151},[92,145562,145563],{"class":207}," user.email",[92,145565,145566],{"class":207}," \"你的邮箱\"\n",[1110,145568,145569],{},[49,145570,145571],{},"初始化仓库",[83,145573,145575],{"className":117271,"code":145574,"language":117273,"meta":10,"style":10},"git init\n",[89,145576,145577],{"__ignoreMap":10},[92,145578,145579,145581],{"class":94,"line":95},[92,145580,145541],{"class":1942},[92,145582,145583],{"class":207}," init\n",[1110,145585,145586],{},[49,145587,145588],{},"把本地文件放到暂存区",[83,145590,145592],{"className":117271,"code":145591,"language":117273,"meta":10,"style":10},"git add .\n",[89,145593,145594],{"__ignoreMap":10},[92,145595,145596,145598,145600],{"class":94,"line":95},[92,145597,145541],{"class":1942},[92,145599,5189],{"class":207},[92,145601,28722],{"class":207},[1110,145603,145604],{},[49,145605,145606],{},"把本地文件放到本地仓库里面",[83,145608,145610],{"className":117271,"code":145609,"language":117273,"meta":10,"style":10},"git commit -m \"first commit\"\n",[89,145611,145612],{"__ignoreMap":10},[92,145613,145614,145616,145619,145621],{"class":94,"line":95},[92,145615,145541],{"class":1942},[92,145617,145618],{"class":207}," commit",[92,145620,100857],{"class":151},[92,145622,145623],{"class":207}," \"first commit\"\n",[1110,145625,145626],{},[49,145627,145628],{},"链接远程仓库",[83,145630,145632],{"className":117271,"code":145631,"language":117273,"meta":10,"style":10},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[89,145633,145634],{"__ignoreMap":10},[92,145635,145636,145638,145641,145643,145646],{"class":94,"line":95},[92,145637,145541],{"class":1942},[92,145639,145640],{"class":207}," remote",[92,145642,5189],{"class":207},[92,145644,145645],{"class":207}," origin",[92,145647,145648],{"class":207}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1110,145650,145651],{},[49,145652,145653],{},"把本地仓库的文件推送到远程仓库 push",[83,145655,145657],{"className":117271,"code":145656,"language":117273,"meta":10,"style":10},"git push -u origin master\n",[89,145658,145659],{"__ignoreMap":10},[92,145660,145661,145663,145665,145667,145669],{"class":94,"line":95},[92,145662,145541],{"class":1942},[92,145664,28997],{"class":207},[92,145666,28271],{"class":151},[92,145668,145645],{"class":207},[92,145670,145671],{"class":207}," master\n",[1441,145673],{"style":126383,"src":145674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[38,145676,145677],{},"上方方法暂未实现，后边学完git后在整",[38,145679,145680],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1441,145682],{"style":126383,"src":145683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[33,145685,145687],{"id":145686},"_222-新型相对单位","22.2 新型相对单位",[1441,145689],{"style":126383,"src":145690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1441,145692],{"style":126383,"src":145693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[38,145695,145696],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[38,145698,145699],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1441,145701],{"style":126383,"src":145702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[38,145704,145705],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5106,145707,23938],{},{"title":10,"searchDepth":11,"depth":11,"links":145709},[145710,145711],{"id":145499,"depth":11,"text":145500},{"id":145686,"depth":11,"text":145687},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145491,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145718,"title":145719,"body":145720,"description":145724,"extension":14,"meta":145725,"navigation":17,"path":145726,"seo":145727,"stem":145728,"__hash__":145729},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145721,"toc":145722},[],{"title":10,"searchDepth":11,"depth":11,"links":145723},[],"自己正经开始学编程的第一门语言！",{"category":92819},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145719,"description":145724},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145731,"title":145732,"body":145733,"description":13,"extension":14,"meta":146880,"navigation":17,"path":146881,"seo":146882,"stem":146883,"__hash__":146884},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145734,"toc":146856},[145735,145738,145742,145745,145748,145773,145776,145782,145786,145789,145816,145819,145859,145862,145874,145877,145883,145887,145891,145918,145935,145942,145946,145949,145975,145978,145982,145985,146025,146028,146045,146051,146055,146060,146104,146107,146125,146128,146196,146200,146207,146210,146225,146228,146237,146240,146251,146254,146263,146266,146283,146286,146301,146305,146309,146312,146314,146334,146338,146341,146344,146355,146358,146364,146368,146374,146401,146404,146416,146419,146430,146433,146439,146443,146449,146499,146502,146544,146547,146580,146583,146617,146621,146624,146644,146647,146683,146686,146699,146703,146707,146713,146716,146729,146733,146736,146742,146745,146749,146752,146755,146804,146808,146824,146830,146837,146843,146853],[29,145736,145732],{"id":145737},"_1-python环境与第一个程序",[33,145739,145741],{"id":145740},"_11-什么是python","1.1 什么是Python",[38,145743,145744],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[38,145746,145747],{},"理解 Python 时抓住三个关键词：",[46,145749,145750,145753,145756],{},[49,145751,145752],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[49,145754,145755],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[49,145757,145758,145759,315,145762,315,145765,315,145768,315,145770,28366],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[89,145760,145761],{},"os",[89,145763,145764],{},"sys",[89,145766,145767],{},"json",[89,145769,57840],{},[89,145771,145772],{},"datetime",[38,145774,145775],{},"Python 程序的运行链路：",[83,145777,145780],{"className":145778,"code":145779,"language":5167,"meta":10},[5165],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[89,145781,145779],{"__ignoreMap":10},[33,145783,145785],{"id":145784},"_12-python解释器","1.2 Python解释器",[38,145787,145788],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[83,145790,145792],{"className":23802,"code":145791,"language":23804,"meta":10,"style":10},"python --version\npython3 --version\npython\npython3\n",[89,145793,145794,145800,145806,145811],{"__ignoreMap":10},[92,145795,145796,145798],{"class":94,"line":95},[92,145797,30361],{"class":1942},[92,145799,26274],{"class":151},[92,145801,145802,145804],{"class":94,"line":11},[92,145803,100854],{"class":1942},[92,145805,26274],{"class":151},[92,145807,145808],{"class":94,"line":1158},[92,145809,145810],{"class":1942},"python\n",[92,145812,145813],{"class":94,"line":1173},[92,145814,145815],{"class":1942},"python3\n",[38,145817,145818],{},"进入交互模式后，可以直接输入表达式：",[83,145820,145822],{"className":30359,"code":145821,"language":30361,"meta":10,"style":10},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[89,145823,145824,145835,145840,145854],{"__ignoreMap":10},[92,145825,145826,145829,145831,145833],{"class":94,"line":95},[92,145827,145828],{"class":98},">>>",[92,145830,25099],{"class":151},[92,145832,45547],{"class":98},[92,145834,47704],{"class":151},[92,145836,145837],{"class":94,"line":11},[92,145838,145839],{"class":151},"3\n",[92,145841,145842,145844,145847,145849,145852],{"class":94,"line":1158},[92,145843,145828],{"class":98},[92,145845,145846],{"class":151}," print",[92,145848,103],{"class":102},[92,145850,145851],{"class":207},"\"hello python\"",[92,145853,109],{"class":102},[92,145855,145856],{"class":94,"line":1173},[92,145857,145858],{"class":102},"hello python\n",[38,145860,145861],{},"退出交互模式：",[83,145863,145865],{"className":30359,"code":145864,"language":30361,"meta":10,"style":10},"exit()\n",[89,145866,145867],{"__ignoreMap":10},[92,145868,145869,145872],{"class":94,"line":95},[92,145870,145871],{"class":151},"exit",[92,145873,1955],{"class":102},[38,145875,145876],{},"或使用快捷键：",[83,145878,145881],{"className":145879,"code":145880,"language":5167,"meta":10},[5165],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[89,145882,145880],{"__ignoreMap":10},[33,145884,145886],{"id":145885},"_13-安装python","1.3 安装Python",[63,145888,145890],{"id":145889},"_131-windows安装","1.3.1 Windows安装",[46,145892,145893,145900,145903,145909,145915],{},[49,145894,145895,145896],{},"打开 Python 官网：",[341,145897,145898],{"href":145898,"rel":145899},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23845],[49,145901,145902],{},"下载 Windows Installer。",[49,145904,145905,145906,28366],{},"安装时勾选 ",[89,145907,145908],{},"Add Python to PATH",[49,145910,145911,145912,28366],{},"点击 ",[89,145913,145914],{},"Install Now",[49,145916,145917],{},"安装完成后打开命令提示符验证：",[83,145919,145921],{"className":23802,"code":145920,"language":23804,"meta":10,"style":10},"python --version\npip --version\n",[89,145922,145923,145929],{"__ignoreMap":10},[92,145924,145925,145927],{"class":94,"line":95},[92,145926,30361],{"class":1942},[92,145928,26274],{"class":151},[92,145930,145931,145933],{"class":94,"line":11},[92,145932,23811],{"class":1942},[92,145934,26274],{"class":151},[38,145936,145937,145938,145941],{},"如果提示 ",[89,145939,145940],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[63,145943,145945],{"id":145944},"_132-macos安装","1.3.2 macOS安装",[38,145947,145948],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[83,145950,145952],{"className":23802,"code":145951,"language":23804,"meta":10,"style":10},"brew install python\npython3 --version\npip3 --version\n",[89,145953,145954,145963,145969],{"__ignoreMap":10},[92,145955,145956,145959,145961],{"class":94,"line":95},[92,145957,145958],{"class":1942},"brew",[92,145960,23814],{"class":207},[92,145962,124293],{"class":207},[92,145964,145965,145967],{"class":94,"line":11},[92,145966,100854],{"class":1942},[92,145968,26274],{"class":151},[92,145970,145971,145973],{"class":94,"line":1158},[92,145972,119675],{"class":1942},[92,145974,26274],{"class":151},[38,145976,145977],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[63,145979,145981],{"id":145980},"_133-linux安装","1.3.3 Linux安装",[38,145983,145984],{},"Ubuntu\u002FDebian：",[83,145986,145988],{"className":23802,"code":145987,"language":23804,"meta":10,"style":10},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[89,145989,145990,145998,146013,146019],{"__ignoreMap":10},[92,145991,145992,145994,145996],{"class":94,"line":95},[92,145993,24557],{"class":1942},[92,145995,117292],{"class":207},[92,145997,26223],{"class":207},[92,145999,146000,146002,146004,146006,146008,146010],{"class":94,"line":11},[92,146001,24557],{"class":1942},[92,146003,117292],{"class":207},[92,146005,23814],{"class":207},[92,146007,104378],{"class":207},[92,146009,100773],{"class":207},[92,146011,146012],{"class":207}," python3-venv\n",[92,146014,146015,146017],{"class":94,"line":1158},[92,146016,100854],{"class":1942},[92,146018,26274],{"class":151},[92,146020,146021,146023],{"class":94,"line":1173},[92,146022,119675],{"class":1942},[92,146024,26274],{"class":151},[38,146026,146027],{},"Fedora：",[83,146029,146031],{"className":23802,"code":146030,"language":23804,"meta":10,"style":10},"sudo dnf install python3 python3-pip\n",[89,146032,146033],{"__ignoreMap":10},[92,146034,146035,146037,146039,146041,146043],{"class":94,"line":95},[92,146036,24557],{"class":1942},[92,146038,26296],{"class":207},[92,146040,23814],{"class":207},[92,146042,104378],{"class":207},[92,146044,119740],{"class":207},[38,146046,146047,146048,146050],{},"Linux 上通常使用 ",[89,146049,100854],{}," 命令，避免和系统旧版本 Python 冲突。",[33,146052,146054],{"id":146053},"_14-pip包管理器","1.4 pip包管理器",[38,146056,146057,146059],{},[89,146058,23811],{}," 用来安装第三方库。",[83,146061,146063],{"className":23802,"code":146062,"language":23804,"meta":10,"style":10},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[89,146064,146065,146074,146083,146091,146097],{"__ignoreMap":10},[92,146066,146067,146069,146071],{"class":94,"line":95},[92,146068,23811],{"class":1942},[92,146070,23814],{"class":207},[92,146072,146073],{"class":207}," requests\n",[92,146075,146076,146078,146081],{"class":94,"line":11},[92,146077,23811],{"class":1942},[92,146079,146080],{"class":207}," uninstall",[92,146082,146073],{"class":207},[92,146084,146085,146087,146089],{"class":94,"line":1158},[92,146086,23811],{"class":1942},[92,146088,117549],{"class":207},[92,146090,146073],{"class":207},[92,146092,146093,146095],{"class":94,"line":1173},[92,146094,23811],{"class":1942},[92,146096,118930],{"class":207},[92,146098,146099,146101],{"class":94,"line":1179},[92,146100,23811],{"class":1942},[92,146102,146103],{"class":207}," freeze\n",[38,146105,146106],{},"国内网络较慢时可以临时使用镜像：",[83,146108,146110],{"className":23802,"code":146109,"language":23804,"meta":10,"style":10},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[89,146111,146112],{"__ignoreMap":10},[92,146113,146114,146116,146118,146121,146123],{"class":94,"line":95},[92,146115,23811],{"class":1942},[92,146117,23814],{"class":207},[92,146119,146120],{"class":207}," requests",[92,146122,26411],{"class":151},[92,146124,119703],{"class":207},[38,146126,146127],{},"常见第三方库：",[240,146129,146130,146139],{},[243,146131,146132],{},[246,146133,146134,146137],{},[249,146135,146136],{},"库",[249,146138,102671],{},[287,146140,146141,146149,146156,146164,146172,146180,146188],{},[246,146142,146143,146146],{},[292,146144,146145],{},"requests",[292,146147,146148],{},"网络请求",[246,146150,146151,146153],{},[292,146152,5],{},[292,146154,146155],{},"数值计算",[246,146157,146158,146161],{},[292,146159,146160],{},"pandas",[292,146162,146163],{},"表格数据处理",[246,146165,146166,146169],{},[292,146167,146168],{},"matplotlib",[292,146170,146171],{},"绘图",[246,146173,146174,146177],{},[292,146175,146176],{},"pyecharts",[292,146178,146179],{},"ECharts 图表",[246,146181,146182,146185],{},[292,146183,146184],{},"flask",[292,146186,146187],{},"Web 后端",[246,146189,146190,146193],{},[292,146191,146192],{},"pytest",[292,146194,146195],{},"自动化测试",[33,146197,146199],{"id":146198},"_15-虚拟环境","1.5 虚拟环境",[38,146201,146202,146203,146206],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[89,146204,146205],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[38,146208,146209],{},"创建虚拟环境：",[83,146211,146213],{"className":23802,"code":146212,"language":23804,"meta":10,"style":10},"python -m venv .venv\n",[89,146214,146215],{"__ignoreMap":10},[92,146216,146217,146219,146221,146223],{"class":94,"line":95},[92,146218,30361],{"class":1942},[92,146220,100857],{"class":151},[92,146222,100860],{"class":207},[92,146224,100863],{"class":207},[38,146226,146227],{},"Windows 激活：",[83,146229,146231],{"className":23802,"code":146230,"language":23804,"meta":10,"style":10},".venv\\Scripts\\activate\n",[89,146232,146233],{"__ignoreMap":10},[92,146234,146235],{"class":94,"line":95},[92,146236,146230],{"class":1942},[38,146238,146239],{},"macOS\u002FLinux 激活：",[83,146241,146243],{"className":23802,"code":146242,"language":23804,"meta":10,"style":10},"source .venv\u002Fbin\u002Factivate\n",[89,146244,146245],{"__ignoreMap":10},[92,146246,146247,146249],{"class":94,"line":95},[92,146248,100868],{"class":151},[92,146250,100871],{"class":207},[38,146252,146253],{},"退出虚拟环境：",[83,146255,146257],{"className":23802,"code":146256,"language":23804,"meta":10,"style":10},"deactivate\n",[89,146258,146259],{"__ignoreMap":10},[92,146260,146261],{"class":94,"line":95},[92,146262,146256],{"class":1942},[38,146264,146265],{},"保存依赖：",[83,146267,146269],{"className":23802,"code":146268,"language":23804,"meta":10,"style":10},"pip freeze > requirements.txt\n",[89,146270,146271],{"__ignoreMap":10},[92,146272,146273,146275,146278,146280],{"class":94,"line":95},[92,146274,23811],{"class":1942},[92,146276,146277],{"class":207}," freeze",[92,146279,26203],{"class":98},[92,146281,146282],{"class":207}," requirements.txt\n",[38,146284,146285],{},"安装依赖：",[83,146287,146289],{"className":23802,"code":146288,"language":23804,"meta":10,"style":10},"pip install -r requirements.txt\n",[89,146290,146291],{"__ignoreMap":10},[92,146292,146293,146295,146297,146299],{"class":94,"line":95},[92,146294,23811],{"class":1942},[92,146296,23814],{"class":207},[92,146298,119614],{"class":151},[92,146300,146282],{"class":207},[33,146302,146304],{"id":146303},"_16-开发工具","1.6 开发工具",[63,146306,146308],{"id":146307},"_161-pycharm","1.6.1 PyCharm",[38,146310,146311],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[38,146313,122037],{},[46,146315,146316,146319,146322,146328,146331],{},[49,146317,146318],{},"New Project：创建项目。",[49,146320,146321],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[49,146323,146324,146325,125958],{},"New Python File：创建 ",[89,146326,146327],{},".py",[49,146329,146330],{},"Run：运行当前文件。",[49,146332,146333],{},"Debug：断点调试。",[63,146335,146337],{"id":146336},"_162-vs-code","1.6.2 VS Code",[38,146339,146340],{},"VS Code 轻量，适合后续多语言开发。",[38,146342,146343],{},"建议安装插件：",[46,146345,146346,146349,146352],{},[49,146347,146348],{},"Python。",[49,146350,146351],{},"Pylance。",[49,146353,146354],{},"Jupyter。",[38,146356,146357],{},"选择解释器：",[83,146359,146362],{"className":146360,"code":146361,"language":5167,"meta":10},[5165],"Ctrl + Shift + P -> Python: Select Interpreter\n",[89,146363,146361],{"__ignoreMap":10},[33,146365,146367],{"id":146366},"_17-第一个python程序","1.7 第一个Python程序",[38,146369,146370,146371,24599],{},"创建文件 ",[89,146372,146373],{},"hello.py",[83,146375,146377],{"className":30359,"code":146376,"language":30361,"meta":10,"style":10},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[89,146378,146379,146390],{"__ignoreMap":10},[92,146380,146381,146383,146385,146388],{"class":94,"line":95},[92,146382,30396],{"class":151},[92,146384,103],{"class":102},[92,146386,146387],{"class":207},"\"Hello World\"",[92,146389,109],{"class":102},[92,146391,146392,146394,146396,146399],{"class":94,"line":11},[92,146393,30396],{"class":151},[92,146395,103],{"class":102},[92,146397,146398],{"class":207},"\"你好，Python\"",[92,146400,109],{"class":102},[38,146402,146403],{},"在终端运行：",[83,146405,146407],{"className":23802,"code":146406,"language":23804,"meta":10,"style":10},"python hello.py\n",[89,146408,146409],{"__ignoreMap":10},[92,146410,146411,146413],{"class":94,"line":95},[92,146412,30361],{"class":1942},[92,146414,146415],{"class":207}," hello.py\n",[38,146417,146418],{},"或：",[83,146420,146422],{"className":23802,"code":146421,"language":23804,"meta":10,"style":10},"python3 hello.py\n",[89,146423,146424],{"__ignoreMap":10},[92,146425,146426,146428],{"class":94,"line":95},[92,146427,100854],{"class":1942},[92,146429,146415],{"class":207},[38,146431,146432],{},"输出：",[83,146434,146437],{"className":146435,"code":146436,"language":5167,"meta":10},[5165],"Hello World\n你好，Python\n",[89,146438,146436],{"__ignoreMap":10},[33,146440,146442],{"id":146441},"_18-print函数","1.8 print函数",[38,146444,146445,146448],{},[89,146446,146447],{},"print()"," 用来输出内容。",[83,146450,146452],{"className":30359,"code":146451,"language":30361,"meta":10,"style":10},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[89,146453,146454,146464,146474,146484],{"__ignoreMap":10},[92,146455,146456,146458,146460,146462],{"class":94,"line":95},[92,146457,30396],{"class":151},[92,146459,103],{"class":102},[92,146461,5824],{"class":207},[92,146463,109],{"class":102},[92,146465,146466,146468,146470,146472],{"class":94,"line":11},[92,146467,30396],{"class":151},[92,146469,103],{"class":102},[92,146471,414],{"class":151},[92,146473,109],{"class":102},[92,146475,146476,146478,146480,146482],{"class":94,"line":1158},[92,146477,30396],{"class":151},[92,146479,103],{"class":102},[92,146481,152],{"class":151},[92,146483,109],{"class":102},[92,146485,146486,146488,146490,146493,146495,146497],{"class":94,"line":1173},[92,146487,30396],{"class":151},[92,146489,103],{"class":102},[92,146491,146492],{"class":207},"\"年龄:\"",[92,146494,12415],{"class":102},[92,146496,753],{"class":151},[92,146498,109],{"class":102},[38,146500,146501],{},"多个内容用逗号隔开，默认中间加空格：",[83,146503,146505],{"className":30359,"code":146504,"language":30361,"meta":10,"style":10},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[89,146506,146507,146517,146527],{"__ignoreMap":10},[92,146508,146509,146512,146514],{"class":94,"line":95},[92,146510,146511],{"class":102},"name ",[92,146513,148],{"class":98},[92,146515,146516],{"class":207}," \"张三\"\n",[92,146518,146519,146522,146524],{"class":94,"line":11},[92,146520,146521],{"class":102},"age ",[92,146523,148],{"class":98},[92,146525,146526],{"class":151}," 18\n",[92,146528,146529,146531,146533,146536,146539,146541],{"class":94,"line":1158},[92,146530,30396],{"class":151},[92,146532,103],{"class":102},[92,146534,146535],{"class":207},"\"姓名:\"",[92,146537,146538],{"class":102},", name, ",[92,146540,146492],{"class":207},[92,146542,146543],{"class":102},", age)\n",[38,146545,146546],{},"修改分隔符：",[83,146548,146550],{"className":30359,"code":146549,"language":30361,"meta":10,"style":10},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[89,146551,146552],{"__ignoreMap":10},[92,146553,146554,146556,146558,146561,146563,146565,146567,146569,146571,146574,146576,146578],{"class":94,"line":95},[92,146555,30396],{"class":151},[92,146557,103],{"class":102},[92,146559,146560],{"class":207},"\"2024\"",[92,146562,12415],{"class":102},[92,146564,54296],{"class":207},[92,146566,12415],{"class":102},[92,146568,54296],{"class":207},[92,146570,12415],{"class":102},[92,146572,146573],{"class":5196},"sep",[92,146575,148],{"class":98},[92,146577,32464],{"class":207},[92,146579,109],{"class":102},[38,146581,146582],{},"修改结尾符：",[83,146584,146586],{"className":30359,"code":146585,"language":30361,"meta":10,"style":10},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[89,146587,146588,146606],{"__ignoreMap":10},[92,146589,146590,146592,146594,146596,146598,146600,146602,146604],{"class":94,"line":95},[92,146591,30396],{"class":151},[92,146593,103],{"class":102},[92,146595,5824],{"class":207},[92,146597,12415],{"class":102},[92,146599,45782],{"class":5196},[92,146601,148],{"class":98},[92,146603,4338],{"class":207},[92,146605,109],{"class":102},[92,146607,146608,146610,146612,146615],{"class":94,"line":11},[92,146609,30396],{"class":151},[92,146611,103],{"class":102},[92,146613,146614],{"class":207},"\"python\"",[92,146616,109],{"class":102},[33,146618,146620],{"id":146619},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[38,146622,146623],{},"交互运行适合临时验证：",[83,146625,146627],{"className":30359,"code":146626,"language":30361,"meta":10,"style":10},">>> 10 * 3\n30\n",[89,146628,146629,146639],{"__ignoreMap":10},[92,146630,146631,146633,146635,146637],{"class":94,"line":95},[92,146632,145828],{"class":98},[92,146634,2017],{"class":151},[92,146636,6498],{"class":98},[92,146638,120011],{"class":151},[92,146640,146641],{"class":94,"line":11},[92,146642,146643],{"class":151},"30\n",[38,146645,146646],{},"脚本运行适合保存程序：",[83,146648,146650],{"className":30359,"code":146649,"language":30361,"meta":10,"style":10},"price = 8\ncount = 5\nprint(price * count)\n",[89,146651,146652,146662,146671],{"__ignoreMap":10},[92,146653,146654,146657,146659],{"class":94,"line":95},[92,146655,146656],{"class":102},"price ",[92,146658,148],{"class":98},[92,146660,146661],{"class":151}," 8\n",[92,146663,146664,146667,146669],{"class":94,"line":11},[92,146665,146666],{"class":102},"count ",[92,146668,148],{"class":98},[92,146670,54407],{"class":151},[92,146672,146673,146675,146678,146680],{"class":94,"line":1158},[92,146674,30396],{"class":151},[92,146676,146677],{"class":102},"(price ",[92,146679,558],{"class":98},[92,146681,146682],{"class":102}," count)\n",[38,146684,146685],{},"实际学习中推荐：",[46,146687,146688,146691,146696],{},[49,146689,146690],{},"临时试一个语法，用交互模式。",[49,146692,146693,146694,125958],{},"写完整练习，用 ",[89,146695,146327],{},[49,146697,146698],{},"写项目，用独立目录和虚拟环境。",[33,146700,146702],{"id":146701},"_110-常见错误","1.10 常见错误",[63,146704,146706],{"id":146705},"_1101-命令找不到","1.10.1 命令找不到",[83,146708,146711],{"className":146709,"code":146710,"language":5167,"meta":10},[5165],"python: command not found\n",[89,146712,146710],{"__ignoreMap":10},[38,146714,146715],{},"原因：",[46,146717,146718,146721,146724],{},[49,146719,146720],{},"没安装 Python。",[49,146722,146723],{},"PATH 没配置。",[49,146725,146726,146727,28366],{},"Linux\u002FmacOS 应该使用 ",[89,146728,100854],{},[63,146730,146732],{"id":146731},"_1102-文件名冲突","1.10.2 文件名冲突",[38,146734,146735],{},"不要把文件命名为：",[83,146737,146740],{"className":146738,"code":146739,"language":5167,"meta":10},[5165],"random.py\njson.py\ntime.py\nrequests.py\n",[89,146741,146739],{"__ignoreMap":10},[38,146743,146744],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[63,146746,146748],{"id":146747},"_1103-中文乱码","1.10.3 中文乱码",[38,146750,146751],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[38,146753,146754],{},"如果读写文件出现乱码，要明确指定编码：",[83,146756,146758],{"className":30359,"code":146757,"language":30361,"meta":10,"style":10},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[89,146759,146760,146794],{"__ignoreMap":10},[92,146761,146762,146764,146767,146769,146772,146774,146777,146779,146782,146784,146787,146789,146791],{"class":94,"line":95},[92,146763,107808],{"class":98},[92,146765,146766],{"class":151}," open",[92,146768,103],{"class":102},[92,146770,146771],{"class":207},"\"data.txt\"",[92,146773,12415],{"class":102},[92,146775,146776],{"class":207},"\"r\"",[92,146778,12415],{"class":102},[92,146780,146781],{"class":5196},"encoding",[92,146783,148],{"class":98},[92,146785,146786],{"class":207},"\"utf-8\"",[92,146788,13694],{"class":102},[92,146790,31364],{"class":98},[92,146792,146793],{"class":102}," f:\n",[92,146795,146796,146799,146801],{"class":94,"line":11},[92,146797,146798],{"class":102},"    content ",[92,146800,148],{"class":98},[92,146802,146803],{"class":102}," f.read()\n",[33,146805,146807],{"id":146806},"_111-本章练习","1.11 本章练习",[46,146809,146810,146813,146819],{},[49,146811,146812],{},"安装 Python，并在终端输出版本号。",[49,146814,146815,146816,146818],{},"新建 ",[89,146817,146373],{},"，输出自己的姓名、年龄、学习目标。",[49,146820,104341,146821,146823],{},[89,146822,146447],{}," 输出下面格式：",[83,146825,146828],{"className":146826,"code":146827,"language":5167,"meta":10},[5165],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[89,146829,146827],{"__ignoreMap":10},[46,146831,146832],{"start":1173},[49,146833,104341,146834,146836],{},[89,146835,146573],{}," 输出日期：",[83,146838,146841],{"className":146839,"code":146840,"language":5167,"meta":10},[5165],"2024-10-10\n",[89,146842,146840],{"__ignoreMap":10},[46,146844,146845],{"start":1179},[49,146846,104341,146847,146849,146850,146852],{},[89,146848,45782],{}," 让两次 ",[89,146851,146447],{}," 输出在同一行。",[5106,146854,146855],{},"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":10,"searchDepth":11,"depth":11,"links":146857},[146858,146859,146860,146865,146866,146867,146871,146872,146873,146874,146879],{"id":145740,"depth":11,"text":145741},{"id":145784,"depth":11,"text":145785},{"id":145885,"depth":11,"text":145886,"children":146861},[146862,146863,146864],{"id":145889,"depth":1158,"text":145890},{"id":145944,"depth":1158,"text":145945},{"id":145980,"depth":1158,"text":145981},{"id":146053,"depth":11,"text":146054},{"id":146198,"depth":11,"text":146199},{"id":146303,"depth":11,"text":146304,"children":146868},[146869,146870],{"id":146307,"depth":1158,"text":146308},{"id":146336,"depth":1158,"text":146337},{"id":146366,"depth":11,"text":146367},{"id":146441,"depth":11,"text":146442},{"id":146619,"depth":11,"text":146620},{"id":146701,"depth":11,"text":146702,"children":146875},[146876,146877,146878],{"id":146705,"depth":1158,"text":146706},{"id":146731,"depth":1158,"text":146732},{"id":146747,"depth":1158,"text":146748},{"id":146806,"depth":11,"text":146807},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145732,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146886,"title":146887,"body":146888,"description":13,"extension":14,"meta":149292,"navigation":17,"path":149293,"seo":149294,"stem":149295,"__hash__":149296},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146889,"toc":149277},[146890,146893,146897,146900,146903,146920,146923,146965,146968,146972,146975,146978,147015,147018,147052,147055,147147,147151,147165,147168,147195,147198,147202,147305,147312,147315,147332,147336,147343,147532,147535,147608,147612,147615,147699,147702,147734,147738,147942,147945,147949,147955,148057,148060,148316,148320,148323,148326,148340,148342,148528,148532,148894,148900,148904,148907,149031,149034,149213,149216,149220,149253,149257,149274],[29,146891,146887],{"id":146892},"_10-json与pyecharts折线图",[33,146894,146896],{"id":146895},"_101-数据可视化","10.1 数据可视化",[38,146898,146899],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[38,146901,146902],{},"常见图表：",[46,146904,146905,146908,146911,146914,146917],{},[49,146906,146907],{},"折线图：看趋势。",[49,146909,146910],{},"柱状图：看分类对比。",[49,146912,146913],{},"饼图：看占比。",[49,146915,146916],{},"地图：看地域分布。",[49,146918,146919],{},"散点图：看两个变量之间的关系。",[38,146921,146922],{},"Python 可视化常用库：",[240,146924,146925,146933],{},[243,146926,146927],{},[246,146928,146929,146931],{},[249,146930,146136],{},[249,146932,23720],{},[287,146934,146935,146942,146950,146957],{},[246,146936,146937,146939],{},[292,146938,146168],{},[292,146940,146941],{},"基础、经典、可定制",[246,146943,146944,146947],{},[292,146945,146946],{},"seaborn",[292,146948,146949],{},"统计图表更美观",[246,146951,146952,146954],{},[292,146953,146176],{},[292,146955,146956],{},"生成交互式网页图表",[246,146958,146959,146962],{},[292,146960,146961],{},"plotly",[292,146963,146964],{},"交互图表能力强",[38,146966,146967],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[33,146969,146971],{"id":146970},"_102-json回顾","10.2 JSON回顾",[38,146973,146974],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[38,146976,146977],{},"Python 字典：",[83,146979,146981],{"className":30359,"code":146980,"language":30361,"meta":10,"style":10},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[89,146982,146983,146991,147002,147011],{"__ignoreMap":10},[92,146984,146985,146987,146989],{"class":94,"line":95},[92,146986,101633],{"class":102},[92,146988,148],{"class":98},[92,146990,15552],{"class":102},[92,146992,146993,146996,146998,147000],{"class":94,"line":11},[92,146994,146995],{"class":207},"    \"name\"",[92,146997,51417],{"class":102},[92,146999,69249],{"class":207},[92,147001,31447],{"class":102},[92,147003,147004,147007,147009],{"class":94,"line":1158},[92,147005,147006],{"class":207},"    \"value\"",[92,147008,51417],{"class":102},[92,147010,97438],{"class":151},[92,147012,147013],{"class":94,"line":1173},[92,147014,1544],{"class":102},[38,147016,147017],{},"JSON 字符串：",[83,147019,147022],{"className":147020,"code":147021,"language":145767,"meta":10,"style":10},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[89,147023,147024,147028,147039,147048],{"__ignoreMap":10},[92,147025,147026],{"class":94,"line":95},[92,147027,1525],{"class":102},[92,147029,147030,147033,147035,147037],{"class":94,"line":11},[92,147031,147032],{"class":151},"  \"name\"",[92,147034,51417],{"class":102},[92,147036,69249],{"class":207},[92,147038,31447],{"class":102},[92,147040,147041,147044,147046],{"class":94,"line":1158},[92,147042,147043],{"class":151},"  \"value\"",[92,147045,51417],{"class":102},[92,147047,97438],{"class":151},[92,147049,147050],{"class":94,"line":1173},[92,147051,1544],{"class":102},[38,147053,147054],{},"Python 与 JSON 的转换：",[83,147056,147058],{"className":30359,"code":147057,"language":30361,"meta":10,"style":10},"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",[89,147059,147060,147067,147071,147096,147100,147119,147126,147130,147140],{"__ignoreMap":10},[92,147061,147062,147064],{"class":94,"line":95},[92,147063,30373],{"class":98},[92,147065,147066],{"class":102}," json\n",[92,147068,147069],{"class":94,"line":11},[92,147070,2379],{"emptyLinePlaceholder":17},[92,147072,147073,147075,147077,147079,147081,147083,147085,147087,147090,147092,147094],{"class":94,"line":1158},[92,147074,101633],{"class":102},[92,147076,148],{"class":98},[92,147078,4427],{"class":102},[92,147080,62659],{"class":207},[92,147082,51417],{"class":102},[92,147084,69249],{"class":207},[92,147086,12415],{"class":102},[92,147088,147089],{"class":207},"\"value\"",[92,147091,51417],{"class":102},[92,147093,414],{"class":151},[92,147095,1544],{"class":102},[92,147097,147098],{"class":94,"line":1173},[92,147099,2379],{"emptyLinePlaceholder":17},[92,147101,147102,147105,147107,147110,147113,147115,147117],{"class":94,"line":1179},[92,147103,147104],{"class":102},"json_text ",[92,147106,148],{"class":98},[92,147108,147109],{"class":102}," json.dumps(data, ",[92,147111,147112],{"class":5196},"ensure_ascii",[92,147114,148],{"class":98},[92,147116,33968],{"class":151},[92,147118,109],{"class":102},[92,147120,147121,147123],{"class":94,"line":1193},[92,147122,30396],{"class":151},[92,147124,147125],{"class":102},"(json_text)\n",[92,147127,147128],{"class":94,"line":1199},[92,147129,2379],{"emptyLinePlaceholder":17},[92,147131,147132,147135,147137],{"class":94,"line":1290},[92,147133,147134],{"class":102},"new_data ",[92,147136,148],{"class":98},[92,147138,147139],{"class":102}," json.loads(json_text)\n",[92,147141,147142,147144],{"class":94,"line":1296},[92,147143,30396],{"class":151},[92,147145,147146],{"class":102},"(new_data)\n",[33,147148,147150],{"id":147149},"_103-安装pyecharts","10.3 安装pyecharts",[83,147152,147154],{"className":23802,"code":147153,"language":23804,"meta":10,"style":10},"pip install pyecharts\n",[89,147155,147156],{"__ignoreMap":10},[92,147157,147158,147160,147162],{"class":94,"line":95},[92,147159,23811],{"class":1942},[92,147161,23814],{"class":207},[92,147163,147164],{"class":207}," pyecharts\n",[38,147166,147167],{},"验证：",[83,147169,147171],{"className":30359,"code":147170,"language":30361,"meta":10,"style":10},"import pyecharts\n\nprint(pyecharts.__version__)\n",[89,147172,147173,147179,147183],{"__ignoreMap":10},[92,147174,147175,147177],{"class":94,"line":95},[92,147176,30373],{"class":98},[92,147178,147164],{"class":102},[92,147180,147181],{"class":94,"line":11},[92,147182,2379],{"emptyLinePlaceholder":17},[92,147184,147185,147187,147190,147193],{"class":94,"line":1158},[92,147186,30396],{"class":151},[92,147188,147189],{"class":102},"(pyecharts.",[92,147191,147192],{"class":151},"__version__",[92,147194,109],{"class":102},[38,147196,147197],{},"如果使用虚拟环境，要先激活环境再安装。",[33,147199,147201],{"id":147200},"_104-第一个折线图","10.4 第一个折线图",[83,147203,147205],{"className":30359,"code":147204,"language":30361,"meta":10,"style":10},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[89,147206,147207,147219,147223,147233,147263,147295],{"__ignoreMap":10},[92,147208,147209,147211,147214,147216],{"class":94,"line":95},[92,147210,30718],{"class":98},[92,147212,147213],{"class":102}," pyecharts.charts ",[92,147215,30373],{"class":98},[92,147217,147218],{"class":102}," Line\n",[92,147220,147221],{"class":94,"line":11},[92,147222,2379],{"emptyLinePlaceholder":17},[92,147224,147225,147228,147230],{"class":94,"line":1158},[92,147226,147227],{"class":102},"line ",[92,147229,148],{"class":98},[92,147231,147232],{"class":102}," Line()\n",[92,147234,147235,147238,147241,147243,147246,147248,147251,147253,147256,147258,147261],{"class":94,"line":1173},[92,147236,147237],{"class":102},"line.add_xaxis([",[92,147239,147240],{"class":207},"\"周一\"",[92,147242,12415],{"class":102},[92,147244,147245],{"class":207},"\"周二\"",[92,147247,12415],{"class":102},[92,147249,147250],{"class":207},"\"周三\"",[92,147252,12415],{"class":102},[92,147254,147255],{"class":207},"\"周四\"",[92,147257,12415],{"class":102},[92,147259,147260],{"class":207},"\"周五\"",[92,147262,4636],{"class":102},[92,147264,147265,147268,147271,147273,147275,147277,147279,147281,147283,147285,147288,147290,147293],{"class":94,"line":1179},[92,147266,147267],{"class":102},"line.add_yaxis(",[92,147269,147270],{"class":207},"\"销售额\"",[92,147272,77498],{"class":102},[92,147274,414],{"class":151},[92,147276,12415],{"class":102},[92,147278,920],{"class":151},[92,147280,12415],{"class":102},[92,147282,965],{"class":151},[92,147284,12415],{"class":102},[92,147286,147287],{"class":151},"150",[92,147289,12415],{"class":102},[92,147291,147292],{"class":151},"180",[92,147294,4636],{"class":102},[92,147296,147297,147300,147303],{"class":94,"line":1193},[92,147298,147299],{"class":102},"line.render(",[92,147301,147302],{"class":207},"\"line.html\"",[92,147304,109],{"class":102},[38,147306,147307,147308,147311],{},"运行后会生成 ",[89,147309,147310],{},"line.html","，用浏览器打开即可看到图表。",[38,147313,147314],{},"核心步骤：",[46,147316,147317,147320,147323,147326,147329],{},[49,147318,147319],{},"导入图表类。",[49,147321,147322],{},"创建图表对象。",[49,147324,147325],{},"添加 x 轴数据。",[49,147327,147328],{},"添加 y 轴数据。",[49,147330,147331],{},"渲染为 HTML。",[33,147333,147335],{"id":147334},"_105-全局配置","10.5 全局配置",[38,147337,147338,147339,147342],{},"常用配置在 ",[89,147340,147341],{},"pyecharts.options"," 中。",[83,147344,147346],{"className":30359,"code":147345,"language":30361,"meta":10,"style":10},"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",[89,147347,147348,147365,147375,147379,147387,147411,147439,147444,147463,147482,147500,147520,147524],{"__ignoreMap":10},[92,147349,147350,147352,147355,147357,147360,147362],{"class":94,"line":95},[92,147351,30718],{"class":98},[92,147353,147354],{"class":102}," pyecharts ",[92,147356,30373],{"class":98},[92,147358,147359],{"class":102}," options ",[92,147361,31364],{"class":98},[92,147363,147364],{"class":102}," opts\n",[92,147366,147367,147369,147371,147373],{"class":94,"line":11},[92,147368,30718],{"class":98},[92,147370,147213],{"class":102},[92,147372,30373],{"class":98},[92,147374,147218],{"class":102},[92,147376,147377],{"class":94,"line":1158},[92,147378,2379],{"emptyLinePlaceholder":17},[92,147380,147381,147383,147385],{"class":94,"line":1173},[92,147382,147227],{"class":102},[92,147384,148],{"class":98},[92,147386,147232],{"class":102},[92,147388,147389,147391,147393,147395,147397,147399,147401,147403,147405,147407,147409],{"class":94,"line":1179},[92,147390,147237],{"class":102},[92,147392,147240],{"class":207},[92,147394,12415],{"class":102},[92,147396,147245],{"class":207},[92,147398,12415],{"class":102},[92,147400,147250],{"class":207},[92,147402,12415],{"class":102},[92,147404,147255],{"class":207},[92,147406,12415],{"class":102},[92,147408,147260],{"class":207},[92,147410,4636],{"class":102},[92,147412,147413,147415,147417,147419,147421,147423,147425,147427,147429,147431,147433,147435,147437],{"class":94,"line":1193},[92,147414,147267],{"class":102},[92,147416,147270],{"class":207},[92,147418,77498],{"class":102},[92,147420,414],{"class":151},[92,147422,12415],{"class":102},[92,147424,920],{"class":151},[92,147426,12415],{"class":102},[92,147428,965],{"class":151},[92,147430,12415],{"class":102},[92,147432,147287],{"class":151},[92,147434,12415],{"class":102},[92,147436,147292],{"class":151},[92,147438,4636],{"class":102},[92,147440,147441],{"class":94,"line":1199},[92,147442,147443],{"class":102},"line.set_global_opts(\n",[92,147445,147446,147449,147451,147454,147456,147458,147461],{"class":94,"line":1290},[92,147447,147448],{"class":5196},"    title_opts",[92,147450,148],{"class":98},[92,147452,147453],{"class":102},"opts.TitleOpts(",[92,147455,51387],{"class":5196},[92,147457,148],{"class":98},[92,147459,147460],{"class":207},"\"一周销售额\"",[92,147462,38028],{"class":102},[92,147464,147465,147468,147470,147473,147475,147477,147480],{"class":94,"line":1296},[92,147466,147467],{"class":5196},"    xaxis_opts",[92,147469,148],{"class":98},[92,147471,147472],{"class":102},"opts.AxisOpts(",[92,147474,79790],{"class":5196},[92,147476,148],{"class":98},[92,147478,147479],{"class":207},"\"日期\"",[92,147481,38028],{"class":102},[92,147483,147484,147487,147489,147491,147493,147495,147498],{"class":94,"line":1308},[92,147485,147486],{"class":5196},"    yaxis_opts",[92,147488,148],{"class":98},[92,147490,147472],{"class":102},[92,147492,79790],{"class":5196},[92,147494,148],{"class":98},[92,147496,147497],{"class":207},"\"金额\"",[92,147499,38028],{"class":102},[92,147501,147502,147505,147507,147510,147513,147515,147518],{"class":94,"line":1591},[92,147503,147504],{"class":5196},"    tooltip_opts",[92,147506,148],{"class":98},[92,147508,147509],{"class":102},"opts.TooltipOpts(",[92,147511,147512],{"class":5196},"trigger",[92,147514,148],{"class":98},[92,147516,147517],{"class":207},"\"axis\"",[92,147519,38028],{"class":102},[92,147521,147522],{"class":94,"line":1596},[92,147523,109],{"class":102},[92,147525,147526,147528,147530],{"class":94,"line":1602},[92,147527,147299],{"class":102},[92,147529,147302],{"class":207},[92,147531,109],{"class":102},[38,147533,147534],{},"常见全局配置：",[240,147536,147537,147546],{},[243,147538,147539],{},[246,147540,147541,147544],{},[249,147542,147543],{},"配置",[249,147545,102671],{},[287,147547,147548,147558,147568,147578,147588,147598],{},[246,147549,147550,147555],{},[292,147551,147552],{},[89,147553,147554],{},"TitleOpts",[292,147556,147557],{},"标题",[246,147559,147560,147565],{},[292,147561,147562],{},[89,147563,147564],{},"LegendOpts",[292,147566,147567],{},"图例",[246,147569,147570,147575],{},[292,147571,147572],{},[89,147573,147574],{},"TooltipOpts",[292,147576,147577],{},"提示框",[246,147579,147580,147585],{},[292,147581,147582],{},[89,147583,147584],{},"AxisOpts",[292,147586,147587],{},"坐标轴",[246,147589,147590,147595],{},[292,147591,147592],{},[89,147593,147594],{},"VisualMapOpts",[292,147596,147597],{},"视觉映射",[246,147599,147600,147605],{},[292,147601,147602],{},[89,147603,147604],{},"DataZoomOpts",[292,147606,147607],{},"区域缩放",[33,147609,147611],{"id":147610},"_106-系列配置","10.6 系列配置",[38,147613,147614],{},"系列配置作用于某一组数据。",[83,147616,147618],{"className":30359,"code":147617,"language":30361,"meta":10,"style":10},"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",[89,147619,147620,147625,147636,147665,147676,147695],{"__ignoreMap":10},[92,147621,147622],{"class":94,"line":95},[92,147623,147624],{"class":102},"line.add_yaxis(\n",[92,147626,147627,147630,147632,147634],{"class":94,"line":11},[92,147628,147629],{"class":5196},"    series_name",[92,147631,148],{"class":98},[92,147633,147270],{"class":207},[92,147635,31447],{"class":102},[92,147637,147638,147641,147643,147645,147647,147649,147651,147653,147655,147657,147659,147661,147663],{"class":94,"line":1158},[92,147639,147640],{"class":5196},"    y_axis",[92,147642,148],{"class":98},[92,147644,993],{"class":102},[92,147646,414],{"class":151},[92,147648,12415],{"class":102},[92,147650,920],{"class":151},[92,147652,12415],{"class":102},[92,147654,965],{"class":151},[92,147656,12415],{"class":102},[92,147658,147287],{"class":151},[92,147660,12415],{"class":102},[92,147662,147292],{"class":151},[92,147664,87816],{"class":102},[92,147666,147667,147670,147672,147674],{"class":94,"line":1173},[92,147668,147669],{"class":5196},"    is_smooth",[92,147671,148],{"class":98},[92,147673,31457],{"class":151},[92,147675,31447],{"class":102},[92,147677,147678,147681,147683,147686,147689,147691,147693],{"class":94,"line":1179},[92,147679,147680],{"class":5196},"    label_opts",[92,147682,148],{"class":98},[92,147684,147685],{"class":102},"opts.LabelOpts(",[92,147687,147688],{"class":5196},"is_show",[92,147690,148],{"class":98},[92,147692,31457],{"class":151},[92,147694,38028],{"class":102},[92,147696,147697],{"class":94,"line":1193},[92,147698,109],{"class":102},[38,147700,147701],{},"常用参数：",[46,147703,147704,147710,147716,147722,147728],{},[49,147705,147706,147709],{},[89,147707,147708],{},"series_name","：系列名称。",[49,147711,147712,147715],{},[89,147713,147714],{},"y_axis","：y 轴数据。",[49,147717,147718,147721],{},[89,147719,147720],{},"is_smooth","：是否平滑曲线。",[49,147723,147724,147727],{},[89,147725,147726],{},"label_opts","：标签配置。",[49,147729,147730,147733],{},[89,147731,147732],{},"symbol_size","：标记点大小。",[33,147735,147737],{"id":147736},"_107-多条折线","10.7 多条折线",[83,147739,147741],{"className":30359,"code":147740,"language":30361,"meta":10,"style":10},"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",[89,147742,147743,147757,147767,147771,147800,147804,147812,147817,147855,147892,147896,147913,147929,147933],{"__ignoreMap":10},[92,147744,147745,147747,147749,147751,147753,147755],{"class":94,"line":95},[92,147746,30718],{"class":98},[92,147748,147354],{"class":102},[92,147750,30373],{"class":98},[92,147752,147359],{"class":102},[92,147754,31364],{"class":98},[92,147756,147364],{"class":102},[92,147758,147759,147761,147763,147765],{"class":94,"line":11},[92,147760,30718],{"class":98},[92,147762,147213],{"class":102},[92,147764,30373],{"class":98},[92,147766,147218],{"class":102},[92,147768,147769],{"class":94,"line":1158},[92,147770,2379],{"emptyLinePlaceholder":17},[92,147772,147773,147776,147778,147780,147782,147784,147786,147788,147790,147792,147794,147796,147798],{"class":94,"line":1173},[92,147774,147775],{"class":102},"dates ",[92,147777,148],{"class":98},[92,147779,52206],{"class":102},[92,147781,147240],{"class":207},[92,147783,12415],{"class":102},[92,147785,147245],{"class":207},[92,147787,12415],{"class":102},[92,147789,147250],{"class":207},[92,147791,12415],{"class":102},[92,147793,147255],{"class":207},[92,147795,12415],{"class":102},[92,147797,147260],{"class":207},[92,147799,33227],{"class":102},[92,147801,147802],{"class":94,"line":1179},[92,147803,2379],{"emptyLinePlaceholder":17},[92,147805,147806,147808,147810],{"class":94,"line":1193},[92,147807,147227],{"class":102},[92,147809,148],{"class":98},[92,147811,147232],{"class":102},[92,147813,147814],{"class":94,"line":1199},[92,147815,147816],{"class":102},"line.add_xaxis(dates)\n",[92,147818,147819,147821,147824,147826,147828,147830,147833,147835,147837,147839,147841,147843,147845,147847,147849,147851,147853],{"class":94,"line":1290},[92,147820,147267],{"class":102},[92,147822,147823],{"class":207},"\"线上销售\"",[92,147825,77498],{"class":102},[92,147827,414],{"class":151},[92,147829,12415],{"class":102},[92,147831,147832],{"class":151},"130",[92,147834,12415],{"class":102},[92,147836,920],{"class":151},[92,147838,12415],{"class":102},[92,147840,21028],{"class":151},[92,147842,12415],{"class":102},[92,147844,1701],{"class":151},[92,147846,112177],{"class":102},[92,147848,147720],{"class":5196},[92,147850,148],{"class":98},[92,147852,31457],{"class":151},[92,147854,109],{"class":102},[92,147856,147857,147859,147862,147864,147866,147868,147870,147872,147874,147876,147878,147880,147882,147884,147886,147888,147890],{"class":94,"line":1296},[92,147858,147267],{"class":102},[92,147860,147861],{"class":207},"\"线下销售\"",[92,147863,77498],{"class":102},[92,147865,715],{"class":151},[92,147867,12415],{"class":102},[92,147869,965],{"class":151},[92,147871,12415],{"class":102},[92,147873,414],{"class":151},[92,147875,12415],{"class":102},[92,147877,920],{"class":151},[92,147879,12415],{"class":102},[92,147881,147287],{"class":151},[92,147883,112177],{"class":102},[92,147885,147720],{"class":5196},[92,147887,148],{"class":98},[92,147889,31457],{"class":151},[92,147891,109],{"class":102},[92,147893,147894],{"class":94,"line":1308},[92,147895,147443],{"class":102},[92,147897,147898,147900,147902,147904,147906,147908,147911],{"class":94,"line":1591},[92,147899,147448],{"class":5196},[92,147901,148],{"class":98},[92,147903,147453],{"class":102},[92,147905,51387],{"class":5196},[92,147907,148],{"class":98},[92,147909,147910],{"class":207},"\"线上线下销售趋势\"",[92,147912,38028],{"class":102},[92,147914,147915,147917,147919,147921,147923,147925,147927],{"class":94,"line":1596},[92,147916,147504],{"class":5196},[92,147918,148],{"class":98},[92,147920,147509],{"class":102},[92,147922,147512],{"class":5196},[92,147924,148],{"class":98},[92,147926,147517],{"class":207},[92,147928,38028],{"class":102},[92,147930,147931],{"class":94,"line":1602},[92,147932,109],{"class":102},[92,147934,147935,147937,147940],{"class":94,"line":1607},[92,147936,147299],{"class":102},[92,147938,147939],{"class":207},"\"sales.html\"",[92,147941,109],{"class":102},[38,147943,147944],{},"多条折线适合比较不同指标或不同地区。",[33,147946,147948],{"id":147947},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[38,147950,147951,147952,24599],{},"假设 ",[89,147953,147954],{},"sales.json",[83,147956,147958],{"className":147020,"code":147957,"language":145767,"meta":10,"style":10},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[89,147959,147960,147965,147997,148025,148053],{"__ignoreMap":10},[92,147961,147962],{"class":94,"line":95},[92,147963,147964],{"class":102},"[\n",[92,147966,147967,147970,147973,147975,147977,147979,147982,147984,147986,147988,147991,147993,147995],{"class":94,"line":11},[92,147968,147969],{"class":102},"  {",[92,147971,147972],{"class":151},"\"date\"",[92,147974,51417],{"class":102},[92,147976,147240],{"class":207},[92,147978,12415],{"class":102},[92,147980,147981],{"class":151},"\"online\"",[92,147983,51417],{"class":102},[92,147985,414],{"class":151},[92,147987,12415],{"class":102},[92,147989,147990],{"class":151},"\"offline\"",[92,147992,51417],{"class":102},[92,147994,715],{"class":151},[92,147996,4909],{"class":102},[92,147998,147999,148001,148003,148005,148007,148009,148011,148013,148015,148017,148019,148021,148023],{"class":94,"line":1158},[92,148000,147969],{"class":102},[92,148002,147972],{"class":151},[92,148004,51417],{"class":102},[92,148006,147245],{"class":207},[92,148008,12415],{"class":102},[92,148010,147981],{"class":151},[92,148012,51417],{"class":102},[92,148014,147832],{"class":151},[92,148016,12415],{"class":102},[92,148018,147990],{"class":151},[92,148020,51417],{"class":102},[92,148022,965],{"class":151},[92,148024,4909],{"class":102},[92,148026,148027,148029,148031,148033,148035,148037,148039,148041,148043,148045,148047,148049,148051],{"class":94,"line":1173},[92,148028,147969],{"class":102},[92,148030,147972],{"class":151},[92,148032,51417],{"class":102},[92,148034,147250],{"class":207},[92,148036,12415],{"class":102},[92,148038,147981],{"class":151},[92,148040,51417],{"class":102},[92,148042,920],{"class":151},[92,148044,12415],{"class":102},[92,148046,147990],{"class":151},[92,148048,51417],{"class":102},[92,148050,414],{"class":151},[92,148052,1544],{"class":102},[92,148054,148055],{"class":94,"line":1179},[92,148056,33227],{"class":102},[38,148058,148059],{},"读取并绘图：",[83,148061,148063],{"className":30359,"code":148062,"language":30361,"meta":10,"style":10},"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",[89,148064,148065,148071,148085,148095,148099,148131,148144,148148,148156,148165,148174,148178,148190,148199,148208,148217,148221,148229,148233,148250,148267,148271,148288,148304,148308],{"__ignoreMap":10},[92,148066,148067,148069],{"class":94,"line":95},[92,148068,30373],{"class":98},[92,148070,147066],{"class":102},[92,148072,148073,148075,148077,148079,148081,148083],{"class":94,"line":11},[92,148074,30718],{"class":98},[92,148076,147354],{"class":102},[92,148078,30373],{"class":98},[92,148080,147359],{"class":102},[92,148082,31364],{"class":98},[92,148084,147364],{"class":102},[92,148086,148087,148089,148091,148093],{"class":94,"line":1158},[92,148088,30718],{"class":98},[92,148090,147213],{"class":102},[92,148092,30373],{"class":98},[92,148094,147218],{"class":102},[92,148096,148097],{"class":94,"line":1173},[92,148098,2379],{"emptyLinePlaceholder":17},[92,148100,148101,148103,148105,148107,148110,148112,148114,148116,148118,148120,148122,148124,148126,148129],{"class":94,"line":1179},[92,148102,107808],{"class":98},[92,148104,146766],{"class":151},[92,148106,103],{"class":102},[92,148108,148109],{"class":207},"\"sales.json\"",[92,148111,12415],{"class":102},[92,148113,146776],{"class":207},[92,148115,12415],{"class":102},[92,148117,146781],{"class":5196},[92,148119,148],{"class":98},[92,148121,146786],{"class":207},[92,148123,13694],{"class":102},[92,148125,31364],{"class":98},[92,148127,148128],{"class":5196}," file",[92,148130,3718],{"class":102},[92,148132,148133,148135,148137,148140,148142],{"class":94,"line":1193},[92,148134,101396],{"class":102},[92,148136,148],{"class":98},[92,148138,148139],{"class":102}," json.load(",[92,148141,45335],{"class":5196},[92,148143,109],{"class":102},[92,148145,148146],{"class":94,"line":1199},[92,148147,2379],{"emptyLinePlaceholder":17},[92,148149,148150,148152,148154],{"class":94,"line":1290},[92,148151,147775],{"class":102},[92,148153,148],{"class":98},[92,148155,51818],{"class":102},[92,148157,148158,148161,148163],{"class":94,"line":1296},[92,148159,148160],{"class":102},"online_sales ",[92,148162,148],{"class":98},[92,148164,51818],{"class":102},[92,148166,148167,148170,148172],{"class":94,"line":1308},[92,148168,148169],{"class":102},"offline_sales ",[92,148171,148],{"class":98},[92,148173,51818],{"class":102},[92,148175,148176],{"class":94,"line":1591},[92,148177,2379],{"emptyLinePlaceholder":17},[92,148179,148180,148182,148185,148187],{"class":94,"line":1596},[92,148181,3004],{"class":98},[92,148183,148184],{"class":102}," item ",[92,148186,26024],{"class":98},[92,148188,148189],{"class":102}," data:\n",[92,148191,148192,148195,148197],{"class":94,"line":1602},[92,148193,148194],{"class":102},"    dates.append(item[",[92,148196,147972],{"class":207},[92,148198,4636],{"class":102},[92,148200,148201,148204,148206],{"class":94,"line":1607},[92,148202,148203],{"class":102},"    online_sales.append(item[",[92,148205,147981],{"class":207},[92,148207,4636],{"class":102},[92,148209,148210,148213,148215],{"class":94,"line":1621},[92,148211,148212],{"class":102},"    offline_sales.append(item[",[92,148214,147990],{"class":207},[92,148216,4636],{"class":102},[92,148218,148219],{"class":94,"line":1626},[92,148220,2379],{"emptyLinePlaceholder":17},[92,148222,148223,148225,148227],{"class":94,"line":1632},[92,148224,147227],{"class":102},[92,148226,148],{"class":98},[92,148228,147232],{"class":102},[92,148230,148231],{"class":94,"line":1653},[92,148232,147816],{"class":102},[92,148234,148235,148237,148239,148242,148244,148246,148248],{"class":94,"line":1658},[92,148236,147267],{"class":102},[92,148238,147823],{"class":207},[92,148240,148241],{"class":102},", online_sales, ",[92,148243,147720],{"class":5196},[92,148245,148],{"class":98},[92,148247,31457],{"class":151},[92,148249,109],{"class":102},[92,148251,148252,148254,148256,148259,148261,148263,148265],{"class":94,"line":1672},[92,148253,147267],{"class":102},[92,148255,147861],{"class":207},[92,148257,148258],{"class":102},", offline_sales, ",[92,148260,147720],{"class":5196},[92,148262,148],{"class":98},[92,148264,31457],{"class":151},[92,148266,109],{"class":102},[92,148268,148269],{"class":94,"line":1677},[92,148270,147443],{"class":102},[92,148272,148273,148275,148277,148279,148281,148283,148286],{"class":94,"line":1706},[92,148274,147448],{"class":5196},[92,148276,148],{"class":98},[92,148278,147453],{"class":102},[92,148280,51387],{"class":5196},[92,148282,148],{"class":98},[92,148284,148285],{"class":207},"\"销售趋势\"",[92,148287,38028],{"class":102},[92,148289,148290,148292,148294,148296,148298,148300,148302],{"class":94,"line":1711},[92,148291,147504],{"class":5196},[92,148293,148],{"class":98},[92,148295,147509],{"class":102},[92,148297,147512],{"class":5196},[92,148299,148],{"class":98},[92,148301,147517],{"class":207},[92,148303,38028],{"class":102},[92,148305,148306],{"class":94,"line":1728},[92,148307,109],{"class":102},[92,148309,148310,148312,148314],{"class":94,"line":1733},[92,148311,147299],{"class":102},[92,148313,147939],{"class":207},[92,148315,109],{"class":102},[33,148317,148319],{"id":148318},"_109-数据清洗","10.9 数据清洗",[38,148321,148322],{},"真实数据经常不整齐，需要清洗。",[38,148324,148325],{},"常见问题：",[46,148327,148328,148331,148334,148337],{},[49,148329,148330],{},"数字是字符串。",[49,148332,148333],{},"字段缺失。",[49,148335,148336],{},"空值。",[49,148338,148339],{},"日期格式不统一。",[38,148341,15115],{},[83,148343,148345],{"className":30359,"code":148344,"language":30361,"meta":10,"style":10},"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",[89,148346,148347,148356,148379,148399,148420,148424,148428,148436,148445,148449,148460,148474,148483,148488,148492,148500,148510,148514,148521],{"__ignoreMap":10},[92,148348,148349,148352,148354],{"class":94,"line":95},[92,148350,148351],{"class":102},"raw_data ",[92,148353,148],{"class":98},[92,148355,55427],{"class":102},[92,148357,148358,148361,148363,148365,148367,148369,148372,148374,148377],{"class":94,"line":11},[92,148359,148360],{"class":102},"    {",[92,148362,147972],{"class":207},[92,148364,51417],{"class":102},[92,148366,147240],{"class":207},[92,148368,12415],{"class":102},[92,148370,148371],{"class":207},"\"sales\"",[92,148373,51417],{"class":102},[92,148375,148376],{"class":207},"\"100\"",[92,148378,4909],{"class":102},[92,148380,148381,148383,148385,148387,148389,148391,148393,148395,148397],{"class":94,"line":1158},[92,148382,148360],{"class":102},[92,148384,147972],{"class":207},[92,148386,51417],{"class":102},[92,148388,147245],{"class":207},[92,148390,12415],{"class":102},[92,148392,148371],{"class":207},[92,148394,51417],{"class":102},[92,148396,7632],{"class":207},[92,148398,4909],{"class":102},[92,148400,148401,148403,148405,148407,148409,148411,148413,148415,148418],{"class":94,"line":1173},[92,148402,148360],{"class":102},[92,148404,147972],{"class":207},[92,148406,51417],{"class":102},[92,148408,147250],{"class":207},[92,148410,12415],{"class":102},[92,148412,148371],{"class":207},[92,148414,51417],{"class":102},[92,148416,148417],{"class":207},"\"120\"",[92,148419,4909],{"class":102},[92,148421,148422],{"class":94,"line":1179},[92,148423,33227],{"class":102},[92,148425,148426],{"class":94,"line":1193},[92,148427,2379],{"emptyLinePlaceholder":17},[92,148429,148430,148432,148434],{"class":94,"line":1199},[92,148431,147775],{"class":102},[92,148433,148],{"class":98},[92,148435,51818],{"class":102},[92,148437,148438,148441,148443],{"class":94,"line":1290},[92,148439,148440],{"class":102},"sales ",[92,148442,148],{"class":98},[92,148444,51818],{"class":102},[92,148446,148447],{"class":94,"line":1296},[92,148448,2379],{"emptyLinePlaceholder":17},[92,148450,148451,148453,148455,148457],{"class":94,"line":1308},[92,148452,3004],{"class":98},[92,148454,148184],{"class":102},[92,148456,26024],{"class":98},[92,148458,148459],{"class":102}," raw_data:\n",[92,148461,148462,148465,148467,148470,148472],{"class":94,"line":1591},[92,148463,148464],{"class":102},"    value ",[92,148466,148],{"class":98},[92,148468,148469],{"class":102}," item.get(",[92,148471,148371],{"class":207},[92,148473,109],{"class":102},[92,148475,148476,148478,148480],{"class":94,"line":1596},[92,148477,3080],{"class":98},[92,148479,38911],{"class":98},[92,148481,148482],{"class":102}," value:\n",[92,148484,148485],{"class":94,"line":1602},[92,148486,148487],{"class":98},"        continue\n",[92,148489,148490],{"class":94,"line":1607},[92,148491,2379],{"emptyLinePlaceholder":17},[92,148493,148494,148496,148498],{"class":94,"line":1621},[92,148495,148194],{"class":102},[92,148497,147972],{"class":207},[92,148499,4636],{"class":102},[92,148501,148502,148505,148507],{"class":94,"line":1626},[92,148503,148504],{"class":102},"    sales.append(",[92,148506,106],{"class":151},[92,148508,148509],{"class":102},"(value))\n",[92,148511,148512],{"class":94,"line":1632},[92,148513,2379],{"emptyLinePlaceholder":17},[92,148515,148516,148518],{"class":94,"line":1653},[92,148517,30396],{"class":151},[92,148519,148520],{"class":102},"(dates)\n",[92,148522,148523,148525],{"class":94,"line":1658},[92,148524,30396],{"class":151},[92,148526,148527],{"class":102},"(sales)\n",[33,148529,148531],{"id":148530},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[83,148533,148535],{"className":30359,"code":148534,"language":30361,"meta":10,"style":10},"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",[89,148536,148537,148551,148561,148565,148573,148594,148616,148638,148660,148682,148686,148690,148712,148733,148737,148745,148749,148753,148763,148772,148782,148798,148802,148806,148823,148839,148855,148871,148881,148885],{"__ignoreMap":10},[92,148538,148539,148541,148543,148545,148547,148549],{"class":94,"line":95},[92,148540,30718],{"class":98},[92,148542,147354],{"class":102},[92,148544,30373],{"class":98},[92,148546,147359],{"class":102},[92,148548,31364],{"class":98},[92,148550,147364],{"class":102},[92,148552,148553,148555,148557,148559],{"class":94,"line":11},[92,148554,30718],{"class":98},[92,148556,147213],{"class":102},[92,148558,30373],{"class":98},[92,148560,147218],{"class":102},[92,148562,148563],{"class":94,"line":1158},[92,148564,2379],{"emptyLinePlaceholder":17},[92,148566,148567,148569,148571],{"class":94,"line":1173},[92,148568,148440],{"class":102},[92,148570,148],{"class":98},[92,148572,55427],{"class":102},[92,148574,148575,148577,148579,148581,148584,148586,148588,148590,148592],{"class":94,"line":1179},[92,148576,148360],{"class":102},[92,148578,147972],{"class":207},[92,148580,51417],{"class":102},[92,148582,148583],{"class":207},"\"2024-10-01\"",[92,148585,12415],{"class":102},[92,148587,84064],{"class":207},[92,148589,51417],{"class":102},[92,148591,92003],{"class":151},[92,148593,4909],{"class":102},[92,148595,148596,148598,148600,148602,148605,148607,148609,148611,148614],{"class":94,"line":1193},[92,148597,148360],{"class":102},[92,148599,147972],{"class":207},[92,148601,51417],{"class":102},[92,148603,148604],{"class":207},"\"2024-10-02\"",[92,148606,12415],{"class":102},[92,148608,84064],{"class":207},[92,148610,51417],{"class":102},[92,148612,148613],{"class":151},"1800",[92,148615,4909],{"class":102},[92,148617,148618,148620,148622,148624,148627,148629,148631,148633,148636],{"class":94,"line":1199},[92,148619,148360],{"class":102},[92,148621,147972],{"class":207},[92,148623,51417],{"class":102},[92,148625,148626],{"class":207},"\"2024-10-03\"",[92,148628,12415],{"class":102},[92,148630,84064],{"class":207},[92,148632,51417],{"class":102},[92,148634,148635],{"class":151},"1500",[92,148637,4909],{"class":102},[92,148639,148640,148642,148644,148646,148649,148651,148653,148655,148658],{"class":94,"line":1290},[92,148641,148360],{"class":102},[92,148643,147972],{"class":207},[92,148645,51417],{"class":102},[92,148647,148648],{"class":207},"\"2024-10-04\"",[92,148650,12415],{"class":102},[92,148652,84064],{"class":207},[92,148654,51417],{"class":102},[92,148656,148657],{"class":151},"2100",[92,148659,4909],{"class":102},[92,148661,148662,148664,148666,148668,148671,148673,148675,148677,148680],{"class":94,"line":1296},[92,148663,148360],{"class":102},[92,148665,147972],{"class":207},[92,148667,51417],{"class":102},[92,148669,148670],{"class":207},"\"2024-10-05\"",[92,148672,12415],{"class":102},[92,148674,84064],{"class":207},[92,148676,51417],{"class":102},[92,148678,148679],{"class":151},"2600",[92,148681,4909],{"class":102},[92,148683,148684],{"class":94,"line":1308},[92,148685,33227],{"class":102},[92,148687,148688],{"class":94,"line":1591},[92,148689,2379],{"emptyLinePlaceholder":17},[92,148691,148692,148694,148696,148699,148701,148703,148705,148707,148709],{"class":94,"line":1596},[92,148693,147775],{"class":102},[92,148695,148],{"class":98},[92,148697,148698],{"class":102}," [item[",[92,148700,147972],{"class":207},[92,148702,4422],{"class":102},[92,148704,3004],{"class":98},[92,148706,148184],{"class":102},[92,148708,26024],{"class":98},[92,148710,148711],{"class":102}," sales]\n",[92,148713,148714,148717,148719,148721,148723,148725,148727,148729,148731],{"class":94,"line":1602},[92,148715,148716],{"class":102},"amounts ",[92,148718,148],{"class":98},[92,148720,148698],{"class":102},[92,148722,84064],{"class":207},[92,148724,4422],{"class":102},[92,148726,3004],{"class":98},[92,148728,148184],{"class":102},[92,148730,26024],{"class":98},[92,148732,148711],{"class":102},[92,148734,148735],{"class":94,"line":1607},[92,148736,2379],{"emptyLinePlaceholder":17},[92,148738,148739,148741,148743],{"class":94,"line":1621},[92,148740,147227],{"class":102},[92,148742,148],{"class":98},[92,148744,147232],{"class":102},[92,148746,148747],{"class":94,"line":1626},[92,148748,147816],{"class":102},[92,148750,148751],{"class":94,"line":1632},[92,148752,147624],{"class":102},[92,148754,148755,148757,148759,148761],{"class":94,"line":1653},[92,148756,147629],{"class":5196},[92,148758,148],{"class":98},[92,148760,147270],{"class":207},[92,148762,31447],{"class":102},[92,148764,148765,148767,148769],{"class":94,"line":1658},[92,148766,147640],{"class":5196},[92,148768,148],{"class":98},[92,148770,148771],{"class":102},"amounts,\n",[92,148773,148774,148776,148778,148780],{"class":94,"line":1672},[92,148775,147669],{"class":5196},[92,148777,148],{"class":98},[92,148779,31457],{"class":151},[92,148781,31447],{"class":102},[92,148783,148784,148786,148788,148790,148792,148794,148796],{"class":94,"line":1677},[92,148785,147680],{"class":5196},[92,148787,148],{"class":98},[92,148789,147685],{"class":102},[92,148791,147688],{"class":5196},[92,148793,148],{"class":98},[92,148795,31457],{"class":151},[92,148797,38028],{"class":102},[92,148799,148800],{"class":94,"line":1706},[92,148801,109],{"class":102},[92,148803,148804],{"class":94,"line":1711},[92,148805,147443],{"class":102},[92,148807,148808,148810,148812,148814,148816,148818,148821],{"class":94,"line":1728},[92,148809,147448],{"class":5196},[92,148811,148],{"class":98},[92,148813,147453],{"class":102},[92,148815,51387],{"class":5196},[92,148817,148],{"class":98},[92,148819,148820],{"class":207},"\"每日销售额\"",[92,148822,38028],{"class":102},[92,148824,148825,148827,148829,148831,148833,148835,148837],{"class":94,"line":1733},[92,148826,147467],{"class":5196},[92,148828,148],{"class":98},[92,148830,147472],{"class":102},[92,148832,79790],{"class":5196},[92,148834,148],{"class":98},[92,148836,147479],{"class":207},[92,148838,38028],{"class":102},[92,148840,148841,148843,148845,148847,148849,148851,148853],{"class":94,"line":1738},[92,148842,147486],{"class":5196},[92,148844,148],{"class":98},[92,148846,147472],{"class":102},[92,148848,79790],{"class":5196},[92,148850,148],{"class":98},[92,148852,147497],{"class":207},[92,148854,38028],{"class":102},[92,148856,148857,148859,148861,148863,148865,148867,148869],{"class":94,"line":1743},[92,148858,147504],{"class":5196},[92,148860,148],{"class":98},[92,148862,147509],{"class":102},[92,148864,147512],{"class":5196},[92,148866,148],{"class":98},[92,148868,147517],{"class":207},[92,148870,38028],{"class":102},[92,148872,148873,148876,148878],{"class":94,"line":1757},[92,148874,148875],{"class":5196},"    datazoom_opts",[92,148877,148],{"class":98},[92,148879,148880],{"class":102},"[opts.DataZoomOpts()],\n",[92,148882,148883],{"class":94,"line":1762},[92,148884,109],{"class":102},[92,148886,148887,148889,148892],{"class":94,"line":2556},[92,148888,147299],{"class":102},[92,148890,148891],{"class":207},"\"daily_sales.html\"",[92,148893,109],{"class":102},[38,148895,148896,148899],{},[89,148897,148898],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[33,148901,148903],{"id":148902},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[38,148905,148906],{},"如果数据结构如下：",[83,148908,148910],{"className":30359,"code":148909,"language":30361,"meta":10,"style":10},"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",[89,148911,148912,148920,148928,148950,148971,148976,148983,149003,149023,149027],{"__ignoreMap":10},[92,148913,148914,148916,148918],{"class":94,"line":95},[92,148915,101633],{"class":102},[92,148917,148],{"class":98},[92,148919,15552],{"class":102},[92,148921,148922,148925],{"class":94,"line":11},[92,148923,148924],{"class":207},"    \"北京\"",[92,148926,148927],{"class":102},": [\n",[92,148929,148930,148932,148934,148936,148939,148941,148944,148946,148948],{"class":94,"line":1158},[92,148931,4896],{"class":102},[92,148933,147972],{"class":207},[92,148935,51417],{"class":102},[92,148937,148938],{"class":207},"\"2024-01-01\"",[92,148940,12415],{"class":102},[92,148942,148943],{"class":207},"\"confirm\"",[92,148945,51417],{"class":102},[92,148947,549],{"class":151},[92,148949,4909],{"class":102},[92,148951,148952,148954,148956,148958,148961,148963,148965,148967,148969],{"class":94,"line":1173},[92,148953,4896],{"class":102},[92,148955,147972],{"class":207},[92,148957,51417],{"class":102},[92,148959,148960],{"class":207},"\"2024-01-02\"",[92,148962,12415],{"class":102},[92,148964,148943],{"class":207},[92,148966,51417],{"class":102},[92,148968,601],{"class":151},[92,148970,4909],{"class":102},[92,148972,148973],{"class":94,"line":1179},[92,148974,148975],{"class":102},"    ],\n",[92,148977,148978,148981],{"class":94,"line":1193},[92,148979,148980],{"class":207},"    \"上海\"",[92,148982,148927],{"class":102},[92,148984,148985,148987,148989,148991,148993,148995,148997,148999,149001],{"class":94,"line":1199},[92,148986,4896],{"class":102},[92,148988,147972],{"class":207},[92,148990,51417],{"class":102},[92,148992,148938],{"class":207},[92,148994,12415],{"class":102},[92,148996,148943],{"class":207},[92,148998,51417],{"class":102},[92,149000,498],{"class":151},[92,149002,4909],{"class":102},[92,149004,149005,149007,149009,149011,149013,149015,149017,149019,149021],{"class":94,"line":1290},[92,149006,4896],{"class":102},[92,149008,147972],{"class":207},[92,149010,51417],{"class":102},[92,149012,148960],{"class":207},[92,149014,12415],{"class":102},[92,149016,148943],{"class":207},[92,149018,51417],{"class":102},[92,149020,626],{"class":151},[92,149022,4909],{"class":102},[92,149024,149025],{"class":94,"line":1296},[92,149026,148975],{"class":102},[92,149028,149029],{"class":94,"line":1308},[92,149030,1544],{"class":102},[38,149032,149033],{},"绘制多地区趋势：",[83,149035,149037],{"className":30359,"code":149036,"language":30361,"meta":10,"style":10},"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",[89,149038,149039,149053,149063,149067,149092,149096,149104,149108,149112,149124,149146,149159,149163,149167,149184,149200,149204],{"__ignoreMap":10},[92,149040,149041,149043,149045,149047,149049,149051],{"class":94,"line":95},[92,149042,30718],{"class":98},[92,149044,147354],{"class":102},[92,149046,30373],{"class":98},[92,149048,147359],{"class":102},[92,149050,31364],{"class":98},[92,149052,147364],{"class":102},[92,149054,149055,149057,149059,149061],{"class":94,"line":11},[92,149056,30718],{"class":98},[92,149058,147213],{"class":102},[92,149060,30373],{"class":98},[92,149062,147218],{"class":102},[92,149064,149065],{"class":94,"line":1158},[92,149066,2379],{"emptyLinePlaceholder":17},[92,149068,149069,149071,149073,149075,149077,149079,149081,149083,149085,149088,149090],{"class":94,"line":1173},[92,149070,147775],{"class":102},[92,149072,148],{"class":98},[92,149074,148698],{"class":102},[92,149076,147972],{"class":207},[92,149078,4422],{"class":102},[92,149080,3004],{"class":98},[92,149082,148184],{"class":102},[92,149084,26024],{"class":98},[92,149086,149087],{"class":102}," data[",[92,149089,69249],{"class":207},[92,149091,77507],{"class":102},[92,149093,149094],{"class":94,"line":1179},[92,149095,2379],{"emptyLinePlaceholder":17},[92,149097,149098,149100,149102],{"class":94,"line":1193},[92,149099,147227],{"class":102},[92,149101,148],{"class":98},[92,149103,147232],{"class":102},[92,149105,149106],{"class":94,"line":1199},[92,149107,147816],{"class":102},[92,149109,149110],{"class":94,"line":1290},[92,149111,2379],{"emptyLinePlaceholder":17},[92,149113,149114,149116,149119,149121],{"class":94,"line":1296},[92,149115,3004],{"class":98},[92,149117,149118],{"class":102}," city, records ",[92,149120,26024],{"class":98},[92,149122,149123],{"class":102}," data.items():\n",[92,149125,149126,149129,149131,149133,149135,149137,149139,149141,149143],{"class":94,"line":1308},[92,149127,149128],{"class":102},"    values ",[92,149130,148],{"class":98},[92,149132,148698],{"class":102},[92,149134,148943],{"class":207},[92,149136,4422],{"class":102},[92,149138,3004],{"class":98},[92,149140,148184],{"class":102},[92,149142,26024],{"class":98},[92,149144,149145],{"class":102}," records]\n",[92,149147,149148,149151,149153,149155,149157],{"class":94,"line":1591},[92,149149,149150],{"class":102},"    line.add_yaxis(city, values, ",[92,149152,147720],{"class":5196},[92,149154,148],{"class":98},[92,149156,31457],{"class":151},[92,149158,109],{"class":102},[92,149160,149161],{"class":94,"line":1596},[92,149162,2379],{"emptyLinePlaceholder":17},[92,149164,149165],{"class":94,"line":1602},[92,149166,147443],{"class":102},[92,149168,149169,149171,149173,149175,149177,149179,149182],{"class":94,"line":1607},[92,149170,147448],{"class":5196},[92,149172,148],{"class":98},[92,149174,147453],{"class":102},[92,149176,51387],{"class":5196},[92,149178,148],{"class":98},[92,149180,149181],{"class":207},"\"多地区趋势图\"",[92,149183,38028],{"class":102},[92,149185,149186,149188,149190,149192,149194,149196,149198],{"class":94,"line":1621},[92,149187,147504],{"class":5196},[92,149189,148],{"class":98},[92,149191,147509],{"class":102},[92,149193,147512],{"class":5196},[92,149195,148],{"class":98},[92,149197,147517],{"class":207},[92,149199,38028],{"class":102},[92,149201,149202],{"class":94,"line":1626},[92,149203,109],{"class":102},[92,149205,149206,149208,149211],{"class":94,"line":1632},[92,149207,147299],{"class":102},[92,149209,149210],{"class":207},"\"trend.html\"",[92,149212,109],{"class":102},[38,149214,149215],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[33,149217,149219],{"id":149218},"_1012-易错点","10.12 易错点",[46,149221,149222,149228,149234,149244,149250],{},[49,149223,149224,149227],{},[89,149225,149226],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[49,149229,149230,149233],{},[89,149231,149232],{},"render()"," 生成的是 HTML，不是图片。",[49,149235,149236,149237,149240,149241,28366],{},"JSON 字符串用 ",[89,149238,149239],{},"json.loads()","，JSON 文件用 ",[89,149242,149243],{},"json.load()",[49,149245,149246,149247,28366],{},"中文 JSON 保存时加 ",[89,149248,149249],{},"ensure_ascii=False",[49,149251,149252],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[33,149254,149256],{"id":149255},"_1013-本章练习","10.13 本章练习",[46,149258,149259,149262,149265,149268,149271],{},[49,149260,149261],{},"安装 pyecharts 并生成第一个折线图。",[49,149263,149264],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[49,149266,149267],{},"绘制两条折线，对比线上和线下销售额。",[49,149269,149270],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[49,149272,149273],{},"对含有空值的销售数据进行清洗后再绘图。",[5106,149275,149276],{},"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":10,"searchDepth":11,"depth":11,"links":149278},[149279,149280,149281,149282,149283,149284,149285,149286,149287,149288,149289,149290,149291],{"id":146895,"depth":11,"text":146896},{"id":146970,"depth":11,"text":146971},{"id":147149,"depth":11,"text":147150},{"id":147200,"depth":11,"text":147201},{"id":147334,"depth":11,"text":147335},{"id":147610,"depth":11,"text":147611},{"id":147736,"depth":11,"text":147737},{"id":147947,"depth":11,"text":147948},{"id":148318,"depth":11,"text":148319},{"id":148530,"depth":11,"text":148531},{"id":148902,"depth":11,"text":148903},{"id":149218,"depth":11,"text":149219},{"id":149255,"depth":11,"text":149256},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146887,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149298,"title":149299,"body":149300,"description":13,"extension":14,"meta":151660,"navigation":17,"path":151661,"seo":151662,"stem":151663,"__hash__":151664},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149301,"toc":151637},[149302,149305,149309,149312,149315,149391,149394,149485,149488,149492,149495,149539,149552,149556,149559,149626,149629,149633,149636,149720,149728,149732,149737,149878,149881,149892,149898,149904,150018,150022,150025,150028,150281,150284,150288,150291,150395,150398,150402,150553,150557,150564,150677,150681,150684,150790,150793,150797,150800,150831,150834,150939,150942,150946,150950,150960,151028,151032,151039,151103,151106,151110,151116,151212,151221,151225,151549,151558,151562,151590,151594,151634],[29,149303,149299],{"id":149304},"_11-面向对象基础",[33,149306,149308],{"id":149307},"_111-什么是面向对象","11.1 什么是面向对象",[38,149310,149311],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[38,149313,149314],{},"面向过程：",[83,149316,149318],{"className":30359,"code":149317,"language":30361,"meta":10,"style":10},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[89,149319,149320,149329,149337,149341,149351,149382,149386],{"__ignoreMap":10},[92,149321,149322,149324,149326],{"class":94,"line":95},[92,149323,146511],{"class":102},[92,149325,148],{"class":98},[92,149327,149328],{"class":207}," \"小明\"\n",[92,149330,149331,149333,149335],{"class":94,"line":11},[92,149332,146521],{"class":102},[92,149334,148],{"class":98},[92,149336,146526],{"class":151},[92,149338,149339],{"class":94,"line":1158},[92,149340,2379],{"emptyLinePlaceholder":17},[92,149342,149343,149345,149348],{"class":94,"line":1173},[92,149344,31928],{"class":98},[92,149346,149347],{"class":1942}," introduce",[92,149349,149350],{"class":102},"(name, age):\n",[92,149352,149353,149355,149357,149359,149362,149364,149366,149368,149371,149373,149375,149377,149380],{"class":94,"line":1179},[92,149354,31280],{"class":151},[92,149356,103],{"class":102},[92,149358,155],{"class":98},[92,149360,149361],{"class":207},"\"我叫",[92,149363,999],{"class":151},[92,149365,79790],{"class":102},[92,149367,1049],{"class":151},[92,149369,149370],{"class":207},"，今年",[92,149372,999],{"class":151},[92,149374,70201],{"class":102},[92,149376,1049],{"class":151},[92,149378,149379],{"class":207},"岁\"",[92,149381,109],{"class":102},[92,149383,149384],{"class":94,"line":1193},[92,149385,2379],{"emptyLinePlaceholder":17},[92,149387,149388],{"class":94,"line":1199},[92,149389,149390],{"class":102},"introduce(name, age)\n",[38,149392,149393],{},"面向对象：",[83,149395,149397],{"className":30359,"code":149396,"language":30361,"meta":10,"style":10},"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",[89,149398,149399,149407,149415,149444,149448,149452,149462,149471,149480],{"__ignoreMap":10},[92,149400,149401,149403,149405],{"class":94,"line":95},[92,149402,14674],{"class":98},[92,149404,7878],{"class":1942},[92,149406,3718],{"class":102},[92,149408,149409,149411,149413],{"class":94,"line":11},[92,149410,30782],{"class":98},[92,149412,149347],{"class":1942},[92,149414,30788],{"class":102},[92,149416,149417,149419,149421,149423,149425,149428,149430,149432,149434,149436,149438,149440,149442],{"class":94,"line":1158},[92,149418,32432],{"class":151},[92,149420,103],{"class":102},[92,149422,155],{"class":98},[92,149424,149361],{"class":207},[92,149426,149427],{"class":151},"{self",[92,149429,80281],{"class":102},[92,149431,1049],{"class":151},[92,149433,149370],{"class":207},[92,149435,149427],{"class":151},[92,149437,80293],{"class":102},[92,149439,1049],{"class":151},[92,149441,149379],{"class":207},[92,149443,109],{"class":102},[92,149445,149446],{"class":94,"line":1173},[92,149447,2379],{"emptyLinePlaceholder":17},[92,149449,149450],{"class":94,"line":1179},[92,149451,2379],{"emptyLinePlaceholder":17},[92,149453,149454,149457,149459],{"class":94,"line":1193},[92,149455,149456],{"class":102},"student ",[92,149458,148],{"class":98},[92,149460,149461],{"class":102}," Student()\n",[92,149463,149464,149467,149469],{"class":94,"line":1199},[92,149465,149466],{"class":102},"student.name ",[92,149468,148],{"class":98},[92,149470,149328],{"class":207},[92,149472,149473,149476,149478],{"class":94,"line":1290},[92,149474,149475],{"class":102},"student.age ",[92,149477,148],{"class":98},[92,149479,146526],{"class":151},[92,149481,149482],{"class":94,"line":1296},[92,149483,149484],{"class":102},"student.introduce()\n",[38,149486,149487],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[33,149489,149491],{"id":149490},"_112-类和对象","11.2 类和对象",[38,149493,149494],{},"类是模板，对象是根据模板创建出来的具体实例。",[83,149496,149498],{"className":30359,"code":149497,"language":30361,"meta":10,"style":10},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[89,149499,149500,149508,149513,149517,149521,149530],{"__ignoreMap":10},[92,149501,149502,149504,149506],{"class":94,"line":95},[92,149503,14674],{"class":98},[92,149505,7878],{"class":1942},[92,149507,3718],{"class":102},[92,149509,149510],{"class":94,"line":11},[92,149511,149512],{"class":98},"    pass\n",[92,149514,149515],{"class":94,"line":1158},[92,149516,2379],{"emptyLinePlaceholder":17},[92,149518,149519],{"class":94,"line":1173},[92,149520,2379],{"emptyLinePlaceholder":17},[92,149522,149523,149526,149528],{"class":94,"line":1179},[92,149524,149525],{"class":102},"student1 ",[92,149527,148],{"class":98},[92,149529,149461],{"class":102},[92,149531,149532,149535,149537],{"class":94,"line":1193},[92,149533,149534],{"class":102},"student2 ",[92,149536,148],{"class":98},[92,149538,149461],{"class":102},[38,149540,149541,149544,149545,100993,149548,149551],{},[89,149542,149543],{},"Student"," 是类，",[89,149546,149547],{},"student1",[89,149549,149550],{},"student2"," 是对象。",[33,149553,149555],{"id":149554},"_113-属性","11.3 属性",[38,149557,149558],{},"属性是对象保存的数据。",[83,149560,149562],{"className":30359,"code":149561,"language":30361,"meta":10,"style":10},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[89,149563,149564,149572,149576,149580,149584,149592,149600,149608,149612,149619],{"__ignoreMap":10},[92,149565,149566,149568,149570],{"class":94,"line":95},[92,149567,14674],{"class":98},[92,149569,7878],{"class":1942},[92,149571,3718],{"class":102},[92,149573,149574],{"class":94,"line":11},[92,149575,149512],{"class":98},[92,149577,149578],{"class":94,"line":1158},[92,149579,2379],{"emptyLinePlaceholder":17},[92,149581,149582],{"class":94,"line":1173},[92,149583,2379],{"emptyLinePlaceholder":17},[92,149585,149586,149588,149590],{"class":94,"line":1179},[92,149587,149456],{"class":102},[92,149589,148],{"class":98},[92,149591,149461],{"class":102},[92,149593,149594,149596,149598],{"class":94,"line":1193},[92,149595,149466],{"class":102},[92,149597,148],{"class":98},[92,149599,149328],{"class":207},[92,149601,149602,149604,149606],{"class":94,"line":1199},[92,149603,149475],{"class":102},[92,149605,148],{"class":98},[92,149607,146526],{"class":151},[92,149609,149610],{"class":94,"line":1290},[92,149611,2379],{"emptyLinePlaceholder":17},[92,149613,149614,149616],{"class":94,"line":1296},[92,149615,30396],{"class":151},[92,149617,149618],{"class":102},"(student.name)\n",[92,149620,149621,149623],{"class":94,"line":1308},[92,149622,30396],{"class":151},[92,149624,149625],{"class":102},"(student.age)\n",[38,149627,149628],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[33,149630,149632],{"id":149631},"_114-方法","11.4 方法",[38,149634,149635],{},"类中的函数叫方法。",[83,149637,149638],{"className":30359,"code":149396,"language":30361,"meta":10,"style":10},[89,149639,149640,149648,149656,149684,149688,149692,149700,149708,149716],{"__ignoreMap":10},[92,149641,149642,149644,149646],{"class":94,"line":95},[92,149643,14674],{"class":98},[92,149645,7878],{"class":1942},[92,149647,3718],{"class":102},[92,149649,149650,149652,149654],{"class":94,"line":11},[92,149651,30782],{"class":98},[92,149653,149347],{"class":1942},[92,149655,30788],{"class":102},[92,149657,149658,149660,149662,149664,149666,149668,149670,149672,149674,149676,149678,149680,149682],{"class":94,"line":1158},[92,149659,32432],{"class":151},[92,149661,103],{"class":102},[92,149663,155],{"class":98},[92,149665,149361],{"class":207},[92,149667,149427],{"class":151},[92,149669,80281],{"class":102},[92,149671,1049],{"class":151},[92,149673,149370],{"class":207},[92,149675,149427],{"class":151},[92,149677,80293],{"class":102},[92,149679,1049],{"class":151},[92,149681,149379],{"class":207},[92,149683,109],{"class":102},[92,149685,149686],{"class":94,"line":1173},[92,149687,2379],{"emptyLinePlaceholder":17},[92,149689,149690],{"class":94,"line":1179},[92,149691,2379],{"emptyLinePlaceholder":17},[92,149693,149694,149696,149698],{"class":94,"line":1193},[92,149695,149456],{"class":102},[92,149697,148],{"class":98},[92,149699,149461],{"class":102},[92,149701,149702,149704,149706],{"class":94,"line":1199},[92,149703,149466],{"class":102},[92,149705,148],{"class":98},[92,149707,149328],{"class":207},[92,149709,149710,149712,149714],{"class":94,"line":1290},[92,149711,149475],{"class":102},[92,149713,148],{"class":98},[92,149715,146526],{"class":151},[92,149717,149718],{"class":94,"line":1296},[92,149719,149484],{"class":102},[38,149721,149722,149724,149725,149727],{},[89,149723,30804],{}," 表示当前对象。调用方法时不需要手动传入 ",[89,149726,30804],{},"，Python 会自动传。",[33,149729,149731],{"id":149730},"_115-构造方法__init__","11.5 构造方法__init__",[38,149733,149734,149736],{},[89,149735,30810],{}," 在对象创建时自动执行，用于初始化属性。",[83,149738,149740],{"className":30359,"code":149739,"language":30361,"meta":10,"style":10},"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",[89,149741,149742,149750,149759,149771,149783,149794,149798,149806,149844,149848,149852,149874],{"__ignoreMap":10},[92,149743,149744,149746,149748],{"class":94,"line":95},[92,149745,14674],{"class":98},[92,149747,7878],{"class":1942},[92,149749,3718],{"class":102},[92,149751,149752,149754,149756],{"class":94,"line":11},[92,149753,30782],{"class":98},[92,149755,30785],{"class":151},[92,149757,149758],{"class":102},"(self, name, age, score):\n",[92,149760,149761,149763,149766,149768],{"class":94,"line":1158},[92,149762,30826],{"class":151},[92,149764,149765],{"class":102},".name ",[92,149767,148],{"class":98},[92,149769,149770],{"class":102}," name\n",[92,149772,149773,149775,149778,149780],{"class":94,"line":1173},[92,149774,30826],{"class":151},[92,149776,149777],{"class":102},".age ",[92,149779,148],{"class":98},[92,149781,149782],{"class":102}," age\n",[92,149784,149785,149787,149790,149792],{"class":94,"line":1179},[92,149786,30826],{"class":151},[92,149788,149789],{"class":102},".score ",[92,149791,148],{"class":98},[92,149793,1558],{"class":102},[92,149795,149796],{"class":94,"line":1193},[92,149797,2379],{"emptyLinePlaceholder":17},[92,149799,149800,149802,149804],{"class":94,"line":1199},[92,149801,30782],{"class":98},[92,149803,149347],{"class":1942},[92,149805,30788],{"class":102},[92,149807,149808,149810,149812,149814,149816,149818,149820,149822,149824,149826,149828,149830,149833,149835,149838,149840,149842],{"class":94,"line":1290},[92,149809,32432],{"class":151},[92,149811,103],{"class":102},[92,149813,155],{"class":98},[92,149815,149361],{"class":207},[92,149817,149427],{"class":151},[92,149819,80281],{"class":102},[92,149821,1049],{"class":151},[92,149823,149370],{"class":207},[92,149825,149427],{"class":151},[92,149827,80293],{"class":102},[92,149829,1049],{"class":151},[92,149831,149832],{"class":207},"岁，成绩",[92,149834,149427],{"class":151},[92,149836,149837],{"class":102},".score",[92,149839,1049],{"class":151},[92,149841,354],{"class":207},[92,149843,109],{"class":102},[92,149845,149846],{"class":94,"line":1296},[92,149847,2379],{"emptyLinePlaceholder":17},[92,149849,149850],{"class":94,"line":1308},[92,149851,2379],{"emptyLinePlaceholder":17},[92,149853,149854,149856,149858,149861,149864,149866,149868,149870,149872],{"class":94,"line":1591},[92,149855,149456],{"class":102},[92,149857,148],{"class":98},[92,149859,149860],{"class":102}," Student(",[92,149862,149863],{"class":207},"\"小明\"",[92,149865,12415],{"class":102},[92,149867,753],{"class":151},[92,149869,12415],{"class":102},[92,149871,1092],{"class":151},[92,149873,109],{"class":102},[92,149875,149876],{"class":94,"line":1596},[92,149877,149484],{"class":102},[38,149879,149880],{},"构造方法的好处：",[46,149882,149883,149886,149889],{},[49,149884,149885],{},"创建对象时必须提供必要数据。",[49,149887,149888],{},"属性初始化集中，不容易漏。",[49,149890,149891],{},"对象状态更完整。",[33,149893,149895,149896],{"id":149894},"_116-str","11.6 ",[252,149897,1278],{},[38,149899,149900,149901,28366],{},"直接打印对象时，默认输出不直观。可以定义 ",[89,149902,149903],{},"__str__",[83,149905,149907],{"className":30359,"code":149906,"language":30361,"meta":10,"style":10},"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",[89,149908,149909,149917,149926,149936,149946,149950,149959,149987,149991,149995,150011],{"__ignoreMap":10},[92,149910,149911,149913,149915],{"class":94,"line":95},[92,149912,14674],{"class":98},[92,149914,7878],{"class":1942},[92,149916,3718],{"class":102},[92,149918,149919,149921,149923],{"class":94,"line":11},[92,149920,30782],{"class":98},[92,149922,30785],{"class":151},[92,149924,149925],{"class":102},"(self, name, age):\n",[92,149927,149928,149930,149932,149934],{"class":94,"line":1158},[92,149929,30826],{"class":151},[92,149931,149765],{"class":102},[92,149933,148],{"class":98},[92,149935,149770],{"class":102},[92,149937,149938,149940,149942,149944],{"class":94,"line":1173},[92,149939,30826],{"class":151},[92,149941,149777],{"class":102},[92,149943,148],{"class":98},[92,149945,149782],{"class":102},[92,149947,149948],{"class":94,"line":1179},[92,149949,2379],{"emptyLinePlaceholder":17},[92,149951,149952,149954,149957],{"class":94,"line":1193},[92,149953,30782],{"class":98},[92,149955,149956],{"class":151}," __str__",[92,149958,30788],{"class":102},[92,149960,149961,149963,149966,149969,149971,149973,149975,149978,149980,149982,149984],{"class":94,"line":1199},[92,149962,14732],{"class":98},[92,149964,149965],{"class":98}," f",[92,149967,149968],{"class":207},"\"Student(name=",[92,149970,149427],{"class":151},[92,149972,80281],{"class":102},[92,149974,1049],{"class":151},[92,149976,149977],{"class":207},", age=",[92,149979,149427],{"class":151},[92,149981,80293],{"class":102},[92,149983,1049],{"class":151},[92,149985,149986],{"class":207},")\"\n",[92,149988,149989],{"class":94,"line":1290},[92,149990,2379],{"emptyLinePlaceholder":17},[92,149992,149993],{"class":94,"line":1296},[92,149994,2379],{"emptyLinePlaceholder":17},[92,149996,149997,149999,150001,150003,150005,150007,150009],{"class":94,"line":1308},[92,149998,149456],{"class":102},[92,150000,148],{"class":98},[92,150002,149860],{"class":102},[92,150004,149863],{"class":207},[92,150006,12415],{"class":102},[92,150008,753],{"class":151},[92,150010,109],{"class":102},[92,150012,150013,150015],{"class":94,"line":1591},[92,150014,30396],{"class":151},[92,150016,150017],{"class":102},"(student)\n",[33,150019,150021],{"id":150020},"_117-封装","11.7 封装",[38,150023,150024],{},"封装就是把数据和方法放到类中，并控制访问方式。",[38,150026,150027],{},"Python 中以双下划线开头的属性通常视为私有属性。",[83,150029,150031],{"className":30359,"code":150030,"language":30361,"meta":10,"style":10},"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",[89,150032,150033,150042,150051,150063,150075,150079,150088,150097,150101,150111,150124,150135,150140,150151,150155,150164,150176,150187,150191,150204,150215,150219,150230,150234,150238,150256,150265,150274],{"__ignoreMap":10},[92,150034,150035,150037,150040],{"class":94,"line":95},[92,150036,14674],{"class":98},[92,150038,150039],{"class":1942}," Account",[92,150041,3718],{"class":102},[92,150043,150044,150046,150048],{"class":94,"line":11},[92,150045,30782],{"class":98},[92,150047,30785],{"class":151},[92,150049,150050],{"class":102},"(self, owner, balance):\n",[92,150052,150053,150055,150058,150060],{"class":94,"line":1158},[92,150054,30826],{"class":151},[92,150056,150057],{"class":102},".owner ",[92,150059,148],{"class":98},[92,150061,150062],{"class":102}," owner\n",[92,150064,150065,150067,150070,150072],{"class":94,"line":1173},[92,150066,30826],{"class":151},[92,150068,150069],{"class":102},".__balance ",[92,150071,148],{"class":98},[92,150073,150074],{"class":102}," balance\n",[92,150076,150077],{"class":94,"line":1179},[92,150078,2379],{"emptyLinePlaceholder":17},[92,150080,150081,150083,150086],{"class":94,"line":1193},[92,150082,30782],{"class":98},[92,150084,150085],{"class":1942}," get_balance",[92,150087,30788],{"class":102},[92,150089,150090,150092,150094],{"class":94,"line":1199},[92,150091,14732],{"class":98},[92,150093,38854],{"class":151},[92,150095,150096],{"class":102},".__balance\n",[92,150098,150099],{"class":94,"line":1290},[92,150100,2379],{"emptyLinePlaceholder":17},[92,150102,150103,150105,150108],{"class":94,"line":1296},[92,150104,30782],{"class":98},[92,150106,150107],{"class":1942}," deposit",[92,150109,150110],{"class":102},"(self, money):\n",[92,150112,150113,150115,150118,150120,150122],{"class":94,"line":1308},[92,150114,2476],{"class":98},[92,150116,150117],{"class":102}," money ",[92,150119,1567],{"class":98},[92,150121,4072],{"class":151},[92,150123,3718],{"class":102},[92,150125,150126,150128,150130,150133],{"class":94,"line":1591},[92,150127,34631],{"class":151},[92,150129,103],{"class":102},[92,150131,150132],{"class":207},"\"存款金额必须大于0\"",[92,150134,109],{"class":102},[92,150136,150137],{"class":94,"line":1596},[92,150138,150139],{"class":98},"            return\n",[92,150141,150142,150144,150146,150148],{"class":94,"line":1602},[92,150143,30826],{"class":151},[92,150145,150069],{"class":102},[92,150147,9457],{"class":98},[92,150149,150150],{"class":102}," money\n",[92,150152,150153],{"class":94,"line":1607},[92,150154,2379],{"emptyLinePlaceholder":17},[92,150156,150157,150159,150162],{"class":94,"line":1621},[92,150158,30782],{"class":98},[92,150160,150161],{"class":1942}," withdraw",[92,150163,150110],{"class":102},[92,150165,150166,150168,150170,150172,150174],{"class":94,"line":1626},[92,150167,2476],{"class":98},[92,150169,150117],{"class":102},[92,150171,1567],{"class":98},[92,150173,4072],{"class":151},[92,150175,3718],{"class":102},[92,150177,150178,150180,150182,150185],{"class":94,"line":1632},[92,150179,34631],{"class":151},[92,150181,103],{"class":102},[92,150183,150184],{"class":207},"\"取款金额必须大于0\"",[92,150186,109],{"class":102},[92,150188,150189],{"class":94,"line":1653},[92,150190,150139],{"class":98},[92,150192,150193,150195,150197,150199,150201],{"class":94,"line":1658},[92,150194,2476],{"class":98},[92,150196,150117],{"class":102},[92,150198,1063],{"class":98},[92,150200,38854],{"class":151},[92,150202,150203],{"class":102},".__balance:\n",[92,150205,150206,150208,150210,150213],{"class":94,"line":1672},[92,150207,34631],{"class":151},[92,150209,103],{"class":102},[92,150211,150212],{"class":207},"\"余额不足\"",[92,150214,109],{"class":102},[92,150216,150217],{"class":94,"line":1677},[92,150218,150139],{"class":98},[92,150220,150221,150223,150225,150228],{"class":94,"line":1706},[92,150222,30826],{"class":151},[92,150224,150069],{"class":102},[92,150226,150227],{"class":98},"-=",[92,150229,150150],{"class":102},[92,150231,150232],{"class":94,"line":1711},[92,150233,2379],{"emptyLinePlaceholder":17},[92,150235,150236],{"class":94,"line":1728},[92,150237,2379],{"emptyLinePlaceholder":17},[92,150239,150240,150243,150245,150248,150250,150252,150254],{"class":94,"line":1733},[92,150241,150242],{"class":102},"account ",[92,150244,148],{"class":98},[92,150246,150247],{"class":102}," Account(",[92,150249,149863],{"class":207},[92,150251,12415],{"class":102},[92,150253,6390],{"class":151},[92,150255,109],{"class":102},[92,150257,150258,150261,150263],{"class":94,"line":1738},[92,150259,150260],{"class":102},"account.deposit(",[92,150262,1701],{"class":151},[92,150264,109],{"class":102},[92,150266,150267,150270,150272],{"class":94,"line":1743},[92,150268,150269],{"class":102},"account.withdraw(",[92,150271,414],{"class":151},[92,150273,109],{"class":102},[92,150275,150276,150278],{"class":94,"line":1757},[92,150277,30396],{"class":151},[92,150279,150280],{"class":102},"(account.get_balance())\n",[38,150282,150283],{},"封装的意义是避免外部随意修改内部状态。",[33,150285,150287],{"id":150286},"_118-继承","11.8 继承",[38,150289,150290],{},"继承可以让子类复用父类的属性和方法。",[83,150292,150294],{"className":30359,"code":150293,"language":30361,"meta":10,"style":10},"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",[89,150295,150296,150305,150314,150325,150329,150333,150347,150356,150367,150371,150375,150385,150390],{"__ignoreMap":10},[92,150297,150298,150300,150303],{"class":94,"line":95},[92,150299,14674],{"class":98},[92,150301,150302],{"class":1942}," Animal",[92,150304,3718],{"class":102},[92,150306,150307,150309,150312],{"class":94,"line":11},[92,150308,30782],{"class":98},[92,150310,150311],{"class":1942}," eat",[92,150313,30788],{"class":102},[92,150315,150316,150318,150320,150323],{"class":94,"line":1158},[92,150317,32432],{"class":151},[92,150319,103],{"class":102},[92,150321,150322],{"class":207},"\"吃东西\"",[92,150324,109],{"class":102},[92,150326,150327],{"class":94,"line":1173},[92,150328,2379],{"emptyLinePlaceholder":17},[92,150330,150331],{"class":94,"line":1179},[92,150332,2379],{"emptyLinePlaceholder":17},[92,150334,150335,150337,150340,150342,150345],{"class":94,"line":1193},[92,150336,14674],{"class":98},[92,150338,150339],{"class":1942}," Dog",[92,150341,103],{"class":102},[92,150343,150344],{"class":1942},"Animal",[92,150346,30767],{"class":102},[92,150348,150349,150351,150354],{"class":94,"line":1199},[92,150350,30782],{"class":98},[92,150352,150353],{"class":1942}," bark",[92,150355,30788],{"class":102},[92,150357,150358,150360,150362,150365],{"class":94,"line":1290},[92,150359,32432],{"class":151},[92,150361,103],{"class":102},[92,150363,150364],{"class":207},"\"汪汪\"",[92,150366,109],{"class":102},[92,150368,150369],{"class":94,"line":1296},[92,150370,2379],{"emptyLinePlaceholder":17},[92,150372,150373],{"class":94,"line":1308},[92,150374,2379],{"emptyLinePlaceholder":17},[92,150376,150377,150380,150382],{"class":94,"line":1591},[92,150378,150379],{"class":102},"dog ",[92,150381,148],{"class":98},[92,150383,150384],{"class":102}," Dog()\n",[92,150386,150387],{"class":94,"line":1596},[92,150388,150389],{"class":102},"dog.eat()\n",[92,150391,150392],{"class":94,"line":1602},[92,150393,150394],{"class":102},"dog.bark()\n",[38,150396,150397],{},"子类可以扩展新方法，也可以重写父类方法。",[33,150399,150401],{"id":150400},"_119-方法重写","11.9 方法重写",[83,150403,150405],{"className":30359,"code":150404,"language":30361,"meta":10,"style":10},"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",[89,150406,150407,150415,150424,150435,150439,150443,150455,150463,150473,150477,150481,150494,150502,150513,150517,150521,150529,150539,150543,150548],{"__ignoreMap":10},[92,150408,150409,150411,150413],{"class":94,"line":95},[92,150410,14674],{"class":98},[92,150412,150302],{"class":1942},[92,150414,3718],{"class":102},[92,150416,150417,150419,150422],{"class":94,"line":11},[92,150418,30782],{"class":98},[92,150420,150421],{"class":1942}," speak",[92,150423,30788],{"class":102},[92,150425,150426,150428,150430,150433],{"class":94,"line":1158},[92,150427,32432],{"class":151},[92,150429,103],{"class":102},[92,150431,150432],{"class":207},"\"动物叫\"",[92,150434,109],{"class":102},[92,150436,150437],{"class":94,"line":1173},[92,150438,2379],{"emptyLinePlaceholder":17},[92,150440,150441],{"class":94,"line":1179},[92,150442,2379],{"emptyLinePlaceholder":17},[92,150444,150445,150447,150449,150451,150453],{"class":94,"line":1193},[92,150446,14674],{"class":98},[92,150448,150339],{"class":1942},[92,150450,103],{"class":102},[92,150452,150344],{"class":1942},[92,150454,30767],{"class":102},[92,150456,150457,150459,150461],{"class":94,"line":1199},[92,150458,30782],{"class":98},[92,150460,150421],{"class":1942},[92,150462,30788],{"class":102},[92,150464,150465,150467,150469,150471],{"class":94,"line":1290},[92,150466,32432],{"class":151},[92,150468,103],{"class":102},[92,150470,150364],{"class":207},[92,150472,109],{"class":102},[92,150474,150475],{"class":94,"line":1296},[92,150476,2379],{"emptyLinePlaceholder":17},[92,150478,150479],{"class":94,"line":1308},[92,150480,2379],{"emptyLinePlaceholder":17},[92,150482,150483,150485,150488,150490,150492],{"class":94,"line":1591},[92,150484,14674],{"class":98},[92,150486,150487],{"class":1942}," Cat",[92,150489,103],{"class":102},[92,150491,150344],{"class":1942},[92,150493,30767],{"class":102},[92,150495,150496,150498,150500],{"class":94,"line":1596},[92,150497,30782],{"class":98},[92,150499,150421],{"class":1942},[92,150501,30788],{"class":102},[92,150503,150504,150506,150508,150511],{"class":94,"line":1602},[92,150505,32432],{"class":151},[92,150507,103],{"class":102},[92,150509,150510],{"class":207},"\"喵喵\"",[92,150512,109],{"class":102},[92,150514,150515],{"class":94,"line":1607},[92,150516,2379],{"emptyLinePlaceholder":17},[92,150518,150519],{"class":94,"line":1621},[92,150520,2379],{"emptyLinePlaceholder":17},[92,150522,150523,150525,150527],{"class":94,"line":1626},[92,150524,150379],{"class":102},[92,150526,148],{"class":98},[92,150528,150384],{"class":102},[92,150530,150531,150534,150536],{"class":94,"line":1632},[92,150532,150533],{"class":102},"cat ",[92,150535,148],{"class":98},[92,150537,150538],{"class":102}," Cat()\n",[92,150540,150541],{"class":94,"line":1653},[92,150542,2379],{"emptyLinePlaceholder":17},[92,150544,150545],{"class":94,"line":1658},[92,150546,150547],{"class":102},"dog.speak()\n",[92,150549,150550],{"class":94,"line":1672},[92,150551,150552],{"class":102},"cat.speak()\n",[33,150554,150556],{"id":150555},"_1110-super","11.10 super",[38,150558,150559,150560,150563],{},"子类可以通过 ",[89,150561,150562],{},"super()"," 调用父类方法。",[83,150565,150567],{"className":30359,"code":150566,"language":30361,"meta":10,"style":10},"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",[89,150568,150569,150577,150586,150596,150600,150604,150616,150625,150636,150646,150650,150654,150670],{"__ignoreMap":10},[92,150570,150571,150573,150575],{"class":94,"line":95},[92,150572,14674],{"class":98},[92,150574,15549],{"class":1942},[92,150576,3718],{"class":102},[92,150578,150579,150581,150583],{"class":94,"line":11},[92,150580,30782],{"class":98},[92,150582,30785],{"class":151},[92,150584,150585],{"class":102},"(self, name):\n",[92,150587,150588,150590,150592,150594],{"class":94,"line":1158},[92,150589,30826],{"class":151},[92,150591,149765],{"class":102},[92,150593,148],{"class":98},[92,150595,149770],{"class":102},[92,150597,150598],{"class":94,"line":1173},[92,150599,2379],{"emptyLinePlaceholder":17},[92,150601,150602],{"class":94,"line":1179},[92,150603,2379],{"emptyLinePlaceholder":17},[92,150605,150606,150608,150610,150612,150614],{"class":94,"line":1193},[92,150607,14674],{"class":98},[92,150609,7878],{"class":1942},[92,150611,103],{"class":102},[92,150613,19026],{"class":1942},[92,150615,30767],{"class":102},[92,150617,150618,150620,150622],{"class":94,"line":1199},[92,150619,30782],{"class":98},[92,150621,30785],{"class":151},[92,150623,150624],{"class":102},"(self, name, score):\n",[92,150626,150627,150629,150631,150633],{"class":94,"line":1290},[92,150628,30798],{"class":151},[92,150630,17241],{"class":102},[92,150632,30810],{"class":151},[92,150634,150635],{"class":102},"(name)\n",[92,150637,150638,150640,150642,150644],{"class":94,"line":1296},[92,150639,30826],{"class":151},[92,150641,149789],{"class":102},[92,150643,148],{"class":98},[92,150645,1558],{"class":102},[92,150647,150648],{"class":94,"line":1308},[92,150649,2379],{"emptyLinePlaceholder":17},[92,150651,150652],{"class":94,"line":1591},[92,150653,2379],{"emptyLinePlaceholder":17},[92,150655,150656,150658,150660,150662,150664,150666,150668],{"class":94,"line":1596},[92,150657,149456],{"class":102},[92,150659,148],{"class":98},[92,150661,149860],{"class":102},[92,150663,149863],{"class":207},[92,150665,12415],{"class":102},[92,150667,1092],{"class":151},[92,150669,109],{"class":102},[92,150671,150672,150674],{"class":94,"line":1602},[92,150673,30396],{"class":151},[92,150675,150676],{"class":102},"(student.name, student.score)\n",[33,150678,150680],{"id":150679},"_1111-多态","11.11 多态",[38,150682,150683],{},"多态指不同对象响应同一个方法，表现出不同结果。",[83,150685,150687],{"className":30359,"code":150686,"language":30361,"meta":10,"style":10},"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",[89,150688,150689,150697,150705,150715,150719,150723,150731,150739,150749,150753,150757,150767,150772,150776,150780,150785],{"__ignoreMap":10},[92,150690,150691,150693,150695],{"class":94,"line":95},[92,150692,14674],{"class":98},[92,150694,150339],{"class":1942},[92,150696,3718],{"class":102},[92,150698,150699,150701,150703],{"class":94,"line":11},[92,150700,30782],{"class":98},[92,150702,150421],{"class":1942},[92,150704,30788],{"class":102},[92,150706,150707,150709,150711,150713],{"class":94,"line":1158},[92,150708,32432],{"class":151},[92,150710,103],{"class":102},[92,150712,150364],{"class":207},[92,150714,109],{"class":102},[92,150716,150717],{"class":94,"line":1173},[92,150718,2379],{"emptyLinePlaceholder":17},[92,150720,150721],{"class":94,"line":1179},[92,150722,2379],{"emptyLinePlaceholder":17},[92,150724,150725,150727,150729],{"class":94,"line":1193},[92,150726,14674],{"class":98},[92,150728,150487],{"class":1942},[92,150730,3718],{"class":102},[92,150732,150733,150735,150737],{"class":94,"line":1199},[92,150734,30782],{"class":98},[92,150736,150421],{"class":1942},[92,150738,30788],{"class":102},[92,150740,150741,150743,150745,150747],{"class":94,"line":1290},[92,150742,32432],{"class":151},[92,150744,103],{"class":102},[92,150746,150510],{"class":207},[92,150748,109],{"class":102},[92,150750,150751],{"class":94,"line":1296},[92,150752,2379],{"emptyLinePlaceholder":17},[92,150754,150755],{"class":94,"line":1308},[92,150756,2379],{"emptyLinePlaceholder":17},[92,150758,150759,150761,150764],{"class":94,"line":1591},[92,150760,31928],{"class":98},[92,150762,150763],{"class":1942}," make_sound",[92,150765,150766],{"class":102},"(animal):\n",[92,150768,150769],{"class":94,"line":1596},[92,150770,150771],{"class":102},"    animal.speak()\n",[92,150773,150774],{"class":94,"line":1602},[92,150775,2379],{"emptyLinePlaceholder":17},[92,150777,150778],{"class":94,"line":1607},[92,150779,2379],{"emptyLinePlaceholder":17},[92,150781,150782],{"class":94,"line":1621},[92,150783,150784],{"class":102},"make_sound(Dog())\n",[92,150786,150787],{"class":94,"line":1626},[92,150788,150789],{"class":102},"make_sound(Cat())\n",[38,150791,150792],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[33,150794,150796],{"id":150795},"_1112-类属性和实例属性","11.12 类属性和实例属性",[38,150798,150799],{},"实例属性属于对象：",[83,150801,150803],{"className":30359,"code":150802,"language":30361,"meta":10,"style":10},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[89,150804,150805,150813,150821],{"__ignoreMap":10},[92,150806,150807,150809,150811],{"class":94,"line":95},[92,150808,14674],{"class":98},[92,150810,7878],{"class":1942},[92,150812,3718],{"class":102},[92,150814,150815,150817,150819],{"class":94,"line":11},[92,150816,30782],{"class":98},[92,150818,30785],{"class":151},[92,150820,150585],{"class":102},[92,150822,150823,150825,150827,150829],{"class":94,"line":1158},[92,150824,30826],{"class":151},[92,150826,149765],{"class":102},[92,150828,148],{"class":98},[92,150830,149770],{"class":102},[38,150832,150833],{},"类属性属于类，所有对象共享：",[83,150835,150837],{"className":30359,"code":150836,"language":30361,"meta":10,"style":10},"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",[89,150838,150839,150847,150857,150861,150869,150879,150883,150887,150900,150914,150918,150925,150932],{"__ignoreMap":10},[92,150840,150841,150843,150845],{"class":94,"line":95},[92,150842,14674],{"class":98},[92,150844,7878],{"class":1942},[92,150846,3718],{"class":102},[92,150848,150849,150852,150854],{"class":94,"line":11},[92,150850,150851],{"class":102},"    school ",[92,150853,148],{"class":98},[92,150855,150856],{"class":207}," \"黑马学校\"\n",[92,150858,150859],{"class":94,"line":1158},[92,150860,2379],{"emptyLinePlaceholder":17},[92,150862,150863,150865,150867],{"class":94,"line":1173},[92,150864,30782],{"class":98},[92,150866,30785],{"class":151},[92,150868,150585],{"class":102},[92,150870,150871,150873,150875,150877],{"class":94,"line":1179},[92,150872,30826],{"class":151},[92,150874,149765],{"class":102},[92,150876,148],{"class":98},[92,150878,149770],{"class":102},[92,150880,150881],{"class":94,"line":1193},[92,150882,2379],{"emptyLinePlaceholder":17},[92,150884,150885],{"class":94,"line":1199},[92,150886,2379],{"emptyLinePlaceholder":17},[92,150888,150889,150892,150894,150896,150898],{"class":94,"line":1290},[92,150890,150891],{"class":102},"s1 ",[92,150893,148],{"class":98},[92,150895,149860],{"class":102},[92,150897,149863],{"class":207},[92,150899,109],{"class":102},[92,150901,150902,150905,150907,150909,150912],{"class":94,"line":1296},[92,150903,150904],{"class":102},"s2 ",[92,150906,148],{"class":98},[92,150908,149860],{"class":102},[92,150910,150911],{"class":207},"\"小红\"",[92,150913,109],{"class":102},[92,150915,150916],{"class":94,"line":1308},[92,150917,2379],{"emptyLinePlaceholder":17},[92,150919,150920,150922],{"class":94,"line":1591},[92,150921,30396],{"class":151},[92,150923,150924],{"class":102},"(s1.school)\n",[92,150926,150927,150929],{"class":94,"line":1596},[92,150928,30396],{"class":151},[92,150930,150931],{"class":102},"(s2.school)\n",[92,150933,150934,150936],{"class":94,"line":1602},[92,150935,30396],{"class":151},[92,150937,150938],{"class":102},"(Student.school)\n",[38,150940,150941],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[33,150943,150945],{"id":150944},"_1113-类方法和静态方法","11.13 类方法和静态方法",[63,150947,150949],{"id":150948},"_11131-类方法","11.13.1 类方法",[38,150951,150952,150953,150956,150957,28366],{},"类方法使用 ",[89,150954,150955],{},"@classmethod","，第一个参数通常是 ",[89,150958,150959],{},"cls",[83,150961,150963],{"className":30359,"code":150962,"language":30361,"meta":10,"style":10},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[89,150964,150965,150973,150981,150985,150993,151003,151013,151017,151021],{"__ignoreMap":10},[92,150966,150967,150969,150971],{"class":94,"line":95},[92,150968,14674],{"class":98},[92,150970,7878],{"class":1942},[92,150972,3718],{"class":102},[92,150974,150975,150977,150979],{"class":94,"line":11},[92,150976,150851],{"class":102},[92,150978,148],{"class":98},[92,150980,150856],{"class":207},[92,150982,150983],{"class":94,"line":1158},[92,150984,2379],{"emptyLinePlaceholder":17},[92,150986,150987,150990],{"class":94,"line":1173},[92,150988,150989],{"class":1942},"    @",[92,150991,150992],{"class":151},"classmethod\n",[92,150994,150995,150997,151000],{"class":94,"line":1179},[92,150996,30782],{"class":98},[92,150998,150999],{"class":1942}," get_school",[92,151001,151002],{"class":102},"(cls):\n",[92,151004,151005,151007,151010],{"class":94,"line":1193},[92,151006,14732],{"class":98},[92,151008,151009],{"class":151}," cls",[92,151011,151012],{"class":102},".school\n",[92,151014,151015],{"class":94,"line":1199},[92,151016,2379],{"emptyLinePlaceholder":17},[92,151018,151019],{"class":94,"line":1290},[92,151020,2379],{"emptyLinePlaceholder":17},[92,151022,151023,151025],{"class":94,"line":1296},[92,151024,30396],{"class":151},[92,151026,151027],{"class":102},"(Student.get_school())\n",[63,151029,151031],{"id":151030},"_11132-静态方法","11.13.2 静态方法",[38,151033,151034,151035,151038],{},"静态方法使用 ",[89,151036,151037],{},"@staticmethod","，不需要访问实例和类。",[83,151040,151042],{"className":30359,"code":151041,"language":30361,"meta":10,"style":10},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[89,151043,151044,151053,151060,151069,151080,151084,151088],{"__ignoreMap":10},[92,151045,151046,151048,151051],{"class":94,"line":95},[92,151047,14674],{"class":98},[92,151049,151050],{"class":1942}," MathUtils",[92,151052,3718],{"class":102},[92,151054,151055,151057],{"class":94,"line":11},[92,151056,150989],{"class":1942},[92,151058,151059],{"class":151},"staticmethod\n",[92,151061,151062,151064,151066],{"class":94,"line":1158},[92,151063,30782],{"class":98},[92,151065,5189],{"class":1942},[92,151067,151068],{"class":102},"(a, b):\n",[92,151070,151071,151073,151075,151077],{"class":94,"line":1173},[92,151072,14732],{"class":98},[92,151074,10849],{"class":102},[92,151076,584],{"class":98},[92,151078,151079],{"class":102}," b\n",[92,151081,151082],{"class":94,"line":1179},[92,151083,2379],{"emptyLinePlaceholder":17},[92,151085,151086],{"class":94,"line":1193},[92,151087,2379],{"emptyLinePlaceholder":17},[92,151089,151090,151092,151095,151097,151099,151101],{"class":94,"line":1199},[92,151091,30396],{"class":151},[92,151093,151094],{"class":102},"(MathUtils.add(",[92,151096,320],{"class":151},[92,151098,12415],{"class":102},[92,151100,180],{"class":151},[92,151102,30478],{"class":102},[38,151104,151105],{},"静态方法本质上是放在类命名空间里的普通函数。",[33,151107,151109],{"id":151108},"_1114-dataclass","11.14 dataclass",[38,151111,151112,151115],{},[89,151113,151114],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[83,151117,151119],{"className":30359,"code":151118,"language":30361,"meta":10,"style":10},"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",[89,151120,151121,151133,151137,151141,151146,151154,151162,151170,151178,151182,151186,151206],{"__ignoreMap":10},[92,151122,151123,151125,151128,151130],{"class":94,"line":95},[92,151124,30718],{"class":98},[92,151126,151127],{"class":102}," dataclasses ",[92,151129,30373],{"class":98},[92,151131,151132],{"class":102}," dataclass\n",[92,151134,151135],{"class":94,"line":11},[92,151136,2379],{"emptyLinePlaceholder":17},[92,151138,151139],{"class":94,"line":1158},[92,151140,2379],{"emptyLinePlaceholder":17},[92,151142,151143],{"class":94,"line":1173},[92,151144,151145],{"class":1942},"@dataclass\n",[92,151147,151148,151150,151152],{"class":94,"line":1179},[92,151149,14674],{"class":98},[92,151151,7878],{"class":1942},[92,151153,3718],{"class":102},[92,151155,151156,151159],{"class":94,"line":1193},[92,151157,151158],{"class":102},"    name: ",[92,151160,151161],{"class":151},"str\n",[92,151163,151164,151167],{"class":94,"line":1199},[92,151165,151166],{"class":102},"    age: ",[92,151168,151169],{"class":151},"int\n",[92,151171,151172,151175],{"class":94,"line":1290},[92,151173,151174],{"class":102},"    score: ",[92,151176,151177],{"class":151},"float\n",[92,151179,151180],{"class":94,"line":1296},[92,151181,2379],{"emptyLinePlaceholder":17},[92,151183,151184],{"class":94,"line":1308},[92,151185,2379],{"emptyLinePlaceholder":17},[92,151187,151188,151190,151192,151194,151196,151198,151200,151202,151204],{"class":94,"line":1591},[92,151189,149456],{"class":102},[92,151191,148],{"class":98},[92,151193,149860],{"class":102},[92,151195,149863],{"class":207},[92,151197,12415],{"class":102},[92,151199,753],{"class":151},[92,151201,12415],{"class":102},[92,151203,1092],{"class":151},[92,151205,109],{"class":102},[92,151207,151208,151210],{"class":94,"line":1596},[92,151209,30396],{"class":151},[92,151211,150017],{"class":102},[38,151213,151214,151215,315,151217,151220],{},"它会自动生成 ",[89,151216,30810],{},[89,151218,151219],{},"__repr__"," 等方法。适合数据模型类。",[33,151222,151224],{"id":151223},"_1115-小案例学生类","11.15 小案例：学生类",[83,151226,151228],{"className":30359,"code":151227,"language":30361,"meta":10,"style":10},"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",[89,151229,151230,151238,151247,151259,151269,151279,151289,151293,151302,151315,151319,151328,151334,151346,151358,151370,151382,151386,151390,151396,151406,151415,151425,151433,151441,151450,151454,151458,151466,151502,151506,151510,151535,151542],{"__ignoreMap":10},[92,151231,151232,151234,151236],{"class":94,"line":95},[92,151233,14674],{"class":98},[92,151235,7878],{"class":1942},[92,151237,3718],{"class":102},[92,151239,151240,151242,151244],{"class":94,"line":11},[92,151241,30782],{"class":98},[92,151243,30785],{"class":151},[92,151245,151246],{"class":102},"(self, student_id, name, age, score):\n",[92,151248,151249,151251,151254,151256],{"class":94,"line":1158},[92,151250,30826],{"class":151},[92,151252,151253],{"class":102},".student_id ",[92,151255,148],{"class":98},[92,151257,151258],{"class":102}," student_id\n",[92,151260,151261,151263,151265,151267],{"class":94,"line":1173},[92,151262,30826],{"class":151},[92,151264,149765],{"class":102},[92,151266,148],{"class":98},[92,151268,149770],{"class":102},[92,151270,151271,151273,151275,151277],{"class":94,"line":1179},[92,151272,30826],{"class":151},[92,151274,149777],{"class":102},[92,151276,148],{"class":98},[92,151278,149782],{"class":102},[92,151280,151281,151283,151285,151287],{"class":94,"line":1193},[92,151282,30826],{"class":151},[92,151284,149789],{"class":102},[92,151286,148],{"class":98},[92,151288,1558],{"class":102},[92,151290,151291],{"class":94,"line":1199},[92,151292,2379],{"emptyLinePlaceholder":17},[92,151294,151295,151297,151300],{"class":94,"line":1290},[92,151296,30782],{"class":98},[92,151298,151299],{"class":1942}," is_passed",[92,151301,30788],{"class":102},[92,151303,151304,151306,151308,151310,151312],{"class":94,"line":1296},[92,151305,14732],{"class":98},[92,151307,38854],{"class":151},[92,151309,149789],{"class":102},[92,151311,1689],{"class":98},[92,151313,151314],{"class":151}," 60\n",[92,151316,151317],{"class":94,"line":1308},[92,151318,2379],{"emptyLinePlaceholder":17},[92,151320,151321,151323,151326],{"class":94,"line":1591},[92,151322,30782],{"class":98},[92,151324,151325],{"class":1942}," to_dict",[92,151327,30788],{"class":102},[92,151329,151330,151332],{"class":94,"line":1596},[92,151331,14732],{"class":98},[92,151333,15552],{"class":102},[92,151335,151336,151339,151341,151343],{"class":94,"line":1602},[92,151337,151338],{"class":207},"            \"student_id\"",[92,151340,51417],{"class":102},[92,151342,30804],{"class":151},[92,151344,151345],{"class":102},".student_id,\n",[92,151347,151348,151351,151353,151355],{"class":94,"line":1607},[92,151349,151350],{"class":207},"            \"name\"",[92,151352,51417],{"class":102},[92,151354,30804],{"class":151},[92,151356,151357],{"class":102},".name,\n",[92,151359,151360,151363,151365,151367],{"class":94,"line":1621},[92,151361,151362],{"class":207},"            \"age\"",[92,151364,51417],{"class":102},[92,151366,30804],{"class":151},[92,151368,151369],{"class":102},".age,\n",[92,151371,151372,151375,151377,151379],{"class":94,"line":1626},[92,151373,151374],{"class":207},"            \"score\"",[92,151376,51417],{"class":102},[92,151378,30804],{"class":151},[92,151380,151381],{"class":102},".score,\n",[92,151383,151384],{"class":94,"line":1632},[92,151385,2508],{"class":102},[92,151387,151388],{"class":94,"line":1653},[92,151389,2379],{"emptyLinePlaceholder":17},[92,151391,151392,151394],{"class":94,"line":1658},[92,151393,150989],{"class":1942},[92,151395,150992],{"class":151},[92,151397,151398,151400,151403],{"class":94,"line":1672},[92,151399,30782],{"class":98},[92,151401,151402],{"class":1942}," from_dict",[92,151404,151405],{"class":102},"(cls, data):\n",[92,151407,151408,151410,151412],{"class":94,"line":1677},[92,151409,14732],{"class":98},[92,151411,151009],{"class":151},[92,151413,151414],{"class":102},"(\n",[92,151416,151417,151420,151423],{"class":94,"line":1706},[92,151418,151419],{"class":102},"            data[",[92,151421,151422],{"class":207},"\"student_id\"",[92,151424,87816],{"class":102},[92,151426,151427,151429,151431],{"class":94,"line":1711},[92,151428,151419],{"class":102},[92,151430,62659],{"class":207},[92,151432,87816],{"class":102},[92,151434,151435,151437,151439],{"class":94,"line":1728},[92,151436,151419],{"class":102},[92,151438,69104],{"class":207},[92,151440,87816],{"class":102},[92,151442,151443,151445,151448],{"class":94,"line":1733},[92,151444,151419],{"class":102},[92,151446,151447],{"class":207},"\"score\"",[92,151449,87816],{"class":102},[92,151451,151452],{"class":94,"line":1738},[92,151453,38107],{"class":102},[92,151455,151456],{"class":94,"line":1743},[92,151457,2379],{"emptyLinePlaceholder":17},[92,151459,151460,151462,151464],{"class":94,"line":1757},[92,151461,30782],{"class":98},[92,151463,149956],{"class":151},[92,151465,30788],{"class":102},[92,151467,151468,151470,151472,151474,151476,151479,151481,151484,151486,151488,151490,151492,151494,151496,151498,151500],{"class":94,"line":1762},[92,151469,14732],{"class":98},[92,151471,149965],{"class":98},[92,151473,354],{"class":207},[92,151475,149427],{"class":151},[92,151477,151478],{"class":102},".student_id",[92,151480,1049],{"class":151},[92,151482,151483],{"class":151}," {self",[92,151485,80281],{"class":102},[92,151487,1049],{"class":151},[92,151489,151483],{"class":151},[92,151491,80293],{"class":102},[92,151493,1049],{"class":151},[92,151495,151483],{"class":151},[92,151497,149837],{"class":102},[92,151499,1049],{"class":151},[92,151501,25114],{"class":207},[92,151503,151504],{"class":94,"line":2556},[92,151505,2379],{"emptyLinePlaceholder":17},[92,151507,151508],{"class":94,"line":2570},[92,151509,2379],{"emptyLinePlaceholder":17},[92,151511,151512,151514,151516,151518,151521,151523,151525,151527,151529,151531,151533],{"class":94,"line":2578},[92,151513,149456],{"class":102},[92,151515,148],{"class":98},[92,151517,149860],{"class":102},[92,151519,151520],{"class":207},"\"001\"",[92,151522,12415],{"class":102},[92,151524,149863],{"class":207},[92,151526,12415],{"class":102},[92,151528,753],{"class":151},[92,151530,12415],{"class":102},[92,151532,1092],{"class":151},[92,151534,109],{"class":102},[92,151536,151537,151539],{"class":94,"line":2583},[92,151538,30396],{"class":151},[92,151540,151541],{"class":102},"(student.is_passed())\n",[92,151543,151544,151546],{"class":94,"line":2589},[92,151545,30396],{"class":151},[92,151547,151548],{"class":102},"(student.to_dict())\n",[38,151550,151551,100993,151554,151557],{},[89,151552,151553],{},"to_dict()",[89,151555,151556],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[33,151559,151561],{"id":151560},"_1116-易错点","11.16 易错点",[46,151563,151564,151570,151576,151581,151584,151587],{},[49,151565,151566,151567,28366],{},"类名推荐使用大驼峰，如 ",[89,151568,151569],{},"StudentManager",[49,151571,151572,151573,151575],{},"方法第一个参数必须写 ",[89,151574,30804],{},"，调用时不用传。",[49,151577,151578,151580],{},[89,151579,30810],{}," 不是普通方法，它在创建对象时自动执行。",[49,151582,151583],{},"私有属性不是绝对安全，只是约定和名称改写。",[49,151585,151586],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[49,151588,151589],{},"类中方法太多时，说明职责可能过重。",[33,151591,151593],{"id":151592},"_1117-本章练习","11.17 本章练习",[46,151595,151596,151602,151608,151613,151626],{},[49,151597,151598,151599,151601],{},"定义 ",[89,151600,149543],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[49,151603,151598,151604,151607],{},[89,151605,151606],{},"Account"," 类，实现存款、取款、查询余额。",[49,151609,151598,151610,151612],{},[89,151611,17206],{}," 类，计算圆的周长和面积。",[49,151614,151598,151615,315,151618,151621,151622,151625],{},[89,151616,151617],{},"Dog",[89,151619,151620],{},"Cat"," 类，并用同一个函数调用它们的 ",[89,151623,151624],{},"speak()"," 方法。",[49,151627,104341,151628,151630,151631,28366],{},[89,151629,151114],{}," 定义一个商品类 ",[89,151632,151633],{},"Product",[5106,151635,151636],{},"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":10,"searchDepth":11,"depth":11,"links":151638},[151639,151640,151641,151642,151643,151644,151646,151647,151648,151649,151650,151651,151652,151656,151657,151658,151659],{"id":149307,"depth":11,"text":149308},{"id":149490,"depth":11,"text":149491},{"id":149554,"depth":11,"text":149555},{"id":149631,"depth":11,"text":149632},{"id":149730,"depth":11,"text":149731},{"id":149894,"depth":11,"text":151645},"11.6 str",{"id":150020,"depth":11,"text":150021},{"id":150286,"depth":11,"text":150287},{"id":150400,"depth":11,"text":150401},{"id":150555,"depth":11,"text":150556},{"id":150679,"depth":11,"text":150680},{"id":150795,"depth":11,"text":150796},{"id":150944,"depth":11,"text":150945,"children":151653},[151654,151655],{"id":150948,"depth":1158,"text":150949},{"id":151030,"depth":1158,"text":151031},{"id":151108,"depth":11,"text":151109},{"id":151223,"depth":11,"text":151224},{"id":151560,"depth":11,"text":151561},{"id":151592,"depth":11,"text":151593},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149299,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151666,"title":151667,"body":151668,"description":13,"extension":14,"meta":154981,"navigation":17,"path":154982,"seo":154983,"stem":154984,"__hash__":154985},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151669,"toc":154957},[151670,151673,151677,151680,151683,151712,151715,151723,151727,151731,151734,151757,151760,151766,151770,153216,153219,153240,153244,153247,153259,153262,153446,153449,153575,153578,153582,153586,153722,153726,153812,153816,153898,153902,153939,153943,154132,154136,154139,154369,154373,154376,154557,154560,154564,154567,154573,154576,154602,154606,154609,154623,154626,154651,154654,154668,154671,154688,154691,154708,154711,154728,154732,154758,154762,154785,154789,154792,154794,154800,154802,154823,154826,154832,154838,154842,154845,154921,154924,154928,154954],[29,151671,151667],{"id":151672},"_12-综合案例与复习路线",[33,151674,151676],{"id":151675},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[38,151678,151679],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[38,151681,151682],{},"一个合格的入门综合项目最好覆盖：",[46,151684,151685,151688,151691,151694,151697,151700,151703,151706,151709],{},[49,151686,151687],{},"输入输出。",[49,151689,151690],{},"判断和循环。",[49,151692,151693],{},"函数拆分。",[49,151695,151696],{},"列表、字典等容器。",[49,151698,151699],{},"文件持久化。",[49,151701,151702],{},"异常处理。",[49,151704,151705],{},"模块拆分。",[49,151707,151708],{},"可选：面向对象。",[49,151710,151711],{},"可选：数据可视化。",[38,151713,151714],{},"本章整理两个方向：",[46,151716,151717,151720],{},[49,151718,151719],{},"学生管理系统。",[49,151721,151722],{},"销售数据统计和可视化。",[33,151724,151726],{"id":151725},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[63,151728,151730],{"id":151729},"_1221-需求","12.2.1 需求",[38,151732,151733],{},"实现一个命令行学生管理系统：",[46,151735,151736,151739,151742,151745,151748,151751,151754],{},[49,151737,151738],{},"添加学生。",[49,151740,151741],{},"删除学生。",[49,151743,151744],{},"修改学生。",[49,151746,151747],{},"查询学生。",[49,151749,151750],{},"显示所有学生。",[49,151752,151753],{},"保存到 JSON 文件。",[49,151755,151756],{},"程序启动时自动读取 JSON 文件。",[38,151758,151759],{},"学生字段：",[83,151761,151764],{"className":151762,"code":151763,"language":5167,"meta":10},[5165],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[89,151765,151763],{"__ignoreMap":10},[33,151767,151769],{"id":151768},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[83,151771,151773],{"className":30359,"code":151772,"language":30361,"meta":10,"style":10},"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",[89,151774,151775,151781,151791,151795,151809,151813,151817,151826,151838,151844,151848,151854,151885,151895,151902,151913,151919,151923,151927,151937,151968,151994,151998,152002,152011,152022,152033,152044,152055,152066,152077,152088,152092,152096,152106,152118,152134,152141,152148,152152,152156,152166,152174,152181,152194,152204,152215,152219,152223,152232,152240,152246,152258,152266,152277,152281,152285,152294,152310,152314,152321,152332,152337,152341,152357,152372,152387,152391,152396,152404,152412,152420,152428,152432,152437,152448,152452,152456,152465,152480,152490,152494,152506,152517,152521,152525,152530,152534,152545,152549,152553,152562,152577,152585,152589,152601,152611,152615,152619,152634,152647,152660,152664,152677,152689,152701,152705,152709,152720,152724,152728,152737,152752,152760,152764,152776,152786,152790,152794,152799,152803,152807,152817,152823,152845,152864,152883,152902,152907,152911,152915,152924,152932,152943,152947,152951,152977,152987,152992,152996,153000,153008,153018,153022,153030,153035,153051,153055,153069,153074,153088,153093,153106,153111,153124,153129,153142,153147,153160,153171,153175,153181,153192,153196,153200,153212],{"__ignoreMap":10},[92,151776,151777,151779],{"class":94,"line":95},[92,151778,30373],{"class":98},[92,151780,147066],{"class":102},[92,151782,151783,151785,151787,151789],{"class":94,"line":11},[92,151784,30718],{"class":98},[92,151786,108286],{"class":102},[92,151788,30373],{"class":98},[92,151790,108291],{"class":102},[92,151792,151793],{"class":94,"line":1158},[92,151794,2379],{"emptyLinePlaceholder":17},[92,151796,151797,151800,151802,151804,151807],{"class":94,"line":1173},[92,151798,151799],{"class":151},"DATA_FILE",[92,151801,13544],{"class":98},[92,151803,108520],{"class":102},[92,151805,151806],{"class":207},"\"students.json\"",[92,151808,109],{"class":102},[92,151810,151811],{"class":94,"line":1179},[92,151812,2379],{"emptyLinePlaceholder":17},[92,151814,151815],{"class":94,"line":1193},[92,151816,2379],{"emptyLinePlaceholder":17},[92,151818,151819,151821,151824],{"class":94,"line":1199},[92,151820,31928],{"class":98},[92,151822,151823],{"class":1942}," load_students",[92,151825,31934],{"class":102},[92,151827,151828,151830,151832,151835],{"class":94,"line":1290},[92,151829,3080],{"class":98},[92,151831,38911],{"class":98},[92,151833,151834],{"class":151}," DATA_FILE",[92,151836,151837],{"class":102},".exists():\n",[92,151839,151840,151842],{"class":94,"line":1296},[92,151841,14732],{"class":98},[92,151843,51818],{"class":102},[92,151845,151846],{"class":94,"line":1308},[92,151847,2379],{"emptyLinePlaceholder":17},[92,151849,151850,151852],{"class":94,"line":1591},[92,151851,125759],{"class":98},[92,151853,3718],{"class":102},[92,151855,151856,151859,151861,151863,151865,151867,151869,151871,151873,151875,151877,151879,151881,151883],{"class":94,"line":1596},[92,151857,151858],{"class":98},"        with",[92,151860,146766],{"class":151},[92,151862,103],{"class":102},[92,151864,151799],{"class":151},[92,151866,12415],{"class":102},[92,151868,146776],{"class":207},[92,151870,12415],{"class":102},[92,151872,146781],{"class":5196},[92,151874,148],{"class":98},[92,151876,146786],{"class":207},[92,151878,13694],{"class":102},[92,151880,31364],{"class":98},[92,151882,148128],{"class":5196},[92,151884,3718],{"class":102},[92,151886,151887,151889,151891,151893],{"class":94,"line":1602},[92,151888,15712],{"class":98},[92,151890,148139],{"class":102},[92,151892,45335],{"class":5196},[92,151894,109],{"class":102},[92,151896,151897,151899],{"class":94,"line":1607},[92,151898,125787],{"class":98},[92,151900,151901],{"class":102}," json.JSONDecodeError:\n",[92,151903,151904,151906,151908,151911],{"class":94,"line":1621},[92,151905,32432],{"class":151},[92,151907,103],{"class":102},[92,151909,151910],{"class":207},"\"数据文件格式错误，已使用空数据启动\"",[92,151912,109],{"class":102},[92,151914,151915,151917],{"class":94,"line":1626},[92,151916,14732],{"class":98},[92,151918,51818],{"class":102},[92,151920,151921],{"class":94,"line":1632},[92,151922,2379],{"emptyLinePlaceholder":17},[92,151924,151925],{"class":94,"line":1653},[92,151926,2379],{"emptyLinePlaceholder":17},[92,151928,151929,151931,151934],{"class":94,"line":1658},[92,151930,31928],{"class":98},[92,151932,151933],{"class":1942}," save_students",[92,151935,151936],{"class":102},"(students):\n",[92,151938,151939,151941,151943,151945,151947,151949,151952,151954,151956,151958,151960,151962,151964,151966],{"class":94,"line":1672},[92,151940,34159],{"class":98},[92,151942,146766],{"class":151},[92,151944,103],{"class":102},[92,151946,151799],{"class":151},[92,151948,12415],{"class":102},[92,151950,151951],{"class":207},"\"w\"",[92,151953,12415],{"class":102},[92,151955,146781],{"class":5196},[92,151957,148],{"class":98},[92,151959,146786],{"class":207},[92,151961,13694],{"class":102},[92,151963,31364],{"class":98},[92,151965,148128],{"class":5196},[92,151967,3718],{"class":102},[92,151969,151970,151973,151975,151977,151979,151981,151983,151985,151988,151990,151992],{"class":94,"line":1677},[92,151971,151972],{"class":102},"        json.dump(students, ",[92,151974,45335],{"class":5196},[92,151976,12415],{"class":102},[92,151978,147112],{"class":5196},[92,151980,148],{"class":98},[92,151982,33968],{"class":151},[92,151984,12415],{"class":102},[92,151986,151987],{"class":5196},"indent",[92,151989,148],{"class":98},[92,151991,180],{"class":151},[92,151993,109],{"class":102},[92,151995,151996],{"class":94,"line":1706},[92,151997,2379],{"emptyLinePlaceholder":17},[92,151999,152000],{"class":94,"line":1711},[92,152001,2379],{"emptyLinePlaceholder":17},[92,152003,152004,152006,152009],{"class":94,"line":1728},[92,152005,31928],{"class":98},[92,152007,152008],{"class":1942}," show_menu",[92,152010,31934],{"class":102},[92,152012,152013,152015,152017,152020],{"class":94,"line":1733},[92,152014,31280],{"class":151},[92,152016,103],{"class":102},[92,152018,152019],{"class":207},"\"====== 学生管理系统 ======\"",[92,152021,109],{"class":102},[92,152023,152024,152026,152028,152031],{"class":94,"line":1738},[92,152025,31280],{"class":151},[92,152027,103],{"class":102},[92,152029,152030],{"class":207},"\"1. 添加学生\"",[92,152032,109],{"class":102},[92,152034,152035,152037,152039,152042],{"class":94,"line":1743},[92,152036,31280],{"class":151},[92,152038,103],{"class":102},[92,152040,152041],{"class":207},"\"2. 删除学生\"",[92,152043,109],{"class":102},[92,152045,152046,152048,152050,152053],{"class":94,"line":1757},[92,152047,31280],{"class":151},[92,152049,103],{"class":102},[92,152051,152052],{"class":207},"\"3. 修改学生\"",[92,152054,109],{"class":102},[92,152056,152057,152059,152061,152064],{"class":94,"line":1762},[92,152058,31280],{"class":151},[92,152060,103],{"class":102},[92,152062,152063],{"class":207},"\"4. 查询学生\"",[92,152065,109],{"class":102},[92,152067,152068,152070,152072,152075],{"class":94,"line":2556},[92,152069,31280],{"class":151},[92,152071,103],{"class":102},[92,152073,152074],{"class":207},"\"5. 显示所有学生\"",[92,152076,109],{"class":102},[92,152078,152079,152081,152083,152086],{"class":94,"line":2570},[92,152080,31280],{"class":151},[92,152082,103],{"class":102},[92,152084,152085],{"class":207},"\"0. 退出系统\"",[92,152087,109],{"class":102},[92,152089,152090],{"class":94,"line":2578},[92,152091,2379],{"emptyLinePlaceholder":17},[92,152093,152094],{"class":94,"line":2583},[92,152095,2379],{"emptyLinePlaceholder":17},[92,152097,152098,152100,152103],{"class":94,"line":2589},[92,152099,31928],{"class":98},[92,152101,152102],{"class":1942}," find_student",[92,152104,152105],{"class":102},"(students, student_id):\n",[92,152107,152108,152110,152113,152115],{"class":94,"line":2595},[92,152109,3180],{"class":98},[92,152111,152112],{"class":102}," student ",[92,152114,26024],{"class":98},[92,152116,152117],{"class":102}," students:\n",[92,152119,152120,152122,152125,152127,152129,152131],{"class":94,"line":2600},[92,152121,2476],{"class":98},[92,152123,152124],{"class":102}," student[",[92,152126,151422],{"class":207},[92,152128,4422],{"class":102},[92,152130,2928],{"class":98},[92,152132,152133],{"class":102}," student_id:\n",[92,152135,152136,152138],{"class":94,"line":7928},[92,152137,15712],{"class":98},[92,152139,152140],{"class":102}," student\n",[92,152142,152143,152145],{"class":94,"line":7952},[92,152144,4069],{"class":98},[92,152146,152147],{"class":151}," None\n",[92,152149,152150],{"class":94,"line":7957},[92,152151,2379],{"emptyLinePlaceholder":17},[92,152153,152154],{"class":94,"line":7963},[92,152155,2379],{"emptyLinePlaceholder":17},[92,152157,152158,152160,152163],{"class":94,"line":7990},[92,152159,31928],{"class":98},[92,152161,152162],{"class":1942}," input_int",[92,152164,152165],{"class":102},"(prompt):\n",[92,152167,152168,152170,152172],{"class":94,"line":7995},[92,152169,2230],{"class":98},[92,152171,95272],{"class":151},[92,152173,3718],{"class":102},[92,152175,152176,152179],{"class":94,"line":8001},[92,152177,152178],{"class":98},"        try",[92,152180,3718],{"class":102},[92,152182,152183,152185,152187,152189,152191],{"class":94,"line":8013},[92,152184,15712],{"class":98},[92,152186,2361],{"class":151},[92,152188,103],{"class":102},[92,152190,53801],{"class":151},[92,152192,152193],{"class":102},"(prompt))\n",[92,152195,152196,152199,152202],{"class":94,"line":8025},[92,152197,152198],{"class":98},"        except",[92,152200,152201],{"class":151}," ValueError",[92,152203,3718],{"class":102},[92,152205,152206,152208,152210,152213],{"class":94,"line":8037},[92,152207,34631],{"class":151},[92,152209,103],{"class":102},[92,152211,152212],{"class":207},"\"请输入整数\"",[92,152214,109],{"class":102},[92,152216,152217],{"class":94,"line":9696},[92,152218,2379],{"emptyLinePlaceholder":17},[92,152220,152221],{"class":94,"line":9721},[92,152222,2379],{"emptyLinePlaceholder":17},[92,152224,152225,152227,152230],{"class":94,"line":9744},[92,152226,31928],{"class":98},[92,152228,152229],{"class":1942}," input_float",[92,152231,152165],{"class":102},[92,152233,152234,152236,152238],{"class":94,"line":9768},[92,152235,2230],{"class":98},[92,152237,95272],{"class":151},[92,152239,3718],{"class":102},[92,152241,152242,152244],{"class":94,"line":9773},[92,152243,152178],{"class":98},[92,152245,3718],{"class":102},[92,152247,152248,152250,152252,152254,152256],{"class":94,"line":9778},[92,152249,15712],{"class":98},[92,152251,109772],{"class":151},[92,152253,103],{"class":102},[92,152255,53801],{"class":151},[92,152257,152193],{"class":102},[92,152259,152260,152262,152264],{"class":94,"line":9783},[92,152261,152198],{"class":98},[92,152263,152201],{"class":151},[92,152265,3718],{"class":102},[92,152267,152268,152270,152272,152275],{"class":94,"line":9792},[92,152269,34631],{"class":151},[92,152271,103],{"class":102},[92,152273,152274],{"class":207},"\"请输入数字\"",[92,152276,109],{"class":102},[92,152278,152279],{"class":94,"line":9797},[92,152280,2379],{"emptyLinePlaceholder":17},[92,152282,152283],{"class":94,"line":9803},[92,152284,2379],{"emptyLinePlaceholder":17},[92,152286,152287,152289,152292],{"class":94,"line":9824},[92,152288,31928],{"class":98},[92,152290,152291],{"class":1942}," add_student",[92,152293,151936],{"class":102},[92,152295,152296,152299,152301,152303,152305,152308],{"class":94,"line":9830},[92,152297,152298],{"class":102},"    student_id ",[92,152300,148],{"class":98},[92,152302,60585],{"class":151},[92,152304,103],{"class":102},[92,152306,152307],{"class":207},"\"请输入学号:\"",[92,152309,109],{"class":102},[92,152311,152312],{"class":94,"line":9844},[92,152313,2379],{"emptyLinePlaceholder":17},[92,152315,152316,152318],{"class":94,"line":9850},[92,152317,3080],{"class":98},[92,152319,152320],{"class":102}," find_student(students, student_id):\n",[92,152322,152323,152325,152327,152330],{"class":94,"line":9877},[92,152324,32432],{"class":151},[92,152326,103],{"class":102},[92,152328,152329],{"class":207},"\"学号已存在\"",[92,152331,109],{"class":102},[92,152333,152334],{"class":94,"line":9886},[92,152335,152336],{"class":98},"        return\n",[92,152338,152339],{"class":94,"line":9892},[92,152340,2379],{"emptyLinePlaceholder":17},[92,152342,152343,152346,152348,152350,152352,152355],{"class":94,"line":9900},[92,152344,152345],{"class":102},"    name ",[92,152347,148],{"class":98},[92,152349,60585],{"class":151},[92,152351,103],{"class":102},[92,152353,152354],{"class":207},"\"请输入姓名:\"",[92,152356,109],{"class":102},[92,152358,152359,152362,152364,152367,152370],{"class":94,"line":9905},[92,152360,152361],{"class":102},"    age ",[92,152363,148],{"class":98},[92,152365,152366],{"class":102}," input_int(",[92,152368,152369],{"class":207},"\"请输入年龄:\"",[92,152371,109],{"class":102},[92,152373,152374,152377,152379,152382,152385],{"class":94,"line":16584},[92,152375,152376],{"class":102},"    score ",[92,152378,148],{"class":98},[92,152380,152381],{"class":102}," input_float(",[92,152383,152384],{"class":207},"\"请输入成绩:\"",[92,152386,109],{"class":102},[92,152388,152389],{"class":94,"line":16590},[92,152390,2379],{"emptyLinePlaceholder":17},[92,152392,152393],{"class":94,"line":16613},[92,152394,152395],{"class":102},"    students.append({\n",[92,152397,152398,152401],{"class":94,"line":16619},[92,152399,152400],{"class":207},"        \"student_id\"",[92,152402,152403],{"class":102},": student_id,\n",[92,152405,152406,152409],{"class":94,"line":16642},[92,152407,152408],{"class":207},"        \"name\"",[92,152410,152411],{"class":102},": name,\n",[92,152413,152414,152417],{"class":94,"line":16656},[92,152415,152416],{"class":207},"        \"age\"",[92,152418,152419],{"class":102},": age,\n",[92,152421,152422,152425],{"class":94,"line":16676},[92,152423,152424],{"class":207},"        \"score\"",[92,152426,152427],{"class":102},": score,\n",[92,152429,152430],{"class":94,"line":16682},[92,152431,33442],{"class":102},[92,152433,152434],{"class":94,"line":16693},[92,152435,152436],{"class":102},"    save_students(students)\n",[92,152438,152439,152441,152443,152446],{"class":94,"line":16716},[92,152440,31280],{"class":151},[92,152442,103],{"class":102},[92,152444,152445],{"class":207},"\"添加成功\"",[92,152447,109],{"class":102},[92,152449,152450],{"class":94,"line":16738},[92,152451,2379],{"emptyLinePlaceholder":17},[92,152453,152454],{"class":94,"line":16743},[92,152455,2379],{"emptyLinePlaceholder":17},[92,152457,152458,152460,152463],{"class":94,"line":16749},[92,152459,31928],{"class":98},[92,152461,152462],{"class":1942}," delete_student",[92,152464,151936],{"class":102},[92,152466,152467,152469,152471,152473,152475,152478],{"class":94,"line":16763},[92,152468,152298],{"class":102},[92,152470,148],{"class":98},[92,152472,60585],{"class":151},[92,152474,103],{"class":102},[92,152476,152477],{"class":207},"\"请输入要删除的学号:\"",[92,152479,109],{"class":102},[92,152481,152482,152485,152487],{"class":94,"line":16776},[92,152483,152484],{"class":102},"    student ",[92,152486,148],{"class":98},[92,152488,152489],{"class":102}," find_student(students, student_id)\n",[92,152491,152492],{"class":94,"line":16781},[92,152493,2379],{"emptyLinePlaceholder":17},[92,152495,152496,152498,152500,152502,152504],{"class":94,"line":16795},[92,152497,3080],{"class":98},[92,152499,152112],{"class":102},[92,152501,38908],{"class":98},[92,152503,38914],{"class":151},[92,152505,3718],{"class":102},[92,152507,152508,152510,152512,152515],{"class":94,"line":16800},[92,152509,32432],{"class":151},[92,152511,103],{"class":102},[92,152513,152514],{"class":207},"\"学生不存在\"",[92,152516,109],{"class":102},[92,152518,152519],{"class":94,"line":16806},[92,152520,152336],{"class":98},[92,152522,152523],{"class":94,"line":16811},[92,152524,2379],{"emptyLinePlaceholder":17},[92,152526,152527],{"class":94,"line":16825},[92,152528,152529],{"class":102},"    students.remove(student)\n",[92,152531,152532],{"class":94,"line":16830},[92,152533,152436],{"class":102},[92,152535,152536,152538,152540,152543],{"class":94,"line":16835},[92,152537,31280],{"class":151},[92,152539,103],{"class":102},[92,152541,152542],{"class":207},"\"删除成功\"",[92,152544,109],{"class":102},[92,152546,152547],{"class":94,"line":16849},[92,152548,2379],{"emptyLinePlaceholder":17},[92,152550,152551],{"class":94,"line":16861},[92,152552,2379],{"emptyLinePlaceholder":17},[92,152554,152555,152557,152560],{"class":94,"line":16866},[92,152556,31928],{"class":98},[92,152558,152559],{"class":1942}," update_student",[92,152561,151936],{"class":102},[92,152563,152564,152566,152568,152570,152572,152575],{"class":94,"line":16879},[92,152565,152298],{"class":102},[92,152567,148],{"class":98},[92,152569,60585],{"class":151},[92,152571,103],{"class":102},[92,152573,152574],{"class":207},"\"请输入要修改的学号:\"",[92,152576,109],{"class":102},[92,152578,152579,152581,152583],{"class":94,"line":16884},[92,152580,152484],{"class":102},[92,152582,148],{"class":98},[92,152584,152489],{"class":102},[92,152586,152587],{"class":94,"line":16889},[92,152588,2379],{"emptyLinePlaceholder":17},[92,152590,152591,152593,152595,152597,152599],{"class":94,"line":16894},[92,152592,3080],{"class":98},[92,152594,152112],{"class":102},[92,152596,38908],{"class":98},[92,152598,38914],{"class":151},[92,152600,3718],{"class":102},[92,152602,152603,152605,152607,152609],{"class":94,"line":16907},[92,152604,32432],{"class":151},[92,152606,103],{"class":102},[92,152608,152514],{"class":207},[92,152610,109],{"class":102},[92,152612,152613],{"class":94,"line":16912},[92,152614,152336],{"class":98},[92,152616,152617],{"class":94,"line":32614},[92,152618,2379],{"emptyLinePlaceholder":17},[92,152620,152621,152623,152625,152627,152629,152632],{"class":94,"line":32620},[92,152622,152345],{"class":102},[92,152624,148],{"class":98},[92,152626,60585],{"class":151},[92,152628,103],{"class":102},[92,152630,152631],{"class":207},"\"请输入新姓名:\"",[92,152633,109],{"class":102},[92,152635,152636,152638,152640,152642,152645],{"class":94,"line":32626},[92,152637,152361],{"class":102},[92,152639,148],{"class":98},[92,152641,152366],{"class":102},[92,152643,152644],{"class":207},"\"请输入新年龄:\"",[92,152646,109],{"class":102},[92,152648,152649,152651,152653,152655,152658],{"class":94,"line":32632},[92,152650,152376],{"class":102},[92,152652,148],{"class":98},[92,152654,152381],{"class":102},[92,152656,152657],{"class":207},"\"请输入新成绩:\"",[92,152659,109],{"class":102},[92,152661,152662],{"class":94,"line":32638},[92,152663,2379],{"emptyLinePlaceholder":17},[92,152665,152666,152669,152671,152673,152675],{"class":94,"line":32649},[92,152667,152668],{"class":102},"    student[",[92,152670,62659],{"class":207},[92,152672,4422],{"class":102},[92,152674,148],{"class":98},[92,152676,149770],{"class":102},[92,152678,152679,152681,152683,152685,152687],{"class":94,"line":32655},[92,152680,152668],{"class":102},[92,152682,69104],{"class":207},[92,152684,4422],{"class":102},[92,152686,148],{"class":98},[92,152688,149782],{"class":102},[92,152690,152691,152693,152695,152697,152699],{"class":94,"line":32675},[92,152692,152668],{"class":102},[92,152694,151447],{"class":207},[92,152696,4422],{"class":102},[92,152698,148],{"class":98},[92,152700,1558],{"class":102},[92,152702,152703],{"class":94,"line":32681},[92,152704,2379],{"emptyLinePlaceholder":17},[92,152706,152707],{"class":94,"line":32692},[92,152708,152436],{"class":102},[92,152710,152711,152713,152715,152718],{"class":94,"line":32698},[92,152712,31280],{"class":151},[92,152714,103],{"class":102},[92,152716,152717],{"class":207},"\"修改成功\"",[92,152719,109],{"class":102},[92,152721,152722],{"class":94,"line":32704},[92,152723,2379],{"emptyLinePlaceholder":17},[92,152725,152726],{"class":94,"line":32710},[92,152727,2379],{"emptyLinePlaceholder":17},[92,152729,152730,152732,152735],{"class":94,"line":32716},[92,152731,31928],{"class":98},[92,152733,152734],{"class":1942}," query_student",[92,152736,151936],{"class":102},[92,152738,152739,152741,152743,152745,152747,152750],{"class":94,"line":32722},[92,152740,152298],{"class":102},[92,152742,148],{"class":98},[92,152744,60585],{"class":151},[92,152746,103],{"class":102},[92,152748,152749],{"class":207},"\"请输入要查询的学号:\"",[92,152751,109],{"class":102},[92,152753,152754,152756,152758],{"class":94,"line":32728},[92,152755,152484],{"class":102},[92,152757,148],{"class":98},[92,152759,152489],{"class":102},[92,152761,152762],{"class":94,"line":32734},[92,152763,2379],{"emptyLinePlaceholder":17},[92,152765,152766,152768,152770,152772,152774],{"class":94,"line":32754},[92,152767,3080],{"class":98},[92,152769,152112],{"class":102},[92,152771,38908],{"class":98},[92,152773,38914],{"class":151},[92,152775,3718],{"class":102},[92,152777,152778,152780,152782,152784],{"class":94,"line":32760},[92,152779,32432],{"class":151},[92,152781,103],{"class":102},[92,152783,152514],{"class":207},[92,152785,109],{"class":102},[92,152787,152788],{"class":94,"line":32776},[92,152789,152336],{"class":98},[92,152791,152792],{"class":94,"line":32782},[92,152793,2379],{"emptyLinePlaceholder":17},[92,152795,152796],{"class":94,"line":32796},[92,152797,152798],{"class":102},"    print_student(student)\n",[92,152800,152801],{"class":94,"line":32802},[92,152802,2379],{"emptyLinePlaceholder":17},[92,152804,152805],{"class":94,"line":32817},[92,152806,2379],{"emptyLinePlaceholder":17},[92,152808,152809,152811,152814],{"class":94,"line":32823},[92,152810,31928],{"class":98},[92,152812,152813],{"class":1942}," print_student",[92,152815,152816],{"class":102},"(student):\n",[92,152818,152819,152821],{"class":94,"line":32832},[92,152820,31280],{"class":151},[92,152822,151414],{"class":102},[92,152824,152825,152828,152830,152832,152835,152838,152840,152843],{"class":94,"line":32838},[92,152826,152827],{"class":98},"        f",[92,152829,354],{"class":207},[92,152831,999],{"class":151},[92,152833,152834],{"class":102},"student[",[92,152836,152837],{"class":207},"'student_id'",[92,152839,1043],{"class":102},[92,152841,152842],{"class":151},"}\\t",[92,152844,25114],{"class":207},[92,152846,152847,152849,152851,152853,152855,152858,152860,152862],{"class":94,"line":32847},[92,152848,152827],{"class":98},[92,152850,354],{"class":207},[92,152852,999],{"class":151},[92,152854,152834],{"class":102},[92,152856,152857],{"class":207},"'name'",[92,152859,1043],{"class":102},[92,152861,152842],{"class":151},[92,152863,25114],{"class":207},[92,152865,152866,152868,152870,152872,152874,152877,152879,152881],{"class":94,"line":32853},[92,152867,152827],{"class":98},[92,152869,354],{"class":207},[92,152871,999],{"class":151},[92,152873,152834],{"class":102},[92,152875,152876],{"class":207},"'age'",[92,152878,1043],{"class":102},[92,152880,152842],{"class":151},[92,152882,25114],{"class":207},[92,152884,152885,152887,152889,152891,152893,152896,152898,152900],{"class":94,"line":32859},[92,152886,152827],{"class":98},[92,152888,354],{"class":207},[92,152890,999],{"class":151},[92,152892,152834],{"class":102},[92,152894,152895],{"class":207},"'score'",[92,152897,1043],{"class":102},[92,152899,1049],{"class":151},[92,152901,25114],{"class":207},[92,152903,152904],{"class":94,"line":32868},[92,152905,152906],{"class":102},"    )\n",[92,152908,152909],{"class":94,"line":32874},[92,152910,2379],{"emptyLinePlaceholder":17},[92,152912,152913],{"class":94,"line":32885},[92,152914,2379],{"emptyLinePlaceholder":17},[92,152916,152917,152919,152922],{"class":94,"line":32891},[92,152918,31928],{"class":98},[92,152920,152921],{"class":1942}," show_all_students",[92,152923,151936],{"class":102},[92,152925,152926,152928,152930],{"class":94,"line":32910},[92,152927,3080],{"class":98},[92,152929,38911],{"class":98},[92,152931,152117],{"class":102},[92,152933,152934,152936,152938,152941],{"class":94,"line":32916},[92,152935,32432],{"class":151},[92,152937,103],{"class":102},[92,152939,152940],{"class":207},"\"暂无学生\"",[92,152942,109],{"class":102},[92,152944,152945],{"class":94,"line":32927},[92,152946,152336],{"class":98},[92,152948,152949],{"class":94,"line":32933},[92,152950,2379],{"emptyLinePlaceholder":17},[92,152952,152953,152955,152957,152960,152962,152965,152967,152970,152972,152975],{"class":94,"line":32953},[92,152954,31280],{"class":151},[92,152956,103],{"class":102},[92,152958,152959],{"class":207},"\"学号",[92,152961,1209],{"class":151},[92,152963,152964],{"class":207},"姓名",[92,152966,1209],{"class":151},[92,152968,152969],{"class":207},"年龄",[92,152971,1209],{"class":151},[92,152973,152974],{"class":207},"成绩\"",[92,152976,109],{"class":102},[92,152978,152979,152981,152983,152985],{"class":94,"line":32969},[92,152980,3180],{"class":98},[92,152982,152112],{"class":102},[92,152984,26024],{"class":98},[92,152986,152117],{"class":102},[92,152988,152989],{"class":94,"line":32975},[92,152990,152991],{"class":102},"        print_student(student)\n",[92,152993,152994],{"class":94,"line":32989},[92,152995,2379],{"emptyLinePlaceholder":17},[92,152997,152998],{"class":94,"line":32995},[92,152999,2379],{"emptyLinePlaceholder":17},[92,153001,153002,153004,153006],{"class":94,"line":33001},[92,153003,31928],{"class":98},[92,153005,1952],{"class":1942},[92,153007,31934],{"class":102},[92,153009,153010,153013,153015],{"class":94,"line":33012},[92,153011,153012],{"class":102},"    students ",[92,153014,148],{"class":98},[92,153016,153017],{"class":102}," load_students()\n",[92,153019,153020],{"class":94,"line":33018},[92,153021,2379],{"emptyLinePlaceholder":17},[92,153023,153024,153026,153028],{"class":94,"line":33024},[92,153025,2230],{"class":98},[92,153027,95272],{"class":151},[92,153029,3718],{"class":102},[92,153031,153032],{"class":94,"line":33034},[92,153033,153034],{"class":102},"        show_menu()\n",[92,153036,153037,153040,153042,153044,153046,153049],{"class":94,"line":33040},[92,153038,153039],{"class":102},"        choice ",[92,153041,148],{"class":98},[92,153043,60585],{"class":151},[92,153045,103],{"class":102},[92,153047,153048],{"class":207},"\"请输入操作:\"",[92,153050,109],{"class":102},[92,153052,153053],{"class":94,"line":33051},[92,153054,2379],{"emptyLinePlaceholder":17},[92,153056,153057,153059,153062,153064,153067],{"class":94,"line":33057},[92,153058,2476],{"class":98},[92,153060,153061],{"class":102}," choice ",[92,153063,2928],{"class":98},[92,153065,153066],{"class":207}," \"1\"",[92,153068,3718],{"class":102},[92,153070,153071],{"class":94,"line":33067},[92,153072,153073],{"class":102},"            add_student(students)\n",[92,153075,153076,153079,153081,153083,153086],{"class":94,"line":33072},[92,153077,153078],{"class":98},"        elif",[92,153080,153061],{"class":102},[92,153082,2928],{"class":98},[92,153084,153085],{"class":207}," \"2\"",[92,153087,3718],{"class":102},[92,153089,153090],{"class":94,"line":33078},[92,153091,153092],{"class":102},"            delete_student(students)\n",[92,153094,153095,153097,153099,153101,153104],{"class":94,"line":33127},[92,153096,153078],{"class":98},[92,153098,153061],{"class":102},[92,153100,2928],{"class":98},[92,153102,153103],{"class":207}," \"3\"",[92,153105,3718],{"class":102},[92,153107,153108],{"class":94,"line":33174},[92,153109,153110],{"class":102},"            update_student(students)\n",[92,153112,153113,153115,153117,153119,153122],{"class":94,"line":33179},[92,153114,153078],{"class":98},[92,153116,153061],{"class":102},[92,153118,2928],{"class":98},[92,153120,153121],{"class":207}," \"4\"",[92,153123,3718],{"class":102},[92,153125,153126],{"class":94,"line":33185},[92,153127,153128],{"class":102},"            query_student(students)\n",[92,153130,153131,153133,153135,153137,153140],{"class":94,"line":33204},[92,153132,153078],{"class":98},[92,153134,153061],{"class":102},[92,153136,2928],{"class":98},[92,153138,153139],{"class":207}," \"5\"",[92,153141,3718],{"class":102},[92,153143,153144],{"class":94,"line":33210},[92,153145,153146],{"class":102},"            show_all_students(students)\n",[92,153148,153149,153151,153153,153155,153158],{"class":94,"line":33230},[92,153150,153078],{"class":98},[92,153152,153061],{"class":102},[92,153154,2928],{"class":98},[92,153156,153157],{"class":207}," \"0\"",[92,153159,3718],{"class":102},[92,153161,153162,153164,153166,153169],{"class":94,"line":33236},[92,153163,34631],{"class":151},[92,153165,103],{"class":102},[92,153167,153168],{"class":207},"\"退出系统\"",[92,153170,109],{"class":102},[92,153172,153173],{"class":94,"line":33242},[92,153174,115073],{"class":98},[92,153176,153177,153179],{"class":94,"line":33252},[92,153178,2513],{"class":98},[92,153180,3718],{"class":102},[92,153182,153183,153185,153187,153190],{"class":94,"line":33257},[92,153184,34631],{"class":151},[92,153186,103],{"class":102},[92,153188,153189],{"class":207},"\"输入错误\"",[92,153191,109],{"class":102},[92,153193,153194],{"class":94,"line":33263},[92,153195,2379],{"emptyLinePlaceholder":17},[92,153197,153198],{"class":94,"line":33279},[92,153199,2379],{"emptyLinePlaceholder":17},[92,153201,153202,153204,153206,153208,153210],{"class":94,"line":33324},[92,153203,1510],{"class":98},[92,153205,31201],{"class":151},[92,153207,101534],{"class":98},[92,153209,101537],{"class":207},[92,153211,3718],{"class":102},[92,153213,153214],{"class":94,"line":33330},[92,153215,101544],{"class":102},[38,153217,153218],{},"这个项目串联了：",[46,153220,153221,153224,153227,153230,153233,153235],{},[49,153222,153223],{},"菜单循环。",[49,153225,153226],{},"函数封装。",[49,153228,153229],{},"列表字典。",[49,153231,153232],{},"JSON 读写。",[49,153234,151702],{},[49,153236,153237,28366],{},[89,153238,153239],{},"if __name__ == \"__main__\"",[33,153241,153243],{"id":153242},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[38,153245,153246],{},"可以进一步拆成两个类：",[46,153248,153249,153254],{},[49,153250,153251,153253],{},[89,153252,149543],{},"：表示单个学生。",[49,153255,153256,153258],{},[89,153257,151569],{},"：负责学生增删改查和文件保存。",[38,153260,153261],{},"示意代码：",[83,153263,153265],{"className":30359,"code":153264,"language":30361,"meta":10,"style":10},"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",[89,153266,153267,153277,153281,153285,153289,153297,153304,153310,153316,153322,153326,153334,153340,153350,153360,153370,153380,153384,153388,153394,153402,153410,153418,153426,153434,153442],{"__ignoreMap":10},[92,153268,153269,153271,153273,153275],{"class":94,"line":95},[92,153270,30718],{"class":98},[92,153272,151127],{"class":102},[92,153274,30373],{"class":98},[92,153276,151132],{"class":102},[92,153278,153279],{"class":94,"line":11},[92,153280,2379],{"emptyLinePlaceholder":17},[92,153282,153283],{"class":94,"line":1158},[92,153284,2379],{"emptyLinePlaceholder":17},[92,153286,153287],{"class":94,"line":1173},[92,153288,151145],{"class":1942},[92,153290,153291,153293,153295],{"class":94,"line":1179},[92,153292,14674],{"class":98},[92,153294,7878],{"class":1942},[92,153296,3718],{"class":102},[92,153298,153299,153302],{"class":94,"line":1193},[92,153300,153301],{"class":102},"    student_id: ",[92,153303,151161],{"class":151},[92,153305,153306,153308],{"class":94,"line":1199},[92,153307,151158],{"class":102},[92,153309,151161],{"class":151},[92,153311,153312,153314],{"class":94,"line":1290},[92,153313,151166],{"class":102},[92,153315,151169],{"class":151},[92,153317,153318,153320],{"class":94,"line":1296},[92,153319,151174],{"class":102},[92,153321,151177],{"class":151},[92,153323,153324],{"class":94,"line":1308},[92,153325,2379],{"emptyLinePlaceholder":17},[92,153327,153328,153330,153332],{"class":94,"line":1591},[92,153329,30782],{"class":98},[92,153331,151325],{"class":1942},[92,153333,30788],{"class":102},[92,153335,153336,153338],{"class":94,"line":1596},[92,153337,14732],{"class":98},[92,153339,15552],{"class":102},[92,153341,153342,153344,153346,153348],{"class":94,"line":1602},[92,153343,151338],{"class":207},[92,153345,51417],{"class":102},[92,153347,30804],{"class":151},[92,153349,151345],{"class":102},[92,153351,153352,153354,153356,153358],{"class":94,"line":1607},[92,153353,151350],{"class":207},[92,153355,51417],{"class":102},[92,153357,30804],{"class":151},[92,153359,151357],{"class":102},[92,153361,153362,153364,153366,153368],{"class":94,"line":1621},[92,153363,151362],{"class":207},[92,153365,51417],{"class":102},[92,153367,30804],{"class":151},[92,153369,151369],{"class":102},[92,153371,153372,153374,153376,153378],{"class":94,"line":1626},[92,153373,151374],{"class":207},[92,153375,51417],{"class":102},[92,153377,30804],{"class":151},[92,153379,151381],{"class":102},[92,153381,153382],{"class":94,"line":1632},[92,153383,2508],{"class":102},[92,153385,153386],{"class":94,"line":1653},[92,153387,2379],{"emptyLinePlaceholder":17},[92,153389,153390,153392],{"class":94,"line":1658},[92,153391,150989],{"class":1942},[92,153393,150992],{"class":151},[92,153395,153396,153398,153400],{"class":94,"line":1672},[92,153397,30782],{"class":98},[92,153399,151402],{"class":1942},[92,153401,151405],{"class":102},[92,153403,153404,153406,153408],{"class":94,"line":1677},[92,153405,14732],{"class":98},[92,153407,151009],{"class":151},[92,153409,151414],{"class":102},[92,153411,153412,153414,153416],{"class":94,"line":1706},[92,153413,151419],{"class":102},[92,153415,151422],{"class":207},[92,153417,87816],{"class":102},[92,153419,153420,153422,153424],{"class":94,"line":1711},[92,153421,151419],{"class":102},[92,153423,62659],{"class":207},[92,153425,87816],{"class":102},[92,153427,153428,153430,153432],{"class":94,"line":1728},[92,153429,151419],{"class":102},[92,153431,69104],{"class":207},[92,153433,87816],{"class":102},[92,153435,153436,153438,153440],{"class":94,"line":1733},[92,153437,151419],{"class":102},[92,153439,151447],{"class":207},[92,153441,87816],{"class":102},[92,153443,153444],{"class":94,"line":1738},[92,153445,38107],{"class":102},[38,153447,153448],{},"管理器示意：",[83,153450,153452],{"className":30359,"code":153451,"language":30361,"meta":10,"style":10},"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",[89,153453,153454,153463,153471,153482,153486,153496,153509,153520,153527,153533,153537,153546,153555,153561,153568],{"__ignoreMap":10},[92,153455,153456,153458,153461],{"class":94,"line":95},[92,153457,14674],{"class":98},[92,153459,153460],{"class":1942}," StudentManager",[92,153462,3718],{"class":102},[92,153464,153465,153467,153469],{"class":94,"line":11},[92,153466,30782],{"class":98},[92,153468,30785],{"class":151},[92,153470,30788],{"class":102},[92,153472,153473,153475,153478,153480],{"class":94,"line":1158},[92,153474,30826],{"class":151},[92,153476,153477],{"class":102},".students ",[92,153479,148],{"class":98},[92,153481,51818],{"class":102},[92,153483,153484],{"class":94,"line":1173},[92,153485,2379],{"emptyLinePlaceholder":17},[92,153487,153488,153490,153493],{"class":94,"line":1179},[92,153489,30782],{"class":98},[92,153491,153492],{"class":1942}," find_by_id",[92,153494,153495],{"class":102},"(self, student_id):\n",[92,153497,153498,153500,153502,153504,153506],{"class":94,"line":1193},[92,153499,3382],{"class":98},[92,153501,152112],{"class":102},[92,153503,26024],{"class":98},[92,153505,38854],{"class":151},[92,153507,153508],{"class":102},".students:\n",[92,153510,153511,153513,153516,153518],{"class":94,"line":1199},[92,153512,4621],{"class":98},[92,153514,153515],{"class":102}," student.student_id ",[92,153517,2928],{"class":98},[92,153519,152133],{"class":102},[92,153521,153522,153525],{"class":94,"line":1290},[92,153523,153524],{"class":98},"                return",[92,153526,152140],{"class":102},[92,153528,153529,153531],{"class":94,"line":1296},[92,153530,14732],{"class":98},[92,153532,152147],{"class":151},[92,153534,153535],{"class":94,"line":1308},[92,153536,2379],{"emptyLinePlaceholder":17},[92,153538,153539,153541,153543],{"class":94,"line":1591},[92,153540,30782],{"class":98},[92,153542,5189],{"class":1942},[92,153544,153545],{"class":102},"(self, student):\n",[92,153547,153548,153550,153552],{"class":94,"line":1596},[92,153549,2476],{"class":98},[92,153551,38854],{"class":151},[92,153553,153554],{"class":102},".find_by_id(student.student_id):\n",[92,153556,153557,153559],{"class":94,"line":1602},[92,153558,15712],{"class":98},[92,153560,125782],{"class":151},[92,153562,153563,153565],{"class":94,"line":1607},[92,153564,30826],{"class":151},[92,153566,153567],{"class":102},".students.append(student)\n",[92,153569,153570,153572],{"class":94,"line":1621},[92,153571,14732],{"class":98},[92,153573,153574],{"class":151}," True\n",[38,153576,153577],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[33,153579,153581],{"id":153580},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[63,153583,153585],{"id":153584},"_1251-数据结构","12.5.1 数据结构",[83,153587,153589],{"className":30359,"code":153588,"language":30361,"meta":10,"style":10},"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",[89,153590,153591,153599,153630,153660,153689,153718],{"__ignoreMap":10},[92,153592,153593,153595,153597],{"class":94,"line":95},[92,153594,148440],{"class":102},[92,153596,148],{"class":98},[92,153598,55427],{"class":102},[92,153600,153601,153603,153605,153607,153609,153611,153614,153616,153619,153621,153623,153625,153628],{"class":94,"line":11},[92,153602,148360],{"class":102},[92,153604,147972],{"class":207},[92,153606,51417],{"class":102},[92,153608,148583],{"class":207},[92,153610,12415],{"class":102},[92,153612,153613],{"class":207},"\"category\"",[92,153615,51417],{"class":102},[92,153617,153618],{"class":207},"\"手机\"",[92,153620,12415],{"class":102},[92,153622,84064],{"class":207},[92,153624,51417],{"class":102},[92,153626,153627],{"class":151},"12000",[92,153629,4909],{"class":102},[92,153631,153632,153634,153636,153638,153640,153642,153644,153646,153649,153651,153653,153655,153658],{"class":94,"line":1158},[92,153633,148360],{"class":102},[92,153635,147972],{"class":207},[92,153637,51417],{"class":102},[92,153639,148583],{"class":207},[92,153641,12415],{"class":102},[92,153643,153613],{"class":207},[92,153645,51417],{"class":102},[92,153647,153648],{"class":207},"\"电脑\"",[92,153650,12415],{"class":102},[92,153652,84064],{"class":207},[92,153654,51417],{"class":102},[92,153656,153657],{"class":151},"18000",[92,153659,4909],{"class":102},[92,153661,153662,153664,153666,153668,153670,153672,153674,153676,153678,153680,153682,153684,153687],{"class":94,"line":1173},[92,153663,148360],{"class":102},[92,153665,147972],{"class":207},[92,153667,51417],{"class":102},[92,153669,148604],{"class":207},[92,153671,12415],{"class":102},[92,153673,153613],{"class":207},[92,153675,51417],{"class":102},[92,153677,153618],{"class":207},[92,153679,12415],{"class":102},[92,153681,84064],{"class":207},[92,153683,51417],{"class":102},[92,153685,153686],{"class":151},"15000",[92,153688,4909],{"class":102},[92,153690,153691,153693,153695,153697,153699,153701,153703,153705,153707,153709,153711,153713,153716],{"class":94,"line":1179},[92,153692,148360],{"class":102},[92,153694,147972],{"class":207},[92,153696,51417],{"class":102},[92,153698,148604],{"class":207},[92,153700,12415],{"class":102},[92,153702,153613],{"class":207},[92,153704,51417],{"class":102},[92,153706,153648],{"class":207},[92,153708,12415],{"class":102},[92,153710,84064],{"class":207},[92,153712,51417],{"class":102},[92,153714,153715],{"class":151},"16000",[92,153717,4909],{"class":102},[92,153719,153720],{"class":94,"line":1193},[92,153721,33227],{"class":102},[63,153723,153725],{"id":153724},"_1252-按日期统计","12.5.2 按日期统计",[83,153727,153729],{"className":30359,"code":153728,"language":30361,"meta":10,"style":10},"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",[89,153730,153731,153740,153744,153755,153769,153782,153801,153805],{"__ignoreMap":10},[92,153732,153733,153736,153738],{"class":94,"line":95},[92,153734,153735],{"class":102},"daily_total ",[92,153737,148],{"class":98},[92,153739,87848],{"class":102},[92,153741,153742],{"class":94,"line":11},[92,153743,2379],{"emptyLinePlaceholder":17},[92,153745,153746,153748,153750,153752],{"class":94,"line":1158},[92,153747,3004],{"class":98},[92,153749,148184],{"class":102},[92,153751,26024],{"class":98},[92,153753,153754],{"class":102}," sales:\n",[92,153756,153757,153760,153762,153765,153767],{"class":94,"line":1173},[92,153758,153759],{"class":102},"    date ",[92,153761,148],{"class":98},[92,153763,153764],{"class":102}," item[",[92,153766,147972],{"class":207},[92,153768,33227],{"class":102},[92,153770,153771,153774,153776,153778,153780],{"class":94,"line":1179},[92,153772,153773],{"class":102},"    amount ",[92,153775,148],{"class":98},[92,153777,153764],{"class":102},[92,153779,84064],{"class":207},[92,153781,33227],{"class":102},[92,153783,153784,153787,153789,153792,153794,153796,153798],{"class":94,"line":1193},[92,153785,153786],{"class":102},"    daily_total[date] ",[92,153788,148],{"class":98},[92,153790,153791],{"class":102}," daily_total.get(date, ",[92,153793,294],{"class":151},[92,153795,13694],{"class":102},[92,153797,584],{"class":98},[92,153799,153800],{"class":102}," amount\n",[92,153802,153803],{"class":94,"line":1199},[92,153804,2379],{"emptyLinePlaceholder":17},[92,153806,153807,153809],{"class":94,"line":1290},[92,153808,30396],{"class":151},[92,153810,153811],{"class":102},"(daily_total)\n",[63,153813,153815],{"id":153814},"_1253-按类别统计","12.5.3 按类别统计",[83,153817,153819],{"className":30359,"code":153818,"language":30361,"meta":10,"style":10},"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",[89,153820,153821,153830,153834,153844,153857,153869,153887,153891],{"__ignoreMap":10},[92,153822,153823,153826,153828],{"class":94,"line":95},[92,153824,153825],{"class":102},"category_total ",[92,153827,148],{"class":98},[92,153829,87848],{"class":102},[92,153831,153832],{"class":94,"line":11},[92,153833,2379],{"emptyLinePlaceholder":17},[92,153835,153836,153838,153840,153842],{"class":94,"line":1158},[92,153837,3004],{"class":98},[92,153839,148184],{"class":102},[92,153841,26024],{"class":98},[92,153843,153754],{"class":102},[92,153845,153846,153849,153851,153853,153855],{"class":94,"line":1173},[92,153847,153848],{"class":102},"    category ",[92,153850,148],{"class":98},[92,153852,153764],{"class":102},[92,153854,153613],{"class":207},[92,153856,33227],{"class":102},[92,153858,153859,153861,153863,153865,153867],{"class":94,"line":1179},[92,153860,153773],{"class":102},[92,153862,148],{"class":98},[92,153864,153764],{"class":102},[92,153866,84064],{"class":207},[92,153868,33227],{"class":102},[92,153870,153871,153874,153876,153879,153881,153883,153885],{"class":94,"line":1193},[92,153872,153873],{"class":102},"    category_total[category] ",[92,153875,148],{"class":98},[92,153877,153878],{"class":102}," category_total.get(category, ",[92,153880,294],{"class":151},[92,153882,13694],{"class":102},[92,153884,584],{"class":98},[92,153886,153800],{"class":102},[92,153888,153889],{"class":94,"line":1199},[92,153890,2379],{"emptyLinePlaceholder":17},[92,153892,153893,153895],{"class":94,"line":1290},[92,153894,30396],{"class":151},[92,153896,153897],{"class":102},"(category_total)\n",[63,153899,153901],{"id":153900},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[83,153903,153905],{"className":30359,"code":153904,"language":30361,"meta":10,"style":10},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[89,153906,153907,153932],{"__ignoreMap":10},[92,153908,153909,153912,153914,153916,153919,153922,153925,153928,153930],{"class":94,"line":95},[92,153910,153911],{"class":102},"top_date, top_amount ",[92,153913,148],{"class":98},[92,153915,5931],{"class":151},[92,153917,153918],{"class":102},"(daily_total.items(), ",[92,153920,153921],{"class":5196},"key",[92,153923,153924],{"class":98},"=lambda",[92,153926,153927],{"class":102}," item: item[",[92,153929,320],{"class":151},[92,153931,4636],{"class":102},[92,153933,153934,153936],{"class":94,"line":11},[92,153935,30396],{"class":151},[92,153937,153938],{"class":102},"(top_date, top_amount)\n",[33,153940,153942],{"id":153941},"_126-绘制柱状图","12.6 绘制柱状图",[83,153944,153946],{"className":30359,"code":153945,"language":30361,"meta":10,"style":10},"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",[89,153947,153948,153962,153973,153977,153985,153997,154009,154020,154024,154028,154038,154049,154063,154068,154085,154102,154118,154122],{"__ignoreMap":10},[92,153949,153950,153952,153954,153956,153958,153960],{"class":94,"line":95},[92,153951,30718],{"class":98},[92,153953,147354],{"class":102},[92,153955,30373],{"class":98},[92,153957,147359],{"class":102},[92,153959,31364],{"class":98},[92,153961,147364],{"class":102},[92,153963,153964,153966,153968,153970],{"class":94,"line":11},[92,153965,30718],{"class":98},[92,153967,147213],{"class":102},[92,153969,30373],{"class":98},[92,153971,153972],{"class":102}," Bar\n",[92,153974,153975],{"class":94,"line":1158},[92,153976,2379],{"emptyLinePlaceholder":17},[92,153978,153979,153981,153983],{"class":94,"line":1173},[92,153980,153825],{"class":102},[92,153982,148],{"class":98},[92,153984,15552],{"class":102},[92,153986,153987,153990,153992,153995],{"class":94,"line":1179},[92,153988,153989],{"class":207},"    \"手机\"",[92,153991,51417],{"class":102},[92,153993,153994],{"class":151},"27000",[92,153996,31447],{"class":102},[92,153998,153999,154002,154004,154007],{"class":94,"line":1193},[92,154000,154001],{"class":207},"    \"电脑\"",[92,154003,51417],{"class":102},[92,154005,154006],{"class":151},"34000",[92,154008,31447],{"class":102},[92,154010,154011,154014,154016,154018],{"class":94,"line":1199},[92,154012,154013],{"class":207},"    \"耳机\"",[92,154015,51417],{"class":102},[92,154017,124374],{"class":151},[92,154019,31447],{"class":102},[92,154021,154022],{"class":94,"line":1290},[92,154023,1544],{"class":102},[92,154025,154026],{"class":94,"line":1296},[92,154027,2379],{"emptyLinePlaceholder":17},[92,154029,154030,154033,154035],{"class":94,"line":1308},[92,154031,154032],{"class":102},"bar ",[92,154034,148],{"class":98},[92,154036,154037],{"class":102}," Bar()\n",[92,154039,154040,154043,154046],{"class":94,"line":1591},[92,154041,154042],{"class":102},"bar.add_xaxis(",[92,154044,154045],{"class":151},"list",[92,154047,154048],{"class":102},"(category_total.keys()))\n",[92,154050,154051,154054,154056,154058,154060],{"class":94,"line":1596},[92,154052,154053],{"class":102},"bar.add_yaxis(",[92,154055,147270],{"class":207},[92,154057,12415],{"class":102},[92,154059,154045],{"class":151},[92,154061,154062],{"class":102},"(category_total.values()))\n",[92,154064,154065],{"class":94,"line":1602},[92,154066,154067],{"class":102},"bar.set_global_opts(\n",[92,154069,154070,154072,154074,154076,154078,154080,154083],{"class":94,"line":1607},[92,154071,147448],{"class":5196},[92,154073,148],{"class":98},[92,154075,147453],{"class":102},[92,154077,51387],{"class":5196},[92,154079,148],{"class":98},[92,154081,154082],{"class":207},"\"品类销售额\"",[92,154084,38028],{"class":102},[92,154086,154087,154089,154091,154093,154095,154097,154100],{"class":94,"line":1621},[92,154088,147467],{"class":5196},[92,154090,148],{"class":98},[92,154092,147472],{"class":102},[92,154094,79790],{"class":5196},[92,154096,148],{"class":98},[92,154098,154099],{"class":207},"\"品类\"",[92,154101,38028],{"class":102},[92,154103,154104,154106,154108,154110,154112,154114,154116],{"class":94,"line":1626},[92,154105,147486],{"class":5196},[92,154107,148],{"class":98},[92,154109,147472],{"class":102},[92,154111,79790],{"class":5196},[92,154113,148],{"class":98},[92,154115,147270],{"class":207},[92,154117,38028],{"class":102},[92,154119,154120],{"class":94,"line":1632},[92,154121,109],{"class":102},[92,154123,154124,154127,154130],{"class":94,"line":1653},[92,154125,154126],{"class":102},"bar.render(",[92,154128,154129],{"class":207},"\"category_sales.html\"",[92,154131,109],{"class":102},[33,154133,154135],{"id":154134},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[38,154137,154138],{},"时间线适合展示不同日期、月份、年份的数据变化。",[83,154140,154142],{"className":30359,"code":154141,"language":30361,"meta":10,"style":10},"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",[89,154143,154144,154158,154169,154173,154181,154205,154228,154253,154257,154261,154271,154275,154286,154295,154305,154319,154350,154355,154359],{"__ignoreMap":10},[92,154145,154146,154148,154150,154152,154154,154156],{"class":94,"line":95},[92,154147,30718],{"class":98},[92,154149,147354],{"class":102},[92,154151,30373],{"class":98},[92,154153,147359],{"class":102},[92,154155,31364],{"class":98},[92,154157,147364],{"class":102},[92,154159,154160,154162,154164,154166],{"class":94,"line":11},[92,154161,30718],{"class":98},[92,154163,147213],{"class":102},[92,154165,30373],{"class":98},[92,154167,154168],{"class":102}," Bar, Timeline\n",[92,154170,154171],{"class":94,"line":1158},[92,154172,2379],{"emptyLinePlaceholder":17},[92,154174,154175,154177,154179],{"class":94,"line":1173},[92,154176,101633],{"class":102},[92,154178,148],{"class":98},[92,154180,15552],{"class":102},[92,154182,154183,154186,154189,154191,154193,154195,154197,154199,154201,154203],{"class":94,"line":1179},[92,154184,154185],{"class":207},"    \"2024-10-01\"",[92,154187,154188],{"class":102},": {",[92,154190,153618],{"class":207},[92,154192,51417],{"class":102},[92,154194,153627],{"class":151},[92,154196,12415],{"class":102},[92,154198,153648],{"class":207},[92,154200,51417],{"class":102},[92,154202,153657],{"class":151},[92,154204,4909],{"class":102},[92,154206,154207,154210,154212,154214,154216,154218,154220,154222,154224,154226],{"class":94,"line":1193},[92,154208,154209],{"class":207},"    \"2024-10-02\"",[92,154211,154188],{"class":102},[92,154213,153618],{"class":207},[92,154215,51417],{"class":102},[92,154217,153686],{"class":151},[92,154219,12415],{"class":102},[92,154221,153648],{"class":207},[92,154223,51417],{"class":102},[92,154225,153715],{"class":151},[92,154227,4909],{"class":102},[92,154229,154230,154233,154235,154237,154239,154242,154244,154246,154248,154251],{"class":94,"line":1199},[92,154231,154232],{"class":207},"    \"2024-10-03\"",[92,154234,154188],{"class":102},[92,154236,153618],{"class":207},[92,154238,51417],{"class":102},[92,154240,154241],{"class":151},"17000",[92,154243,12415],{"class":102},[92,154245,153648],{"class":207},[92,154247,51417],{"class":102},[92,154249,154250],{"class":151},"19000",[92,154252,4909],{"class":102},[92,154254,154255],{"class":94,"line":1290},[92,154256,1544],{"class":102},[92,154258,154259],{"class":94,"line":1296},[92,154260,2379],{"emptyLinePlaceholder":17},[92,154262,154263,154266,154268],{"class":94,"line":1308},[92,154264,154265],{"class":102},"timeline ",[92,154267,148],{"class":98},[92,154269,154270],{"class":102}," Timeline()\n",[92,154272,154273],{"class":94,"line":1591},[92,154274,2379],{"emptyLinePlaceholder":17},[92,154276,154277,154279,154282,154284],{"class":94,"line":1596},[92,154278,3004],{"class":98},[92,154280,154281],{"class":102}," date, category_data ",[92,154283,26024],{"class":98},[92,154285,149123],{"class":102},[92,154287,154288,154291,154293],{"class":94,"line":1602},[92,154289,154290],{"class":102},"    bar ",[92,154292,148],{"class":98},[92,154294,154037],{"class":102},[92,154296,154297,154300,154302],{"class":94,"line":1607},[92,154298,154299],{"class":102},"    bar.add_xaxis(",[92,154301,154045],{"class":151},[92,154303,154304],{"class":102},"(category_data.keys()))\n",[92,154306,154307,154310,154312,154314,154316],{"class":94,"line":1621},[92,154308,154309],{"class":102},"    bar.add_yaxis(",[92,154311,147270],{"class":207},[92,154313,12415],{"class":102},[92,154315,154045],{"class":151},[92,154317,154318],{"class":102},"(category_data.values()))\n",[92,154320,154321,154324,154327,154329,154331,154333,154335,154337,154339,154341,154343,154345,154348],{"class":94,"line":1626},[92,154322,154323],{"class":102},"    bar.set_global_opts(",[92,154325,154326],{"class":5196},"title_opts",[92,154328,148],{"class":98},[92,154330,147453],{"class":102},[92,154332,51387],{"class":5196},[92,154334,148],{"class":98},[92,154336,155],{"class":98},[92,154338,354],{"class":207},[92,154340,999],{"class":151},[92,154342,73906],{"class":102},[92,154344,1049],{"class":151},[92,154346,154347],{"class":207},"销售额\"",[92,154349,30478],{"class":102},[92,154351,154352],{"class":94,"line":1632},[92,154353,154354],{"class":102},"    timeline.add(bar, date)\n",[92,154356,154357],{"class":94,"line":1653},[92,154358,2379],{"emptyLinePlaceholder":17},[92,154360,154361,154364,154367],{"class":94,"line":1658},[92,154362,154363],{"class":102},"timeline.render(",[92,154365,154366],{"class":207},"\"timeline_sales.html\"",[92,154368,109],{"class":102},[33,154370,154372],{"id":154371},"_128-绘制地图","12.8 绘制地图",[38,154374,154375],{},"地图适合展示地区数据。",[83,154377,154379],{"className":30359,"code":154378,"language":30361,"meta":10,"style":10},"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",[89,154380,154381,154395,154406,154410,154418,154431,154443,154456,154469,154473,154477,154487,154502,154507,154524,154543,154547],{"__ignoreMap":10},[92,154382,154383,154385,154387,154389,154391,154393],{"class":94,"line":95},[92,154384,30718],{"class":98},[92,154386,147354],{"class":102},[92,154388,30373],{"class":98},[92,154390,147359],{"class":102},[92,154392,31364],{"class":98},[92,154394,147364],{"class":102},[92,154396,154397,154399,154401,154403],{"class":94,"line":11},[92,154398,30718],{"class":98},[92,154400,147213],{"class":102},[92,154402,30373],{"class":98},[92,154404,154405],{"class":102}," Map\n",[92,154407,154408],{"class":94,"line":1158},[92,154409,2379],{"emptyLinePlaceholder":17},[92,154411,154412,154414,154416],{"class":94,"line":1173},[92,154413,101633],{"class":102},[92,154415,148],{"class":98},[92,154417,55427],{"class":102},[92,154419,154420,154423,154425,154427,154429],{"class":94,"line":1179},[92,154421,154422],{"class":102},"    (",[92,154424,69249],{"class":207},[92,154426,12415],{"class":102},[92,154428,920],{"class":151},[92,154430,38028],{"class":102},[92,154432,154433,154435,154437,154439,154441],{"class":94,"line":1193},[92,154434,154422],{"class":102},[92,154436,69269],{"class":207},[92,154438,12415],{"class":102},[92,154440,147287],{"class":151},[92,154442,38028],{"class":102},[92,154444,154445,154447,154450,154452,154454],{"class":94,"line":1199},[92,154446,154422],{"class":102},[92,154448,154449],{"class":207},"\"广东\"",[92,154451,12415],{"class":102},[92,154453,1701],{"class":151},[92,154455,38028],{"class":102},[92,154457,154458,154460,154463,154465,154467],{"class":94,"line":1290},[92,154459,154422],{"class":102},[92,154461,154462],{"class":207},"\"浙江\"",[92,154464,12415],{"class":102},[92,154466,147292],{"class":151},[92,154468,38028],{"class":102},[92,154470,154471],{"class":94,"line":1296},[92,154472,33227],{"class":102},[92,154474,154475],{"class":94,"line":1308},[92,154476,2379],{"emptyLinePlaceholder":17},[92,154478,154479,154482,154484],{"class":94,"line":1591},[92,154480,154481],{"class":102},"map_chart ",[92,154483,148],{"class":98},[92,154485,154486],{"class":102}," Map()\n",[92,154488,154489,154492,154494,154497,154500],{"class":94,"line":1596},[92,154490,154491],{"class":102},"map_chart.add(",[92,154493,147270],{"class":207},[92,154495,154496],{"class":102},", data, ",[92,154498,154499],{"class":207},"\"china\"",[92,154501,109],{"class":102},[92,154503,154504],{"class":94,"line":1602},[92,154505,154506],{"class":102},"map_chart.set_global_opts(\n",[92,154508,154509,154511,154513,154515,154517,154519,154522],{"class":94,"line":1607},[92,154510,147448],{"class":5196},[92,154512,148],{"class":98},[92,154514,147453],{"class":102},[92,154516,51387],{"class":5196},[92,154518,148],{"class":98},[92,154520,154521],{"class":207},"\"地区销售额\"",[92,154523,38028],{"class":102},[92,154525,154526,154529,154531,154534,154537,154539,154541],{"class":94,"line":1621},[92,154527,154528],{"class":5196},"    visualmap_opts",[92,154530,148],{"class":98},[92,154532,154533],{"class":102},"opts.VisualMapOpts(",[92,154535,154536],{"class":5196},"max_",[92,154538,148],{"class":98},[92,154540,1701],{"class":151},[92,154542,38028],{"class":102},[92,154544,154545],{"class":94,"line":1626},[92,154546,109],{"class":102},[92,154548,154549,154552,154555],{"class":94,"line":1632},[92,154550,154551],{"class":102},"map_chart.render(",[92,154553,154554],{"class":207},"\"map_sales.html\"",[92,154556,109],{"class":102},[38,154558,154559],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[33,154561,154563],{"id":154562},"_129-项目拆分建议","12.9 项目拆分建议",[38,154565,154566],{},"当代码超过一个文件时，可以这样组织：",[83,154568,154571],{"className":154569,"code":154570,"language":5167,"meta":10},[5165],"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",[89,154572,154570],{"__ignoreMap":10},[38,154574,154575],{},"职责：",[46,154577,154578,154584,154590,154596],{},[49,154579,154580,154583],{},[89,154581,154582],{},"main.py","：程序入口。",[49,154585,154586,154589],{},[89,154587,154588],{},"file_utils.py","：读写 JSON。",[49,154591,154592,154595],{},[89,154593,154594],{},"sales_service.py","：统计销售数据。",[49,154597,154598,154601],{},[89,154599,154600],{},"chart_builder.py","：生成图表。",[33,154603,154605],{"id":154604},"_1210-python基础复习清单","12.10 Python基础复习清单",[38,154607,154608],{},"语法基础：",[46,154610,154611,154614,154617,154620],{},[49,154612,154613],{},"会写变量、注释、输入输出。",[49,154615,154616],{},"会使用 int、float、str、bool。",[49,154618,154619],{},"会做类型转换。",[49,154621,154622],{},"会使用 f-string 格式化输出。",[38,154624,154625],{},"流程控制：",[46,154627,154628,154634,154640,154648],{},[49,154629,154630,154631,28366],{},"会写 ",[89,154632,154633],{},"if elif else",[49,154635,154630,154636,100993,154638,28366],{},[89,154637,108638],{},[89,154639,3004],{},[49,154641,154642,154643,100993,154645,28366],{},"理解 ",[89,154644,2032],{},[89,154646,154647],{},"continue",[49,154649,154650],{},"能写嵌套循环。",[38,154652,154653],{},"函数：",[46,154655,154656,154659,154662,154665],{},[49,154657,154658],{},"会定义和调用函数。",[49,154660,154661],{},"理解参数和返回值。",[49,154663,154664],{},"知道局部变量和全局变量。",[49,154666,154667],{},"会使用默认参数、关键字参数、不定长参数。",[38,154669,154670],{},"容器：",[46,154672,154673,154676,154679,154682,154685],{},[49,154674,154675],{},"会使用列表增删改查。",[49,154677,154678],{},"会遍历列表、字典。",[49,154680,154681],{},"会使用切片。",[49,154683,154684],{},"会用集合去重。",[49,154686,154687],{},"会处理列表嵌套字典。",[38,154689,154690],{},"文件和模块：",[46,154692,154693,154696,154699,154702,154705],{},[49,154694,154695],{},"会读写文本文件。",[49,154697,154698],{},"会读写 JSON。",[49,154700,154701],{},"会捕获常见异常。",[49,154703,154704],{},"会导入模块和第三方包。",[49,154706,154707],{},"会创建简单包结构。",[38,154709,154710],{},"项目能力：",[46,154712,154713,154716,154719,154722,154725],{},[49,154714,154715],{},"能把代码拆成函数。",[49,154717,154718],{},"能把数据保存到文件。",[49,154720,154721],{},"能处理用户输入错误。",[49,154723,154724],{},"能写一个完整菜单程序。",[49,154726,154727],{},"能用 pyecharts 生成图表。",[33,154729,154731],{"id":154730},"_1211-推荐练习顺序","12.11 推荐练习顺序",[46,154733,154734,154737,154740,154743,154746,154749,154752,154755],{},[49,154735,154736],{},"猜数字游戏。",[49,154738,154739],{},"ATM 菜单程序。",[49,154741,154742],{},"学生成绩统计。",[49,154744,154745],{},"学生管理系统函数版。",[49,154747,154748],{},"学生管理系统文件持久化版。",[49,154750,154751],{},"学生管理系统面向对象版。",[49,154753,154754],{},"销售数据统计。",[49,154756,154757],{},"销售数据可视化。",[33,154759,154761],{"id":154760},"_1212-常见学习误区","12.12 常见学习误区",[46,154763,154764,154767,154770,154773,154776,154779,154782],{},[49,154765,154766],{},"只看视频不敲代码。",[49,154768,154769],{},"一报错就复制错误去搜，不先读报错位置。",[49,154771,154772],{},"变量名随便写，后续自己看不懂。",[49,154774,154775],{},"所有代码都写在一个文件一个函数里。",[49,154777,154778],{},"不保存练习代码，复习时没有材料。",[49,154780,154781],{},"还没掌握列表字典就急着学框架。",[49,154783,154784],{},"不会读官方文档，只依赖教程。",[33,154786,154788],{"id":154787},"_1213-如何读报错","12.13 如何读报错",[38,154790,154791],{},"报错通常从下往上看最后几行。",[38,154793,15115],{},[83,154795,154798],{"className":154796,"code":154797,"language":5167,"meta":10},[5165],"ValueError: invalid literal for int() with base 10: 'abc'\n",[89,154799,154797],{"__ignoreMap":10},[38,154801,24580],{},[46,154803,154804,154810,154820],{},[49,154805,154806,154807,28366],{},"异常类型是 ",[89,154808,154809],{},"ValueError",[49,154811,107320,154812,154815,154816,154819],{},[89,154813,154814],{},"int()"," 无法把 ",[89,154817,154818],{},"'abc'"," 转成整数。",[49,154821,154822],{},"应该检查输入内容或增加异常处理。",[38,154824,154825],{},"再看文件名和行号：",[83,154827,154830],{"className":154828,"code":154829,"language":5167,"meta":10},[5165],"File \"main.py\", line 10, in \u003Cmodule>\n",[89,154831,154829],{"__ignoreMap":10},[38,154833,154834,154835,154837],{},"表示错误发生在 ",[89,154836,154582],{}," 第 10 行。",[33,154839,154841],{"id":154840},"_1214-后续学习方向","12.14 后续学习方向",[38,154843,154844],{},"Python 基础完成后，可以按兴趣选择方向：",[46,154846,154847,154859,154868,154880,154891,154900,154910],{},[49,154848,154849,154850,315,154853,315,154856,28366],{},"自动化办公：",[89,154851,154852],{},"openpyxl",[89,154854,154855],{},"python-docx",[89,154857,154858],{},"pdfplumber",[49,154860,154861,154862,315,154864,315,154866,28366],{},"数据分析：",[89,154863,5],{},[89,154865,146160],{},[89,154867,146168],{},[49,154869,154870,154871,315,154874,315,154877,28366],{},"Web 后端：",[89,154872,154873],{},"Flask",[89,154875,154876],{},"FastAPI",[89,154878,154879],{},"Django",[49,154881,154882,154883,315,154885,315,154888,28366],{},"爬虫：",[89,154884,146145],{},[89,154886,154887],{},"BeautifulSoup",[89,154889,154890],{},"Scrapy",[49,154892,154893,154894,315,154896,154899],{},"测试开发：",[89,154895,146192],{},[89,154897,154898],{},"selenium","、接口测试。",[49,154901,154902,154903,315,154905,315,154907,28366],{},"人工智能：",[89,154904,5],{},[89,154906,146160],{},[89,154908,154909],{},"pytorch",[49,154911,154912,154913,315,154915,315,154918,28366],{},"运维脚本：",[89,154914,145761],{},[89,154916,154917],{},"subprocess",[89,154919,154920],{},"paramiko",[38,154922,154923],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[33,154925,154927],{"id":154926},"_1215-结课练习","12.15 结课练习",[46,154929,154930,154933,154936,154939,154942,154945,154948,154951],{},[49,154931,154932],{},"完成函数版学生管理系统。",[49,154934,154935],{},"给学生管理系统增加 JSON 持久化。",[49,154937,154938],{},"给学生管理系统增加异常处理。",[49,154940,154941],{},"把学生管理系统改成面向对象版。",[49,154943,154944],{},"使用 pyecharts 绘制学生成绩柱状图。",[49,154946,154947],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[49,154949,154950],{},"按品类统计销售额并绘制柱状图。",[49,154952,154953],{},"写一份自己的 Python 学习路线图。",[5106,154955,154956],{},"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":10,"searchDepth":11,"depth":11,"links":154958},[154959,154960,154963,154964,154965,154971,154972,154973,154974,154975,154976,154977,154978,154979,154980],{"id":151675,"depth":11,"text":151676},{"id":151725,"depth":11,"text":151726,"children":154961},[154962],{"id":151729,"depth":1158,"text":151730},{"id":151768,"depth":11,"text":151769},{"id":153242,"depth":11,"text":153243},{"id":153580,"depth":11,"text":153581,"children":154966},[154967,154968,154969,154970],{"id":153584,"depth":1158,"text":153585},{"id":153724,"depth":1158,"text":153725},{"id":153814,"depth":1158,"text":153815},{"id":153900,"depth":1158,"text":153901},{"id":153941,"depth":11,"text":153942},{"id":154134,"depth":11,"text":154135},{"id":154371,"depth":11,"text":154372},{"id":154562,"depth":11,"text":154563},{"id":154604,"depth":11,"text":154605},{"id":154730,"depth":11,"text":154731},{"id":154760,"depth":11,"text":154761},{"id":154787,"depth":11,"text":154788},{"id":154840,"depth":11,"text":154841},{"id":154926,"depth":11,"text":154927},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151667,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154987,"title":154988,"body":154989,"description":13,"extension":14,"meta":157458,"navigation":17,"path":157459,"seo":157460,"stem":157461,"__hash__":157462},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":154990,"toc":157433},[154991,154994,154998,155001,155004,155024,155027,155050,155053,155056,155078,155081,155103,155107,155110,155150,155153,155274,155278,155281,155321,155324,155348,155351,155355,155358,155372,155405,155408,155443,155446,155469,155472,155505,155508,155510,155516,155591,155594,155600,155617,155657,155661,155664,155710,155712,155750,155753,155788,155791,155826,155829,155861,155864,155883,155887,155891,156004,156006,156081,156085,156131,156134,156160,156169,156173,156176,156239,156247,156275,156279,156319,156384,156388,156391,156430,156433,156478,156481,156542,156546,156573,156576,156604,156607,156611,156615,156680,156683,156721,156724,156756,156760,156859,156863,156866,156939,156942,156990,156994,157000,157040,157043,157090,157093,157142,157146,157148,157162,157164,157345,157349,157376,157396,157403,157407,157424,157430],[29,154992,154988],{"id":154993},"_2-基础语法变量与字符串",[33,154995,154997],{"id":154996},"_21-注释","2.1 注释",[38,154999,155000],{},"注释是给人看的说明文字，不会被 Python 执行。",[38,155002,155003],{},"单行注释：",[83,155005,155007],{"className":30359,"code":155006,"language":30361,"meta":10,"style":10},"# 这是单行注释\nprint(\"hello\")\n",[89,155008,155009,155014],{"__ignoreMap":10},[92,155010,155011],{"class":94,"line":95},[92,155012,155013],{"class":161},"# 这是单行注释\n",[92,155015,155016,155018,155020,155022],{"class":94,"line":11},[92,155017,30396],{"class":151},[92,155019,103],{"class":102},[92,155021,5824],{"class":207},[92,155023,109],{"class":102},[38,155025,155026],{},"多行说明常用三引号：",[83,155028,155030],{"className":30359,"code":155029,"language":30361,"meta":10,"style":10},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[89,155031,155032,155036,155041,155046],{"__ignoreMap":10},[92,155033,155034],{"class":94,"line":95},[92,155035,95678],{"class":207},[92,155037,155038],{"class":94,"line":11},[92,155039,155040],{"class":207},"这是多行说明。\n",[92,155042,155043],{"class":94,"line":1158},[92,155044,155045],{"class":207},"常用于文件顶部说明、函数说明等。\n",[92,155047,155048],{"class":94,"line":1173},[92,155049,95678],{"class":207},[38,155051,155052],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[38,155054,155055],{},"不好：",[83,155057,155059],{"className":30359,"code":155058,"language":30361,"meta":10,"style":10},"# age 加 1\nage = age + 1\n",[89,155060,155061,155066],{"__ignoreMap":10},[92,155062,155063],{"class":94,"line":95},[92,155064,155065],{"class":161},"# age 加 1\n",[92,155067,155068,155070,155072,155074,155076],{"class":94,"line":11},[92,155069,146521],{"class":102},[92,155071,148],{"class":98},[92,155073,15687],{"class":102},[92,155075,584],{"class":98},[92,155077,55679],{"class":151},[38,155079,155080],{},"较好：",[83,155082,155084],{"className":30359,"code":155083,"language":30361,"meta":10,"style":10},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[89,155085,155086,155091],{"__ignoreMap":10},[92,155087,155088],{"class":94,"line":95},[92,155089,155090],{"class":161},"# 用户过完生日后，年龄增加一岁\n",[92,155092,155093,155095,155097,155099,155101],{"class":94,"line":11},[92,155094,146521],{"class":102},[92,155096,148],{"class":98},[92,155098,15687],{"class":102},[92,155100,584],{"class":98},[92,155102,55679],{"class":151},[33,155104,155106],{"id":155105},"_22-字面量","2.2 字面量",[38,155108,155109],{},"字面量就是代码中直接写出来的数据。",[83,155111,155113],{"className":30359,"code":155112,"language":30361,"meta":10,"style":10},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[89,155114,155115,155122,155129,155136,155143],{"__ignoreMap":10},[92,155116,155117,155119],{"class":94,"line":95},[92,155118,414],{"class":151},[92,155120,155121],{"class":161},"          # 整数\n",[92,155123,155124,155126],{"class":94,"line":11},[92,155125,152],{"class":151},[92,155127,155128],{"class":161},"         # 小数\n",[92,155130,155131,155133],{"class":94,"line":1158},[92,155132,5824],{"class":207},[92,155134,155135],{"class":161},"      # 字符串\n",[92,155137,155138,155140],{"class":94,"line":1173},[92,155139,31457],{"class":151},[92,155141,155142],{"class":161},"         # 布尔值\n",[92,155144,155145,155147],{"class":94,"line":1179},[92,155146,95666],{"class":151},[92,155148,155149],{"class":161},"         # 空值\n",[38,155151,155152],{},"常见字面量类型：",[240,155154,155155,155165],{},[243,155156,155157],{},[246,155158,155159,155161,155163],{},[249,155160,23717],{},[249,155162,27473],{},[249,155164,25850],{},[287,155166,155167,155178,155189,155200,155212,155224,155236,155249,155261],{},[246,155168,155169,155171,155175],{},[292,155170,106],{},[292,155172,155173],{},[89,155174,414],{},[292,155176,155177],{},"整数",[246,155179,155180,155182,155186],{},[292,155181,142],{},[292,155183,155184],{},[89,155185,152],{},[292,155187,155188],{},"浮点数",[246,155190,155191,155193,155197],{},[292,155192,1278],{},[292,155194,155195],{},[89,155196,5824],{},[292,155198,155199],{},"字符串",[246,155201,155202,155204,155210],{},[292,155203,1333],{},[292,155205,155206,315,155208],{},[89,155207,31457],{},[89,155209,33968],{},[292,155211,65995],{},[246,155213,155214,155217,155221],{},[292,155215,155216],{},"NoneType",[292,155218,155219],{},[89,155220,95666],{},[292,155222,155223],{},"空值",[246,155225,155226,155228,155233],{},[292,155227,154045],{},[292,155229,155230],{},[89,155231,155232],{},"[1, 2, 3]",[292,155234,155235],{},"列表",[246,155237,155238,155241,155246],{},[292,155239,155240],{},"tuple",[292,155242,155243],{},[89,155244,155245],{},"(1, 2, 3)",[292,155247,155248],{},"元组",[246,155250,155251,155253,155258],{},[292,155252,114521],{},[292,155254,155255],{},[89,155256,155257],{},"{\"name\": \"张三\"}",[292,155259,155260],{},"字典",[246,155262,155263,155266,155271],{},[292,155264,155265],{},"set",[292,155267,155268],{},[89,155269,155270],{},"{1, 2, 3}",[292,155272,155273],{},"集合",[33,155275,155277],{"id":155276},"_23-变量","2.3 变量",[38,155279,155280],{},"变量是保存数据的名字。",[83,155282,155284],{"className":30359,"code":155283,"language":30361,"meta":10,"style":10},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[89,155285,155286,155294,155302,155312],{"__ignoreMap":10},[92,155287,155288,155290,155292],{"class":94,"line":95},[92,155289,146511],{"class":102},[92,155291,148],{"class":98},[92,155293,149328],{"class":207},[92,155295,155296,155298,155300],{"class":94,"line":11},[92,155297,146521],{"class":102},[92,155299,148],{"class":98},[92,155301,146526],{"class":151},[92,155303,155304,155307,155309],{"class":94,"line":1158},[92,155305,155306],{"class":102},"height ",[92,155308,148],{"class":98},[92,155310,155311],{"class":151}," 1.75\n",[92,155313,155314,155317,155319],{"class":94,"line":1173},[92,155315,155316],{"class":102},"is_student ",[92,155318,148],{"class":98},[92,155320,153574],{"class":151},[38,155322,155323],{},"Python 的变量不需要提前声明类型：",[83,155325,155327],{"className":30359,"code":155326,"language":30361,"meta":10,"style":10},"score = 100\nscore = \"满分\"\n",[89,155328,155329,155339],{"__ignoreMap":10},[92,155330,155331,155334,155336],{"class":94,"line":95},[92,155332,155333],{"class":102},"score ",[92,155335,148],{"class":98},[92,155337,155338],{"class":151}," 100\n",[92,155340,155341,155343,155345],{"class":94,"line":11},[92,155342,155333],{"class":102},[92,155344,148],{"class":98},[92,155346,155347],{"class":207}," \"满分\"\n",[38,155349,155350],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[33,155352,155354],{"id":155353},"_24-变量命名规则","2.4 变量命名规则",[38,155356,155357],{},"硬性规则：",[46,155359,155360,155363,155366,155369],{},[49,155361,155362],{},"只能由字母、数字、下划线组成。",[49,155364,155365],{},"不能以数字开头。",[49,155367,155368],{},"不能使用 Python 关键字。",[49,155370,155371],{},"区分大小写。",[83,155373,155375],{"className":30359,"code":155374,"language":30361,"meta":10,"style":10},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[89,155376,155377,155386,155395],{"__ignoreMap":10},[92,155378,155379,155382,155384],{"class":94,"line":95},[92,155380,155381],{"class":102},"user_name ",[92,155383,148],{"class":98},[92,155385,146516],{"class":207},[92,155387,155388,155391,155393],{"class":94,"line":11},[92,155389,155390],{"class":102},"age2 ",[92,155392,148],{"class":98},[92,155394,146526],{"class":151},[92,155396,155397,155400,155402],{"class":94,"line":1158},[92,155398,155399],{"class":102},"_token ",[92,155401,148],{"class":98},[92,155403,155404],{"class":207}," \"abc\"\n",[38,155406,155407],{},"错误写法：",[83,155409,155411],{"className":30359,"code":155410,"language":30361,"meta":10,"style":10},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[89,155412,155413,155422,155434],{"__ignoreMap":10},[92,155414,155415,155418,155420],{"class":94,"line":95},[92,155416,155417],{"class":77383},"2age",[92,155419,13544],{"class":98},[92,155421,146526],{"class":151},[92,155423,155424,155426,155428,155430,155432],{"class":94,"line":11},[92,155425,131559],{"class":102},[92,155427,635],{"class":98},[92,155429,146511],{"class":102},[92,155431,148],{"class":98},[92,155433,146516],{"class":207},[92,155435,155436,155438,155440],{"class":94,"line":1158},[92,155437,14674],{"class":98},[92,155439,13544],{"class":98},[92,155441,155442],{"class":207}," \"一班\"\n",[38,155444,155445],{},"查看关键字：",[83,155447,155449],{"className":30359,"code":155448,"language":30361,"meta":10,"style":10},"import keyword\n\nprint(keyword.kwlist)\n",[89,155450,155451,155458,155462],{"__ignoreMap":10},[92,155452,155453,155455],{"class":94,"line":95},[92,155454,30373],{"class":98},[92,155456,155457],{"class":102}," keyword\n",[92,155459,155460],{"class":94,"line":11},[92,155461,2379],{"emptyLinePlaceholder":17},[92,155463,155464,155466],{"class":94,"line":1158},[92,155465,30396],{"class":151},[92,155467,155468],{"class":102},"(keyword.kwlist)\n",[38,155470,155471],{},"推荐命名风格：",[83,155473,155475],{"className":30359,"code":155474,"language":30361,"meta":10,"style":10},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[89,155476,155477,155486,155496],{"__ignoreMap":10},[92,155478,155479,155482,155484],{"class":94,"line":95},[92,155480,155481],{"class":102},"student_name ",[92,155483,148],{"class":98},[92,155485,149328],{"class":207},[92,155487,155488,155491,155493],{"class":94,"line":11},[92,155489,155490],{"class":102},"total_price ",[92,155492,148],{"class":98},[92,155494,155495],{"class":151}," 99.8\n",[92,155497,155498,155501,155503],{"class":94,"line":1158},[92,155499,155500],{"class":102},"is_finished ",[92,155502,148],{"class":98},[92,155504,125782],{"class":151},[38,155506,155507],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[33,155509,50712],{"id":50711},[38,155511,104341,155512,155515],{},[89,155513,155514],{},"type()"," 查看数据类型：",[83,155517,155519],{"className":30359,"code":155518,"language":30361,"meta":10,"style":10},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[89,155520,155521,155535,155549,155563,155577],{"__ignoreMap":10},[92,155522,155523,155525,155527,155529,155531,155533],{"class":94,"line":95},[92,155524,30396],{"class":151},[92,155526,103],{"class":102},[92,155528,103082],{"class":151},[92,155530,103],{"class":102},[92,155532,414],{"class":151},[92,155534,30478],{"class":102},[92,155536,155537,155539,155541,155543,155545,155547],{"class":94,"line":11},[92,155538,30396],{"class":151},[92,155540,103],{"class":102},[92,155542,103082],{"class":151},[92,155544,103],{"class":102},[92,155546,152],{"class":151},[92,155548,30478],{"class":102},[92,155550,155551,155553,155555,155557,155559,155561],{"class":94,"line":1158},[92,155552,30396],{"class":151},[92,155554,103],{"class":102},[92,155556,103082],{"class":151},[92,155558,103],{"class":102},[92,155560,5824],{"class":207},[92,155562,30478],{"class":102},[92,155564,155565,155567,155569,155571,155573,155575],{"class":94,"line":1173},[92,155566,30396],{"class":151},[92,155568,103],{"class":102},[92,155570,103082],{"class":151},[92,155572,103],{"class":102},[92,155574,31457],{"class":151},[92,155576,30478],{"class":102},[92,155578,155579,155581,155583,155585,155587,155589],{"class":94,"line":1179},[92,155580,30396],{"class":151},[92,155582,103],{"class":102},[92,155584,103082],{"class":151},[92,155586,103],{"class":102},[92,155588,95666],{"class":151},[92,155590,30478],{"class":102},[38,155592,155593],{},"输出类似：",[83,155595,155598],{"className":155596,"code":155597,"language":5167,"meta":10},[5165],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[89,155599,155597],{"__ignoreMap":10},[38,155601,9005,155602,107258,155604,155606,155607,155609,155610,21480,155612,155609,155614,155616],{},[89,155603,1333],{},[89,155605,106],{}," 的子类，",[89,155608,31457],{}," 可以当作 ",[89,155611,320],{},[89,155613,33968],{},[89,155615,294],{},"，但业务代码中不要滥用。",[83,155618,155620],{"className":30359,"code":155619,"language":30361,"meta":10,"style":10},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[89,155621,155622,155640],{"__ignoreMap":10},[92,155623,155624,155626,155628,155630,155632,155634,155637],{"class":94,"line":95},[92,155625,30396],{"class":151},[92,155627,103],{"class":102},[92,155629,31457],{"class":151},[92,155631,45547],{"class":98},[92,155633,25099],{"class":151},[92,155635,155636],{"class":102},")   ",[92,155638,155639],{"class":161},"# 2\n",[92,155641,155642,155644,155646,155648,155650,155652,155654],{"class":94,"line":11},[92,155643,30396],{"class":151},[92,155645,103],{"class":102},[92,155647,33968],{"class":151},[92,155649,45547],{"class":98},[92,155651,25099],{"class":151},[92,155653,45789],{"class":102},[92,155655,155656],{"class":161},"# 1\n",[33,155658,155660],{"id":155659},"_26-类型转换","2.6 类型转换",[38,155662,155663],{},"常用转换函数：",[83,155665,155667],{"className":30359,"code":155666,"language":30361,"meta":10,"style":10},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[89,155668,155669,155679,155690,155700],{"__ignoreMap":10},[92,155670,155671,155673,155675,155677],{"class":94,"line":95},[92,155672,106],{"class":151},[92,155674,103],{"class":102},[92,155676,54296],{"class":207},[92,155678,109],{"class":102},[92,155680,155681,155683,155685,155688],{"class":94,"line":11},[92,155682,142],{"class":151},[92,155684,103],{"class":102},[92,155686,155687],{"class":207},"\"3.14\"",[92,155689,109],{"class":102},[92,155691,155692,155694,155696,155698],{"class":94,"line":1158},[92,155693,1278],{"class":151},[92,155695,103],{"class":102},[92,155697,414],{"class":151},[92,155699,109],{"class":102},[92,155701,155702,155704,155706,155708],{"class":94,"line":1173},[92,155703,1333],{"class":151},[92,155705,103],{"class":102},[92,155707,320],{"class":151},[92,155709,109],{"class":102},[38,155711,15115],{},[83,155713,155715],{"className":30359,"code":155714,"language":30361,"meta":10,"style":10},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[89,155716,155717,155726,155737],{"__ignoreMap":10},[92,155718,155719,155721,155723],{"class":94,"line":95},[92,155720,146521],{"class":102},[92,155722,148],{"class":98},[92,155724,155725],{"class":207}," \"18\"\n",[92,155727,155728,155730,155732,155734],{"class":94,"line":11},[92,155729,146521],{"class":102},[92,155731,148],{"class":98},[92,155733,2361],{"class":151},[92,155735,155736],{"class":102},"(age)\n",[92,155738,155739,155741,155744,155746,155748],{"class":94,"line":1158},[92,155740,30396],{"class":151},[92,155742,155743],{"class":102},"(age ",[92,155745,584],{"class":98},[92,155747,25099],{"class":151},[92,155749,109],{"class":102},[38,155751,155752],{},"输入得到的内容永远是字符串：",[83,155754,155756],{"className":30359,"code":155755,"language":30361,"meta":10,"style":10},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[89,155757,155758,155774],{"__ignoreMap":10},[92,155759,155760,155763,155765,155767,155769,155772],{"class":94,"line":95},[92,155761,155762],{"class":102},"num ",[92,155764,148],{"class":98},[92,155766,60585],{"class":151},[92,155768,103],{"class":102},[92,155770,155771],{"class":207},"\"请输入数字:\"",[92,155773,109],{"class":102},[92,155775,155776,155778,155780,155782,155785],{"class":94,"line":11},[92,155777,30396],{"class":151},[92,155779,103],{"class":102},[92,155781,103082],{"class":151},[92,155783,155784],{"class":102},"(num))  ",[92,155786,155787],{"class":161},"# str\n",[38,155789,155790],{},"如果要做数学运算，必须转换：",[83,155792,155794],{"className":30359,"code":155793,"language":30361,"meta":10,"style":10},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[89,155795,155796,155814],{"__ignoreMap":10},[92,155797,155798,155800,155802,155804,155806,155808,155810,155812],{"class":94,"line":95},[92,155799,155762],{"class":102},[92,155801,148],{"class":98},[92,155803,2361],{"class":151},[92,155805,103],{"class":102},[92,155807,53801],{"class":151},[92,155809,103],{"class":102},[92,155811,155771],{"class":207},[92,155813,30478],{"class":102},[92,155815,155816,155818,155820,155822,155824],{"class":94,"line":11},[92,155817,30396],{"class":151},[92,155819,45600],{"class":102},[92,155821,584],{"class":98},[92,155823,2017],{"class":151},[92,155825,109],{"class":102},[38,155827,155828],{},"常见错误：",[83,155830,155832],{"className":30359,"code":155831,"language":30361,"meta":10,"style":10},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[89,155833,155834,155847],{"__ignoreMap":10},[92,155835,155836,155838,155840,155842,155844],{"class":94,"line":95},[92,155837,106],{"class":151},[92,155839,103],{"class":102},[92,155841,155687],{"class":207},[92,155843,155636],{"class":102},[92,155845,155846],{"class":161},"# 错误\n",[92,155848,155849,155851,155853,155856,155859],{"class":94,"line":11},[92,155850,106],{"class":151},[92,155852,103],{"class":102},[92,155854,155855],{"class":207},"\"abc\"",[92,155857,155858],{"class":102},")    ",[92,155860,155846],{"class":161},[38,155862,155863],{},"正确写法：",[83,155865,155867],{"className":30359,"code":155866,"language":30361,"meta":10,"style":10},"num = float(\"3.14\")\n",[89,155868,155869],{"__ignoreMap":10},[92,155870,155871,155873,155875,155877,155879,155881],{"class":94,"line":95},[92,155872,155762],{"class":102},[92,155874,148],{"class":98},[92,155876,109772],{"class":151},[92,155878,103],{"class":102},[92,155880,155687],{"class":207},[92,155882,109],{"class":102},[33,155884,155886],{"id":155885},"_27-运算符","2.7 运算符",[63,155888,155890],{"id":155889},"_271-算术运算符","2.7.1 算术运算符",[240,155892,155893,155904],{},[243,155894,155895],{},[246,155896,155897,155900,155902],{},[249,155898,155899],{},"运算符",[249,155901,25850],{},[249,155903,27473],{},[287,155905,155906,155920,155934,155948,155962,155976,155990],{},[246,155907,155908,155912,155915],{},[292,155909,155910],{},[89,155911,584],{},[292,155913,155914],{},"加法",[292,155916,155917],{},[89,155918,155919],{},"1 + 2",[246,155921,155922,155926,155929],{},[292,155923,155924],{},[89,155925,635],{},[292,155927,155928],{},"减法",[292,155930,155931],{},[89,155932,155933],{},"5 - 3",[246,155935,155936,155940,155943],{},[292,155937,155938],{},[89,155939,558],{},[292,155941,155942],{},"乘法",[292,155944,155945],{},[89,155946,155947],{},"2 * 3",[246,155949,155950,155954,155957],{},[292,155951,155952],{},[89,155953,687],{},[292,155955,155956],{},"除法，结果是浮点数",[292,155958,155959],{},[89,155960,155961],{},"5 \u002F 2",[246,155963,155964,155968,155971],{},[292,155965,155966],{},[89,155967,33310],{},[292,155969,155970],{},"整除",[292,155972,155973],{},[89,155974,155975],{},"5 \u002F\u002F 2",[246,155977,155978,155982,155985],{},[292,155979,155980],{},[89,155981,431],{},[292,155983,155984],{},"取余",[292,155986,155987],{},[89,155988,155989],{},"5 % 2",[246,155991,155992,155996,155999],{},[292,155993,155994],{},[89,155995,10641],{},[292,155997,155998],{},"幂运算",[292,156000,156001],{},[89,156002,156003],{},"2 ** 3",[38,156005,15115],{},[83,156007,156009],{"className":30359,"code":156008,"language":30361,"meta":10,"style":10},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[89,156010,156011,156029,156046,156063],{"__ignoreMap":10},[92,156012,156013,156015,156017,156019,156022,156024,156026],{"class":94,"line":95},[92,156014,30396],{"class":151},[92,156016,103],{"class":102},[92,156018,422],{"class":151},[92,156020,156021],{"class":98}," \u002F",[92,156023,14735],{"class":151},[92,156025,155636],{"class":102},[92,156027,156028],{"class":161},"# 2.5\n",[92,156030,156031,156033,156035,156037,156040,156042,156044],{"class":94,"line":11},[92,156032,30396],{"class":151},[92,156034,103],{"class":102},[92,156036,422],{"class":151},[92,156038,156039],{"class":98}," \u002F\u002F",[92,156041,14735],{"class":151},[92,156043,45789],{"class":102},[92,156045,155639],{"class":161},[92,156047,156048,156050,156052,156054,156057,156059,156061],{"class":94,"line":1158},[92,156049,30396],{"class":151},[92,156051,103],{"class":102},[92,156053,422],{"class":151},[92,156055,156056],{"class":98}," %",[92,156058,14735],{"class":151},[92,156060,155636],{"class":102},[92,156062,155656],{"class":161},[92,156064,156065,156067,156069,156071,156074,156076,156078],{"class":94,"line":1173},[92,156066,30396],{"class":151},[92,156068,103],{"class":102},[92,156070,180],{"class":151},[92,156072,156073],{"class":98}," **",[92,156075,78050],{"class":151},[92,156077,45789],{"class":102},[92,156079,156080],{"class":161},"# 8\n",[63,156082,156084],{"id":156083},"_272-赋值运算符","2.7.2 赋值运算符",[83,156086,156088],{"className":30359,"code":156087,"language":30361,"meta":10,"style":10},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[89,156089,156090,156098,156106,156114,156122],{"__ignoreMap":10},[92,156091,156092,156094,156096],{"class":94,"line":95},[92,156093,155762],{"class":102},[92,156095,148],{"class":98},[92,156097,58408],{"class":151},[92,156099,156100,156102,156104],{"class":94,"line":11},[92,156101,155762],{"class":102},[92,156103,9457],{"class":98},[92,156105,54407],{"class":151},[92,156107,156108,156110,156112],{"class":94,"line":1158},[92,156109,155762],{"class":102},[92,156111,150227],{"class":98},[92,156113,47704],{"class":151},[92,156115,156116,156118,156120],{"class":94,"line":1173},[92,156117,155762],{"class":102},[92,156119,137123],{"class":98},[92,156121,120011],{"class":151},[92,156123,156124,156126,156129],{"class":94,"line":1179},[92,156125,155762],{"class":102},[92,156127,156128],{"class":98},"\u002F=",[92,156130,47704],{"class":151},[38,156132,156133],{},"等价关系：",[83,156135,156137],{"className":30359,"code":156136,"language":30361,"meta":10,"style":10},"num += 1\nnum = num + 1\n",[89,156138,156139,156147],{"__ignoreMap":10},[92,156140,156141,156143,156145],{"class":94,"line":95},[92,156142,155762],{"class":102},[92,156144,9457],{"class":98},[92,156146,55679],{"class":151},[92,156148,156149,156151,156153,156156,156158],{"class":94,"line":11},[92,156150,155762],{"class":102},[92,156152,148],{"class":98},[92,156154,156155],{"class":102}," num ",[92,156157,584],{"class":98},[92,156159,55679],{"class":151},[38,156161,156162,156163,100993,156166,28366],{},"Python 没有 ",[89,156164,156165],{},"num++",[89,156167,156168],{},"num--",[63,156170,156172],{"id":156171},"_273-比较运算符","2.7.3 比较运算符",[38,156174,156175],{},"比较运算结果是布尔值。",[83,156177,156179],{"className":30359,"code":156178,"language":30361,"meta":10,"style":10},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[89,156180,156181,156195,156210,156224],{"__ignoreMap":10},[92,156182,156183,156185,156187,156189,156191,156193],{"class":94,"line":95},[92,156184,30396],{"class":151},[92,156186,103],{"class":102},[92,156188,549],{"class":151},[92,156190,26203],{"class":98},[92,156192,2127],{"class":151},[92,156194,109],{"class":102},[92,156196,156197,156199,156201,156203,156206,156208],{"class":94,"line":11},[92,156198,30396],{"class":151},[92,156200,103],{"class":102},[92,156202,549],{"class":151},[92,156204,156205],{"class":98}," >=",[92,156207,2017],{"class":151},[92,156209,109],{"class":102},[92,156211,156212,156214,156216,156218,156220,156222],{"class":94,"line":1158},[92,156213,30396],{"class":151},[92,156215,103],{"class":102},[92,156217,549],{"class":151},[92,156219,101534],{"class":98},[92,156221,2062],{"class":151},[92,156223,109],{"class":102},[92,156225,156226,156228,156230,156232,156235,156237],{"class":94,"line":1173},[92,156227,30396],{"class":151},[92,156229,103],{"class":102},[92,156231,549],{"class":151},[92,156233,156234],{"class":98}," !=",[92,156236,2062],{"class":151},[92,156238,109],{"class":102},[38,156240,156241,156242,156244,156245,28366],{},"注意：判断相等用 ",[89,156243,2928],{},"，赋值用 ",[89,156246,148],{},[83,156248,156250],{"className":30359,"code":156249,"language":30361,"meta":10,"style":10},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[89,156251,156252,156264],{"__ignoreMap":10},[92,156253,156254,156256,156258,156261],{"class":94,"line":95},[92,156255,146521],{"class":102},[92,156257,148],{"class":98},[92,156259,156260],{"class":151}," 18",[92,156262,156263],{"class":161},"       # 赋值\n",[92,156265,156266,156268,156270,156272],{"class":94,"line":11},[92,156267,146521],{"class":102},[92,156269,2928],{"class":98},[92,156271,156260],{"class":151},[92,156273,156274],{"class":161},"      # 判断是否相等\n",[63,156276,156278],{"id":156277},"_274-逻辑运算符","2.7.4 逻辑运算符",[240,156280,156281,156289],{},[243,156282,156283],{},[246,156284,156285,156287],{},[249,156286,155899],{},[249,156288,25850],{},[287,156290,156291,156300,156309],{},[246,156292,156293,156297],{},[292,156294,156295],{},[89,156296,30443],{},[292,156298,156299],{},"并且",[246,156301,156302,156306],{},[292,156303,156304],{},[89,156305,115065],{},[292,156307,156308],{},"或者",[246,156310,156311,156316],{},[292,156312,156313],{},[89,156314,156315],{},"not",[292,156317,156318],{},"取反",[83,156320,156322],{"className":30359,"code":156321,"language":30361,"meta":10,"style":10},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[89,156323,156324,156332,156341,156345,156360,156374],{"__ignoreMap":10},[92,156325,156326,156328,156330],{"class":94,"line":95},[92,156327,146521],{"class":102},[92,156329,148],{"class":98},[92,156331,88045],{"class":151},[92,156333,156334,156337,156339],{"class":94,"line":11},[92,156335,156336],{"class":102},"has_ticket ",[92,156338,148],{"class":98},[92,156340,153574],{"class":151},[92,156342,156343],{"class":94,"line":1158},[92,156344,2379],{"emptyLinePlaceholder":17},[92,156346,156347,156349,156351,156353,156355,156357],{"class":94,"line":1173},[92,156348,30396],{"class":151},[92,156350,155743],{"class":102},[92,156352,1689],{"class":98},[92,156354,156260],{"class":151},[92,156356,120404],{"class":98},[92,156358,156359],{"class":102}," has_ticket)\n",[92,156361,156362,156364,156366,156368,156370,156372],{"class":94,"line":1179},[92,156363,30396],{"class":151},[92,156365,155743],{"class":102},[92,156367,1013],{"class":98},[92,156369,156260],{"class":151},[92,156371,114176],{"class":98},[92,156373,156359],{"class":102},[92,156375,156376,156378,156380,156382],{"class":94,"line":1193},[92,156377,30396],{"class":151},[92,156379,103],{"class":102},[92,156381,156315],{"class":98},[92,156383,156359],{"class":102},[33,156385,156387],{"id":156386},"_28-字符串定义","2.8 字符串定义",[38,156389,156390],{},"三种常见写法：",[83,156392,156394],{"className":30359,"code":156393,"language":30361,"meta":10,"style":10},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[89,156395,156396,156406,156415,156425],{"__ignoreMap":10},[92,156397,156398,156401,156403],{"class":94,"line":95},[92,156399,156400],{"class":102},"name1 ",[92,156402,148],{"class":98},[92,156404,156405],{"class":207}," '小明'\n",[92,156407,156408,156411,156413],{"class":94,"line":11},[92,156409,156410],{"class":102},"name2 ",[92,156412,148],{"class":98},[92,156414,149328],{"class":207},[92,156416,156417,156420,156422],{"class":94,"line":1158},[92,156418,156419],{"class":102},"text ",[92,156421,148],{"class":98},[92,156423,156424],{"class":207}," \"\"\"这是多行字符串\n",[92,156426,156427],{"class":94,"line":1173},[92,156428,156429],{"class":207},"可以换行\"\"\"\n",[38,156431,156432],{},"字符串中包含引号：",[83,156434,156436],{"className":30359,"code":156435,"language":30361,"meta":10,"style":10},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[89,156437,156438,156448,156458],{"__ignoreMap":10},[92,156439,156440,156443,156445],{"class":94,"line":95},[92,156441,156442],{"class":102},"msg ",[92,156444,148],{"class":98},[92,156446,156447],{"class":207}," \"他说:'你好'\"\n",[92,156449,156450,156453,156455],{"class":94,"line":11},[92,156451,156452],{"class":102},"msg2 ",[92,156454,148],{"class":98},[92,156456,156457],{"class":207}," '他说:\"你好\"'\n",[92,156459,156460,156463,156465,156468,156471,156474,156476],{"class":94,"line":1158},[92,156461,156462],{"class":102},"msg3 ",[92,156464,148],{"class":98},[92,156466,156467],{"class":207}," \"他说:",[92,156469,156470],{"class":151},"\\\"",[92,156472,156473],{"class":207},"你好",[92,156475,156470],{"class":151},[92,156477,25114],{"class":207},[38,156479,156480],{},"常见转义字符：",[240,156482,156483,156492],{},[243,156484,156485],{},[246,156486,156487,156490],{},[249,156488,156489],{},"写法",[249,156491,100675],{},[287,156493,156494,156504,156513,156523,156532],{},[246,156495,156496,156501],{},[292,156497,156498],{},[89,156499,156500],{},"\\n",[292,156502,156503],{},"换行",[246,156505,156506,156510],{},[292,156507,156508],{},[89,156509,1209],{},[292,156511,156512],{},"制表符",[246,156514,156515,156520],{},[292,156516,156517],{},[89,156518,156519],{},"\\\\",[292,156521,156522],{},"反斜杠",[246,156524,156525,156529],{},[292,156526,156527],{},[89,156528,156470],{},[292,156530,156531],{},"双引号",[246,156533,156534,156539],{},[292,156535,156536],{},[89,156537,156538],{},"\\'",[292,156540,156541],{},"单引号",[33,156543,156545],{"id":156544},"_29-字符串拼接","2.9 字符串拼接",[83,156547,156549],{"className":30359,"code":156548,"language":30361,"meta":10,"style":10},"name = \"小明\"\nprint(\"你好，\" + name)\n",[89,156550,156551,156559],{"__ignoreMap":10},[92,156552,156553,156555,156557],{"class":94,"line":95},[92,156554,146511],{"class":102},[92,156556,148],{"class":98},[92,156558,149328],{"class":207},[92,156560,156561,156563,156565,156568,156570],{"class":94,"line":11},[92,156562,30396],{"class":151},[92,156564,103],{"class":102},[92,156566,156567],{"class":207},"\"你好，\"",[92,156569,45547],{"class":98},[92,156571,156572],{"class":102}," name)\n",[38,156574,156575],{},"字符串只能和字符串拼接：",[83,156577,156579],{"className":30359,"code":156578,"language":30361,"meta":10,"style":10},"age = 18\nprint(\"年龄:\" + str(age))\n",[89,156580,156581,156589],{"__ignoreMap":10},[92,156582,156583,156585,156587],{"class":94,"line":95},[92,156584,146521],{"class":102},[92,156586,148],{"class":98},[92,156588,146526],{"class":151},[92,156590,156591,156593,156595,156597,156599,156601],{"class":94,"line":11},[92,156592,30396],{"class":151},[92,156594,103],{"class":102},[92,156596,146492],{"class":207},[92,156598,45547],{"class":98},[92,156600,73899],{"class":151},[92,156602,156603],{"class":102},"(age))\n",[38,156605,156606],{},"更推荐使用格式化字符串。",[33,156608,156610],{"id":156609},"_210-字符串格式化","2.10 字符串格式化",[63,156612,156614],{"id":156613},"_2101-百分号格式化","2.10.1 百分号格式化",[83,156616,156618],{"className":30359,"code":156617,"language":30361,"meta":10,"style":10},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[89,156619,156620,156628,156636,156645,156649],{"__ignoreMap":10},[92,156621,156622,156624,156626],{"class":94,"line":95},[92,156623,146511],{"class":102},[92,156625,148],{"class":98},[92,156627,149328],{"class":207},[92,156629,156630,156632,156634],{"class":94,"line":11},[92,156631,146521],{"class":102},[92,156633,148],{"class":98},[92,156635,146526],{"class":151},[92,156637,156638,156640,156642],{"class":94,"line":1158},[92,156639,155333],{"class":102},[92,156641,148],{"class":98},[92,156643,156644],{"class":151}," 95.5\n",[92,156646,156647],{"class":94,"line":1173},[92,156648,2379],{"emptyLinePlaceholder":17},[92,156650,156651,156653,156655,156658,156661,156664,156667,156670,156673,156675,156677],{"class":94,"line":1179},[92,156652,30396],{"class":151},[92,156654,103],{"class":102},[92,156656,156657],{"class":207},"\"姓名:",[92,156659,156660],{"class":151},"%s",[92,156662,156663],{"class":207}," 年龄:",[92,156665,156666],{"class":151},"%d",[92,156668,156669],{"class":207}," 分数:",[92,156671,156672],{"class":151},"%.1f",[92,156674,354],{"class":207},[92,156676,156056],{"class":98},[92,156678,156679],{"class":102}," (name, age, score))\n",[38,156681,156682],{},"常用占位符：",[240,156684,156685,156694],{},[243,156686,156687],{},[246,156688,156689,156692],{},[249,156690,156691],{},"占位符",[249,156693,25850],{},[287,156695,156696,156704,156712],{},[246,156697,156698,156702],{},[292,156699,156700],{},[89,156701,156660],{},[292,156703,155199],{},[246,156705,156706,156710],{},[292,156707,156708],{},[89,156709,156666],{},[292,156711,155177],{},[246,156713,156714,156719],{},[292,156715,156716],{},[89,156717,156718],{},"%f",[292,156720,155188],{},[38,156722,156723],{},"精度控制：",[83,156725,156727],{"className":30359,"code":156726,"language":30361,"meta":10,"style":10},"price = 12.3456\nprint(\"%.2f\" % price)\n",[89,156728,156729,156738],{"__ignoreMap":10},[92,156730,156731,156733,156735],{"class":94,"line":95},[92,156732,146656],{"class":102},[92,156734,148],{"class":98},[92,156736,156737],{"class":151}," 12.3456\n",[92,156739,156740,156742,156744,156746,156749,156751,156753],{"class":94,"line":11},[92,156741,30396],{"class":151},[92,156743,103],{"class":102},[92,156745,354],{"class":207},[92,156747,156748],{"class":151},"%.2f",[92,156750,354],{"class":207},[92,156752,156056],{"class":98},[92,156754,156755],{"class":102}," price)\n",[63,156757,156759],{"id":156758},"_2102-format方法","2.10.2 format方法",[83,156761,156763],{"className":30359,"code":156762,"language":30361,"meta":10,"style":10},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[89,156764,156765,156773,156781,156785,156804,156824],{"__ignoreMap":10},[92,156766,156767,156769,156771],{"class":94,"line":95},[92,156768,146511],{"class":102},[92,156770,148],{"class":98},[92,156772,149328],{"class":207},[92,156774,156775,156777,156779],{"class":94,"line":11},[92,156776,146521],{"class":102},[92,156778,148],{"class":98},[92,156780,146526],{"class":151},[92,156782,156783],{"class":94,"line":1158},[92,156784,2379],{"emptyLinePlaceholder":17},[92,156786,156787,156789,156791,156793,156795,156797,156799,156801],{"class":94,"line":1173},[92,156788,30396],{"class":151},[92,156790,103],{"class":102},[92,156792,156657],{"class":207},[92,156794,32440],{"class":151},[92,156796,156663],{"class":207},[92,156798,32440],{"class":151},[92,156800,354],{"class":207},[92,156802,156803],{"class":102},".format(name, age))\n",[92,156805,156806,156808,156810,156812,156815,156817,156820,156822],{"class":94,"line":1179},[92,156807,30396],{"class":151},[92,156809,103],{"class":102},[92,156811,156657],{"class":207},[92,156813,156814],{"class":151},"{0}",[92,156816,156663],{"class":207},[92,156818,156819],{"class":151},"{1}",[92,156821,354],{"class":207},[92,156823,156803],{"class":102},[92,156825,156826,156828,156830,156832,156835,156837,156840,156842,156845,156847,156849,156852,156854,156856],{"class":94,"line":1193},[92,156827,30396],{"class":151},[92,156829,103],{"class":102},[92,156831,156657],{"class":207},[92,156833,156834],{"class":151},"{name}",[92,156836,156663],{"class":207},[92,156838,156839],{"class":151},"{age}",[92,156841,354],{"class":207},[92,156843,156844],{"class":102},".format(",[92,156846,79790],{"class":5196},[92,156848,148],{"class":98},[92,156850,156851],{"class":102},"name, ",[92,156853,70201],{"class":5196},[92,156855,148],{"class":98},[92,156857,156858],{"class":102},"age))\n",[63,156860,156862],{"id":156861},"_2103-f-string","2.10.3 f-string",[38,156864,156865],{},"推荐写法：",[83,156867,156869],{"className":30359,"code":156868,"language":30361,"meta":10,"style":10},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[89,156870,156871,156879,156887,156895,156899],{"__ignoreMap":10},[92,156872,156873,156875,156877],{"class":94,"line":95},[92,156874,146511],{"class":102},[92,156876,148],{"class":98},[92,156878,149328],{"class":207},[92,156880,156881,156883,156885],{"class":94,"line":11},[92,156882,146521],{"class":102},[92,156884,148],{"class":98},[92,156886,146526],{"class":151},[92,156888,156889,156891,156893],{"class":94,"line":1158},[92,156890,155333],{"class":102},[92,156892,148],{"class":98},[92,156894,156644],{"class":151},[92,156896,156897],{"class":94,"line":1173},[92,156898,2379],{"emptyLinePlaceholder":17},[92,156900,156901,156903,156905,156907,156909,156911,156913,156915,156917,156919,156921,156923,156925,156927,156930,156933,156935,156937],{"class":94,"line":1179},[92,156902,30396],{"class":151},[92,156904,103],{"class":102},[92,156906,155],{"class":98},[92,156908,156657],{"class":207},[92,156910,999],{"class":151},[92,156912,79790],{"class":102},[92,156914,1049],{"class":151},[92,156916,156663],{"class":207},[92,156918,999],{"class":151},[92,156920,70201],{"class":102},[92,156922,1049],{"class":151},[92,156924,156669],{"class":207},[92,156926,999],{"class":151},[92,156928,156929],{"class":102},"score",[92,156931,156932],{"class":98},":.1f",[92,156934,1049],{"class":151},[92,156936,354],{"class":207},[92,156938,109],{"class":102},[38,156940,156941],{},"表达式也可以放进去：",[83,156943,156945],{"className":30359,"code":156944,"language":30361,"meta":10,"style":10},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[89,156946,156947,156955,156963],{"__ignoreMap":10},[92,156948,156949,156951,156953],{"class":94,"line":95},[92,156950,146656],{"class":102},[92,156952,148],{"class":98},[92,156954,146661],{"class":151},[92,156956,156957,156959,156961],{"class":94,"line":11},[92,156958,146666],{"class":102},[92,156960,148],{"class":98},[92,156962,54407],{"class":151},[92,156964,156965,156967,156969,156971,156974,156976,156978,156980,156983,156985,156988],{"class":94,"line":1158},[92,156966,30396],{"class":151},[92,156968,103],{"class":102},[92,156970,155],{"class":98},[92,156972,156973],{"class":207},"\"总价:",[92,156975,999],{"class":151},[92,156977,146656],{"class":102},[92,156979,558],{"class":98},[92,156981,156982],{"class":102}," count",[92,156984,1049],{"class":151},[92,156986,156987],{"class":207},"元\"",[92,156989,109],{"class":102},[33,156991,156993],{"id":156992},"_211-input输入","2.11 input输入",[38,156995,156996,156999],{},[89,156997,156998],{},"input()"," 会暂停程序，等待用户输入。",[83,157001,157003],{"className":30359,"code":157002,"language":30361,"meta":10,"style":10},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[89,157004,157005,157019],{"__ignoreMap":10},[92,157006,157007,157009,157011,157013,157015,157017],{"class":94,"line":95},[92,157008,146511],{"class":102},[92,157010,148],{"class":98},[92,157012,60585],{"class":151},[92,157014,103],{"class":102},[92,157016,152354],{"class":207},[92,157018,109],{"class":102},[92,157020,157021,157023,157025,157027,157030,157032,157034,157036,157038],{"class":94,"line":11},[92,157022,30396],{"class":151},[92,157024,103],{"class":102},[92,157026,155],{"class":98},[92,157028,157029],{"class":207},"\"你好，",[92,157031,999],{"class":151},[92,157033,79790],{"class":102},[92,157035,1049],{"class":151},[92,157037,354],{"class":207},[92,157039,109],{"class":102},[38,157041,157042],{},"输入整数：",[83,157044,157046],{"className":30359,"code":157045,"language":30361,"meta":10,"style":10},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[89,157047,157048,157066],{"__ignoreMap":10},[92,157049,157050,157052,157054,157056,157058,157060,157062,157064],{"class":94,"line":95},[92,157051,146521],{"class":102},[92,157053,148],{"class":98},[92,157055,2361],{"class":151},[92,157057,103],{"class":102},[92,157059,53801],{"class":151},[92,157061,103],{"class":102},[92,157063,152369],{"class":207},[92,157065,30478],{"class":102},[92,157067,157068,157070,157072,157074,157077,157079,157081,157083,157086,157088],{"class":94,"line":11},[92,157069,30396],{"class":151},[92,157071,103],{"class":102},[92,157073,155],{"class":98},[92,157075,157076],{"class":207},"\"明年你",[92,157078,999],{"class":151},[92,157080,146521],{"class":102},[92,157082,584],{"class":98},[92,157084,157085],{"class":151}," 1}",[92,157087,149379],{"class":207},[92,157089,109],{"class":102},[38,157091,157092],{},"输入小数：",[83,157094,157096],{"className":30359,"code":157095,"language":30361,"meta":10,"style":10},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[89,157097,157098,157117],{"__ignoreMap":10},[92,157099,157100,157102,157104,157106,157108,157110,157112,157115],{"class":94,"line":95},[92,157101,155306],{"class":102},[92,157103,148],{"class":98},[92,157105,109772],{"class":151},[92,157107,103],{"class":102},[92,157109,53801],{"class":151},[92,157111,103],{"class":102},[92,157113,157114],{"class":207},"\"请输入身高:\"",[92,157116,30478],{"class":102},[92,157118,157119,157121,157123,157125,157128,157130,157132,157135,157137,157140],{"class":94,"line":11},[92,157120,30396],{"class":151},[92,157122,103],{"class":102},[92,157124,155],{"class":98},[92,157126,157127],{"class":207},"\"身高:",[92,157129,999],{"class":151},[92,157131,24962],{"class":102},[92,157133,157134],{"class":98},":.2f",[92,157136,1049],{"class":151},[92,157138,157139],{"class":207},"米\"",[92,157141,109],{"class":102},[33,157143,157145],{"id":157144},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[38,157147,123267],{},[46,157149,157150,157153,157156,157159],{},[49,157151,157152],{},"输入商品单价。",[49,157154,157155],{},"输入购买数量。",[49,157157,157158],{},"输入折扣，例如 0.8 表示八折。",[49,157160,157161],{},"输出最终金额，保留两位小数。",[38,157163,10015],{},[83,157165,157167],{"className":30359,"code":157166,"language":30361,"meta":10,"style":10},"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",[89,157168,157169,157188,157207,157227,157231,157251,157255,157278,157299,157321],{"__ignoreMap":10},[92,157170,157171,157173,157175,157177,157179,157181,157183,157186],{"class":94,"line":95},[92,157172,146656],{"class":102},[92,157174,148],{"class":98},[92,157176,109772],{"class":151},[92,157178,103],{"class":102},[92,157180,53801],{"class":151},[92,157182,103],{"class":102},[92,157184,157185],{"class":207},"\"请输入商品单价:\"",[92,157187,30478],{"class":102},[92,157189,157190,157192,157194,157196,157198,157200,157202,157205],{"class":94,"line":11},[92,157191,146666],{"class":102},[92,157193,148],{"class":98},[92,157195,2361],{"class":151},[92,157197,103],{"class":102},[92,157199,53801],{"class":151},[92,157201,103],{"class":102},[92,157203,157204],{"class":207},"\"请输入购买数量:\"",[92,157206,30478],{"class":102},[92,157208,157209,157212,157214,157216,157218,157220,157222,157225],{"class":94,"line":1158},[92,157210,157211],{"class":102},"discount ",[92,157213,148],{"class":98},[92,157215,109772],{"class":151},[92,157217,103],{"class":102},[92,157219,53801],{"class":151},[92,157221,103],{"class":102},[92,157223,157224],{"class":207},"\"请输入折扣:\"",[92,157226,30478],{"class":102},[92,157228,157229],{"class":94,"line":1173},[92,157230,2379],{"emptyLinePlaceholder":17},[92,157232,157233,157236,157238,157241,157243,157246,157248],{"class":94,"line":1179},[92,157234,157235],{"class":102},"total ",[92,157237,148],{"class":98},[92,157239,157240],{"class":102}," price ",[92,157242,558],{"class":98},[92,157244,157245],{"class":102}," count ",[92,157247,558],{"class":98},[92,157249,157250],{"class":102}," discount\n",[92,157252,157253],{"class":94,"line":1193},[92,157254,2379],{"emptyLinePlaceholder":17},[92,157256,157257,157259,157261,157263,157266,157268,157270,157272,157274,157276],{"class":94,"line":1199},[92,157258,30396],{"class":151},[92,157260,103],{"class":102},[92,157262,155],{"class":98},[92,157264,157265],{"class":207},"\"商品单价:",[92,157267,999],{"class":151},[92,157269,79795],{"class":102},[92,157271,157134],{"class":98},[92,157273,1049],{"class":151},[92,157275,354],{"class":207},[92,157277,109],{"class":102},[92,157279,157280,157282,157284,157286,157289,157291,157293,157295,157297],{"class":94,"line":1290},[92,157281,30396],{"class":151},[92,157283,103],{"class":102},[92,157285,155],{"class":98},[92,157287,157288],{"class":207},"\"购买数量:",[92,157290,999],{"class":151},[92,157292,84414],{"class":102},[92,157294,1049],{"class":151},[92,157296,354],{"class":207},[92,157298,109],{"class":102},[92,157300,157301,157303,157305,157307,157310,157312,157315,157317,157319],{"class":94,"line":1296},[92,157302,30396],{"class":151},[92,157304,103],{"class":102},[92,157306,155],{"class":98},[92,157308,157309],{"class":207},"\"折扣:",[92,157311,999],{"class":151},[92,157313,157314],{"class":102},"discount",[92,157316,1049],{"class":151},[92,157318,354],{"class":207},[92,157320,109],{"class":102},[92,157322,157323,157325,157327,157329,157332,157334,157337,157339,157341,157343],{"class":94,"line":1308},[92,157324,30396],{"class":151},[92,157326,103],{"class":102},[92,157328,155],{"class":98},[92,157330,157331],{"class":207},"\"应付金额:",[92,157333,999],{"class":151},[92,157335,157336],{"class":102},"total",[92,157338,157134],{"class":98},[92,157340,1049],{"class":151},[92,157342,156987],{"class":207},[92,157344,109],{"class":102},[33,157346,157348],{"id":157347},"_213-易错点","2.13 易错点",[46,157350,157351,157356,157362,157370,157373],{},[49,157352,157353,157355],{},[89,157354,156998],{}," 的结果是字符串，做运算前要转换。",[49,157357,157358,157359,28366],{},"字符串拼接时，数字要先 ",[89,157360,157361],{},"str()",[49,157363,157364,157366,157367,157369],{},[89,157365,148],{}," 是赋值，",[89,157368,2928],{}," 是比较。",[49,157371,157372],{},"Python 没有自增自减运算符。",[49,157374,157375],{},"浮点数计算可能有精度误差：",[83,157377,157379],{"className":30359,"code":157378,"language":30361,"meta":10,"style":10},"print(0.1 + 0.2)\n",[89,157380,157381],{"__ignoreMap":10},[92,157382,157383,157385,157387,157389,157391,157394],{"class":94,"line":95},[92,157384,30396],{"class":151},[92,157386,103],{"class":102},[92,157388,86190],{"class":151},[92,157390,45547],{"class":98},[92,157392,157393],{"class":151}," 0.2",[92,157395,109],{"class":102},[38,157397,157398,157399,157402],{},"金额计算如果要求严格，可以后续学习 ",[89,157400,157401],{},"decimal"," 模块。",[33,157404,157406],{"id":157405},"_214-本章练习","2.14 本章练习",[46,157408,157409,157412,157415,157418,157421],{},[49,157410,157411],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[49,157413,157414],{},"输入圆的半径，计算面积，保留两位小数。",[49,157416,157417],{},"输入工资和奖金，计算总收入。",[49,157419,157420],{},"输入摄氏温度，转换为华氏温度。",[49,157422,157423],{},"写一个 BMI 计算程序：",[83,157425,157428],{"className":157426,"code":157427,"language":5167,"meta":10},[5165],"BMI = 体重kg \u002F 身高m ** 2\n",[89,157429,157427],{"__ignoreMap":10},[5106,157431,157432],{},"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":10,"searchDepth":11,"depth":11,"links":157434},[157435,157436,157437,157438,157439,157440,157441,157447,157448,157449,157454,157455,157456,157457],{"id":154996,"depth":11,"text":154997},{"id":155105,"depth":11,"text":155106},{"id":155276,"depth":11,"text":155277},{"id":155353,"depth":11,"text":155354},{"id":50711,"depth":11,"text":50712},{"id":155659,"depth":11,"text":155660},{"id":155885,"depth":11,"text":155886,"children":157442},[157443,157444,157445,157446],{"id":155889,"depth":1158,"text":155890},{"id":156083,"depth":1158,"text":156084},{"id":156171,"depth":1158,"text":156172},{"id":156277,"depth":1158,"text":156278},{"id":156386,"depth":11,"text":156387},{"id":156544,"depth":11,"text":156545},{"id":156609,"depth":11,"text":156610,"children":157450},[157451,157452,157453],{"id":156613,"depth":1158,"text":156614},{"id":156758,"depth":1158,"text":156759},{"id":156861,"depth":1158,"text":156862},{"id":156992,"depth":11,"text":156993},{"id":157144,"depth":11,"text":157145},{"id":157347,"depth":11,"text":157348},{"id":157405,"depth":11,"text":157406},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":154988,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157464,"title":157465,"body":157466,"description":13,"extension":14,"meta":159102,"navigation":17,"path":159103,"seo":159104,"stem":159105,"__hash__":159106},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157467,"toc":159083},[157468,157471,157475,157478,157493,157496,157524,157528,157578,157580,157596,157599,157625,157628,157632,157699,157702,157718,157722,157725,157843,157846,157853,157902,157908,157912,157915,158028,158031,158035,158039,158042,158092,158096,158099,158149,158153,158156,158194,158198,158201,158247,158250,158285,158289,158294,158297,158343,158345,158412,158416,158422,158533,158542,158546,158548,158559,158561,158727,158731,158733,158747,158749,158963,158967,158986,159003,159006,159052,159056,159080],[29,157469,157465],{"id":157470},"_3-判断语句",[33,157472,157474],{"id":157473},"_31-布尔值","3.1 布尔值",[38,157476,157477],{},"判断语句依赖布尔值：",[83,157479,157481],{"className":30359,"code":157480,"language":30361,"meta":10,"style":10},"True\nFalse\n",[89,157482,157483,157488],{"__ignoreMap":10},[92,157484,157485],{"class":94,"line":95},[92,157486,157487],{"class":151},"True\n",[92,157489,157490],{"class":94,"line":11},[92,157491,157492],{"class":151},"False\n",[38,157494,157495],{},"比较表达式会产生布尔值：",[83,157497,157499],{"className":30359,"code":157498,"language":30361,"meta":10,"style":10},"age = 18\nprint(age >= 18)  # True\n",[89,157500,157501,157509],{"__ignoreMap":10},[92,157502,157503,157505,157507],{"class":94,"line":95},[92,157504,146521],{"class":102},[92,157506,148],{"class":98},[92,157508,146526],{"class":151},[92,157510,157511,157513,157515,157517,157519,157521],{"class":94,"line":11},[92,157512,30396],{"class":151},[92,157514,155743],{"class":102},[92,157516,1689],{"class":98},[92,157518,156260],{"class":151},[92,157520,45789],{"class":102},[92,157522,157523],{"class":161},"# True\n",[33,157525,157527],{"id":157526},"_32-if基础语法","3.2 if基础语法",[83,157529,157531],{"className":30359,"code":157530,"language":30361,"meta":10,"style":10},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[89,157532,157533,157551,157555,157567],{"__ignoreMap":10},[92,157534,157535,157537,157539,157541,157543,157545,157547,157549],{"class":94,"line":95},[92,157536,146521],{"class":102},[92,157538,148],{"class":98},[92,157540,2361],{"class":151},[92,157542,103],{"class":102},[92,157544,53801],{"class":151},[92,157546,103],{"class":102},[92,157548,152369],{"class":207},[92,157550,30478],{"class":102},[92,157552,157553],{"class":94,"line":11},[92,157554,2379],{"emptyLinePlaceholder":17},[92,157556,157557,157559,157561,157563,157565],{"class":94,"line":1158},[92,157558,1510],{"class":98},[92,157560,15687],{"class":102},[92,157562,1689],{"class":98},[92,157564,156260],{"class":151},[92,157566,3718],{"class":102},[92,157568,157569,157571,157573,157576],{"class":94,"line":1173},[92,157570,31280],{"class":151},[92,157572,103],{"class":102},[92,157574,157575],{"class":207},"\"可以进入网吧\"",[92,157577,109],{"class":102},[38,157579,9005],{},[46,157581,157582,157587,157590,157593],{},[49,157583,157584,157586],{},[89,157585,1510],{}," 后面是条件表达式。",[49,157588,157589],{},"条件后面必须写冒号。",[49,157591,157592],{},"条件成立时执行缩进代码块。",[49,157594,157595],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[38,157597,157598],{},"错误示例：",[83,157600,157602],{"className":30359,"code":157601,"language":30361,"meta":10,"style":10},"if age >= 18\n    print(\"可以进入\")\n",[89,157603,157604,157614],{"__ignoreMap":10},[92,157605,157606,157608,157610,157612],{"class":94,"line":95},[92,157607,1510],{"class":98},[92,157609,15687],{"class":102},[92,157611,1689],{"class":98},[92,157613,146526],{"class":151},[92,157615,157616,157618,157620,157623],{"class":94,"line":11},[92,157617,31280],{"class":151},[92,157619,103],{"class":102},[92,157621,157622],{"class":207},"\"可以进入\"",[92,157624,109],{"class":102},[38,157626,157627],{},"缺少冒号。",[33,157629,157631],{"id":157630},"_33-if-else","3.3 if else",[83,157633,157635],{"className":30359,"code":157634,"language":30361,"meta":10,"style":10},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[89,157636,157637,157655,157659,157671,157682,157688],{"__ignoreMap":10},[92,157638,157639,157641,157643,157645,157647,157649,157651,157653],{"class":94,"line":95},[92,157640,146521],{"class":102},[92,157642,148],{"class":98},[92,157644,2361],{"class":151},[92,157646,103],{"class":102},[92,157648,53801],{"class":151},[92,157650,103],{"class":102},[92,157652,152369],{"class":207},[92,157654,30478],{"class":102},[92,157656,157657],{"class":94,"line":11},[92,157658,2379],{"emptyLinePlaceholder":17},[92,157660,157661,157663,157665,157667,157669],{"class":94,"line":1158},[92,157662,1510],{"class":98},[92,157664,15687],{"class":102},[92,157666,1689],{"class":98},[92,157668,156260],{"class":151},[92,157670,3718],{"class":102},[92,157672,157673,157675,157677,157680],{"class":94,"line":1173},[92,157674,31280],{"class":151},[92,157676,103],{"class":102},[92,157678,157679],{"class":207},"\"成年人\"",[92,157681,109],{"class":102},[92,157683,157684,157686],{"class":94,"line":1179},[92,157685,1680],{"class":98},[92,157687,3718],{"class":102},[92,157689,157690,157692,157694,157697],{"class":94,"line":1193},[92,157691,31280],{"class":151},[92,157693,103],{"class":102},[92,157695,157696],{"class":207},"\"未成年人\"",[92,157698,109],{"class":102},[38,157700,157701],{},"执行逻辑：",[46,157703,157704,157710,157715],{},[49,157705,157706,157707,157709],{},"条件成立，执行 ",[89,157708,1510],{}," 代码块。",[49,157711,157712,157713,157709],{},"条件不成立，执行 ",[89,157714,1680],{},[49,157716,157717],{},"两个代码块只会执行其中一个。",[33,157719,157721],{"id":157720},"_34-if-elif-else","3.4 if elif else",[38,157723,157724],{},"多条件判断：",[83,157726,157728],{"className":30359,"code":157727,"language":30361,"meta":10,"style":10},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[89,157729,157730,157748,157752,157766,157777,157791,157802,157815,157826,157832],{"__ignoreMap":10},[92,157731,157732,157734,157736,157738,157740,157742,157744,157746],{"class":94,"line":95},[92,157733,155333],{"class":102},[92,157735,148],{"class":98},[92,157737,2361],{"class":151},[92,157739,103],{"class":102},[92,157741,53801],{"class":151},[92,157743,103],{"class":102},[92,157745,152384],{"class":207},[92,157747,30478],{"class":102},[92,157749,157750],{"class":94,"line":11},[92,157751,2379],{"emptyLinePlaceholder":17},[92,157753,157754,157756,157759,157761,157764],{"class":94,"line":1158},[92,157755,1510],{"class":98},[92,157757,157758],{"class":102}," score ",[92,157760,1689],{"class":98},[92,157762,157763],{"class":151}," 90",[92,157765,3718],{"class":102},[92,157767,157768,157770,157772,157775],{"class":94,"line":1173},[92,157769,31280],{"class":151},[92,157771,103],{"class":102},[92,157773,157774],{"class":207},"\"优秀\"",[92,157776,109],{"class":102},[92,157778,157779,157782,157784,157786,157789],{"class":94,"line":1179},[92,157780,157781],{"class":98},"elif",[92,157783,157758],{"class":102},[92,157785,1689],{"class":98},[92,157787,157788],{"class":151}," 80",[92,157790,3718],{"class":102},[92,157792,157793,157795,157797,157800],{"class":94,"line":1193},[92,157794,31280],{"class":151},[92,157796,103],{"class":102},[92,157798,157799],{"class":207},"\"良好\"",[92,157801,109],{"class":102},[92,157803,157804,157806,157808,157810,157813],{"class":94,"line":1199},[92,157805,157781],{"class":98},[92,157807,157758],{"class":102},[92,157809,1689],{"class":98},[92,157811,157812],{"class":151}," 60",[92,157814,3718],{"class":102},[92,157816,157817,157819,157821,157824],{"class":94,"line":1290},[92,157818,31280],{"class":151},[92,157820,103],{"class":102},[92,157822,157823],{"class":207},"\"及格\"",[92,157825,109],{"class":102},[92,157827,157828,157830],{"class":94,"line":1296},[92,157829,1680],{"class":98},[92,157831,3718],{"class":102},[92,157833,157834,157836,157838,157841],{"class":94,"line":1308},[92,157835,31280],{"class":151},[92,157837,103],{"class":102},[92,157839,157840],{"class":207},"\"不及格\"",[92,157842,109],{"class":102},[38,157844,157845],{},"注意判断顺序很重要。",[38,157847,157848,157849,157852],{},"如果把 ",[89,157850,157851],{},"score >= 60"," 放在最前面：",[83,157854,157856],{"className":30359,"code":157855,"language":30361,"meta":10,"style":10},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[89,157857,157858,157870,157880,157892],{"__ignoreMap":10},[92,157859,157860,157862,157864,157866,157868],{"class":94,"line":95},[92,157861,1510],{"class":98},[92,157863,157758],{"class":102},[92,157865,1689],{"class":98},[92,157867,157812],{"class":151},[92,157869,3718],{"class":102},[92,157871,157872,157874,157876,157878],{"class":94,"line":11},[92,157873,31280],{"class":151},[92,157875,103],{"class":102},[92,157877,157823],{"class":207},[92,157879,109],{"class":102},[92,157881,157882,157884,157886,157888,157890],{"class":94,"line":1158},[92,157883,157781],{"class":98},[92,157885,157758],{"class":102},[92,157887,1689],{"class":98},[92,157889,157763],{"class":151},[92,157891,3718],{"class":102},[92,157893,157894,157896,157898,157900],{"class":94,"line":1173},[92,157895,31280],{"class":151},[92,157897,103],{"class":102},[92,157899,157774],{"class":207},[92,157901,109],{"class":102},[38,157903,157904,157905,157907],{},"成绩 95 会先满足 ",[89,157906,157851],{},"，后面的优秀分支就不会执行。",[33,157909,157911],{"id":157910},"_35-判断语句嵌套","3.5 判断语句嵌套",[38,157913,157914],{},"嵌套判断就是在一个判断内部再写判断。",[83,157916,157918],{"className":30359,"code":157917,"language":30361,"meta":10,"style":10},"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",[89,157919,157920,157938,157953,157957,157969,157983,157993,158000,158011,158017],{"__ignoreMap":10},[92,157921,157922,157924,157926,157928,157930,157932,157934,157936],{"class":94,"line":95},[92,157923,146521],{"class":102},[92,157925,148],{"class":98},[92,157927,2361],{"class":151},[92,157929,103],{"class":102},[92,157931,53801],{"class":151},[92,157933,103],{"class":102},[92,157935,152369],{"class":207},[92,157937,30478],{"class":102},[92,157939,157940,157942,157944,157946,157948,157951],{"class":94,"line":11},[92,157941,156336],{"class":102},[92,157943,148],{"class":98},[92,157945,60585],{"class":151},[92,157947,103],{"class":102},[92,157949,157950],{"class":207},"\"是否有票(y\u002Fn):\"",[92,157952,109],{"class":102},[92,157954,157955],{"class":94,"line":1158},[92,157956,2379],{"emptyLinePlaceholder":17},[92,157958,157959,157961,157963,157965,157967],{"class":94,"line":1173},[92,157960,1510],{"class":98},[92,157962,15687],{"class":102},[92,157964,1689],{"class":98},[92,157966,156260],{"class":151},[92,157968,3718],{"class":102},[92,157970,157971,157973,157976,157978,157981],{"class":94,"line":1179},[92,157972,3080],{"class":98},[92,157974,157975],{"class":102}," has_ticket ",[92,157977,2928],{"class":98},[92,157979,157980],{"class":207}," \"y\"",[92,157982,3718],{"class":102},[92,157984,157985,157987,157989,157991],{"class":94,"line":1193},[92,157986,32432],{"class":151},[92,157988,103],{"class":102},[92,157990,157622],{"class":207},[92,157992,109],{"class":102},[92,157994,157995,157998],{"class":94,"line":1199},[92,157996,157997],{"class":98},"    else",[92,157999,3718],{"class":102},[92,158001,158002,158004,158006,158009],{"class":94,"line":1290},[92,158003,32432],{"class":151},[92,158005,103],{"class":102},[92,158007,158008],{"class":207},"\"请先买票\"",[92,158010,109],{"class":102},[92,158012,158013,158015],{"class":94,"line":1296},[92,158014,1680],{"class":98},[92,158016,3718],{"class":102},[92,158018,158019,158021,158023,158026],{"class":94,"line":1308},[92,158020,31280],{"class":151},[92,158022,103],{"class":102},[92,158024,158025],{"class":207},"\"未成年人禁止进入\"",[92,158027,109],{"class":102},[38,158029,158030],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[33,158032,158034],{"id":158033},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[63,158036,158038],{"id":158037},"_361-and","3.6.1 and",[38,158040,158041],{},"两个条件都成立才成立。",[83,158043,158045],{"className":30359,"code":158044,"language":30361,"meta":10,"style":10},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[89,158046,158047,158055,158063,158067,158082],{"__ignoreMap":10},[92,158048,158049,158051,158053],{"class":94,"line":95},[92,158050,146521],{"class":102},[92,158052,148],{"class":98},[92,158054,88045],{"class":151},[92,158056,158057,158059,158061],{"class":94,"line":11},[92,158058,156336],{"class":102},[92,158060,148],{"class":98},[92,158062,153574],{"class":151},[92,158064,158065],{"class":94,"line":1158},[92,158066,2379],{"emptyLinePlaceholder":17},[92,158068,158069,158071,158073,158075,158077,158079],{"class":94,"line":1173},[92,158070,1510],{"class":98},[92,158072,15687],{"class":102},[92,158074,1689],{"class":98},[92,158076,156260],{"class":151},[92,158078,120404],{"class":98},[92,158080,158081],{"class":102}," has_ticket:\n",[92,158083,158084,158086,158088,158090],{"class":94,"line":1179},[92,158085,31280],{"class":151},[92,158087,103],{"class":102},[92,158089,157622],{"class":207},[92,158091,109],{"class":102},[63,158093,158095],{"id":158094},"_362-or","3.6.2 or",[38,158097,158098],{},"只要一个条件成立就成立。",[83,158100,158102],{"className":30359,"code":158101,"language":30361,"meta":10,"style":10},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[89,158103,158104,158113,158122,158126,158138],{"__ignoreMap":10},[92,158105,158106,158109,158111],{"class":94,"line":95},[92,158107,158108],{"class":102},"is_vip ",[92,158110,148],{"class":98},[92,158112,125782],{"class":151},[92,158114,158115,158118,158120],{"class":94,"line":11},[92,158116,158117],{"class":102},"coupon ",[92,158119,148],{"class":98},[92,158121,153574],{"class":151},[92,158123,158124],{"class":94,"line":1158},[92,158125,2379],{"emptyLinePlaceholder":17},[92,158127,158128,158130,158133,158135],{"class":94,"line":1173},[92,158129,1510],{"class":98},[92,158131,158132],{"class":102}," is_vip ",[92,158134,115065],{"class":98},[92,158136,158137],{"class":102}," coupon:\n",[92,158139,158140,158142,158144,158147],{"class":94,"line":1179},[92,158141,31280],{"class":151},[92,158143,103],{"class":102},[92,158145,158146],{"class":207},"\"可以享受优惠\"",[92,158148,109],{"class":102},[63,158150,158152],{"id":158151},"_363-not","3.6.3 not",[38,158154,158155],{},"取反。",[83,158157,158159],{"className":30359,"code":158158,"language":30361,"meta":10,"style":10},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[89,158160,158161,158170,158174,158183],{"__ignoreMap":10},[92,158162,158163,158166,158168],{"class":94,"line":95},[92,158164,158165],{"class":102},"is_closed ",[92,158167,148],{"class":98},[92,158169,125782],{"class":151},[92,158171,158172],{"class":94,"line":11},[92,158173,2379],{"emptyLinePlaceholder":17},[92,158175,158176,158178,158180],{"class":94,"line":1158},[92,158177,1510],{"class":98},[92,158179,38911],{"class":98},[92,158181,158182],{"class":102}," is_closed:\n",[92,158184,158185,158187,158189,158192],{"class":94,"line":1173},[92,158186,31280],{"class":151},[92,158188,103],{"class":102},[92,158190,158191],{"class":207},"\"店铺营业中\"",[92,158193,109],{"class":102},[33,158195,158197],{"id":158196},"_37-链式比较","3.7 链式比较",[38,158199,158200],{},"Python 支持链式比较：",[83,158202,158204],{"className":30359,"code":158203,"language":30361,"meta":10,"style":10},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[89,158205,158206,158215,158219,158236],{"__ignoreMap":10},[92,158207,158208,158210,158212],{"class":94,"line":95},[92,158209,155333],{"class":102},[92,158211,148],{"class":98},[92,158213,158214],{"class":151}," 85\n",[92,158216,158217],{"class":94,"line":11},[92,158218,2379],{"emptyLinePlaceholder":17},[92,158220,158221,158223,158225,158228,158230,158232,158234],{"class":94,"line":1158},[92,158222,1510],{"class":98},[92,158224,4072],{"class":151},[92,158226,158227],{"class":98}," \u003C=",[92,158229,157758],{"class":102},[92,158231,1567],{"class":98},[92,158233,5734],{"class":151},[92,158235,3718],{"class":102},[92,158237,158238,158240,158242,158245],{"class":94,"line":1173},[92,158239,31280],{"class":151},[92,158241,103],{"class":102},[92,158243,158244],{"class":207},"\"成绩合法\"",[92,158246,109],{"class":102},[38,158248,158249],{},"等价于：",[83,158251,158253],{"className":30359,"code":158252,"language":30361,"meta":10,"style":10},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[89,158254,158255,158275],{"__ignoreMap":10},[92,158256,158257,158259,158261,158263,158265,158267,158269,158271,158273],{"class":94,"line":95},[92,158258,1510],{"class":98},[92,158260,157758],{"class":102},[92,158262,1689],{"class":98},[92,158264,4072],{"class":151},[92,158266,120404],{"class":98},[92,158268,157758],{"class":102},[92,158270,1567],{"class":98},[92,158272,5734],{"class":151},[92,158274,3718],{"class":102},[92,158276,158277,158279,158281,158283],{"class":94,"line":11},[92,158278,31280],{"class":151},[92,158280,103],{"class":102},[92,158282,158244],{"class":207},[92,158284,109],{"class":102},[33,158286,158288],{"id":158287},"_38-真值和假值","3.8 真值和假值",[38,158290,116442,158291,158293],{},[89,158292,1510],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[38,158295,158296],{},"假值：",[83,158298,158300],{"className":30359,"code":158299,"language":30361,"meta":10,"style":10},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[89,158301,158302,158306,158311,158315,158319,158324,158328,158332,158337],{"__ignoreMap":10},[92,158303,158304],{"class":94,"line":95},[92,158305,157492],{"class":151},[92,158307,158308],{"class":94,"line":11},[92,158309,158310],{"class":151},"None\n",[92,158312,158313],{"class":94,"line":1158},[92,158314,3064],{"class":151},[92,158316,158317],{"class":94,"line":1173},[92,158318,32323],{"class":151},[92,158320,158321],{"class":94,"line":1179},[92,158322,158323],{"class":207},"\"\"\n",[92,158325,158326],{"class":94,"line":1193},[92,158327,32338],{"class":102},[92,158329,158330],{"class":94,"line":1199},[92,158331,1955],{"class":102},[92,158333,158334],{"class":94,"line":1290},[92,158335,158336],{"class":102},"{}\n",[92,158338,158339,158341],{"class":94,"line":1296},[92,158340,155265],{"class":151},[92,158342,1955],{"class":102},[38,158344,15115],{},[83,158346,158348],{"className":30359,"code":158347,"language":30361,"meta":10,"style":10},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[89,158349,158350,158364,158368,158375,158395,158401],{"__ignoreMap":10},[92,158351,158352,158354,158356,158358,158360,158362],{"class":94,"line":95},[92,158353,146511],{"class":102},[92,158355,148],{"class":98},[92,158357,60585],{"class":151},[92,158359,103],{"class":102},[92,158361,152354],{"class":207},[92,158363,109],{"class":102},[92,158365,158366],{"class":94,"line":11},[92,158367,2379],{"emptyLinePlaceholder":17},[92,158369,158370,158372],{"class":94,"line":1158},[92,158371,1510],{"class":98},[92,158373,158374],{"class":102}," name:\n",[92,158376,158377,158379,158381,158383,158385,158387,158389,158391,158393],{"class":94,"line":1173},[92,158378,31280],{"class":151},[92,158380,103],{"class":102},[92,158382,155],{"class":98},[92,158384,157029],{"class":207},[92,158386,999],{"class":151},[92,158388,79790],{"class":102},[92,158390,1049],{"class":151},[92,158392,354],{"class":207},[92,158394,109],{"class":102},[92,158396,158397,158399],{"class":94,"line":1179},[92,158398,1680],{"class":98},[92,158400,3718],{"class":102},[92,158402,158403,158405,158407,158410],{"class":94,"line":1193},[92,158404,31280],{"class":151},[92,158406,103],{"class":102},[92,158408,158409],{"class":207},"\"姓名不能为空\"",[92,158411,109],{"class":102},[33,158413,158415],{"id":158414},"_39-match语句","3.9 match语句",[38,158417,158418,158419,158421],{},"Python 3.10 开始支持 ",[89,158420,71245],{},"。它适合处理固定选项。",[83,158423,158425],{"className":30359,"code":158424,"language":30361,"meta":10,"style":10},"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",[89,158426,158427,158443,158447,158454,158464,158475,158484,158495,158504,158515,158522],{"__ignoreMap":10},[92,158428,158429,158432,158434,158436,158438,158441],{"class":94,"line":95},[92,158430,158431],{"class":102},"command ",[92,158433,148],{"class":98},[92,158435,60585],{"class":151},[92,158437,103],{"class":102},[92,158439,158440],{"class":207},"\"请输入命令:\"",[92,158442,109],{"class":102},[92,158444,158445],{"class":94,"line":11},[92,158446,2379],{"emptyLinePlaceholder":17},[92,158448,158449,158451],{"class":94,"line":1158},[92,158450,71245],{"class":98},[92,158452,158453],{"class":102}," command:\n",[92,158455,158456,158459,158462],{"class":94,"line":1173},[92,158457,158458],{"class":98},"    case",[92,158460,158461],{"class":207}," \"start\"",[92,158463,3718],{"class":102},[92,158465,158466,158468,158470,158473],{"class":94,"line":1179},[92,158467,32432],{"class":151},[92,158469,103],{"class":102},[92,158471,158472],{"class":207},"\"启动\"",[92,158474,109],{"class":102},[92,158476,158477,158479,158482],{"class":94,"line":1193},[92,158478,158458],{"class":98},[92,158480,158481],{"class":207}," \"stop\"",[92,158483,3718],{"class":102},[92,158485,158486,158488,158490,158493],{"class":94,"line":1199},[92,158487,32432],{"class":151},[92,158489,103],{"class":102},[92,158491,158492],{"class":207},"\"停止\"",[92,158494,109],{"class":102},[92,158496,158497,158499,158502],{"class":94,"line":1290},[92,158498,158458],{"class":98},[92,158500,158501],{"class":207}," \"restart\"",[92,158503,3718],{"class":102},[92,158505,158506,158508,158510,158513],{"class":94,"line":1296},[92,158507,32432],{"class":151},[92,158509,103],{"class":102},[92,158511,158512],{"class":207},"\"重启\"",[92,158514,109],{"class":102},[92,158516,158517,158519],{"class":94,"line":1308},[92,158518,158458],{"class":98},[92,158520,158521],{"class":102}," _:\n",[92,158523,158524,158526,158528,158531],{"class":94,"line":1591},[92,158525,32432],{"class":151},[92,158527,103],{"class":102},[92,158529,158530],{"class":207},"\"未知命令\"",[92,158532,109],{"class":102},[38,158534,158535,158536,158538,158539,158541],{},"入门阶段掌握 ",[89,158537,154633],{}," 更重要，",[89,158540,71245],{}," 可以作为补充。",[33,158543,158545],{"id":158544},"_310-小案例成绩等级","3.10 小案例：成绩等级",[38,158547,123267],{},[46,158549,158550,158553,158556],{},[49,158551,158552],{},"输入成绩。",[49,158554,158555],{},"判断成绩是否合法。",[49,158557,158558],{},"输出等级。",[38,158560,10015],{},[83,158562,158564],{"className":30359,"code":158563,"language":30361,"meta":10,"style":10},"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",[89,158565,158566,158584,158588,158606,158617,158629,158640,158652,158663,158676,158687,158699,158710,158716],{"__ignoreMap":10},[92,158567,158568,158570,158572,158574,158576,158578,158580,158582],{"class":94,"line":95},[92,158569,155333],{"class":102},[92,158571,148],{"class":98},[92,158573,109772],{"class":151},[92,158575,103],{"class":102},[92,158577,53801],{"class":151},[92,158579,103],{"class":102},[92,158581,152384],{"class":207},[92,158583,30478],{"class":102},[92,158585,158586],{"class":94,"line":11},[92,158587,2379],{"emptyLinePlaceholder":17},[92,158589,158590,158592,158594,158596,158598,158600,158602,158604],{"class":94,"line":1158},[92,158591,1510],{"class":98},[92,158593,38911],{"class":98},[92,158595,4072],{"class":151},[92,158597,158227],{"class":98},[92,158599,157758],{"class":102},[92,158601,1567],{"class":98},[92,158603,5734],{"class":151},[92,158605,3718],{"class":102},[92,158607,158608,158610,158612,158615],{"class":94,"line":1173},[92,158609,31280],{"class":151},[92,158611,103],{"class":102},[92,158613,158614],{"class":207},"\"成绩不合法\"",[92,158616,109],{"class":102},[92,158618,158619,158621,158623,158625,158627],{"class":94,"line":1179},[92,158620,157781],{"class":98},[92,158622,157758],{"class":102},[92,158624,1689],{"class":98},[92,158626,157763],{"class":151},[92,158628,3718],{"class":102},[92,158630,158631,158633,158635,158638],{"class":94,"line":1193},[92,158632,31280],{"class":151},[92,158634,103],{"class":102},[92,158636,158637],{"class":207},"\"等级:A\"",[92,158639,109],{"class":102},[92,158641,158642,158644,158646,158648,158650],{"class":94,"line":1199},[92,158643,157781],{"class":98},[92,158645,157758],{"class":102},[92,158647,1689],{"class":98},[92,158649,157788],{"class":151},[92,158651,3718],{"class":102},[92,158653,158654,158656,158658,158661],{"class":94,"line":1290},[92,158655,31280],{"class":151},[92,158657,103],{"class":102},[92,158659,158660],{"class":207},"\"等级:B\"",[92,158662,109],{"class":102},[92,158664,158665,158667,158669,158671,158674],{"class":94,"line":1296},[92,158666,157781],{"class":98},[92,158668,157758],{"class":102},[92,158670,1689],{"class":98},[92,158672,158673],{"class":151}," 70",[92,158675,3718],{"class":102},[92,158677,158678,158680,158682,158685],{"class":94,"line":1308},[92,158679,31280],{"class":151},[92,158681,103],{"class":102},[92,158683,158684],{"class":207},"\"等级:C\"",[92,158686,109],{"class":102},[92,158688,158689,158691,158693,158695,158697],{"class":94,"line":1591},[92,158690,157781],{"class":98},[92,158692,157758],{"class":102},[92,158694,1689],{"class":98},[92,158696,157812],{"class":151},[92,158698,3718],{"class":102},[92,158700,158701,158703,158705,158708],{"class":94,"line":1596},[92,158702,31280],{"class":151},[92,158704,103],{"class":102},[92,158706,158707],{"class":207},"\"等级:D\"",[92,158709,109],{"class":102},[92,158711,158712,158714],{"class":94,"line":1602},[92,158713,1680],{"class":98},[92,158715,3718],{"class":102},[92,158717,158718,158720,158722,158725],{"class":94,"line":1607},[92,158719,31280],{"class":151},[92,158721,103],{"class":102},[92,158723,158724],{"class":207},"\"等级:E\"",[92,158726,109],{"class":102},[33,158728,158730],{"id":158729},"_311-小案例会员折扣","3.11 小案例：会员折扣",[38,158732,123267],{},[46,158734,158735,158738,158741,158744],{},[49,158736,158737],{},"输入消费金额。",[49,158739,158740],{},"输入会员等级，普通、银卡、金卡。",[49,158742,158743],{},"普通不打折，银卡 9 折，金卡 8 折。",[49,158745,158746],{},"满 500 再减 50。",[38,158748,10015],{},[83,158750,158752],{"className":30359,"code":158751,"language":30361,"meta":10,"style":10},"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",[89,158753,158754,158774,158790,158794,158802,158806,158820,158830,158843,158852,158865,158873,158879,158890,158894,158908,158912,158926,158936,158940],{"__ignoreMap":10},[92,158755,158756,158759,158761,158763,158765,158767,158769,158772],{"class":94,"line":95},[92,158757,158758],{"class":102},"amount ",[92,158760,148],{"class":98},[92,158762,109772],{"class":151},[92,158764,103],{"class":102},[92,158766,53801],{"class":151},[92,158768,103],{"class":102},[92,158770,158771],{"class":207},"\"请输入消费金额:\"",[92,158773,30478],{"class":102},[92,158775,158776,158779,158781,158783,158785,158788],{"class":94,"line":11},[92,158777,158778],{"class":102},"level ",[92,158780,148],{"class":98},[92,158782,60585],{"class":151},[92,158784,103],{"class":102},[92,158786,158787],{"class":207},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[92,158789,109],{"class":102},[92,158791,158792],{"class":94,"line":1158},[92,158793,2379],{"emptyLinePlaceholder":17},[92,158795,158796,158798,158800],{"class":94,"line":1173},[92,158797,157211],{"class":102},[92,158799,148],{"class":98},[92,158801,55679],{"class":151},[92,158803,158804],{"class":94,"line":1179},[92,158805,2379],{"emptyLinePlaceholder":17},[92,158807,158808,158810,158813,158815,158818],{"class":94,"line":1193},[92,158809,1510],{"class":98},[92,158811,158812],{"class":102}," level ",[92,158814,2928],{"class":98},[92,158816,158817],{"class":207}," \"银卡\"",[92,158819,3718],{"class":102},[92,158821,158822,158825,158827],{"class":94,"line":1199},[92,158823,158824],{"class":102},"    discount ",[92,158826,148],{"class":98},[92,158828,158829],{"class":151}," 0.9\n",[92,158831,158832,158834,158836,158838,158841],{"class":94,"line":1290},[92,158833,157781],{"class":98},[92,158835,158812],{"class":102},[92,158837,2928],{"class":98},[92,158839,158840],{"class":207}," \"金卡\"",[92,158842,3718],{"class":102},[92,158844,158845,158847,158849],{"class":94,"line":1296},[92,158846,158824],{"class":102},[92,158848,148],{"class":98},[92,158850,158851],{"class":151}," 0.8\n",[92,158853,158854,158856,158858,158860,158863],{"class":94,"line":1308},[92,158855,157781],{"class":98},[92,158857,158812],{"class":102},[92,158859,2928],{"class":98},[92,158861,158862],{"class":207}," \"普通\"",[92,158864,3718],{"class":102},[92,158866,158867,158869,158871],{"class":94,"line":1591},[92,158868,158824],{"class":102},[92,158870,148],{"class":98},[92,158872,55679],{"class":151},[92,158874,158875,158877],{"class":94,"line":1596},[92,158876,1680],{"class":98},[92,158878,3718],{"class":102},[92,158880,158881,158883,158885,158888],{"class":94,"line":1602},[92,158882,31280],{"class":151},[92,158884,103],{"class":102},[92,158886,158887],{"class":207},"\"会员等级输入错误，按普通会员计算\"",[92,158889,109],{"class":102},[92,158891,158892],{"class":94,"line":1607},[92,158893,2379],{"emptyLinePlaceholder":17},[92,158895,158896,158899,158901,158904,158906],{"class":94,"line":1621},[92,158897,158898],{"class":102},"pay ",[92,158900,148],{"class":98},[92,158902,158903],{"class":102}," amount ",[92,158905,558],{"class":98},[92,158907,157250],{"class":102},[92,158909,158910],{"class":94,"line":1626},[92,158911,2379],{"emptyLinePlaceholder":17},[92,158913,158914,158916,158919,158921,158924],{"class":94,"line":1632},[92,158915,1510],{"class":98},[92,158917,158918],{"class":102}," pay ",[92,158920,1689],{"class":98},[92,158922,158923],{"class":151}," 500",[92,158925,3718],{"class":102},[92,158927,158928,158931,158933],{"class":94,"line":1653},[92,158929,158930],{"class":102},"    pay ",[92,158932,150227],{"class":98},[92,158934,158935],{"class":151}," 50\n",[92,158937,158938],{"class":94,"line":1658},[92,158939,2379],{"emptyLinePlaceholder":17},[92,158941,158942,158944,158946,158948,158950,158952,158955,158957,158959,158961],{"class":94,"line":1672},[92,158943,30396],{"class":151},[92,158945,103],{"class":102},[92,158947,155],{"class":98},[92,158949,157331],{"class":207},[92,158951,999],{"class":151},[92,158953,158954],{"class":102},"pay",[92,158956,157134],{"class":98},[92,158958,1049],{"class":151},[92,158960,156987],{"class":207},[92,158962,109],{"class":102},[33,158964,158966],{"id":158965},"_312-易错点","3.12 易错点",[46,158968,158969,158972,158975,158978,158983],{},[49,158970,158971],{},"冒号不能漏。",[49,158973,158974],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[49,158976,158977],{},"多分支判断要注意顺序。",[49,158979,158980,158981,28366],{},"判断相等用 ",[89,158982,2928],{},[49,158984,158985],{},"字符串比较区分大小写：",[83,158987,158989],{"className":30359,"code":158988,"language":30361,"meta":10,"style":10},"\"Y\" == \"y\"  # False\n",[89,158990,158991],{"__ignoreMap":10},[92,158992,158993,158996,158998,159000],{"class":94,"line":95},[92,158994,158995],{"class":207},"\"Y\"",[92,158997,101534],{"class":98},[92,158999,157980],{"class":207},[92,159001,159002],{"class":161},"  # False\n",[38,159004,159005],{},"可转换后再判断：",[83,159007,159009],{"className":30359,"code":159008,"language":30361,"meta":10,"style":10},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[89,159010,159011,159028,159041],{"__ignoreMap":10},[92,159012,159013,159016,159018,159020,159022,159025],{"class":94,"line":95},[92,159014,159015],{"class":102},"answer ",[92,159017,148],{"class":98},[92,159019,60585],{"class":151},[92,159021,103],{"class":102},[92,159023,159024],{"class":207},"\"是否继续(y\u002Fn):\"",[92,159026,159027],{"class":102},").lower()\n",[92,159029,159030,159032,159035,159037,159039],{"class":94,"line":11},[92,159031,1510],{"class":98},[92,159033,159034],{"class":102}," answer ",[92,159036,2928],{"class":98},[92,159038,157980],{"class":207},[92,159040,3718],{"class":102},[92,159042,159043,159045,159047,159050],{"class":94,"line":1158},[92,159044,31280],{"class":151},[92,159046,103],{"class":102},[92,159048,159049],{"class":207},"\"继续\"",[92,159051,109],{"class":102},[33,159053,159055],{"id":159054},"_313-本章练习","3.13 本章练习",[46,159057,159058,159061,159064,159067,159077],{},[49,159059,159060],{},"输入年龄，判断是否成年。",[49,159062,159063],{},"输入年份，判断是否为闰年。",[49,159065,159066],{},"输入三个数字，输出最大值。",[49,159068,159069,159070,159073,159074,159076],{},"写登录判断：用户名是 ",[89,159071,159072],{},"admin"," 且密码是 ",[89,159075,15064],{}," 才登录成功。",[49,159078,159079],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5106,159081,159082],{},"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":10,"searchDepth":11,"depth":11,"links":159084},[159085,159086,159087,159088,159089,159090,159095,159096,159097,159098,159099,159100,159101],{"id":157473,"depth":11,"text":157474},{"id":157526,"depth":11,"text":157527},{"id":157630,"depth":11,"text":157631},{"id":157720,"depth":11,"text":157721},{"id":157910,"depth":11,"text":157911},{"id":158033,"depth":11,"text":158034,"children":159091},[159092,159093,159094],{"id":158037,"depth":1158,"text":158038},{"id":158094,"depth":1158,"text":158095},{"id":158151,"depth":1158,"text":158152},{"id":158196,"depth":11,"text":158197},{"id":158287,"depth":11,"text":158288},{"id":158414,"depth":11,"text":158415},{"id":158544,"depth":11,"text":158545},{"id":158729,"depth":11,"text":158730},{"id":158965,"depth":11,"text":158966},{"id":159054,"depth":11,"text":159055},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157465,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159108,"title":159109,"body":159110,"description":13,"extension":14,"meta":160879,"navigation":17,"path":160880,"seo":160881,"stem":160882,"__hash__":160883},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159111,"toc":160859},[159112,159115,159119,159125,159128,159145,159149,159151,159168,159170,159215,159217,159234,159238,159241,159307,159310,159328,159332,159493,159502,159506,159510,159515,159562,159564,159570,159574,159579,159626,159628,159634,159638,159643,159679,159682,159729,159733,159739,159797,159802,159833,159838,159842,159897,159900,159972,159975,160034,160038,160041,160116,160119,160123,160229,160232,160258,160262,160274,160343,160346,160438,160442,160444,160455,160457,160587,160591,160793,160801,160805,160835,160839,160856],[29,159113,159109],{"id":159114},"_4-循环语句",[33,159116,159118],{"id":159117},"_41-为什么需要循环","4.1 为什么需要循环",[38,159120,159121,159122,159124],{},"如果要输出 1 到 100，不应该写 100 行 ",[89,159123,146447],{},"，而应该用循环。",[38,159126,159127],{},"循环适合处理重复任务：",[46,159129,159130,159133,159136,159139,159142],{},[49,159131,159132],{},"重复输出。",[49,159134,159135],{},"重复输入。",[49,159137,159138],{},"遍历数据。",[49,159140,159141],{},"持续执行菜单。",[49,159143,159144],{},"批量处理文件或数据。",[33,159146,159148],{"id":159147},"_42-while循环","4.2 while循环",[38,159150,5161],{},[83,159152,159154],{"className":30359,"code":159153,"language":30361,"meta":10,"style":10},"while 条件:\n    循环体\n",[89,159155,159156,159163],{"__ignoreMap":10},[92,159157,159158,159160],{"class":94,"line":95},[92,159159,108638],{"class":98},[92,159161,159162],{"class":102}," 条件:\n",[92,159164,159165],{"class":94,"line":11},[92,159166,159167],{"class":102},"    循环体\n",[38,159169,15115],{},[83,159171,159173],{"className":30359,"code":159172,"language":30361,"meta":10,"style":10},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[89,159174,159175,159183,159187,159199,159206],{"__ignoreMap":10},[92,159176,159177,159179,159181],{"class":94,"line":95},[92,159178,100128],{"class":102},[92,159180,148],{"class":98},[92,159182,55679],{"class":151},[92,159184,159185],{"class":94,"line":11},[92,159186,2379],{"emptyLinePlaceholder":17},[92,159188,159189,159191,159193,159195,159197],{"class":94,"line":1158},[92,159190,108638],{"class":98},[92,159192,9418],{"class":102},[92,159194,1567],{"class":98},[92,159196,2127],{"class":151},[92,159198,3718],{"class":102},[92,159200,159201,159203],{"class":94,"line":1173},[92,159202,31280],{"class":151},[92,159204,159205],{"class":102},"(i)\n",[92,159207,159208,159211,159213],{"class":94,"line":1179},[92,159209,159210],{"class":102},"    i ",[92,159212,9457],{"class":98},[92,159214,55679],{"class":151},[38,159216,80909],{},[46,159218,159219,159225,159228,159231],{},[49,159220,159221,159222,28366],{},"判断条件 ",[89,159223,159224],{},"i \u003C= 5",[49,159226,159227],{},"条件成立，执行循环体。",[49,159229,159230],{},"执行完后回到条件判断。",[49,159232,159233],{},"条件不成立，退出循环。",[33,159235,159237],{"id":159236},"_43-while累加","4.3 while累加",[38,159239,159240],{},"计算 1 到 100 的和：",[83,159242,159244],{"className":30359,"code":159243,"language":30361,"meta":10,"style":10},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[89,159245,159246,159254,159262,159266,159278,159288,159296,159300],{"__ignoreMap":10},[92,159247,159248,159250,159252],{"class":94,"line":95},[92,159249,100128],{"class":102},[92,159251,148],{"class":98},[92,159253,55679],{"class":151},[92,159255,159256,159258,159260],{"class":94,"line":11},[92,159257,157235],{"class":102},[92,159259,148],{"class":98},[92,159261,47314],{"class":151},[92,159263,159264],{"class":94,"line":1158},[92,159265,2379],{"emptyLinePlaceholder":17},[92,159267,159268,159270,159272,159274,159276],{"class":94,"line":1173},[92,159269,108638],{"class":98},[92,159271,9418],{"class":102},[92,159273,1567],{"class":98},[92,159275,5734],{"class":151},[92,159277,3718],{"class":102},[92,159279,159280,159283,159285],{"class":94,"line":1179},[92,159281,159282],{"class":102},"    total ",[92,159284,9457],{"class":98},[92,159286,159287],{"class":102}," i\n",[92,159289,159290,159292,159294],{"class":94,"line":1193},[92,159291,159210],{"class":102},[92,159293,9457],{"class":98},[92,159295,55679],{"class":151},[92,159297,159298],{"class":94,"line":1199},[92,159299,2379],{"emptyLinePlaceholder":17},[92,159301,159302,159304],{"class":94,"line":1290},[92,159303,30396],{"class":151},[92,159305,159306],{"class":102},"(total)\n",[38,159308,159309],{},"核心思想：",[46,159311,159312,159317,159322],{},[49,159313,159314,159316],{},[89,159315,544],{}," 控制循环次数。",[49,159318,159319,159321],{},[89,159320,157336],{}," 保存累加结果。",[49,159323,159324,159325,159327],{},"每轮循环都要更新 ",[89,159326,544],{},"，否则可能死循环。",[33,159329,159331],{"id":159330},"_44-while猜数字","4.4 while猜数字",[83,159333,159335],{"className":30359,"code":159334,"language":30361,"meta":10,"style":10},"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",[89,159336,159337,159343,159347,159364,159372,159376,159384,159404,159413,159417,159429,159440,159450,159461,159467,159489],{"__ignoreMap":10},[92,159338,159339,159341],{"class":94,"line":95},[92,159340,30373],{"class":98},[92,159342,45309],{"class":102},[92,159344,159345],{"class":94,"line":11},[92,159346,2379],{"emptyLinePlaceholder":17},[92,159348,159349,159351,159353,159356,159358,159360,159362],{"class":94,"line":1158},[92,159350,159015],{"class":102},[92,159352,148],{"class":98},[92,159354,159355],{"class":102}," random.randint(",[92,159357,320],{"class":151},[92,159359,12415],{"class":102},[92,159361,414],{"class":151},[92,159363,109],{"class":102},[92,159365,159366,159368,159370],{"class":94,"line":1173},[92,159367,146666],{"class":102},[92,159369,148],{"class":98},[92,159371,47314],{"class":151},[92,159373,159374],{"class":94,"line":1179},[92,159375,2379],{"emptyLinePlaceholder":17},[92,159377,159378,159380,159382],{"class":94,"line":1193},[92,159379,108638],{"class":98},[92,159381,95272],{"class":151},[92,159383,3718],{"class":102},[92,159385,159386,159389,159391,159393,159395,159397,159399,159402],{"class":94,"line":1199},[92,159387,159388],{"class":102},"    guess ",[92,159390,148],{"class":98},[92,159392,2361],{"class":151},[92,159394,103],{"class":102},[92,159396,53801],{"class":151},[92,159398,103],{"class":102},[92,159400,159401],{"class":207},"\"请输入1到100之间的数字:\"",[92,159403,30478],{"class":102},[92,159405,159406,159409,159411],{"class":94,"line":1290},[92,159407,159408],{"class":102},"    count ",[92,159410,9457],{"class":98},[92,159412,55679],{"class":151},[92,159414,159415],{"class":94,"line":1296},[92,159416,2379],{"emptyLinePlaceholder":17},[92,159418,159419,159421,159424,159426],{"class":94,"line":1308},[92,159420,3080],{"class":98},[92,159422,159423],{"class":102}," guess ",[92,159425,1063],{"class":98},[92,159427,159428],{"class":102}," answer:\n",[92,159430,159431,159433,159435,159438],{"class":94,"line":1591},[92,159432,32432],{"class":151},[92,159434,103],{"class":102},[92,159436,159437],{"class":207},"\"猜大了\"",[92,159439,109],{"class":102},[92,159441,159442,159444,159446,159448],{"class":94,"line":1596},[92,159443,39274],{"class":98},[92,159445,159423],{"class":102},[92,159447,1013],{"class":98},[92,159449,159428],{"class":102},[92,159451,159452,159454,159456,159459],{"class":94,"line":1602},[92,159453,32432],{"class":151},[92,159455,103],{"class":102},[92,159457,159458],{"class":207},"\"猜小了\"",[92,159460,109],{"class":102},[92,159462,159463,159465],{"class":94,"line":1607},[92,159464,157997],{"class":98},[92,159466,3718],{"class":102},[92,159468,159469,159471,159473,159475,159478,159480,159482,159484,159487],{"class":94,"line":1621},[92,159470,32432],{"class":151},[92,159472,103],{"class":102},[92,159474,155],{"class":98},[92,159476,159477],{"class":207},"\"猜对了，一共猜了",[92,159479,999],{"class":151},[92,159481,84414],{"class":102},[92,159483,1049],{"class":151},[92,159485,159486],{"class":207},"次\"",[92,159488,109],{"class":102},[92,159490,159491],{"class":94,"line":1626},[92,159492,31608],{"class":98},[38,159494,159495,159498,159499,159501],{},[89,159496,159497],{},"while True"," 表示无限循环，通常配合 ",[89,159500,2032],{}," 使用。",[33,159503,159505],{"id":159504},"_45-break和continue","4.5 break和continue",[63,159507,159509],{"id":159508},"_451-break","4.5.1 break",[38,159511,159512,159514],{},[89,159513,2032],{}," 直接结束整个循环。",[83,159516,159518],{"className":30359,"code":159517,"language":30361,"meta":10,"style":10},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[89,159519,159520,159540,159552,159556],{"__ignoreMap":10},[92,159521,159522,159524,159526,159528,159530,159532,159534,159536,159538],{"class":94,"line":95},[92,159523,3004],{"class":98},[92,159525,9418],{"class":102},[92,159527,26024],{"class":98},[92,159529,32424],{"class":151},[92,159531,103],{"class":102},[92,159533,320],{"class":151},[92,159535,12415],{"class":102},[92,159537,447],{"class":151},[92,159539,30767],{"class":102},[92,159541,159542,159544,159546,159548,159550],{"class":94,"line":11},[92,159543,3080],{"class":98},[92,159545,9418],{"class":102},[92,159547,2928],{"class":98},[92,159549,78050],{"class":151},[92,159551,3718],{"class":102},[92,159553,159554],{"class":94,"line":1158},[92,159555,31608],{"class":98},[92,159557,159558,159560],{"class":94,"line":1173},[92,159559,31280],{"class":151},[92,159561,159205],{"class":102},[38,159563,146432],{},[83,159565,159568],{"className":159566,"code":159567,"language":5167,"meta":10},[5165],"1\n2\n",[89,159569,159567],{"__ignoreMap":10},[63,159571,159573],{"id":159572},"_452-continue","4.5.2 continue",[38,159575,159576,159578],{},[89,159577,154647],{}," 跳过本轮剩余代码，进入下一轮循环。",[83,159580,159582],{"className":30359,"code":159581,"language":30361,"meta":10,"style":10},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[89,159583,159584,159604,159616,159620],{"__ignoreMap":10},[92,159585,159586,159588,159590,159592,159594,159596,159598,159600,159602],{"class":94,"line":95},[92,159587,3004],{"class":98},[92,159589,9418],{"class":102},[92,159591,26024],{"class":98},[92,159593,32424],{"class":151},[92,159595,103],{"class":102},[92,159597,320],{"class":151},[92,159599,12415],{"class":102},[92,159601,447],{"class":151},[92,159603,30767],{"class":102},[92,159605,159606,159608,159610,159612,159614],{"class":94,"line":11},[92,159607,3080],{"class":98},[92,159609,9418],{"class":102},[92,159611,2928],{"class":98},[92,159613,78050],{"class":151},[92,159615,3718],{"class":102},[92,159617,159618],{"class":94,"line":1158},[92,159619,148487],{"class":98},[92,159621,159622,159624],{"class":94,"line":1173},[92,159623,31280],{"class":151},[92,159625,159205],{"class":102},[38,159627,146432],{},[83,159629,159632],{"className":159630,"code":159631,"language":5167,"meta":10},[5165],"1\n2\n4\n5\n",[89,159633,159631],{"__ignoreMap":10},[33,159635,159637],{"id":159636},"_46-for循环","4.6 for循环",[38,159639,159640,159642],{},[89,159641,3004],{}," 常用于遍历序列。",[83,159644,159646],{"className":30359,"code":159645,"language":30361,"meta":10,"style":10},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[89,159647,159648,159657,159661,159672],{"__ignoreMap":10},[92,159649,159650,159652,159654],{"class":94,"line":95},[92,159651,146511],{"class":102},[92,159653,148],{"class":98},[92,159655,159656],{"class":207}," \"python\"\n",[92,159658,159659],{"class":94,"line":11},[92,159660,2379],{"emptyLinePlaceholder":17},[92,159662,159663,159665,159668,159670],{"class":94,"line":1158},[92,159664,3004],{"class":98},[92,159666,159667],{"class":102}," ch ",[92,159669,26024],{"class":98},[92,159671,158374],{"class":102},[92,159673,159674,159676],{"class":94,"line":1173},[92,159675,31280],{"class":151},[92,159677,159678],{"class":102},"(ch)\n",[38,159680,159681],{},"遍历列表：",[83,159683,159685],{"className":30359,"code":159684,"language":30361,"meta":10,"style":10},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[89,159686,159687,159709,159713,159723],{"__ignoreMap":10},[92,159688,159689,159692,159694,159696,159698,159700,159702,159704,159707],{"class":94,"line":95},[92,159690,159691],{"class":102},"students ",[92,159693,148],{"class":98},[92,159695,52206],{"class":102},[92,159697,149863],{"class":207},[92,159699,12415],{"class":102},[92,159701,150911],{"class":207},[92,159703,12415],{"class":102},[92,159705,159706],{"class":207},"\"小刚\"",[92,159708,33227],{"class":102},[92,159710,159711],{"class":94,"line":11},[92,159712,2379],{"emptyLinePlaceholder":17},[92,159714,159715,159717,159719,159721],{"class":94,"line":1158},[92,159716,3004],{"class":98},[92,159718,152112],{"class":102},[92,159720,26024],{"class":98},[92,159722,152117],{"class":102},[92,159724,159725,159727],{"class":94,"line":1173},[92,159726,31280],{"class":151},[92,159728,150017],{"class":102},[33,159730,159732],{"id":159731},"_47-range函数","4.7 range函数",[38,159734,159735,159738],{},[89,159736,159737],{},"range()"," 用于生成整数序列。",[83,159740,159742],{"className":30359,"code":159741,"language":30361,"meta":10,"style":10},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[89,159743,159744,159758,159776],{"__ignoreMap":10},[92,159745,159746,159748,159750,159752,159755],{"class":94,"line":95},[92,159747,33397],{"class":151},[92,159749,103],{"class":102},[92,159751,422],{"class":151},[92,159753,159754],{"class":102},")          ",[92,159756,159757],{"class":161},"# 0,1,2,3,4\n",[92,159759,159760,159762,159764,159766,159768,159770,159773],{"class":94,"line":11},[92,159761,33397],{"class":151},[92,159763,103],{"class":102},[92,159765,320],{"class":151},[92,159767,12415],{"class":102},[92,159769,422],{"class":151},[92,159771,159772],{"class":102},")       ",[92,159774,159775],{"class":161},"# 1,2,3,4\n",[92,159777,159778,159780,159782,159784,159786,159788,159790,159792,159794],{"class":94,"line":1158},[92,159779,33397],{"class":151},[92,159781,103],{"class":102},[92,159783,320],{"class":151},[92,159785,12415],{"class":102},[92,159787,549],{"class":151},[92,159789,12415],{"class":102},[92,159791,180],{"class":151},[92,159793,155636],{"class":102},[92,159795,159796],{"class":161},"# 1,3,5,7,9\n",[38,159798,159799,159800,24599],{},"配合 ",[89,159801,3004],{},[83,159803,159805],{"className":30359,"code":159804,"language":30361,"meta":10,"style":10},"for i in range(1, 6):\n    print(i)\n",[89,159806,159807,159827],{"__ignoreMap":10},[92,159808,159809,159811,159813,159815,159817,159819,159821,159823,159825],{"class":94,"line":95},[92,159810,3004],{"class":98},[92,159812,9418],{"class":102},[92,159814,26024],{"class":98},[92,159816,32424],{"class":151},[92,159818,103],{"class":102},[92,159820,320],{"class":151},[92,159822,12415],{"class":102},[92,159824,447],{"class":151},[92,159826,30767],{"class":102},[92,159828,159829,159831],{"class":94,"line":11},[92,159830,31280],{"class":151},[92,159832,159205],{"class":102},[38,159834,9005,159835,159837],{},[89,159836,33397],{}," 的结束值不包含在内。",[33,159839,159841],{"id":159840},"_48-for循环求和","4.8 for循环求和",[83,159843,159845],{"className":30359,"code":159844,"language":30361,"meta":10,"style":10},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[89,159846,159847,159855,159859,159879,159887,159891],{"__ignoreMap":10},[92,159848,159849,159851,159853],{"class":94,"line":95},[92,159850,157235],{"class":102},[92,159852,148],{"class":98},[92,159854,47314],{"class":151},[92,159856,159857],{"class":94,"line":11},[92,159858,2379],{"emptyLinePlaceholder":17},[92,159860,159861,159863,159865,159867,159869,159871,159873,159875,159877],{"class":94,"line":1158},[92,159862,3004],{"class":98},[92,159864,9418],{"class":102},[92,159866,26024],{"class":98},[92,159868,32424],{"class":151},[92,159870,103],{"class":102},[92,159872,320],{"class":151},[92,159874,12415],{"class":102},[92,159876,440],{"class":151},[92,159878,30767],{"class":102},[92,159880,159881,159883,159885],{"class":94,"line":1173},[92,159882,159282],{"class":102},[92,159884,9457],{"class":98},[92,159886,159287],{"class":102},[92,159888,159889],{"class":94,"line":1179},[92,159890,2379],{"emptyLinePlaceholder":17},[92,159892,159893,159895],{"class":94,"line":1193},[92,159894,30396],{"class":151},[92,159896,159306],{"class":102},[38,159898,159899],{},"求偶数和：",[83,159901,159903],{"className":30359,"code":159902,"language":30361,"meta":10,"style":10},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[89,159904,159905,159913,159917,159937,159953,159962,159966],{"__ignoreMap":10},[92,159906,159907,159909,159911],{"class":94,"line":95},[92,159908,157235],{"class":102},[92,159910,148],{"class":98},[92,159912,47314],{"class":151},[92,159914,159915],{"class":94,"line":11},[92,159916,2379],{"emptyLinePlaceholder":17},[92,159918,159919,159921,159923,159925,159927,159929,159931,159933,159935],{"class":94,"line":1158},[92,159920,3004],{"class":98},[92,159922,9418],{"class":102},[92,159924,26024],{"class":98},[92,159926,32424],{"class":151},[92,159928,103],{"class":102},[92,159930,320],{"class":151},[92,159932,12415],{"class":102},[92,159934,440],{"class":151},[92,159936,30767],{"class":102},[92,159938,159939,159941,159943,159945,159947,159949,159951],{"class":94,"line":1173},[92,159940,3080],{"class":98},[92,159942,9418],{"class":102},[92,159944,431],{"class":98},[92,159946,14735],{"class":151},[92,159948,101534],{"class":98},[92,159950,4072],{"class":151},[92,159952,3718],{"class":102},[92,159954,159955,159958,159960],{"class":94,"line":1179},[92,159956,159957],{"class":102},"        total ",[92,159959,9457],{"class":98},[92,159961,159287],{"class":102},[92,159963,159964],{"class":94,"line":1193},[92,159965,2379],{"emptyLinePlaceholder":17},[92,159967,159968,159970],{"class":94,"line":1199},[92,159969,30396],{"class":151},[92,159971,159306],{"class":102},[38,159973,159974],{},"也可以：",[83,159976,159978],{"className":30359,"code":159977,"language":30361,"meta":10,"style":10},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[89,159979,159980,159988,159992,160016,160024,160028],{"__ignoreMap":10},[92,159981,159982,159984,159986],{"class":94,"line":95},[92,159983,157235],{"class":102},[92,159985,148],{"class":98},[92,159987,47314],{"class":151},[92,159989,159990],{"class":94,"line":11},[92,159991,2379],{"emptyLinePlaceholder":17},[92,159993,159994,159996,159998,160000,160002,160004,160006,160008,160010,160012,160014],{"class":94,"line":1158},[92,159995,3004],{"class":98},[92,159997,9418],{"class":102},[92,159999,26024],{"class":98},[92,160001,32424],{"class":151},[92,160003,103],{"class":102},[92,160005,180],{"class":151},[92,160007,12415],{"class":102},[92,160009,440],{"class":151},[92,160011,12415],{"class":102},[92,160013,180],{"class":151},[92,160015,30767],{"class":102},[92,160017,160018,160020,160022],{"class":94,"line":1173},[92,160019,159282],{"class":102},[92,160021,9457],{"class":98},[92,160023,159287],{"class":102},[92,160025,160026],{"class":94,"line":1179},[92,160027,2379],{"emptyLinePlaceholder":17},[92,160029,160030,160032],{"class":94,"line":1193},[92,160031,30396],{"class":151},[92,160033,159306],{"class":102},[33,160035,160037],{"id":160036},"_49-循环嵌套","4.9 循环嵌套",[38,160039,160040],{},"嵌套循环就是循环里面再写循环。",[83,160042,160044],{"className":30359,"code":160043,"language":30361,"meta":10,"style":10},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[89,160045,160046,160066,160086],{"__ignoreMap":10},[92,160047,160048,160050,160052,160054,160056,160058,160060,160062,160064],{"class":94,"line":95},[92,160049,3004],{"class":98},[92,160051,9418],{"class":102},[92,160053,26024],{"class":98},[92,160055,32424],{"class":151},[92,160057,103],{"class":102},[92,160059,320],{"class":151},[92,160061,12415],{"class":102},[92,160063,396],{"class":151},[92,160065,30767],{"class":102},[92,160067,160068,160070,160072,160074,160076,160078,160080,160082,160084],{"class":94,"line":11},[92,160069,3180],{"class":98},[92,160071,9480],{"class":102},[92,160073,26024],{"class":98},[92,160075,32424],{"class":151},[92,160077,103],{"class":102},[92,160079,320],{"class":151},[92,160081,12415],{"class":102},[92,160083,396],{"class":151},[92,160085,30767],{"class":102},[92,160087,160088,160090,160092,160094,160097,160099,160101,160103,160106,160108,160110,160112,160114],{"class":94,"line":1158},[92,160089,32432],{"class":151},[92,160091,103],{"class":102},[92,160093,155],{"class":98},[92,160095,160096],{"class":207},"\"i=",[92,160098,999],{"class":151},[92,160100,544],{"class":102},[92,160102,1049],{"class":151},[92,160104,160105],{"class":207},", j=",[92,160107,999],{"class":151},[92,160109,570],{"class":102},[92,160111,1049],{"class":151},[92,160113,354],{"class":207},[92,160115,109],{"class":102},[38,160117,160118],{},"外层循环执行一次，内层循环执行完整一轮。",[33,160120,160122],{"id":160121},"_410-九九乘法表","4.10 九九乘法表",[83,160124,160126],{"className":30359,"code":160125,"language":30361,"meta":10,"style":10},"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",[89,160127,160128,160148,160171,160223],{"__ignoreMap":10},[92,160129,160130,160132,160134,160136,160138,160140,160142,160144,160146],{"class":94,"line":95},[92,160131,3004],{"class":98},[92,160133,9418],{"class":102},[92,160135,26024],{"class":98},[92,160137,32424],{"class":151},[92,160139,103],{"class":102},[92,160141,320],{"class":151},[92,160143,12415],{"class":102},[92,160145,549],{"class":151},[92,160147,30767],{"class":102},[92,160149,160150,160152,160154,160156,160158,160160,160162,160165,160167,160169],{"class":94,"line":11},[92,160151,3180],{"class":98},[92,160153,9480],{"class":102},[92,160155,26024],{"class":98},[92,160157,32424],{"class":151},[92,160159,103],{"class":102},[92,160161,320],{"class":151},[92,160163,160164],{"class":102},", i ",[92,160166,584],{"class":98},[92,160168,25099],{"class":151},[92,160170,30767],{"class":102},[92,160172,160173,160175,160177,160179,160181,160183,160185,160187,160189,160191,160193,160195,160197,160199,160201,160203,160205,160207,160209,160211,160213,160215,160217,160219,160221],{"class":94,"line":1158},[92,160174,32432],{"class":151},[92,160176,103],{"class":102},[92,160178,155],{"class":98},[92,160180,354],{"class":207},[92,160182,999],{"class":151},[92,160184,570],{"class":102},[92,160186,1049],{"class":151},[92,160188,558],{"class":207},[92,160190,999],{"class":151},[92,160192,544],{"class":102},[92,160194,1049],{"class":151},[92,160196,148],{"class":207},[92,160198,999],{"class":151},[92,160200,100128],{"class":102},[92,160202,558],{"class":98},[92,160204,3389],{"class":102},[92,160206,1049],{"class":151},[92,160208,354],{"class":207},[92,160210,12415],{"class":102},[92,160212,45782],{"class":5196},[92,160214,148],{"class":98},[92,160216,354],{"class":207},[92,160218,1209],{"class":151},[92,160220,354],{"class":207},[92,160222,109],{"class":102},[92,160224,160225,160227],{"class":94,"line":1173},[92,160226,31280],{"class":151},[92,160228,1955],{"class":102},[38,160230,160231],{},"关键点：",[46,160233,160234,160240,160246,160252],{},[49,160235,160236,160237,160239],{},"外层 ",[89,160238,544],{}," 控制行。",[49,160241,160242,160243,160245],{},"内层 ",[89,160244,570],{}," 控制列。",[49,160247,160248,160249,160251],{},"每行结束后用 ",[89,160250,146447],{}," 换行。",[49,160253,160254,160257],{},[89,160255,160256],{},"end=\"\\t\""," 让同一行的内容横向排列。",[33,160259,160261],{"id":160260},"_411-循环else","4.11 循环else",[38,160263,160264,160265,160267,160268,160270,160271,160273],{},"Python 的循环可以带 ",[89,160266,1680],{},"。当循环正常结束时执行 ",[89,160269,1680],{},"，如果被 ",[89,160272,2032],{}," 打断，则不执行。",[83,160275,160277],{"className":30359,"code":160276,"language":30361,"meta":10,"style":10},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[89,160278,160279,160299,160311,160322,160326,160332],{"__ignoreMap":10},[92,160280,160281,160283,160285,160287,160289,160291,160293,160295,160297],{"class":94,"line":95},[92,160282,3004],{"class":98},[92,160284,9418],{"class":102},[92,160286,26024],{"class":98},[92,160288,32424],{"class":151},[92,160290,103],{"class":102},[92,160292,320],{"class":151},[92,160294,12415],{"class":102},[92,160296,447],{"class":151},[92,160298,30767],{"class":102},[92,160300,160301,160303,160305,160307,160309],{"class":94,"line":11},[92,160302,3080],{"class":98},[92,160304,9418],{"class":102},[92,160306,2928],{"class":98},[92,160308,2017],{"class":151},[92,160310,3718],{"class":102},[92,160312,160313,160315,160317,160320],{"class":94,"line":1158},[92,160314,32432],{"class":151},[92,160316,103],{"class":102},[92,160318,160319],{"class":207},"\"找到了\"",[92,160321,109],{"class":102},[92,160323,160324],{"class":94,"line":1173},[92,160325,31608],{"class":98},[92,160327,160328,160330],{"class":94,"line":1179},[92,160329,1680],{"class":98},[92,160331,3718],{"class":102},[92,160333,160334,160336,160338,160341],{"class":94,"line":1193},[92,160335,31280],{"class":151},[92,160337,103],{"class":102},[92,160339,160340],{"class":207},"\"没找到\"",[92,160342,109],{"class":102},[38,160344,160345],{},"常用于搜索。",[83,160347,160349],{"className":30359,"code":160348,"language":30361,"meta":10,"style":10},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[89,160350,160351,160372,160381,160385,160397,160408,160418,160422,160428],{"__ignoreMap":10},[92,160352,160353,160356,160358,160360,160362,160364,160366,160368,160370],{"class":94,"line":95},[92,160354,160355],{"class":102},"names ",[92,160357,148],{"class":98},[92,160359,52206],{"class":102},[92,160361,149863],{"class":207},[92,160363,12415],{"class":102},[92,160365,150911],{"class":207},[92,160367,12415],{"class":102},[92,160369,159706],{"class":207},[92,160371,33227],{"class":102},[92,160373,160374,160376,160378],{"class":94,"line":11},[92,160375,111553],{"class":102},[92,160377,148],{"class":98},[92,160379,160380],{"class":207}," \"小李\"\n",[92,160382,160383],{"class":94,"line":1158},[92,160384,2379],{"emptyLinePlaceholder":17},[92,160386,160387,160389,160392,160394],{"class":94,"line":1173},[92,160388,3004],{"class":98},[92,160390,160391],{"class":102}," name ",[92,160393,26024],{"class":98},[92,160395,160396],{"class":102}," names:\n",[92,160398,160399,160401,160403,160405],{"class":94,"line":1179},[92,160400,3080],{"class":98},[92,160402,160391],{"class":102},[92,160404,2928],{"class":98},[92,160406,160407],{"class":102}," target:\n",[92,160409,160410,160412,160414,160416],{"class":94,"line":1193},[92,160411,32432],{"class":151},[92,160413,103],{"class":102},[92,160415,160319],{"class":207},[92,160417,109],{"class":102},[92,160419,160420],{"class":94,"line":1199},[92,160421,31608],{"class":98},[92,160423,160424,160426],{"class":94,"line":1290},[92,160425,1680],{"class":98},[92,160427,3718],{"class":102},[92,160429,160430,160432,160434,160436],{"class":94,"line":1296},[92,160431,31280],{"class":151},[92,160433,103],{"class":102},[92,160435,160340],{"class":207},[92,160437,109],{"class":102},[33,160439,160441],{"id":160440},"_412-小案例登录重试","4.12 小案例：登录重试",[38,160443,123267],{},[46,160445,160446,160449,160452],{},[49,160447,160448],{},"用户最多输入 3 次密码。",[49,160450,160451],{},"密码正确则登录成功。",[49,160453,160454],{},"3 次都错误则锁定账号。",[38,160456,10015],{},[83,160458,160460],{"className":30359,"code":160459,"language":30361,"meta":10,"style":10},"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",[89,160461,160462,160472,160476,160492,160508,160512,160524,160535,160539,160545,160570,160576],{"__ignoreMap":10},[92,160463,160464,160467,160469],{"class":94,"line":95},[92,160465,160466],{"class":102},"password ",[92,160468,148],{"class":98},[92,160470,160471],{"class":207}," \"123456\"\n",[92,160473,160474],{"class":94,"line":11},[92,160475,2379],{"emptyLinePlaceholder":17},[92,160477,160478,160480,160482,160484,160486,160488,160490],{"class":94,"line":1158},[92,160479,3004],{"class":98},[92,160481,9418],{"class":102},[92,160483,26024],{"class":98},[92,160485,32424],{"class":151},[92,160487,103],{"class":102},[92,160489,174],{"class":151},[92,160491,30767],{"class":102},[92,160493,160494,160497,160499,160501,160503,160506],{"class":94,"line":1173},[92,160495,160496],{"class":102},"    user_password ",[92,160498,148],{"class":98},[92,160500,60585],{"class":151},[92,160502,103],{"class":102},[92,160504,160505],{"class":207},"\"请输入密码:\"",[92,160507,109],{"class":102},[92,160509,160510],{"class":94,"line":1179},[92,160511,2379],{"emptyLinePlaceholder":17},[92,160513,160514,160516,160519,160521],{"class":94,"line":1193},[92,160515,3080],{"class":98},[92,160517,160518],{"class":102}," user_password ",[92,160520,2928],{"class":98},[92,160522,160523],{"class":102}," password:\n",[92,160525,160526,160528,160530,160533],{"class":94,"line":1199},[92,160527,32432],{"class":151},[92,160529,103],{"class":102},[92,160531,160532],{"class":207},"\"登录成功\"",[92,160534,109],{"class":102},[92,160536,160537],{"class":94,"line":1290},[92,160538,31608],{"class":98},[92,160540,160541,160543],{"class":94,"line":1296},[92,160542,157997],{"class":98},[92,160544,3718],{"class":102},[92,160546,160547,160549,160551,160553,160556,160559,160561,160563,160565,160568],{"class":94,"line":1308},[92,160548,32432],{"class":151},[92,160550,103],{"class":102},[92,160552,155],{"class":98},[92,160554,160555],{"class":207},"\"密码错误，还剩",[92,160557,160558],{"class":151},"{2",[92,160560,52251],{"class":98},[92,160562,3011],{"class":102},[92,160564,1049],{"class":151},[92,160566,160567],{"class":207},"次机会\"",[92,160569,109],{"class":102},[92,160571,160572,160574],{"class":94,"line":1591},[92,160573,1680],{"class":98},[92,160575,3718],{"class":102},[92,160577,160578,160580,160582,160585],{"class":94,"line":1596},[92,160579,31280],{"class":151},[92,160581,103],{"class":102},[92,160583,160584],{"class":207},"\"账号已锁定\"",[92,160586,109],{"class":102},[33,160588,160590],{"id":160589},"_413-小案例菜单程序","4.13 小案例：菜单程序",[83,160592,160594],{"className":30359,"code":160593,"language":30361,"meta":10,"style":10},"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",[89,160595,160596,160604,160615,160626,160637,160648,160659,160663,160678,160682,160694,160705,160717,160728,160740,160751,160763,160773,160777,160783],{"__ignoreMap":10},[92,160597,160598,160600,160602],{"class":94,"line":95},[92,160599,108638],{"class":98},[92,160601,95272],{"class":151},[92,160603,3718],{"class":102},[92,160605,160606,160608,160610,160613],{"class":94,"line":11},[92,160607,31280],{"class":151},[92,160609,103],{"class":102},[92,160611,160612],{"class":207},"\"====== 菜单 ======\"",[92,160614,109],{"class":102},[92,160616,160617,160619,160621,160624],{"class":94,"line":1158},[92,160618,31280],{"class":151},[92,160620,103],{"class":102},[92,160622,160623],{"class":207},"\"1. 查询余额\"",[92,160625,109],{"class":102},[92,160627,160628,160630,160632,160635],{"class":94,"line":1173},[92,160629,31280],{"class":151},[92,160631,103],{"class":102},[92,160633,160634],{"class":207},"\"2. 存款\"",[92,160636,109],{"class":102},[92,160638,160639,160641,160643,160646],{"class":94,"line":1179},[92,160640,31280],{"class":151},[92,160642,103],{"class":102},[92,160644,160645],{"class":207},"\"3. 取款\"",[92,160647,109],{"class":102},[92,160649,160650,160652,160654,160657],{"class":94,"line":1193},[92,160651,31280],{"class":151},[92,160653,103],{"class":102},[92,160655,160656],{"class":207},"\"0. 退出\"",[92,160658,109],{"class":102},[92,160660,160661],{"class":94,"line":1199},[92,160662,2379],{"emptyLinePlaceholder":17},[92,160664,160665,160668,160670,160672,160674,160676],{"class":94,"line":1290},[92,160666,160667],{"class":102},"    choice ",[92,160669,148],{"class":98},[92,160671,60585],{"class":151},[92,160673,103],{"class":102},[92,160675,153048],{"class":207},[92,160677,109],{"class":102},[92,160679,160680],{"class":94,"line":1296},[92,160681,2379],{"emptyLinePlaceholder":17},[92,160683,160684,160686,160688,160690,160692],{"class":94,"line":1308},[92,160685,3080],{"class":98},[92,160687,153061],{"class":102},[92,160689,2928],{"class":98},[92,160691,153066],{"class":207},[92,160693,3718],{"class":102},[92,160695,160696,160698,160700,160703],{"class":94,"line":1591},[92,160697,32432],{"class":151},[92,160699,103],{"class":102},[92,160701,160702],{"class":207},"\"余额为1000元\"",[92,160704,109],{"class":102},[92,160706,160707,160709,160711,160713,160715],{"class":94,"line":1596},[92,160708,39274],{"class":98},[92,160710,153061],{"class":102},[92,160712,2928],{"class":98},[92,160714,153085],{"class":207},[92,160716,3718],{"class":102},[92,160718,160719,160721,160723,160726],{"class":94,"line":1602},[92,160720,32432],{"class":151},[92,160722,103],{"class":102},[92,160724,160725],{"class":207},"\"存款功能\"",[92,160727,109],{"class":102},[92,160729,160730,160732,160734,160736,160738],{"class":94,"line":1607},[92,160731,39274],{"class":98},[92,160733,153061],{"class":102},[92,160735,2928],{"class":98},[92,160737,153103],{"class":207},[92,160739,3718],{"class":102},[92,160741,160742,160744,160746,160749],{"class":94,"line":1621},[92,160743,32432],{"class":151},[92,160745,103],{"class":102},[92,160747,160748],{"class":207},"\"取款功能\"",[92,160750,109],{"class":102},[92,160752,160753,160755,160757,160759,160761],{"class":94,"line":1626},[92,160754,39274],{"class":98},[92,160756,153061],{"class":102},[92,160758,2928],{"class":98},[92,160760,153157],{"class":207},[92,160762,3718],{"class":102},[92,160764,160765,160767,160769,160771],{"class":94,"line":1632},[92,160766,32432],{"class":151},[92,160768,103],{"class":102},[92,160770,153168],{"class":207},[92,160772,109],{"class":102},[92,160774,160775],{"class":94,"line":1653},[92,160776,31608],{"class":98},[92,160778,160779,160781],{"class":94,"line":1658},[92,160780,157997],{"class":98},[92,160782,3718],{"class":102},[92,160784,160785,160787,160789,160791],{"class":94,"line":1672},[92,160786,32432],{"class":151},[92,160788,103],{"class":102},[92,160790,153189],{"class":207},[92,160792,109],{"class":102},[38,160794,160795,160796,160798,160799,28366],{},"菜单类程序通常使用 ",[89,160797,159497],{},"，用户选择退出时 ",[89,160800,2032],{},[33,160802,160804],{"id":160803},"_414-易错点","4.14 易错点",[46,160806,160807,160812,160818,160826,160832],{},[49,160808,160809,160811],{},[89,160810,108638],{}," 循环必须更新控制变量。",[49,160813,160814,160817],{},[89,160815,160816],{},"range(1, 10)"," 不包含 10。",[49,160819,160820,160822,160823,160825],{},[89,160821,2032],{}," 结束整个循环，",[89,160824,154647],{}," 只跳过本轮。",[49,160827,160828,160829,160831],{},"嵌套循环中，",[89,160830,2032],{}," 只跳出当前所在的一层循环。",[49,160833,160834],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[33,160836,160838],{"id":160837},"_415-本章练习","4.15 本章练习",[46,160840,160841,160844,160847,160850,160853],{},[49,160842,160843],{},"输出 1 到 100。",[49,160845,160846],{},"计算 1 到 100 的偶数和。",[49,160848,160849],{},"输出 100 以内能被 3 和 5 同时整除的数。",[49,160851,160852],{},"编写猜数字游戏，限制最多猜 7 次。",[49,160854,160855],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5106,160857,160858],{},"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":10,"searchDepth":11,"depth":11,"links":160860},[160861,160862,160863,160864,160865,160869,160870,160871,160872,160873,160874,160875,160876,160877,160878],{"id":159117,"depth":11,"text":159118},{"id":159147,"depth":11,"text":159148},{"id":159236,"depth":11,"text":159237},{"id":159330,"depth":11,"text":159331},{"id":159504,"depth":11,"text":159505,"children":160866},[160867,160868],{"id":159508,"depth":1158,"text":159509},{"id":159572,"depth":1158,"text":159573},{"id":159636,"depth":11,"text":159637},{"id":159731,"depth":11,"text":159732},{"id":159840,"depth":11,"text":159841},{"id":160036,"depth":11,"text":160037},{"id":160121,"depth":11,"text":160122},{"id":160260,"depth":11,"text":160261},{"id":160440,"depth":11,"text":160441},{"id":160589,"depth":11,"text":160590},{"id":160803,"depth":11,"text":160804},{"id":160837,"depth":11,"text":160838},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159109,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160885,"title":160886,"body":160887,"description":13,"extension":14,"meta":162892,"navigation":17,"path":162893,"seo":162894,"stem":162895,"__hash__":162896},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160888,"toc":162872},[160889,160892,160896,160899,160902,160916,160919,160933,160937,160939,160958,160960,161007,161009,161023,161027,161101,161104,161108,161111,161170,161178,161181,161234,161237,161241,161246,161301,161309,161359,161363,161368,161376,161475,161481,161485,161490,161493,161504,161545,161558,161562,161565,161601,161604,161617,161620,161680,161684,161688,161691,161742,161746,161749,161796,161802,161868,161871,161875,161878,161994,161997,162001,162004,162110,162114,162117,162155,162158,162200,162203,162263,162266,162270,162734,162737,162741,162768,162774,162835,162839,162869],[29,160890,160886],{"id":160891},"_5-函数基础",[33,160893,160895],{"id":160894},"_51-为什么需要函数","5.1 为什么需要函数",[38,160897,160898],{},"函数用于封装一段可以重复使用的代码。",[38,160900,160901],{},"不使用函数的问题：",[46,160903,160904,160907,160910,160913],{},[49,160905,160906],{},"重复代码多。",[49,160908,160909],{},"修改逻辑时容易漏改。",[49,160911,160912],{},"主流程不清晰。",[49,160914,160915],{},"程序越写越长，难以维护。",[38,160917,160918],{},"使用函数后的好处：",[46,160920,160921,160924,160927,160930],{},[49,160922,160923],{},"提高复用性。",[49,160925,160926],{},"提高可读性。",[49,160928,160929],{},"便于调试。",[49,160931,160932],{},"便于分工。",[33,160934,160936],{"id":160935},"_52-函数定义","5.2 函数定义",[38,160938,5161],{},[83,160940,160942],{"className":30359,"code":160941,"language":30361,"meta":10,"style":10},"def 函数名():\n    函数体\n",[89,160943,160944,160953],{"__ignoreMap":10},[92,160945,160946,160948,160951],{"class":94,"line":95},[92,160947,31928],{"class":98},[92,160949,160950],{"class":1942}," 函数名",[92,160952,31934],{"class":102},[92,160954,160955],{"class":94,"line":11},[92,160956,160957],{"class":102},"    函数体\n",[38,160959,15115],{},[83,160961,160963],{"className":30359,"code":160962,"language":30361,"meta":10,"style":10},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[89,160964,160965,160974,160984,160994,160998,161002],{"__ignoreMap":10},[92,160966,160967,160969,160972],{"class":94,"line":95},[92,160968,31928],{"class":98},[92,160970,160971],{"class":1942}," say_hello",[92,160973,31934],{"class":102},[92,160975,160976,160978,160980,160982],{"class":94,"line":11},[92,160977,31280],{"class":151},[92,160979,103],{"class":102},[92,160981,5824],{"class":207},[92,160983,109],{"class":102},[92,160985,160986,160988,160990,160992],{"class":94,"line":1158},[92,160987,31280],{"class":151},[92,160989,103],{"class":102},[92,160991,146614],{"class":207},[92,160993,109],{"class":102},[92,160995,160996],{"class":94,"line":1173},[92,160997,2379],{"emptyLinePlaceholder":17},[92,160999,161000],{"class":94,"line":1179},[92,161001,2379],{"emptyLinePlaceholder":17},[92,161003,161004],{"class":94,"line":1193},[92,161005,161006],{"class":102},"say_hello()\n",[38,161008,9005],{},[46,161010,161011,161014,161017,161020],{},[49,161012,161013],{},"函数必须先定义，再调用。",[49,161015,161016],{},"函数名遵循变量命名规则。",[49,161018,161019],{},"函数体需要缩进。",[49,161021,161022],{},"函数不调用就不会执行。",[33,161024,161026],{"id":161025},"_53-函数调用","5.3 函数调用",[83,161028,161030],{"className":30359,"code":161029,"language":30361,"meta":10,"style":10},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[89,161031,161032,161041,161052,161063,161074,161084,161088,161092,161097],{"__ignoreMap":10},[92,161033,161034,161036,161039],{"class":94,"line":95},[92,161035,31928],{"class":98},[92,161037,161038],{"class":1942}," print_menu",[92,161040,31934],{"class":102},[92,161042,161043,161045,161047,161050],{"class":94,"line":11},[92,161044,31280],{"class":151},[92,161046,103],{"class":102},[92,161048,161049],{"class":207},"\"1. 查询\"",[92,161051,109],{"class":102},[92,161053,161054,161056,161058,161061],{"class":94,"line":1158},[92,161055,31280],{"class":151},[92,161057,103],{"class":102},[92,161059,161060],{"class":207},"\"2. 添加\"",[92,161062,109],{"class":102},[92,161064,161065,161067,161069,161072],{"class":94,"line":1173},[92,161066,31280],{"class":151},[92,161068,103],{"class":102},[92,161070,161071],{"class":207},"\"3. 删除\"",[92,161073,109],{"class":102},[92,161075,161076,161078,161080,161082],{"class":94,"line":1179},[92,161077,31280],{"class":151},[92,161079,103],{"class":102},[92,161081,160656],{"class":207},[92,161083,109],{"class":102},[92,161085,161086],{"class":94,"line":1193},[92,161087,2379],{"emptyLinePlaceholder":17},[92,161089,161090],{"class":94,"line":1199},[92,161091,2379],{"emptyLinePlaceholder":17},[92,161093,161094],{"class":94,"line":1290},[92,161095,161096],{"class":102},"print_menu()\n",[92,161098,161099],{"class":94,"line":1296},[92,161100,161096],{"class":102},[38,161102,161103],{},"函数可以多次调用，每次调用都会执行函数体。",[33,161105,161107],{"id":161106},"_54-参数","5.4 参数",[38,161109,161110],{},"参数用于向函数传递数据。",[83,161112,161114],{"className":30359,"code":161113,"language":30361,"meta":10,"style":10},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[89,161115,161116,161125,161145,161149,161153,161162],{"__ignoreMap":10},[92,161117,161118,161120,161122],{"class":94,"line":95},[92,161119,31928],{"class":98},[92,161121,160971],{"class":1942},[92,161123,161124],{"class":102},"(name):\n",[92,161126,161127,161129,161131,161133,161135,161137,161139,161141,161143],{"class":94,"line":11},[92,161128,31280],{"class":151},[92,161130,103],{"class":102},[92,161132,155],{"class":98},[92,161134,157029],{"class":207},[92,161136,999],{"class":151},[92,161138,79790],{"class":102},[92,161140,1049],{"class":151},[92,161142,354],{"class":207},[92,161144,109],{"class":102},[92,161146,161147],{"class":94,"line":1158},[92,161148,2379],{"emptyLinePlaceholder":17},[92,161150,161151],{"class":94,"line":1173},[92,161152,2379],{"emptyLinePlaceholder":17},[92,161154,161155,161158,161160],{"class":94,"line":1179},[92,161156,161157],{"class":102},"say_hello(",[92,161159,149863],{"class":207},[92,161161,109],{"class":102},[92,161163,161164,161166,161168],{"class":94,"line":1193},[92,161165,161157],{"class":102},[92,161167,150911],{"class":207},[92,161169,109],{"class":102},[38,161171,161172,161174,161175,161177],{},[89,161173,79790],{}," 是形参，",[89,161176,149863],{}," 是实参。",[38,161179,161180],{},"多个参数：",[83,161182,161184],{"className":30359,"code":161183,"language":30361,"meta":10,"style":10},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[89,161185,161186,161194,161207,161213,161217,161221],{"__ignoreMap":10},[92,161187,161188,161190,161192],{"class":94,"line":95},[92,161189,31928],{"class":98},[92,161191,5189],{"class":1942},[92,161193,151068],{"class":102},[92,161195,161196,161199,161201,161203,161205],{"class":94,"line":11},[92,161197,161198],{"class":102},"    result ",[92,161200,148],{"class":98},[92,161202,10849],{"class":102},[92,161204,584],{"class":98},[92,161206,151079],{"class":102},[92,161208,161209,161211],{"class":94,"line":1158},[92,161210,31280],{"class":151},[92,161212,76565],{"class":102},[92,161214,161215],{"class":94,"line":1173},[92,161216,2379],{"emptyLinePlaceholder":17},[92,161218,161219],{"class":94,"line":1179},[92,161220,2379],{"emptyLinePlaceholder":17},[92,161222,161223,161226,161228,161230,161232],{"class":94,"line":1193},[92,161224,161225],{"class":102},"add(",[92,161227,549],{"class":151},[92,161229,12415],{"class":102},[92,161231,803],{"class":151},[92,161233,109],{"class":102},[38,161235,161236],{},"调用时参数数量必须匹配。",[33,161238,161240],{"id":161239},"_55-返回值","5.5 返回值",[38,161242,161243,161245],{},[89,161244,17026],{}," 用于把函数内部的结果返回给调用者。",[83,161247,161249],{"className":30359,"code":161248,"language":30361,"meta":10,"style":10},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[89,161250,161251,161259,161269,161273,161277,161295],{"__ignoreMap":10},[92,161252,161253,161255,161257],{"class":94,"line":95},[92,161254,31928],{"class":98},[92,161256,5189],{"class":1942},[92,161258,151068],{"class":102},[92,161260,161261,161263,161265,161267],{"class":94,"line":11},[92,161262,4069],{"class":98},[92,161264,10849],{"class":102},[92,161266,584],{"class":98},[92,161268,151079],{"class":102},[92,161270,161271],{"class":94,"line":1158},[92,161272,2379],{"emptyLinePlaceholder":17},[92,161274,161275],{"class":94,"line":1173},[92,161276,2379],{"emptyLinePlaceholder":17},[92,161278,161279,161282,161284,161287,161289,161291,161293],{"class":94,"line":1179},[92,161280,161281],{"class":102},"result ",[92,161283,148],{"class":98},[92,161285,161286],{"class":102}," add(",[92,161288,549],{"class":151},[92,161290,12415],{"class":102},[92,161292,803],{"class":151},[92,161294,109],{"class":102},[92,161296,161297,161299],{"class":94,"line":1193},[92,161298,30396],{"class":151},[92,161300,76565],{"class":102},[38,161302,161303,161304,161306,161307,28366],{},"如果函数没有写 ",[89,161305,17026],{},"，默认返回 ",[89,161308,95666],{},[83,161310,161312],{"className":30359,"code":161311,"language":30361,"meta":10,"style":10},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[89,161313,161314,161322,161332,161336,161340,161349],{"__ignoreMap":10},[92,161315,161316,161318,161320],{"class":94,"line":95},[92,161317,31928],{"class":98},[92,161319,160971],{"class":1942},[92,161321,31934],{"class":102},[92,161323,161324,161326,161328,161330],{"class":94,"line":11},[92,161325,31280],{"class":151},[92,161327,103],{"class":102},[92,161329,5824],{"class":207},[92,161331,109],{"class":102},[92,161333,161334],{"class":94,"line":1158},[92,161335,2379],{"emptyLinePlaceholder":17},[92,161337,161338],{"class":94,"line":1173},[92,161339,2379],{"emptyLinePlaceholder":17},[92,161341,161342,161344,161346],{"class":94,"line":1179},[92,161343,161281],{"class":102},[92,161345,148],{"class":98},[92,161347,161348],{"class":102}," say_hello()\n",[92,161350,161351,161353,161356],{"class":94,"line":1193},[92,161352,30396],{"class":151},[92,161354,161355],{"class":102},"(result)  ",[92,161357,161358],{"class":161},"# None\n",[33,161360,161362],{"id":161361},"_56-return的作用","5.6 return的作用",[38,161364,161365,161367],{},[89,161366,17026],{}," 有两个作用：",[46,161369,161370,161373],{},[49,161371,161372],{},"返回结果。",[49,161374,161375],{},"结束函数。",[83,161377,161379],{"className":30359,"code":161378,"language":30361,"meta":10,"style":10},"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",[89,161380,161381,161391,161403,161410,161414,161426,161433,161437,161444,161448,161452,161463],{"__ignoreMap":10},[92,161382,161383,161385,161388],{"class":94,"line":95},[92,161384,31928],{"class":98},[92,161386,161387],{"class":1942}," check_age",[92,161389,161390],{"class":102},"(age):\n",[92,161392,161393,161395,161397,161399,161401],{"class":94,"line":11},[92,161394,3080],{"class":98},[92,161396,15687],{"class":102},[92,161398,1013],{"class":98},[92,161400,4072],{"class":151},[92,161402,3718],{"class":102},[92,161404,161405,161407],{"class":94,"line":1158},[92,161406,14732],{"class":98},[92,161408,161409],{"class":207}," \"年龄不合法\"\n",[92,161411,161412],{"class":94,"line":1173},[92,161413,2379],{"emptyLinePlaceholder":17},[92,161415,161416,161418,161420,161422,161424],{"class":94,"line":1179},[92,161417,3080],{"class":98},[92,161419,15687],{"class":102},[92,161421,1689],{"class":98},[92,161423,156260],{"class":151},[92,161425,3718],{"class":102},[92,161427,161428,161430],{"class":94,"line":1193},[92,161429,14732],{"class":98},[92,161431,161432],{"class":207}," \"成年人\"\n",[92,161434,161435],{"class":94,"line":1199},[92,161436,2379],{"emptyLinePlaceholder":17},[92,161438,161439,161441],{"class":94,"line":1290},[92,161440,4069],{"class":98},[92,161442,161443],{"class":207}," \"未成年人\"\n",[92,161445,161446],{"class":94,"line":1296},[92,161447,2379],{"emptyLinePlaceholder":17},[92,161449,161450],{"class":94,"line":1308},[92,161451,2379],{"emptyLinePlaceholder":17},[92,161453,161454,161456,161459,161461],{"class":94,"line":1591},[92,161455,30396],{"class":151},[92,161457,161458],{"class":102},"(check_age(",[92,161460,803],{"class":151},[92,161462,30478],{"class":102},[92,161464,161465,161467,161469,161471,161473],{"class":94,"line":1596},[92,161466,30396],{"class":151},[92,161468,161458],{"class":102},[92,161470,635],{"class":98},[92,161472,320],{"class":151},[92,161474,30478],{"class":102},[38,161476,161477,161478,161480],{},"函数执行到 ",[89,161479,17026],{}," 后，后面的代码不会继续执行。",[33,161482,161484],{"id":161483},"_57-none","5.7 None",[38,161486,161487,161489],{},[89,161488,95666],{}," 表示空值或没有结果。",[38,161491,161492],{},"常见使用场景：",[46,161494,161495,161498,161501],{},[49,161496,161497],{},"函数没有返回值。",[49,161499,161500],{},"变量暂时没有具体值。",[49,161502,161503],{},"表示查询不到结果。",[83,161505,161507],{"className":30359,"code":161506,"language":30361,"meta":10,"style":10},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[89,161508,161509,161517,161521,161534],{"__ignoreMap":10},[92,161510,161511,161513,161515],{"class":94,"line":95},[92,161512,161281],{"class":102},[92,161514,148],{"class":98},[92,161516,152147],{"class":151},[92,161518,161519],{"class":94,"line":11},[92,161520,2379],{"emptyLinePlaceholder":17},[92,161522,161523,161525,161528,161530,161532],{"class":94,"line":1158},[92,161524,1510],{"class":98},[92,161526,161527],{"class":102}," result ",[92,161529,38908],{"class":98},[92,161531,38914],{"class":151},[92,161533,3718],{"class":102},[92,161535,161536,161538,161540,161543],{"class":94,"line":1173},[92,161537,31280],{"class":151},[92,161539,103],{"class":102},[92,161541,161542],{"class":207},"\"没有数据\"",[92,161544,109],{"class":102},[38,161546,161547,161548,161550,161551,161554,161555,28366],{},"判断 ",[89,161549,95666],{}," 推荐使用 ",[89,161552,161553],{},"is None","，不要写成 ",[89,161556,161557],{},"== None",[33,161559,161561],{"id":161560},"_58-函数文档字符串","5.8 函数文档字符串",[38,161563,161564],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[83,161566,161568],{"className":30359,"code":161567,"language":30361,"meta":10,"style":10},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[89,161569,161570,161580,161585],{"__ignoreMap":10},[92,161571,161572,161574,161577],{"class":94,"line":95},[92,161573,31928],{"class":98},[92,161575,161576],{"class":1942}," calculate_bmi",[92,161578,161579],{"class":102},"(weight, height):\n",[92,161581,161582],{"class":94,"line":11},[92,161583,161584],{"class":207},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[92,161586,161587,161589,161592,161594,161597,161599],{"class":94,"line":1158},[92,161588,4069],{"class":98},[92,161590,161591],{"class":102}," weight ",[92,161593,687],{"class":98},[92,161595,161596],{"class":102}," height ",[92,161598,10641],{"class":98},[92,161600,47704],{"class":151},[38,161602,161603],{},"查看说明：",[83,161605,161607],{"className":30359,"code":161606,"language":30361,"meta":10,"style":10},"help(calculate_bmi)\n",[89,161608,161609],{"__ignoreMap":10},[92,161610,161611,161614],{"class":94,"line":95},[92,161612,161613],{"class":151},"help",[92,161615,161616],{"class":102},"(calculate_bmi)\n",[38,161618,161619],{},"较完整的写法：",[83,161621,161623],{"className":30359,"code":161622,"language":30361,"meta":10,"style":10},"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",[89,161624,161625,161633,161638,161643,161647,161652,161657,161662,161666],{"__ignoreMap":10},[92,161626,161627,161629,161631],{"class":94,"line":95},[92,161628,31928],{"class":98},[92,161630,161576],{"class":1942},[92,161632,161579],{"class":102},[92,161634,161635],{"class":94,"line":11},[92,161636,161637],{"class":207},"    \"\"\"\n",[92,161639,161640],{"class":94,"line":1158},[92,161641,161642],{"class":207},"    计算BMI。\n",[92,161644,161645],{"class":94,"line":1173},[92,161646,2379],{"emptyLinePlaceholder":17},[92,161648,161649],{"class":94,"line":1179},[92,161650,161651],{"class":207},"    :param weight: 体重，单位kg\n",[92,161653,161654],{"class":94,"line":1193},[92,161655,161656],{"class":207},"    :param height: 身高，单位m\n",[92,161658,161659],{"class":94,"line":1199},[92,161660,161661],{"class":207},"    :return: BMI数值\n",[92,161663,161664],{"class":94,"line":1290},[92,161665,161637],{"class":207},[92,161667,161668,161670,161672,161674,161676,161678],{"class":94,"line":1296},[92,161669,4069],{"class":98},[92,161671,161591],{"class":102},[92,161673,687],{"class":98},[92,161675,161596],{"class":102},[92,161677,10641],{"class":98},[92,161679,47704],{"class":151},[33,161681,161683],{"id":161682},"_59-变量作用域","5.9 变量作用域",[63,161685,161687],{"id":161686},"_591-局部变量","5.9.1 局部变量",[38,161689,161690],{},"在函数内部定义的变量，只能在函数内部使用。",[83,161692,161694],{"className":30359,"code":161693,"language":30361,"meta":10,"style":10},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[89,161695,161696,161705,161713,161719,161723,161727,161732],{"__ignoreMap":10},[92,161697,161698,161700,161703],{"class":94,"line":95},[92,161699,31928],{"class":98},[92,161701,161702],{"class":1942}," test",[92,161704,31934],{"class":102},[92,161706,161707,161709,161711],{"class":94,"line":11},[92,161708,45574],{"class":102},[92,161710,148],{"class":98},[92,161712,58408],{"class":151},[92,161714,161715,161717],{"class":94,"line":1158},[92,161716,31280],{"class":151},[92,161718,116],{"class":102},[92,161720,161721],{"class":94,"line":1173},[92,161722,2379],{"emptyLinePlaceholder":17},[92,161724,161725],{"class":94,"line":1179},[92,161726,2379],{"emptyLinePlaceholder":17},[92,161728,161729],{"class":94,"line":1193},[92,161730,161731],{"class":102},"test()\n",[92,161733,161734,161736,161739],{"class":94,"line":1199},[92,161735,30396],{"class":151},[92,161737,161738],{"class":102},"(num)  ",[92,161740,161741],{"class":161},"# 报错\n",[63,161743,161745],{"id":161744},"_592-全局变量","5.9.2 全局变量",[38,161747,161748],{},"在函数外部定义的变量，可以在函数内部读取。",[83,161750,161752],{"className":30359,"code":161751,"language":30361,"meta":10,"style":10},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[89,161753,161754,161762,161766,161770,161778,161784,161788,161792],{"__ignoreMap":10},[92,161755,161756,161758,161760],{"class":94,"line":95},[92,161757,146511],{"class":102},[92,161759,148],{"class":98},[92,161761,149328],{"class":207},[92,161763,161764],{"class":94,"line":11},[92,161765,2379],{"emptyLinePlaceholder":17},[92,161767,161768],{"class":94,"line":1158},[92,161769,2379],{"emptyLinePlaceholder":17},[92,161771,161772,161774,161776],{"class":94,"line":1173},[92,161773,31928],{"class":98},[92,161775,160971],{"class":1942},[92,161777,31934],{"class":102},[92,161779,161780,161782],{"class":94,"line":1179},[92,161781,31280],{"class":151},[92,161783,150635],{"class":102},[92,161785,161786],{"class":94,"line":1193},[92,161787,2379],{"emptyLinePlaceholder":17},[92,161789,161790],{"class":94,"line":1199},[92,161791,2379],{"emptyLinePlaceholder":17},[92,161793,161794],{"class":94,"line":1290},[92,161795,161006],{"class":102},[38,161797,161798,161799,28366],{},"如果要在函数内部修改全局变量，需要 ",[89,161800,161801],{},"global",[83,161803,161805],{"className":30359,"code":161804,"language":30361,"meta":10,"style":10},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[89,161806,161807,161815,161819,161823,161832,161840,161848,161852,161856,161861],{"__ignoreMap":10},[92,161808,161809,161811,161813],{"class":94,"line":95},[92,161810,146666],{"class":102},[92,161812,148],{"class":98},[92,161814,47314],{"class":151},[92,161816,161817],{"class":94,"line":11},[92,161818,2379],{"emptyLinePlaceholder":17},[92,161820,161821],{"class":94,"line":1158},[92,161822,2379],{"emptyLinePlaceholder":17},[92,161824,161825,161827,161830],{"class":94,"line":1173},[92,161826,31928],{"class":98},[92,161828,161829],{"class":1942}," add_count",[92,161831,31934],{"class":102},[92,161833,161834,161837],{"class":94,"line":1179},[92,161835,161836],{"class":98},"    global",[92,161838,161839],{"class":102}," count\n",[92,161841,161842,161844,161846],{"class":94,"line":1193},[92,161843,159408],{"class":102},[92,161845,9457],{"class":98},[92,161847,55679],{"class":151},[92,161849,161850],{"class":94,"line":1199},[92,161851,2379],{"emptyLinePlaceholder":17},[92,161853,161854],{"class":94,"line":1290},[92,161855,2379],{"emptyLinePlaceholder":17},[92,161857,161858],{"class":94,"line":1296},[92,161859,161860],{"class":102},"add_count()\n",[92,161862,161863,161865],{"class":94,"line":1308},[92,161864,30396],{"class":151},[92,161866,161867],{"class":102},"(count)\n",[38,161869,161870],{},"不建议大量使用全局变量，项目变大后很难维护。",[33,161872,161874],{"id":161873},"_510-函数嵌套调用","5.10 函数嵌套调用",[38,161876,161877],{},"一个函数中可以调用另一个函数。",[83,161879,161881],{"className":30359,"code":161880,"language":30361,"meta":10,"style":10},"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",[89,161882,161883,161892,161906,161910,161914,161923,161928,161948,161969,161973,161977,161981],{"__ignoreMap":10},[92,161884,161885,161887,161890],{"class":94,"line":95},[92,161886,31928],{"class":98},[92,161888,161889],{"class":1942}," print_line",[92,161891,31934],{"class":102},[92,161893,161894,161896,161898,161900,161902,161904],{"class":94,"line":11},[92,161895,31280],{"class":151},[92,161897,103],{"class":102},[92,161899,32464],{"class":207},[92,161901,6498],{"class":98},[92,161903,78645],{"class":151},[92,161905,109],{"class":102},[92,161907,161908],{"class":94,"line":1158},[92,161909,2379],{"emptyLinePlaceholder":17},[92,161911,161912],{"class":94,"line":1173},[92,161913,2379],{"emptyLinePlaceholder":17},[92,161915,161916,161918,161921],{"class":94,"line":1179},[92,161917,31928],{"class":98},[92,161919,161920],{"class":1942}," print_info",[92,161922,149350],{"class":102},[92,161924,161925],{"class":94,"line":1193},[92,161926,161927],{"class":102},"    print_line()\n",[92,161929,161930,161932,161934,161936,161938,161940,161942,161944,161946],{"class":94,"line":1199},[92,161931,31280],{"class":151},[92,161933,103],{"class":102},[92,161935,155],{"class":98},[92,161937,156657],{"class":207},[92,161939,999],{"class":151},[92,161941,79790],{"class":102},[92,161943,1049],{"class":151},[92,161945,354],{"class":207},[92,161947,109],{"class":102},[92,161949,161950,161952,161954,161956,161959,161961,161963,161965,161967],{"class":94,"line":1290},[92,161951,31280],{"class":151},[92,161953,103],{"class":102},[92,161955,155],{"class":98},[92,161957,161958],{"class":207},"\"年龄:",[92,161960,999],{"class":151},[92,161962,70201],{"class":102},[92,161964,1049],{"class":151},[92,161966,354],{"class":207},[92,161968,109],{"class":102},[92,161970,161971],{"class":94,"line":1296},[92,161972,161927],{"class":102},[92,161974,161975],{"class":94,"line":1308},[92,161976,2379],{"emptyLinePlaceholder":17},[92,161978,161979],{"class":94,"line":1591},[92,161980,2379],{"emptyLinePlaceholder":17},[92,161982,161983,161986,161988,161990,161992],{"class":94,"line":1596},[92,161984,161985],{"class":102},"print_info(",[92,161987,149863],{"class":207},[92,161989,12415],{"class":102},[92,161991,753],{"class":151},[92,161993,109],{"class":102},[38,161995,161996],{},"这种方式可以把小功能组合成大功能。",[33,161998,162000],{"id":161999},"_511-参数检查","5.11 参数检查",[38,162002,162003],{},"函数内部可以检查参数是否合法。",[83,162005,162007],{"className":30359,"code":162006,"language":30361,"meta":10,"style":10},"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",[89,162008,162009,162018,162030,162036,162046,162050,162054,162071,162075,162087,162098,162104],{"__ignoreMap":10},[92,162010,162011,162013,162016],{"class":94,"line":95},[92,162012,31928],{"class":98},[92,162014,162015],{"class":1942}," divide",[92,162017,151068],{"class":102},[92,162019,162020,162022,162024,162026,162028],{"class":94,"line":11},[92,162021,3080],{"class":98},[92,162023,10862],{"class":102},[92,162025,2928],{"class":98},[92,162027,4072],{"class":151},[92,162029,3718],{"class":102},[92,162031,162032,162034],{"class":94,"line":1158},[92,162033,14732],{"class":98},[92,162035,152147],{"class":151},[92,162037,162038,162040,162042,162044],{"class":94,"line":1173},[92,162039,4069],{"class":98},[92,162041,10849],{"class":102},[92,162043,687],{"class":98},[92,162045,151079],{"class":102},[92,162047,162048],{"class":94,"line":1179},[92,162049,2379],{"emptyLinePlaceholder":17},[92,162051,162052],{"class":94,"line":1193},[92,162053,2379],{"emptyLinePlaceholder":17},[92,162055,162056,162058,162060,162063,162065,162067,162069],{"class":94,"line":1199},[92,162057,161281],{"class":102},[92,162059,148],{"class":98},[92,162061,162062],{"class":102}," divide(",[92,162064,549],{"class":151},[92,162066,12415],{"class":102},[92,162068,294],{"class":151},[92,162070,109],{"class":102},[92,162072,162073],{"class":94,"line":1290},[92,162074,2379],{"emptyLinePlaceholder":17},[92,162076,162077,162079,162081,162083,162085],{"class":94,"line":1296},[92,162078,1510],{"class":98},[92,162080,161527],{"class":102},[92,162082,38908],{"class":98},[92,162084,38914],{"class":151},[92,162086,3718],{"class":102},[92,162088,162089,162091,162093,162096],{"class":94,"line":1308},[92,162090,31280],{"class":151},[92,162092,103],{"class":102},[92,162094,162095],{"class":207},"\"除数不能为0\"",[92,162097,109],{"class":102},[92,162099,162100,162102],{"class":94,"line":1591},[92,162101,1680],{"class":98},[92,162103,3718],{"class":102},[92,162105,162106,162108],{"class":94,"line":1596},[92,162107,31280],{"class":151},[92,162109,76565],{"class":102},[33,162111,162113],{"id":162112},"_512-类型提示","5.12 类型提示",[38,162115,162116],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[83,162118,162120],{"className":30359,"code":162119,"language":30361,"meta":10,"style":10},"def add(a: int, b: int) -> int:\n    return a + b\n",[89,162121,162122,162145],{"__ignoreMap":10},[92,162123,162124,162126,162128,162131,162133,162136,162138,162141,162143],{"class":94,"line":95},[92,162125,31928],{"class":98},[92,162127,5189],{"class":1942},[92,162129,162130],{"class":102},"(a: ",[92,162132,106],{"class":151},[92,162134,162135],{"class":102},", b: ",[92,162137,106],{"class":151},[92,162139,162140],{"class":102},") -> ",[92,162142,106],{"class":151},[92,162144,3718],{"class":102},[92,162146,162147,162149,162151,162153],{"class":94,"line":11},[92,162148,4069],{"class":98},[92,162150,10849],{"class":102},[92,162152,584],{"class":98},[92,162154,151079],{"class":102},[38,162156,162157],{},"字符串参数：",[83,162159,162161],{"className":30359,"code":162160,"language":30361,"meta":10,"style":10},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[89,162162,162163,162180],{"__ignoreMap":10},[92,162164,162165,162167,162169,162172,162174,162176,162178],{"class":94,"line":95},[92,162166,31928],{"class":98},[92,162168,160971],{"class":1942},[92,162170,162171],{"class":102},"(name: ",[92,162173,1278],{"class":151},[92,162175,162140],{"class":102},[92,162177,95666],{"class":151},[92,162179,3718],{"class":102},[92,162181,162182,162184,162186,162188,162190,162192,162194,162196,162198],{"class":94,"line":11},[92,162183,31280],{"class":151},[92,162185,103],{"class":102},[92,162187,155],{"class":98},[92,162189,157029],{"class":207},[92,162191,999],{"class":151},[92,162193,79790],{"class":102},[92,162195,1049],{"class":151},[92,162197,354],{"class":207},[92,162199,109],{"class":102},[38,162201,162202],{},"列表参数：",[83,162204,162206],{"className":30359,"code":162205,"language":30361,"meta":10,"style":10},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[89,162207,162208,162227,162235,162247,162256],{"__ignoreMap":10},[92,162209,162210,162212,162215,162218,162220,162223,162225],{"class":94,"line":95},[92,162211,31928],{"class":98},[92,162213,162214],{"class":1942}," get_total",[92,162216,162217],{"class":102},"(numbers: list[",[92,162219,106],{"class":151},[92,162221,162222],{"class":102},"]) -> ",[92,162224,106],{"class":151},[92,162226,3718],{"class":102},[92,162228,162229,162231,162233],{"class":94,"line":11},[92,162230,159282],{"class":102},[92,162232,148],{"class":98},[92,162234,47314],{"class":151},[92,162236,162237,162239,162242,162244],{"class":94,"line":1158},[92,162238,3180],{"class":98},[92,162240,162241],{"class":102}," number ",[92,162243,26024],{"class":98},[92,162245,162246],{"class":102}," numbers:\n",[92,162248,162249,162251,162253],{"class":94,"line":1173},[92,162250,159957],{"class":102},[92,162252,9457],{"class":98},[92,162254,162255],{"class":102}," number\n",[92,162257,162258,162260],{"class":94,"line":1179},[92,162259,4069],{"class":98},[92,162261,162262],{"class":102}," total\n",[38,162264,162265],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[33,162267,162269],{"id":162268},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[83,162271,162273],{"className":30359,"code":162272,"language":30361,"meta":10,"style":10},"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",[89,162274,162275,162285,162289,162293,162301,162312,162322,162332,162342,162352,162356,162360,162369,162391,162395,162399,162408,162414,162434,162446,162457,162461,162470,162481,162486,162490,162494,162503,162509,162528,162540,162550,162554,162565,162575,162579,162587,162598,162602,162606,162610,162618,162623,162637,162641,162653,162658,162670,162675,162687,162692,162704,162714,162718,162724],{"__ignoreMap":10},[92,162276,162277,162280,162282],{"class":94,"line":95},[92,162278,162279],{"class":102},"balance ",[92,162281,148],{"class":98},[92,162283,162284],{"class":151}," 1000\n",[92,162286,162287],{"class":94,"line":11},[92,162288,2379],{"emptyLinePlaceholder":17},[92,162290,162291],{"class":94,"line":1158},[92,162292,2379],{"emptyLinePlaceholder":17},[92,162294,162295,162297,162299],{"class":94,"line":1173},[92,162296,31928],{"class":98},[92,162298,152008],{"class":1942},[92,162300,31934],{"class":102},[92,162302,162303,162305,162307,162310],{"class":94,"line":1179},[92,162304,31280],{"class":151},[92,162306,103],{"class":102},[92,162308,162309],{"class":207},"\"====== ATM ======\"",[92,162311,109],{"class":102},[92,162313,162314,162316,162318,162320],{"class":94,"line":1193},[92,162315,31280],{"class":151},[92,162317,103],{"class":102},[92,162319,160623],{"class":207},[92,162321,109],{"class":102},[92,162323,162324,162326,162328,162330],{"class":94,"line":1199},[92,162325,31280],{"class":151},[92,162327,103],{"class":102},[92,162329,160634],{"class":207},[92,162331,109],{"class":102},[92,162333,162334,162336,162338,162340],{"class":94,"line":1290},[92,162335,31280],{"class":151},[92,162337,103],{"class":102},[92,162339,160645],{"class":207},[92,162341,109],{"class":102},[92,162343,162344,162346,162348,162350],{"class":94,"line":1296},[92,162345,31280],{"class":151},[92,162347,103],{"class":102},[92,162349,160656],{"class":207},[92,162351,109],{"class":102},[92,162353,162354],{"class":94,"line":1308},[92,162355,2379],{"emptyLinePlaceholder":17},[92,162357,162358],{"class":94,"line":1591},[92,162359,2379],{"emptyLinePlaceholder":17},[92,162361,162362,162364,162367],{"class":94,"line":1596},[92,162363,31928],{"class":98},[92,162365,162366],{"class":1942}," show_balance",[92,162368,31934],{"class":102},[92,162370,162371,162373,162375,162377,162380,162382,162385,162387,162389],{"class":94,"line":1602},[92,162372,31280],{"class":151},[92,162374,103],{"class":102},[92,162376,155],{"class":98},[92,162378,162379],{"class":207},"\"当前余额:",[92,162381,999],{"class":151},[92,162383,162384],{"class":102},"balance",[92,162386,1049],{"class":151},[92,162388,156987],{"class":207},[92,162390,109],{"class":102},[92,162392,162393],{"class":94,"line":1607},[92,162394,2379],{"emptyLinePlaceholder":17},[92,162396,162397],{"class":94,"line":1621},[92,162398,2379],{"emptyLinePlaceholder":17},[92,162400,162401,162403,162406],{"class":94,"line":1626},[92,162402,31928],{"class":98},[92,162404,162405],{"class":1942}," save_money",[92,162407,31934],{"class":102},[92,162409,162410,162412],{"class":94,"line":1632},[92,162411,161836],{"class":98},[92,162413,150074],{"class":102},[92,162415,162416,162419,162421,162423,162425,162427,162429,162432],{"class":94,"line":1653},[92,162417,162418],{"class":102},"    money ",[92,162420,148],{"class":98},[92,162422,109772],{"class":151},[92,162424,103],{"class":102},[92,162426,53801],{"class":151},[92,162428,103],{"class":102},[92,162430,162431],{"class":207},"\"请输入存款金额:\"",[92,162433,30478],{"class":102},[92,162435,162436,162438,162440,162442,162444],{"class":94,"line":1658},[92,162437,3080],{"class":98},[92,162439,150117],{"class":102},[92,162441,1567],{"class":98},[92,162443,4072],{"class":151},[92,162445,3718],{"class":102},[92,162447,162448,162450,162452,162455],{"class":94,"line":1672},[92,162449,32432],{"class":151},[92,162451,103],{"class":102},[92,162453,162454],{"class":207},"\"金额必须大于0\"",[92,162456,109],{"class":102},[92,162458,162459],{"class":94,"line":1677},[92,162460,152336],{"class":98},[92,162462,162463,162466,162468],{"class":94,"line":1706},[92,162464,162465],{"class":102},"    balance ",[92,162467,9457],{"class":98},[92,162469,150150],{"class":102},[92,162471,162472,162474,162476,162479],{"class":94,"line":1711},[92,162473,31280],{"class":151},[92,162475,103],{"class":102},[92,162477,162478],{"class":207},"\"存款成功\"",[92,162480,109],{"class":102},[92,162482,162483],{"class":94,"line":1728},[92,162484,162485],{"class":102},"    show_balance()\n",[92,162487,162488],{"class":94,"line":1733},[92,162489,2379],{"emptyLinePlaceholder":17},[92,162491,162492],{"class":94,"line":1738},[92,162493,2379],{"emptyLinePlaceholder":17},[92,162495,162496,162498,162501],{"class":94,"line":1743},[92,162497,31928],{"class":98},[92,162499,162500],{"class":1942}," withdraw_money",[92,162502,31934],{"class":102},[92,162504,162505,162507],{"class":94,"line":1757},[92,162506,161836],{"class":98},[92,162508,150074],{"class":102},[92,162510,162511,162513,162515,162517,162519,162521,162523,162526],{"class":94,"line":1762},[92,162512,162418],{"class":102},[92,162514,148],{"class":98},[92,162516,109772],{"class":151},[92,162518,103],{"class":102},[92,162520,53801],{"class":151},[92,162522,103],{"class":102},[92,162524,162525],{"class":207},"\"请输入取款金额:\"",[92,162527,30478],{"class":102},[92,162529,162530,162532,162534,162536,162538],{"class":94,"line":2556},[92,162531,3080],{"class":98},[92,162533,150117],{"class":102},[92,162535,1567],{"class":98},[92,162537,4072],{"class":151},[92,162539,3718],{"class":102},[92,162541,162542,162544,162546,162548],{"class":94,"line":2570},[92,162543,32432],{"class":151},[92,162545,103],{"class":102},[92,162547,162454],{"class":207},[92,162549,109],{"class":102},[92,162551,162552],{"class":94,"line":2578},[92,162553,152336],{"class":98},[92,162555,162556,162558,162560,162562],{"class":94,"line":2583},[92,162557,3080],{"class":98},[92,162559,150117],{"class":102},[92,162561,1063],{"class":98},[92,162563,162564],{"class":102}," balance:\n",[92,162566,162567,162569,162571,162573],{"class":94,"line":2589},[92,162568,32432],{"class":151},[92,162570,103],{"class":102},[92,162572,150212],{"class":207},[92,162574,109],{"class":102},[92,162576,162577],{"class":94,"line":2595},[92,162578,152336],{"class":98},[92,162580,162581,162583,162585],{"class":94,"line":2600},[92,162582,162465],{"class":102},[92,162584,150227],{"class":98},[92,162586,150150],{"class":102},[92,162588,162589,162591,162593,162596],{"class":94,"line":7928},[92,162590,31280],{"class":151},[92,162592,103],{"class":102},[92,162594,162595],{"class":207},"\"取款成功\"",[92,162597,109],{"class":102},[92,162599,162600],{"class":94,"line":7952},[92,162601,162485],{"class":102},[92,162603,162604],{"class":94,"line":7957},[92,162605,2379],{"emptyLinePlaceholder":17},[92,162607,162608],{"class":94,"line":7963},[92,162609,2379],{"emptyLinePlaceholder":17},[92,162611,162612,162614,162616],{"class":94,"line":7990},[92,162613,108638],{"class":98},[92,162615,95272],{"class":151},[92,162617,3718],{"class":102},[92,162619,162620],{"class":94,"line":7995},[92,162621,162622],{"class":102},"    show_menu()\n",[92,162624,162625,162627,162629,162631,162633,162635],{"class":94,"line":8001},[92,162626,160667],{"class":102},[92,162628,148],{"class":98},[92,162630,60585],{"class":151},[92,162632,103],{"class":102},[92,162634,153048],{"class":207},[92,162636,109],{"class":102},[92,162638,162639],{"class":94,"line":8013},[92,162640,2379],{"emptyLinePlaceholder":17},[92,162642,162643,162645,162647,162649,162651],{"class":94,"line":8025},[92,162644,3080],{"class":98},[92,162646,153061],{"class":102},[92,162648,2928],{"class":98},[92,162650,153066],{"class":207},[92,162652,3718],{"class":102},[92,162654,162655],{"class":94,"line":8037},[92,162656,162657],{"class":102},"        show_balance()\n",[92,162659,162660,162662,162664,162666,162668],{"class":94,"line":9696},[92,162661,39274],{"class":98},[92,162663,153061],{"class":102},[92,162665,2928],{"class":98},[92,162667,153085],{"class":207},[92,162669,3718],{"class":102},[92,162671,162672],{"class":94,"line":9721},[92,162673,162674],{"class":102},"        save_money()\n",[92,162676,162677,162679,162681,162683,162685],{"class":94,"line":9744},[92,162678,39274],{"class":98},[92,162680,153061],{"class":102},[92,162682,2928],{"class":98},[92,162684,153103],{"class":207},[92,162686,3718],{"class":102},[92,162688,162689],{"class":94,"line":9768},[92,162690,162691],{"class":102},"        withdraw_money()\n",[92,162693,162694,162696,162698,162700,162702],{"class":94,"line":9773},[92,162695,39274],{"class":98},[92,162697,153061],{"class":102},[92,162699,2928],{"class":98},[92,162701,153157],{"class":207},[92,162703,3718],{"class":102},[92,162705,162706,162708,162710,162712],{"class":94,"line":9778},[92,162707,32432],{"class":151},[92,162709,103],{"class":102},[92,162711,153168],{"class":207},[92,162713,109],{"class":102},[92,162715,162716],{"class":94,"line":9783},[92,162717,31608],{"class":98},[92,162719,162720,162722],{"class":94,"line":9792},[92,162721,157997],{"class":98},[92,162723,3718],{"class":102},[92,162725,162726,162728,162730,162732],{"class":94,"line":9797},[92,162727,32432],{"class":151},[92,162729,103],{"class":102},[92,162731,153189],{"class":207},[92,162733,109],{"class":102},[38,162735,162736],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[33,162738,162740],{"id":162739},"_514-易错点","5.14 易错点",[46,162742,162743,162746,162749,162754,162759,162762],{},[49,162744,162745],{},"函数定义后必须调用才会执行。",[49,162747,162748],{},"函数名后面有括号才是调用。",[49,162750,162751,162753],{},[89,162752,17026],{}," 后面的代码不会执行。",[49,162755,162756,162757,28366],{},"没有返回值的函数默认返回 ",[89,162758,95666],{},[49,162760,162761],{},"局部变量不能在函数外部访问。",[49,162763,162764,162765,162767],{},"不要滥用 ",[89,162766,161801],{},"，更好的方式是让函数返回新值。",[38,162769,162770,162771,162773],{},"例如不用 ",[89,162772,161801],{}," 改写存款：",[83,162775,162777],{"className":30359,"code":162776,"language":30361,"meta":10,"style":10},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[89,162778,162779,162788,162799,162803,162807,162815,162828],{"__ignoreMap":10},[92,162780,162781,162783,162785],{"class":94,"line":95},[92,162782,31928],{"class":98},[92,162784,162405],{"class":1942},[92,162786,162787],{"class":102},"(balance, money):\n",[92,162789,162790,162792,162795,162797],{"class":94,"line":11},[92,162791,4069],{"class":98},[92,162793,162794],{"class":102}," balance ",[92,162796,584],{"class":98},[92,162798,150150],{"class":102},[92,162800,162801],{"class":94,"line":1158},[92,162802,2379],{"emptyLinePlaceholder":17},[92,162804,162805],{"class":94,"line":1173},[92,162806,2379],{"emptyLinePlaceholder":17},[92,162808,162809,162811,162813],{"class":94,"line":1179},[92,162810,162279],{"class":102},[92,162812,148],{"class":98},[92,162814,162284],{"class":151},[92,162816,162817,162819,162821,162824,162826],{"class":94,"line":1193},[92,162818,162279],{"class":102},[92,162820,148],{"class":98},[92,162822,162823],{"class":102}," save_money(balance, ",[92,162825,1701],{"class":151},[92,162827,109],{"class":102},[92,162829,162830,162832],{"class":94,"line":1199},[92,162831,30396],{"class":151},[92,162833,162834],{"class":102},"(balance)\n",[33,162836,162838],{"id":162837},"_515-本章练习","5.15 本章练习",[46,162840,162841,162848,162854,162860,162866],{},[49,162842,162843,162844,162847],{},"定义函数 ",[89,162845,162846],{},"print_student(name, age)","，输出学生信息。",[49,162849,162843,162850,162853],{},[89,162851,162852],{},"get_max(a, b, c)","，返回三个数中的最大值。",[49,162855,162843,162856,162859],{},[89,162857,162858],{},"is_even(num)","，判断一个数是否为偶数。",[49,162861,162843,162862,162865],{},[89,162863,162864],{},"calculate_bmi(weight, height)","，返回 BMI。",[49,162867,162868],{},"把第 4 章的菜单程序拆分成多个函数。",[5106,162870,162871],{},"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":10,"searchDepth":11,"depth":11,"links":162873},[162874,162875,162876,162877,162878,162879,162880,162881,162882,162886,162887,162888,162889,162890,162891],{"id":160894,"depth":11,"text":160895},{"id":160935,"depth":11,"text":160936},{"id":161025,"depth":11,"text":161026},{"id":161106,"depth":11,"text":161107},{"id":161239,"depth":11,"text":161240},{"id":161361,"depth":11,"text":161362},{"id":161483,"depth":11,"text":161484},{"id":161560,"depth":11,"text":161561},{"id":161682,"depth":11,"text":161683,"children":162883},[162884,162885],{"id":161686,"depth":1158,"text":161687},{"id":161744,"depth":1158,"text":161745},{"id":161873,"depth":11,"text":161874},{"id":161999,"depth":11,"text":162000},{"id":162112,"depth":11,"text":162113},{"id":162268,"depth":11,"text":162269},{"id":162739,"depth":11,"text":162740},{"id":162837,"depth":11,"text":162838},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160886,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162898,"title":162899,"body":162900,"description":13,"extension":14,"meta":165944,"navigation":17,"path":165945,"seo":165946,"stem":165947,"__hash__":165948},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162901,"toc":165925},[162902,162905,162909,162912,162915,163019,163022,163026,163029,163109,163112,163116,163119,163179,163182,163218,163221,163236,163240,163313,163316,163371,163374,163444,163447,163531,163541,163599,163603,163648,163651,163677,163680,163786,163790,163793,163835,163838,163902,163905,163909,163912,163973,163976,164006,164009,164047,164051,164054,164063,164066,164190,164193,164234,164238,164241,164252,164292,164295,164310,164315,164318,164385,164388,164478,164482,164485,164533,164536,164563,164565,164595,164598,164618,164621,164652,164655,164688,164692,164695,164719,164722,164746,164749,164773,164777,164780,164910,164913,164993,164996,165071,165075,165078,165128,165131,165173,165176,165200,165202,165226,165229,165284,165287,165353,165357,165360,165363,165401,165404,165457,165460,165506,165509,165542,165545,165549,165868,165872,165901,165905,165922],[29,162903,162899],{"id":162904},"_6-数据容器",[33,162906,162908],{"id":162907},"_61-什么是数据容器","6.1 什么是数据容器",[38,162910,162911],{},"数据容器用于一次保存多个数据。",[38,162913,162914],{},"常见容器：",[240,162916,162917,162934],{},[243,162918,162919],{},[246,162920,162921,162923,162926,162929,162932],{},[249,162922,25752],{},[249,162924,162925],{},"是否有序",[249,162927,162928],{},"是否可变",[249,162930,162931],{},"是否允许重复",[249,162933,27473],{},[287,162935,162936,162954,162970,162985,163002],{},[246,162937,162938,162941,162944,162947,162950],{},[292,162939,162940],{},"list列表",[292,162942,162943],{},"有序",[292,162945,162946],{},"可变",[292,162948,162949],{},"允许",[292,162951,162952],{},[89,162953,155232],{},[246,162955,162956,162959,162961,162964,162966],{},[292,162957,162958],{},"tuple元组",[292,162960,162943],{},[292,162962,162963],{},"不可变",[292,162965,162949],{},[292,162967,162968],{},[89,162969,155245],{},[246,162971,162972,162975,162977,162979,162981],{},[292,162973,162974],{},"str字符串",[292,162976,162943],{},[292,162978,162963],{},[292,162980,162949],{},[292,162982,162983],{},[89,162984,155855],{},[246,162986,162987,162990,162993,162995,162998],{},[292,162988,162989],{},"set集合",[292,162991,162992],{},"无序",[292,162994,162946],{},[292,162996,162997],{},"不允许",[292,162999,163000],{},[89,163001,155270],{},[246,163003,163004,163007,163009,163011,163014],{},[292,163005,163006],{},"dict字典",[292,163008,162943],{},[292,163010,162946],{},[292,163012,163013],{},"key不允许重复",[292,163015,163016],{},[89,163017,163018],{},"{\"name\": \"小明\"}",[38,163020,163021],{},"Python 3.7 之后，字典保持插入顺序。",[33,163023,163025],{"id":163024},"_62-列表list","6.2 列表list",[38,163027,163028],{},"列表用于保存一组有顺序的数据。",[83,163030,163032],{"className":30359,"code":163031,"language":30361,"meta":10,"style":10},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[89,163033,163034,163054,163079,163100],{"__ignoreMap":10},[92,163035,163036,163038,163040,163042,163044,163046,163048,163050,163052],{"class":94,"line":95},[92,163037,160355],{"class":102},[92,163039,148],{"class":98},[92,163041,52206],{"class":102},[92,163043,149863],{"class":207},[92,163045,12415],{"class":102},[92,163047,150911],{"class":207},[92,163049,12415],{"class":102},[92,163051,159706],{"class":207},[92,163053,33227],{"class":102},[92,163055,163056,163059,163061,163063,163065,163067,163069,163071,163073,163075,163077],{"class":94,"line":11},[92,163057,163058],{"class":102},"numbers ",[92,163060,148],{"class":98},[92,163062,52206],{"class":102},[92,163064,320],{"class":151},[92,163066,12415],{"class":102},[92,163068,180],{"class":151},[92,163070,12415],{"class":102},[92,163072,174],{"class":151},[92,163074,12415],{"class":102},[92,163076,396],{"class":151},[92,163078,33227],{"class":102},[92,163080,163081,163084,163086,163088,163090,163092,163094,163096,163098],{"class":94,"line":1158},[92,163082,163083],{"class":102},"mixed ",[92,163085,148],{"class":98},[92,163087,52206],{"class":102},[92,163089,149863],{"class":207},[92,163091,12415],{"class":102},[92,163093,753],{"class":151},[92,163095,12415],{"class":102},[92,163097,31457],{"class":151},[92,163099,33227],{"class":102},[92,163101,163102,163105,163107],{"class":94,"line":1173},[92,163103,163104],{"class":102},"empty ",[92,163106,148],{"class":98},[92,163108,51818],{"class":102},[38,163110,163111],{},"推荐一个列表中保存同类数据，代码更清晰。",[33,163113,163115],{"id":163114},"_63-列表索引","6.3 列表索引",[38,163117,163118],{},"正向索引从 0 开始：",[83,163120,163122],{"className":30359,"code":163121,"language":30361,"meta":10,"style":10},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[89,163123,163124,163144,163148,163159,163169],{"__ignoreMap":10},[92,163125,163126,163128,163130,163132,163134,163136,163138,163140,163142],{"class":94,"line":95},[92,163127,160355],{"class":102},[92,163129,148],{"class":98},[92,163131,52206],{"class":102},[92,163133,149863],{"class":207},[92,163135,12415],{"class":102},[92,163137,150911],{"class":207},[92,163139,12415],{"class":102},[92,163141,159706],{"class":207},[92,163143,33227],{"class":102},[92,163145,163146],{"class":94,"line":11},[92,163147,2379],{"emptyLinePlaceholder":17},[92,163149,163150,163152,163155,163157],{"class":94,"line":1158},[92,163151,30396],{"class":151},[92,163153,163154],{"class":102},"(names[",[92,163156,294],{"class":151},[92,163158,4636],{"class":102},[92,163160,163161,163163,163165,163167],{"class":94,"line":1173},[92,163162,30396],{"class":151},[92,163164,163154],{"class":102},[92,163166,320],{"class":151},[92,163168,4636],{"class":102},[92,163170,163171,163173,163175,163177],{"class":94,"line":1179},[92,163172,30396],{"class":151},[92,163174,163154],{"class":102},[92,163176,180],{"class":151},[92,163178,4636],{"class":102},[38,163180,163181],{},"反向索引从 -1 开始：",[83,163183,163185],{"className":30359,"code":163184,"language":30361,"meta":10,"style":10},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[89,163186,163187,163203],{"__ignoreMap":10},[92,163188,163189,163191,163193,163195,163197,163200],{"class":94,"line":95},[92,163190,30396],{"class":151},[92,163192,163154],{"class":102},[92,163194,635],{"class":98},[92,163196,320],{"class":151},[92,163198,163199],{"class":102},"])  ",[92,163201,163202],{"class":161},"# 小刚\n",[92,163204,163205,163207,163209,163211,163213,163215],{"class":94,"line":11},[92,163206,30396],{"class":151},[92,163208,163154],{"class":102},[92,163210,635],{"class":98},[92,163212,180],{"class":151},[92,163214,163199],{"class":102},[92,163216,163217],{"class":161},"# 小红\n",[38,163219,163220],{},"索引越界会报错：",[83,163222,163224],{"className":30359,"code":163223,"language":30361,"meta":10,"style":10},"print(names[3])\n",[89,163225,163226],{"__ignoreMap":10},[92,163227,163228,163230,163232,163234],{"class":94,"line":95},[92,163229,30396],{"class":151},[92,163231,163154],{"class":102},[92,163233,174],{"class":151},[92,163235,4636],{"class":102},[33,163237,163239],{"id":163238},"_64-列表常用方法","6.4 列表常用方法",[83,163241,163243],{"className":30359,"code":163242,"language":30361,"meta":10,"style":10},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[89,163244,163245,163261,163265,163274,163288,163302,163306],{"__ignoreMap":10},[92,163246,163247,163249,163251,163253,163255,163257,163259],{"class":94,"line":95},[92,163248,160355],{"class":102},[92,163250,148],{"class":98},[92,163252,52206],{"class":102},[92,163254,149863],{"class":207},[92,163256,12415],{"class":102},[92,163258,150911],{"class":207},[92,163260,33227],{"class":102},[92,163262,163263],{"class":94,"line":11},[92,163264,2379],{"emptyLinePlaceholder":17},[92,163266,163267,163270,163272],{"class":94,"line":1158},[92,163268,163269],{"class":102},"names.append(",[92,163271,159706],{"class":207},[92,163273,109],{"class":102},[92,163275,163276,163279,163281,163283,163286],{"class":94,"line":1173},[92,163277,163278],{"class":102},"names.insert(",[92,163280,320],{"class":151},[92,163282,12415],{"class":102},[92,163284,163285],{"class":207},"\"小李\"",[92,163287,109],{"class":102},[92,163289,163290,163293,163295,163297,163300],{"class":94,"line":1179},[92,163291,163292],{"class":102},"names.extend([",[92,163294,8663],{"class":207},[92,163296,12415],{"class":102},[92,163298,163299],{"class":207},"\"小赵\"",[92,163301,4636],{"class":102},[92,163303,163304],{"class":94,"line":1193},[92,163305,2379],{"emptyLinePlaceholder":17},[92,163307,163308,163310],{"class":94,"line":1199},[92,163309,30396],{"class":151},[92,163311,163312],{"class":102},"(names)\n",[38,163314,163315],{},"删除元素：",[83,163317,163319],{"className":30359,"code":163318,"language":30361,"meta":10,"style":10},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[89,163320,163321,163330,163340,163354,163366],{"__ignoreMap":10},[92,163322,163323,163326,163328],{"class":94,"line":95},[92,163324,163325],{"class":102},"names.remove(",[92,163327,150911],{"class":207},[92,163329,109],{"class":102},[92,163331,163332,163335,163337],{"class":94,"line":11},[92,163333,163334],{"class":102},"last ",[92,163336,148],{"class":98},[92,163338,163339],{"class":102}," names.pop()\n",[92,163341,163342,163345,163347,163350,163352],{"class":94,"line":1158},[92,163343,163344],{"class":102},"first ",[92,163346,148],{"class":98},[92,163348,163349],{"class":102}," names.pop(",[92,163351,294],{"class":151},[92,163353,109],{"class":102},[92,163355,163356,163359,163362,163364],{"class":94,"line":1173},[92,163357,163358],{"class":98},"del",[92,163360,163361],{"class":102}," names[",[92,163363,294],{"class":151},[92,163365,33227],{"class":102},[92,163367,163368],{"class":94,"line":1179},[92,163369,163370],{"class":102},"names.clear()\n",[38,163372,163373],{},"查询和统计：",[83,163375,163377],{"className":30359,"code":163376,"language":30361,"meta":10,"style":10},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[89,163378,163379,163407,163411,163422,163433],{"__ignoreMap":10},[92,163380,163381,163383,163385,163387,163389,163391,163393,163395,163397,163399,163401,163403,163405],{"class":94,"line":95},[92,163382,163058],{"class":102},[92,163384,148],{"class":98},[92,163386,52206],{"class":102},[92,163388,320],{"class":151},[92,163390,12415],{"class":102},[92,163392,180],{"class":151},[92,163394,12415],{"class":102},[92,163396,174],{"class":151},[92,163398,12415],{"class":102},[92,163400,180],{"class":151},[92,163402,12415],{"class":102},[92,163404,396],{"class":151},[92,163406,33227],{"class":102},[92,163408,163409],{"class":94,"line":11},[92,163410,2379],{"emptyLinePlaceholder":17},[92,163412,163413,163415,163418,163420],{"class":94,"line":1158},[92,163414,30396],{"class":151},[92,163416,163417],{"class":102},"(numbers.index(",[92,163419,174],{"class":151},[92,163421,30478],{"class":102},[92,163423,163424,163426,163429,163431],{"class":94,"line":1173},[92,163425,30396],{"class":151},[92,163427,163428],{"class":102},"(numbers.count(",[92,163430,180],{"class":151},[92,163432,30478],{"class":102},[92,163434,163435,163437,163439,163441],{"class":94,"line":1179},[92,163436,30396],{"class":151},[92,163438,103],{"class":102},[92,163440,7338],{"class":151},[92,163442,163443],{"class":102},"(numbers))\n",[38,163445,163446],{},"排序：",[83,163448,163450],{"className":30359,"code":163449,"language":30361,"meta":10,"style":10},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[89,163451,163452,163476,163480,163485,163492,163496,163510,163516,163520,163525],{"__ignoreMap":10},[92,163453,163454,163456,163458,163460,163462,163464,163466,163468,163470,163472,163474],{"class":94,"line":95},[92,163455,163058],{"class":102},[92,163457,148],{"class":98},[92,163459,52206],{"class":102},[92,163461,174],{"class":151},[92,163463,12415],{"class":102},[92,163465,320],{"class":151},[92,163467,12415],{"class":102},[92,163469,422],{"class":151},[92,163471,12415],{"class":102},[92,163473,180],{"class":151},[92,163475,33227],{"class":102},[92,163477,163478],{"class":94,"line":11},[92,163479,2379],{"emptyLinePlaceholder":17},[92,163481,163482],{"class":94,"line":1158},[92,163483,163484],{"class":102},"numbers.sort()\n",[92,163486,163487,163489],{"class":94,"line":1173},[92,163488,30396],{"class":151},[92,163490,163491],{"class":102},"(numbers)\n",[92,163493,163494],{"class":94,"line":1179},[92,163495,2379],{"emptyLinePlaceholder":17},[92,163497,163498,163501,163504,163506,163508],{"class":94,"line":1193},[92,163499,163500],{"class":102},"numbers.sort(",[92,163502,163503],{"class":5196},"reverse",[92,163505,148],{"class":98},[92,163507,31457],{"class":151},[92,163509,109],{"class":102},[92,163511,163512,163514],{"class":94,"line":1199},[92,163513,30396],{"class":151},[92,163515,163491],{"class":102},[92,163517,163518],{"class":94,"line":1290},[92,163519,2379],{"emptyLinePlaceholder":17},[92,163521,163522],{"class":94,"line":1296},[92,163523,163524],{"class":102},"numbers.reverse()\n",[92,163526,163527,163529],{"class":94,"line":1308},[92,163528,30396],{"class":151},[92,163530,163491],{"class":102},[38,163532,163533,163536,163537,163540],{},[89,163534,163535],{},"sort()"," 会修改原列表，",[89,163538,163539],{},"sorted()"," 返回新列表。",[83,163542,163544],{"className":30359,"code":163543,"language":30361,"meta":10,"style":10},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[89,163545,163546,163570,163582,163586,163592],{"__ignoreMap":10},[92,163547,163548,163550,163552,163554,163556,163558,163560,163562,163564,163566,163568],{"class":94,"line":95},[92,163549,163058],{"class":102},[92,163551,148],{"class":98},[92,163553,52206],{"class":102},[92,163555,174],{"class":151},[92,163557,12415],{"class":102},[92,163559,320],{"class":151},[92,163561,12415],{"class":102},[92,163563,422],{"class":151},[92,163565,12415],{"class":102},[92,163567,180],{"class":151},[92,163569,33227],{"class":102},[92,163571,163572,163575,163577,163580],{"class":94,"line":11},[92,163573,163574],{"class":102},"new_numbers ",[92,163576,148],{"class":98},[92,163578,163579],{"class":151}," sorted",[92,163581,163491],{"class":102},[92,163583,163584],{"class":94,"line":1158},[92,163585,2379],{"emptyLinePlaceholder":17},[92,163587,163588,163590],{"class":94,"line":1173},[92,163589,30396],{"class":151},[92,163591,163491],{"class":102},[92,163593,163594,163596],{"class":94,"line":1179},[92,163595,30396],{"class":151},[92,163597,163598],{"class":102},"(new_numbers)\n",[33,163600,163602],{"id":163601},"_65-列表遍历","6.5 列表遍历",[83,163604,163606],{"className":30359,"code":163605,"language":30361,"meta":10,"style":10},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[89,163607,163608,163628,163632,163642],{"__ignoreMap":10},[92,163609,163610,163612,163614,163616,163618,163620,163622,163624,163626],{"class":94,"line":95},[92,163611,160355],{"class":102},[92,163613,148],{"class":98},[92,163615,52206],{"class":102},[92,163617,149863],{"class":207},[92,163619,12415],{"class":102},[92,163621,150911],{"class":207},[92,163623,12415],{"class":102},[92,163625,159706],{"class":207},[92,163627,33227],{"class":102},[92,163629,163630],{"class":94,"line":11},[92,163631,2379],{"emptyLinePlaceholder":17},[92,163633,163634,163636,163638,163640],{"class":94,"line":1158},[92,163635,3004],{"class":98},[92,163637,160391],{"class":102},[92,163639,26024],{"class":98},[92,163641,160396],{"class":102},[92,163643,163644,163646],{"class":94,"line":1173},[92,163645,31280],{"class":151},[92,163647,150635],{"class":102},[38,163649,163650],{},"需要索引时：",[83,163652,163654],{"className":30359,"code":163653,"language":30361,"meta":10,"style":10},"for index, name in enumerate(names):\n    print(index, name)\n",[89,163655,163656,163670],{"__ignoreMap":10},[92,163657,163658,163660,163663,163665,163667],{"class":94,"line":95},[92,163659,3004],{"class":98},[92,163661,163662],{"class":102}," index, name ",[92,163664,26024],{"class":98},[92,163666,31587],{"class":151},[92,163668,163669],{"class":102},"(names):\n",[92,163671,163672,163674],{"class":94,"line":11},[92,163673,31280],{"class":151},[92,163675,163676],{"class":102},"(index, name)\n",[38,163678,163679],{},"统计总分：",[83,163681,163683],{"className":30359,"code":163682,"language":30361,"meta":10,"style":10},"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",[89,163684,163685,163710,163718,163722,163733,163741,163745,163762],{"__ignoreMap":10},[92,163686,163687,163690,163692,163694,163696,163698,163700,163702,163704,163706,163708],{"class":94,"line":95},[92,163688,163689],{"class":102},"scores ",[92,163691,148],{"class":98},[92,163693,52206],{"class":102},[92,163695,965],{"class":151},[92,163697,12415],{"class":102},[92,163699,839],{"class":151},[92,163701,12415],{"class":102},[92,163703,357],{"class":151},[92,163705,12415],{"class":102},[92,163707,664],{"class":151},[92,163709,33227],{"class":102},[92,163711,163712,163714,163716],{"class":94,"line":11},[92,163713,157235],{"class":102},[92,163715,148],{"class":98},[92,163717,47314],{"class":151},[92,163719,163720],{"class":94,"line":1158},[92,163721,2379],{"emptyLinePlaceholder":17},[92,163723,163724,163726,163728,163730],{"class":94,"line":1173},[92,163725,3004],{"class":98},[92,163727,157758],{"class":102},[92,163729,26024],{"class":98},[92,163731,163732],{"class":102}," scores:\n",[92,163734,163735,163737,163739],{"class":94,"line":1179},[92,163736,159282],{"class":102},[92,163738,9457],{"class":98},[92,163740,1558],{"class":102},[92,163742,163743],{"class":94,"line":1193},[92,163744,2379],{"emptyLinePlaceholder":17},[92,163746,163747,163750,163752,163755,163757,163759],{"class":94,"line":1199},[92,163748,163749],{"class":102},"avg ",[92,163751,148],{"class":98},[92,163753,163754],{"class":102}," total ",[92,163756,687],{"class":98},[92,163758,7311],{"class":151},[92,163760,163761],{"class":102},"(scores)\n",[92,163763,163764,163766,163768,163770,163773,163775,163778,163780,163782,163784],{"class":94,"line":1290},[92,163765,30396],{"class":151},[92,163767,103],{"class":102},[92,163769,155],{"class":98},[92,163771,163772],{"class":207},"\"平均分:",[92,163774,999],{"class":151},[92,163776,163777],{"class":102},"avg",[92,163779,157134],{"class":98},[92,163781,1049],{"class":151},[92,163783,354],{"class":207},[92,163785,109],{"class":102},[33,163787,163789],{"id":163788},"_66-元组tuple","6.6 元组tuple",[38,163791,163792],{},"元组和列表类似，但不可修改。",[83,163794,163796],{"className":30359,"code":163795,"language":30361,"meta":10,"style":10},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[89,163797,163798,163815],{"__ignoreMap":10},[92,163799,163800,163803,163805,163807,163809,163811,163813],{"class":94,"line":95},[92,163801,163802],{"class":102},"point ",[92,163804,148],{"class":98},[92,163806,1637],{"class":102},[92,163808,549],{"class":151},[92,163810,12415],{"class":102},[92,163812,803],{"class":151},[92,163814,109],{"class":102},[92,163816,163817,163819,163821,163823,163825,163827,163829,163831,163833],{"class":94,"line":11},[92,163818,116289],{"class":102},[92,163820,148],{"class":98},[92,163822,1637],{"class":102},[92,163824,149863],{"class":207},[92,163826,12415],{"class":102},[92,163828,753],{"class":151},[92,163830,12415],{"class":102},[92,163832,69249],{"class":207},[92,163834,109],{"class":102},[38,163836,163837],{},"单元素元组必须加逗号：",[83,163839,163841],{"className":30359,"code":163840,"language":30361,"meta":10,"style":10},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[89,163842,163843,163857,163870,163874,163888],{"__ignoreMap":10},[92,163844,163845,163848,163850,163852,163854],{"class":94,"line":95},[92,163846,163847],{"class":102},"t1 ",[92,163849,148],{"class":98},[92,163851,1637],{"class":102},[92,163853,549],{"class":151},[92,163855,163856],{"class":102},",)\n",[92,163858,163859,163862,163864,163866,163868],{"class":94,"line":11},[92,163860,163861],{"class":102},"t2 ",[92,163863,148],{"class":98},[92,163865,1637],{"class":102},[92,163867,549],{"class":151},[92,163869,109],{"class":102},[92,163871,163872],{"class":94,"line":1158},[92,163873,2379],{"emptyLinePlaceholder":17},[92,163875,163876,163878,163880,163882,163885],{"class":94,"line":1173},[92,163877,30396],{"class":151},[92,163879,103],{"class":102},[92,163881,103082],{"class":151},[92,163883,163884],{"class":102},"(t1))  ",[92,163886,163887],{"class":161},"# tuple\n",[92,163889,163890,163892,163894,163896,163899],{"class":94,"line":1179},[92,163891,30396],{"class":151},[92,163893,103],{"class":102},[92,163895,103082],{"class":151},[92,163897,163898],{"class":102},"(t2))  ",[92,163900,163901],{"class":161},"# int\n",[38,163903,163904],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[33,163906,163908],{"id":163907},"_67-字符串str","6.7 字符串str",[38,163910,163911],{},"字符串也是序列，可以索引、切片和遍历。",[83,163913,163915],{"className":30359,"code":163914,"language":30361,"meta":10,"style":10},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[89,163916,163917,163925,163929,163940,163952,163956,163967],{"__ignoreMap":10},[92,163918,163919,163921,163923],{"class":94,"line":95},[92,163920,156419],{"class":102},[92,163922,148],{"class":98},[92,163924,159656],{"class":207},[92,163926,163927],{"class":94,"line":11},[92,163928,2379],{"emptyLinePlaceholder":17},[92,163930,163931,163933,163936,163938],{"class":94,"line":1158},[92,163932,30396],{"class":151},[92,163934,163935],{"class":102},"(text[",[92,163937,294],{"class":151},[92,163939,4636],{"class":102},[92,163941,163942,163944,163946,163948,163950],{"class":94,"line":1173},[92,163943,30396],{"class":151},[92,163945,163935],{"class":102},[92,163947,635],{"class":98},[92,163949,320],{"class":151},[92,163951,4636],{"class":102},[92,163953,163954],{"class":94,"line":1179},[92,163955,2379],{"emptyLinePlaceholder":17},[92,163957,163958,163960,163962,163964],{"class":94,"line":1193},[92,163959,3004],{"class":98},[92,163961,159667],{"class":102},[92,163963,26024],{"class":98},[92,163965,163966],{"class":102}," text:\n",[92,163968,163969,163971],{"class":94,"line":1199},[92,163970,31280],{"class":151},[92,163972,159678],{"class":102},[38,163974,163975],{},"字符串不可变：",[83,163977,163979],{"className":30359,"code":163978,"language":30361,"meta":10,"style":10},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[89,163980,163981,163989],{"__ignoreMap":10},[92,163982,163983,163985,163987],{"class":94,"line":95},[92,163984,156419],{"class":102},[92,163986,148],{"class":98},[92,163988,159656],{"class":207},[92,163990,163991,163994,163996,163998,164000,164003],{"class":94,"line":11},[92,163992,163993],{"class":102},"text[",[92,163995,294],{"class":151},[92,163997,4422],{"class":102},[92,163999,148],{"class":98},[92,164001,164002],{"class":207}," \"P\"",[92,164004,164005],{"class":161},"  # 报错\n",[38,164007,164008],{},"如果要得到新字符串：",[83,164010,164012],{"className":30359,"code":164011,"language":30361,"meta":10,"style":10},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[89,164013,164014,164022,164040],{"__ignoreMap":10},[92,164015,164016,164018,164020],{"class":94,"line":95},[92,164017,156419],{"class":102},[92,164019,148],{"class":98},[92,164021,159656],{"class":207},[92,164023,164024,164026,164028,164030,164032,164035,164037],{"class":94,"line":11},[92,164025,156419],{"class":102},[92,164027,148],{"class":98},[92,164029,164002],{"class":207},[92,164031,45547],{"class":98},[92,164033,164034],{"class":102}," text[",[92,164036,320],{"class":151},[92,164038,164039],{"class":102},":]\n",[92,164041,164042,164044],{"class":94,"line":1158},[92,164043,30396],{"class":151},[92,164045,164046],{"class":102},"(text)\n",[33,164048,164050],{"id":164049},"_68-切片","6.8 切片",[38,164052,164053],{},"切片用于从序列中取一部分。",[83,164055,164057],{"className":30359,"code":164056,"language":30361,"meta":10,"style":10},"序列[开始:结束:步长]\n",[89,164058,164059],{"__ignoreMap":10},[92,164060,164061],{"class":94,"line":95},[92,164062,164056],{"class":102},[38,164064,164065],{},"结束位置不包含。",[83,164067,164069],{"className":30359,"code":164068,"language":30361,"meta":10,"style":10},"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",[89,164070,164071,164108,164112,164131,164146,164160,164174],{"__ignoreMap":10},[92,164072,164073,164076,164078,164080,164082,164084,164086,164088,164090,164092,164094,164096,164098,164100,164102,164104,164106],{"class":94,"line":95},[92,164074,164075],{"class":102},"nums ",[92,164077,148],{"class":98},[92,164079,52206],{"class":102},[92,164081,294],{"class":151},[92,164083,12415],{"class":102},[92,164085,320],{"class":151},[92,164087,12415],{"class":102},[92,164089,180],{"class":151},[92,164091,12415],{"class":102},[92,164093,174],{"class":151},[92,164095,12415],{"class":102},[92,164097,396],{"class":151},[92,164099,12415],{"class":102},[92,164101,422],{"class":151},[92,164103,12415],{"class":102},[92,164105,447],{"class":151},[92,164107,33227],{"class":102},[92,164109,164110],{"class":94,"line":11},[92,164111,2379],{"emptyLinePlaceholder":17},[92,164113,164114,164116,164119,164121,164123,164125,164128],{"class":94,"line":1158},[92,164115,30396],{"class":151},[92,164117,164118],{"class":102},"(nums[",[92,164120,320],{"class":151},[92,164122,962],{"class":102},[92,164124,396],{"class":151},[92,164126,164127],{"class":102},"])    ",[92,164129,164130],{"class":161},"# [1, 2, 3]\n",[92,164132,164133,164135,164138,164140,164143],{"class":94,"line":1173},[92,164134,30396],{"class":151},[92,164136,164137],{"class":102},"(nums[:",[92,164139,174],{"class":151},[92,164141,164142],{"class":102},"])     ",[92,164144,164145],{"class":161},"# [0, 1, 2]\n",[92,164147,164148,164150,164152,164154,164157],{"class":94,"line":1179},[92,164149,30396],{"class":151},[92,164151,164118],{"class":102},[92,164153,174],{"class":151},[92,164155,164156],{"class":102},":])     ",[92,164158,164159],{"class":161},"# [3, 4, 5, 6]\n",[92,164161,164162,164164,164167,164169,164171],{"class":94,"line":1193},[92,164163,30396],{"class":151},[92,164165,164166],{"class":102},"(nums[::",[92,164168,180],{"class":151},[92,164170,164127],{"class":102},[92,164172,164173],{"class":161},"# [0, 2, 4, 6]\n",[92,164175,164176,164178,164180,164182,164184,164187],{"class":94,"line":1199},[92,164177,30396],{"class":151},[92,164179,164166],{"class":102},[92,164181,635],{"class":98},[92,164183,320],{"class":151},[92,164185,164186],{"class":102},"])   ",[92,164188,164189],{"class":161},"# 反转\n",[38,164191,164192],{},"字符串切片：",[83,164194,164196],{"className":30359,"code":164195,"language":30361,"meta":10,"style":10},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[89,164197,164198,164207,164221],{"__ignoreMap":10},[92,164199,164200,164202,164204],{"class":94,"line":95},[92,164201,156419],{"class":102},[92,164203,148],{"class":98},[92,164205,164206],{"class":207}," \"abcdef\"\n",[92,164208,164209,164211,164213,164215,164217,164219],{"class":94,"line":11},[92,164210,30396],{"class":151},[92,164212,163935],{"class":102},[92,164214,320],{"class":151},[92,164216,962],{"class":102},[92,164218,396],{"class":151},[92,164220,4636],{"class":102},[92,164222,164223,164225,164228,164230,164232],{"class":94,"line":1158},[92,164224,30396],{"class":151},[92,164226,164227],{"class":102},"(text[::",[92,164229,635],{"class":98},[92,164231,320],{"class":151},[92,164233,4636],{"class":102},[33,164235,164237],{"id":164236},"_69-集合set","6.9 集合set",[38,164239,164240],{},"集合特点：",[46,164242,164243,164246,164249],{},[49,164244,164245],{},"无序。",[49,164247,164248],{},"元素不重复。",[49,164250,164251],{},"可以做交集、并集、差集。",[83,164253,164255],{"className":30359,"code":164254,"language":30361,"meta":10,"style":10},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[89,164256,164257,164285],{"__ignoreMap":10},[92,164258,164259,164261,164263,164265,164267,164269,164271,164273,164275,164277,164279,164281,164283],{"class":94,"line":95},[92,164260,164075],{"class":102},[92,164262,148],{"class":98},[92,164264,4427],{"class":102},[92,164266,320],{"class":151},[92,164268,12415],{"class":102},[92,164270,180],{"class":151},[92,164272,12415],{"class":102},[92,164274,174],{"class":151},[92,164276,12415],{"class":102},[92,164278,174],{"class":151},[92,164280,12415],{"class":102},[92,164282,396],{"class":151},[92,164284,1544],{"class":102},[92,164286,164287,164289],{"class":94,"line":11},[92,164288,30396],{"class":151},[92,164290,164291],{"class":102},"(nums)\n",[38,164293,164294],{},"创建空集合：",[83,164296,164298],{"className":30359,"code":164297,"language":30361,"meta":10,"style":10},"s = set()\n",[89,164299,164300],{"__ignoreMap":10},[92,164301,164302,164304,164306,164308],{"class":94,"line":95},[92,164303,10559],{"class":102},[92,164305,148],{"class":98},[92,164307,119697],{"class":151},[92,164309,1955],{"class":102},[38,164311,9005,164312,164314],{},[89,164313,32440],{}," 是空字典，不是空集合。",[38,164316,164317],{},"集合常用操作：",[83,164319,164321],{"className":30359,"code":164320,"language":30361,"meta":10,"style":10},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[89,164322,164323,164343,164347,164356,164365,164374],{"__ignoreMap":10},[92,164324,164325,164327,164329,164331,164333,164335,164337,164339,164341],{"class":94,"line":95},[92,164326,10559],{"class":102},[92,164328,148],{"class":98},[92,164330,4427],{"class":102},[92,164332,320],{"class":151},[92,164334,12415],{"class":102},[92,164336,180],{"class":151},[92,164338,12415],{"class":102},[92,164340,174],{"class":151},[92,164342,1544],{"class":102},[92,164344,164345],{"class":94,"line":11},[92,164346,2379],{"emptyLinePlaceholder":17},[92,164348,164349,164352,164354],{"class":94,"line":1158},[92,164350,164351],{"class":102},"s.add(",[92,164353,396],{"class":151},[92,164355,109],{"class":102},[92,164357,164358,164361,164363],{"class":94,"line":1173},[92,164359,164360],{"class":102},"s.remove(",[92,164362,180],{"class":151},[92,164364,109],{"class":102},[92,164366,164367,164370,164372],{"class":94,"line":1179},[92,164368,164369],{"class":102},"s.discard(",[92,164371,549],{"class":151},[92,164373,109],{"class":102},[92,164375,164376,164378,164380,164382],{"class":94,"line":1193},[92,164377,30396],{"class":151},[92,164379,103],{"class":102},[92,164381,7338],{"class":151},[92,164383,164384],{"class":102},"(s))\n",[38,164386,164387],{},"交并差：",[83,164389,164391],{"className":30359,"code":164390,"language":30361,"meta":10,"style":10},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[89,164392,164393,164413,164433,164437,164452,164465],{"__ignoreMap":10},[92,164394,164395,164397,164399,164401,164403,164405,164407,164409,164411],{"class":94,"line":95},[92,164396,10899],{"class":102},[92,164398,148],{"class":98},[92,164400,4427],{"class":102},[92,164402,320],{"class":151},[92,164404,12415],{"class":102},[92,164406,180],{"class":151},[92,164408,12415],{"class":102},[92,164410,174],{"class":151},[92,164412,1544],{"class":102},[92,164414,164415,164417,164419,164421,164423,164425,164427,164429,164431],{"class":94,"line":11},[92,164416,10925],{"class":102},[92,164418,148],{"class":98},[92,164420,4427],{"class":102},[92,164422,174],{"class":151},[92,164424,12415],{"class":102},[92,164426,396],{"class":151},[92,164428,12415],{"class":102},[92,164430,422],{"class":151},[92,164432,1544],{"class":102},[92,164434,164435],{"class":94,"line":1158},[92,164436,2379],{"emptyLinePlaceholder":17},[92,164438,164439,164441,164444,164446,164449],{"class":94,"line":1173},[92,164440,30396],{"class":151},[92,164442,164443],{"class":102},"(a ",[92,164445,456],{"class":98},[92,164447,164448],{"class":102}," b)  ",[92,164450,164451],{"class":161},"# 交集\n",[92,164453,164454,164456,164458,164460,164462],{"class":94,"line":1179},[92,164455,30396],{"class":151},[92,164457,164443],{"class":102},[92,164459,1024],{"class":98},[92,164461,164448],{"class":102},[92,164463,164464],{"class":161},"# 并集\n",[92,164466,164467,164469,164471,164473,164475],{"class":94,"line":1193},[92,164468,30396],{"class":151},[92,164470,164443],{"class":102},[92,164472,635],{"class":98},[92,164474,164448],{"class":102},[92,164476,164477],{"class":161},"# 差集\n",[33,164479,164481],{"id":164480},"_610-字典dict","6.10 字典dict",[38,164483,164484],{},"字典通过 key-value 保存数据。",[83,164486,164488],{"className":30359,"code":164487,"language":30361,"meta":10,"style":10},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[89,164489,164490,164498,164508,164519,164529],{"__ignoreMap":10},[92,164491,164492,164494,164496],{"class":94,"line":95},[92,164493,149456],{"class":102},[92,164495,148],{"class":98},[92,164497,15552],{"class":102},[92,164499,164500,164502,164504,164506],{"class":94,"line":11},[92,164501,146995],{"class":207},[92,164503,51417],{"class":102},[92,164505,149863],{"class":207},[92,164507,31447],{"class":102},[92,164509,164510,164513,164515,164517],{"class":94,"line":1158},[92,164511,164512],{"class":207},"    \"age\"",[92,164514,51417],{"class":102},[92,164516,753],{"class":151},[92,164518,31447],{"class":102},[92,164520,164521,164524,164526],{"class":94,"line":1173},[92,164522,164523],{"class":207},"    \"score\"",[92,164525,51417],{"class":102},[92,164527,164528],{"class":151},"95\n",[92,164530,164531],{"class":94,"line":1179},[92,164532,1544],{"class":102},[38,164534,164535],{},"获取值：",[83,164537,164539],{"className":30359,"code":164538,"language":30361,"meta":10,"style":10},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[89,164540,164541,164552],{"__ignoreMap":10},[92,164542,164543,164545,164548,164550],{"class":94,"line":95},[92,164544,30396],{"class":151},[92,164546,164547],{"class":102},"(student[",[92,164549,62659],{"class":207},[92,164551,4636],{"class":102},[92,164553,164554,164556,164559,164561],{"class":94,"line":11},[92,164555,30396],{"class":151},[92,164557,164558],{"class":102},"(student.get(",[92,164560,62659],{"class":207},[92,164562,30478],{"class":102},[38,164564,15368],{},[83,164566,164568],{"className":30359,"code":164567,"language":30361,"meta":10,"style":10},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[89,164569,164570,164583],{"__ignoreMap":10},[92,164571,164572,164574,164577,164580],{"class":94,"line":95},[92,164573,152834],{"class":102},[92,164575,164576],{"class":207},"\"address\"",[92,164578,164579],{"class":102},"]     ",[92,164581,164582],{"class":161},"# key不存在会报错\n",[92,164584,164585,164588,164590,164592],{"class":94,"line":11},[92,164586,164587],{"class":102},"student.get(",[92,164589,164576],{"class":207},[92,164591,13694],{"class":102},[92,164593,164594],{"class":161},"# key不存在返回None\n",[38,164596,164597],{},"设置默认值：",[83,164599,164601],{"className":30359,"code":164600,"language":30361,"meta":10,"style":10},"print(student.get(\"address\", \"未知\"))\n",[89,164602,164603],{"__ignoreMap":10},[92,164604,164605,164607,164609,164611,164613,164616],{"class":94,"line":95},[92,164606,30396],{"class":151},[92,164608,164558],{"class":102},[92,164610,164576],{"class":207},[92,164612,12415],{"class":102},[92,164614,164615],{"class":207},"\"未知\"",[92,164617,30478],{"class":102},[38,164619,164620],{},"新增和修改：",[83,164622,164624],{"className":30359,"code":164623,"language":30361,"meta":10,"style":10},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[89,164625,164626,164639],{"__ignoreMap":10},[92,164627,164628,164630,164632,164634,164636],{"class":94,"line":95},[92,164629,152834],{"class":102},[92,164631,69104],{"class":207},[92,164633,4422],{"class":102},[92,164635,148],{"class":98},[92,164637,164638],{"class":151}," 19\n",[92,164640,164641,164643,164645,164647,164649],{"class":94,"line":11},[92,164642,152834],{"class":102},[92,164644,164576],{"class":207},[92,164646,4422],{"class":102},[92,164648,148],{"class":98},[92,164650,164651],{"class":207}," \"北京\"\n",[38,164653,164654],{},"删除：",[83,164656,164658],{"className":30359,"code":164657,"language":30361,"meta":10,"style":10},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[89,164659,164660,164673,164683],{"__ignoreMap":10},[92,164661,164662,164664,164666,164669,164671],{"class":94,"line":95},[92,164663,155333],{"class":102},[92,164665,148],{"class":98},[92,164667,164668],{"class":102}," student.pop(",[92,164670,151447],{"class":207},[92,164672,109],{"class":102},[92,164674,164675,164677,164679,164681],{"class":94,"line":11},[92,164676,163358],{"class":98},[92,164678,152124],{"class":102},[92,164680,69104],{"class":207},[92,164682,33227],{"class":102},[92,164684,164685],{"class":94,"line":1158},[92,164686,164687],{"class":102},"student.clear()\n",[33,164689,164691],{"id":164690},"_611-字典遍历","6.11 字典遍历",[38,164693,164694],{},"遍历 key：",[83,164696,164698],{"className":30359,"code":164697,"language":30361,"meta":10,"style":10},"for key in student:\n    print(key, student[key])\n",[89,164699,164700,164712],{"__ignoreMap":10},[92,164701,164702,164704,164707,164709],{"class":94,"line":95},[92,164703,3004],{"class":98},[92,164705,164706],{"class":102}," key ",[92,164708,26024],{"class":98},[92,164710,164711],{"class":102}," student:\n",[92,164713,164714,164716],{"class":94,"line":11},[92,164715,31280],{"class":151},[92,164717,164718],{"class":102},"(key, student[key])\n",[38,164720,164721],{},"遍历 value：",[83,164723,164725],{"className":30359,"code":164724,"language":30361,"meta":10,"style":10},"for value in student.values():\n    print(value)\n",[89,164726,164727,164739],{"__ignoreMap":10},[92,164728,164729,164731,164734,164736],{"class":94,"line":95},[92,164730,3004],{"class":98},[92,164732,164733],{"class":102}," value ",[92,164735,26024],{"class":98},[92,164737,164738],{"class":102}," student.values():\n",[92,164740,164741,164743],{"class":94,"line":11},[92,164742,31280],{"class":151},[92,164744,164745],{"class":102},"(value)\n",[38,164747,164748],{},"遍历 key 和 value：",[83,164750,164752],{"className":30359,"code":164751,"language":30361,"meta":10,"style":10},"for key, value in student.items():\n    print(key, value)\n",[89,164753,164754,164766],{"__ignoreMap":10},[92,164755,164756,164758,164761,164763],{"class":94,"line":95},[92,164757,3004],{"class":98},[92,164759,164760],{"class":102}," key, value ",[92,164762,26024],{"class":98},[92,164764,164765],{"class":102}," student.items():\n",[92,164767,164768,164770],{"class":94,"line":11},[92,164769,31280],{"class":151},[92,164771,164772],{"class":102},"(key, value)\n",[33,164774,164776],{"id":164775},"_612-嵌套容器","6.12 嵌套容器",[38,164778,164779],{},"列表中保存字典，是项目中最常见的结构之一。",[83,164781,164783],{"className":30359,"code":164782,"language":30361,"meta":10,"style":10},"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",[89,164784,164785,164793,164821,164849,164877,164881,164885,164895],{"__ignoreMap":10},[92,164786,164787,164789,164791],{"class":94,"line":95},[92,164788,159691],{"class":102},[92,164790,148],{"class":98},[92,164792,55427],{"class":102},[92,164794,164795,164797,164799,164801,164803,164805,164807,164809,164811,164813,164815,164817,164819],{"class":94,"line":11},[92,164796,148360],{"class":102},[92,164798,62659],{"class":207},[92,164800,51417],{"class":102},[92,164802,149863],{"class":207},[92,164804,12415],{"class":102},[92,164806,69104],{"class":207},[92,164808,51417],{"class":102},[92,164810,753],{"class":151},[92,164812,12415],{"class":102},[92,164814,151447],{"class":207},[92,164816,51417],{"class":102},[92,164818,1092],{"class":151},[92,164820,4909],{"class":102},[92,164822,164823,164825,164827,164829,164831,164833,164835,164837,164839,164841,164843,164845,164847],{"class":94,"line":1158},[92,164824,148360],{"class":102},[92,164826,62659],{"class":207},[92,164828,51417],{"class":102},[92,164830,150911],{"class":207},[92,164832,12415],{"class":102},[92,164834,69104],{"class":207},[92,164836,51417],{"class":102},[92,164838,728],{"class":151},[92,164840,12415],{"class":102},[92,164842,151447],{"class":207},[92,164844,51417],{"class":102},[92,164846,914],{"class":151},[92,164848,4909],{"class":102},[92,164850,164851,164853,164855,164857,164859,164861,164863,164865,164867,164869,164871,164873,164875],{"class":94,"line":1173},[92,164852,148360],{"class":102},[92,164854,62659],{"class":207},[92,164856,51417],{"class":102},[92,164858,159706],{"class":207},[92,164860,12415],{"class":102},[92,164862,69104],{"class":207},[92,164864,51417],{"class":102},[92,164866,778],{"class":151},[92,164868,12415],{"class":102},[92,164870,151447],{"class":207},[92,164872,51417],{"class":102},[92,164874,509],{"class":151},[92,164876,4909],{"class":102},[92,164878,164879],{"class":94,"line":1179},[92,164880,33227],{"class":102},[92,164882,164883],{"class":94,"line":1193},[92,164884,2379],{"emptyLinePlaceholder":17},[92,164886,164887,164889,164891,164893],{"class":94,"line":1199},[92,164888,3004],{"class":98},[92,164890,152112],{"class":102},[92,164892,26024],{"class":98},[92,164894,152117],{"class":102},[92,164896,164897,164899,164901,164903,164906,164908],{"class":94,"line":1290},[92,164898,31280],{"class":151},[92,164900,164547],{"class":102},[92,164902,62659],{"class":207},[92,164904,164905],{"class":102},"], student[",[92,164907,151447],{"class":207},[92,164909,4636],{"class":102},[38,164911,164912],{},"统计平均分：",[83,164914,164916],{"className":30359,"code":164915,"language":30361,"meta":10,"style":10},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[89,164917,164918,164926,164930,164940,164952,164956,164971],{"__ignoreMap":10},[92,164919,164920,164922,164924],{"class":94,"line":95},[92,164921,157235],{"class":102},[92,164923,148],{"class":98},[92,164925,47314],{"class":151},[92,164927,164928],{"class":94,"line":11},[92,164929,2379],{"emptyLinePlaceholder":17},[92,164931,164932,164934,164936,164938],{"class":94,"line":1158},[92,164933,3004],{"class":98},[92,164935,152112],{"class":102},[92,164937,26024],{"class":98},[92,164939,152117],{"class":102},[92,164941,164942,164944,164946,164948,164950],{"class":94,"line":1173},[92,164943,159282],{"class":102},[92,164945,9457],{"class":98},[92,164947,152124],{"class":102},[92,164949,151447],{"class":207},[92,164951,33227],{"class":102},[92,164953,164954],{"class":94,"line":1179},[92,164955,2379],{"emptyLinePlaceholder":17},[92,164957,164958,164960,164962,164964,164966,164968],{"class":94,"line":1193},[92,164959,163749],{"class":102},[92,164961,148],{"class":98},[92,164963,163754],{"class":102},[92,164965,687],{"class":98},[92,164967,7311],{"class":151},[92,164969,164970],{"class":102},"(students)\n",[92,164972,164973,164975,164977,164979,164981,164983,164985,164987,164989,164991],{"class":94,"line":1199},[92,164974,30396],{"class":151},[92,164976,103],{"class":102},[92,164978,155],{"class":98},[92,164980,163772],{"class":207},[92,164982,999],{"class":151},[92,164984,163777],{"class":102},[92,164986,157134],{"class":98},[92,164988,1049],{"class":151},[92,164990,354],{"class":207},[92,164992,109],{"class":102},[38,164994,164995],{},"查找学生：",[83,164997,164999],{"className":30359,"code":164998,"language":30361,"meta":10,"style":10},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[89,165000,165001,165016,165020,165030,165044,165050,165054,165060],{"__ignoreMap":10},[92,165002,165003,165005,165007,165009,165011,165014],{"class":94,"line":95},[92,165004,111553],{"class":102},[92,165006,148],{"class":98},[92,165008,60585],{"class":151},[92,165010,103],{"class":102},[92,165012,165013],{"class":207},"\"请输入学生姓名:\"",[92,165015,109],{"class":102},[92,165017,165018],{"class":94,"line":11},[92,165019,2379],{"emptyLinePlaceholder":17},[92,165021,165022,165024,165026,165028],{"class":94,"line":1158},[92,165023,3004],{"class":98},[92,165025,152112],{"class":102},[92,165027,26024],{"class":98},[92,165029,152117],{"class":102},[92,165031,165032,165034,165036,165038,165040,165042],{"class":94,"line":1173},[92,165033,3080],{"class":98},[92,165035,152124],{"class":102},[92,165037,62659],{"class":207},[92,165039,4422],{"class":102},[92,165041,2928],{"class":98},[92,165043,160407],{"class":102},[92,165045,165046,165048],{"class":94,"line":1179},[92,165047,32432],{"class":151},[92,165049,150017],{"class":102},[92,165051,165052],{"class":94,"line":1193},[92,165053,31608],{"class":98},[92,165055,165056,165058],{"class":94,"line":1199},[92,165057,1680],{"class":98},[92,165059,3718],{"class":102},[92,165061,165062,165064,165066,165069],{"class":94,"line":1290},[92,165063,31280],{"class":151},[92,165065,103],{"class":102},[92,165067,165068],{"class":207},"\"没有找到\"",[92,165070,109],{"class":102},[33,165072,165074],{"id":165073},"_613-容器通用操作","6.13 容器通用操作",[38,165076,165077],{},"长度：",[83,165079,165081],{"className":30359,"code":165080,"language":30361,"meta":10,"style":10},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[89,165082,165083,165102,165112],{"__ignoreMap":10},[92,165084,165085,165087,165090,165092,165094,165096,165098,165100],{"class":94,"line":95},[92,165086,7338],{"class":151},[92,165088,165089],{"class":102},"([",[92,165091,320],{"class":151},[92,165093,12415],{"class":102},[92,165095,180],{"class":151},[92,165097,12415],{"class":102},[92,165099,174],{"class":151},[92,165101,4636],{"class":102},[92,165103,165104,165106,165108,165110],{"class":94,"line":11},[92,165105,7338],{"class":151},[92,165107,103],{"class":102},[92,165109,155855],{"class":207},[92,165111,109],{"class":102},[92,165113,165114,165116,165119,165121,165123,165125],{"class":94,"line":1158},[92,165115,7338],{"class":151},[92,165117,165118],{"class":102},"({",[92,165120,62659],{"class":207},[92,165122,51417],{"class":102},[92,165124,149863],{"class":207},[92,165126,165127],{"class":102},"})\n",[38,165129,165130],{},"最大最小：",[83,165132,165134],{"className":30359,"code":165133,"language":30361,"meta":10,"style":10},"max([1, 2, 3])\nmin([1, 2, 3])\n",[89,165135,165136,165154],{"__ignoreMap":10},[92,165137,165138,165140,165142,165144,165146,165148,165150,165152],{"class":94,"line":95},[92,165139,5995],{"class":151},[92,165141,165089],{"class":102},[92,165143,320],{"class":151},[92,165145,12415],{"class":102},[92,165147,180],{"class":151},[92,165149,12415],{"class":102},[92,165151,174],{"class":151},[92,165153,4636],{"class":102},[92,165155,165156,165159,165161,165163,165165,165167,165169,165171],{"class":94,"line":11},[92,165157,165158],{"class":151},"min",[92,165160,165089],{"class":102},[92,165162,320],{"class":151},[92,165164,12415],{"class":102},[92,165166,180],{"class":151},[92,165168,12415],{"class":102},[92,165170,174],{"class":151},[92,165172,4636],{"class":102},[38,165174,165175],{},"求和：",[83,165177,165179],{"className":30359,"code":165178,"language":30361,"meta":10,"style":10},"sum([1, 2, 3])\n",[89,165180,165181],{"__ignoreMap":10},[92,165182,165183,165186,165188,165190,165192,165194,165196,165198],{"class":94,"line":95},[92,165184,165185],{"class":151},"sum",[92,165187,165089],{"class":102},[92,165189,320],{"class":151},[92,165191,12415],{"class":102},[92,165193,180],{"class":151},[92,165195,12415],{"class":102},[92,165197,174],{"class":151},[92,165199,4636],{"class":102},[38,165201,163446],{},[83,165203,165205],{"className":30359,"code":165204,"language":30361,"meta":10,"style":10},"sorted([3, 1, 2])\n",[89,165206,165207],{"__ignoreMap":10},[92,165208,165209,165212,165214,165216,165218,165220,165222,165224],{"class":94,"line":95},[92,165210,165211],{"class":151},"sorted",[92,165213,165089],{"class":102},[92,165215,174],{"class":151},[92,165217,12415],{"class":102},[92,165219,320],{"class":151},[92,165221,12415],{"class":102},[92,165223,180],{"class":151},[92,165225,4636],{"class":102},[38,165227,165228],{},"类型转换：",[83,165230,165232],{"className":30359,"code":165231,"language":30361,"meta":10,"style":10},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[89,165233,165234,165244,165262],{"__ignoreMap":10},[92,165235,165236,165238,165240,165242],{"class":94,"line":95},[92,165237,154045],{"class":151},[92,165239,103],{"class":102},[92,165241,155855],{"class":207},[92,165243,109],{"class":102},[92,165245,165246,165248,165250,165252,165254,165256,165258,165260],{"class":94,"line":11},[92,165247,155240],{"class":151},[92,165249,165089],{"class":102},[92,165251,320],{"class":151},[92,165253,12415],{"class":102},[92,165255,180],{"class":151},[92,165257,12415],{"class":102},[92,165259,174],{"class":151},[92,165261,4636],{"class":102},[92,165263,165264,165266,165268,165270,165272,165274,165276,165278,165280,165282],{"class":94,"line":1158},[92,165265,155265],{"class":151},[92,165267,165089],{"class":102},[92,165269,320],{"class":151},[92,165271,12415],{"class":102},[92,165273,320],{"class":151},[92,165275,12415],{"class":102},[92,165277,180],{"class":151},[92,165279,12415],{"class":102},[92,165281,174],{"class":151},[92,165283,4636],{"class":102},[38,165285,165286],{},"成员判断：",[83,165288,165290],{"className":30359,"code":165289,"language":30361,"meta":10,"style":10},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[89,165291,165292,165309,165333],{"__ignoreMap":10},[92,165293,165294,165296,165298,165301,165304,165307],{"class":94,"line":95},[92,165295,30396],{"class":151},[92,165297,103],{"class":102},[92,165299,165300],{"class":207},"\"a\"",[92,165302,165303],{"class":98}," in",[92,165305,165306],{"class":207}," \"abc\"",[92,165308,109],{"class":102},[92,165310,165311,165313,165315,165317,165319,165321,165323,165325,165327,165329,165331],{"class":94,"line":11},[92,165312,30396],{"class":151},[92,165314,103],{"class":102},[92,165316,320],{"class":151},[92,165318,165303],{"class":98},[92,165320,52206],{"class":102},[92,165322,320],{"class":151},[92,165324,12415],{"class":102},[92,165326,180],{"class":151},[92,165328,12415],{"class":102},[92,165330,174],{"class":151},[92,165332,4636],{"class":102},[92,165334,165335,165337,165339,165341,165343,165345,165347,165349,165351],{"class":94,"line":1158},[92,165336,30396],{"class":151},[92,165338,103],{"class":102},[92,165340,62659],{"class":207},[92,165342,165303],{"class":98},[92,165344,4427],{"class":102},[92,165346,62659],{"class":207},[92,165348,51417],{"class":102},[92,165350,149863],{"class":207},[92,165352,165127],{"class":102},[33,165354,165356],{"id":165355},"_614-推导式","6.14 推导式",[38,165358,165359],{},"推导式用于快速生成容器。",[38,165361,165362],{},"列表推导式：",[83,165364,165366],{"className":30359,"code":165365,"language":30361,"meta":10,"style":10},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[89,165367,165368,165395],{"__ignoreMap":10},[92,165369,165370,165372,165374,165377,165379,165381,165383,165385,165387,165389,165391,165393],{"class":94,"line":95},[92,165371,164075],{"class":102},[92,165373,148],{"class":98},[92,165375,165376],{"class":102}," [i ",[92,165378,3004],{"class":98},[92,165380,9418],{"class":102},[92,165382,26024],{"class":98},[92,165384,32424],{"class":151},[92,165386,103],{"class":102},[92,165388,320],{"class":151},[92,165390,12415],{"class":102},[92,165392,447],{"class":151},[92,165394,97280],{"class":102},[92,165396,165397,165399],{"class":94,"line":11},[92,165398,30396],{"class":151},[92,165400,164291],{"class":102},[38,165402,165403],{},"带条件：",[83,165405,165407],{"className":30359,"code":165406,"language":30361,"meta":10,"style":10},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[89,165408,165409,165450],{"__ignoreMap":10},[92,165410,165411,165414,165416,165418,165420,165422,165424,165426,165428,165430,165432,165434,165436,165438,165440,165442,165444,165446,165448],{"class":94,"line":95},[92,165412,165413],{"class":102},"even_nums ",[92,165415,148],{"class":98},[92,165417,165376],{"class":102},[92,165419,3004],{"class":98},[92,165421,9418],{"class":102},[92,165423,26024],{"class":98},[92,165425,32424],{"class":151},[92,165427,103],{"class":102},[92,165429,320],{"class":151},[92,165431,12415],{"class":102},[92,165433,440],{"class":151},[92,165435,13694],{"class":102},[92,165437,1510],{"class":98},[92,165439,9418],{"class":102},[92,165441,431],{"class":98},[92,165443,14735],{"class":151},[92,165445,101534],{"class":98},[92,165447,4072],{"class":151},[92,165449,33227],{"class":102},[92,165451,165452,165454],{"class":94,"line":11},[92,165453,30396],{"class":151},[92,165455,165456],{"class":102},"(even_nums)\n",[38,165458,165459],{},"字典推导式：",[83,165461,165463],{"className":30359,"code":165462,"language":30361,"meta":10,"style":10},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[89,165464,165465,165499],{"__ignoreMap":10},[92,165466,165467,165470,165472,165475,165477,165479,165482,165484,165486,165488,165490,165492,165494,165496],{"class":94,"line":95},[92,165468,165469],{"class":102},"squares ",[92,165471,148],{"class":98},[92,165473,165474],{"class":102}," {i: i ",[92,165476,10641],{"class":98},[92,165478,14735],{"class":151},[92,165480,165481],{"class":98}," for",[92,165483,9418],{"class":102},[92,165485,26024],{"class":98},[92,165487,32424],{"class":151},[92,165489,103],{"class":102},[92,165491,320],{"class":151},[92,165493,12415],{"class":102},[92,165495,447],{"class":151},[92,165497,165498],{"class":102},")}\n",[92,165500,165501,165503],{"class":94,"line":11},[92,165502,30396],{"class":151},[92,165504,165505],{"class":102},"(squares)\n",[38,165507,165508],{},"集合推导式：",[83,165510,165512],{"className":30359,"code":165511,"language":30361,"meta":10,"style":10},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[89,165513,165514,165535],{"__ignoreMap":10},[92,165515,165516,165519,165521,165524,165526,165528,165530,165533],{"class":94,"line":95},[92,165517,165518],{"class":102},"chars ",[92,165520,148],{"class":98},[92,165522,165523],{"class":102}," {ch ",[92,165525,3004],{"class":98},[92,165527,159667],{"class":102},[92,165529,26024],{"class":98},[92,165531,165532],{"class":207}," \"hello\"",[92,165534,1544],{"class":102},[92,165536,165537,165539],{"class":94,"line":11},[92,165538,30396],{"class":151},[92,165540,165541],{"class":102},"(chars)\n",[38,165543,165544],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[33,165546,165548],{"id":165547},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[83,165550,165552],{"className":30359,"code":165551,"language":30361,"meta":10,"style":10},"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",[89,165553,165554,165562,165582,165602,165622,165642,165646,165650,165658,165672,165681,165685,165695,165707,165711,165731,165740,165744,165760,165765,165769,165783,165787,165809,165845],{"__ignoreMap":10},[92,165555,165556,165558,165560],{"class":94,"line":95},[92,165557,159691],{"class":102},[92,165559,148],{"class":98},[92,165561,55427],{"class":102},[92,165563,165564,165566,165568,165570,165572,165574,165576,165578,165580],{"class":94,"line":11},[92,165565,148360],{"class":102},[92,165567,62659],{"class":207},[92,165569,51417],{"class":102},[92,165571,149863],{"class":207},[92,165573,12415],{"class":102},[92,165575,151447],{"class":207},[92,165577,51417],{"class":102},[92,165579,1092],{"class":151},[92,165581,4909],{"class":102},[92,165583,165584,165586,165588,165590,165592,165594,165596,165598,165600],{"class":94,"line":1158},[92,165585,148360],{"class":102},[92,165587,62659],{"class":207},[92,165589,51417],{"class":102},[92,165591,150911],{"class":207},[92,165593,12415],{"class":102},[92,165595,151447],{"class":207},[92,165597,51417],{"class":102},[92,165599,914],{"class":151},[92,165601,4909],{"class":102},[92,165603,165604,165606,165608,165610,165612,165614,165616,165618,165620],{"class":94,"line":1173},[92,165605,148360],{"class":102},[92,165607,62659],{"class":207},[92,165609,51417],{"class":102},[92,165611,159706],{"class":207},[92,165613,12415],{"class":102},[92,165615,151447],{"class":207},[92,165617,51417],{"class":102},[92,165619,509],{"class":151},[92,165621,4909],{"class":102},[92,165623,165624,165626,165628,165630,165632,165634,165636,165638,165640],{"class":94,"line":1179},[92,165625,148360],{"class":102},[92,165627,62659],{"class":207},[92,165629,51417],{"class":102},[92,165631,163285],{"class":207},[92,165633,12415],{"class":102},[92,165635,151447],{"class":207},[92,165637,51417],{"class":102},[92,165639,985],{"class":151},[92,165641,4909],{"class":102},[92,165643,165644],{"class":94,"line":1193},[92,165645,33227],{"class":102},[92,165647,165648],{"class":94,"line":1199},[92,165649,2379],{"emptyLinePlaceholder":17},[92,165651,165652,165654,165656],{"class":94,"line":1290},[92,165653,157235],{"class":102},[92,165655,148],{"class":98},[92,165657,47314],{"class":151},[92,165659,165660,165663,165665,165668,165670],{"class":94,"line":1296},[92,165661,165662],{"class":102},"max_student ",[92,165664,148],{"class":98},[92,165666,165667],{"class":102}," students[",[92,165669,294],{"class":151},[92,165671,33227],{"class":102},[92,165673,165674,165677,165679],{"class":94,"line":1308},[92,165675,165676],{"class":102},"passed ",[92,165678,148],{"class":98},[92,165680,51818],{"class":102},[92,165682,165683],{"class":94,"line":1591},[92,165684,2379],{"emptyLinePlaceholder":17},[92,165686,165687,165689,165691,165693],{"class":94,"line":1596},[92,165688,3004],{"class":98},[92,165690,152112],{"class":102},[92,165692,26024],{"class":98},[92,165694,152117],{"class":102},[92,165696,165697,165699,165701,165703,165705],{"class":94,"line":1602},[92,165698,159282],{"class":102},[92,165700,9457],{"class":98},[92,165702,152124],{"class":102},[92,165704,151447],{"class":207},[92,165706,33227],{"class":102},[92,165708,165709],{"class":94,"line":1607},[92,165710,2379],{"emptyLinePlaceholder":17},[92,165712,165713,165715,165717,165719,165721,165723,165726,165728],{"class":94,"line":1621},[92,165714,3080],{"class":98},[92,165716,152124],{"class":102},[92,165718,151447],{"class":207},[92,165720,4422],{"class":102},[92,165722,1063],{"class":98},[92,165724,165725],{"class":102}," max_student[",[92,165727,151447],{"class":207},[92,165729,165730],{"class":102},"]:\n",[92,165732,165733,165736,165738],{"class":94,"line":1626},[92,165734,165735],{"class":102},"        max_student ",[92,165737,148],{"class":98},[92,165739,152140],{"class":102},[92,165741,165742],{"class":94,"line":1632},[92,165743,2379],{"emptyLinePlaceholder":17},[92,165745,165746,165748,165750,165752,165754,165756,165758],{"class":94,"line":1653},[92,165747,3080],{"class":98},[92,165749,152124],{"class":102},[92,165751,151447],{"class":207},[92,165753,4422],{"class":102},[92,165755,1689],{"class":98},[92,165757,157812],{"class":151},[92,165759,3718],{"class":102},[92,165761,165762],{"class":94,"line":1658},[92,165763,165764],{"class":102},"        passed.append(student)\n",[92,165766,165767],{"class":94,"line":1672},[92,165768,2379],{"emptyLinePlaceholder":17},[92,165770,165771,165773,165775,165777,165779,165781],{"class":94,"line":1677},[92,165772,163749],{"class":102},[92,165774,148],{"class":98},[92,165776,163754],{"class":102},[92,165778,687],{"class":98},[92,165780,7311],{"class":151},[92,165782,164970],{"class":102},[92,165784,165785],{"class":94,"line":1706},[92,165786,2379],{"emptyLinePlaceholder":17},[92,165788,165789,165791,165793,165795,165797,165799,165801,165803,165805,165807],{"class":94,"line":1711},[92,165790,30396],{"class":151},[92,165792,103],{"class":102},[92,165794,155],{"class":98},[92,165796,163772],{"class":207},[92,165798,999],{"class":151},[92,165800,163777],{"class":102},[92,165802,157134],{"class":98},[92,165804,1049],{"class":151},[92,165806,354],{"class":207},[92,165808,109],{"class":102},[92,165810,165811,165813,165815,165817,165820,165822,165825,165827,165829,165831,165833,165835,165837,165839,165841,165843],{"class":94,"line":1728},[92,165812,30396],{"class":151},[92,165814,103],{"class":102},[92,165816,155],{"class":98},[92,165818,165819],{"class":207},"\"最高分学生:",[92,165821,999],{"class":151},[92,165823,165824],{"class":102},"max_student[",[92,165826,152857],{"class":207},[92,165828,1043],{"class":102},[92,165830,1049],{"class":151},[92,165832,4427],{"class":151},[92,165834,165824],{"class":102},[92,165836,152895],{"class":207},[92,165838,1043],{"class":102},[92,165840,1049],{"class":151},[92,165842,354],{"class":207},[92,165844,109],{"class":102},[92,165846,165847,165849,165851,165853,165856,165859,165862,165864,165866],{"class":94,"line":1733},[92,165848,30396],{"class":151},[92,165850,103],{"class":102},[92,165852,155],{"class":98},[92,165854,165855],{"class":207},"\"及格人数:",[92,165857,165858],{"class":151},"{len",[92,165860,165861],{"class":102},"(passed)",[92,165863,1049],{"class":151},[92,165865,354],{"class":207},[92,165867,109],{"class":102},[33,165869,165871],{"id":165870},"_616-易错点","6.16 易错点",[46,165873,165874,165877,165880,165883,165889,165898],{},[49,165875,165876],{},"列表可变，元组和字符串不可变。",[49,165878,165879],{},"切片结束位置不包含。",[49,165881,165882],{},"字典通过 key 取值，不是通过索引。",[49,165884,165885,165886,28366],{},"空集合要用 ",[89,165887,165888],{},"set()",[49,165890,104341,165891,165894,165895,28366],{},[89,165892,165893],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[89,165896,165897],{},"get()",[49,165899,165900],{},"嵌套容器要先看清楚每一层是什么类型。",[33,165902,165904],{"id":165903},"_617-本章练习","6.17 本章练习",[46,165906,165907,165910,165913,165916,165919],{},[49,165908,165909],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[49,165911,165912],{},"输入一句话，统计每个字符出现次数。",[49,165914,165915],{},"使用集合去除列表中的重复元素。",[49,165917,165918],{},"使用字典保存一个学生的信息，并实现修改成绩。",[49,165920,165921],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5106,165923,165924],{},"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":10,"searchDepth":11,"depth":11,"links":165926},[165927,165928,165929,165930,165931,165932,165933,165934,165935,165936,165937,165938,165939,165940,165941,165942,165943],{"id":162907,"depth":11,"text":162908},{"id":163024,"depth":11,"text":163025},{"id":163114,"depth":11,"text":163115},{"id":163238,"depth":11,"text":163239},{"id":163601,"depth":11,"text":163602},{"id":163788,"depth":11,"text":163789},{"id":163907,"depth":11,"text":163908},{"id":164049,"depth":11,"text":164050},{"id":164236,"depth":11,"text":164237},{"id":164480,"depth":11,"text":164481},{"id":164690,"depth":11,"text":164691},{"id":164775,"depth":11,"text":164776},{"id":165073,"depth":11,"text":165074},{"id":165355,"depth":11,"text":165356},{"id":165547,"depth":11,"text":165548},{"id":165870,"depth":11,"text":165871},{"id":165903,"depth":11,"text":165904},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162899,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165950,"title":165951,"body":165952,"description":13,"extension":14,"meta":168124,"navigation":17,"path":168125,"seo":168126,"stem":168127,"__hash__":168128},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165953,"toc":168099},[165954,165957,165961,165964,166044,166047,166068,166071,166075,166078,166140,166143,166160,166164,166167,166212,166214,166222,166226,166229,166311,166314,166317,166342,166345,166368,166372,166375,166377,166439,166442,166444,166495,166499,166503,166509,166614,166618,166624,166695,166699,166702,166770,166773,166853,166857,166863,166899,166902,166905,167015,167021,167025,167028,167100,167103,167107,167111,167116,167178,167182,167187,167255,167259,167264,167380,167384,167387,167467,167470,167474,167477,167581,167583,167598,167601,167605,167743,167751,167755,167757,167768,167770,168028,168032,168064,168068,168096],[29,165955,165951],{"id":165956},"_7-函数进阶",[33,165958,165960],{"id":165959},"_71-多返回值","7.1 多返回值",[38,165962,165963],{},"Python 函数可以返回多个值，本质上返回的是元组。",[83,165965,165967],{"className":30359,"code":165966,"language":30361,"meta":10,"style":10},"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",[89,165968,165969,165978,165986,165994,166003,166010,166014,166018,166027,166033],{"__ignoreMap":10},[92,165970,165971,165973,165976],{"class":94,"line":95},[92,165972,31928],{"class":98},[92,165974,165975],{"class":1942}," get_info",[92,165977,31934],{"class":102},[92,165979,165980,165982,165984],{"class":94,"line":11},[92,165981,152345],{"class":102},[92,165983,148],{"class":98},[92,165985,149328],{"class":207},[92,165987,165988,165990,165992],{"class":94,"line":1158},[92,165989,152361],{"class":102},[92,165991,148],{"class":98},[92,165993,146526],{"class":151},[92,165995,165996,165998,166000],{"class":94,"line":1173},[92,165997,152376],{"class":102},[92,165999,148],{"class":98},[92,166001,166002],{"class":151}," 95\n",[92,166004,166005,166007],{"class":94,"line":1179},[92,166006,4069],{"class":98},[92,166008,166009],{"class":102}," name, age, score\n",[92,166011,166012],{"class":94,"line":1193},[92,166013,2379],{"emptyLinePlaceholder":17},[92,166015,166016],{"class":94,"line":1199},[92,166017,2379],{"emptyLinePlaceholder":17},[92,166019,166020,166022,166024],{"class":94,"line":1290},[92,166021,161281],{"class":102},[92,166023,148],{"class":98},[92,166025,166026],{"class":102}," get_info()\n",[92,166028,166029,166031],{"class":94,"line":1296},[92,166030,30396],{"class":151},[92,166032,76565],{"class":102},[92,166034,166035,166037,166039,166041],{"class":94,"line":1308},[92,166036,30396],{"class":151},[92,166038,103],{"class":102},[92,166040,103082],{"class":151},[92,166042,166043],{"class":102},"(result))\n",[38,166045,166046],{},"可以直接解包：",[83,166048,166050],{"className":30359,"code":166049,"language":30361,"meta":10,"style":10},"name, age, score = get_info()\nprint(name, age, score)\n",[89,166051,166052,166061],{"__ignoreMap":10},[92,166053,166054,166057,166059],{"class":94,"line":95},[92,166055,166056],{"class":102},"name, age, score ",[92,166058,148],{"class":98},[92,166060,166026],{"class":102},[92,166062,166063,166065],{"class":94,"line":11},[92,166064,30396],{"class":151},[92,166066,166067],{"class":102},"(name, age, score)\n",[38,166069,166070],{},"返回多个值适合函数需要同时给出多个结果时使用。",[33,166072,166074],{"id":166073},"_72-位置参数","7.2 位置参数",[38,166076,166077],{},"位置参数按顺序传递。",[83,166079,166081],{"className":30359,"code":166080,"language":30361,"meta":10,"style":10},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[89,166082,166083,166091,166119,166123,166127],{"__ignoreMap":10},[92,166084,166085,166087,166089],{"class":94,"line":95},[92,166086,31928],{"class":98},[92,166088,149347],{"class":1942},[92,166090,149350],{"class":102},[92,166092,166093,166095,166097,166099,166101,166103,166105,166107,166109,166111,166113,166115,166117],{"class":94,"line":11},[92,166094,31280],{"class":151},[92,166096,103],{"class":102},[92,166098,155],{"class":98},[92,166100,149361],{"class":207},[92,166102,999],{"class":151},[92,166104,79790],{"class":102},[92,166106,1049],{"class":151},[92,166108,149370],{"class":207},[92,166110,999],{"class":151},[92,166112,70201],{"class":102},[92,166114,1049],{"class":151},[92,166116,149379],{"class":207},[92,166118,109],{"class":102},[92,166120,166121],{"class":94,"line":1158},[92,166122,2379],{"emptyLinePlaceholder":17},[92,166124,166125],{"class":94,"line":1173},[92,166126,2379],{"emptyLinePlaceholder":17},[92,166128,166129,166132,166134,166136,166138],{"class":94,"line":1179},[92,166130,166131],{"class":102},"introduce(",[92,166133,149863],{"class":207},[92,166135,12415],{"class":102},[92,166137,753],{"class":151},[92,166139,109],{"class":102},[38,166141,166142],{},"顺序错了就会得到错误含义：",[83,166144,166146],{"className":30359,"code":166145,"language":30361,"meta":10,"style":10},"introduce(18, \"小明\")\n",[89,166147,166148],{"__ignoreMap":10},[92,166149,166150,166152,166154,166156,166158],{"class":94,"line":95},[92,166151,166131],{"class":102},[92,166153,753],{"class":151},[92,166155,12415],{"class":102},[92,166157,149863],{"class":207},[92,166159,109],{"class":102},[33,166161,166163],{"id":166162},"_73-关键字参数","7.3 关键字参数",[38,166165,166166],{},"关键字参数按参数名传递。",[83,166168,166170],{"className":30359,"code":166169,"language":30361,"meta":10,"style":10},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[89,166171,166172,166192],{"__ignoreMap":10},[92,166173,166174,166176,166178,166180,166182,166184,166186,166188,166190],{"class":94,"line":95},[92,166175,166131],{"class":102},[92,166177,79790],{"class":5196},[92,166179,148],{"class":98},[92,166181,149863],{"class":207},[92,166183,12415],{"class":102},[92,166185,70201],{"class":5196},[92,166187,148],{"class":98},[92,166189,753],{"class":151},[92,166191,109],{"class":102},[92,166193,166194,166196,166198,166200,166202,166204,166206,166208,166210],{"class":94,"line":11},[92,166195,166131],{"class":102},[92,166197,70201],{"class":5196},[92,166199,148],{"class":98},[92,166201,753],{"class":151},[92,166203,12415],{"class":102},[92,166205,79790],{"class":5196},[92,166207,148],{"class":98},[92,166209,149863],{"class":207},[92,166211,109],{"class":102},[38,166213,117909],{},[46,166215,166216,166219],{},[49,166217,166218],{},"顺序不容易错。",[49,166220,166221],{},"调用时可读性更强。",[33,166223,166225],{"id":166224},"_74-默认参数","7.4 默认参数",[38,166227,166228],{},"默认参数给参数设置默认值。",[83,166230,166232],{"className":30359,"code":166231,"language":30361,"meta":10,"style":10},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[89,166233,166234,166250,166280,166284,166288,166298],{"__ignoreMap":10},[92,166235,166236,166238,166240,166243,166245,166248],{"class":94,"line":95},[92,166237,31928],{"class":98},[92,166239,122068],{"class":1942},[92,166241,166242],{"class":102},"(host, port",[92,166244,148],{"class":98},[92,166246,166247],{"class":151},"3306",[92,166249,30767],{"class":102},[92,166251,166252,166254,166256,166258,166261,166263,166265,166267,166269,166271,166274,166276,166278],{"class":94,"line":11},[92,166253,31280],{"class":151},[92,166255,103],{"class":102},[92,166257,155],{"class":98},[92,166259,166260],{"class":207},"\"连接",[92,166262,999],{"class":151},[92,166264,27376],{"class":102},[92,166266,1049],{"class":151},[92,166268,962],{"class":207},[92,166270,999],{"class":151},[92,166272,166273],{"class":102},"port",[92,166275,1049],{"class":151},[92,166277,354],{"class":207},[92,166279,109],{"class":102},[92,166281,166282],{"class":94,"line":1158},[92,166283,2379],{"emptyLinePlaceholder":17},[92,166285,166286],{"class":94,"line":1173},[92,166287,2379],{"emptyLinePlaceholder":17},[92,166289,166290,166293,166296],{"class":94,"line":1179},[92,166291,166292],{"class":102},"connect(",[92,166294,166295],{"class":207},"\"localhost\"",[92,166297,109],{"class":102},[92,166299,166300,166302,166304,166306,166309],{"class":94,"line":1193},[92,166301,166292],{"class":102},[92,166303,166295],{"class":207},[92,166305,12415],{"class":102},[92,166307,166308],{"class":151},"6379",[92,166310,109],{"class":102},[38,166312,166313],{},"注意：默认参数必须放在非默认参数后面。",[38,166315,166316],{},"错误：",[83,166318,166320],{"className":30359,"code":166319,"language":30361,"meta":10,"style":10},"def connect(port=3306, host):\n    pass\n",[89,166321,166322,166338],{"__ignoreMap":10},[92,166323,166324,166326,166328,166331,166333,166335],{"class":94,"line":95},[92,166325,31928],{"class":98},[92,166327,122068],{"class":1942},[92,166329,166330],{"class":102},"(port",[92,166332,148],{"class":98},[92,166334,166247],{"class":151},[92,166336,166337],{"class":102},", host):\n",[92,166339,166340],{"class":94,"line":11},[92,166341,149512],{"class":98},[38,166343,166344],{},"正确：",[83,166346,166348],{"className":30359,"code":166347,"language":30361,"meta":10,"style":10},"def connect(host, port=3306):\n    pass\n",[89,166349,166350,166364],{"__ignoreMap":10},[92,166351,166352,166354,166356,166358,166360,166362],{"class":94,"line":95},[92,166353,31928],{"class":98},[92,166355,122068],{"class":1942},[92,166357,166242],{"class":102},[92,166359,148],{"class":98},[92,166361,166247],{"class":151},[92,166363,30767],{"class":102},[92,166365,166366],{"class":94,"line":11},[92,166367,149512],{"class":98},[33,166369,166371],{"id":166370},"_75-默认参数的坑","7.5 默认参数的坑",[38,166373,166374],{},"不要使用可变对象作为默认参数。",[38,166376,157598],{},[83,166378,166380],{"className":30359,"code":166379,"language":30361,"meta":10,"style":10},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[89,166381,166382,166397,166402,166409,166413,166417,166428],{"__ignoreMap":10},[92,166383,166384,166386,166389,166392,166394],{"class":94,"line":95},[92,166385,31928],{"class":98},[92,166387,166388],{"class":1942}," add_item",[92,166390,166391],{"class":102},"(item, items",[92,166393,148],{"class":98},[92,166395,166396],{"class":102},"[]):\n",[92,166398,166399],{"class":94,"line":11},[92,166400,166401],{"class":102},"    items.append(item)\n",[92,166403,166404,166406],{"class":94,"line":1158},[92,166405,4069],{"class":98},[92,166407,166408],{"class":102}," items\n",[92,166410,166411],{"class":94,"line":1173},[92,166412,2379],{"emptyLinePlaceholder":17},[92,166414,166415],{"class":94,"line":1179},[92,166416,2379],{"emptyLinePlaceholder":17},[92,166418,166419,166421,166424,166426],{"class":94,"line":1193},[92,166420,30396],{"class":151},[92,166422,166423],{"class":102},"(add_item(",[92,166425,165300],{"class":207},[92,166427,30478],{"class":102},[92,166429,166430,166432,166434,166437],{"class":94,"line":1199},[92,166431,30396],{"class":151},[92,166433,166423],{"class":102},[92,166435,166436],{"class":207},"\"b\"",[92,166438,30478],{"class":102},[38,166440,166441],{},"第二次调用会复用第一次的列表。",[38,166443,155863],{},[83,166445,166447],{"className":30359,"code":166446,"language":30361,"meta":10,"style":10},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[89,166448,166449,166463,166476,166485,166489],{"__ignoreMap":10},[92,166450,166451,166453,166455,166457,166459,166461],{"class":94,"line":95},[92,166452,31928],{"class":98},[92,166454,166388],{"class":1942},[92,166456,166391],{"class":102},[92,166458,148],{"class":98},[92,166460,95666],{"class":151},[92,166462,30767],{"class":102},[92,166464,166465,166467,166470,166472,166474],{"class":94,"line":11},[92,166466,3080],{"class":98},[92,166468,166469],{"class":102}," items ",[92,166471,38908],{"class":98},[92,166473,38914],{"class":151},[92,166475,3718],{"class":102},[92,166477,166478,166481,166483],{"class":94,"line":1158},[92,166479,166480],{"class":102},"        items ",[92,166482,148],{"class":98},[92,166484,51818],{"class":102},[92,166486,166487],{"class":94,"line":1173},[92,166488,166401],{"class":102},[92,166490,166491,166493],{"class":94,"line":1179},[92,166492,4069],{"class":98},[92,166494,166408],{"class":102},[33,166496,166498],{"id":166497},"_76-不定长参数","7.6 不定长参数",[63,166500,166502],{"id":166501},"_761-args","7.6.1 *args",[38,166504,166505,166508],{},[89,166506,166507],{},"*args"," 接收任意数量的位置参数，得到元组。",[83,166510,166512],{"className":30359,"code":166511,"language":30361,"meta":10,"style":10},"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",[89,166513,166514,166527,166535,166546,166555,166561,166565,166569,166588],{"__ignoreMap":10},[92,166515,166516,166518,166520,166522,166524],{"class":94,"line":95},[92,166517,31928],{"class":98},[92,166519,5189],{"class":1942},[92,166521,103],{"class":102},[92,166523,558],{"class":98},[92,166525,166526],{"class":102},"args):\n",[92,166528,166529,166531,166533],{"class":94,"line":11},[92,166530,159282],{"class":102},[92,166532,148],{"class":98},[92,166534,47314],{"class":151},[92,166536,166537,166539,166541,166543],{"class":94,"line":1158},[92,166538,3180],{"class":98},[92,166540,156155],{"class":102},[92,166542,26024],{"class":98},[92,166544,166545],{"class":102}," args:\n",[92,166547,166548,166550,166552],{"class":94,"line":1173},[92,166549,159957],{"class":102},[92,166551,9457],{"class":98},[92,166553,166554],{"class":102}," num\n",[92,166556,166557,166559],{"class":94,"line":1179},[92,166558,4069],{"class":98},[92,166560,162262],{"class":102},[92,166562,166563],{"class":94,"line":1193},[92,166564,2379],{"emptyLinePlaceholder":17},[92,166566,166567],{"class":94,"line":1199},[92,166568,2379],{"emptyLinePlaceholder":17},[92,166570,166571,166573,166576,166578,166580,166582,166584,166586],{"class":94,"line":1290},[92,166572,30396],{"class":151},[92,166574,166575],{"class":102},"(add(",[92,166577,320],{"class":151},[92,166579,12415],{"class":102},[92,166581,180],{"class":151},[92,166583,12415],{"class":102},[92,166585,174],{"class":151},[92,166587,30478],{"class":102},[92,166589,166590,166592,166594,166596,166598,166600,166602,166604,166606,166608,166610,166612],{"class":94,"line":1296},[92,166591,30396],{"class":151},[92,166593,166575],{"class":102},[92,166595,320],{"class":151},[92,166597,12415],{"class":102},[92,166599,180],{"class":151},[92,166601,12415],{"class":102},[92,166603,174],{"class":151},[92,166605,12415],{"class":102},[92,166607,396],{"class":151},[92,166609,12415],{"class":102},[92,166611,422],{"class":151},[92,166613,30478],{"class":102},[63,166615,166617],{"id":166616},"_762-kwargs","7.6.2 **kwargs",[38,166619,166620,166623],{},[89,166621,166622],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[83,166625,166627],{"className":30359,"code":166626,"language":30361,"meta":10,"style":10},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[89,166628,166629,166642,166653,166659,166663,166667],{"__ignoreMap":10},[92,166630,166631,166633,166635,166637,166639],{"class":94,"line":95},[92,166632,31928],{"class":98},[92,166634,161920],{"class":1942},[92,166636,103],{"class":102},[92,166638,10641],{"class":98},[92,166640,166641],{"class":102},"kwargs):\n",[92,166643,166644,166646,166648,166650],{"class":94,"line":11},[92,166645,3180],{"class":98},[92,166647,164760],{"class":102},[92,166649,26024],{"class":98},[92,166651,166652],{"class":102}," kwargs.items():\n",[92,166654,166655,166657],{"class":94,"line":1158},[92,166656,32432],{"class":151},[92,166658,164772],{"class":102},[92,166660,166661],{"class":94,"line":1173},[92,166662,2379],{"emptyLinePlaceholder":17},[92,166664,166665],{"class":94,"line":1179},[92,166666,2379],{"emptyLinePlaceholder":17},[92,166668,166669,166671,166673,166675,166677,166679,166681,166683,166685,166687,166689,166691,166693],{"class":94,"line":1193},[92,166670,161985],{"class":102},[92,166672,79790],{"class":5196},[92,166674,148],{"class":98},[92,166676,149863],{"class":207},[92,166678,12415],{"class":102},[92,166680,70201],{"class":5196},[92,166682,148],{"class":98},[92,166684,753],{"class":151},[92,166686,12415],{"class":102},[92,166688,70252],{"class":5196},[92,166690,148],{"class":98},[92,166692,69249],{"class":207},[92,166694,109],{"class":102},[33,166696,166698],{"id":166697},"_77-参数解包","7.7 参数解包",[38,166700,166701],{},"列表或元组解包为位置参数：",[83,166703,166705],{"className":30359,"code":166704,"language":30361,"meta":10,"style":10},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[89,166706,166707,166716,166731,166735,166739,166759],{"__ignoreMap":10},[92,166708,166709,166711,166713],{"class":94,"line":95},[92,166710,31928],{"class":98},[92,166712,5189],{"class":1942},[92,166714,166715],{"class":102},"(a, b, c):\n",[92,166717,166718,166720,166722,166724,166726,166728],{"class":94,"line":11},[92,166719,4069],{"class":98},[92,166721,10849],{"class":102},[92,166723,584],{"class":98},[92,166725,10862],{"class":102},[92,166727,584],{"class":98},[92,166729,166730],{"class":102}," c\n",[92,166732,166733],{"class":94,"line":1158},[92,166734,2379],{"emptyLinePlaceholder":17},[92,166736,166737],{"class":94,"line":1173},[92,166738,2379],{"emptyLinePlaceholder":17},[92,166740,166741,166743,166745,166747,166749,166751,166753,166755,166757],{"class":94,"line":1179},[92,166742,164075],{"class":102},[92,166744,148],{"class":98},[92,166746,52206],{"class":102},[92,166748,320],{"class":151},[92,166750,12415],{"class":102},[92,166752,180],{"class":151},[92,166754,12415],{"class":102},[92,166756,174],{"class":151},[92,166758,33227],{"class":102},[92,166760,166761,166763,166765,166767],{"class":94,"line":1193},[92,166762,30396],{"class":151},[92,166764,166575],{"class":102},[92,166766,558],{"class":98},[92,166768,166769],{"class":102},"nums))\n",[38,166771,166772],{},"字典解包为关键字参数：",[83,166774,166776],{"className":30359,"code":166775,"language":30361,"meta":10,"style":10},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[89,166777,166778,166786,166812,166816,166820,166844],{"__ignoreMap":10},[92,166779,166780,166782,166784],{"class":94,"line":95},[92,166781,31928],{"class":98},[92,166783,149347],{"class":1942},[92,166785,149350],{"class":102},[92,166787,166788,166790,166792,166794,166796,166798,166800,166802,166804,166806,166808,166810],{"class":94,"line":11},[92,166789,31280],{"class":151},[92,166791,103],{"class":102},[92,166793,155],{"class":98},[92,166795,354],{"class":207},[92,166797,999],{"class":151},[92,166799,79790],{"class":102},[92,166801,1049],{"class":151},[92,166803,4427],{"class":151},[92,166805,70201],{"class":102},[92,166807,1049],{"class":151},[92,166809,354],{"class":207},[92,166811,109],{"class":102},[92,166813,166814],{"class":94,"line":1158},[92,166815,2379],{"emptyLinePlaceholder":17},[92,166817,166818],{"class":94,"line":1173},[92,166819,2379],{"emptyLinePlaceholder":17},[92,166821,166822,166824,166826,166828,166830,166832,166834,166836,166838,166840,166842],{"class":94,"line":1179},[92,166823,116289],{"class":102},[92,166825,148],{"class":98},[92,166827,4427],{"class":102},[92,166829,62659],{"class":207},[92,166831,51417],{"class":102},[92,166833,149863],{"class":207},[92,166835,12415],{"class":102},[92,166837,69104],{"class":207},[92,166839,51417],{"class":102},[92,166841,753],{"class":151},[92,166843,1544],{"class":102},[92,166845,166846,166848,166850],{"class":94,"line":1193},[92,166847,166131],{"class":102},[92,166849,10641],{"class":98},[92,166851,166852],{"class":102},"info)\n",[33,166854,166856],{"id":166855},"_78-匿名函数lambda","7.8 匿名函数lambda",[38,166858,166859,166862],{},[89,166860,166861],{},"lambda"," 用于定义简单匿名函数。",[83,166864,166866],{"className":30359,"code":166865,"language":30361,"meta":10,"style":10},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[89,166867,166868,166885],{"__ignoreMap":10},[92,166869,166870,166873,166875,166878,166881,166883],{"class":94,"line":95},[92,166871,166872],{"class":102},"add ",[92,166874,148],{"class":98},[92,166876,166877],{"class":98}," lambda",[92,166879,166880],{"class":102}," a, b: a ",[92,166882,584],{"class":98},[92,166884,151079],{"class":102},[92,166886,166887,166889,166891,166893,166895,166897],{"class":94,"line":11},[92,166888,30396],{"class":151},[92,166890,166575],{"class":102},[92,166892,320],{"class":151},[92,166894,12415],{"class":102},[92,166896,180],{"class":151},[92,166898,30478],{"class":102},[38,166900,166901],{},"常和排序、过滤等函数一起使用。",[38,166903,166904],{},"按分数排序：",[83,166906,166908],{"className":30359,"code":166907,"language":30361,"meta":10,"style":10},"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",[89,166909,166910,166918,166938,166958,166978,166982,166986,167009],{"__ignoreMap":10},[92,166911,166912,166914,166916],{"class":94,"line":95},[92,166913,159691],{"class":102},[92,166915,148],{"class":98},[92,166917,55427],{"class":102},[92,166919,166920,166922,166924,166926,166928,166930,166932,166934,166936],{"class":94,"line":11},[92,166921,148360],{"class":102},[92,166923,62659],{"class":207},[92,166925,51417],{"class":102},[92,166927,149863],{"class":207},[92,166929,12415],{"class":102},[92,166931,151447],{"class":207},[92,166933,51417],{"class":102},[92,166935,1092],{"class":151},[92,166937,4909],{"class":102},[92,166939,166940,166942,166944,166946,166948,166950,166952,166954,166956],{"class":94,"line":1158},[92,166941,148360],{"class":102},[92,166943,62659],{"class":207},[92,166945,51417],{"class":102},[92,166947,150911],{"class":207},[92,166949,12415],{"class":102},[92,166951,151447],{"class":207},[92,166953,51417],{"class":102},[92,166955,914],{"class":151},[92,166957,4909],{"class":102},[92,166959,166960,166962,166964,166966,166968,166970,166972,166974,166976],{"class":94,"line":1173},[92,166961,148360],{"class":102},[92,166963,62659],{"class":207},[92,166965,51417],{"class":102},[92,166967,159706],{"class":207},[92,166969,12415],{"class":102},[92,166971,151447],{"class":207},[92,166973,51417],{"class":102},[92,166975,509],{"class":151},[92,166977,4909],{"class":102},[92,166979,166980],{"class":94,"line":1179},[92,166981,33227],{"class":102},[92,166983,166984],{"class":94,"line":1193},[92,166985,2379],{"emptyLinePlaceholder":17},[92,166987,166988,166991,166993,166995,166997,166999,167001,167003,167005,167007],{"class":94,"line":1199},[92,166989,166990],{"class":102},"students.sort(",[92,166992,153921],{"class":5196},[92,166994,153924],{"class":98},[92,166996,153927],{"class":102},[92,166998,151447],{"class":207},[92,167000,112177],{"class":102},[92,167002,163503],{"class":5196},[92,167004,148],{"class":98},[92,167006,31457],{"class":151},[92,167008,109],{"class":102},[92,167010,167011,167013],{"class":94,"line":1290},[92,167012,30396],{"class":151},[92,167014,164970],{"class":102},[38,167016,167017,167018,167020],{},"如果逻辑复杂，不要硬写 ",[89,167019,166861],{},"，定义普通函数更清晰。",[33,167022,167024],{"id":167023},"_79-函数作为参数","7.9 函数作为参数",[38,167026,167027],{},"函数可以作为参数传给另一个函数。",[83,167029,167031],{"className":30359,"code":167030,"language":30361,"meta":10,"style":10},"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",[89,167032,167033,167041,167051,167055,167059,167069,167076,167080,167084],{"__ignoreMap":10},[92,167034,167035,167037,167039],{"class":94,"line":95},[92,167036,31928],{"class":98},[92,167038,5189],{"class":1942},[92,167040,151068],{"class":102},[92,167042,167043,167045,167047,167049],{"class":94,"line":11},[92,167044,4069],{"class":98},[92,167046,10849],{"class":102},[92,167048,584],{"class":98},[92,167050,151079],{"class":102},[92,167052,167053],{"class":94,"line":1158},[92,167054,2379],{"emptyLinePlaceholder":17},[92,167056,167057],{"class":94,"line":1173},[92,167058,2379],{"emptyLinePlaceholder":17},[92,167060,167061,167063,167066],{"class":94,"line":1179},[92,167062,31928],{"class":98},[92,167064,167065],{"class":1942}," calculate",[92,167067,167068],{"class":102},"(a, b, func):\n",[92,167070,167071,167073],{"class":94,"line":1193},[92,167072,4069],{"class":98},[92,167074,167075],{"class":102}," func(a, b)\n",[92,167077,167078],{"class":94,"line":1199},[92,167079,2379],{"emptyLinePlaceholder":17},[92,167081,167082],{"class":94,"line":1290},[92,167083,2379],{"emptyLinePlaceholder":17},[92,167085,167086,167088,167091,167093,167095,167097],{"class":94,"line":1296},[92,167087,30396],{"class":151},[92,167089,167090],{"class":102},"(calculate(",[92,167092,549],{"class":151},[92,167094,12415],{"class":102},[92,167096,803],{"class":151},[92,167098,167099],{"class":102},", add))\n",[38,167101,167102],{},"这种思想在排序、回调、框架中经常出现。",[33,167104,167106],{"id":167105},"_710-mapfiltersorted","7.10 map、filter、sorted",[63,167108,167110],{"id":167109},"_7101-map","7.10.1 map",[38,167112,167113,167115],{},[89,167114,74024],{}," 对每个元素执行函数。",[83,167117,167119],{"className":30359,"code":167118,"language":30361,"meta":10,"style":10},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[89,167120,167121,167145,167168],{"__ignoreMap":10},[92,167122,167123,167125,167127,167129,167131,167133,167135,167137,167139,167141,167143],{"class":94,"line":95},[92,167124,164075],{"class":102},[92,167126,148],{"class":98},[92,167128,52206],{"class":102},[92,167130,320],{"class":151},[92,167132,12415],{"class":102},[92,167134,180],{"class":151},[92,167136,12415],{"class":102},[92,167138,174],{"class":151},[92,167140,12415],{"class":102},[92,167142,396],{"class":151},[92,167144,33227],{"class":102},[92,167146,167147,167149,167151,167154,167156,167158,167161,167163,167165],{"class":94,"line":11},[92,167148,161281],{"class":102},[92,167150,148],{"class":98},[92,167152,167153],{"class":151}," map",[92,167155,103],{"class":102},[92,167157,166861],{"class":98},[92,167159,167160],{"class":102}," x: x ",[92,167162,558],{"class":98},[92,167164,14735],{"class":151},[92,167166,167167],{"class":102},", nums)\n",[92,167169,167170,167172,167174,167176],{"class":94,"line":1158},[92,167171,30396],{"class":151},[92,167173,103],{"class":102},[92,167175,154045],{"class":151},[92,167177,166043],{"class":102},[63,167179,167181],{"id":167180},"_7102-filter","7.10.2 filter",[38,167183,167184,167186],{},[89,167185,80031],{}," 保留满足条件的元素。",[83,167188,167190],{"className":30359,"code":167189,"language":30361,"meta":10,"style":10},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[89,167191,167192,167220,167245],{"__ignoreMap":10},[92,167193,167194,167196,167198,167200,167202,167204,167206,167208,167210,167212,167214,167216,167218],{"class":94,"line":95},[92,167195,164075],{"class":102},[92,167197,148],{"class":98},[92,167199,52206],{"class":102},[92,167201,320],{"class":151},[92,167203,12415],{"class":102},[92,167205,180],{"class":151},[92,167207,12415],{"class":102},[92,167209,174],{"class":151},[92,167211,12415],{"class":102},[92,167213,396],{"class":151},[92,167215,12415],{"class":102},[92,167217,422],{"class":151},[92,167219,33227],{"class":102},[92,167221,167222,167224,167226,167229,167231,167233,167235,167237,167239,167241,167243],{"class":94,"line":11},[92,167223,161281],{"class":102},[92,167225,148],{"class":98},[92,167227,167228],{"class":151}," filter",[92,167230,103],{"class":102},[92,167232,166861],{"class":98},[92,167234,167160],{"class":102},[92,167236,431],{"class":98},[92,167238,14735],{"class":151},[92,167240,101534],{"class":98},[92,167242,4072],{"class":151},[92,167244,167167],{"class":102},[92,167246,167247,167249,167251,167253],{"class":94,"line":1158},[92,167248,30396],{"class":151},[92,167250,103],{"class":102},[92,167252,154045],{"class":151},[92,167254,166043],{"class":102},[63,167256,167258],{"id":167257},"_7103-sorted","7.10.3 sorted",[38,167260,167261,167263],{},[89,167262,165211],{}," 返回排序后的新列表。",[83,167265,167267],{"className":30359,"code":167266,"language":30361,"meta":10,"style":10},"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",[89,167268,167269,167277,167297,167317,167337,167341,167345,167374],{"__ignoreMap":10},[92,167270,167271,167273,167275],{"class":94,"line":95},[92,167272,159691],{"class":102},[92,167274,148],{"class":98},[92,167276,55427],{"class":102},[92,167278,167279,167281,167283,167285,167287,167289,167291,167293,167295],{"class":94,"line":11},[92,167280,148360],{"class":102},[92,167282,62659],{"class":207},[92,167284,51417],{"class":102},[92,167286,149863],{"class":207},[92,167288,12415],{"class":102},[92,167290,151447],{"class":207},[92,167292,51417],{"class":102},[92,167294,1092],{"class":151},[92,167296,4909],{"class":102},[92,167298,167299,167301,167303,167305,167307,167309,167311,167313,167315],{"class":94,"line":1158},[92,167300,148360],{"class":102},[92,167302,62659],{"class":207},[92,167304,51417],{"class":102},[92,167306,150911],{"class":207},[92,167308,12415],{"class":102},[92,167310,151447],{"class":207},[92,167312,51417],{"class":102},[92,167314,914],{"class":151},[92,167316,4909],{"class":102},[92,167318,167319,167321,167323,167325,167327,167329,167331,167333,167335],{"class":94,"line":1173},[92,167320,148360],{"class":102},[92,167322,62659],{"class":207},[92,167324,51417],{"class":102},[92,167326,159706],{"class":207},[92,167328,12415],{"class":102},[92,167330,151447],{"class":207},[92,167332,51417],{"class":102},[92,167334,509],{"class":151},[92,167336,4909],{"class":102},[92,167338,167339],{"class":94,"line":1179},[92,167340,33227],{"class":102},[92,167342,167343],{"class":94,"line":1193},[92,167344,2379],{"emptyLinePlaceholder":17},[92,167346,167347,167349,167351,167353,167356,167358,167360,167362,167364,167366,167368,167370,167372],{"class":94,"line":1199},[92,167348,161281],{"class":102},[92,167350,148],{"class":98},[92,167352,163579],{"class":151},[92,167354,167355],{"class":102},"(students, ",[92,167357,153921],{"class":5196},[92,167359,153924],{"class":98},[92,167361,153927],{"class":102},[92,167363,151447],{"class":207},[92,167365,112177],{"class":102},[92,167367,163503],{"class":5196},[92,167369,148],{"class":98},[92,167371,31457],{"class":151},[92,167373,109],{"class":102},[92,167375,167376,167378],{"class":94,"line":1290},[92,167377,30396],{"class":151},[92,167379,76565],{"class":102},[33,167381,167383],{"id":167382},"_711-闭包入门","7.11 闭包入门",[38,167385,167386],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[83,167388,167390],{"className":30359,"code":167389,"language":30361,"meta":10,"style":10},"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",[89,167391,167392,167402,167412,167423,167427,167434,167438,167442,167456],{"__ignoreMap":10},[92,167393,167394,167396,167399],{"class":94,"line":95},[92,167395,31928],{"class":98},[92,167397,167398],{"class":1942}," outer",[92,167400,167401],{"class":102},"(base):\n",[92,167403,167404,167406,167409],{"class":94,"line":11},[92,167405,30782],{"class":98},[92,167407,167408],{"class":1942}," inner",[92,167410,167411],{"class":102},"(num):\n",[92,167413,167414,167416,167419,167421],{"class":94,"line":1158},[92,167415,14732],{"class":98},[92,167417,167418],{"class":102}," base ",[92,167420,584],{"class":98},[92,167422,166554],{"class":102},[92,167424,167425],{"class":94,"line":1173},[92,167426,2379],{"emptyLinePlaceholder":17},[92,167428,167429,167431],{"class":94,"line":1179},[92,167430,4069],{"class":98},[92,167432,167433],{"class":102}," inner\n",[92,167435,167436],{"class":94,"line":1193},[92,167437,2379],{"emptyLinePlaceholder":17},[92,167439,167440],{"class":94,"line":1199},[92,167441,2379],{"emptyLinePlaceholder":17},[92,167443,167444,167447,167449,167452,167454],{"class":94,"line":1290},[92,167445,167446],{"class":102},"add_10 ",[92,167448,148],{"class":98},[92,167450,167451],{"class":102}," outer(",[92,167453,549],{"class":151},[92,167455,109],{"class":102},[92,167457,167458,167460,167463,167465],{"class":94,"line":1296},[92,167459,30396],{"class":151},[92,167461,167462],{"class":102},"(add_10(",[92,167464,422],{"class":151},[92,167466,30478],{"class":102},[38,167468,167469],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[33,167471,167473],{"id":167472},"_712-装饰器入门","7.12 装饰器入门",[38,167475,167476],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[83,167478,167480],{"className":30359,"code":167479,"language":30361,"meta":10,"style":10},"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",[89,167481,167482,167491,167500,167511,167516,167527,167531,167538,167542,167546,167551,167559,167569,167573,167577],{"__ignoreMap":10},[92,167483,167484,167486,167488],{"class":94,"line":95},[92,167485,31928],{"class":98},[92,167487,87171],{"class":1942},[92,167489,167490],{"class":102},"(func):\n",[92,167492,167493,167495,167498],{"class":94,"line":11},[92,167494,30782],{"class":98},[92,167496,167497],{"class":1942}," wrapper",[92,167499,31934],{"class":102},[92,167501,167502,167504,167506,167509],{"class":94,"line":1158},[92,167503,32432],{"class":151},[92,167505,103],{"class":102},[92,167507,167508],{"class":207},"\"函数开始执行\"",[92,167510,109],{"class":102},[92,167512,167513],{"class":94,"line":1173},[92,167514,167515],{"class":102},"        func()\n",[92,167517,167518,167520,167522,167525],{"class":94,"line":1179},[92,167519,32432],{"class":151},[92,167521,103],{"class":102},[92,167523,167524],{"class":207},"\"函数执行结束\"",[92,167526,109],{"class":102},[92,167528,167529],{"class":94,"line":1193},[92,167530,2379],{"emptyLinePlaceholder":17},[92,167532,167533,167535],{"class":94,"line":1199},[92,167534,4069],{"class":98},[92,167536,167537],{"class":102}," wrapper\n",[92,167539,167540],{"class":94,"line":1290},[92,167541,2379],{"emptyLinePlaceholder":17},[92,167543,167544],{"class":94,"line":1296},[92,167545,2379],{"emptyLinePlaceholder":17},[92,167547,167548],{"class":94,"line":1308},[92,167549,167550],{"class":1942},"@log\n",[92,167552,167553,167555,167557],{"class":94,"line":1591},[92,167554,31928],{"class":98},[92,167556,160971],{"class":1942},[92,167558,31934],{"class":102},[92,167560,167561,167563,167565,167567],{"class":94,"line":1596},[92,167562,31280],{"class":151},[92,167564,103],{"class":102},[92,167566,5824],{"class":207},[92,167568,109],{"class":102},[92,167570,167571],{"class":94,"line":1602},[92,167572,2379],{"emptyLinePlaceholder":17},[92,167574,167575],{"class":94,"line":1607},[92,167576,2379],{"emptyLinePlaceholder":17},[92,167578,167579],{"class":94,"line":1621},[92,167580,161006],{"class":102},[38,167582,158249],{},[83,167584,167586],{"className":30359,"code":167585,"language":30361,"meta":10,"style":10},"say_hello = log(say_hello)\n",[89,167587,167588],{"__ignoreMap":10},[92,167589,167590,167593,167595],{"class":94,"line":95},[92,167591,167592],{"class":102},"say_hello ",[92,167594,148],{"class":98},[92,167596,167597],{"class":102}," log(say_hello)\n",[38,167599,167600],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[33,167602,167604],{"id":167603},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[83,167606,167608],{"className":30359,"code":167607,"language":30361,"meta":10,"style":10},"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",[89,167609,167610,167618,167635,167645,167664,167674,167681,167685,167691,167695,167699,167703,167711,167721,167725,167729],{"__ignoreMap":10},[92,167611,167612,167614,167616],{"class":94,"line":95},[92,167613,31928],{"class":98},[92,167615,87171],{"class":1942},[92,167617,167490],{"class":102},[92,167619,167620,167622,167624,167626,167628,167631,167633],{"class":94,"line":11},[92,167621,30782],{"class":98},[92,167623,167497],{"class":1942},[92,167625,103],{"class":102},[92,167627,558],{"class":98},[92,167629,167630],{"class":102},"args, ",[92,167632,10641],{"class":98},[92,167634,166641],{"class":102},[92,167636,167637,167639,167641,167643],{"class":94,"line":1158},[92,167638,32432],{"class":151},[92,167640,103],{"class":102},[92,167642,167508],{"class":207},[92,167644,109],{"class":102},[92,167646,167647,167650,167652,167655,167657,167659,167661],{"class":94,"line":1173},[92,167648,167649],{"class":102},"        result ",[92,167651,148],{"class":98},[92,167653,167654],{"class":102}," func(",[92,167656,558],{"class":98},[92,167658,167630],{"class":102},[92,167660,10641],{"class":98},[92,167662,167663],{"class":102},"kwargs)\n",[92,167665,167666,167668,167670,167672],{"class":94,"line":1179},[92,167667,32432],{"class":151},[92,167669,103],{"class":102},[92,167671,167524],{"class":207},[92,167673,109],{"class":102},[92,167675,167676,167678],{"class":94,"line":1193},[92,167677,14732],{"class":98},[92,167679,167680],{"class":102}," result\n",[92,167682,167683],{"class":94,"line":1199},[92,167684,2379],{"emptyLinePlaceholder":17},[92,167686,167687,167689],{"class":94,"line":1290},[92,167688,4069],{"class":98},[92,167690,167537],{"class":102},[92,167692,167693],{"class":94,"line":1296},[92,167694,2379],{"emptyLinePlaceholder":17},[92,167696,167697],{"class":94,"line":1308},[92,167698,2379],{"emptyLinePlaceholder":17},[92,167700,167701],{"class":94,"line":1591},[92,167702,167550],{"class":1942},[92,167704,167705,167707,167709],{"class":94,"line":1596},[92,167706,31928],{"class":98},[92,167708,5189],{"class":1942},[92,167710,151068],{"class":102},[92,167712,167713,167715,167717,167719],{"class":94,"line":1602},[92,167714,4069],{"class":98},[92,167716,10849],{"class":102},[92,167718,584],{"class":98},[92,167720,151079],{"class":102},[92,167722,167723],{"class":94,"line":1607},[92,167724,2379],{"emptyLinePlaceholder":17},[92,167726,167727],{"class":94,"line":1621},[92,167728,2379],{"emptyLinePlaceholder":17},[92,167730,167731,167733,167735,167737,167739,167741],{"class":94,"line":1626},[92,167732,30396],{"class":151},[92,167734,166575],{"class":102},[92,167736,549],{"class":151},[92,167738,12415],{"class":102},[92,167740,803],{"class":151},[92,167742,30478],{"class":102},[38,167744,167745,167746,100993,167748,167750],{},"这个写法使用 ",[89,167747,166507],{},[89,167749,166622],{}," 接收原函数的所有参数。",[33,167752,167754],{"id":167753},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[38,167756,123267],{},[46,167758,167759,167762,167765],{},[49,167760,167761],{},"给定一组学生数据。",[49,167763,167764],{},"封装函数，根据传入规则筛选学生。",[49,167766,167767],{},"筛选及格、优秀、未成年学生。",[38,167769,10015],{},[83,167771,167773],{"className":30359,"code":167772,"language":30361,"meta":10,"style":10},"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",[89,167774,167775,167783,167811,167839,167867,167871,167875,167879,167889,167897,167907,167914,167919,167925,167929,167933,167957,167980,168003,168007,168014,168021],{"__ignoreMap":10},[92,167776,167777,167779,167781],{"class":94,"line":95},[92,167778,159691],{"class":102},[92,167780,148],{"class":98},[92,167782,55427],{"class":102},[92,167784,167785,167787,167789,167791,167793,167795,167797,167799,167801,167803,167805,167807,167809],{"class":94,"line":11},[92,167786,148360],{"class":102},[92,167788,62659],{"class":207},[92,167790,51417],{"class":102},[92,167792,149863],{"class":207},[92,167794,12415],{"class":102},[92,167796,69104],{"class":207},[92,167798,51417],{"class":102},[92,167800,753],{"class":151},[92,167802,12415],{"class":102},[92,167804,151447],{"class":207},[92,167806,51417],{"class":102},[92,167808,1092],{"class":151},[92,167810,4909],{"class":102},[92,167812,167813,167815,167817,167819,167821,167823,167825,167827,167829,167831,167833,167835,167837],{"class":94,"line":1158},[92,167814,148360],{"class":102},[92,167816,62659],{"class":207},[92,167818,51417],{"class":102},[92,167820,150911],{"class":207},[92,167822,12415],{"class":102},[92,167824,69104],{"class":207},[92,167826,51417],{"class":102},[92,167828,728],{"class":151},[92,167830,12415],{"class":102},[92,167832,151447],{"class":207},[92,167834,51417],{"class":102},[92,167836,914],{"class":151},[92,167838,4909],{"class":102},[92,167840,167841,167843,167845,167847,167849,167851,167853,167855,167857,167859,167861,167863,167865],{"class":94,"line":1173},[92,167842,148360],{"class":102},[92,167844,62659],{"class":207},[92,167846,51417],{"class":102},[92,167848,159706],{"class":207},[92,167850,12415],{"class":102},[92,167852,69104],{"class":207},[92,167854,51417],{"class":102},[92,167856,778],{"class":151},[92,167858,12415],{"class":102},[92,167860,151447],{"class":207},[92,167862,51417],{"class":102},[92,167864,985],{"class":151},[92,167866,4909],{"class":102},[92,167868,167869],{"class":94,"line":1179},[92,167870,33227],{"class":102},[92,167872,167873],{"class":94,"line":1193},[92,167874,2379],{"emptyLinePlaceholder":17},[92,167876,167877],{"class":94,"line":1199},[92,167878,2379],{"emptyLinePlaceholder":17},[92,167880,167881,167883,167886],{"class":94,"line":1290},[92,167882,31928],{"class":98},[92,167884,167885],{"class":1942}," filter_students",[92,167887,167888],{"class":102},"(students, condition):\n",[92,167890,167891,167893,167895],{"class":94,"line":1296},[92,167892,161198],{"class":102},[92,167894,148],{"class":98},[92,167896,51818],{"class":102},[92,167898,167899,167901,167903,167905],{"class":94,"line":1308},[92,167900,3180],{"class":98},[92,167902,152112],{"class":102},[92,167904,26024],{"class":98},[92,167906,152117],{"class":102},[92,167908,167909,167911],{"class":94,"line":1591},[92,167910,2476],{"class":98},[92,167912,167913],{"class":102}," condition(student):\n",[92,167915,167916],{"class":94,"line":1596},[92,167917,167918],{"class":102},"            result.append(student)\n",[92,167920,167921,167923],{"class":94,"line":1602},[92,167922,4069],{"class":98},[92,167924,167680],{"class":102},[92,167926,167927],{"class":94,"line":1607},[92,167928,2379],{"emptyLinePlaceholder":17},[92,167930,167931],{"class":94,"line":1621},[92,167932,2379],{"emptyLinePlaceholder":17},[92,167934,167935,167937,167939,167942,167944,167947,167949,167951,167953,167955],{"class":94,"line":1626},[92,167936,165676],{"class":102},[92,167938,148],{"class":98},[92,167940,167941],{"class":102}," filter_students(students, ",[92,167943,166861],{"class":98},[92,167945,167946],{"class":102}," s: s[",[92,167948,151447],{"class":207},[92,167950,4422],{"class":102},[92,167952,1689],{"class":98},[92,167954,157812],{"class":151},[92,167956,109],{"class":102},[92,167958,167959,167962,167964,167966,167968,167970,167972,167974,167976,167978],{"class":94,"line":1632},[92,167960,167961],{"class":102},"excellent ",[92,167963,148],{"class":98},[92,167965,167941],{"class":102},[92,167967,166861],{"class":98},[92,167969,167946],{"class":102},[92,167971,151447],{"class":207},[92,167973,4422],{"class":102},[92,167975,1689],{"class":98},[92,167977,157763],{"class":151},[92,167979,109],{"class":102},[92,167981,167982,167985,167987,167989,167991,167993,167995,167997,167999,168001],{"class":94,"line":1653},[92,167983,167984],{"class":102},"under_age ",[92,167986,148],{"class":98},[92,167988,167941],{"class":102},[92,167990,166861],{"class":98},[92,167992,167946],{"class":102},[92,167994,69104],{"class":207},[92,167996,4422],{"class":102},[92,167998,1013],{"class":98},[92,168000,156260],{"class":151},[92,168002,109],{"class":102},[92,168004,168005],{"class":94,"line":1658},[92,168006,2379],{"emptyLinePlaceholder":17},[92,168008,168009,168011],{"class":94,"line":1672},[92,168010,30396],{"class":151},[92,168012,168013],{"class":102},"(passed)\n",[92,168015,168016,168018],{"class":94,"line":1677},[92,168017,30396],{"class":151},[92,168019,168020],{"class":102},"(excellent)\n",[92,168022,168023,168025],{"class":94,"line":1706},[92,168024,30396],{"class":151},[92,168026,168027],{"class":102},"(under_age)\n",[33,168029,168031],{"id":168030},"_715-易错点","7.15 易错点",[46,168033,168034,168037,168045,168050,168061],{},[49,168035,168036],{},"默认参数不要写可变对象。",[49,168038,168039,168041,168042,168044],{},[89,168040,166507],{}," 是元组，",[89,168043,166622],{}," 是字典。",[49,168046,168047,168049],{},[89,168048,166861],{}," 只适合简单表达式。",[49,168051,168052,100993,168054,168056,168057,168060],{},[89,168053,74024],{},[89,168055,80031],{}," 的结果是迭代器，常用 ",[89,168058,168059],{},"list()"," 转换查看。",[49,168062,168063],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[33,168065,168067],{"id":168066},"_716-本章练习","7.16 本章练习",[46,168069,168070,168077,168083,168088,168093],{},[49,168071,168072,168073,168076],{},"写函数 ",[89,168074,168075],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[49,168078,168072,168079,168082],{},[89,168080,168081],{},"print_user(**kwargs)","，输出用户所有字段。",[49,168084,104341,168085,168087],{},[89,168086,166861],{}," 对学生列表按年龄排序。",[49,168089,104341,168090,168092],{},[89,168091,80031],{}," 找出成绩不及格的学生。",[49,168094,168095],{},"写一个装饰器，统计函数执行前后的提示信息。",[5106,168097,168098],{},"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":10,"searchDepth":11,"depth":11,"links":168100},[168101,168102,168103,168104,168105,168106,168110,168111,168112,168113,168118,168119,168120,168121,168122,168123],{"id":165959,"depth":11,"text":165960},{"id":166073,"depth":11,"text":166074},{"id":166162,"depth":11,"text":166163},{"id":166224,"depth":11,"text":166225},{"id":166370,"depth":11,"text":166371},{"id":166497,"depth":11,"text":166498,"children":168107},[168108,168109],{"id":166501,"depth":1158,"text":166502},{"id":166616,"depth":1158,"text":166617},{"id":166697,"depth":11,"text":166698},{"id":166855,"depth":11,"text":166856},{"id":167023,"depth":11,"text":167024},{"id":167105,"depth":11,"text":167106,"children":168114},[168115,168116,168117],{"id":167109,"depth":1158,"text":167110},{"id":167180,"depth":1158,"text":167181},{"id":167257,"depth":1158,"text":167258},{"id":167382,"depth":11,"text":167383},{"id":167472,"depth":11,"text":167473},{"id":167603,"depth":11,"text":167604},{"id":167753,"depth":11,"text":167754},{"id":168030,"depth":11,"text":168031},{"id":168066,"depth":11,"text":168067},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165951,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168130,"title":168131,"body":168132,"description":13,"extension":14,"meta":170651,"navigation":17,"path":170652,"seo":170653,"stem":170654,"__hash__":170655},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168133,"toc":170626},[168134,168137,168141,168144,168147,168178,168182,168186,168189,168216,168220,168223,168274,168277,168292,168295,168330,168334,168336,168360,168363,168423,168427,168431,168434,168491,168494,168514,168518,168521,168584,168588,168591,168647,168654,168678,168682,168685,168748,168752,168757,168808,168811,168815,168820,168887,168890,168972,168976,168981,169032,169035,169039,169042,169045,169053,169056,169102,169105,169151,169155,169161,169205,169208,169254,169257,169297,169300,169361,169365,169368,169458,169461,169603,169606,169673,169677,169680,169683,169824,169827,169905,169908,170084,170088,170090,170101,170103,170302,170306,170550,170554,170588,170592,170623],[29,168135,168131],{"id":168136},"_8-文件操作",[33,168138,168140],{"id":168139},"_81-文件操作的意义","8.1 文件操作的意义",[38,168142,168143],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[38,168145,168146],{},"常见文件类型：",[46,168148,168149,168155,168161,168167,168173],{},[49,168150,168151,168154],{},[89,168152,168153],{},".txt","：普通文本。",[49,168156,168157,168160],{},[89,168158,168159],{},".csv","：表格文本。",[49,168162,168163,168166],{},[89,168164,168165],{},".json","：结构化数据。",[49,168168,168169,168172],{},[89,168170,168171],{},".log","：日志文件。",[49,168174,168175,168177],{},[89,168176,146327],{},"：Python 源代码。",[33,168179,168181],{"id":168180},"_82-路径","8.2 路径",[63,168183,168185],{"id":168184},"_821-相对路径","8.2.1 相对路径",[38,168187,168188],{},"相对当前运行目录：",[83,168190,168192],{"className":30359,"code":168191,"language":30361,"meta":10,"style":10},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[89,168193,168194],{"__ignoreMap":10},[92,168195,168196,168198,168200,168202,168204,168206,168208,168210,168212,168214],{"class":94,"line":95},[92,168197,86895],{"class":151},[92,168199,103],{"class":102},[92,168201,146771],{"class":207},[92,168203,12415],{"class":102},[92,168205,146776],{"class":207},[92,168207,12415],{"class":102},[92,168209,146781],{"class":5196},[92,168211,148],{"class":98},[92,168213,146786],{"class":207},[92,168215,109],{"class":102},[63,168217,168219],{"id":168218},"_822-绝对路径","8.2.2 绝对路径",[38,168221,168222],{},"从根目录或盘符开始：",[83,168224,168226],{"className":30359,"code":168225,"language":30361,"meta":10,"style":10},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[89,168227,168228,168251],{"__ignoreMap":10},[92,168229,168230,168232,168234,168237,168239,168241,168243,168245,168247,168249],{"class":94,"line":95},[92,168231,86895],{"class":151},[92,168233,103],{"class":102},[92,168235,168236],{"class":207},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[92,168238,12415],{"class":102},[92,168240,146776],{"class":207},[92,168242,12415],{"class":102},[92,168244,146781],{"class":5196},[92,168246,148],{"class":98},[92,168248,146786],{"class":207},[92,168250,109],{"class":102},[92,168252,168253,168255,168257,168260,168262,168264,168266,168268,168270,168272],{"class":94,"line":11},[92,168254,86895],{"class":151},[92,168256,103],{"class":102},[92,168258,168259],{"class":207},"\"D:\u002Fdata\u002Fdata.txt\"",[92,168261,12415],{"class":102},[92,168263,146776],{"class":207},[92,168265,12415],{"class":102},[92,168267,146781],{"class":5196},[92,168269,148],{"class":98},[92,168271,146786],{"class":207},[92,168273,109],{"class":102},[38,168275,168276],{},"Windows 路径建议写成：",[83,168278,168280],{"className":30359,"code":168279,"language":30361,"meta":10,"style":10},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[89,168281,168282],{"__ignoreMap":10},[92,168283,168284,168287,168289],{"class":94,"line":95},[92,168285,168286],{"class":102},"path ",[92,168288,148],{"class":98},[92,168290,168291],{"class":207}," \"D:\u002Fdata\u002Fdata.txt\"\n",[38,168293,168294],{},"或原始字符串：",[83,168296,168298],{"className":30359,"code":168297,"language":30361,"meta":10,"style":10},"path = r\"D:\\data\\data.txt\"\n",[89,168299,168300],{"__ignoreMap":10},[92,168301,168302,168304,168306,168308,168310,168313,168316,168319,168321,168323,168325,168328],{"class":94,"line":95},[92,168303,168286],{"class":102},[92,168305,148],{"class":98},[92,168307,17101],{"class":98},[92,168309,354],{"class":207},[92,168311,168312],{"class":47958},"D:",[92,168314,168315],{"class":151},"\\d",[92,168317,168318],{"class":47958},"ata",[92,168320,168315],{"class":151},[92,168322,168318],{"class":47958},[92,168324,661],{"class":151},[92,168326,168327],{"class":47958},"txt",[92,168329,25114],{"class":207},[33,168331,168333],{"id":168332},"_83-open函数","8.3 open函数",[38,168335,5161],{},[83,168337,168339],{"className":30359,"code":168338,"language":30361,"meta":10,"style":10},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[89,168340,168341],{"__ignoreMap":10},[92,168342,168343,168345,168347,168349,168352,168354,168356,168358],{"class":94,"line":95},[92,168344,45335],{"class":5196},[92,168346,13544],{"class":98},[92,168348,146766],{"class":151},[92,168350,168351],{"class":102},"(文件路径, 打开模式, ",[92,168353,146781],{"class":5196},[92,168355,148],{"class":98},[92,168357,146786],{"class":207},[92,168359,109],{"class":102},[38,168361,168362],{},"常见模式：",[240,168364,168365,168374],{},[243,168366,168367],{},[246,168368,168369,168372],{},[249,168370,168371],{},"模式",[249,168373,25850],{},[287,168375,168376,168385,168394,168403,168413],{},[246,168377,168378,168382],{},[292,168379,168380],{},[89,168381,773],{},[292,168383,168384],{},"只读，文件不存在会报错",[246,168386,168387,168391],{},[292,168388,168389],{},[89,168390,898],{},[292,168392,168393],{},"只写，文件不存在会创建，存在会清空",[246,168395,168396,168400],{},[292,168397,168398],{},[89,168399,341],{},[292,168401,168402],{},"追加，文件不存在会创建",[246,168404,168405,168410],{},[292,168406,168407],{},[89,168408,168409],{},"rb",[292,168411,168412],{},"二进制只读",[246,168414,168415,168420],{},[292,168416,168417],{},[89,168418,168419],{},"wb",[292,168421,168422],{},"二进制只写",[33,168424,168426],{"id":168425},"_84-读取文件","8.4 读取文件",[63,168428,168430],{"id":168429},"_841-read","8.4.1 read",[38,168432,168433],{},"一次读取全部内容：",[83,168435,168437],{"className":30359,"code":168436,"language":30361,"meta":10,"style":10},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[89,168438,168439,168465,168477,168484],{"__ignoreMap":10},[92,168440,168441,168443,168445,168447,168449,168451,168453,168455,168457,168459,168461,168463],{"class":94,"line":95},[92,168442,45335],{"class":5196},[92,168444,13544],{"class":98},[92,168446,146766],{"class":151},[92,168448,103],{"class":102},[92,168450,146771],{"class":207},[92,168452,12415],{"class":102},[92,168454,146776],{"class":207},[92,168456,12415],{"class":102},[92,168458,146781],{"class":5196},[92,168460,148],{"class":98},[92,168462,146786],{"class":207},[92,168464,109],{"class":102},[92,168466,168467,168470,168472,168474],{"class":94,"line":11},[92,168468,168469],{"class":102},"content ",[92,168471,148],{"class":98},[92,168473,148128],{"class":5196},[92,168475,168476],{"class":102},".read()\n",[92,168478,168479,168481],{"class":94,"line":1158},[92,168480,30396],{"class":151},[92,168482,168483],{"class":102},"(content)\n",[92,168485,168486,168488],{"class":94,"line":1173},[92,168487,45335],{"class":5196},[92,168489,168490],{"class":102},".close()\n",[38,168492,168493],{},"可以指定读取字符数：",[83,168495,168497],{"className":30359,"code":168496,"language":30361,"meta":10,"style":10},"content = file.read(10)\n",[89,168498,168499],{"__ignoreMap":10},[92,168500,168501,168503,168505,168507,168510,168512],{"class":94,"line":95},[92,168502,168469],{"class":102},[92,168504,148],{"class":98},[92,168506,148128],{"class":5196},[92,168508,168509],{"class":102},".read(",[92,168511,549],{"class":151},[92,168513,109],{"class":102},[63,168515,168517],{"id":168516},"_842-readline","8.4.2 readline",[38,168519,168520],{},"一次读取一行：",[83,168522,168524],{"className":30359,"code":168523,"language":30361,"meta":10,"style":10},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[89,168525,168526,168552,168556,168567,168574,168578],{"__ignoreMap":10},[92,168527,168528,168530,168532,168534,168536,168538,168540,168542,168544,168546,168548,168550],{"class":94,"line":95},[92,168529,45335],{"class":5196},[92,168531,13544],{"class":98},[92,168533,146766],{"class":151},[92,168535,103],{"class":102},[92,168537,146771],{"class":207},[92,168539,12415],{"class":102},[92,168541,146776],{"class":207},[92,168543,12415],{"class":102},[92,168545,146781],{"class":5196},[92,168547,148],{"class":98},[92,168549,146786],{"class":207},[92,168551,109],{"class":102},[92,168553,168554],{"class":94,"line":11},[92,168555,2379],{"emptyLinePlaceholder":17},[92,168557,168558,168560,168562,168564],{"class":94,"line":1158},[92,168559,147227],{"class":102},[92,168561,148],{"class":98},[92,168563,148128],{"class":5196},[92,168565,168566],{"class":102},".readline()\n",[92,168568,168569,168571],{"class":94,"line":1173},[92,168570,30396],{"class":151},[92,168572,168573],{"class":102},"(line)\n",[92,168575,168576],{"class":94,"line":1179},[92,168577,2379],{"emptyLinePlaceholder":17},[92,168579,168580,168582],{"class":94,"line":1193},[92,168581,45335],{"class":5196},[92,168583,168490],{"class":102},[63,168585,168587],{"id":168586},"_843-readlines","8.4.3 readlines",[38,168589,168590],{},"读取所有行，返回列表：",[83,168592,168594],{"className":30359,"code":168593,"language":30361,"meta":10,"style":10},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[89,168595,168596,168622,168634,168641],{"__ignoreMap":10},[92,168597,168598,168600,168602,168604,168606,168608,168610,168612,168614,168616,168618,168620],{"class":94,"line":95},[92,168599,45335],{"class":5196},[92,168601,13544],{"class":98},[92,168603,146766],{"class":151},[92,168605,103],{"class":102},[92,168607,146771],{"class":207},[92,168609,12415],{"class":102},[92,168611,146776],{"class":207},[92,168613,12415],{"class":102},[92,168615,146781],{"class":5196},[92,168617,148],{"class":98},[92,168619,146786],{"class":207},[92,168621,109],{"class":102},[92,168623,168624,168627,168629,168631],{"class":94,"line":11},[92,168625,168626],{"class":102},"lines ",[92,168628,148],{"class":98},[92,168630,148128],{"class":5196},[92,168632,168633],{"class":102},".readlines()\n",[92,168635,168636,168638],{"class":94,"line":1158},[92,168637,30396],{"class":151},[92,168639,168640],{"class":102},"(lines)\n",[92,168642,168643,168645],{"class":94,"line":1173},[92,168644,45335],{"class":5196},[92,168646,168490],{"class":102},[38,168648,168649,168650,168653],{},"每一行通常带有换行符，可以用 ",[89,168651,168652],{},"strip()"," 去掉：",[83,168655,168657],{"className":30359,"code":168656,"language":30361,"meta":10,"style":10},"for line in lines:\n    print(line.strip())\n",[89,168658,168659,168671],{"__ignoreMap":10},[92,168660,168661,168663,168666,168668],{"class":94,"line":95},[92,168662,3004],{"class":98},[92,168664,168665],{"class":102}," line ",[92,168667,26024],{"class":98},[92,168669,168670],{"class":102}," lines:\n",[92,168672,168673,168675],{"class":94,"line":11},[92,168674,31280],{"class":151},[92,168676,168677],{"class":102},"(line.strip())\n",[63,168679,168681],{"id":168680},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[38,168683,168684],{},"推荐读取大文件时使用：",[83,168686,168688],{"className":30359,"code":168687,"language":30361,"meta":10,"style":10},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[89,168689,168690,168716,168720,168732,168738,168742],{"__ignoreMap":10},[92,168691,168692,168694,168696,168698,168700,168702,168704,168706,168708,168710,168712,168714],{"class":94,"line":95},[92,168693,45335],{"class":5196},[92,168695,13544],{"class":98},[92,168697,146766],{"class":151},[92,168699,103],{"class":102},[92,168701,146771],{"class":207},[92,168703,12415],{"class":102},[92,168705,146776],{"class":207},[92,168707,12415],{"class":102},[92,168709,146781],{"class":5196},[92,168711,148],{"class":98},[92,168713,146786],{"class":207},[92,168715,109],{"class":102},[92,168717,168718],{"class":94,"line":11},[92,168719,2379],{"emptyLinePlaceholder":17},[92,168721,168722,168724,168726,168728,168730],{"class":94,"line":1158},[92,168723,3004],{"class":98},[92,168725,168665],{"class":102},[92,168727,26024],{"class":98},[92,168729,148128],{"class":5196},[92,168731,3718],{"class":102},[92,168733,168734,168736],{"class":94,"line":1173},[92,168735,31280],{"class":151},[92,168737,168677],{"class":102},[92,168739,168740],{"class":94,"line":1179},[92,168741,2379],{"emptyLinePlaceholder":17},[92,168743,168744,168746],{"class":94,"line":1193},[92,168745,45335],{"class":5196},[92,168747,168490],{"class":102},[33,168749,168751],{"id":168750},"_85-with语句","8.5 with语句",[38,168753,168754,168756],{},[89,168755,107808],{}," 会自动关闭文件，推荐使用。",[83,168758,168760],{"className":30359,"code":168759,"language":30361,"meta":10,"style":10},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[89,168761,168762,168792,168802],{"__ignoreMap":10},[92,168763,168764,168766,168768,168770,168772,168774,168776,168778,168780,168782,168784,168786,168788,168790],{"class":94,"line":95},[92,168765,107808],{"class":98},[92,168767,146766],{"class":151},[92,168769,103],{"class":102},[92,168771,146771],{"class":207},[92,168773,12415],{"class":102},[92,168775,146776],{"class":207},[92,168777,12415],{"class":102},[92,168779,146781],{"class":5196},[92,168781,148],{"class":98},[92,168783,146786],{"class":207},[92,168785,13694],{"class":102},[92,168787,31364],{"class":98},[92,168789,148128],{"class":5196},[92,168791,3718],{"class":102},[92,168793,168794,168796,168798,168800],{"class":94,"line":11},[92,168795,146798],{"class":102},[92,168797,148],{"class":98},[92,168799,148128],{"class":5196},[92,168801,168476],{"class":102},[92,168803,168804,168806],{"class":94,"line":1158},[92,168805,31280],{"class":151},[92,168807,168483],{"class":102},[38,168809,168810],{},"等价于打开文件、读取、最后关闭，但更安全。",[33,168812,168814],{"id":168813},"_86-写入文件","8.6 写入文件",[38,168816,168817,168819],{},[89,168818,898],{}," 模式会清空原文件。",[83,168821,168823],{"className":30359,"code":168822,"language":30361,"meta":10,"style":10},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[89,168824,168825,168855,168872],{"__ignoreMap":10},[92,168826,168827,168829,168831,168833,168835,168837,168839,168841,168843,168845,168847,168849,168851,168853],{"class":94,"line":95},[92,168828,107808],{"class":98},[92,168830,146766],{"class":151},[92,168832,103],{"class":102},[92,168834,146771],{"class":207},[92,168836,12415],{"class":102},[92,168838,151951],{"class":207},[92,168840,12415],{"class":102},[92,168842,146781],{"class":5196},[92,168844,148],{"class":98},[92,168846,146786],{"class":207},[92,168848,13694],{"class":102},[92,168850,31364],{"class":98},[92,168852,148128],{"class":5196},[92,168854,3718],{"class":102},[92,168856,168857,168860,168863,168866,168868,168870],{"class":94,"line":11},[92,168858,168859],{"class":5196},"    file",[92,168861,168862],{"class":102},".write(",[92,168864,168865],{"class":207},"\"hello",[92,168867,156500],{"class":151},[92,168869,354],{"class":207},[92,168871,109],{"class":102},[92,168873,168874,168876,168878,168881,168883,168885],{"class":94,"line":1158},[92,168875,168859],{"class":5196},[92,168877,168862],{"class":102},[92,168879,168880],{"class":207},"\"python",[92,168882,156500],{"class":151},[92,168884,354],{"class":207},[92,168886,109],{"class":102},[38,168888,168889],{},"写入多行：",[83,168891,168893],{"className":30359,"code":168892,"language":30361,"meta":10,"style":10},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[89,168894,168895,168930,168934,168965],{"__ignoreMap":10},[92,168896,168897,168899,168901,168903,168906,168908,168910,168912,168915,168917,168919,168921,168924,168926,168928],{"class":94,"line":95},[92,168898,168626],{"class":102},[92,168900,148],{"class":98},[92,168902,52206],{"class":102},[92,168904,168905],{"class":207},"\"小明,18",[92,168907,156500],{"class":151},[92,168909,354],{"class":207},[92,168911,12415],{"class":102},[92,168913,168914],{"class":207},"\"小红,17",[92,168916,156500],{"class":151},[92,168918,354],{"class":207},[92,168920,12415],{"class":102},[92,168922,168923],{"class":207},"\"小刚,19",[92,168925,156500],{"class":151},[92,168927,354],{"class":207},[92,168929,33227],{"class":102},[92,168931,168932],{"class":94,"line":11},[92,168933,2379],{"emptyLinePlaceholder":17},[92,168935,168936,168938,168940,168942,168945,168947,168949,168951,168953,168955,168957,168959,168961,168963],{"class":94,"line":1158},[92,168937,107808],{"class":98},[92,168939,146766],{"class":151},[92,168941,103],{"class":102},[92,168943,168944],{"class":207},"\"students.txt\"",[92,168946,12415],{"class":102},[92,168948,151951],{"class":207},[92,168950,12415],{"class":102},[92,168952,146781],{"class":5196},[92,168954,148],{"class":98},[92,168956,146786],{"class":207},[92,168958,13694],{"class":102},[92,168960,31364],{"class":98},[92,168962,148128],{"class":5196},[92,168964,3718],{"class":102},[92,168966,168967,168969],{"class":94,"line":1173},[92,168968,168859],{"class":5196},[92,168970,168971],{"class":102},".writelines(lines)\n",[33,168973,168975],{"id":168974},"_87-追加文件","8.7 追加文件",[38,168977,168978,168980],{},[89,168979,341],{}," 模式不会清空原内容，而是在末尾追加。",[83,168982,168984],{"className":30359,"code":168983,"language":30361,"meta":10,"style":10},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[89,168985,168986,169017],{"__ignoreMap":10},[92,168987,168988,168990,168992,168994,168997,168999,169001,169003,169005,169007,169009,169011,169013,169015],{"class":94,"line":95},[92,168989,107808],{"class":98},[92,168991,146766],{"class":151},[92,168993,103],{"class":102},[92,168995,168996],{"class":207},"\"log.txt\"",[92,168998,12415],{"class":102},[92,169000,165300],{"class":207},[92,169002,12415],{"class":102},[92,169004,146781],{"class":5196},[92,169006,148],{"class":98},[92,169008,146786],{"class":207},[92,169010,13694],{"class":102},[92,169012,31364],{"class":98},[92,169014,148128],{"class":5196},[92,169016,3718],{"class":102},[92,169018,169019,169021,169023,169026,169028,169030],{"class":94,"line":11},[92,169020,168859],{"class":5196},[92,169022,168862],{"class":102},[92,169024,169025],{"class":207},"\"程序启动",[92,169027,156500],{"class":151},[92,169029,354],{"class":207},[92,169031,109],{"class":102},[38,169033,169034],{},"日志类文件常用追加模式。",[33,169036,169038],{"id":169037},"_88-文件编码","8.8 文件编码",[38,169040,169041],{},"编码决定文字如何保存为字节。",[38,169043,169044],{},"常见编码：",[46,169046,169047,169050],{},[49,169048,169049],{},"UTF-8：推荐。",[49,169051,169052],{},"GBK：部分 Windows 中文文件常见。",[38,169054,169055],{},"读取文件乱码时，可以尝试：",[83,169057,169059],{"className":30359,"code":169058,"language":30361,"meta":10,"style":10},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[89,169060,169061,169092],{"__ignoreMap":10},[92,169062,169063,169065,169067,169069,169071,169073,169075,169077,169079,169081,169084,169086,169088,169090],{"class":94,"line":95},[92,169064,107808],{"class":98},[92,169066,146766],{"class":151},[92,169068,103],{"class":102},[92,169070,146771],{"class":207},[92,169072,12415],{"class":102},[92,169074,146776],{"class":207},[92,169076,12415],{"class":102},[92,169078,146781],{"class":5196},[92,169080,148],{"class":98},[92,169082,169083],{"class":207},"\"gbk\"",[92,169085,13694],{"class":102},[92,169087,31364],{"class":98},[92,169089,148128],{"class":5196},[92,169091,3718],{"class":102},[92,169093,169094,169096,169098,169100],{"class":94,"line":11},[92,169095,146798],{"class":102},[92,169097,148],{"class":98},[92,169099,148128],{"class":5196},[92,169101,168476],{"class":102},[38,169103,169104],{},"写文件时建议统一 UTF-8：",[83,169106,169108],{"className":30359,"code":169107,"language":30361,"meta":10,"style":10},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[89,169109,169110,169140],{"__ignoreMap":10},[92,169111,169112,169114,169116,169118,169120,169122,169124,169126,169128,169130,169132,169134,169136,169138],{"class":94,"line":95},[92,169113,107808],{"class":98},[92,169115,146766],{"class":151},[92,169117,103],{"class":102},[92,169119,146771],{"class":207},[92,169121,12415],{"class":102},[92,169123,151951],{"class":207},[92,169125,12415],{"class":102},[92,169127,146781],{"class":5196},[92,169129,148],{"class":98},[92,169131,146786],{"class":207},[92,169133,13694],{"class":102},[92,169135,31364],{"class":98},[92,169137,148128],{"class":5196},[92,169139,3718],{"class":102},[92,169141,169142,169144,169146,169149],{"class":94,"line":11},[92,169143,168859],{"class":5196},[92,169145,168862],{"class":102},[92,169147,169148],{"class":207},"\"中文内容\"",[92,169150,109],{"class":102},[33,169152,169154],{"id":169153},"_89-pathlib","8.9 pathlib",[38,169156,169157,169160],{},[89,169158,169159],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[83,169162,169164],{"className":30359,"code":169163,"language":30361,"meta":10,"style":10},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[89,169165,169166,169176,169180,169198],{"__ignoreMap":10},[92,169167,169168,169170,169172,169174],{"class":94,"line":95},[92,169169,30718],{"class":98},[92,169171,108286],{"class":102},[92,169173,30373],{"class":98},[92,169175,108291],{"class":102},[92,169177,169178],{"class":94,"line":11},[92,169179,2379],{"emptyLinePlaceholder":17},[92,169181,169182,169184,169186,169188,169191,169193,169195],{"class":94,"line":1158},[92,169183,168286],{"class":102},[92,169185,148],{"class":98},[92,169187,108520],{"class":102},[92,169189,169190],{"class":207},"\"data\"",[92,169192,13694],{"class":102},[92,169194,687],{"class":98},[92,169196,169197],{"class":207}," \"students.txt\"\n",[92,169199,169200,169202],{"class":94,"line":1173},[92,169201,30396],{"class":151},[92,169203,169204],{"class":102},"(path)\n",[38,169206,169207],{},"创建目录：",[83,169209,169211],{"className":30359,"code":169210,"language":30361,"meta":10,"style":10},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[89,169212,169213,169223,169227,169240],{"__ignoreMap":10},[92,169214,169215,169217,169219,169221],{"class":94,"line":95},[92,169216,30718],{"class":98},[92,169218,108286],{"class":102},[92,169220,30373],{"class":98},[92,169222,108291],{"class":102},[92,169224,169225],{"class":94,"line":11},[92,169226,2379],{"emptyLinePlaceholder":17},[92,169228,169229,169232,169234,169236,169238],{"class":94,"line":1158},[92,169230,169231],{"class":102},"data_dir ",[92,169233,148],{"class":98},[92,169235,108520],{"class":102},[92,169237,169190],{"class":207},[92,169239,109],{"class":102},[92,169241,169242,169245,169248,169250,169252],{"class":94,"line":1173},[92,169243,169244],{"class":102},"data_dir.mkdir(",[92,169246,169247],{"class":5196},"exist_ok",[92,169249,148],{"class":98},[92,169251,31457],{"class":151},[92,169253,109],{"class":102},[38,169255,169256],{},"判断文件是否存在：",[83,169258,169260],{"className":30359,"code":169259,"language":30361,"meta":10,"style":10},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[89,169261,169262,169275,169279,169286],{"__ignoreMap":10},[92,169263,169264,169266,169268,169270,169273],{"class":94,"line":95},[92,169265,168286],{"class":102},[92,169267,148],{"class":98},[92,169269,108520],{"class":102},[92,169271,169272],{"class":207},"\"data\u002Fstudents.txt\"",[92,169274,109],{"class":102},[92,169276,169277],{"class":94,"line":11},[92,169278,2379],{"emptyLinePlaceholder":17},[92,169280,169281,169283],{"class":94,"line":1158},[92,169282,1510],{"class":98},[92,169284,169285],{"class":102}," path.exists():\n",[92,169287,169288,169290,169292,169295],{"class":94,"line":1173},[92,169289,31280],{"class":151},[92,169291,103],{"class":102},[92,169293,169294],{"class":207},"\"文件存在\"",[92,169296,109],{"class":102},[38,169298,169299],{},"读写文本：",[83,169301,169303],{"className":30359,"code":169302,"language":30361,"meta":10,"style":10},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[89,169304,169305,169317,169321,169338,169355],{"__ignoreMap":10},[92,169306,169307,169309,169311,169313,169315],{"class":94,"line":95},[92,169308,168286],{"class":102},[92,169310,148],{"class":98},[92,169312,108520],{"class":102},[92,169314,146771],{"class":207},[92,169316,109],{"class":102},[92,169318,169319],{"class":94,"line":11},[92,169320,2379],{"emptyLinePlaceholder":17},[92,169322,169323,169326,169328,169330,169332,169334,169336],{"class":94,"line":1158},[92,169324,169325],{"class":102},"path.write_text(",[92,169327,145851],{"class":207},[92,169329,12415],{"class":102},[92,169331,146781],{"class":5196},[92,169333,148],{"class":98},[92,169335,146786],{"class":207},[92,169337,109],{"class":102},[92,169339,169340,169342,169344,169347,169349,169351,169353],{"class":94,"line":1173},[92,169341,168469],{"class":102},[92,169343,148],{"class":98},[92,169345,169346],{"class":102}," path.read_text(",[92,169348,146781],{"class":5196},[92,169350,148],{"class":98},[92,169352,146786],{"class":207},[92,169354,109],{"class":102},[92,169356,169357,169359],{"class":94,"line":1179},[92,169358,30396],{"class":151},[92,169360,168483],{"class":102},[33,169362,169364],{"id":169363},"_810-json文件","8.10 JSON文件",[38,169366,169367],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[83,169369,169371],{"className":30359,"code":169370,"language":30361,"meta":10,"style":10},"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",[89,169372,169373,169379,169383,169391,169401,169411,169419,169423,169427,169452],{"__ignoreMap":10},[92,169374,169375,169377],{"class":94,"line":95},[92,169376,30373],{"class":98},[92,169378,147066],{"class":102},[92,169380,169381],{"class":94,"line":11},[92,169382,2379],{"emptyLinePlaceholder":17},[92,169384,169385,169387,169389],{"class":94,"line":1158},[92,169386,149456],{"class":102},[92,169388,148],{"class":98},[92,169390,15552],{"class":102},[92,169392,169393,169395,169397,169399],{"class":94,"line":1173},[92,169394,146995],{"class":207},[92,169396,51417],{"class":102},[92,169398,149863],{"class":207},[92,169400,31447],{"class":102},[92,169402,169403,169405,169407,169409],{"class":94,"line":1179},[92,169404,164512],{"class":207},[92,169406,51417],{"class":102},[92,169408,753],{"class":151},[92,169410,31447],{"class":102},[92,169412,169413,169415,169417],{"class":94,"line":1193},[92,169414,164523],{"class":207},[92,169416,51417],{"class":102},[92,169418,164528],{"class":151},[92,169420,169421],{"class":94,"line":1199},[92,169422,1544],{"class":102},[92,169424,169425],{"class":94,"line":1290},[92,169426,2379],{"emptyLinePlaceholder":17},[92,169428,169429,169431,169433,169436,169438,169440,169442,169444,169446,169448,169450],{"class":94,"line":1296},[92,169430,156419],{"class":102},[92,169432,148],{"class":98},[92,169434,169435],{"class":102}," json.dumps(student, ",[92,169437,147112],{"class":5196},[92,169439,148],{"class":98},[92,169441,33968],{"class":151},[92,169443,12415],{"class":102},[92,169445,151987],{"class":5196},[92,169447,148],{"class":98},[92,169449,180],{"class":151},[92,169451,109],{"class":102},[92,169453,169454,169456],{"class":94,"line":1308},[92,169455,30396],{"class":151},[92,169457,164046],{"class":102},[38,169459,169460],{},"写入 JSON 文件：",[83,169462,169464],{"className":30359,"code":169463,"language":30361,"meta":10,"style":10},"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",[89,169465,169466,169472,169476,169484,169512,169540,169544,169548,169578],{"__ignoreMap":10},[92,169467,169468,169470],{"class":94,"line":95},[92,169469,30373],{"class":98},[92,169471,147066],{"class":102},[92,169473,169474],{"class":94,"line":11},[92,169475,2379],{"emptyLinePlaceholder":17},[92,169477,169478,169480,169482],{"class":94,"line":1158},[92,169479,159691],{"class":102},[92,169481,148],{"class":98},[92,169483,55427],{"class":102},[92,169485,169486,169488,169490,169492,169494,169496,169498,169500,169502,169504,169506,169508,169510],{"class":94,"line":1173},[92,169487,148360],{"class":102},[92,169489,62659],{"class":207},[92,169491,51417],{"class":102},[92,169493,149863],{"class":207},[92,169495,12415],{"class":102},[92,169497,69104],{"class":207},[92,169499,51417],{"class":102},[92,169501,753],{"class":151},[92,169503,12415],{"class":102},[92,169505,151447],{"class":207},[92,169507,51417],{"class":102},[92,169509,1092],{"class":151},[92,169511,4909],{"class":102},[92,169513,169514,169516,169518,169520,169522,169524,169526,169528,169530,169532,169534,169536,169538],{"class":94,"line":1179},[92,169515,148360],{"class":102},[92,169517,62659],{"class":207},[92,169519,51417],{"class":102},[92,169521,150911],{"class":207},[92,169523,12415],{"class":102},[92,169525,69104],{"class":207},[92,169527,51417],{"class":102},[92,169529,728],{"class":151},[92,169531,12415],{"class":102},[92,169533,151447],{"class":207},[92,169535,51417],{"class":102},[92,169537,914],{"class":151},[92,169539,4909],{"class":102},[92,169541,169542],{"class":94,"line":1193},[92,169543,33227],{"class":102},[92,169545,169546],{"class":94,"line":1199},[92,169547,2379],{"emptyLinePlaceholder":17},[92,169549,169550,169552,169554,169556,169558,169560,169562,169564,169566,169568,169570,169572,169574,169576],{"class":94,"line":1290},[92,169551,107808],{"class":98},[92,169553,146766],{"class":151},[92,169555,103],{"class":102},[92,169557,151806],{"class":207},[92,169559,12415],{"class":102},[92,169561,151951],{"class":207},[92,169563,12415],{"class":102},[92,169565,146781],{"class":5196},[92,169567,148],{"class":98},[92,169569,146786],{"class":207},[92,169571,13694],{"class":102},[92,169573,31364],{"class":98},[92,169575,148128],{"class":5196},[92,169577,3718],{"class":102},[92,169579,169580,169583,169585,169587,169589,169591,169593,169595,169597,169599,169601],{"class":94,"line":1296},[92,169581,169582],{"class":102},"    json.dump(students, ",[92,169584,45335],{"class":5196},[92,169586,12415],{"class":102},[92,169588,147112],{"class":5196},[92,169590,148],{"class":98},[92,169592,33968],{"class":151},[92,169594,12415],{"class":102},[92,169596,151987],{"class":5196},[92,169598,148],{"class":98},[92,169600,180],{"class":151},[92,169602,109],{"class":102},[38,169604,169605],{},"读取 JSON 文件：",[83,169607,169609],{"className":30359,"code":169608,"language":30361,"meta":10,"style":10},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[89,169610,169611,169617,169621,169651,169663,169667],{"__ignoreMap":10},[92,169612,169613,169615],{"class":94,"line":95},[92,169614,30373],{"class":98},[92,169616,147066],{"class":102},[92,169618,169619],{"class":94,"line":11},[92,169620,2379],{"emptyLinePlaceholder":17},[92,169622,169623,169625,169627,169629,169631,169633,169635,169637,169639,169641,169643,169645,169647,169649],{"class":94,"line":1158},[92,169624,107808],{"class":98},[92,169626,146766],{"class":151},[92,169628,103],{"class":102},[92,169630,151806],{"class":207},[92,169632,12415],{"class":102},[92,169634,146776],{"class":207},[92,169636,12415],{"class":102},[92,169638,146781],{"class":5196},[92,169640,148],{"class":98},[92,169642,146786],{"class":207},[92,169644,13694],{"class":102},[92,169646,31364],{"class":98},[92,169648,148128],{"class":5196},[92,169650,3718],{"class":102},[92,169652,169653,169655,169657,169659,169661],{"class":94,"line":1173},[92,169654,153012],{"class":102},[92,169656,148],{"class":98},[92,169658,148139],{"class":102},[92,169660,45335],{"class":5196},[92,169662,109],{"class":102},[92,169664,169665],{"class":94,"line":1179},[92,169666,2379],{"emptyLinePlaceholder":17},[92,169668,169669,169671],{"class":94,"line":1193},[92,169670,30396],{"class":151},[92,169672,164970],{"class":102},[33,169674,169676],{"id":169675},"_811-csv文件","8.11 CSV文件",[38,169678,169679],{},"CSV 是逗号分隔值，常用于表格数据。",[38,169681,169682],{},"写入 CSV：",[83,169684,169686],{"className":30359,"code":169685,"language":30361,"meta":10,"style":10},"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",[89,169687,169688,169695,169699,169707,169725,169741,169757,169761,169765,169805,169819],{"__ignoreMap":10},[92,169689,169690,169692],{"class":94,"line":95},[92,169691,30373],{"class":98},[92,169693,169694],{"class":102}," csv\n",[92,169696,169697],{"class":94,"line":11},[92,169698,2379],{"emptyLinePlaceholder":17},[92,169700,169701,169703,169705],{"class":94,"line":1158},[92,169702,159691],{"class":102},[92,169704,148],{"class":98},[92,169706,55427],{"class":102},[92,169708,169709,169712,169714,169716,169718,169720,169723],{"class":94,"line":1173},[92,169710,169711],{"class":102},"    [",[92,169713,73079],{"class":207},[92,169715,12415],{"class":102},[92,169717,73112],{"class":207},[92,169719,12415],{"class":102},[92,169721,169722],{"class":207},"\"成绩\"",[92,169724,87816],{"class":102},[92,169726,169727,169729,169731,169733,169735,169737,169739],{"class":94,"line":1179},[92,169728,169711],{"class":102},[92,169730,149863],{"class":207},[92,169732,12415],{"class":102},[92,169734,753],{"class":151},[92,169736,12415],{"class":102},[92,169738,1092],{"class":151},[92,169740,87816],{"class":102},[92,169742,169743,169745,169747,169749,169751,169753,169755],{"class":94,"line":1193},[92,169744,169711],{"class":102},[92,169746,150911],{"class":207},[92,169748,12415],{"class":102},[92,169750,728],{"class":151},[92,169752,12415],{"class":102},[92,169754,914],{"class":151},[92,169756,87816],{"class":102},[92,169758,169759],{"class":94,"line":1199},[92,169760,33227],{"class":102},[92,169762,169763],{"class":94,"line":1290},[92,169764,2379],{"emptyLinePlaceholder":17},[92,169766,169767,169769,169771,169773,169776,169778,169780,169782,169784,169786,169788,169790,169793,169795,169797,169799,169801,169803],{"class":94,"line":1296},[92,169768,107808],{"class":98},[92,169770,146766],{"class":151},[92,169772,103],{"class":102},[92,169774,169775],{"class":207},"\"students.csv\"",[92,169777,12415],{"class":102},[92,169779,151951],{"class":207},[92,169781,12415],{"class":102},[92,169783,146781],{"class":5196},[92,169785,148],{"class":98},[92,169787,146786],{"class":207},[92,169789,12415],{"class":102},[92,169791,169792],{"class":5196},"newline",[92,169794,148],{"class":98},[92,169796,7632],{"class":207},[92,169798,13694],{"class":102},[92,169800,31364],{"class":98},[92,169802,148128],{"class":5196},[92,169804,3718],{"class":102},[92,169806,169807,169810,169812,169815,169817],{"class":94,"line":1308},[92,169808,169809],{"class":102},"    writer ",[92,169811,148],{"class":98},[92,169813,169814],{"class":102}," csv.writer(",[92,169816,45335],{"class":5196},[92,169818,109],{"class":102},[92,169820,169821],{"class":94,"line":1591},[92,169822,169823],{"class":102},"    writer.writerows(students)\n",[38,169825,169826],{},"读取 CSV：",[83,169828,169830],{"className":30359,"code":169829,"language":30361,"meta":10,"style":10},"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",[89,169831,169832,169838,169842,169872,169886,169898],{"__ignoreMap":10},[92,169833,169834,169836],{"class":94,"line":95},[92,169835,30373],{"class":98},[92,169837,169694],{"class":102},[92,169839,169840],{"class":94,"line":11},[92,169841,2379],{"emptyLinePlaceholder":17},[92,169843,169844,169846,169848,169850,169852,169854,169856,169858,169860,169862,169864,169866,169868,169870],{"class":94,"line":1158},[92,169845,107808],{"class":98},[92,169847,146766],{"class":151},[92,169849,103],{"class":102},[92,169851,169775],{"class":207},[92,169853,12415],{"class":102},[92,169855,146776],{"class":207},[92,169857,12415],{"class":102},[92,169859,146781],{"class":5196},[92,169861,148],{"class":98},[92,169863,146786],{"class":207},[92,169865,13694],{"class":102},[92,169867,31364],{"class":98},[92,169869,148128],{"class":5196},[92,169871,3718],{"class":102},[92,169873,169874,169877,169879,169882,169884],{"class":94,"line":1173},[92,169875,169876],{"class":102},"    reader ",[92,169878,148],{"class":98},[92,169880,169881],{"class":102}," csv.reader(",[92,169883,45335],{"class":5196},[92,169885,109],{"class":102},[92,169887,169888,169890,169893,169895],{"class":94,"line":1179},[92,169889,3180],{"class":98},[92,169891,169892],{"class":102}," row ",[92,169894,26024],{"class":98},[92,169896,169897],{"class":102}," reader:\n",[92,169899,169900,169902],{"class":94,"line":1193},[92,169901,32432],{"class":151},[92,169903,169904],{"class":102},"(row)\n",[38,169906,169907],{},"使用字典写入：",[83,169909,169911],{"className":30359,"code":169910,"language":30361,"meta":10,"style":10},"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",[89,169912,169913,169919,169923,169931,169959,169987,169991,169995,170033,170054,170075,170080],{"__ignoreMap":10},[92,169914,169915,169917],{"class":94,"line":95},[92,169916,30373],{"class":98},[92,169918,169694],{"class":102},[92,169920,169921],{"class":94,"line":11},[92,169922,2379],{"emptyLinePlaceholder":17},[92,169924,169925,169927,169929],{"class":94,"line":1158},[92,169926,159691],{"class":102},[92,169928,148],{"class":98},[92,169930,55427],{"class":102},[92,169932,169933,169935,169937,169939,169941,169943,169945,169947,169949,169951,169953,169955,169957],{"class":94,"line":1173},[92,169934,148360],{"class":102},[92,169936,62659],{"class":207},[92,169938,51417],{"class":102},[92,169940,149863],{"class":207},[92,169942,12415],{"class":102},[92,169944,69104],{"class":207},[92,169946,51417],{"class":102},[92,169948,753],{"class":151},[92,169950,12415],{"class":102},[92,169952,151447],{"class":207},[92,169954,51417],{"class":102},[92,169956,1092],{"class":151},[92,169958,4909],{"class":102},[92,169960,169961,169963,169965,169967,169969,169971,169973,169975,169977,169979,169981,169983,169985],{"class":94,"line":1179},[92,169962,148360],{"class":102},[92,169964,62659],{"class":207},[92,169966,51417],{"class":102},[92,169968,150911],{"class":207},[92,169970,12415],{"class":102},[92,169972,69104],{"class":207},[92,169974,51417],{"class":102},[92,169976,728],{"class":151},[92,169978,12415],{"class":102},[92,169980,151447],{"class":207},[92,169982,51417],{"class":102},[92,169984,914],{"class":151},[92,169986,4909],{"class":102},[92,169988,169989],{"class":94,"line":1193},[92,169990,33227],{"class":102},[92,169992,169993],{"class":94,"line":1199},[92,169994,2379],{"emptyLinePlaceholder":17},[92,169996,169997,169999,170001,170003,170005,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031],{"class":94,"line":1290},[92,169998,107808],{"class":98},[92,170000,146766],{"class":151},[92,170002,103],{"class":102},[92,170004,169775],{"class":207},[92,170006,12415],{"class":102},[92,170008,151951],{"class":207},[92,170010,12415],{"class":102},[92,170012,146781],{"class":5196},[92,170014,148],{"class":98},[92,170016,146786],{"class":207},[92,170018,12415],{"class":102},[92,170020,169792],{"class":5196},[92,170022,148],{"class":98},[92,170024,7632],{"class":207},[92,170026,13694],{"class":102},[92,170028,31364],{"class":98},[92,170030,148128],{"class":5196},[92,170032,3718],{"class":102},[92,170034,170035,170038,170040,170042,170044,170046,170048,170050,170052],{"class":94,"line":1296},[92,170036,170037],{"class":102},"    fieldnames ",[92,170039,148],{"class":98},[92,170041,52206],{"class":102},[92,170043,62659],{"class":207},[92,170045,12415],{"class":102},[92,170047,69104],{"class":207},[92,170049,12415],{"class":102},[92,170051,151447],{"class":207},[92,170053,33227],{"class":102},[92,170055,170056,170058,170060,170063,170065,170067,170070,170072],{"class":94,"line":1308},[92,170057,169809],{"class":102},[92,170059,148],{"class":98},[92,170061,170062],{"class":102}," csv.DictWriter(",[92,170064,45335],{"class":5196},[92,170066,12415],{"class":102},[92,170068,170069],{"class":5196},"fieldnames",[92,170071,148],{"class":98},[92,170073,170074],{"class":102},"fieldnames)\n",[92,170076,170077],{"class":94,"line":1591},[92,170078,170079],{"class":102},"    writer.writeheader()\n",[92,170081,170082],{"class":94,"line":1596},[92,170083,169823],{"class":102},[33,170085,170087],{"id":170086},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[38,170089,123267],{},[46,170091,170092,170095,170098],{},[49,170093,170094],{},"读取文本文件。",[49,170096,170097],{},"统计每个单词出现次数。",[49,170099,170100],{},"输出出现次数最多的前 10 个单词。",[38,170102,10015],{},[83,170104,170106],{"className":30359,"code":170105,"language":30361,"meta":10,"style":10},"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",[89,170107,170108,170118,170122,170135,170151,170155,170165,170174,170178,170190,170210,170219,170223,170241,170245,170275,170279,170295],{"__ignoreMap":10},[92,170109,170110,170112,170114,170116],{"class":94,"line":95},[92,170111,30718],{"class":98},[92,170113,108286],{"class":102},[92,170115,30373],{"class":98},[92,170117,108291],{"class":102},[92,170119,170120],{"class":94,"line":11},[92,170121,2379],{"emptyLinePlaceholder":17},[92,170123,170124,170126,170128,170130,170133],{"class":94,"line":1158},[92,170125,168286],{"class":102},[92,170127,148],{"class":98},[92,170129,108520],{"class":102},[92,170131,170132],{"class":207},"\"article.txt\"",[92,170134,109],{"class":102},[92,170136,170137,170139,170141,170143,170145,170147,170149],{"class":94,"line":1173},[92,170138,168469],{"class":102},[92,170140,148],{"class":98},[92,170142,169346],{"class":102},[92,170144,146781],{"class":5196},[92,170146,148],{"class":98},[92,170148,146786],{"class":207},[92,170150,109],{"class":102},[92,170152,170153],{"class":94,"line":1179},[92,170154,2379],{"emptyLinePlaceholder":17},[92,170156,170157,170160,170162],{"class":94,"line":1193},[92,170158,170159],{"class":102},"words ",[92,170161,148],{"class":98},[92,170163,170164],{"class":102}," content.lower().split()\n",[92,170166,170167,170170,170172],{"class":94,"line":1199},[92,170168,170169],{"class":102},"counter ",[92,170171,148],{"class":98},[92,170173,87848],{"class":102},[92,170175,170176],{"class":94,"line":1290},[92,170177,2379],{"emptyLinePlaceholder":17},[92,170179,170180,170182,170185,170187],{"class":94,"line":1296},[92,170181,3004],{"class":98},[92,170183,170184],{"class":102}," word ",[92,170186,26024],{"class":98},[92,170188,170189],{"class":102}," words:\n",[92,170191,170192,170195,170197,170200,170203,170205,170208],{"class":94,"line":1308},[92,170193,170194],{"class":102},"    word ",[92,170196,148],{"class":98},[92,170198,170199],{"class":102}," word.strip(",[92,170201,170202],{"class":207},"\".,!?;:",[92,170204,156470],{"class":151},[92,170206,170207],{"class":207},"'()[]\"",[92,170209,109],{"class":102},[92,170211,170212,170214,170216],{"class":94,"line":1591},[92,170213,3080],{"class":98},[92,170215,38911],{"class":98},[92,170217,170218],{"class":102}," word:\n",[92,170220,170221],{"class":94,"line":1596},[92,170222,148487],{"class":98},[92,170224,170225,170228,170230,170233,170235,170237,170239],{"class":94,"line":1602},[92,170226,170227],{"class":102},"    counter[word] ",[92,170229,148],{"class":98},[92,170231,170232],{"class":102}," counter.get(word, ",[92,170234,294],{"class":151},[92,170236,13694],{"class":102},[92,170238,584],{"class":98},[92,170240,55679],{"class":151},[92,170242,170243],{"class":94,"line":1607},[92,170244,2379],{"emptyLinePlaceholder":17},[92,170246,170247,170250,170252,170254,170257,170259,170261,170263,170265,170267,170269,170271,170273],{"class":94,"line":1621},[92,170248,170249],{"class":102},"items ",[92,170251,148],{"class":98},[92,170253,163579],{"class":151},[92,170255,170256],{"class":102},"(counter.items(), ",[92,170258,153921],{"class":5196},[92,170260,153924],{"class":98},[92,170262,153927],{"class":102},[92,170264,320],{"class":151},[92,170266,112177],{"class":102},[92,170268,163503],{"class":5196},[92,170270,148],{"class":98},[92,170272,31457],{"class":151},[92,170274,109],{"class":102},[92,170276,170277],{"class":94,"line":1626},[92,170278,2379],{"emptyLinePlaceholder":17},[92,170280,170281,170283,170286,170288,170291,170293],{"class":94,"line":1632},[92,170282,3004],{"class":98},[92,170284,170285],{"class":102}," word, count ",[92,170287,26024],{"class":98},[92,170289,170290],{"class":102}," items[:",[92,170292,549],{"class":151},[92,170294,165730],{"class":102},[92,170296,170297,170299],{"class":94,"line":1653},[92,170298,31280],{"class":151},[92,170300,170301],{"class":102},"(word, count)\n",[33,170303,170305],{"id":170304},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[83,170307,170309],{"className":30359,"code":170308,"language":30361,"meta":10,"style":10},"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",[89,170310,170311,170317,170327,170331,170343,170347,170351,170359,170369,170375,170379,170409,170419,170423,170427,170435,170465,170489,170493,170497,170505,170534,170539],{"__ignoreMap":10},[92,170312,170313,170315],{"class":94,"line":95},[92,170314,30373],{"class":98},[92,170316,147066],{"class":102},[92,170318,170319,170321,170323,170325],{"class":94,"line":11},[92,170320,30718],{"class":98},[92,170322,108286],{"class":102},[92,170324,30373],{"class":98},[92,170326,108291],{"class":102},[92,170328,170329],{"class":94,"line":1158},[92,170330,2379],{"emptyLinePlaceholder":17},[92,170332,170333,170335,170337,170339,170341],{"class":94,"line":1173},[92,170334,151799],{"class":151},[92,170336,13544],{"class":98},[92,170338,108520],{"class":102},[92,170340,151806],{"class":207},[92,170342,109],{"class":102},[92,170344,170345],{"class":94,"line":1179},[92,170346,2379],{"emptyLinePlaceholder":17},[92,170348,170349],{"class":94,"line":1193},[92,170350,2379],{"emptyLinePlaceholder":17},[92,170352,170353,170355,170357],{"class":94,"line":1199},[92,170354,31928],{"class":98},[92,170356,151823],{"class":1942},[92,170358,31934],{"class":102},[92,170360,170361,170363,170365,170367],{"class":94,"line":1290},[92,170362,3080],{"class":98},[92,170364,38911],{"class":98},[92,170366,151834],{"class":151},[92,170368,151837],{"class":102},[92,170370,170371,170373],{"class":94,"line":1296},[92,170372,14732],{"class":98},[92,170374,51818],{"class":102},[92,170376,170377],{"class":94,"line":1308},[92,170378,2379],{"emptyLinePlaceholder":17},[92,170380,170381,170383,170385,170387,170389,170391,170393,170395,170397,170399,170401,170403,170405,170407],{"class":94,"line":1591},[92,170382,34159],{"class":98},[92,170384,146766],{"class":151},[92,170386,103],{"class":102},[92,170388,151799],{"class":151},[92,170390,12415],{"class":102},[92,170392,146776],{"class":207},[92,170394,12415],{"class":102},[92,170396,146781],{"class":5196},[92,170398,148],{"class":98},[92,170400,146786],{"class":207},[92,170402,13694],{"class":102},[92,170404,31364],{"class":98},[92,170406,148128],{"class":5196},[92,170408,3718],{"class":102},[92,170410,170411,170413,170415,170417],{"class":94,"line":1596},[92,170412,14732],{"class":98},[92,170414,148139],{"class":102},[92,170416,45335],{"class":5196},[92,170418,109],{"class":102},[92,170420,170421],{"class":94,"line":1602},[92,170422,2379],{"emptyLinePlaceholder":17},[92,170424,170425],{"class":94,"line":1607},[92,170426,2379],{"emptyLinePlaceholder":17},[92,170428,170429,170431,170433],{"class":94,"line":1621},[92,170430,31928],{"class":98},[92,170432,151933],{"class":1942},[92,170434,151936],{"class":102},[92,170436,170437,170439,170441,170443,170445,170447,170449,170451,170453,170455,170457,170459,170461,170463],{"class":94,"line":1626},[92,170438,34159],{"class":98},[92,170440,146766],{"class":151},[92,170442,103],{"class":102},[92,170444,151799],{"class":151},[92,170446,12415],{"class":102},[92,170448,151951],{"class":207},[92,170450,12415],{"class":102},[92,170452,146781],{"class":5196},[92,170454,148],{"class":98},[92,170456,146786],{"class":207},[92,170458,13694],{"class":102},[92,170460,31364],{"class":98},[92,170462,148128],{"class":5196},[92,170464,3718],{"class":102},[92,170466,170467,170469,170471,170473,170475,170477,170479,170481,170483,170485,170487],{"class":94,"line":1632},[92,170468,151972],{"class":102},[92,170470,45335],{"class":5196},[92,170472,12415],{"class":102},[92,170474,147112],{"class":5196},[92,170476,148],{"class":98},[92,170478,33968],{"class":151},[92,170480,12415],{"class":102},[92,170482,151987],{"class":5196},[92,170484,148],{"class":98},[92,170486,180],{"class":151},[92,170488,109],{"class":102},[92,170490,170491],{"class":94,"line":1653},[92,170492,2379],{"emptyLinePlaceholder":17},[92,170494,170495],{"class":94,"line":1658},[92,170496,2379],{"emptyLinePlaceholder":17},[92,170498,170499,170501,170503],{"class":94,"line":1672},[92,170500,159691],{"class":102},[92,170502,148],{"class":98},[92,170504,153017],{"class":102},[92,170506,170507,170510,170512,170514,170516,170518,170520,170522,170524,170526,170528,170530,170532],{"class":94,"line":1677},[92,170508,170509],{"class":102},"students.append({",[92,170511,62659],{"class":207},[92,170513,51417],{"class":102},[92,170515,149863],{"class":207},[92,170517,12415],{"class":102},[92,170519,69104],{"class":207},[92,170521,51417],{"class":102},[92,170523,753],{"class":151},[92,170525,12415],{"class":102},[92,170527,151447],{"class":207},[92,170529,51417],{"class":102},[92,170531,1092],{"class":151},[92,170533,165127],{"class":102},[92,170535,170536],{"class":94,"line":1706},[92,170537,170538],{"class":102},"save_students(students)\n",[92,170540,170541,170543,170545,170548],{"class":94,"line":1711},[92,170542,30396],{"class":151},[92,170544,103],{"class":102},[92,170546,170547],{"class":207},"\"保存成功\"",[92,170549,109],{"class":102},[33,170551,170553],{"id":170552},"_814-易错点","8.14 易错点",[46,170555,170556,170560,170566,170571,170578,170585],{},[49,170557,170558,168819],{},[89,170559,898],{},[49,170561,170562,170563,28366],{},"读写中文要指定 ",[89,170564,170565],{},"encoding=\"utf-8\"",[49,170567,170568,170569,28366],{},"打开文件后要关闭，推荐使用 ",[89,170570,107808],{},[49,170572,170573,170574,170577],{},"读取大文件不要直接 ",[89,170575,170576],{},"read()"," 全部内容。",[49,170579,170580,170581,170584],{},"Windows 写 CSV 时建议加 ",[89,170582,170583],{},"newline=\"\"","，避免空行。",[49,170586,170587],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[33,170589,170591],{"id":170590},"_815-本章练习","8.15 本章练习",[46,170593,170594,170601,170606,170609,170612],{},[49,170595,170596,170597,170600],{},"写入一个 ",[89,170598,170599],{},"students.txt","，每行保存一个学生姓名。",[49,170602,104330,170603,170605],{},[89,170604,170599],{}," 并输出所有学生。",[49,170607,170608],{},"把学生列表保存为 JSON 文件。",[49,170610,170611],{},"从 JSON 文件读取学生数据，计算平均分。",[49,170613,170614,170615,170618,170619,170622],{},"写一个日志函数 ",[89,170616,170617],{},"write_log(message)","，每次调用向 ",[89,170620,170621],{},"app.log"," 追加一行。",[5106,170624,170625],{},"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":10,"searchDepth":11,"depth":11,"links":170627},[170628,170629,170633,170634,170640,170641,170642,170643,170644,170645,170646,170647,170648,170649,170650],{"id":168139,"depth":11,"text":168140},{"id":168180,"depth":11,"text":168181,"children":170630},[170631,170632],{"id":168184,"depth":1158,"text":168185},{"id":168218,"depth":1158,"text":168219},{"id":168332,"depth":11,"text":168333},{"id":168425,"depth":11,"text":168426,"children":170635},[170636,170637,170638,170639],{"id":168429,"depth":1158,"text":168430},{"id":168516,"depth":1158,"text":168517},{"id":168586,"depth":1158,"text":168587},{"id":168680,"depth":1158,"text":168681},{"id":168750,"depth":11,"text":168751},{"id":168813,"depth":11,"text":168814},{"id":168974,"depth":11,"text":168975},{"id":169037,"depth":11,"text":169038},{"id":169153,"depth":11,"text":169154},{"id":169363,"depth":11,"text":169364},{"id":169675,"depth":11,"text":169676},{"id":170086,"depth":11,"text":170087},{"id":170304,"depth":11,"text":170305},{"id":170552,"depth":11,"text":170553},{"id":170590,"depth":11,"text":170591},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168131,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170657,"title":170658,"body":170659,"description":13,"extension":14,"meta":172845,"navigation":17,"path":172846,"seo":172847,"stem":172848,"__hash__":172849},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170660,"toc":172812},[170661,170664,170668,170671,170674,170766,170768,170787,170792,170796,170799,170802,170831,170838,170841,170845,170848,170877,170879,170931,170937,170990,170994,171092,171095,171162,171166,171223,171225,171231,171235,171240,171246,171337,171342,171346,171349,171427,171430,171468,171472,171590,171593,171597,171600,171645,171648,171652,171657,171663,171713,171716,171747,171751,171755,171785,171789,171824,171828,171863,171903,171907,171923,171926,171930,171934,172013,172017,172058,172062,172117,172121,172155,172159,172189,172198,172205,172211,172268,172271,172279,172282,172286,172293,172296,172302,172305,172322,172327,172331,172337,172350,172353,172390,172393,172404,172407,172421,172424,172438,172442,172449,172482,172485,172487,172493,172496,172500,172502,172508,172513,172686,172690,172753,172757,172781,172785,172809],[29,170662,170658],{"id":170663},"_9-异常模块与包",[33,170665,170667],{"id":170666},"_91-什么是异常","9.1 什么是异常",[38,170669,170670],{},"异常是程序运行过程中出现的错误。",[38,170672,170673],{},"常见异常：",[240,170675,170676,170685],{},[243,170677,170678],{},[246,170679,170680,170683],{},[249,170681,170682],{},"异常",[249,170684,25850],{},[287,170686,170687,170697,170707,170716,170726,170736,170746,170756],{},[246,170688,170689,170694],{},[292,170690,170691],{},[89,170692,170693],{},"NameError",[292,170695,170696],{},"使用了未定义变量",[246,170698,170699,170704],{},[292,170700,170701],{},[89,170702,170703],{},"TypeError",[292,170705,170706],{},"类型不匹配",[246,170708,170709,170713],{},[292,170710,170711],{},[89,170712,154809],{},[292,170714,170715],{},"值不合法",[246,170717,170718,170723],{},[292,170719,170720],{},[89,170721,170722],{},"IndexError",[292,170724,170725],{},"列表索引越界",[246,170727,170728,170733],{},[292,170729,170730],{},[89,170731,170732],{},"KeyError",[292,170734,170735],{},"字典 key 不存在",[246,170737,170738,170743],{},[292,170739,170740],{},[89,170741,170742],{},"FileNotFoundError",[292,170744,170745],{},"文件不存在",[246,170747,170748,170753],{},[292,170749,170750],{},[89,170751,170752],{},"ZeroDivisionError",[292,170754,170755],{},"除数为 0",[246,170757,170758,170763],{},[292,170759,170760],{},[89,170761,170762],{},"ImportError",[292,170764,170765],{},"导入失败",[38,170767,15115],{},[83,170769,170771],{"className":30359,"code":170770,"language":30361,"meta":10,"style":10},"num = int(\"abc\")\n",[89,170772,170773],{"__ignoreMap":10},[92,170774,170775,170777,170779,170781,170783,170785],{"class":94,"line":95},[92,170776,155762],{"class":102},[92,170778,148],{"class":98},[92,170780,2361],{"class":151},[92,170782,103],{"class":102},[92,170784,155855],{"class":207},[92,170786,109],{"class":102},[38,170788,170789,170790,28366],{},"会触发 ",[89,170791,154809],{},[33,170793,170795],{"id":170794},"_92-为什么要处理异常","9.2 为什么要处理异常",[38,170797,170798],{},"如果不处理异常，程序会直接终止。",[38,170800,170801],{},"例如用户输入年龄：",[83,170803,170805],{"className":30359,"code":170804,"language":30361,"meta":10,"style":10},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[89,170806,170807,170825],{"__ignoreMap":10},[92,170808,170809,170811,170813,170815,170817,170819,170821,170823],{"class":94,"line":95},[92,170810,146521],{"class":102},[92,170812,148],{"class":98},[92,170814,2361],{"class":151},[92,170816,103],{"class":102},[92,170818,53801],{"class":151},[92,170820,103],{"class":102},[92,170822,152369],{"class":207},[92,170824,30478],{"class":102},[92,170826,170827,170829],{"class":94,"line":11},[92,170828,30396],{"class":151},[92,170830,155736],{"class":102},[38,170832,170833,170834,170837],{},"用户输入 ",[89,170835,170836],{},"abc","，程序就会报错退出。",[38,170839,170840],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[33,170842,170844],{"id":170843},"_93-try-except","9.3 try except",[38,170846,170847],{},"基础语法：",[83,170849,170851],{"className":30359,"code":170850,"language":30361,"meta":10,"style":10},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[89,170852,170853,170860,170865,170872],{"__ignoreMap":10},[92,170854,170855,170858],{"class":94,"line":95},[92,170856,170857],{"class":98},"try",[92,170859,3718],{"class":102},[92,170861,170862],{"class":94,"line":11},[92,170863,170864],{"class":102},"    可能出错的代码\n",[92,170866,170867,170870],{"class":94,"line":1158},[92,170868,170869],{"class":98},"except",[92,170871,3718],{"class":102},[92,170873,170874],{"class":94,"line":1173},[92,170875,170876],{"class":102},"    出错后的处理代码\n",[38,170878,15115],{},[83,170880,170882],{"className":30359,"code":170881,"language":30361,"meta":10,"style":10},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[89,170883,170884,170890,170908,170914,170920],{"__ignoreMap":10},[92,170885,170886,170888],{"class":94,"line":95},[92,170887,170857],{"class":98},[92,170889,3718],{"class":102},[92,170891,170892,170894,170896,170898,170900,170902,170904,170906],{"class":94,"line":11},[92,170893,152361],{"class":102},[92,170895,148],{"class":98},[92,170897,2361],{"class":151},[92,170899,103],{"class":102},[92,170901,53801],{"class":151},[92,170903,103],{"class":102},[92,170905,152369],{"class":207},[92,170907,30478],{"class":102},[92,170909,170910,170912],{"class":94,"line":1158},[92,170911,31280],{"class":151},[92,170913,155736],{"class":102},[92,170915,170916,170918],{"class":94,"line":1173},[92,170917,170869],{"class":98},[92,170919,3718],{"class":102},[92,170921,170922,170924,170926,170929],{"class":94,"line":1179},[92,170923,31280],{"class":151},[92,170925,103],{"class":102},[92,170927,170928],{"class":207},"\"年龄必须是数字\"",[92,170930,109],{"class":102},[38,170932,170933,170934,170936],{},"不建议裸写 ",[89,170935,170869],{},"，最好指定异常类型。",[83,170938,170940],{"className":30359,"code":170939,"language":30361,"meta":10,"style":10},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[89,170941,170942,170948,170966,170972,170980],{"__ignoreMap":10},[92,170943,170944,170946],{"class":94,"line":95},[92,170945,170857],{"class":98},[92,170947,3718],{"class":102},[92,170949,170950,170952,170954,170956,170958,170960,170962,170964],{"class":94,"line":11},[92,170951,152361],{"class":102},[92,170953,148],{"class":98},[92,170955,2361],{"class":151},[92,170957,103],{"class":102},[92,170959,53801],{"class":151},[92,170961,103],{"class":102},[92,170963,152369],{"class":207},[92,170965,30478],{"class":102},[92,170967,170968,170970],{"class":94,"line":1158},[92,170969,31280],{"class":151},[92,170971,155736],{"class":102},[92,170973,170974,170976,170978],{"class":94,"line":1173},[92,170975,170869],{"class":98},[92,170977,152201],{"class":151},[92,170979,3718],{"class":102},[92,170981,170982,170984,170986,170988],{"class":94,"line":1179},[92,170983,31280],{"class":151},[92,170985,103],{"class":102},[92,170987,170928],{"class":207},[92,170989,109],{"class":102},[33,170991,170993],{"id":170992},"_94-捕获多个异常","9.4 捕获多个异常",[83,170995,170997],{"className":30359,"code":170996,"language":30361,"meta":10,"style":10},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[89,170998,170999,171005,171026,171046,171053,171061,171072,171081],{"__ignoreMap":10},[92,171000,171001,171003],{"class":94,"line":95},[92,171002,170857],{"class":98},[92,171004,3718],{"class":102},[92,171006,171007,171010,171012,171014,171016,171018,171020,171022,171024],{"class":94,"line":11},[92,171008,171009],{"class":102},"    nums ",[92,171011,148],{"class":98},[92,171013,52206],{"class":102},[92,171015,320],{"class":151},[92,171017,12415],{"class":102},[92,171019,180],{"class":151},[92,171021,12415],{"class":102},[92,171023,174],{"class":151},[92,171025,33227],{"class":102},[92,171027,171028,171031,171033,171035,171037,171039,171041,171044],{"class":94,"line":1158},[92,171029,171030],{"class":102},"    index ",[92,171032,148],{"class":98},[92,171034,2361],{"class":151},[92,171036,103],{"class":102},[92,171038,53801],{"class":151},[92,171040,103],{"class":102},[92,171042,171043],{"class":207},"\"请输入索引:\"",[92,171045,30478],{"class":102},[92,171047,171048,171050],{"class":94,"line":1173},[92,171049,31280],{"class":151},[92,171051,171052],{"class":102},"(nums[index])\n",[92,171054,171055,171057,171059],{"class":94,"line":1179},[92,171056,170869],{"class":98},[92,171058,152201],{"class":151},[92,171060,3718],{"class":102},[92,171062,171063,171065,171067,171070],{"class":94,"line":1193},[92,171064,31280],{"class":151},[92,171066,103],{"class":102},[92,171068,171069],{"class":207},"\"索引必须是整数\"",[92,171071,109],{"class":102},[92,171073,171074,171076,171079],{"class":94,"line":1199},[92,171075,170869],{"class":98},[92,171077,171078],{"class":151}," IndexError",[92,171080,3718],{"class":102},[92,171082,171083,171085,171087,171090],{"class":94,"line":1290},[92,171084,31280],{"class":151},[92,171086,103],{"class":102},[92,171088,171089],{"class":207},"\"索引越界\"",[92,171091,109],{"class":102},[38,171093,171094],{},"多个异常使用相同处理逻辑：",[83,171096,171098],{"className":30359,"code":171097,"language":30361,"meta":10,"style":10},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[89,171099,171100,171106,171124,171137,171151],{"__ignoreMap":10},[92,171101,171102,171104],{"class":94,"line":95},[92,171103,170857],{"class":98},[92,171105,3718],{"class":102},[92,171107,171108,171110,171112,171114,171116,171118,171120,171122],{"class":94,"line":11},[92,171109,45574],{"class":102},[92,171111,148],{"class":98},[92,171113,2361],{"class":151},[92,171115,103],{"class":102},[92,171117,53801],{"class":151},[92,171119,103],{"class":102},[92,171121,155771],{"class":207},[92,171123,30478],{"class":102},[92,171125,171126,171128,171130,171132,171134],{"class":94,"line":1158},[92,171127,31280],{"class":151},[92,171129,103],{"class":102},[92,171131,549],{"class":151},[92,171133,156021],{"class":98},[92,171135,171136],{"class":102}," num)\n",[92,171138,171139,171141,171143,171145,171147,171149],{"class":94,"line":1173},[92,171140,170869],{"class":98},[92,171142,1637],{"class":102},[92,171144,154809],{"class":151},[92,171146,12415],{"class":102},[92,171148,170752],{"class":151},[92,171150,30767],{"class":102},[92,171152,171153,171155,171157,171160],{"class":94,"line":1179},[92,171154,31280],{"class":151},[92,171156,103],{"class":102},[92,171158,171159],{"class":207},"\"输入不合法\"",[92,171161,109],{"class":102},[33,171163,171165],{"id":171164},"_95-获取异常信息","9.5 获取异常信息",[83,171167,171169],{"className":30359,"code":171168,"language":30361,"meta":10,"style":10},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[89,171170,171171,171177,171191,171202],{"__ignoreMap":10},[92,171172,171173,171175],{"class":94,"line":95},[92,171174,170857],{"class":98},[92,171176,3718],{"class":102},[92,171178,171179,171181,171183,171185,171187,171189],{"class":94,"line":11},[92,171180,45574],{"class":102},[92,171182,148],{"class":98},[92,171184,2361],{"class":151},[92,171186,103],{"class":102},[92,171188,155855],{"class":207},[92,171190,109],{"class":102},[92,171192,171193,171195,171197,171199],{"class":94,"line":1158},[92,171194,170869],{"class":98},[92,171196,152201],{"class":151},[92,171198,64584],{"class":98},[92,171200,171201],{"class":102}," e:\n",[92,171203,171204,171206,171208,171210,171213,171215,171217,171219,171221],{"class":94,"line":1173},[92,171205,31280],{"class":151},[92,171207,103],{"class":102},[92,171209,155],{"class":98},[92,171211,171212],{"class":207},"\"出错了:",[92,171214,999],{"class":151},[92,171216,177],{"class":102},[92,171218,1049],{"class":151},[92,171220,354],{"class":207},[92,171222,109],{"class":102},[38,171224,146432],{},[83,171226,171229],{"className":171227,"code":171228,"language":5167,"meta":10},[5165],"出错了:invalid literal for int() with base 10: 'abc'\n",[89,171230,171228],{"__ignoreMap":10},[33,171232,171234],{"id":171233},"_96-else和finally","9.6 else和finally",[38,171236,171237,171239],{},[89,171238,1680],{},"：没有异常时执行。",[38,171241,171242,171245],{},[89,171243,171244],{},"finally","：无论是否异常都会执行。",[83,171247,171249],{"className":30359,"code":171248,"language":30361,"meta":10,"style":10},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[89,171250,171251,171257,171275,171283,171293,171299,171320,171326],{"__ignoreMap":10},[92,171252,171253,171255],{"class":94,"line":95},[92,171254,170857],{"class":98},[92,171256,3718],{"class":102},[92,171258,171259,171261,171263,171265,171267,171269,171271,171273],{"class":94,"line":11},[92,171260,45574],{"class":102},[92,171262,148],{"class":98},[92,171264,2361],{"class":151},[92,171266,103],{"class":102},[92,171268,53801],{"class":151},[92,171270,103],{"class":102},[92,171272,155771],{"class":207},[92,171274,30478],{"class":102},[92,171276,171277,171279,171281],{"class":94,"line":1158},[92,171278,170869],{"class":98},[92,171280,152201],{"class":151},[92,171282,3718],{"class":102},[92,171284,171285,171287,171289,171291],{"class":94,"line":1173},[92,171286,31280],{"class":151},[92,171288,103],{"class":102},[92,171290,153189],{"class":207},[92,171292,109],{"class":102},[92,171294,171295,171297],{"class":94,"line":1179},[92,171296,1680],{"class":98},[92,171298,3718],{"class":102},[92,171300,171301,171303,171305,171307,171310,171312,171314,171316,171318],{"class":94,"line":1193},[92,171302,31280],{"class":151},[92,171304,103],{"class":102},[92,171306,155],{"class":98},[92,171308,171309],{"class":207},"\"输入正确:",[92,171311,999],{"class":151},[92,171313,1644],{"class":102},[92,171315,1049],{"class":151},[92,171317,354],{"class":207},[92,171319,109],{"class":102},[92,171321,171322,171324],{"class":94,"line":1199},[92,171323,171244],{"class":98},[92,171325,3718],{"class":102},[92,171327,171328,171330,171332,171335],{"class":94,"line":1290},[92,171329,31280],{"class":151},[92,171331,103],{"class":102},[92,171333,171334],{"class":207},"\"程序结束\"",[92,171336,109],{"class":102},[38,171338,171339,171341],{},[89,171340,171244],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[33,171343,171345],{"id":171344},"_97-抛出异常","9.7 抛出异常",[38,171347,171348],{},"程序可以主动抛出异常。",[83,171350,171352],{"className":30359,"code":171351,"language":30361,"meta":10,"style":10},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[89,171353,171354,171363,171375,171388,171408,171412,171416],{"__ignoreMap":10},[92,171355,171356,171358,171361],{"class":94,"line":95},[92,171357,31928],{"class":98},[92,171359,171360],{"class":1942}," set_age",[92,171362,161390],{"class":102},[92,171364,171365,171367,171369,171371,171373],{"class":94,"line":11},[92,171366,3080],{"class":98},[92,171368,15687],{"class":102},[92,171370,1013],{"class":98},[92,171372,4072],{"class":151},[92,171374,3718],{"class":102},[92,171376,171377,171379,171381,171383,171386],{"class":94,"line":1158},[92,171378,103407],{"class":98},[92,171380,152201],{"class":151},[92,171382,103],{"class":102},[92,171384,171385],{"class":207},"\"年龄不能为负数\"",[92,171387,109],{"class":102},[92,171389,171390,171392,171394,171396,171398,171400,171402,171404,171406],{"class":94,"line":1173},[92,171391,31280],{"class":151},[92,171393,103],{"class":102},[92,171395,155],{"class":98},[92,171397,161958],{"class":207},[92,171399,999],{"class":151},[92,171401,70201],{"class":102},[92,171403,1049],{"class":151},[92,171405,354],{"class":207},[92,171407,109],{"class":102},[92,171409,171410],{"class":94,"line":1179},[92,171411,2379],{"emptyLinePlaceholder":17},[92,171413,171414],{"class":94,"line":1193},[92,171415,2379],{"emptyLinePlaceholder":17},[92,171417,171418,171421,171423,171425],{"class":94,"line":1199},[92,171419,171420],{"class":102},"set_age(",[92,171422,635],{"class":98},[92,171424,320],{"class":151},[92,171426,109],{"class":102},[38,171428,171429],{},"调用者可以捕获：",[83,171431,171433],{"className":30359,"code":171432,"language":30361,"meta":10,"style":10},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[89,171434,171435,171441,171452,171462],{"__ignoreMap":10},[92,171436,171437,171439],{"class":94,"line":95},[92,171438,170857],{"class":98},[92,171440,3718],{"class":102},[92,171442,171443,171446,171448,171450],{"class":94,"line":11},[92,171444,171445],{"class":102},"    set_age(",[92,171447,635],{"class":98},[92,171449,320],{"class":151},[92,171451,109],{"class":102},[92,171453,171454,171456,171458,171460],{"class":94,"line":1158},[92,171455,170869],{"class":98},[92,171457,152201],{"class":151},[92,171459,64584],{"class":98},[92,171461,171201],{"class":102},[92,171463,171464,171466],{"class":94,"line":1173},[92,171465,31280],{"class":151},[92,171467,66979],{"class":102},[33,171469,171471],{"id":171470},"_98-自定义异常","9.8 自定义异常",[83,171473,171475],{"className":30359,"code":171474,"language":30361,"meta":10,"style":10},"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",[89,171476,171477,171491,171495,171499,171503,171511,171521,171532,171542,171546,171550,171556,171573,171584],{"__ignoreMap":10},[92,171478,171479,171481,171484,171486,171489],{"class":94,"line":95},[92,171480,14674],{"class":98},[92,171482,171483],{"class":1942}," BalanceNotEnoughError",[92,171485,103],{"class":102},[92,171487,171488],{"class":151},"Exception",[92,171490,30767],{"class":102},[92,171492,171493],{"class":94,"line":11},[92,171494,149512],{"class":98},[92,171496,171497],{"class":94,"line":1158},[92,171498,2379],{"emptyLinePlaceholder":17},[92,171500,171501],{"class":94,"line":1173},[92,171502,2379],{"emptyLinePlaceholder":17},[92,171504,171505,171507,171509],{"class":94,"line":1179},[92,171506,31928],{"class":98},[92,171508,150161],{"class":1942},[92,171510,162787],{"class":102},[92,171512,171513,171515,171517,171519],{"class":94,"line":1193},[92,171514,3080],{"class":98},[92,171516,150117],{"class":102},[92,171518,1063],{"class":98},[92,171520,162564],{"class":102},[92,171522,171523,171525,171528,171530],{"class":94,"line":1199},[92,171524,103407],{"class":98},[92,171526,171527],{"class":102}," BalanceNotEnoughError(",[92,171529,150212],{"class":207},[92,171531,109],{"class":102},[92,171533,171534,171536,171538,171540],{"class":94,"line":1290},[92,171535,4069],{"class":98},[92,171537,162794],{"class":102},[92,171539,635],{"class":98},[92,171541,150150],{"class":102},[92,171543,171544],{"class":94,"line":1296},[92,171545,2379],{"emptyLinePlaceholder":17},[92,171547,171548],{"class":94,"line":1308},[92,171549,2379],{"emptyLinePlaceholder":17},[92,171551,171552,171554],{"class":94,"line":1591},[92,171553,170857],{"class":98},[92,171555,3718],{"class":102},[92,171557,171558,171560,171562,171565,171567,171569,171571],{"class":94,"line":1596},[92,171559,162465],{"class":102},[92,171561,148],{"class":98},[92,171563,171564],{"class":102}," withdraw(",[92,171566,414],{"class":151},[92,171568,12415],{"class":102},[92,171570,1701],{"class":151},[92,171572,109],{"class":102},[92,171574,171575,171577,171580,171582],{"class":94,"line":1602},[92,171576,170869],{"class":98},[92,171578,171579],{"class":102}," BalanceNotEnoughError ",[92,171581,31364],{"class":98},[92,171583,171201],{"class":102},[92,171585,171586,171588],{"class":94,"line":1607},[92,171587,31280],{"class":151},[92,171589,66979],{"class":102},[38,171591,171592],{},"入门阶段大多数情况使用内置异常即可。",[33,171594,171596],{"id":171595},"_99-traceback","9.9 traceback",[38,171598,171599],{},"调试时可以输出完整异常堆栈。",[83,171601,171603],{"className":30359,"code":171602,"language":30361,"meta":10,"style":10},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[89,171604,171605,171612,171616,171622,171632,171640],{"__ignoreMap":10},[92,171606,171607,171609],{"class":94,"line":95},[92,171608,30373],{"class":98},[92,171610,171611],{"class":102}," traceback\n",[92,171613,171614],{"class":94,"line":11},[92,171615,2379],{"emptyLinePlaceholder":17},[92,171617,171618,171620],{"class":94,"line":1158},[92,171619,170857],{"class":98},[92,171621,3718],{"class":102},[92,171623,171624,171626,171628,171630],{"class":94,"line":1173},[92,171625,1964],{"class":151},[92,171627,103],{"class":102},[92,171629,155855],{"class":207},[92,171631,109],{"class":102},[92,171633,171634,171636,171638],{"class":94,"line":1179},[92,171635,170869],{"class":98},[92,171637,152201],{"class":151},[92,171639,3718],{"class":102},[92,171641,171642],{"class":94,"line":1193},[92,171643,171644],{"class":102},"    traceback.print_exc()\n",[38,171646,171647],{},"日志系统中常把异常堆栈记录到文件。",[33,171649,171651],{"id":171650},"_910-什么是模块","9.10 什么是模块",[38,171653,171654,171655,125958],{},"模块就是一个 ",[89,171656,146327],{},[38,171658,171659,171660,24599],{},"例如创建 ",[89,171661,171662],{},"my_math.py",[83,171664,171666],{"className":30359,"code":171665,"language":30361,"meta":10,"style":10},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[89,171667,171668,171676,171686,171690,171694,171703],{"__ignoreMap":10},[92,171669,171670,171672,171674],{"class":94,"line":95},[92,171671,31928],{"class":98},[92,171673,5189],{"class":1942},[92,171675,151068],{"class":102},[92,171677,171678,171680,171682,171684],{"class":94,"line":11},[92,171679,4069],{"class":98},[92,171681,10849],{"class":102},[92,171683,584],{"class":98},[92,171685,151079],{"class":102},[92,171687,171688],{"class":94,"line":1158},[92,171689,2379],{"emptyLinePlaceholder":17},[92,171691,171692],{"class":94,"line":1173},[92,171693,2379],{"emptyLinePlaceholder":17},[92,171695,171696,171698,171701],{"class":94,"line":1179},[92,171697,31928],{"class":98},[92,171699,171700],{"class":1942}," sub",[92,171702,151068],{"class":102},[92,171704,171705,171707,171709,171711],{"class":94,"line":1193},[92,171706,4069],{"class":98},[92,171708,10849],{"class":102},[92,171710,635],{"class":98},[92,171712,151079],{"class":102},[38,171714,171715],{},"在另一个文件中导入：",[83,171717,171719],{"className":30359,"code":171718,"language":30361,"meta":10,"style":10},"import my_math\n\nprint(my_math.add(1, 2))\n",[89,171720,171721,171728,171732],{"__ignoreMap":10},[92,171722,171723,171725],{"class":94,"line":95},[92,171724,30373],{"class":98},[92,171726,171727],{"class":102}," my_math\n",[92,171729,171730],{"class":94,"line":11},[92,171731,2379],{"emptyLinePlaceholder":17},[92,171733,171734,171736,171739,171741,171743,171745],{"class":94,"line":1158},[92,171735,30396],{"class":151},[92,171737,171738],{"class":102},"(my_math.add(",[92,171740,320],{"class":151},[92,171742,12415],{"class":102},[92,171744,180],{"class":151},[92,171746,30478],{"class":102},[33,171748,171750],{"id":171749},"_911-import导入","9.11 import导入",[63,171752,171754],{"id":171753},"_9111-导入模块","9.11.1 导入模块",[83,171756,171758],{"className":30359,"code":171757,"language":30361,"meta":10,"style":10},"import random\n\nprint(random.randint(1, 10))\n",[89,171759,171760,171766,171770],{"__ignoreMap":10},[92,171761,171762,171764],{"class":94,"line":95},[92,171763,30373],{"class":98},[92,171765,45309],{"class":102},[92,171767,171768],{"class":94,"line":11},[92,171769,2379],{"emptyLinePlaceholder":17},[92,171771,171772,171774,171777,171779,171781,171783],{"class":94,"line":1158},[92,171773,30396],{"class":151},[92,171775,171776],{"class":102},"(random.randint(",[92,171778,320],{"class":151},[92,171780,12415],{"class":102},[92,171782,549],{"class":151},[92,171784,30478],{"class":102},[63,171786,171788],{"id":171787},"_9112-导入指定内容","9.11.2 导入指定内容",[83,171790,171792],{"className":30359,"code":171791,"language":30361,"meta":10,"style":10},"from random import randint\n\nprint(randint(1, 10))\n",[89,171793,171794,171805,171809],{"__ignoreMap":10},[92,171795,171796,171798,171800,171802],{"class":94,"line":95},[92,171797,30718],{"class":98},[92,171799,57776],{"class":102},[92,171801,30373],{"class":98},[92,171803,171804],{"class":102}," randint\n",[92,171806,171807],{"class":94,"line":11},[92,171808,2379],{"emptyLinePlaceholder":17},[92,171810,171811,171813,171816,171818,171820,171822],{"class":94,"line":1158},[92,171812,30396],{"class":151},[92,171814,171815],{"class":102},"(randint(",[92,171817,320],{"class":151},[92,171819,12415],{"class":102},[92,171821,549],{"class":151},[92,171823,30478],{"class":102},[63,171825,171827],{"id":171826},"_9113-起别名","9.11.3 起别名",[83,171829,171831],{"className":30359,"code":171830,"language":30361,"meta":10,"style":10},"import random as rd\n\nprint(rd.randint(1, 10))\n",[89,171832,171833,171844,171848],{"__ignoreMap":10},[92,171834,171835,171837,171839,171841],{"class":94,"line":95},[92,171836,30373],{"class":98},[92,171838,57776],{"class":102},[92,171840,31364],{"class":98},[92,171842,171843],{"class":102}," rd\n",[92,171845,171846],{"class":94,"line":11},[92,171847,2379],{"emptyLinePlaceholder":17},[92,171849,171850,171852,171855,171857,171859,171861],{"class":94,"line":1158},[92,171851,30396],{"class":151},[92,171853,171854],{"class":102},"(rd.randint(",[92,171856,320],{"class":151},[92,171858,12415],{"class":102},[92,171860,549],{"class":151},[92,171862,30478],{"class":102},[83,171864,171866],{"className":30359,"code":171865,"language":30361,"meta":10,"style":10},"from random import randint as rint\n\nprint(rint(1, 10))\n",[89,171867,171868,171884,171888],{"__ignoreMap":10},[92,171869,171870,171872,171874,171876,171879,171881],{"class":94,"line":95},[92,171871,30718],{"class":98},[92,171873,57776],{"class":102},[92,171875,30373],{"class":98},[92,171877,171878],{"class":102}," randint ",[92,171880,31364],{"class":98},[92,171882,171883],{"class":102}," rint\n",[92,171885,171886],{"class":94,"line":11},[92,171887,2379],{"emptyLinePlaceholder":17},[92,171889,171890,171892,171895,171897,171899,171901],{"class":94,"line":1158},[92,171891,30396],{"class":151},[92,171893,171894],{"class":102},"(rint(",[92,171896,320],{"class":151},[92,171898,12415],{"class":102},[92,171900,549],{"class":151},[92,171902,30478],{"class":102},[63,171904,171906],{"id":171905},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[83,171908,171910],{"className":30359,"code":171909,"language":30361,"meta":10,"style":10},"from random import *\n",[89,171911,171912],{"__ignoreMap":10},[92,171913,171914,171916,171918,171920],{"class":94,"line":95},[92,171915,30718],{"class":98},[92,171917,57776],{"class":102},[92,171919,30373],{"class":98},[92,171921,171922],{"class":98}," *\n",[38,171924,171925],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[33,171927,171929],{"id":171928},"_912-常用内置模块","9.12 常用内置模块",[63,171931,171933],{"id":171932},"_9121-random","9.12.1 random",[83,171935,171937],{"className":30359,"code":171936,"language":30361,"meta":10,"style":10},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[89,171938,171939,171945,171949,171963,171982],{"__ignoreMap":10},[92,171940,171941,171943],{"class":94,"line":95},[92,171942,30373],{"class":98},[92,171944,45309],{"class":102},[92,171946,171947],{"class":94,"line":11},[92,171948,2379],{"emptyLinePlaceholder":17},[92,171950,171951,171953,171955,171957,171959,171961],{"class":94,"line":1158},[92,171952,30396],{"class":151},[92,171954,171776],{"class":102},[92,171956,320],{"class":151},[92,171958,12415],{"class":102},[92,171960,549],{"class":151},[92,171962,30478],{"class":102},[92,171964,171965,171967,171970,171972,171974,171976,171978,171980],{"class":94,"line":1173},[92,171966,30396],{"class":151},[92,171968,171969],{"class":102},"(random.choice([",[92,171971,149863],{"class":207},[92,171973,12415],{"class":102},[92,171975,150911],{"class":207},[92,171977,12415],{"class":102},[92,171979,159706],{"class":207},[92,171981,33124],{"class":102},[92,171983,171984,171986,171989,171991,171993,171995,171997,171999,172001,172003,172005,172007,172009,172011],{"class":94,"line":1179},[92,171985,30396],{"class":151},[92,171987,171988],{"class":102},"(random.sample([",[92,171990,320],{"class":151},[92,171992,12415],{"class":102},[92,171994,180],{"class":151},[92,171996,12415],{"class":102},[92,171998,174],{"class":151},[92,172000,12415],{"class":102},[92,172002,396],{"class":151},[92,172004,12415],{"class":102},[92,172006,422],{"class":151},[92,172008,112177],{"class":102},[92,172010,180],{"class":151},[92,172012,30478],{"class":102},[63,172014,172016],{"id":172015},"_9122-time","9.12.2 time",[83,172018,172020],{"className":30359,"code":172019,"language":30361,"meta":10,"style":10},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[89,172021,172022,172028,172032,172039,172047],{"__ignoreMap":10},[92,172023,172024,172026],{"class":94,"line":95},[92,172025,30373],{"class":98},[92,172027,31810],{"class":102},[92,172029,172030],{"class":94,"line":11},[92,172031,2379],{"emptyLinePlaceholder":17},[92,172033,172034,172036],{"class":94,"line":1158},[92,172035,30396],{"class":151},[92,172037,172038],{"class":102},"(time.time())\n",[92,172040,172041,172043,172045],{"class":94,"line":1173},[92,172042,95051],{"class":102},[92,172044,320],{"class":151},[92,172046,109],{"class":102},[92,172048,172049,172051,172053,172056],{"class":94,"line":1179},[92,172050,30396],{"class":151},[92,172052,103],{"class":102},[92,172054,172055],{"class":207},"\"1秒后执行\"",[92,172057,109],{"class":102},[63,172059,172061],{"id":172060},"_9123-datetime","9.12.3 datetime",[83,172063,172065],{"className":30359,"code":172064,"language":30361,"meta":10,"style":10},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[89,172066,172067,172079,172083,172093,172100],{"__ignoreMap":10},[92,172068,172069,172071,172074,172076],{"class":94,"line":95},[92,172070,30718],{"class":98},[92,172072,172073],{"class":102}," datetime ",[92,172075,30373],{"class":98},[92,172077,172078],{"class":102}," datetime\n",[92,172080,172081],{"class":94,"line":11},[92,172082,2379],{"emptyLinePlaceholder":17},[92,172084,172085,172088,172090],{"class":94,"line":1158},[92,172086,172087],{"class":102},"now ",[92,172089,148],{"class":98},[92,172091,172092],{"class":102}," datetime.now()\n",[92,172094,172095,172097],{"class":94,"line":1173},[92,172096,30396],{"class":151},[92,172098,172099],{"class":102},"(now)\n",[92,172101,172102,172104,172107,172110,172112,172115],{"class":94,"line":1179},[92,172103,30396],{"class":151},[92,172105,172106],{"class":102},"(now.strftime(",[92,172108,172109],{"class":207},"\"%Y-%m-",[92,172111,156666],{"class":151},[92,172113,172114],{"class":207}," %H:%M:%S\"",[92,172116,30478],{"class":102},[63,172118,172120],{"id":172119},"_9124-os","9.12.4 os",[83,172122,172124],{"className":30359,"code":172123,"language":30361,"meta":10,"style":10},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[89,172125,172126,172132,172136,172143],{"__ignoreMap":10},[92,172127,172128,172130],{"class":94,"line":95},[92,172129,30373],{"class":98},[92,172131,45286],{"class":102},[92,172133,172134],{"class":94,"line":11},[92,172135,2379],{"emptyLinePlaceholder":17},[92,172137,172138,172140],{"class":94,"line":1158},[92,172139,30396],{"class":151},[92,172141,172142],{"class":102},"(os.getcwd())\n",[92,172144,172145,172147,172150,172153],{"class":94,"line":1173},[92,172146,30396],{"class":151},[92,172148,172149],{"class":102},"(os.listdir(",[92,172151,172152],{"class":207},"\".\"",[92,172154,30478],{"class":102},[63,172156,172158],{"id":172157},"_9125-sys","9.12.5 sys",[83,172160,172162],{"className":30359,"code":172161,"language":30361,"meta":10,"style":10},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[89,172163,172164,172171,172175,172182],{"__ignoreMap":10},[92,172165,172166,172168],{"class":94,"line":95},[92,172167,30373],{"class":98},[92,172169,172170],{"class":102}," sys\n",[92,172172,172173],{"class":94,"line":11},[92,172174,2379],{"emptyLinePlaceholder":17},[92,172176,172177,172179],{"class":94,"line":1158},[92,172178,30396],{"class":151},[92,172180,172181],{"class":102},"(sys.version)\n",[92,172183,172184,172186],{"class":94,"line":1173},[92,172185,30396],{"class":151},[92,172187,172188],{"class":102},"(sys.path)\n",[33,172190,172192,172193,172195,172196,354],{"id":172191},"_913-if-name-main","9.13 if ",[252,172194,79790],{}," == \"",[252,172197,102033],{},[38,172199,172200,172201,172204],{},"模块被直接运行和被导入时，",[89,172202,172203],{},"__name__"," 的值不同。",[38,172206,172207,172208,24599],{},"创建 ",[89,172209,172210],{},"my_module.py",[83,172212,172214],{"className":30359,"code":172213,"language":30361,"meta":10,"style":10},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[89,172215,172216,172224,172234,172238,172242,172254],{"__ignoreMap":10},[92,172217,172218,172220,172222],{"class":94,"line":95},[92,172219,31928],{"class":98},[92,172221,5189],{"class":1942},[92,172223,151068],{"class":102},[92,172225,172226,172228,172230,172232],{"class":94,"line":11},[92,172227,4069],{"class":98},[92,172229,10849],{"class":102},[92,172231,584],{"class":98},[92,172233,151079],{"class":102},[92,172235,172236],{"class":94,"line":1158},[92,172237,2379],{"emptyLinePlaceholder":17},[92,172239,172240],{"class":94,"line":1173},[92,172241,2379],{"emptyLinePlaceholder":17},[92,172243,172244,172246,172248,172250,172252],{"class":94,"line":1179},[92,172245,1510],{"class":98},[92,172247,31201],{"class":151},[92,172249,101534],{"class":98},[92,172251,101537],{"class":207},[92,172253,3718],{"class":102},[92,172255,172256,172258,172260,172262,172264,172266],{"class":94,"line":1193},[92,172257,31280],{"class":151},[92,172259,166575],{"class":102},[92,172261,320],{"class":151},[92,172263,12415],{"class":102},[92,172265,180],{"class":151},[92,172267,30478],{"class":102},[38,172269,172270],{},"作用：",[46,172272,172273,172276],{},[49,172274,172275],{},"直接运行该文件时，执行测试代码。",[49,172277,172278],{},"被其他文件导入时，不执行测试代码。",[38,172280,172281],{},"这是写模块时很常用的习惯。",[33,172283,172285],{"id":172284},"_914-包","9.14 包",[38,172287,172288,172289,172292],{},"包是包含 ",[89,172290,172291],{},"__init__.py"," 的目录，用于组织多个模块。",[38,172294,172295],{},"目录结构：",[83,172297,172300],{"className":172298,"code":172299,"language":5167,"meta":10},[5165],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[89,172301,172299],{"__ignoreMap":10},[38,172303,172304],{},"导入：",[83,172306,172308],{"className":30359,"code":172307,"language":30361,"meta":10,"style":10},"from utils.file_utils import read_file\n",[89,172309,172310],{"__ignoreMap":10},[92,172311,172312,172314,172317,172319],{"class":94,"line":95},[92,172313,30718],{"class":98},[92,172315,172316],{"class":102}," utils.file_utils ",[92,172318,30373],{"class":98},[92,172320,172321],{"class":102}," read_file\n",[38,172323,172324,172326],{},[89,172325,172291],{}," 可以为空，也可以写包初始化逻辑。",[33,172328,172330],{"id":172329},"_915-第三方包","9.15 第三方包",[38,172332,172333,172334,172336],{},"第三方包通过 ",[89,172335,23811],{}," 安装。",[83,172338,172340],{"className":23802,"code":172339,"language":23804,"meta":10,"style":10},"pip install requests\n",[89,172341,172342],{"__ignoreMap":10},[92,172343,172344,172346,172348],{"class":94,"line":95},[92,172345,23811],{"class":1942},[92,172347,23814],{"class":207},[92,172349,146073],{"class":207},[38,172351,172352],{},"使用：",[83,172354,172356],{"className":30359,"code":172355,"language":30361,"meta":10,"style":10},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[89,172357,172358,172364,172368,172383],{"__ignoreMap":10},[92,172359,172360,172362],{"class":94,"line":95},[92,172361,30373],{"class":98},[92,172363,146073],{"class":102},[92,172365,172366],{"class":94,"line":11},[92,172367,2379],{"emptyLinePlaceholder":17},[92,172369,172370,172373,172375,172378,172381],{"class":94,"line":1158},[92,172371,172372],{"class":102},"response ",[92,172374,148],{"class":98},[92,172376,172377],{"class":102}," requests.get(",[92,172379,172380],{"class":207},"\"https:\u002F\u002Fwww.example.com\"",[92,172382,109],{"class":102},[92,172384,172385,172387],{"class":94,"line":1173},[92,172386,30396],{"class":151},[92,172388,172389],{"class":102},"(response.status_code)\n",[38,172391,172392],{},"查看已安装包：",[83,172394,172396],{"className":23802,"code":172395,"language":23804,"meta":10,"style":10},"pip list\n",[89,172397,172398],{"__ignoreMap":10},[92,172399,172400,172402],{"class":94,"line":95},[92,172401,23811],{"class":1942},[92,172403,118930],{"class":207},[38,172405,172406],{},"导出项目依赖：",[83,172408,172409],{"className":23802,"code":146268,"language":23804,"meta":10,"style":10},[89,172410,172411],{"__ignoreMap":10},[92,172412,172413,172415,172417,172419],{"class":94,"line":95},[92,172414,23811],{"class":1942},[92,172416,146277],{"class":207},[92,172418,26203],{"class":98},[92,172420,146282],{"class":207},[38,172422,172423],{},"安装项目依赖：",[83,172425,172426],{"className":23802,"code":146288,"language":23804,"meta":10,"style":10},[89,172427,172428],{"__ignoreMap":10},[92,172429,172430,172432,172434,172436],{"class":94,"line":95},[92,172431,23811],{"class":1942},[92,172433,23814],{"class":207},[92,172435,119614],{"class":151},[92,172437,146282],{"class":207},[33,172439,172441],{"id":172440},"_916-模块搜索路径","9.16 模块搜索路径",[38,172443,172444,172445,172448],{},"Python 导入模块时会在 ",[89,172446,172447],{},"sys.path"," 中查找。",[83,172450,172452],{"className":30359,"code":172451,"language":30361,"meta":10,"style":10},"import sys\n\nfor path in sys.path:\n    print(path)\n",[89,172453,172454,172460,172464,172476],{"__ignoreMap":10},[92,172455,172456,172458],{"class":94,"line":95},[92,172457,30373],{"class":98},[92,172459,172170],{"class":102},[92,172461,172462],{"class":94,"line":11},[92,172463,2379],{"emptyLinePlaceholder":17},[92,172465,172466,172468,172471,172473],{"class":94,"line":1158},[92,172467,3004],{"class":98},[92,172469,172470],{"class":102}," path ",[92,172472,26024],{"class":98},[92,172474,172475],{"class":102}," sys.path:\n",[92,172477,172478,172480],{"class":94,"line":1173},[92,172479,31280],{"class":151},[92,172481,169204],{"class":102},[38,172483,172484],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[38,172486,157598],{},[83,172488,172491],{"className":172489,"code":172490,"language":5167,"meta":10},[5165],"random.py\njson.py\ntime.py\n",[89,172492,172490],{"__ignoreMap":10},[38,172494,172495],{},"这些文件名可能导致导入异常。",[33,172497,172499],{"id":172498},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[38,172501,172295],{},[83,172503,172506],{"className":172504,"code":172505,"language":5167,"meta":10},[5165],"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",[89,172507,172505],{"__ignoreMap":10},[38,172509,172510,24599],{},[89,172511,172512],{},"utils\u002Ffile_utils.py",[83,172514,172516],{"className":30359,"code":172515,"language":30361,"meta":10,"style":10},"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",[89,172517,172518,172524,172534,172538,172542,172552,172562,172570,172576,172580,172607,172617,172621,172625,172635,172661],{"__ignoreMap":10},[92,172519,172520,172522],{"class":94,"line":95},[92,172521,30373],{"class":98},[92,172523,147066],{"class":102},[92,172525,172526,172528,172530,172532],{"class":94,"line":11},[92,172527,30718],{"class":98},[92,172529,108286],{"class":102},[92,172531,30373],{"class":98},[92,172533,108291],{"class":102},[92,172535,172536],{"class":94,"line":1158},[92,172537,2379],{"emptyLinePlaceholder":17},[92,172539,172540],{"class":94,"line":1173},[92,172541,2379],{"emptyLinePlaceholder":17},[92,172543,172544,172546,172549],{"class":94,"line":1179},[92,172545,31928],{"class":98},[92,172547,172548],{"class":1942}," read_json",[92,172550,172551],{"class":102},"(path):\n",[92,172553,172554,172557,172559],{"class":94,"line":1193},[92,172555,172556],{"class":102},"    path ",[92,172558,148],{"class":98},[92,172560,172561],{"class":102}," Path(path)\n",[92,172563,172564,172566,172568],{"class":94,"line":1199},[92,172565,3080],{"class":98},[92,172567,38911],{"class":98},[92,172569,169285],{"class":102},[92,172571,172572,172574],{"class":94,"line":1290},[92,172573,14732],{"class":98},[92,172575,51818],{"class":102},[92,172577,172578],{"class":94,"line":1296},[92,172579,2379],{"emptyLinePlaceholder":17},[92,172581,172582,172584,172586,172589,172591,172593,172595,172597,172599,172601,172603,172605],{"class":94,"line":1308},[92,172583,34159],{"class":98},[92,172585,146766],{"class":151},[92,172587,172588],{"class":102},"(path, ",[92,172590,146776],{"class":207},[92,172592,12415],{"class":102},[92,172594,146781],{"class":5196},[92,172596,148],{"class":98},[92,172598,146786],{"class":207},[92,172600,13694],{"class":102},[92,172602,31364],{"class":98},[92,172604,148128],{"class":5196},[92,172606,3718],{"class":102},[92,172608,172609,172611,172613,172615],{"class":94,"line":1591},[92,172610,14732],{"class":98},[92,172612,148139],{"class":102},[92,172614,45335],{"class":5196},[92,172616,109],{"class":102},[92,172618,172619],{"class":94,"line":1596},[92,172620,2379],{"emptyLinePlaceholder":17},[92,172622,172623],{"class":94,"line":1602},[92,172624,2379],{"emptyLinePlaceholder":17},[92,172626,172627,172629,172632],{"class":94,"line":1607},[92,172628,31928],{"class":98},[92,172630,172631],{"class":1942}," write_json",[92,172633,172634],{"class":102},"(path, data):\n",[92,172636,172637,172639,172641,172643,172645,172647,172649,172651,172653,172655,172657,172659],{"class":94,"line":1621},[92,172638,34159],{"class":98},[92,172640,146766],{"class":151},[92,172642,172588],{"class":102},[92,172644,151951],{"class":207},[92,172646,12415],{"class":102},[92,172648,146781],{"class":5196},[92,172650,148],{"class":98},[92,172652,146786],{"class":207},[92,172654,13694],{"class":102},[92,172656,31364],{"class":98},[92,172658,148128],{"class":5196},[92,172660,3718],{"class":102},[92,172662,172663,172666,172668,172670,172672,172674,172676,172678,172680,172682,172684],{"class":94,"line":1626},[92,172664,172665],{"class":102},"        json.dump(data, ",[92,172667,45335],{"class":5196},[92,172669,12415],{"class":102},[92,172671,147112],{"class":5196},[92,172673,148],{"class":98},[92,172675,33968],{"class":151},[92,172677,12415],{"class":102},[92,172679,151987],{"class":5196},[92,172681,148],{"class":98},[92,172683,180],{"class":151},[92,172685,109],{"class":102},[38,172687,172688,24599],{},[89,172689,154582],{},[83,172691,172693],{"className":30359,"code":172692,"language":30361,"meta":10,"style":10},"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",[89,172694,172695,172706,172710,172723,172743],{"__ignoreMap":10},[92,172696,172697,172699,172701,172703],{"class":94,"line":95},[92,172698,30718],{"class":98},[92,172700,172316],{"class":102},[92,172702,30373],{"class":98},[92,172704,172705],{"class":102}," read_json, write_json\n",[92,172707,172708],{"class":94,"line":11},[92,172709,2379],{"emptyLinePlaceholder":17},[92,172711,172712,172714,172716,172719,172721],{"class":94,"line":1158},[92,172713,159691],{"class":102},[92,172715,148],{"class":98},[92,172717,172718],{"class":102}," read_json(",[92,172720,151806],{"class":207},[92,172722,109],{"class":102},[92,172724,172725,172727,172729,172731,172733,172735,172737,172739,172741],{"class":94,"line":1173},[92,172726,170509],{"class":102},[92,172728,62659],{"class":207},[92,172730,51417],{"class":102},[92,172732,149863],{"class":207},[92,172734,12415],{"class":102},[92,172736,151447],{"class":207},[92,172738,51417],{"class":102},[92,172740,1092],{"class":151},[92,172742,165127],{"class":102},[92,172744,172745,172748,172750],{"class":94,"line":1179},[92,172746,172747],{"class":102},"write_json(",[92,172749,151806],{"class":207},[92,172751,172752],{"class":102},", students)\n",[33,172754,172756],{"id":172755},"_918-易错点","9.18 易错点",[46,172758,172759,172762,172767,172772,172775,172778],{},[49,172760,172761],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[49,172763,172764,172765,28366],{},"能指定异常类型就不要裸写 ",[89,172766,170869],{},[49,172768,172769,172771],{},[89,172770,171244],{}," 无论是否出错都会执行。",[49,172773,172774],{},"模块文件名不要和标准库重名。",[49,172776,172777],{},"导入自己写的模块时，要注意运行目录。",[49,172779,172780],{},"第三方包要安装到当前解释器或虚拟环境中。",[33,172782,172784],{"id":172783},"_919-本章练习","9.19 本章练习",[46,172786,172787,172790,172793,172799,172806],{},[49,172788,172789],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[49,172791,172792],{},"写函数读取文件，如果文件不存在则返回空字符串。",[49,172794,172207,172795,172798],{},[89,172796,172797],{},"math_utils.py","，实现加减乘除函数并导入使用。",[49,172800,172801,172802,172805],{},"创建一个 ",[89,172803,172804],{},"utils"," 包，把 JSON 读写函数放进去。",[49,172807,172808],{},"写一个程序，捕获除零异常和输入格式异常。",[5106,172810,172811],{},"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":10,"searchDepth":11,"depth":11,"links":172813},[172814,172815,172816,172817,172818,172819,172820,172821,172822,172823,172824,172830,172837,172839,172840,172841,172842,172843,172844],{"id":170666,"depth":11,"text":170667},{"id":170794,"depth":11,"text":170795},{"id":170843,"depth":11,"text":170844},{"id":170992,"depth":11,"text":170993},{"id":171164,"depth":11,"text":171165},{"id":171233,"depth":11,"text":171234},{"id":171344,"depth":11,"text":171345},{"id":171470,"depth":11,"text":171471},{"id":171595,"depth":11,"text":171596},{"id":171650,"depth":11,"text":171651},{"id":171749,"depth":11,"text":171750,"children":172825},[172826,172827,172828,172829],{"id":171753,"depth":1158,"text":171754},{"id":171787,"depth":1158,"text":171788},{"id":171826,"depth":1158,"text":171827},{"id":171905,"depth":1158,"text":171906},{"id":171928,"depth":11,"text":171929,"children":172831},[172832,172833,172834,172835,172836],{"id":171932,"depth":1158,"text":171933},{"id":172015,"depth":1158,"text":172016},{"id":172060,"depth":1158,"text":172061},{"id":172119,"depth":1158,"text":172120},{"id":172157,"depth":1158,"text":172158},{"id":172191,"depth":11,"text":172838},"9.13 if name == \"main\"",{"id":172284,"depth":11,"text":172285},{"id":172329,"depth":11,"text":172330},{"id":172440,"depth":11,"text":172441},{"id":172498,"depth":11,"text":172499},{"id":172755,"depth":11,"text":172756},{"id":172783,"depth":11,"text":172784},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170658,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172851,"title":172852,"body":172853,"description":173016,"extension":14,"meta":173017,"navigation":17,"path":173018,"seo":173019,"stem":173020,"__hash__":173021},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172854,"toc":173011},[172855,172858,172861,172864,172875,172877,172951,172954,172957,172960,172963,172966,172969,172972,172975,172978,172981],[29,172856,172852],{"id":172857},"python教程",[38,172859,172860],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[38,172862,172863],{},"建议学习环境：",[46,172865,172866,172869,172872],{},[49,172867,172868],{},"Python 版本：Python 3.10 及以上。",[49,172870,172871],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[49,172873,172874],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[33,172876,117053],{"id":117053},[46,172878,172879,172885,172891,172897,172903,172909,172915,172921,172927,172933,172939,172945],{},[49,172880,172881],{},[341,172882,172884],{"href":172883},".\u002Fch1-Python","Python环境与第一个程序",[49,172886,172887],{},[341,172888,172890],{"href":172889},".\u002Fch2","基础语法、变量与字符串",[49,172892,172893],{},[341,172894,172896],{"href":172895},".\u002Fch3","判断语句",[49,172898,172899],{},[341,172900,172902],{"href":172901},".\u002Fch4","循环语句",[49,172904,172905],{},[341,172906,172908],{"href":172907},".\u002Fch5","函数基础",[49,172910,172911],{},[341,172912,172914],{"href":172913},".\u002Fch6","数据容器",[49,172916,172917],{},[341,172918,172920],{"href":172919},".\u002Fch7","函数进阶",[49,172922,172923],{},[341,172924,172926],{"href":172925},".\u002Fch8","文件操作",[49,172928,172929],{},[341,172930,172932],{"href":172931},".\u002Fch9","异常、模块与包",[49,172934,172935],{},[341,172936,172938],{"href":172937},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[49,172940,172941],{},[341,172942,172944],{"href":172943},".\u002Fch11","面向对象基础",[49,172946,172947],{},[341,172948,172950],{"href":172949},".\u002Fch12","综合案例与复习路线",[33,172952,172953],{"id":172953},"学习路线",[38,172955,172956],{},"第一阶段：能运行程序。",[38,172958,172959],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[38,172961,172962],{},"第二阶段：能组织数据。",[38,172964,172965],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[38,172967,172968],{},"第三阶段：能封装逻辑。",[38,172970,172971],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[38,172973,172974],{},"第四阶段：能做小项目。",[38,172976,172977],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[33,172979,172980],{"id":172980},"参考资料",[46,172982,172983,172990,172997,173004],{},[49,172984,172985,172986],{},"黑马程序员 Python 入门教程推荐：",[341,172987,172988],{"href":172988,"rel":172989},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23845],[49,172991,172992,172993],{},"Python 官方中文教程：",[341,172994,172995],{"href":172995,"rel":172996},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23845],[49,172998,172999,173000],{},"Python 标准库文档：",[341,173001,173002],{"href":173002,"rel":173003},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23845],[49,173005,173006,173007],{},"pyecharts 文档：",[341,173008,173009],{"href":173009,"rel":173010},"https:\u002F\u002Fpyecharts.org\u002F",[23845],{"title":10,"searchDepth":11,"depth":11,"links":173012},[173013,173014,173015],{"id":117053,"depth":11,"text":117053},{"id":172953,"depth":11,"text":172953},{"id":172980,"depth":11,"text":172980},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23358},"\u002Fwiki\u002F2024-10-10-python",{"title":172852,"description":173016},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331413970]